fix(stars): focused-star sphere falls back to the focus slot#469
Merged
Conversation
The close-range field-star sphere gated on selectionRows.select alone, but the #focus=star-<recordIdx> URL-restore path fills only the focus slot — so a deep link arrived at an invisible star (the Gaia point sprite is distance-retired in-shader at that range by design). The layer's three sites (enabled/draw/drawPick) now share one module-local focusedStarRow helper: the select slot's star row if select is a star, else the focus slot's star row. The star-check is per slot, so a non-star select row does not suppress a star focus row. Backlog: the braid item is picked up by this change; the remaining deselect-at-close-range blink (clearSelection nulls both slots) is re-filed as the narrower presence-by-proximity un-braid, needs-design. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
skymap | 1d50cd8 | Commit Preview URL Branch Preview URL |
Jul 21 2026, 12:14 AM |
…ands watchSelectionRowsSaga's late-arrival gap-fill was keyed on catalogLoaded alone — the galaxy cloud's commit signal. The Gaia star bin commits via engineSourceCountReported and never dispatches catalogLoaded, so a #focus=star-<recordIdx> deep link (whose ref resolves statically at bootstrap, before the bin loads) left its focus row null forever: camera arrives, but no star body and no InfoCard. The gap-fill now fires on both commit pulses; the handler is guarded and idempotent, so extra firings are no-ops. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…election The close-range star sphere gated on selection rows, so clearing the selection (background click, Esc) blinked the body out while the camera still sat at solar-radius range — the sphere is the star's only close-range geometry (the Gaia sprite is distance-retired in-shader for its f32 swim). Presence is a fact about where the camera is: the renamed fieldStarSphereLayer now asks nearestResolvableStar (expanded-box octree descent, so a star just across a leaf face is still found; positions reconstructed through the one shared resolveStarRecord formula) for the nearest star each frame, with a 4px-on / 3.2px-off hysteresis band so the threshold cannot strobe. Selection now only decorates (halo, InfoCard); the select-else-focus fallback this replaces is deleted. Backlog: presence-by-proximity item implemented and removed; the "resolve predicate duplicated" item died with starResolves. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
rulkens
marked this pull request as ready for review
July 21, 2026 00:25
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Three fixes un-braiding the close-range field-star body from selection state — surfaced by smoke-testing
#focus=star-<recordIdx>deep links and background-click deselection at solar-radius range.360d765c— the sphere layer falls back to thefocusslot whenselectholds no star (per-slot star check, module-localfocusedStarRow). (Superseded by 3, kept for history.)5af3dc3a—watchSelectionRowsSaga's late-arrival gap-fill now fires on both catalog-commit pulses. The star bin commits viaengineSourceCountReportedand never dispatchescatalogLoaded, so a star deep-link's focus row previously stayed null forever: camera arrives, no body, no InfoCard.e2d36723— presence-by-proximity: the renamedfieldStarSphereLayerderives WHICH star gets a body fromnearestResolvableStar(expanded-box octree descent — a star just across a leaf face is still found; positions reconstructed through the one sharedresolveStarRecordformula) with a 4px-on / 3.2px-off hysteresis band. Selection now only decorates (halo, InfoCard) and can never blink the body out. The commit-1 fallback is deleted as dead.Also merges
origin/main(perf harness #464, reversed-Z #466 lineage) and sweeps two backlog items (both implemented here).Verification
npm run typecheckclean;npm test4611/4611 green.nearestResolvableStar(nearest-wins, null-when-far, leaf-face edge, position parity withresolveStarRecord); layer presence with no selection, hysteresis band both directions, recede-clears, pick-id packing.Smoke checklist
#focus=star-4731668deep link → visible, clickable star sphere + InfoCard on arrival.🤖 Generated with Claude Code