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 criterion leftover-map origin leftover-map item coordinates with leftover-map origin when leftoverMapPlotCriterionBadge
returns a leftover-map origin leftover-map item coordinate caption independently of leftover-map person coordinates. Distinct accessible name
`leftover-map criterion {label} at leftover-map origin ζ {item}`. Rank-0 unused axes still name leftover-map origin `(0.00, 0.00)`.
Do not invent leftover-map origin from leftover-map person coordinates `ξ`. leftoverMapComparePlotCriterionBadge stays leftover-map comparison graphic leftover-map
criterion leftover-map item coordinate keys. leftoverMapPlotPostBadge stays leftover-map graphic leftover-map post leftover-map person coordinate 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 @@ -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 criterion leftover-map origin leftover-map item coordinates independently of leftover-map person coordinates
(ADR 0347) captions leftover-map graphic leftover-map criterion leftover-map origin leftover-map item coordinates when leftoverMapPlotCriterionBadge returns a leftover-map origin leftover-map item coordinate 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 criterion leftover-map origin leftover-map item coordinates when leftoverMapPlotCriterionBadge
returns a leftover-map origin leftover-map item coordinate caption independently of leftover-map person coordinates.
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-criterion-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 leftover-map criterion leftover-map item coordinates independently of leftover-map person coordinates

- Caption leftover-map graphic leftover-map criterion leftover-map origin leftover-map item coordinates through leftoverMapPlotCriterionBadge
independently of leftover-map person coordinates (ADR 0347). After `make seed`, leftover-map graphic leftover-map
criterion leftover-map origin leftover-map item coordinates name leftover-map origin when leftoverMapPlotCoordinatePairIsOrigin returns true. Distinct accessible name
`leftover-map criterion {label} at leftover-map origin ζ {item}`. Rank-0 unused axes still name leftover-map origin `(0.00, 0.00)`.
Non-origin leftover-map graphic leftover-map criterion leftover-map item coordinates stay
`leftover-map criterion {label} at ζ {item}`. leftoverMapComparePlotCriterionBadge stays leftover-map comparison graphic leftover-map
criterion leftover-map item coordinate keys. leftoverMapPlotPostBadge stays leftover-map graphic leftover-map post leftover-map
person coordinate keys this increment. Do not invent leftover-map origin from leftover-map person coordinates `ξ`.
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 criterion leftover-map origin leftover-map item coordinates
through leftoverMapPlotCriterionBadge independently of leftover-map person coordinates (ADR 0347 / v2.104.0). After `make seed`, leftover-map graphic leftover-map
criterion leftover-map origin leftover-map item coordinates name leftover-map origin when leftoverMapPlotCoordinatePairIsOrigin returns true. Distinct accessible name
`leftover-map criterion {label} at leftover-map origin ζ {item}`. Rank-0 unused axes still name leftover-map origin `(0.00, 0.00)`.
Non-origin leftover-map graphic leftover-map criterion leftover-map item coordinates stay
`leftover-map criterion {label} at ζ {item}`. leftoverMapComparePlotCriterionBadge stays leftover-map comparison graphic leftover-map
criterion leftover-map item coordinate keys. leftoverMapPlotPostBadge stays leftover-map graphic leftover-map post leftover-map
person coordinate keys this increment. Do not invent leftover-map origin from leftover-map person coordinates `ξ`.
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/0335-leftover-map-plot-criterion-coordinates.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
**Date:** 2026-08-31

**Amended by:** [ADR 0336](0336-leftover-map-compare-plot-criterion-coordinates.md)
(leftover-map item coordinates on leftover-map comparison graphic leftover-map criterion markers)
(leftover-map item coordinates on leftover-map comparison graphic leftover-map criterion markers);
[ADR 0347](0347-leftover-map-plot-criterion-origin-badge.md)
(leftover-map origin on leftover-map graphic leftover-map criterion leftover-map item coordinates independently of leftover-map person coordinates)

Amends leftover-map graphic display of persisted coordinates
([ADR 0268](0268-leftover-map-graphic-display.md)), leftover-map
Expand Down
4 changes: 3 additions & 1 deletion docs/adr/0346-leftover-map-axis-tick-origin-badge.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,9 @@ axis share and leftover-map singular values
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
([ADR 0343](0343-leftover-map-plot-tick-origin-badge.md)). Independent of leftover-map
graphic leftover-map criterion leftover-map origin leftover-map item coordinates independently of leftover-map
person coordinates ([ADR 0347](0347-leftover-map-plot-criterion-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
Expand Down
90 changes: 90 additions & 0 deletions docs/adr/0347-leftover-map-plot-criterion-origin-badge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# ADR 0347 — Name leftover-map origin on leftover-map graphic leftover-map criterion leftover-map item coordinates independently of leftover-map person coordinates

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

Amends leftover-map item coordinates on leftover-map graphic leftover-map criterion markers independently of leftover-map post ξ markers
([ADR 0335](0335-leftover-map-plot-criterion-coordinates.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 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 0335 already names leftover-map graphic leftover-map criterion leftover-map item coordinates
`leftover-map criterion {label} at ζ {item}`. Rank-0 unused axes still persist leftover-map
origin `(0.00, 0.00)` (`formatSignedLeftoverValue(0)` emits no plus). Origin leftover-map
item coordinates still interpolate leftover-map origin only through leftover-map criterion leftover-map
item coordinate keys. A missing or non-finite leftover-map item coordinate pair omits independently
of leftover-map person coordinates `ξ`. A finite negative leftover is shown, never clamped.
Do not invent leftover-map origin from leftover-map person coordinates `ξ`. leftoverMapComparePlotCriterionBadge stays
`leftover map comparison graphic leftover-map criterion {label} at ζ {item}`
this increment. leftoverMapPlotPostBadge stays
`Open leftover-map post {title} at ξ {person}`
this increment.

This increment names leftover-map graphic leftover-map criterion leftover-map origin leftover-map item
coordinates as leftoverMapPlotCriterionBadge. Leftover-map graphic leftover-map criterion leftover-map origin leftover-map
item coordinates stay
`leftover-map criterion {label} at leftover-map origin ζ {item}`
when leftoverMapPlotCoordinatePairIsOrigin returns true, so they stay distinct from leftover-map
graphic leftover-map criterion leftover-map item coordinates
`leftover-map criterion {label} at ζ {item}`,
leftover-map comparison graphic leftover-map criterion leftover-map item coordinates
`leftover map comparison graphic leftover-map criterion {label} at ζ {item}`,
and leftover-map graphic leftover-map post leftover-map person coordinates
`Open leftover-map post {title} at ξ {person}`.
It does not add columns. Do not invent a leftover score. Do not invent a theta.

This protected increment uses **0347** so it does not collide with leftover-map leftover-axis
origin ticks independently of leftover-map axis share and leftover-map singular values
(0346) or leftover-map leftover-axis origin ticks (#877).

## Decision

On leftover-map graphic leftover-map criterion markers, caption leftover-map origin
when leftoverMapPlotCoordinatePairIsOrigin returns true. Rank-0 unused axes still name leftover-map
origin `(0.00, 0.00)`. Non-origin leftover-map item coordinates stay leftover-map criterion leftover-map
item coordinate keys. leftoverMapComparePlotCriterionBadge, leftoverMapPlotPostBadge,
leftoverMapListCriterionBadge, leftoverMapCompareListCriterionBadge, leftoverMapPlotTickAxisBadge,
leftoverMapComparePlotTickAxisBadge, leftoverMapCompareAxisTickBadge, 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 graphic leftover-map criterion leftover-map origin leftover-map item
coordinates name leftover-map origin independently of leftover-map person coordinates. Rank-0 unused
axes still name leftover-map origin `(0.00, 0.00)`. leftoverMapComparePlotCriterionBadge stays leftover-map
comparison graphic leftover-map criterion leftover-map item coordinate keys. leftoverMapPlotPostBadge
stays leftover-map graphic leftover-map post leftover-map person coordinate keys. leftover-map graphic leftover-map
criterion leftover-map item coordinates independently of leftover-map post ξ markers
(ADR 0335) 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
item coordinates on leftover-map graphic leftover-map criterion markers independently of leftover-map
post ξ markers ([ADR 0335](0335-leftover-map-plot-criterion-coordinates.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 graphic leftover-map criterion leftover-map item coordinates independently of leftover-map
post ξ markers ([ADR 0336](0336-leftover-map-compare-plot-criterion-coordinates.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:35 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 COMMENTED,
> not APPROVE). Next buyer increment on this cycle: leftover-map graphic leftover-map criterion leftover-map origin leftover-map
> item coordinates independently of leftover-map person coordinates as leftoverMapPlotCriterionBadge (ADR 0347 / v2.104.0) delivered locally on
> `feat/leftover-map-plot-criterion-origin-badge-v21040`. Distinct accessible name
> `leftover-map criterion {label} at leftover-map origin ζ {item}`. Rank-0 unused axes still name leftover-map origin `(0.00, 0.00)`. leftoverMapComparePlotCriterionBadge stays leftover-map comparison graphic leftover-map criterion leftover-map item coordinate keys. leftoverMapPlotPostBadge stays leftover-map graphic leftover-map post leftover-map person coordinate keys. Do not invent leftover-map origin from leftover-map person coordinates `ξ`. 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
6 changes: 5 additions & 1 deletion frontend/src/components/LeftoverMapPlot.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,8 @@ describe("LeftoverMapPlot", () => {
expect(
screen.getByRole("button", { name: "Open leftover-map post Public post at ξ (0.00, 0.00)" }),
).toBeInTheDocument();
expect(screen.getByLabelText("leftover-map criterion sales-lead at ζ (0.00, 0.00)")).toBeInTheDocument();
expect(screen.getByLabelText("leftover-map criterion sales-lead at leftover-map origin ζ (0.00, 0.00)")).toBeInTheDocument();
expect(screen.queryByLabelText("leftover-map criterion sales-lead at ζ (0.00, 0.00)")).not.toBeInTheDocument();
expect(screen.queryByLabelText("Criterion ζ sales-lead")).not.toBeInTheDocument();
expect(screen.getByText("leftover-map axis 1 σ 0.00 (0%)")).toBeInTheDocument();
expect(screen.getByText("leftover-map axis 2 σ 0.00 (0%)")).toBeInTheDocument();
Expand Down Expand Up @@ -1008,6 +1009,9 @@ describe("LeftoverMapPlot", () => {
).not.toBeInTheDocument();
expect(screen.queryByLabelText("Criterion ζ sales-lead")).not.toBeInTheDocument();
expect(screen.queryByLabelText("leftover-map criterion sales-lead at ζ (0.00, 0.00)")).not.toBeInTheDocument();
expect(
screen.queryByLabelText("leftover-map criterion sales-lead at leftover-map origin ζ (0.00, 0.00)"),
).not.toBeInTheDocument();
});

it("keeps leftover map comparison axis text when share is missing or non-finite", () => {
Expand Down
Loading