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 @@ -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
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 2 additions & 0 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.d/2.102.0-leftover-map-compare-axis-tick-origin-badge.md
Original file line number Diff line number Diff line change
@@ -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.
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 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
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), 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),
Expand Down
2 changes: 2 additions & 0 deletions docs/adr/0329-leftover-map-compare-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 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
Expand Down
2 changes: 2 additions & 0 deletions docs/adr/0333-leftover-map-compare-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 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
Expand Down
2 changes: 2 additions & 0 deletions docs/adr/0344-leftover-map-compare-plot-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 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
Expand Down
97 changes: 97 additions & 0 deletions docs/adr/0345-leftover-map-compare-axis-tick-origin-badge.md
Original file line number Diff line number Diff line change
@@ -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.)
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: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
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.101.0",
"version": "2.102.0",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
15 changes: 11 additions & 4 deletions frontend/src/App.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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",
Expand Down
Loading