Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
464c8e8
docs(spec): poi-free codebase design
rulkens Jun 7, 2026
1413f14
docs(plan): poi-free codebase implementation plan
rulkens Jun 7, 2026
b0ff786
docs(plan): explicit category display fields; famous shows "Famous Ga…
rulkens Jun 8, 2026
0e1a4a8
docs(plan): fix A3 display-field source reference
rulkens Jun 8, 2026
2e55d10
feat(sources): add bearsLabel/bearsMarker + category display fields t…
rulkens Jun 8, 2026
a219056
feat(data): derive LABEL_CATEGORIES + LabelCategory from the registry
rulkens Jun 8, 2026
595e6b3
feat(data): fold category display copy into registry-derived CATEGORY…
rulkens Jun 8, 2026
8c98f12
refactor: replace PoiCategory with LabelCategory; narrow marker axis …
rulkens Jun 8, 2026
02e3b28
refactor(engine): route label visibility on labelLayer data, not a fa…
rulkens Jun 8, 2026
137d0fc
docs(plan): tick Phase A (A1–A5 complete)
rulkens Jun 8, 2026
c3232d1
feat(url): decode structure ids in the focus codec
rulkens Jun 8, 2026
91ff9ca
feat(url): drop #poi= from the deep-link detector
rulkens Jun 8, 2026
4093900
feat(url): route structures through the single #focus= codec in useUr…
rulkens Jun 8, 2026
cfe23b0
refactor(url): delete the poiUrl codec
rulkens Jun 8, 2026
6b5d24f
docs(plan): tick Phase B (B1–B4 complete)
rulkens Jun 8, 2026
3d2a9dc
refactor: rename isPoi/resolvePoiFromPick/poiIndex to structure vocab…
rulkens Jun 8, 2026
9800dfc
docs(plan): tick C1/C2/C4
rulkens Jun 8, 2026
03a4761
refactor: rename structurePoiStyles → structureMarkerStyles
rulkens Jun 8, 2026
a9a9404
docs(plan): tick C3
rulkens Jun 8, 2026
4c9b372
refactor: rename FocusState.poiId → structureId and selectedPoi → sel…
rulkens Jun 8, 2026
9a5f487
docs(plan): tick C5/C6
rulkens Jun 8, 2026
6963e3c
refactor: rename 'poi' label-layer key to 'structure'; begin poi comm…
rulkens Jun 8, 2026
2268d94
refactor: finish the poi/POI comment + local-var sweep
rulkens Jun 8, 2026
afe3f97
refactor: rename *.poi.test.ts files; drop unused Source imports
rulkens Jun 8, 2026
970e9f6
docs(plan): tick C7/C8 — poi-free plan complete
rulkens Jun 8, 2026
1f4f2b8
refactor: name the category→label-layer subset type
rulkens Jun 8, 2026
fee8697
docs(plan): mark poi-free-codebase complete
rulkens Jun 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions docs/BACKLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,6 @@ From [ADR 0001 §"explicitly not deciding"](adrs/0001-fade-ownership.md):

Diagnosed but unplanned. Captured here so they don't get lost; promote to a spec or plan when prioritised. Most have richer notes in agent memory (`~/.claude/projects/-Users-rulkens-Development-js-skymap/memory/`).

- **Make the codebase `poi`-free (`poi*` → `structure*`)** — **Priority: high.** The data layer is already `StructureRecord` and the InfoCard family was renamed to `StructureDetailCard` / `CompactStructureCard` (`structure` props, `Structure` eyebrow). The legacy `poi` vocabulary survives in the engine/identity/URL layers and reads as a second name for the same concept — the exact "two names, one thing" wart the simplicity convention flags. Holdouts found 2026-06-07:
- **`isPoi` predicate** (`services/engine/isPoi.ts`) — imported by ~8 non-InfoCard sites (`FocusableTarget.d.ts`, `EngineCallbacks.d.ts`, `EngineCameraHandle.d.ts`, `useUrlSync.ts`, `useStructureMemberCount.ts`, `engine.ts`, `commitFocus.ts` + tests). Rename to `isStructure`.
- **`POI_CATEGORY_INFO` / `data/poiCategoryInfo.ts` / `PoiCategory` type** (`@types/engine/data/PoiCategory.d.ts`) — the category-info table + its type alias; co-design with the `STRUCTURE_CATEGORY_META` consolidation in the DRY item below (don't merge the genuinely-different category *lists*).
- **`poiUrl` / `resolvePoiFromPick`** (`services/url/poiUrl.ts`, `services/engine/helpers/resolvePoiFromPick.ts`) and the engine `selectedPoi` params in `selectionRingPass.ts` / `EngineSubsystemHandles.d.ts` / `engine.ts`.
- **⚠️ The `#poi=` deep-link URL param** (`services/url/poiUrl.ts`, `utils/url/hasDeepLink.ts`, `App.tsx`) is a **persisted format** — existing shared links use `#poi=cluster-…`. Renaming the param string would break them, so this needs a back-compat read (accept both `#poi=` and a new `#structure=`) or must be deliberately left as-is. Decide explicitly; do **not** blind-rename.

**Approach:** run `entanglement-radar` first to map the knots and the `#poi=` back-compat boundary, then apply via `/simplify` (delegate the edits per `feedback_simplify_edits_in_subagent`). Pairs with the `cluster* → structure*` naming migration and the structure-category-identity DRY item below — all three are the same "converge on `Structure*` vocabulary" cleanup. Mechanical apart from the URL-param decision; typecheck + tests are the safety net.
- **Mobile layout reflow** — hover-on-touch is handled (`disable hover on touch input`, #226: hover-only affordances now route through tap). What remains is the general responsive layout pass: reflow the InfoCard / SettingsPanel / StatusBar for narrow viewports so the UI is usable on a phone, not just non-broken. **Update 2026-06-07:** the InfoCard half is specced — [2026-06-07 mobile bottom-sheet design](superpowers/specs/2026-06-07-mobile-info-card-bottom-sheet-design.md) (awaiting plan); the SettingsPanel launcher is a gated fast-follow pending an `entanglement-radar` pass over `SettingsPanel`.
- **Lower-tier "close to home" weighting** — retune the small/medium tier subsampling so more galaxies survive near the camera's home position for maximum visual density on first load, while keeping the on-screen count fast. Distinct from the deliberate SDSS far-shell sample (memory `project_sdss_medium_intentionally_far`).
- **Densely seed the Local Volume across all tiers (group explorability)** — surfaced 2026-06-04 with the `group` category. The 16 Local Volume groups are only interesting to fly into if their *member* galaxies are present, but `subsampleByAbsMag` (`tools/catalog/`) thins the nearby volume by absolute-magnitude cut, so faint dwarfs in the Local Group / M81 / Cen A / Sculptor etc. get culled — a group ring you focus into can be nearly empty at small/medium tier. Bias the subsampling to **keep galaxies inside (or near) the featured group spheres** regardless of `M_abs`, across small + medium and ideally large tiers, so each group has as many members as possible. Related to but distinct from the "close to home" weighting above: that's camera-home density; this is per-group membership density keyed off the structure seed. Implementation hooks: the group seed positions/radii (`data/structure_anchors.seed.json`) are available to the build, so the subsampler can spare points within `apparentRadiusMpc` of each group centre. Keep an eye on the on-screen count budget. Pairs with the cluster-focus member count (`PoiDetailCard` "Galaxies" row) — denser seeding makes that number meaningful at lower tiers.
Expand Down
Loading
Loading