From 7637fc8bbe165be297794a74187aa1065e82486c Mon Sep 17 00:00:00 2001 From: seonghobae Date: Mon, 31 Aug 2026 10:28:37 +0000 Subject: [PATCH] feat(reports): leftover-map comparison leftover-axis origin ticks independently of leftover-map axis share and leftover-map singular values (v2.102.0) --- AGENTS.md | 7 ++ ARCHITECTURE.md | 2 + ...over-map-compare-axis-tick-origin-badge.md | 17 ++++ CHANGELOG.md | 15 +++ CLAUDE.md | 2 +- ...29-leftover-map-compare-axis-tick-badge.md | 2 + ...tover-map-compare-axis-tick-share-badge.md | 2 + ...over-map-compare-plot-tick-origin-badge.md | 2 + ...over-map-compare-axis-tick-origin-badge.md | 97 +++++++++++++++++++ docs/product-technical-gap-baseline.md | 10 ++ frontend/package.json | 2 +- frontend/src/App.test.tsx | 15 ++- frontend/src/components/LeftoverMapPlot.tsx | 5 +- frontend/src/i18n.test.ts | 45 +++++++++ frontend/src/i18n.ts | 32 ++++++ frontend/src/leftoverMapAxisBadge.ts | 2 + .../src/leftoverMapPlotAxisSingular.test.ts | 85 +++++++++++++++- frontend/src/leftoverMapPlotAxisSingular.ts | 35 +++++-- frontend/src/leftoverMapPlotLayout.ts | 3 + pyproject.toml | 2 +- 20 files changed, 363 insertions(+), 19 deletions(-) create mode 100644 CHANGELOG.d/2.102.0-leftover-map-compare-axis-tick-origin-badge.md create mode 100644 docs/adr/0345-leftover-map-compare-axis-tick-origin-badge.md diff --git a/AGENTS.md b/AGENTS.md index e1d81f795..6d32c5900 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -836,6 +836,11 @@ returns a leftover-map origin tick caption independently of leftover-map axis sh `leftover map comparison graphic leftover-map axis {axis} origin tick {value}`. Rank-0 unused axes still name leftover-map origin `0.00`. Share and singular omit independently. Do not invent leftover-map origin from leftover-map axis share or leftover-map singular values `σ_k`. leftoverMapPlotTickAxisBadge stays leftover-map graphic leftover-map axis origin tick keys. leftoverMapCompareAxisTickBadge and leftoverMapAxisTickBadge stay leftover-map tick keys this increment. +ADR 0345 captions leftover-map comparison leftover-axis origin ticks with leftover-map origin when leftoverMapCompareAxisTickBadge +returns a leftover-map origin tick caption independently of leftover-map axis share and leftover-map singular values. Distinct accessible name +`leftover map comparison leftover axis {axis} origin tick {value}`. Rank-0 unused axes still name leftover-map origin `0.00`. Share and singular omit independently. +Do not invent leftover-map origin from leftover-map axis share or leftover-map singular values `σ_k`. leftoverMapPlotTickAxisBadge stays leftover-map graphic leftover-map +axis origin tick keys. leftoverMapComparePlotTickAxisBadge stays leftover-map comparison graphic leftover-map axis origin tick keys. leftoverMapAxisTickBadge stays leftover-map tick keys this increment. When `R`, `R̂`, `U`, `x`, `s`, and `e` are finite, `e + s + x = 1`. When `Y`, `E`, and `R` are finite, `Y − E = R`. When `R`, `R̂`, and `U` are @@ -1013,6 +1018,8 @@ Leftover-map graphic leftover-map axis origin ticks independently of leftover-ma (ADR 0343) captions leftover-map graphic leftover-map axis origin ticks when leftoverMapPlotTickAxisBadge returns a leftover-map origin tick caption. Leftover-map comparison graphic leftover-map axis origin ticks independently of leftover-map axis share and leftover-map singular values (ADR 0344) captions leftover-map comparison graphic leftover-map axis origin ticks when leftoverMapComparePlotTickAxisBadge returns a leftover-map origin tick caption. +Leftover-map comparison leftover-axis origin ticks independently of leftover-map axis share and leftover-map singular values +(ADR 0345) captions leftover-map comparison leftover-axis origin ticks when leftoverMapCompareAxisTickBadge returns a leftover-map origin tick caption. Item complete-case coverage (ADR 0282) captions the leftover-map graphic with how many scored criteria entered the map. Item complete-case coverage on the pair list (ADR 0285) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index abbffd5f7..8f6f93f8c 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -813,6 +813,8 @@ ADR 0343 captions leftover-map graphic leftover-map axis origin ticks when lefto returns a leftover-map origin tick caption independently of leftover-map axis share and leftover-map singular values. ADR 0344 captions leftover-map comparison graphic leftover-map axis origin ticks when leftoverMapComparePlotTickAxisBadge returns a leftover-map origin tick caption independently of leftover-map axis share and leftover-map singular values. +ADR 0345 captions leftover-map comparison leftover-axis origin ticks when leftoverMapCompareAxisTickBadge +returns a leftover-map origin tick caption independently of leftover-map axis share and leftover-map singular values. Click a post marker or a pair button opens that post. Those ADRs are the normative mathematical, storage, and display contracts. Leftover-map axis share diff --git a/CHANGELOG.d/2.102.0-leftover-map-compare-axis-tick-origin-badge.md b/CHANGELOG.d/2.102.0-leftover-map-compare-axis-tick-origin-badge.md new file mode 100644 index 000000000..27b0e275d --- /dev/null +++ b/CHANGELOG.d/2.102.0-leftover-map-compare-axis-tick-origin-badge.md @@ -0,0 +1,17 @@ +## 2.102.0 — Leftover-map origin on leftover-map comparison leftover-axis ticks independently of leftover-map axis share and leftover-map singular values + +- Caption leftover-map comparison leftover-axis origin ticks through leftoverMapCompareAxisTickBadge + independently of leftover-map axis share and leftover-map singular values (ADR 0345). After `make seed`, leftover-map comparison leftover- + axis origin ticks name leftover-map origin when leftoverMapPlotTickIsOrigin returns true. Distinct accessible name + `leftover map comparison leftover axis {axis} origin tick {value}`. Rank-0 unused axes still name leftover-map origin `0.00`. Share and + singular omit independently as + `leftover map comparison leftover axis {axis} origin tick {value} σ {singular}`, + `leftover map comparison leftover axis {axis} origin tick {value} {share}%`, and + `leftover map comparison leftover axis {axis} origin tick {value} σ {singular} {share}%`. + Non-origin leftover-map comparison leftover-axis ticks stay + `leftover map comparison leftover axis {axis} tick {value}`. leftoverMapPlotTickAxisBadge stays leftover-map graphic leftover-map + axis origin tick keys. leftoverMapComparePlotTickAxisBadge stays leftover-map comparison graphic leftover-map + axis origin tick keys. leftoverMapAxisTickBadge stays leftover-map tick keys + this increment. Do not invent leftover-map origin from leftover-map axis share or leftover-map singular values `σ_k`. + Do not mix #877. A finite negative leftover is shown, never clamped. Never invent a leftover score. + Never invent a theta. No new columns. diff --git a/CHANGELOG.md b/CHANGELOG.md index 50508a8f2..6e83c7f2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,21 @@ All notable changes to this project are documented here. Format follows ### Added +- Period leftover pairs now caption leftover-map comparison leftover-axis origin ticks + through leftoverMapCompareAxisTickBadge independently of leftover-map axis share and leftover-map singular values (ADR 0345 / v2.102.0). After `make seed`, leftover-map comparison leftover-axis + origin ticks name leftover-map origin when leftoverMapPlotTickIsOrigin returns true. Distinct accessible name + `leftover map comparison leftover axis {axis} origin tick {value}`. Rank-0 unused axes still name leftover-map origin `0.00`. Share and + singular omit independently as + `leftover map comparison leftover axis {axis} origin tick {value} σ {singular}`, + `leftover map comparison leftover axis {axis} origin tick {value} {share}%`, and + `leftover map comparison leftover axis {axis} origin tick {value} σ {singular} {share}%`. + Non-origin leftover-map comparison leftover-axis ticks stay + `leftover map comparison leftover axis {axis} tick {value}`. leftoverMapPlotTickAxisBadge stays leftover-map graphic leftover-map + axis origin tick keys. leftoverMapComparePlotTickAxisBadge stays leftover-map comparison graphic leftover-map + axis origin tick keys. leftoverMapAxisTickBadge stays leftover-map tick keys + this increment. Do not invent leftover-map origin from leftover-map axis share or leftover-map singular values `σ_k`. + Do not mix #877. A finite negative leftover is shown, never clamped. Never invent a leftover score or a theta. No new columns. + - Period leftover pairs now caption leftover-map comparison graphic leftover-map axis origin ticks through leftoverMapComparePlotTickAxisBadge independently of leftover-map axis share and leftover-map singular values (ADR 0344 / v2.101.0). After `make seed`, leftover-map comparison graphic leftover-map axis origin ticks name leftover-map origin when leftoverMapPlotTickIsOrigin returns true. Distinct accessible name diff --git a/CLAUDE.md b/CLAUDE.md index e847a7487..470789c26 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -49,7 +49,7 @@ cutoff. Global Ask optional `knowledge_cutoff` uses the same cover Create/start endpoint rules (ADR 0017 / 0021), tie-vs-miss similarity (ADR 0026), R&R catalog ids (ADR 0019 / 0027), leftover pairs -(ADR 0048–0164 / 0182 / 0185 / 0201 / 0233 / 0266 / 0267 / 0268 / 0269 / 0270 / 0271 / 0272 / 0273 / 0274 / 0275 / 0276 / 0277 / 0278 / 0279 / 0280 / 0281 / 0282 / 0283 / 0284 / 0285 / 0286 / 0287 / 0288 / 0289 / 0290 / 0291 / 0292 / 0293 / 0294 / 0295 / 0296 / 0297 / 0298 / 0299 / 0300 / 0301 / 0302 / 0303 / 0304 / 0305 / 0306 / 0307 / 0308 / 0309 / 0310 / 0311 / 0312 / 0313 / 0314 / 0315 / 0316 / 0317 / 0318 / 0319 / 0320 / 0321 / 0322 / 0323 / 0324 / 0325 / 0326 / 0327 / 0328 / 0329 / 0330 / 0331 / 0332 / 0333 / 0334 / 0335 / 0336 / 0337 / 0338 / 0339 / 0340 / 0341 / 0342 / 0343 / 0344), occupational construct catalog search +(ADR 0048–0164 / 0182 / 0185 / 0201 / 0233 / 0266 / 0267 / 0268 / 0269 / 0270 / 0271 / 0272 / 0273 / 0274 / 0275 / 0276 / 0277 / 0278 / 0279 / 0280 / 0281 / 0282 / 0283 / 0284 / 0285 / 0286 / 0287 / 0288 / 0289 / 0290 / 0291 / 0292 / 0293 / 0294 / 0295 / 0296 / 0297 / 0298 / 0299 / 0300 / 0301 / 0302 / 0303 / 0304 / 0305 / 0306 / 0307 / 0308 / 0309 / 0310 / 0311 / 0312 / 0313 / 0314 / 0315 / 0316 / 0317 / 0318 / 0319 / 0320 / 0321 / 0322 / 0323 / 0324 / 0325 / 0326 / 0327 / 0328 / 0329 / 0330 / 0331 / 0332 / 0333 / 0334 / 0335 / 0336 / 0337 / 0338 / 0339 / 0340 / 0341 / 0342 / 0343 / 0344 / 0345), occupational construct catalog search (ADR 0257), the text-channel embedding swap and cosine clamp (ADR 0190), per-edge channel-score persistence (ADR 0195), token-backed status notices (ADR 0220), diff --git a/docs/adr/0329-leftover-map-compare-axis-tick-badge.md b/docs/adr/0329-leftover-map-compare-axis-tick-badge.md index 8f0accbf6..e9ab53073 100644 --- a/docs/adr/0329-leftover-map-compare-axis-tick-badge.md +++ b/docs/adr/0329-leftover-map-compare-axis-tick-badge.md @@ -3,6 +3,8 @@ **Decision status:** Accepted **Date:** 2026-08-31 +**Amended by:** [ADR 0345](0345-leftover-map-compare-axis-tick-origin-badge.md) + Amends leftover-map singular values on leftover-axis report badges on the grouping comparison strip ([ADR 0323](0323-leftover-map-compare-axis-singular.md)), leftover-map axis share persistence ([ADR 0148](0148-leftover-map-axis-share.md)). Independent of leftover-map diff --git a/docs/adr/0333-leftover-map-compare-axis-tick-share-badge.md b/docs/adr/0333-leftover-map-compare-axis-tick-share-badge.md index 78a313ee6..62ffc41ee 100644 --- a/docs/adr/0333-leftover-map-compare-axis-tick-share-badge.md +++ b/docs/adr/0333-leftover-map-compare-axis-tick-share-badge.md @@ -3,6 +3,8 @@ **Decision status:** Accepted **Date:** 2026-08-31 +**Amended by:** [ADR 0345](0345-leftover-map-compare-axis-tick-origin-badge.md) + Amends leftover-map comparison leftover-axis tick leftover-map singular values independently of leftover-map axis share ([ADR 0329](0329-leftover-map-compare-axis-tick-badge.md)), leftover-map diff --git a/docs/adr/0344-leftover-map-compare-plot-tick-origin-badge.md b/docs/adr/0344-leftover-map-compare-plot-tick-origin-badge.md index a44d2ac2c..cb16914bd 100644 --- a/docs/adr/0344-leftover-map-compare-plot-tick-origin-badge.md +++ b/docs/adr/0344-leftover-map-compare-plot-tick-origin-badge.md @@ -3,6 +3,8 @@ **Decision status:** Accepted **Date:** 2026-08-31 +**Amended by:** [ADR 0345](0345-leftover-map-compare-axis-tick-origin-badge.md) + Amends leftover-map coordinate ticks on the grouping comparison leftover-map graphic ([ADR 0320](0320-leftover-map-compare-plot-ticks.md)), leftover-map comparison graphic leftover-map axis ticks leftover-map singular values ([ADR 0328](0328-leftover-map-compare-plot-tick-axis-badge.md)), and leftover-map comparison graphic leftover-map axis ticks leftover-map axis share diff --git a/docs/adr/0345-leftover-map-compare-axis-tick-origin-badge.md b/docs/adr/0345-leftover-map-compare-axis-tick-origin-badge.md new file mode 100644 index 000000000..13b7ca208 --- /dev/null +++ b/docs/adr/0345-leftover-map-compare-axis-tick-origin-badge.md @@ -0,0 +1,97 @@ +# ADR 0345 — Name leftover-map origin on leftover-map comparison leftover-axis ticks independently of leftover-map axis share and leftover-map singular values + +**Decision status:** Accepted +**Date:** 2026-08-31 + +Amends leftover-map comparison leftover-axis ticks leftover-map singular values +([ADR 0329](0329-leftover-map-compare-axis-tick-badge.md)) and leftover-map comparison leftover-axis ticks leftover-map axis share +([ADR 0333](0333-leftover-map-compare-axis-tick-share-badge.md)). Independent of leftover-map +comparison graphic leftover-map axis origin ticks independently of leftover-map axis share and leftover-map singular values +([ADR 0344](0344-leftover-map-compare-plot-tick-origin-badge.md)). Independent of leftover-map +graphic leftover-map axis origin ticks independently of leftover-map axis share and leftover-map singular values +([ADR 0343](0343-leftover-map-plot-tick-origin-badge.md)). Independent of leftover-map +comparison leftover-axis origin ticks on the competing origin-tick stack (do not mix #877). + +## Context + +ADR 0329 already names leftover-map comparison leftover-axis ticks +`leftover map comparison leftover axis {axis} tick {value}`. ADR 0329 already names leftover-map +singular values `σ_k` on those ticks. ADR 0333 already names leftover-map +axis share on those ticks. Rank-0 unused axes still persist leftover-map +origin `0.00` (`formatSignedLeftoverValue(0)` emits no plus). Origin ticks +still interpolate leftover-map origin only through leftover-map comparison leftover-axis tick keys. +Share and singular omit independently. A finite negative leftover is shown, +never clamped. Do not invent leftover-map origin from leftover-map axis share +or leftover-map singular values `σ_k`. leftoverMapPlotTickAxisBadge stays leftover-map graphic leftover-map +axis origin tick keys from ADR 0343. leftoverMapComparePlotTickAxisBadge stays leftover-map comparison graphic leftover-map +axis origin tick keys from ADR 0344. leftoverMapAxisTickBadge stays leftover-map tick keys +this increment. + +This increment names leftover-map comparison leftover-axis origin ticks as +leftoverMapCompareAxisTickBadge. Leftover-map comparison leftover-axis origin ticks stay +`leftover map comparison leftover axis {axis} origin tick {value}` +when leftoverMapPlotTickIsOrigin returns true, so they stay distinct from leftover-map +comparison leftover-axis ticks +`leftover map comparison leftover axis {axis} tick {value}`, +leftover-map comparison graphic leftover-map axis origin ticks +`leftover map comparison graphic leftover-map axis {axis} origin tick {value}`, +and leftover-map graphic leftover-map axis origin ticks +`leftover-map axis {axis} origin tick {value}`. +Share and singular still omit independently: +`leftover map comparison leftover axis {axis} origin tick {value} σ {singular}`, +`leftover map comparison leftover axis {axis} origin tick {value} {share}%`, and +`leftover map comparison leftover axis {axis} origin tick {value} σ {singular} {share}%`. +It does not add columns. Do not invent a leftover score. Do not invent a theta. + +This protected increment uses **0345** so it does not collide with leftover-map +comparison graphic leftover-map axis origin ticks independently of leftover-map axis share and leftover-map singular values +(0344) or leftover-map comparison leftover-axis origin ticks (#877). + +## Decision + +On leftover-map comparison leftover-axis ticks, caption leftover-map origin +when leftoverMapPlotTickIsOrigin returns true. Rank-0 unused axes still name leftover-map +origin `0.00`. Share and singular omit independently of leftover-map origin. +Non-origin ticks stay leftover-map comparison leftover-axis tick keys. leftoverMapPlotTickAxisBadge, +leftoverMapComparePlotTickAxisBadge, and leftoverMapAxisTickBadge do not change leftover-map origin naming +this increment. + +Do not add SQL. Do not edit shipped migrations. Do not invent a leftover +score. Do not invent a theta. + +## Consequences + +After `make seed`, leftover-map comparison leftover-axis origin ticks name +leftover-map origin independently of leftover-map axis share and leftover-map +singular values. Rank-0 unused axes still name leftover-map origin `0.00`. +leftoverMapPlotTickAxisBadge stays leftover-map graphic leftover-map axis origin tick keys. +leftoverMapComparePlotTickAxisBadge stays leftover-map comparison graphic leftover-map axis origin tick keys. +leftover-map comparison leftover-axis ticks leftover-map singular values +independently of leftover-map axis share (ADR 0329) and leftover-map comparison leftover-axis +ticks leftover-map axis share independently of leftover-map singular values +(ADR 0333) remain. + +## Related + +Independent of leftover-map comparison graphic leftover-map axis origin ticks independently of leftover-map +axis share and leftover-map singular values +([ADR 0344](0344-leftover-map-compare-plot-tick-origin-badge.md)). Independent of leftover-map +graphic leftover-map axis origin ticks independently of leftover-map axis share and leftover-map singular values +([ADR 0343](0343-leftover-map-plot-tick-origin-badge.md)). Independent of leftover-map +comparison leftover-axis ticks leftover-map axis share independently of leftover-map +singular values ([ADR 0333](0333-leftover-map-compare-axis-tick-share-badge.md)). Independent of leftover-map +comparison leftover-axis ticks leftover-map singular values independently of leftover-map +axis share ([ADR 0329](0329-leftover-map-compare-axis-tick-badge.md)). + +## References + +Gabriel, K. R. (1971). The biplot graphic display of matrices with +application to principal component analysis. *Biometrika, 58*(3), +453–467. https://doi.org/10.1093/biomet/58.3.453 + +Jeon, M., Jin, I. H., Schweinberger, M., & Baugh, S. (2021). Mapping +unobserved item–respondent interactions: A latent space item response +model with interaction map. *Psychometrika, 86*(2), 378–403. +https://doi.org/10.1007/s11336-021-09762-5 +(LSIRM interaction `−γ‖ξ_j − ζ_i‖` after main effects +`α_j − β_i`; typically `p = 2` for the interaction map.) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 9f779ee46..a0fb4e12c 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,5 +1,15 @@ # Product & Technical Gap Baseline +> Exact-head loop overlay: 2026-08-31 19:25 KST. Protected `main` is +> `cb187cadee5fb6c46d8a944815ccc154a1e028d1`. Writes work. Do not +> self-approve. #886 leftover-map comparison graphic leftover-map axis origin ticks independently of leftover-map +> axis share and leftover-map singular values (v2.101.0 / ADR 0344) is +> `4a31a41`, stacked on #885 @ `7a6c038`. Independent APPROVE is missing (Devin COMMENTED, +> not APPROVE). Next buyer increment on this cycle: leftover-map comparison leftover-axis +> origin ticks independently of leftover-map axis share and leftover-map singular values as leftoverMapCompareAxisTickBadge (ADR 0345 / v2.102.0) delivered locally on +> `feat/leftover-map-compare-axis-tick-origin-badge-v21020`. Distinct accessible name +> `leftover map comparison leftover axis {axis} origin tick {value}`. Rank-0 unused axes still name leftover-map origin `0.00`. Share and singular omit independently. leftoverMapPlotTickAxisBadge stays leftover-map graphic leftover-map axis origin tick keys. leftoverMapComparePlotTickAxisBadge stays leftover-map comparison graphic leftover-map axis origin tick keys. leftoverMapAxisTickBadge stays leftover-map tick keys. Do not invent leftover-map origin from leftover-map axis share or `σ_k`. Do not mix #877. Stack onto #886. Leave open for independent review. Do not squash-merge. Do not self-approve. Issues #79 and #87 stay open. Do not merge #808 without independent APPROVE. + > Exact-head loop overlay: 2026-08-31 19:20 KST. Protected `main` is > `cb187cadee5fb6c46d8a944815ccc154a1e028d1`. Writes work. Do not > self-approve. #885 leftover-map graphic leftover-map axis origin ticks independently of leftover-map diff --git a/frontend/package.json b/frontend/package.json index 7338f765a..81cd1bf11 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "2.101.0", + "version": "2.102.0", "type": "module", "scripts": { "dev": "vite", diff --git a/frontend/src/App.test.tsx b/frontend/src/App.test.tsx index 0dde75a6a..08e84b5c5 100644 --- a/frontend/src/App.test.tsx +++ b/frontend/src/App.test.tsx @@ -4185,8 +4185,10 @@ describe("App, authenticated", () => { expect(screen.getByText("leftover map comparison leftover axis 2 σ 0.86 18%")).toBeInTheDocument(); expect(screen.getByText("leftover map comparison leftover axis 1 tick +0.50 σ 1.84 82%")).toBeInTheDocument(); expect(screen.getByText("leftover map comparison leftover axis 2 tick −0.02 σ 0.86 18%")).toBeInTheDocument(); - expect(screen.getByText("leftover map comparison leftover axis 1 tick 0.00 σ 1.84 82%")).toBeInTheDocument(); - expect(screen.getByText("leftover map comparison leftover axis 2 tick 0.00 σ 0.86 18%")).toBeInTheDocument(); + expect(screen.getByText("leftover map comparison leftover axis 1 origin tick 0.00 σ 1.84 82%")).toBeInTheDocument(); + expect(screen.getByText("leftover map comparison leftover axis 2 origin tick 0.00 σ 0.86 18%")).toBeInTheDocument(); + expect(screen.queryByText("leftover map comparison leftover axis 1 tick 0.00 σ 1.84 82%")).not.toBeInTheDocument(); + expect(screen.queryByText("leftover map comparison leftover axis 2 tick 0.00 σ 0.86 18%")).not.toBeInTheDocument(); expect(screen.getByText("leftover axis 1 tick +0.50 σ 1.84 82%")).toBeInTheDocument(); expect(screen.getByText("leftover axis 2 tick −0.02 σ 0.86 18%")).toBeInTheDocument(); expect(screen.getByText("leftover axis 1 tick 0.00 σ 1.84 82%")).toBeInTheDocument(); @@ -4418,14 +4420,19 @@ describe("App, authenticated", () => { ).toBeInTheDocument(); expect( within(screen.getByLabelText("Grouping comparison")).getByText( - "leftover map comparison leftover axis 1 tick 0.00 σ 1.84 82%", + "leftover map comparison leftover axis 1 origin tick 0.00 σ 1.84 82%", ), ).toBeInTheDocument(); expect( within(screen.getByLabelText("Grouping comparison")).getByText( - "leftover map comparison leftover axis 2 tick 0.00 σ 0.86 18%", + "leftover map comparison leftover axis 2 origin tick 0.00 σ 0.86 18%", ), ).toBeInTheDocument(); + expect( + within(screen.getByLabelText("Grouping comparison")).queryByText( + "leftover map comparison leftover axis 1 tick 0.00 σ 1.84 82%", + ), + ).not.toBeInTheDocument(); expect( within(screen.getByLabelText("Grouping comparison")).queryByText( "leftover axis 1 tick +0.50 σ 1.84", diff --git a/frontend/src/components/LeftoverMapPlot.tsx b/frontend/src/components/LeftoverMapPlot.tsx index 1a3bed7e5..01c078873 100644 --- a/frontend/src/components/LeftoverMapPlot.tsx +++ b/frontend/src/components/LeftoverMapPlot.tsx @@ -286,7 +286,10 @@ function leftoverMapPlotPostText( * singular values. * ADR 0344 fail-closes leftover-map comparison graphic leftover-map axis origin ticks through * leftoverMapComparePlotTickAxisBadge independently of leftover-map axis share and leftover-map - * singular values. leftoverMapCompareAxisTickBadge and leftoverMapAxisTickBadge do not name leftover-map origin + * singular values. + * ADR 0345 fail-closes leftover-map comparison leftover-axis origin ticks through + * leftoverMapCompareAxisTickBadge independently of leftover-map axis share and leftover-map + * singular values. leftoverMapAxisTickBadge does not name leftover-map origin * this increment. * Never invent a leftover score. */ diff --git a/frontend/src/i18n.test.ts b/frontend/src/i18n.test.ts index abc93a4f8..2d4abda62 100644 --- a/frontend/src/i18n.test.ts +++ b/frontend/src/i18n.test.ts @@ -142,6 +142,10 @@ describe("i18n", () => { "leftover map comparison leftover axis {axis} tick {value} σ {singular}", "leftover map comparison leftover axis {axis} tick {value} {share}%", "leftover map comparison leftover axis {axis} tick {value} σ {singular} {share}%", + "leftover map comparison leftover axis {axis} origin tick {value}", + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular}", + "leftover map comparison leftover axis {axis} origin tick {value} {share}%", + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular} {share}%", "Leftover map comparison leftover axis", "Leftover map comparison leftover-axis share is Gabriel inertia of residual SVD axes 1 and 2. Open a leftover pair to read the post–criterion cell. The shares do not invent a leftover score.", "Leftover map comparison coordinates", @@ -1091,6 +1095,47 @@ describe("i18n", () => { }, ); + it.each([ + ["ko", "잔여 지도 비교 잔차 축 1 원점 눈금 0.00"], + ["zh", "残差地图比较残差轴 1 原点刻度 0.00"], + ["ja", "残差マップの比較残差軸 1 原点目盛 0.00"], + ["vi", "vạch gốc trục phần dư so sánh bản đồ phần dư 1 0.00"], + ] as const)( + "formats leftover map comparison leftover-axis origin ticks in %s", + (locale, expected) => { + setLocale(locale); + expect( + tf("leftover map comparison leftover axis {axis} origin tick {value}", { + axis: 1, + value: "0.00", + }), + ).toBe(expected); + }, + ); + + it.each([ + ["ko", "잔여 지도 비교 잔차 축 1 원점 눈금 0.00 σ 0.00 0%"], + ["zh", "残差地图比较残差轴 1 原点刻度 0.00 σ 0.00 0%"], + ["ja", "残差マップの比較残差軸 1 原点目盛 0.00 σ 0.00 0%"], + ["vi", "vạch gốc trục phần dư so sánh bản đồ phần dư 1 0.00 σ 0.00 0%"], + ] as const)( + "formats leftover map comparison leftover-axis origin ticks leftover-map singular values and leftover-map axis share in %s", + (locale, expected) => { + setLocale(locale); + expect( + tf( + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular} {share}%", + { + axis: 1, + value: "0.00", + singular: "0.00", + share: "0", + }, + ), + ).toBe(expected); + }, + ); + it.each([ ["ko", "잔여 지도 비교 잔차 축 1 σ 1.84 82%"], ["zh", "残差地图比较残差轴 1 σ 1.84 82%"], diff --git a/frontend/src/i18n.ts b/frontend/src/i18n.ts index 7526ef7bf..49c30eba5 100644 --- a/frontend/src/i18n.ts +++ b/frontend/src/i18n.ts @@ -325,6 +325,14 @@ const TRANSLATIONS: Partial>> = { "잔여 지도 비교 잔차 축 {axis} 눈금 {value} {share}%", "leftover map comparison leftover axis {axis} tick {value} σ {singular} {share}%": "잔여 지도 비교 잔차 축 {axis} 눈금 {value} σ {singular} {share}%", + "leftover map comparison leftover axis {axis} origin tick {value}": + "잔여 지도 비교 잔차 축 {axis} 원점 눈금 {value}", + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular}": + "잔여 지도 비교 잔차 축 {axis} 원점 눈금 {value} σ {singular}", + "leftover map comparison leftover axis {axis} origin tick {value} {share}%": + "잔여 지도 비교 잔차 축 {axis} 원점 눈금 {value} {share}%", + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular} {share}%": + "잔여 지도 비교 잔차 축 {axis} 원점 눈금 {value} σ {singular} {share}%", "Leftover map comparison leftover axis": "잔여 지도 비교 잔차 축", "Leftover map comparison leftover-axis share is Gabriel inertia of residual SVD axes 1 and 2. Open a leftover pair to read the post–criterion cell. The shares do not invent a leftover score.": "잔여 지도 비교 잔차 축 비율은 잔차 SVD 축 1과 2의 Gabriel 관성입니다. 글–기준 셀을 읽으려면 잔차 쌍을 여세요. 이 비율은 잔차 점수를 만들어내지 않습니다.", @@ -1033,6 +1041,14 @@ const TRANSLATIONS: Partial>> = { "残差地图比较残差轴 {axis} 刻度 {value} {share}%", "leftover map comparison leftover axis {axis} tick {value} σ {singular} {share}%": "残差地图比较残差轴 {axis} 刻度 {value} σ {singular} {share}%", + "leftover map comparison leftover axis {axis} origin tick {value}": + "残差地图比较残差轴 {axis} 原点刻度 {value}", + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular}": + "残差地图比较残差轴 {axis} 原点刻度 {value} σ {singular}", + "leftover map comparison leftover axis {axis} origin tick {value} {share}%": + "残差地图比较残差轴 {axis} 原点刻度 {value} {share}%", + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular} {share}%": + "残差地图比较残差轴 {axis} 原点刻度 {value} σ {singular} {share}%", "Leftover map comparison leftover axis": "残差地图比较残差轴", "Leftover map comparison leftover-axis share is Gabriel inertia of residual SVD axes 1 and 2. Open a leftover pair to read the post–criterion cell. The shares do not invent a leftover score.": "残差地图比较残差轴份额是残差 SVD 轴 1 和 2 的 Gabriel 惯性。打开残差对以阅读帖文–准则单元格。这些份额不编造残差分数。", @@ -1762,6 +1778,14 @@ const TRANSLATIONS: Partial>> = { "残差マップの比較残差軸 {axis} 目盛 {value} {share}%", "leftover map comparison leftover axis {axis} tick {value} σ {singular} {share}%": "残差マップの比較残差軸 {axis} 目盛 {value} σ {singular} {share}%", + "leftover map comparison leftover axis {axis} origin tick {value}": + "残差マップの比較残差軸 {axis} 原点目盛 {value}", + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular}": + "残差マップの比較残差軸 {axis} 原点目盛 {value} σ {singular}", + "leftover map comparison leftover axis {axis} origin tick {value} {share}%": + "残差マップの比較残差軸 {axis} 原点目盛 {value} {share}%", + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular} {share}%": + "残差マップの比較残差軸 {axis} 原点目盛 {value} σ {singular} {share}%", "Leftover map comparison leftover axis": "残差マップの比較残差軸", "Leftover map comparison leftover-axis share is Gabriel inertia of residual SVD axes 1 and 2. Open a leftover pair to read the post–criterion cell. The shares do not invent a leftover score.": "残差マップの比較残差軸の割合は残差 SVD 軸 1 と 2 の Gabriel 慣性です。投稿–基準セルを読むには残差ペアを開いてください。この割合は残差スコアを作りません。", @@ -2474,6 +2498,14 @@ const TRANSLATIONS: Partial>> = { "vạch trục phần dư so sánh bản đồ phần dư {axis} {value} {share}%", "leftover map comparison leftover axis {axis} tick {value} σ {singular} {share}%": "vạch trục phần dư so sánh bản đồ phần dư {axis} {value} σ {singular} {share}%", + "leftover map comparison leftover axis {axis} origin tick {value}": + "vạch gốc trục phần dư so sánh bản đồ phần dư {axis} {value}", + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular}": + "vạch gốc trục phần dư so sánh bản đồ phần dư {axis} {value} σ {singular}", + "leftover map comparison leftover axis {axis} origin tick {value} {share}%": + "vạch gốc trục phần dư so sánh bản đồ phần dư {axis} {value} {share}%", + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular} {share}%": + "vạch gốc trục phần dư so sánh bản đồ phần dư {axis} {value} σ {singular} {share}%", "Leftover map comparison leftover axis": "Trục phần dư so sánh bản đồ phần dư", "Leftover map comparison leftover-axis share is Gabriel inertia of residual SVD axes 1 and 2. Open a leftover pair to read the post–criterion cell. The shares do not invent a leftover score.": "Tỷ phần trục phần dư so sánh bản đồ phần dư là quán tính Gabriel của trục SVD phần dư 1 và 2. Mở cặp phần dư để đọc ô bài–tiêu chí. Các tỷ phần này không tạo ra điểm phần dư.", diff --git a/frontend/src/leftoverMapAxisBadge.ts b/frontend/src/leftoverMapAxisBadge.ts index 812189e2b..4e35ca5c6 100644 --- a/frontend/src/leftoverMapAxisBadge.ts +++ b/frontend/src/leftoverMapAxisBadge.ts @@ -26,6 +26,8 @@ * leftoverMapPlotTickAxisBadge, not this helper. * ADR 0344 captions leftover-map comparison graphic leftover-map axis origin ticks as * leftoverMapComparePlotTickAxisBadge, not this helper. + * ADR 0345 captions leftover-map comparison leftover-axis origin ticks as + * leftoverMapCompareAxisTickBadge, not this helper. */ import type { LeftoverMapAxis } from "./api"; diff --git a/frontend/src/leftoverMapPlotAxisSingular.test.ts b/frontend/src/leftoverMapPlotAxisSingular.test.ts index 11ae32aaf..ba519a87e 100644 --- a/frontend/src/leftoverMapPlotAxisSingular.test.ts +++ b/frontend/src/leftoverMapPlotAxisSingular.test.ts @@ -18,6 +18,10 @@ import { LEFTOVER_MAP_COMPARE_AXIS_TICK_SHARE, LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR, LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR_SHARE, + LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK, + LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SHARE, + LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR, + LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR_SHARE, LEFTOVER_MAP_COMPARE_PLOT_AXIS_SINGULAR, LEFTOVER_MAP_COMPARE_PLOT_AXIS_SINGULAR_SHARE, LEFTOVER_MAP_COMPARE_PLOT_TICK_SHARE, @@ -521,11 +525,19 @@ describe("leftover-map comparison leftover-axis tick leftover-map singular value }); }); - it("names rank-0 zero leftover-map singular values on leftover-map comparison leftover-axis ticks", () => { + it("names rank-0 leftover-map origin ticks independently of leftover-map singular values", () => { expect(leftoverMapCompareAxisTickBadge(1, "0.00", 0)).toEqual({ - key: LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR, + key: LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR, values: { axis: 1, value: "0.00", singular: "0.00" }, }); + expect(leftoverMapCompareAxisTickBadge(1, "0.00", null)).toEqual({ + key: LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK, + values: { axis: 1, value: "0.00" }, + }); + expect(leftoverMapPlotTickIsOrigin("0.00")).toBe(true); + expect(leftoverMapAxisTickBadge(1, "0.00", 0).key).not.toBe( + leftoverMapCompareAxisTickBadge(1, "0.00", 0).key, + ); }); it("omits leftover-map singular values independently of leftover-map axis share", () => { @@ -578,6 +590,30 @@ describe("leftover-map comparison leftover-axis tick leftover-map singular value expect(LEFTOVER_MAP_COMPARE_AXIS_TICK).not.toBe(LEFTOVER_MAP_PLOT_TICK); expect(LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR).not.toBe("leftover axis {axis} tick {value} σ {singular}"); expect(LEFTOVER_MAP_COMPARE_AXIS_TICK).not.toBe("leftover axis {axis} tick {value}"); + expect(leftoverMapCompareAxisTickBadge(1, "0.00", 1.84).key).not.toBe( + leftoverMapPlotTickAxisBadge(1, "0.00", 1.84).key, + ); + expect(leftoverMapCompareAxisTickBadge(1, "0.00", 1.84).key).not.toBe( + leftoverMapComparePlotTickAxisBadge(1, "0.00", 1.84).key, + ); + expect(leftoverMapCompareAxisTickBadge(1, "0.00", 1.84).key).not.toBe( + leftoverMapAxisTickBadge(1, "0.00", 1.84).key, + ); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK).toBe( + "leftover map comparison leftover axis {axis} origin tick {value}", + ); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK).not.toBe(LEFTOVER_MAP_COMPARE_AXIS_TICK); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK).not.toBe(LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK).not.toBe(LEFTOVER_MAP_PLOT_ORIGIN_TICK); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR).not.toBe( + LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR, + ); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR).not.toBe( + LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR, + ); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR).not.toBe( + LEFTOVER_MAP_PLOT_ORIGIN_TICK_SINGULAR, + ); expect(leftoverMapCompareAxisTickBadge(1, "+0.50", 1.84).key).not.toBe( leftoverMapComparePlotTickAxisBadge(1, "+0.50", 1.84).key, ); @@ -872,15 +908,25 @@ describe("leftover-map comparison leftover-axis tick leftover-map axis share", ( expect(leftoverMapCompareAxisTickBadge(1, "+0.50", null, 0.82).values.singular).toBeUndefined(); }); - it("names rank-0 zero leftover-map axis share on leftover-map comparison leftover-axis ticks", () => { + it("names rank-0 leftover-map origin ticks independently of leftover-map axis share and leftover-map singular values", () => { expect(leftoverMapCompareAxisTickBadge(1, "0.00", 0, 0)).toEqual({ - key: LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR_SHARE, + key: LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR_SHARE, values: { axis: 1, value: "0.00", singular: "0.00", share: "0" }, }); expect(leftoverMapCompareAxisTickBadge(1, "0.00", null, 0)).toEqual({ - key: LEFTOVER_MAP_COMPARE_AXIS_TICK_SHARE, + key: LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SHARE, values: { axis: 1, value: "0.00", share: "0" }, }); + expect(leftoverMapCompareAxisTickBadge(1, "0.00", 0, null)).toEqual({ + key: LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR, + values: { axis: 1, value: "0.00", singular: "0.00" }, + }); + expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", 0, 0).key).toBe( + LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE, + ); + expect(leftoverMapPlotTickAxisBadge(1, "0.00", 0, 0).key).toBe( + LEFTOVER_MAP_PLOT_ORIGIN_TICK_SINGULAR_SHARE, + ); }); it("omits leftover-map axis share independently of leftover-map singular values", () => { @@ -953,5 +999,34 @@ describe("leftover-map comparison leftover-axis tick leftover-map axis share", ( expect(leftoverMapCompareAxisTickBadge(1, "+0.50", 1.84, 0.82).key).not.toBe( leftoverMapAxisTickBadge(1, "+0.50", 1.84, 0.82).key, ); + expect(leftoverMapCompareAxisTickBadge(1, "0.00", 0, 0).key).not.toBe( + leftoverMapAxisTickBadge(1, "0.00", 0, 0).key, + ); + expect(leftoverMapCompareAxisTickBadge(1, "0.00", 0, 0).key).not.toBe( + leftoverMapComparePlotTickAxisBadge(1, "0.00", 0, 0).key, + ); + expect(leftoverMapCompareAxisTickBadge(1, "0.00", 0, 0).key).not.toBe( + leftoverMapPlotTickAxisBadge(1, "0.00", 0, 0).key, + ); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SHARE).toBe( + "leftover map comparison leftover axis {axis} origin tick {value} {share}%", + ); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR_SHARE).toBe( + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular} {share}%", + ); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SHARE).not.toBe(LEFTOVER_MAP_COMPARE_AXIS_TICK_SHARE); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR_SHARE).not.toBe( + LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR_SHARE, + ); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SHARE).not.toBe( + LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SHARE, + ); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR_SHARE).not.toBe( + LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE, + ); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SHARE).not.toBe(LEFTOVER_MAP_PLOT_ORIGIN_TICK_SHARE); + expect(LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR_SHARE).not.toBe( + LEFTOVER_MAP_PLOT_ORIGIN_TICK_SINGULAR_SHARE, + ); }); }); diff --git a/frontend/src/leftoverMapPlotAxisSingular.ts b/frontend/src/leftoverMapPlotAxisSingular.ts index 53b60f2ac..11a448c85 100644 --- a/frontend/src/leftoverMapPlotAxisSingular.ts +++ b/frontend/src/leftoverMapPlotAxisSingular.ts @@ -34,8 +34,11 @@ * leftover-map singular values. * ADR 0344 names leftover-map comparison graphic leftover-map axis origin ticks as * leftoverMapComparePlotTickAxisBadge independently of leftover-map axis share and - * leftover-map singular values. leftoverMapCompareAxisTickBadge and leftoverMapAxisTickBadge - * do not name leftover-map origin this increment. + * leftover-map singular values. + * ADR 0345 names leftover-map comparison leftover-axis origin ticks as + * leftoverMapCompareAxisTickBadge independently of leftover-map axis share and + * leftover-map singular values. leftoverMapAxisTickBadge + * does not name leftover-map origin this increment. */ import type { LeftoverMapAxis } from "./api"; @@ -124,6 +127,18 @@ export const LEFTOVER_MAP_COMPARE_AXIS_TICK_SHARE = export const LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR_SHARE = "leftover map comparison leftover axis {axis} tick {value} σ {singular} {share}%"; +export const LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK = + "leftover map comparison leftover axis {axis} origin tick {value}"; + +export const LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR = + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular}"; + +export const LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SHARE = + "leftover map comparison leftover axis {axis} origin tick {value} {share}%"; + +export const LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR_SHARE = + "leftover map comparison leftover axis {axis} origin tick {value} σ {singular} {share}%"; + export const LEFTOVER_MAP_COMPARE_AXIS_LABEL = "Leftover map comparison leftover axis"; export const LEFTOVER_MAP_COMPARE_AXIS_CAPTION = @@ -316,23 +331,31 @@ export function leftoverMapCompareAxisTickBadge( ): LeftoverMapCompareAxisBadge { const singular = formatLeftoverMapPlotAxisSingular(leftoverSingular); const percent = formatLeftoverMapPlotAxisShare(leftoverShare); + const origin = leftoverMapPlotTickIsOrigin(tickLabel); if (singular === null && percent === null) { - return { key: LEFTOVER_MAP_COMPARE_AXIS_TICK, values: { axis: axisIndex, value: tickLabel } }; + return { + key: origin ? LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK : LEFTOVER_MAP_COMPARE_AXIS_TICK, + values: { axis: axisIndex, value: tickLabel }, + }; } if (singular === null && percent !== null) { return { - key: LEFTOVER_MAP_COMPARE_AXIS_TICK_SHARE, + key: origin ? LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SHARE : LEFTOVER_MAP_COMPARE_AXIS_TICK_SHARE, values: { axis: axisIndex, value: tickLabel, share: percent }, }; } if (singular !== null && percent === null) { return { - key: LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR, + key: origin + ? LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR + : LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR, values: { axis: axisIndex, value: tickLabel, singular }, }; } return { - key: LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR_SHARE, + key: origin + ? LEFTOVER_MAP_COMPARE_AXIS_ORIGIN_TICK_SINGULAR_SHARE + : LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR_SHARE, values: { axis: axisIndex, value: tickLabel, singular: singular as string, share: percent as string }, }; } diff --git a/frontend/src/leftoverMapPlotLayout.ts b/frontend/src/leftoverMapPlotLayout.ts index 00ff1899a..c2eef5e99 100644 --- a/frontend/src/leftoverMapPlotLayout.ts +++ b/frontend/src/leftoverMapPlotLayout.ts @@ -153,6 +153,9 @@ * ADR 0344 fail-closes leftover-map comparison graphic leftover-map axis origin ticks through * leftoverMapComparePlotTickAxisBadge independently of leftover-map axis share and leftover-map * singular values, not leftover-map graphic leftover-map axis ticks. + * ADR 0345 fail-closes leftover-map comparison leftover-axis origin ticks through + * leftoverMapCompareAxisTickBadge independently of leftover-map axis share and leftover-map + * singular values, not leftover-map comparison graphic leftover-map axis ticks. */ import { formatLeftoverMapCoordinatePair } from "./leftoverMapCoordinates"; diff --git a/pyproject.toml b/pyproject.toml index 9a879a4c9..d1f22fe75 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "lineageweave" -version = "2.101.0" +version = "2.102.0" description = "Reconstructs git-branch-style lineage DAGs from scattered short records using multi-channel score fusion and LLM adjudication." readme = "README.md" license = { text = "MIT" }