Ground truth: four colours for sim/live × ADS-B/dark - #357
Conversation
The truth dots split two ways now that the fleet mirrors live-feed aircraft alongside its own spawns: provenance (simulated vs live) and transponder (ADS-B vs dark). One resolver, map/truthColor, gives each of the four plain- aircraft classes its own fill and rim, keeps anomalous and drone ahead of provenance, and reads an older payload with neither field as simulated ADS-B. The live map's canvas layer, the aircraft list, the legend and the Physics tab's preview map all draw through it, so an object is one colour everywhere. Simulated truth stays the neutral ramp (near-black / near-white, then grey). Live-feed truth is a teal ramp — the one hue family no lane or furniture uses — measured like the rest of the palette: every value clears its theme's contrast floor and sits CIEDE2000 >= 13 from every other mark, >= 22 from the neutral pair and >= 24 from its own partner. light TRUTH_LIVE teal-900 #134e4a TRUTH_LIVE_DARK teal-600 #0d9488 dark TRUTH_LIVE teal-200 #99f6e4 TRUTH_LIVE_DARK teal-600 #0d9488 The map legend lists the four truth rows; the detail panel names the source; the Physics tab's live card takes the teal accents and its badge splits the live count into ADS-B / dark. The dashed-ring hint the preview map used is replaced by the colour. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
Measured 21.9 from slate-800, but on the map a 9 px teal-900 dot beside a slate-800 one read as two blacks. teal-800 keeps every floor (7.1:1; ΔE 13.1 from the seed lane, 25.5 from TRUTH, 19.3 from its teal-600 partner) and is visibly teal. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Claude finished @jehanazad's task in 2m 49s —— View job Todo list
ReviewSolid, well-tested refactor — one resolver replacing four copies of near-identical class/colour logic, and New commit ( One correctness nit worth fixing (new, not covered by the prior review pass):
Still open from the prior review pass (not addressed by
Not run: same sandbox limitation as the prior pass — No API contract changes are implicated (nothing under |
|
Live on the test droplet (detached checkout of
Left deployed on test. |
Resolves 21 conflicting files against 53 commits on main, including the two pieces already split out of this PR (#351 identity scrub, #355 receiver-geometry withholding), #358 site markers / empirical coverage, #348 location privacy, #350/#353/#354 owner contact and retnode links, and the #343/#346/#347/#357 palette work. Rules applied: main's version is the base for the add/add files (public_geometry.py, test_no_real_identities.py); the PR's ref-keying is layered on top of main's rework everywhere else; substitution still runs last on every publication path and fails closed for unregistered real nodes. Follow-on edits outside the conflicted set, needed to compile or to keep main's tests honest under ref addressing: frontend nodeSites.ts (+test) now reads is_synthetic; backend test_node_ref.py and test_public_geometry.py address routes by ref / synthetic id; analytics.py's owner-private listing merge keys on the owner identity. Verified: backend 3495 passed / 2 skipped, ruff clean; frontend tsc, lint, vite build, vitest 232 passed; dashboard tsc, eslint, vitest 53 passed, build. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Summary
Now that the fleet mirrors live-feed aircraft alongside its own spawns (#356), ground truth needs to answer two questions per dot: simulated or live-feed, and ADS-B or dark. This gives each of the four classes its own colour, in both themes, everywhere truth is drawn.
TRUTH(neutral extreme, unchanged)TRUTH_DARK(grey, unchanged)TRUTH_LIVEteal-900 / teal-200TRUTH_LIVE_DARKteal-600map/truthColor.ts: one resolver (truthClass/truthFill/truthBorder/truthLegend) used by the live map's ground-truth canvas layer, the aircraft list's truth-only rows, the map legend (now four truth rows) and the Physics tab's preview map, so an object is the same colour on every surface. Anomalous and drone stay ahead of provenance; an older payload with neitherhas_adsbnorsourcereads as simulated ADS-B.mapPalette.ts(WCAG contrast against each theme's basemap + CIEDE2000 against every existing mark): every value clears its theme's floor (light ≥ 3.5:1, dark ≥ 4.7:1) and sits ΔE ≥ 13 from every other mark (worst: teal-600 vs the solver-seed lane on light), ≥ 22 from the neutral truth pair, ≥ 24 from its own partner.groundTruthFixescarriessourcethrough to the fixes; the detail panel's Simulation section names it; the Physics tab's live card takes the teal accents and its badge splits the live count into ADS-B / dark (the dashed-ring hint on the preview map is replaced by the colour).Test plan
truthColor.test.ts(new): class resolution, four distinct fills per theme, selection rim, legend/dot agreementvitest rungreen;tsc --noEmitandvite buildclean🤖 Generated with Claude Code