Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -841,6 +841,11 @@ returns a leftover-map origin tick caption independently of leftover-map axis sh
`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.
ADR 0346 captions leftover-map leftover-axis origin ticks with leftover-map origin when leftoverMapAxisTickBadge
returns a leftover-map origin tick caption independently of leftover-map axis share and leftover-map singular values. Distinct accessible name
`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. leftoverMapCompareAxisTickBadge stays leftover-map comparison leftover-axis origin 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
Expand Down Expand Up @@ -1020,6 +1025,8 @@ Leftover-map comparison graphic leftover-map axis origin ticks independently of
(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.
Leftover-map leftover-axis origin ticks independently of leftover-map axis share and leftover-map singular values
(ADR 0346) captions leftover-map leftover-axis origin ticks when leftoverMapAxisTickBadge 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)
Expand Down
2 changes: 2 additions & 0 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -815,6 +815,8 @@ ADR 0344 captions leftover-map comparison graphic leftover-map axis origin ticks
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.
ADR 0346 captions leftover-map leftover-axis origin ticks when leftoverMapAxisTickBadge
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
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.d/2.103.0-leftover-map-axis-tick-origin-badge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## 2.103.0 — Leftover-map origin on leftover-axis ticks independently of leftover-map axis share and leftover-map singular values

- Caption leftover-map leftover-axis origin ticks through leftoverMapAxisTickBadge
independently of leftover-map axis share and leftover-map singular values (ADR 0346). After `make seed`, leftover-map leftover-
axis origin ticks name leftover-map origin when leftoverMapPlotTickIsOrigin returns true. Distinct accessible name
`leftover axis {axis} origin tick {value}`. Rank-0 unused axes still name leftover-map origin `0.00`. Share and
singular omit independently as
`leftover axis {axis} origin tick {value} σ {singular}`,
`leftover axis {axis} origin tick {value} {share}%`, and
`leftover axis {axis} origin tick {value} σ {singular} {share}%`.
Non-origin leftover-map leftover-axis ticks stay
`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. leftoverMapCompareAxisTickBadge stays leftover-map comparison leftover-axis origin 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.
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,21 @@ All notable changes to this project are documented here. Format follows

### Added

- Period leftover pairs now caption leftover-map leftover-axis origin ticks
through leftoverMapAxisTickBadge independently of leftover-map axis share and leftover-map singular values (ADR 0346 / v2.103.0). After `make seed`, leftover-map leftover-axis
origin ticks name leftover-map origin when leftoverMapPlotTickIsOrigin returns true. Distinct accessible name
`leftover axis {axis} origin tick {value}`. Rank-0 unused axes still name leftover-map origin `0.00`. Share and
singular omit independently as
`leftover axis {axis} origin tick {value} σ {singular}`,
`leftover axis {axis} origin tick {value} {share}%`, and
`leftover axis {axis} origin tick {value} σ {singular} {share}%`.
Non-origin leftover-map leftover-axis ticks stay
`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. leftoverMapCompareAxisTickBadge stays leftover-map comparison leftover-axis origin 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 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
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 / 0345), 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 / 0346), 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),
Expand Down
2 changes: 2 additions & 0 deletions docs/adr/0330-leftover-map-axis-tick-badge.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
**Decision status:** Accepted
**Date:** 2026-08-31

**Amended by:** [ADR 0346](0346-leftover-map-axis-tick-origin-badge.md)

Amends leftover-map singular values on leftover-axis report badges independently of leftover-map
axis share ([ADR 0325](0325-leftover-map-axis-singular-only.md)), leftover-map axis share
persistence ([ADR 0148](0148-leftover-map-axis-share.md)). Independent of leftover-map
Expand Down
2 changes: 2 additions & 0 deletions docs/adr/0334-leftover-map-axis-tick-share-badge.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
**Decision status:** Accepted
**Date:** 2026-08-31

**Amended by:** [ADR 0346](0346-leftover-map-axis-tick-origin-badge.md)

Amends leftover-axis tick leftover-map singular values independently of leftover-map
axis share
([ADR 0330](0330-leftover-map-axis-tick-badge.md)), leftover-map
Expand Down
2 changes: 2 additions & 0 deletions docs/adr/0345-leftover-map-compare-axis-tick-origin-badge.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
**Decision status:** Accepted
**Date:** 2026-08-31

**Amended by:** [ADR 0346](0346-leftover-map-axis-tick-origin-badge.md)

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
Expand Down
103 changes: 103 additions & 0 deletions docs/adr/0346-leftover-map-axis-tick-origin-badge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# ADR 0346 — Name leftover-map origin on leftover-axis ticks independently of leftover-map axis share and leftover-map singular values

**Decision status:** Accepted
**Date:** 2026-08-31

Amends leftover-axis ticks leftover-map singular values
([ADR 0330](0330-leftover-map-axis-tick-badge.md)) and leftover-axis ticks leftover-map axis share
([ADR 0334](0334-leftover-map-axis-tick-share-badge.md)). Independent of leftover-map
comparison leftover-axis origin ticks independently of leftover-map axis share and leftover-map singular values
([ADR 0345](0345-leftover-map-compare-axis-tick-origin-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
leftover-axis origin ticks on the competing origin-tick stack (do not mix #877).

## Context

ADR 0330 already names leftover-axis ticks
`leftover axis {axis} tick {value}`. ADR 0330 already names leftover-map
singular values `σ_k` on those ticks. ADR 0334 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-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. leftoverMapCompareAxisTickBadge stays leftover-map comparison leftover-axis origin tick keys from ADR 0345.

This increment names leftover-map leftover-axis origin ticks as
leftoverMapAxisTickBadge. Leftover-map leftover-axis origin ticks stay
`leftover axis {axis} origin tick {value}`
when leftoverMapPlotTickIsOrigin returns true, so they stay distinct from leftover-map
leftover-axis ticks
`leftover axis {axis} tick {value}`,
leftover-map comparison leftover-axis origin ticks
`leftover map comparison leftover axis {axis} origin 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 axis {axis} origin tick {value} σ {singular}`,
`leftover axis {axis} origin tick {value} {share}%`, and
`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 **0346** so it does not collide with leftover-map
comparison leftover-axis origin ticks independently of leftover-map axis share and leftover-map singular values
(0345) or leftover-map leftover-axis origin ticks (#877).

## Decision

On 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-axis tick keys. leftoverMapPlotTickAxisBadge,
leftoverMapComparePlotTickAxisBadge, and leftoverMapCompareAxisTickBadge 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 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.
leftoverMapCompareAxisTickBadge stays leftover-map comparison leftover-axis origin tick keys.
leftover-axis ticks leftover-map singular values
independently of leftover-map axis share (ADR 0330) and leftover-axis
ticks leftover-map axis share independently of leftover-map singular values
(ADR 0334) remain.

## Related

Independent of leftover-map comparison leftover-axis origin ticks independently of leftover-map
axis share and leftover-map singular values
([ADR 0345](0345-leftover-map-compare-axis-tick-origin-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-axis
ticks leftover-map axis share independently of leftover-map
singular values ([ADR 0334](0334-leftover-map-axis-tick-share-badge.md)). Independent of leftover-axis
ticks leftover-map singular values independently of leftover-map
axis share ([ADR 0330](0330-leftover-map-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.)
10 changes: 10 additions & 0 deletions docs/product-technical-gap-baseline.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Product & Technical Gap Baseline

> Exact-head loop overlay: 2026-08-31 19:32 KST. Protected `main` is
> `cb187cadee5fb6c46d8a944815ccc154a1e028d1`. Writes work. Do not
> self-approve. #887 leftover-map comparison leftover-axis origin ticks independently of leftover-map
> axis share and leftover-map singular values (v2.102.0 / ADR 0345) is
> `7637fc8`, stacked on #886 @ `4a31a41`. Independent APPROVE is missing (Devin COMMENTED,
> not APPROVE). Next buyer increment on this cycle: leftover-map leftover-axis
> origin ticks independently of leftover-map axis share and leftover-map singular values as leftoverMapAxisTickBadge (ADR 0346 / v2.103.0) delivered locally on
> `feat/leftover-map-axis-tick-origin-badge-v21030`. Distinct accessible name
> `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. leftoverMapCompareAxisTickBadge stays leftover-map comparison leftover-axis origin tick keys. Do not invent leftover-map origin from leftover-map axis share or `σ_k`. Do not mix #877. Stack onto #887. 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: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
Expand Down
2 changes: 1 addition & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "frontend",
"private": true,
"version": "2.102.0",
"version": "2.103.0",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
6 changes: 4 additions & 2 deletions frontend/src/App.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4191,8 +4191,10 @@ describe("App, authenticated", () => {
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();
expect(screen.getByText("leftover axis 2 tick 0.00 σ 0.86 18%")).toBeInTheDocument();
expect(screen.getByText("leftover axis 1 origin tick 0.00 σ 1.84 82%")).toBeInTheDocument();
expect(screen.getByText("leftover axis 2 origin tick 0.00 σ 0.86 18%")).toBeInTheDocument();
expect(screen.queryByText("leftover axis 1 tick 0.00 σ 1.84 82%")).not.toBeInTheDocument();
expect(screen.queryByText("leftover axis 2 tick 0.00 σ 0.86 18%")).not.toBeInTheDocument();
expect(screen.queryByText("leftover-map axis 1 tick +0.50 σ 1.84")).not.toBeInTheDocument();
expect(screen.getByLabelText("Leftover map comparison leftover axis")).toHaveTextContent(
"Open a leftover pair to read the post–criterion cell",
Expand Down
6 changes: 4 additions & 2 deletions frontend/src/components/LeftoverMapPlot.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,10 @@ function leftoverMapPlotPostText(
* 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.
* singular values.
* ADR 0346 fail-closes leftover-map leftover-axis origin ticks through
* leftoverMapAxisTickBadge independently of leftover-map axis share and leftover-map
* singular values.
* Never invent a leftover score.
*/
export function LeftoverMapPlot({
Expand Down
Loading