diff --git a/CHANGELOG.d/2.92.0-leftover-map-compare-plot-tick-origin-badge.md b/CHANGELOG.d/2.92.0-leftover-map-compare-plot-tick-origin-badge.md new file mode 100644 index 000000000..1bb172e94 --- /dev/null +++ b/CHANGELOG.d/2.92.0-leftover-map-compare-plot-tick-origin-badge.md @@ -0,0 +1,3 @@ +## 2.92.0 — Leftover-map origin on leftover-map comparison graphic leftover-map axis ticks independently of leftover-map axis share and leftover-map singular values + +- Caption leftover-map comparison graphic leftover-map axis origin ticks through leftoverMapComparePlotTickAxisBadge independently of leftover-map axis share and leftover-map singular values (ADR 0335). After `make seed`, leftover-map comparison graphic leftover-map axis origin ticks name leftover-map origin `0.00` when leftoverMapComparePlotTickAxisBadge returns a usable leftover-map origin tick caption even when leftover-map axis share or leftover-map singular values are omitted; click a leftover pair opens that post. A missing or non-finite leftover-map axis share omits that leftover-map axis share origin tick caption and keeps `leftover map comparison graphic leftover-map axis {k} origin tick {value}` or `leftover map comparison graphic leftover-map axis {k} origin tick {value} σ {singular}`. Rank-0 unused axes still name leftover-map origin `0.00` with leftover-map axis share `0%`. Leftover-map comparison graphic leftover-map axis origin ticks stay `leftover map comparison graphic leftover-map axis {k} origin tick {value} {share}%` when leftover-map axis share is finite and `σ_k` omits, and `leftover map comparison graphic leftover-map axis {k} origin tick {value} σ {singular} {share}%` when both are finite so they stay distinct from leftover-map comparison graphic leftover-map axis ticks `leftover map comparison graphic leftover-map axis {k} tick {value} σ {singular} {share}%`, from leftover-map graphic leftover-map axis ticks `leftover-map axis {k} tick {value} σ {singular} {share}%`, from leftover-map comparison leftover-axis ticks `leftover map comparison leftover axis {k} tick {value} σ {singular} {share}%`, from leftover-axis ticks `leftover axis {k} tick {value} σ {singular} {share}%`, and from leftover-map comparison graphic leftover-map axis `leftover map comparison graphic leftover-map axis {k} σ {value} ({share}%)`. Do not invent leftover-map origin from leftover-map axis share or `σ_k`. Do not invent leftover-map axis share from `σ_k`. Do not invent `σ_k` from leftover-map axis share. This increment does not change leftover-map graphic leftover-map axis ticks, leftover-map comparison leftover-axis ticks, or leftover-axis ticks. 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 51ea0cf1f..fee5e314c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,33 @@ All notable changes to this project are documented here. Format follows ### Added +- 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 0335 / v2.92.0). After `make seed`, + leftover-map comparison graphic leftover-map axis origin ticks name leftover-map origin + `0.00` when leftoverMapComparePlotTickAxisBadge returns a usable leftover-map origin tick + caption even when leftover-map axis share or leftover-map singular values are omitted; + click a leftover pair opens that post. A missing or non-finite leftover-map axis share + omits that leftover-map axis share origin tick caption and keeps + `leftover map comparison graphic leftover-map axis {k} origin tick {value}` or + `leftover map comparison graphic leftover-map axis {k} origin tick {value} σ {singular}`. + Rank-0 unused axes still name leftover-map origin `0.00` with leftover-map axis share `0%`. + Leftover-map comparison graphic leftover-map axis origin ticks stay + `leftover map comparison graphic leftover-map axis {k} origin tick {value} {share}%` when leftover-map + axis share is finite and `σ_k` omits, and + `leftover map comparison graphic leftover-map axis {k} origin tick {value} σ {singular} {share}%` + when both are finite so they stay distinct from leftover-map comparison graphic leftover-map + axis ticks `leftover map comparison graphic leftover-map axis {k} tick {value} σ {singular} {share}%`, + from leftover-map graphic leftover-map axis ticks + `leftover-map axis {k} tick {value} σ {singular} {share}%`, from leftover-map comparison leftover-axis ticks + `leftover map comparison leftover axis {k} tick {value} σ {singular} {share}%`, from leftover-axis ticks + `leftover axis {k} tick {value} σ {singular} {share}%`, and from leftover-map comparison graphic leftover-map + axis `leftover map comparison graphic leftover-map axis {k} σ {value} ({share}%)`. Do not invent leftover-map + origin from leftover-map axis share or `σ_k`. Do not invent leftover-map axis share from `σ_k`. Do not invent + `σ_k` from leftover-map axis share. This increment does not change leftover-map graphic leftover-map axis ticks, + leftover-map comparison leftover-axis ticks, or leftover-axis ticks. 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-axis ticks with persisted leftover-map axis share through leftoverMapAxisTickBadge independently of leftover-map singular values (ADR 0334 / v2.91.0). After `make seed`, diff --git a/docs/adr/0335-leftover-map-compare-plot-tick-origin-badge.md b/docs/adr/0335-leftover-map-compare-plot-tick-origin-badge.md new file mode 100644 index 000000000..319006db0 --- /dev/null +++ b/docs/adr/0335-leftover-map-compare-plot-tick-origin-badge.md @@ -0,0 +1,142 @@ +# ADR 0335 — Name leftover-map origin on leftover-map comparison graphic leftover-map axis ticks independently of leftover-map axis share and leftover-map singular values + +**Decision status:** Accepted +**Date:** 2026-08-31 + +Amends leftover-map comparison graphic leftover-map axis tick leftover-map axis share independently of leftover-map +singular values ([ADR 0331](0331-leftover-map-compare-plot-tick-share-badge.md)), leftover-map +comparison graphic leftover-map axis tick leftover-map singular values independently of leftover-map axis share +([ADR 0328](0328-leftover-map-compare-plot-tick-axis-badge.md)), leftover-map +coordinate ticks on the grouping comparison leftover-map graphic +([ADR 0320](0320-leftover-map-compare-plot-ticks.md)). Independent of leftover-map leftover-axis tick leftover-map axis share independently of leftover-map +singular values ([ADR 0334](0334-leftover-map-axis-tick-share-badge.md)). Independent of leftover-map +comparison leftover-axis tick 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 +graphic leftover-map axis tick leftover-map axis share independently of leftover-map +singular values ([ADR 0332](0332-leftover-map-plot-tick-share-badge.md)). + +## Context + +ADR 0320 already ticks leftover-map comparison graphic leftover-map axes at the origin +and at each unique finite persisted `ξ` / `ζ` projection. The origin is the rank-0 +unused-axis location, not a leftover score. ADR 0331 already captions leftover-map +comparison graphic leftover-map axis ticks with leftover-map axis share through leftoverMapComparePlotTickAxisBadge +independently of leftover-map singular values. Those leftover-map comparison graphic leftover-map +axis origin ticks still reuse leftover-map comparison graphic leftover-map axis tick copy +`leftover map comparison graphic leftover-map axis {k} tick {value}`, so a buyer who reads leftover-map +comparison graphic leftover-map axis ticks can treat leftover-map origin `0.00` as leftover-map +coordinate structure without a next action. A missing or non-finite leftover-map axis share is +not a leftover score and must omit independently of leftover-map singular values. Rank-0 unused +axes still persist leftover-map origin at `0`. A finite negative leftover is shown, never +clamped. Do not invent leftover-map origin from leftover-map axis share or `σ_k`. Do not invent leftover-map +axis share from `σ_k`. Do not invent `σ_k` from leftover-map axis share. Leftover-map graphic leftover-map +axis ticks never name leftover-map origin this increment. Leftover-map comparison leftover-axis +ticks and leftover-axis ticks never name leftover-map origin this increment. + +This increment names leftover-map comparison graphic leftover-map axis origin ticks as leftoverMapComparePlotTickAxisBadge, +matching leftoverMapComparePlotTickAxisBadge leftover-map axis share and leftover-map singular values. +Leftover-map comparison graphic leftover-map axis origin ticks stay +`leftover map comparison graphic leftover-map axis {k} origin tick {value}` when leftover-map axis share +and `σ_k` omit, +`leftover map comparison graphic leftover-map axis {k} origin tick {value} {share}%` when leftover-map +axis share is finite and `σ_k` omits, +`leftover map comparison graphic leftover-map axis {k} origin tick {value} σ {singular}` when `σ_k` is +finite and leftover-map axis share omits, and +`leftover map comparison graphic leftover-map axis {k} origin tick {value} σ {singular} {share}%` +when both are finite, so they stay distinct from leftover-map comparison graphic leftover-map axis ticks +`leftover map comparison graphic leftover-map axis {k} tick {value} σ {singular} {share}%` (ADR 0331), +from leftover-map graphic leftover-map axis ticks +`leftover-map axis {k} tick {value} σ {singular} {share}%` (ADR 0332), +from leftover-map comparison leftover-axis ticks +`leftover map comparison leftover axis {k} tick {value} σ {singular} {share}%` (ADR 0333), +from leftover-axis ticks +`leftover axis {k} tick {value} σ {singular} {share}%` (ADR 0334), +and from leftover-map comparison graphic leftover-map axis +`leftover map comparison graphic leftover-map axis {k} σ {value} ({share}%)` (ADR 0326). +It does not add columns. Do not invent a leftover score. Do not invent a theta. + +This protected increment uses **0335** so it does not collide with leftover-axis +tick leftover-map axis share independently of leftover-map singular values +(0334), leftover-map comparison leftover-axis tick leftover-map axis share independently of leftover-map singular values +(0333), leftover-map graphic leftover-map axis tick leftover-map axis share independently of leftover-map singular values +(0332), leftover-map comparison graphic leftover-map axis tick leftover-map axis share independently of leftover-map singular values +(0331), leftover-map coordinate ticks on the grouping comparison leftover-map graphic +(0320), leftover-map axis share persistence (0148), or the dashboard stacks. + +## Decision + +On leftover-map comparison graphic leftover-map axis origin ticks, caption leftover-map axis `k` +origin `0.00` when leftoverMapComparePlotTickAxisBadge returns a usable leftover-map origin tick +caption. Share and singular value omit independently through that helper: no `σ_k` and no +share keeps `leftover map comparison graphic leftover-map axis {k} origin tick {value}`; +`σ_k` only is `leftover map comparison graphic leftover-map axis {k} origin tick {value} σ {singular}`; +share only is `leftover map comparison graphic leftover-map axis {k} origin tick {value} {share}%`; +both are `leftover map comparison graphic leftover-map axis {k} origin tick {value} σ {singular} {share}%`. +A missing or non-finite leftover-map axis share omits that share origin tick caption and +keeps a usable leftover-map comparison graphic leftover-map axis origin tick coordinate caption, +including any leftover-map singular value. Rank-0 unused axes still name leftover-map origin +`0.00` and leftover-map axis share `0%`. Click a post marker to open that post. Criterion markers are not post +buttons. + +Leftover-map comparison graphic leftover-map axis origin ticks omit independently of leftover-map +graphic leftover-map axis ticks, leftover-map comparison leftover-axis ticks, leftover-axis ticks, leftover-map +comparison graphic leftover-map axis leftover-map axis share, and leftover-map comparison graphic leftover-map +axis leftover-map singular values. A missing leftover-map singular value omits leftover-map singular +values and keeps a usable leftover-map comparison graphic leftover-map axis origin tick leftover-map +axis share caption. Do not invent leftover-map origin from leftover-map axis share or leftover-map singular +values. Coordinate ticks that are not leftover-map origin keep leftover-map comparison graphic leftover-map +axis tick copy. + +This increment does not change leftover-map graphic leftover-map axis ticks, leftover-map comparison leftover-axis +ticks, or leftover-axis ticks. This increment does not persist leftover-map inner product, cosine, or length. + +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 graphic leftover-map axis origin ticks name leftover-map +origin when leftoverMapComparePlotTickAxisBadge returns a usable leftover-map comparison graphic leftover-map +axis origin tick caption even when leftover-map axis share or leftover-map singular +values are omitted; click a leftover pair opens that post. Hidden posts stay hidden. Rank-0 unused +axes still name leftover-map origin `0.00` and leftover-map axis share `0%`. Leftover-axis tick leftover-map axis share independently of leftover-map singular values +(ADR 0334), leftover-map comparison leftover-axis tick leftover-map axis share independently of leftover-map +singular values (ADR 0333), leftover-map graphic leftover-map axis tick leftover-map axis share independently of leftover-map +singular values (ADR 0332), leftover-map comparison graphic leftover-map axis tick leftover-map axis share independently of leftover-map +singular values (ADR 0331), leftover-map comparison leftover-axis leftover-map singular values (ADR 0323), leftover-axis report badge +leftover-map singular values independently of leftover-map axis share (ADR 0325), +and leftover-map graphic leftover-map axis ticks (ADR 0270) +remain. + +## Related + +Independent of leftover-axis tick leftover-map axis share independently of leftover-map +singular values +([ADR 0334](0334-leftover-map-axis-tick-share-badge.md)). Independent of leftover-map +comparison leftover-axis tick 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 +graphic leftover-map axis tick leftover-map axis share independently of leftover-map singular values +([ADR 0332](0332-leftover-map-plot-tick-share-badge.md)). Independent of leftover-map +comparison graphic leftover-map axis tick leftover-map axis share independently of leftover-map +singular values +([ADR 0331](0331-leftover-map-compare-plot-tick-share-badge.md)). Independent of leftover-map +comparison graphic leftover-map axis tick leftover-map singular values independently of leftover-map axis share +([ADR 0328](0328-leftover-map-compare-plot-tick-axis-badge.md)). Independent of leftover-map +coordinate ticks on the grouping comparison leftover-map graphic +([ADR 0320](0320-leftover-map-compare-plot-ticks.md)). Independent of leftover-map +axis share persistence ([ADR 0148](0148-leftover-map-axis-share.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. The origin is the +rank-0 unused-axis location, not a leftover score.) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index ae69b9f92..09fb00a5e 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,5 +1,28 @@ # Product & Technical Gap Baseline +> Exact-head loop overlay: 2026-08-31 16:22 KST. Protected `main` is +> `cb187cadee5fb6c46d8a944815ccc154a1e028d1`. Writes work. Do not +> self-approve. #875 leftover-map axis share on leftover-axis ticks independently of leftover-map +> singular values (v2.91.0 / ADR 0334) is `d19f1fd`, stacked on #874 @ `ba58c21`. +> Independent APPROVE is missing (Devin COMMENTED, not APPROVE). Next buyer increment on this cycle: +> leftover-map comparison graphic leftover-map axis origin ticks naming leftover-map origin +> independently of leftover-map axis share and leftover-map singular values +> (ADR 0335 / v2.92.0) delivered locally on +> `feat/leftover-map-compare-plot-tick-origin-badge-v2920`. Caption leftover-map origin `0.00` +> on leftover-map comparison graphic leftover-map axis ticks when leftoverMapComparePlotTickAxisBadge +> returns a usable leftover-map origin tick caption even when leftover-map axis share or leftover-map +> singular values omit. Distinct accessible names +> `leftover map comparison graphic leftover-map axis {axis} origin tick {value}`, +> `leftover map comparison graphic leftover-map axis {axis} origin tick {value} {share}%`, +> `leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular}`, and +> `leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular} {share}%`. +> Rank-0 unused axes still name leftover-map origin `0.00` and leftover-map axis share `0%`. Share and +> singular values omit independently of leftover-map origin. Do not invent leftover-map origin from leftover-map +> axis share or `σ_k`. Do not invent leftover-map axis share from `σ_k`. Do not invent `σ_k` from leftover-map +> axis share. Do not persist leftover-map inner product, cosine, or length. Stack onto #875. +> 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. Never self-approve. + > Exact-head loop overlay: 2026-08-31 15:40 KST. Protected `main` is > `cb187cadee5fb6c46d8a944815ccc154a1e028d1`. Writes work. Do not > self-approve. #874 leftover-map axis share on leftover-map comparison leftover-axis diff --git a/frontend/package.json b/frontend/package.json index d49feffeb..59bdbe0f1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "2.91.0", + "version": "2.92.0", "type": "module", "scripts": { "dev": "vite", diff --git a/frontend/src/components/LeftoverMapPlot.test.tsx b/frontend/src/components/LeftoverMapPlot.test.tsx index f1479f382..dac39faf2 100644 --- a/frontend/src/components/LeftoverMapPlot.test.tsx +++ b/frontend/src/components/LeftoverMapPlot.test.tsx @@ -2739,7 +2739,7 @@ describe("LeftoverMapPlot", () => { screen.getByLabelText("leftover map comparison graphic leftover-map axis 2 tick −0.02 σ 0.86 18%"), ).toBeInTheDocument(); expect( - screen.getByLabelText("leftover map comparison graphic leftover-map axis 1 tick 0.00 σ 1.84 82%"), + screen.getByLabelText("leftover map comparison graphic leftover-map axis 1 origin tick 0.00 σ 1.84 82%"), ).toBeInTheDocument(); expect( screen.queryByLabelText("leftover map comparison graphic leftover-map axis 1 tick +0.50"), @@ -2807,7 +2807,7 @@ describe("LeftoverMapPlot", () => { />, ); expect( - screen.getAllByLabelText("leftover map comparison graphic leftover-map axis 1 tick 0.00 σ 0.00 0%").length, + screen.getAllByLabelText("leftover map comparison graphic leftover-map axis 1 origin tick 0.00 σ 0.00 0%").length, ).toBeGreaterThan(0); expect( screen.queryByLabelText("leftover map comparison graphic leftover-map axis 1 tick +1.00"), @@ -2863,10 +2863,10 @@ describe("LeftoverMapPlot", () => { />, ); expect( - screen.getByLabelText("leftover map comparison graphic leftover-map axis 1 tick 0.00 σ 0.00 0%"), + screen.getByLabelText("leftover map comparison graphic leftover-map axis 1 origin tick 0.00 σ 0.00 0%"), ).toBeInTheDocument(); expect( - screen.getByLabelText("leftover map comparison graphic leftover-map axis 2 tick 0.00 σ 0.00 0%"), + screen.getByLabelText("leftover map comparison graphic leftover-map axis 2 origin tick 0.00 σ 0.00 0%"), ).toBeInTheDocument(); expect(screen.queryByLabelText("leftover-map axis 1 tick 0.00")).not.toBeInTheDocument(); expect(screen.queryByLabelText("leftover-map axis 2 tick 0.00")).not.toBeInTheDocument(); @@ -2894,7 +2894,7 @@ describe("LeftoverMapPlot", () => { screen.getByLabelText("leftover map comparison graphic leftover-map axis 1 tick +0.50 σ 1.84"), ).toBeInTheDocument(); expect( - screen.getByLabelText("leftover map comparison graphic leftover-map axis 1 tick 0.00 σ 1.84"), + screen.getByLabelText("leftover map comparison graphic leftover-map axis 1 origin tick 0.00 σ 1.84"), ).toBeInTheDocument(); expect( screen.getByLabelText("leftover map comparison graphic leftover-map axis 2 tick −0.02"), diff --git a/frontend/src/components/LeftoverMapPlot.tsx b/frontend/src/components/LeftoverMapPlot.tsx index b00235cae..5c1092716 100644 --- a/frontend/src/components/LeftoverMapPlot.tsx +++ b/frontend/src/components/LeftoverMapPlot.tsx @@ -230,6 +230,9 @@ function leftoverMapPlotTickText( * ADR 0332 fail-closes leftover-map graphic leftover-map axis ticks leftover-map * axis share through leftoverMapPlotTickAxisBadge independently of leftover-map * singular values. + * ADR 0335 fail-closes leftover-map comparison graphic leftover-map axis origin ticks + * through leftoverMapComparePlotTickAxisBadge independently of leftover-map axis share + * and leftover-map singular values. * Never invent a leftover score. */ export function LeftoverMapPlot({ diff --git a/frontend/src/i18n.test.ts b/frontend/src/i18n.test.ts index c3dccda8c..7732f51d5 100644 --- a/frontend/src/i18n.test.ts +++ b/frontend/src/i18n.test.ts @@ -119,6 +119,10 @@ describe("i18n", () => { "leftover map comparison graphic leftover-map axis {axis} tick {value} σ {singular}", "leftover map comparison graphic leftover-map axis {axis} tick {value} {share}%", "leftover map comparison graphic leftover-map axis {axis} tick {value} σ {singular} {share}%", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value}", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular}", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} {share}%", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular} {share}%", "leftover map comparison graphic leftover-map axis {axis} σ {value}", "leftover map comparison graphic leftover-map axis {axis} σ {value} ({share}%)", "leftover map comparison leftover axis {axis} σ {value}", @@ -775,7 +779,88 @@ describe("i18n", () => { ); it.each([ - ["ko", "잔여 지도 비교 그림 축 1 σ 1.84"], + ["ko", "잔여 지도 비교 그림 축 1 원점 눈금 0.00"], + ["zh", "残差地图比较图形轴 1 原点刻度 0.00"], + ["ja", "残差マップの比較図軸 1 原点目盛 0.00"], + ["vi", "vạch gốc trục đồ họa so sánh bản đồ phần dư 1 0.00"], + ] as const)( + "formats leftover map comparison graphic leftover-map axis origin ticks in %s", + (locale, expected) => { + setLocale(locale); + expect( + tf("leftover map comparison graphic leftover-map axis {axis} origin tick {value}", { + axis: 1, + value: "0.00", + }), + ).toBe(expected); + }, + ); + + it.each([ + ["ko", "잔여 지도 비교 그림 축 1 원점 눈금 0.00 σ 1.84"], + ["zh", "残差地图比较图形轴 1 原点刻度 0.00 σ 1.84"], + ["ja", "残差マップの比較図軸 1 原点目盛 0.00 σ 1.84"], + ["vi", "vạch gốc trục đồ họa so sánh bản đồ phần dư 1 0.00 σ 1.84"], + ] as const)( + "formats leftover map comparison graphic leftover-map axis origin tick leftover-map singular values in %s", + (locale, expected) => { + setLocale(locale); + expect( + tf( + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular}", + { + axis: 1, + value: "0.00", + singular: "1.84", + }, + ), + ).toBe(expected); + }, + ); + + it.each([ + ["ko", "잔여 지도 비교 그림 축 1 원점 눈금 0.00 82%"], + ["zh", "残差地图比较图形轴 1 原点刻度 0.00 82%"], + ["ja", "残差マップの比較図軸 1 原点目盛 0.00 82%"], + ["vi", "vạch gốc trục đồ họa so sánh bản đồ phần dư 1 0.00 82%"], + ] as const)( + "formats leftover map comparison graphic leftover-map axis origin tick leftover-map axis share in %s", + (locale, expected) => { + setLocale(locale); + expect( + tf("leftover map comparison graphic leftover-map axis {axis} origin tick {value} {share}%", { + axis: 1, + value: "0.00", + share: "82", + }), + ).toBe(expected); + }, + ); + + it.each([ + ["ko", "잔여 지도 비교 그림 축 1 원점 눈금 0.00 σ 1.84 82%"], + ["zh", "残差地图比较图形轴 1 原点刻度 0.00 σ 1.84 82%"], + ["ja", "残差マップの比較図軸 1 原点目盛 0.00 σ 1.84 82%"], + ["vi", "vạch gốc trục đồ họa so sánh bản đồ phần dư 1 0.00 σ 1.84 82%"], + ] as const)( + "formats leftover map comparison graphic leftover-map axis origin tick leftover-map singular values and leftover-map axis share in %s", + (locale, expected) => { + setLocale(locale); + expect( + tf( + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular} {share}%", + { + axis: 1, + value: "0.00", + singular: "1.84", + share: "82", + }, + ), + ).toBe(expected); + }, + ); + + it.each([ ["zh", "残差地图比较图形轴 1 σ 1.84"], ["ja", "残差マップの比較図軸 1 σ 1.84"], ["vi", "trục đồ họa so sánh bản đồ phần dư 1 σ 1.84"], diff --git a/frontend/src/i18n.ts b/frontend/src/i18n.ts index d9849eafd..4ac64cc36 100644 --- a/frontend/src/i18n.ts +++ b/frontend/src/i18n.ts @@ -303,6 +303,14 @@ const TRANSLATIONS: Partial>> = { "잔여 지도 비교 그림 축 {axis} 눈금 {value} {share}%", "leftover map comparison graphic leftover-map axis {axis} tick {value} σ {singular} {share}%": "잔여 지도 비교 그림 축 {axis} 눈금 {value} σ {singular} {share}%", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value}": + "잔여 지도 비교 그림 축 {axis} 원점 눈금 {value}", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular}": + "잔여 지도 비교 그림 축 {axis} 원점 눈금 {value} σ {singular}", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} {share}%": + "잔여 지도 비교 그림 축 {axis} 원점 눈금 {value} {share}%", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular} {share}%": + "잔여 지도 비교 그림 축 {axis} 원점 눈금 {value} σ {singular} {share}%", "leftover map comparison graphic leftover-map axis {axis} σ {value}": "잔여 지도 비교 그림 축 {axis} σ {value}", "leftover map comparison graphic leftover-map axis {axis} σ {value} ({share}%)": "잔여 지도 비교 그림 축 {axis} σ {value} ({share}%)", @@ -982,6 +990,14 @@ const TRANSLATIONS: Partial>> = { "残差地图比较图形轴 {axis} 刻度 {value} {share}%", "leftover map comparison graphic leftover-map axis {axis} tick {value} σ {singular} {share}%": "残差地图比较图形轴 {axis} 刻度 {value} σ {singular} {share}%", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value}": + "残差地图比较图形轴 {axis} 原点刻度 {value}", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular}": + "残差地图比较图形轴 {axis} 原点刻度 {value} σ {singular}", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} {share}%": + "残差地图比较图形轴 {axis} 原点刻度 {value} {share}%", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular} {share}%": + "残差地图比较图形轴 {axis} 原点刻度 {value} σ {singular} {share}%", "leftover map comparison graphic leftover-map axis {axis} σ {value}": "残差地图比较图形轴 {axis} σ {value}", "leftover map comparison graphic leftover-map axis {axis} σ {value} ({share}%)": "残差地图比较图形轴 {axis} σ {value} ({share}%)", @@ -1682,6 +1698,14 @@ const TRANSLATIONS: Partial>> = { "残差マップの比較図軸 {axis} 目盛 {value} {share}%", "leftover map comparison graphic leftover-map axis {axis} tick {value} σ {singular} {share}%": "残差マップの比較図軸 {axis} 目盛 {value} σ {singular} {share}%", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value}": + "残差マップの比較図軸 {axis} 原点目盛 {value}", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular}": + "残差マップの比較図軸 {axis} 原点目盛 {value} σ {singular}", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} {share}%": + "残差マップの比較図軸 {axis} 原点目盛 {value} {share}%", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular} {share}%": + "残差マップの比較図軸 {axis} 原点目盛 {value} σ {singular} {share}%", "leftover map comparison graphic leftover-map axis {axis} σ {value}": "残差マップの比較図軸 {axis} σ {value}", "leftover map comparison graphic leftover-map axis {axis} σ {value} ({share}%)": "残差マップの比較図軸 {axis} σ {value} ({share}%)", @@ -2361,6 +2385,14 @@ const TRANSLATIONS: Partial>> = { "vạch trục đồ họa so sánh bản đồ phần dư {axis} {value} {share}%", "leftover map comparison graphic leftover-map axis {axis} tick {value} σ {singular} {share}%": "vạch trục đồ họa so sánh bản đồ phần dư {axis} {value} σ {singular} {share}%", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value}": + "vạch gốc trục đồ họa so sánh bản đồ phần dư {axis} {value}", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular}": + "vạch gốc trục đồ họa so sánh bản đồ phần dư {axis} {value} σ {singular}", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} {share}%": + "vạch gốc trục đồ họa so sánh bản đồ phần dư {axis} {value} {share}%", + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular} {share}%": + "vạch gốc trục đồ họa so sánh bản đồ phần dư {axis} {value} σ {singular} {share}%", "leftover map comparison graphic leftover-map axis {axis} σ {value}": "trục đồ họa so sánh bản đồ phần dư {axis} σ {value}", "leftover map comparison graphic leftover-map axis {axis} σ {value} ({share}%)": diff --git a/frontend/src/leftoverMapAxisBadge.ts b/frontend/src/leftoverMapAxisBadge.ts index 51db097a6..40ade6802 100644 --- a/frontend/src/leftoverMapAxisBadge.ts +++ b/frontend/src/leftoverMapAxisBadge.ts @@ -22,6 +22,8 @@ * axis share as leftoverMapCompareAxisTickBadge, not this helper. * ADR 0334 names leftover-map leftover-axis ticks leftover-map axis share * as leftoverMapAxisTickBadge independently of leftover-map singular values. + * ADR 0335 names leftover-map comparison graphic leftover-map axis origin ticks as + * leftoverMapComparePlotTickAxisBadge, not this helper. */ import type { LeftoverMapAxis } from "./api"; diff --git a/frontend/src/leftoverMapPlotAxisSingular.test.ts b/frontend/src/leftoverMapPlotAxisSingular.test.ts index 86c4010ba..8ea8169f7 100644 --- a/frontend/src/leftoverMapPlotAxisSingular.test.ts +++ b/frontend/src/leftoverMapPlotAxisSingular.test.ts @@ -7,6 +7,7 @@ import { leftoverMapComparePlotTickAxisBadge, leftoverMapPlotAxisBadge, leftoverMapPlotTickAxisBadge, + leftoverMapPlotTickIsOrigin, leftoverSingularForAxis, LEFTOVER_MAP_COMPARE_AXIS_CAPTION, LEFTOVER_MAP_COMPARE_AXIS_LABEL, @@ -19,6 +20,10 @@ import { LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR_SHARE, LEFTOVER_MAP_COMPARE_PLOT_AXIS_SINGULAR, LEFTOVER_MAP_COMPARE_PLOT_AXIS_SINGULAR_SHARE, + LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK, + LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SHARE, + LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR, + LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE, LEFTOVER_MAP_COMPARE_PLOT_TICK_SHARE, LEFTOVER_MAP_COMPARE_PLOT_TICK_SINGULAR, LEFTOVER_MAP_COMPARE_PLOT_TICK_SINGULAR_SHARE, @@ -404,9 +409,9 @@ describe("leftover-map comparison graphic leftover-map axis tick leftover-map si }); }); - it("names rank-0 zero leftover-map singular values on leftover-map comparison graphic leftover-map axis ticks", () => { + it("names rank-0 leftover-map origin leftover-map singular values on leftover-map comparison graphic leftover-map axis origin ticks", () => { expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", 0)).toEqual({ - key: LEFTOVER_MAP_COMPARE_PLOT_TICK_SINGULAR, + key: LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR, values: { axis: 1, value: "0.00", singular: "0.00" }, }); }); @@ -577,13 +582,13 @@ describe("leftover-map comparison graphic leftover-map axis tick leftover-map ax expect(leftoverMapComparePlotTickAxisBadge(1, "+0.50", null, 0.82).values.singular).toBeUndefined(); }); - it("names rank-0 zero leftover-map axis share on leftover-map comparison graphic leftover-map axis ticks", () => { + it("names rank-0 leftover-map origin leftover-map axis share on leftover-map comparison graphic leftover-map axis origin ticks", () => { expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", 0, 0)).toEqual({ - key: LEFTOVER_MAP_COMPARE_PLOT_TICK_SINGULAR_SHARE, + key: LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE, values: { axis: 1, value: "0.00", singular: "0.00", share: "0" }, }); expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", null, 0)).toEqual({ - key: LEFTOVER_MAP_COMPARE_PLOT_TICK_SHARE, + key: LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SHARE, values: { axis: 1, value: "0.00", share: "0" }, }); }); @@ -876,3 +881,120 @@ describe("leftover-map comparison leftover-axis tick leftover-map axis share", ( ); }); }); + +describe("leftover-map comparison graphic leftover-map axis origin ticks", () => { + it("names leftover-map origin on leftover-map comparison graphic leftover-map axis ticks independently of leftover-map axis share and leftover-map singular values", () => { + expect(leftoverMapPlotTickIsOrigin("0.00")).toBe(true); + expect(leftoverMapPlotTickIsOrigin("+0.50")).toBe(false); + expect(leftoverMapPlotTickIsOrigin("−0.02")).toBe(false); + expect(leftoverMapPlotTickIsOrigin("+0.00")).toBe(false); + expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", 1.84, 0.82)).toEqual({ + key: LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE, + values: { axis: 1, value: "0.00", singular: "1.84", share: "82" }, + }); + expect(leftoverMapComparePlotTickAxisBadge(2, "0.00", 0.86, 0.18)).toEqual({ + key: LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE, + values: { axis: 2, value: "0.00", singular: "0.86", share: "18" }, + }); + }); + + it("names leftover-map origin when leftover-map singular values omit", () => { + expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", Number.NaN, 0.82)).toEqual({ + key: LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SHARE, + values: { axis: 1, value: "0.00", share: "82" }, + }); + expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", null, 0.82).values.singular).toBeUndefined(); + }); + + it("names leftover-map origin when leftover-map axis share omits", () => { + expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", 1.84, Number.NaN)).toEqual({ + key: LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR, + values: { axis: 1, value: "0.00", singular: "1.84" }, + }); + expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", 1.84, null)).toEqual({ + key: LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR, + values: { axis: 1, value: "0.00", singular: "1.84" }, + }); + }); + + it("names leftover-map origin when leftover-map axis share and leftover-map singular values omit", () => { + expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", Number.NaN, Number.NaN)).toEqual({ + key: LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK, + values: { axis: 1, value: "0.00" }, + }); + }); + + it("names rank-0 leftover-map origin leftover-map axis share 0% and leftover-map singular values 0.00", () => { + expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", 0, 0)).toEqual({ + key: LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE, + values: { axis: 1, value: "0.00", singular: "0.00", share: "0" }, + }); + expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", null, 0)).toEqual({ + key: LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SHARE, + values: { axis: 1, value: "0.00", share: "0" }, + }); + }); + + it("does not invent leftover-map origin from leftover-map axis share or leftover-map singular values", () => { + expect(leftoverMapComparePlotTickAxisBadge(1, "+0.50", 1.84, 0.82).key).toBe( + LEFTOVER_MAP_COMPARE_PLOT_TICK_SINGULAR_SHARE, + ); + expect(leftoverMapComparePlotTickAxisBadge(1, "+0.50", 1.84, 0.82).key).not.toBe( + LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE, + ); + expect(leftoverMapComparePlotTickAxisBadge(1, "−0.02", Number.NaN, 0.18).key).toBe( + LEFTOVER_MAP_COMPARE_PLOT_TICK_SHARE, + ); + expect(leftoverMapPlotTickIsOrigin("+0.50")).toBe(false); + }); + + it("does not name leftover-map origin on leftover-map graphic leftover-map axis ticks, leftover-map comparison leftover-axis ticks, or leftover-axis ticks", () => { + expect(leftoverMapPlotTickAxisBadge(1, "0.00", 1.84, 0.82).key).toBe( + LEFTOVER_MAP_PLOT_TICK_SINGULAR_SHARE, + ); + expect(leftoverMapPlotTickAxisBadge(1, "0.00", 1.84, 0.82).key).not.toBe( + leftoverMapComparePlotTickAxisBadge(1, "0.00", 1.84, 0.82).key, + ); + expect(leftoverMapCompareAxisTickBadge(1, "0.00", 1.84, 0.82).key).not.toBe( + leftoverMapComparePlotTickAxisBadge(1, "0.00", 1.84, 0.82).key, + ); + expect(leftoverMapAxisTickBadge(1, "0.00", 1.84, 0.82).key).not.toBe( + leftoverMapComparePlotTickAxisBadge(1, "0.00", 1.84, 0.82).key, + ); + }); + + it("stays distinct from leftover-map comparison graphic leftover-map axis ticks, leftover-map graphic leftover-map axis ticks, leftover-map comparison leftover-axis ticks, leftover-axis ticks, and leftover-map comparison graphic leftover-map axis copy", () => { + expect(LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK).toBe( + "leftover map comparison graphic leftover-map axis {axis} origin tick {value}", + ); + expect(LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR).toBe( + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular}", + ); + expect(LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SHARE).toBe( + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} {share}%", + ); + expect(LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE).toBe( + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular} {share}%", + ); + expect(LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK).not.toBe(LEFTOVER_MAP_COMPARE_PLOT_TICK); + expect(LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR).not.toBe( + LEFTOVER_MAP_COMPARE_PLOT_TICK_SINGULAR, + ); + expect(LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SHARE).not.toBe(LEFTOVER_MAP_COMPARE_PLOT_TICK_SHARE); + expect(LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE).not.toBe( + LEFTOVER_MAP_COMPARE_PLOT_TICK_SINGULAR_SHARE, + ); + expect(LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE).not.toBe( + LEFTOVER_MAP_PLOT_TICK_SINGULAR_SHARE, + ); + expect(LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE).not.toBe( + LEFTOVER_MAP_COMPARE_AXIS_TICK_SINGULAR_SHARE, + ); + expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", 1.84, 0.82).key).not.toBe( + leftoverMapComparePlotTickAxisBadge(1, "+0.50", 1.84, 0.82).key, + ); + expect(leftoverMapComparePlotTickAxisBadge(1, "0.00", 1.84, 0.82).key).not.toBe( + leftoverMapComparePlotAxisBadge(1, 1.84, 0.82)?.key, + ); + }); +}); diff --git a/frontend/src/leftoverMapPlotAxisSingular.ts b/frontend/src/leftoverMapPlotAxisSingular.ts index 1085fabe6..0810278e5 100644 --- a/frontend/src/leftoverMapPlotAxisSingular.ts +++ b/frontend/src/leftoverMapPlotAxisSingular.ts @@ -29,6 +29,10 @@ * ADR 0334 names leftover-map leftover-axis ticks leftover-map * axis share as leftoverMapAxisTickBadge independently of leftover-map * singular values. + * ADR 0335 names leftover-map comparison graphic leftover-map axis origin ticks as + * leftoverMapComparePlotTickAxisBadge independently of leftover-map axis share and + * leftover-map singular values. leftoverMapPlotTickAxisBadge, leftoverMapCompareAxisTickBadge, + * and leftoverMapAxisTickBadge do not name leftover-map origin this increment. */ import type { LeftoverMapAxis } from "./api"; @@ -41,6 +45,7 @@ import { LEFTOVER_MAP_COMPARE_PLOT_TICK, LEFTOVER_MAP_PLOT_TICK, } from "./leftoverMapPlotLayout"; +import { formatSignedLeftoverValue } from "./leftoverMapUnexplained"; export const LEFTOVER_MAP_PLOT_AXIS_SINGULAR = "leftover-map axis {axis} σ {value}"; @@ -71,6 +76,18 @@ export const LEFTOVER_MAP_COMPARE_PLOT_TICK_SHARE = export const LEFTOVER_MAP_COMPARE_PLOT_TICK_SINGULAR_SHARE = "leftover map comparison graphic leftover-map axis {axis} tick {value} σ {singular} {share}%"; +export const LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK = + "leftover map comparison graphic leftover-map axis {axis} origin tick {value}"; + +export const LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR = + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular}"; + +export const LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SHARE = + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} {share}%"; + +export const LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE = + "leftover map comparison graphic leftover-map axis {axis} origin tick {value} σ {singular} {share}%"; + export const LEFTOVER_MAP_COMPARE_AXIS_SINGULAR = "leftover map comparison leftover axis {axis} σ {value}"; @@ -132,6 +149,11 @@ export function formatLeftoverMapPlotAxisSingular( return leftoverSingular.toFixed(2); } +export function leftoverMapPlotTickIsOrigin(tickLabel: string): boolean { + const originLabel = formatSignedLeftoverValue(0); + return originLabel !== null && tickLabel === originLabel; +} + export function leftoverMapPlotAxisBadge( axisIndex: number, leftoverSingular: number | null | undefined, @@ -238,23 +260,31 @@ export function leftoverMapComparePlotTickAxisBadge( ): LeftoverMapCompareAxisBadge { const singular = formatLeftoverMapPlotAxisSingular(leftoverSingular); const percent = formatLeftoverMapPlotAxisShare(leftoverShare); + const origin = leftoverMapPlotTickIsOrigin(tickLabel); if (singular === null && percent === null) { - return { key: LEFTOVER_MAP_COMPARE_PLOT_TICK, values: { axis: axisIndex, value: tickLabel } }; + return { + key: origin ? LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK : LEFTOVER_MAP_COMPARE_PLOT_TICK, + values: { axis: axisIndex, value: tickLabel }, + }; } if (singular === null && percent !== null) { return { - key: LEFTOVER_MAP_COMPARE_PLOT_TICK_SHARE, + key: origin ? LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SHARE : LEFTOVER_MAP_COMPARE_PLOT_TICK_SHARE, values: { axis: axisIndex, value: tickLabel, share: percent }, }; } if (singular !== null && percent === null) { return { - key: LEFTOVER_MAP_COMPARE_PLOT_TICK_SINGULAR, + key: origin + ? LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR + : LEFTOVER_MAP_COMPARE_PLOT_TICK_SINGULAR, values: { axis: axisIndex, value: tickLabel, singular }, }; } return { - key: LEFTOVER_MAP_COMPARE_PLOT_TICK_SINGULAR_SHARE, + key: origin + ? LEFTOVER_MAP_COMPARE_PLOT_ORIGIN_TICK_SINGULAR_SHARE + : LEFTOVER_MAP_COMPARE_PLOT_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 521525cf4..a1d204fc1 100644 --- a/frontend/src/leftoverMapPlotLayout.ts +++ b/frontend/src/leftoverMapPlotLayout.ts @@ -115,6 +115,9 @@ * ADR 0334 fail-closes leftover-map leftover-axis ticks leftover-map * axis share through leftoverMapAxisTickBadge independently of leftover-map * singular values, not this graphic. + * ADR 0335 fail-closes leftover-map comparison graphic leftover-map axis origin ticks + * through leftoverMapComparePlotTickAxisBadge independently of leftover-map axis share + * and leftover-map singular values. */ import { formatLeftoverMapCoordinatePair } from "./leftoverMapCoordinates"; diff --git a/pyproject.toml b/pyproject.toml index ff27fbf8a..c03740504 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "lineageweave" -version = "2.91.0" +version = "2.92.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" }