fix: restore signs after navigation

This commit is contained in:
2026-09-03 02:59:10 +03:00
parent cce018d3cb
commit 4404c07f93
5 changed files with 71 additions and 8 deletions

View File

@@ -30,7 +30,9 @@ Only forward `passive-scroll` samples with motion enabled are eligible. The open
| `toolkit` | Toolkit | 07 | outer-left | ≤0.55vh or actual arrival | outside the toolkit content corridor |
| `contact` | Contact | 08 | right | ≤0.55vh or actual arrival | opposite the Contact destination content |
The controller owns exactly one visible target. A concealed sign can retarget immediately. A visible label is immutable; a newer candidate is coalesced as the pending target. Completed targets are suppressed for the current journey so small oscillations cannot spam them. A stale readable target completes its minimum dwell before departing. Initialization, explicit navigation (including skip links and direct fragments), history restoration, Static mode, and reduced motion remain intentionally suppressed. Visibility loss resets transient lifecycle state.
The controller owns exactly one visible target. A concealed sign can retarget immediately. A visible label is immutable; a newer candidate is coalesced as the pending target. Completed targets are suppressed for the current passive traversal so small oscillations cannot spam them. A stale readable target completes its minimum dwell before departing. Initialization, explicit navigation (including skip links and direct fragments), history restoration, Static mode, and reduced motion remain intentionally suppressed. Visibility loss resets transient lifecycle state.
The navigator-recovery follow-up corrected the traversal boundary itself. Suppressed explicit/history/initial samples previously marked whichever active section they observed as completed, including transient sections crossed by a navigator jump. That completion ledger then survived the return to Start and could suppress the correct next sign indefinitely. Non-passive navigation now clears the passive-traversal completion ledger while still rendering no sign. The next real wheel, touch, or scroll-key epoch therefore starts eligible and deterministic; completion remains sticky only inside uninterrupted passive travel, preserving the small-oscillation anti-spam rule. Unit coverage drives a completed Profile lifecycle through Contact and back to Start, while the browser regression clicks Profile, returns through the navigator, and proves the next passive Profile sign renders on both desktop and mobile.
## Lifecycle contract