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 @@ -846,6 +846,11 @@ returns a leftover-map origin tick caption independently of leftover-map axis sh
`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.
ADR 0347 captions leftover-map graphic leftover-map origin with leftover-map origin when leftoverMapPlotOriginBadge
returns a leftover-map origin caption independently of leftover-map axis origin ticks, leftover-map axis share, and leftover-map singular values. Distinct accessible name
`leftover-map origin {origin}`. Rank-0 unused axes still name leftover-map origin `(0.00, 0.00)`.
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. leftoverMapAxisTickBadge stays leftover-map leftover-axis origin tick keys this increment. leftover-map comparison graphic leftover-map origin stays unnamed 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 @@ -1027,6 +1032,8 @@ Leftover-map comparison leftover-axis origin ticks independently of leftover-map
(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.
Leftover-map graphic leftover-map origin independently of leftover-map axis origin ticks, leftover-map axis share, and leftover-map singular values
(ADR 0347) captions leftover-map graphic leftover-map origin when leftoverMapPlotOriginBadge returns a leftover-map origin 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 @@ -817,6 +817,8 @@ ADR 0345 captions leftover-map comparison leftover-axis origin ticks when leftov
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.
ADR 0347 captions leftover-map graphic leftover-map origin when leftoverMapPlotOriginBadge
returns a leftover-map origin caption independently of leftover-map axis origin ticks, 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
12 changes: 12 additions & 0 deletions CHANGELOG.d/2.104.0-leftover-map-plot-origin-badge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
## 2.104.0 — Leftover-map origin on leftover-map graphic independently of leftover-map axis origin ticks, leftover-map axis share, and leftover-map singular values

- Caption leftover-map graphic leftover-map origin through leftoverMapPlotOriginBadge
independently of leftover-map axis origin ticks, leftover-map axis share, and leftover-map singular values (ADR 0347). After `make seed`, leftover-map graphic leftover-map
origin names leftover-map origin when leftoverMapPlotOriginBadge returns a usable leftover-map origin caption. Distinct accessible name
`leftover-map origin {origin}`. Rank-0 unused axes still name leftover-map origin `(0.00, 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.
leftoverMapAxisTickBadge stays leftover-map leftover-axis origin tick keys this increment. leftover-map comparison graphic leftover-map origin stays unnamed 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.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ All notable changes to this project are documented here. Format follows

### Added

- Period leftover pairs now caption leftover-map graphic leftover-map origin
through leftoverMapPlotOriginBadge independently of leftover-map axis origin ticks, leftover-map axis share, and leftover-map singular values (ADR 0347 / v2.104.0). After `make seed`, leftover-map graphic leftover-map
origin names leftover-map origin when leftoverMapPlotOriginBadge returns a usable leftover-map origin caption. Distinct accessible name
`leftover-map origin {origin}`. Rank-0 unused axes still name leftover-map origin `(0.00, 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.
leftoverMapAxisTickBadge stays leftover-map leftover-axis origin tick keys this increment. leftover-map comparison graphic leftover-map origin stays unnamed 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 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
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 / 0346), 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 / 0347), 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
4 changes: 3 additions & 1 deletion docs/adr/0343-leftover-map-plot-tick-origin-badge.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
**Date:** 2026-08-31

**Amended by:** [ADR 0344](0344-leftover-map-compare-plot-tick-origin-badge.md)
(leftover-map origin on leftover-map comparison graphic leftover-map axis ticks independently of leftover-map axis share and leftover-map singular values)
(leftover-map origin on leftover-map comparison graphic leftover-map axis ticks independently of leftover-map axis share and leftover-map singular values);
[ADR 0347](0347-leftover-map-plot-origin-badge.md)
(leftover-map origin on leftover-map graphic independently of leftover-map axis origin ticks, leftover-map axis share, and leftover-map singular values)

Amends leftover-map coordinate ticks
([ADR 0270](0270-leftover-map-coordinate-ticks.md)), leftover-map graphic leftover-map axis ticks leftover-map singular values
Expand Down
3 changes: 3 additions & 0 deletions docs/adr/0346-leftover-map-axis-tick-origin-badge.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
**Decision status:** Accepted
**Date:** 2026-08-31

**Amended by:** [ADR 0347](0347-leftover-map-plot-origin-badge.md)
(leftover-map origin on leftover-map graphic independently of leftover-map axis origin ticks, leftover-map axis share, and leftover-map singular values)

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

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

**Numbering status:** provisional conflict. ADR 0347 is also claimed by the active leftover-map criterion-origin stack (#891). This proposal was retargeted behind the current #917 stack after that collision was detected and MUST receive a new non-conflicting ADR/version identity during conflict-preserving reconstruction before it can become Accepted or merge.
Comment on lines +3 to +6

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Unresolved ADR identity blocks merge

The feature still ships as ADR 0347 after Decision status becomes Proposed. Its declared numbering conflict must be resolved before merge.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.


**Amended by:** none yet

Amends 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 independently of leftover-map axis share and leftover-map singular values
([ADR 0346](0346-leftover-map-axis-tick-origin-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
comparison graphic leftover-map origin (do not mix #877).

## Context

ADR 0343 already names leftover-map graphic leftover-map axis origin ticks
`leftover-map axis {axis} origin tick {value}` when leftoverMapPlotTickIsOrigin returns true.
Rank-0 unused axes still persist leftover-map origin `0.00`
(`formatSignedLeftoverValue(0)` emits no plus). Leftover-map origin on leftover-map
graphic still interpolates leftover-map origin only through leftover-map axis origin 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`. 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.
leftoverMapAxisTickBadge stays leftover-map leftover-axis origin tick keys from ADR 0346.

This increment proposes naming leftover-map graphic leftover-map origin as
leftoverMapPlotOriginBadge. Leftover-map graphic leftover-map origin stays
`leftover-map origin {origin}`
when leftoverMapPlotOriginBadge returns a usable leftover-map origin caption, so it stays distinct from leftover-map
graphic leftover-map axis origin ticks
`leftover-map 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}`,
leftover-map comparison leftover-axis origin ticks
`leftover map comparison leftover axis {axis} origin tick {value}`,
and leftover-map leftover-axis origin ticks
`leftover axis {axis} origin tick {value}`.
Rank-0 unused axes still name leftover-map origin `(0.00, 0.00)`
(`formatLeftoverMapCoordinatePair(0, 0)`). leftoverMapComparePlotOriginBadge stays unnamed
this increment. It does not add columns. Do not invent a leftover score. Do not invent a theta.

The original branch allocated **0347**, but the live queue now contains a separate active ADR 0347 in #891 and its descendants. That allocation is therefore not authoritative. Preserve the feature delta, keep this decision Proposed, and renumber/version it only after reconstructing it on the current predecessor without overwriting intervening stack changes.

## Decision

On leftover-map graphic, caption leftover-map origin
when leftoverMapPlotOriginBadge returns a usable leftover-map origin caption. Rank-0 unused axes still name leftover-map
origin `(0.00, 0.00)`. Do not invent leftover-map origin from leftover-map axis share or leftover-map singular values `σ_k`.
leftoverMapPlotTickAxisBadge, leftoverMapComparePlotTickAxisBadge, leftoverMapCompareAxisTickBadge, and leftoverMapAxisTickBadge
do not change leftover-map origin naming this increment. leftover-map comparison graphic leftover-map origin stays unnamed this increment.

Do not add SQL. Do not edit shipped migrations. Do not invent a leftover
score. Do not invent a theta.

## Consequences

After the proposal is reconstructed with a unique ADR/version identity and accepted, leftover-map graphic leftover-map origin names
leftover-map origin independently of leftover-map axis origin ticks, leftover-map axis share, and leftover-map
singular values. Rank-0 unused axes still name leftover-map origin `(0.00, 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.
leftoverMapAxisTickBadge stays leftover-map leftover-axis origin tick keys.
leftover-map graphic leftover-map axis origin ticks independently of leftover-map axis share and leftover-map
singular values (ADR 0343) remain.

## Related

Independent of leftover-map leftover-axis origin ticks independently of leftover-map
axis share and leftover-map singular values
([ADR 0346](0346-leftover-map-axis-tick-origin-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)).

## 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 20:05 KST. Protected `main` is
> `cb187cadee5fb6c46d8a944815ccc154a1e028d1`. Writes work. Do not
> self-approve. #889 leftover-map leftover-axis origin ticks independently of leftover-map
> axis share and leftover-map singular values (v2.103.0 / ADR 0346) is
> `4bfb490`, stacked on #887 @ `7637fc8`. Independent APPROVE is missing (Devin COMMENT is
> not APPROVE). Next buyer increment on this cycle: leftover-map graphic leftover-map
> origin independently of leftover-map axis origin ticks, leftover-map axis share, and leftover-map singular values as leftoverMapPlotOriginBadge (ADR 0347 / v2.104.0) delivered locally on
> `feat/leftover-map-plot-origin-badge-v21040`. Distinct accessible name
> `leftover-map origin {origin}`. Rank-0 unused axes still name leftover-map origin `(0.00, 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. leftoverMapAxisTickBadge stays leftover-map leftover-axis origin tick keys. leftover-map comparison graphic leftover-map origin stays unnamed this increment. Do not invent leftover-map origin from leftover-map axis share or `σ_k`. Do not mix #877. Stack onto #889. 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:32 KST. Protected `main` is
> `cb187cadee5fb6c46d8a944815ccc154a1e028d1`. Writes work. Do not
> self-approve. #887 leftover-map comparison leftover-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.103.0",
"version": "2.104.0",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
4 changes: 4 additions & 0 deletions frontend/src/components/LeftoverMapPlot.css
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@
stroke-width: 1;
}

.leftover-map-plot-origin circle {
fill: var(--color-text);
}

.leftover-map-plot-tick line {
stroke: var(--color-text);
stroke-width: 1;
Expand Down
5 changes: 5 additions & 0 deletions frontend/src/components/LeftoverMapPlot.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ describe("LeftoverMapPlot", () => {
expect(screen.getByLabelText("leftover-map axis 1 tick +0.50")).toBeInTheDocument();
expect(screen.getByLabelText("leftover-map axis 2 tick −0.02")).toBeInTheDocument();
expect(screen.getByLabelText("leftover-map axis 1 origin tick 0.00")).toBeInTheDocument();
expect(screen.getByLabelText("leftover-map origin (0.00, 0.00)")).toBeInTheDocument();
expect(screen.getByLabelText("leftover-map distance d 0.12")).toBeInTheDocument();
expect(screen.getByLabelText("leftover-map distance d 1.84")).toBeInTheDocument();
expect(screen.getByLabelText("leftover-map reconstruction R̂ +0.25")).toBeInTheDocument();
Expand Down Expand Up @@ -2824,6 +2825,10 @@ describe("LeftoverMapPlot", () => {
expect(
screen.getByLabelText("leftover map comparison graphic leftover-map axis 1 origin tick 0.00 σ 1.84 82%"),
).toBeInTheDocument();
expect(screen.queryByLabelText("leftover-map origin (0.00, 0.00)")).not.toBeInTheDocument();
expect(
screen.queryByLabelText("leftover map comparison graphic leftover-map origin (0.00, 0.00)"),
).not.toBeInTheDocument();
expect(
screen.queryByLabelText("leftover map comparison graphic leftover-map axis 1 tick +0.50"),
).not.toBeInTheDocument();
Expand Down
Loading