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
12 changes: 12 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -637,6 +637,15 @@ that no persisted coordinate occupies. Do not invent leftover-map coordinate tic
distance, leftover-map rank, leftover expected, leftover observed, leftover residual, leftover-map unexplained leftover, leftover-map reconstruction, leftover-map axis share, leftover-map post coverage, leftover-map item coverage,
leftover-map incomplete post coverage, leftover-map incomplete item coverage, leftover pair
count, or the count of unused axes.
ADR 0321 captions leftover-map singular values on that grouping comparison leftover-map
graphic from already-named leftover-map axes when that persisted `σ_k` is finite and
non-negative. Rank-0 unused axes still name leftover-map comparison graphic leftover-map
axis `σ 0.00`. Share and singular value omit independently. Do not invent leftover-map
singular values from leftover-map axis share, leftover-map coordinate ticks, leftover-map
distance, leftover-map rank, leftover expected, leftover observed, leftover residual,
leftover-map unexplained leftover, leftover-map reconstruction, leftover-map post coverage,
leftover-map item coverage, leftover-map incomplete post coverage, leftover-map incomplete
item coverage, leftover pair count, or the count of unused axes.
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 @@ -732,6 +741,9 @@ that grouping comparison leftover-map graphic with persisted leftover-map distan
Grouping comparison leftover-map coordinate ticks (ADR 0320) captions
that grouping comparison leftover-map graphic with persisted leftover-map coordinate
ticks at the origin and at each unique finite `ξ` / `ζ` projection.
Grouping comparison leftover-map singular values (ADR 0321) captions
that grouping comparison leftover-map graphic with persisted leftover-map singular
values `σ_k` when leftoverSingularForAxis returns a usable finite non-negative value.
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
5 changes: 4 additions & 1 deletion ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -748,6 +748,8 @@ comparison leftover-map graphic when formatLeftoverMapDistance returns a usable
badge.
ADR 0320 captions leftover-map coordinate ticks on that grouping
comparison leftover-map graphic from already-named leftover-map coordinates.
ADR 0321 captions leftover-map singular values on that grouping
comparison leftover-map graphic from already-named leftover-map axes.
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 Expand Up @@ -797,7 +799,8 @@ graphic (ADR 0316), leftover expected on the grouping comparison leftover-map
graphic (ADR 0317), leftover-map rank on the grouping comparison leftover-map
graphic (ADR 0318), leftover-map distance on the grouping comparison leftover-map
graphic (ADR 0319), leftover-map coordinate ticks on the grouping comparison leftover-map
graphic (ADR 0320);
graphic (ADR 0320), leftover-map singular values on the grouping comparison leftover-map
graphic (ADR 0321);
`POST .../rebuild` scores every grouping kind (post_admin). `make seed`
folds A-100/B-200 Event Lineage fixtures (and the Riverbend calendar
post) that already have constructed IRT cells into the same shared
Expand Down
19 changes: 19 additions & 0 deletions CHANGELOG.d/2.78.0-leftover-map-compare-plot-singular.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
## 2.78.0 — Leftover-map singular values on grouping comparison leftover-map graphic

- Caption leftover-map singular values on the grouping comparison leftover-map
graphic (ADR 0321). After `make seed`, closest and farthest leftover pairs
sit above the member list with leftover-map singular values `σ_k` on that
grouping comparison leftover-map graphic when those persisted singular values
are finite and non-negative; click a post marker or a pair button opens that
post. Rank-0 origin cells still name leftover-map comparison graphic leftover-map
axis `σ 0.00`. Comparison copy uses
`leftover map comparison graphic leftover-map axis {axis} σ {value}` so it
stays distinct from `leftover-map axis {axis} σ {value}`, from
`leftover axis {axis} σ {value}`, from
`leftover map comparison axis {axis} ({share}%)`, and from
`leftover map comparison graphic leftover-map axis {axis} tick {value}`.
Share and singular value omit independently. Do not invent `σ_k` from
leftover-map axis share. This increment does not caption leftover-map
singular values on leftover-axis report badges with a distinct name.
A finite negative leftover is shown, never clamped. Never invent a leftover
score. Never invent a theta. No new columns.
23 changes: 20 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,24 @@ All notable changes to this project are documented here. Format follows

### Added

- Period leftover pairs now name leftover-map singular values on the grouping
comparison leftover-map graphic (ADR 0321 / v2.78.0). After `make seed`,
closest and farthest leftover pairs sit above the member list with leftover-map
singular values `σ_k` on that grouping comparison leftover-map graphic when
those persisted singular values are finite and non-negative; click a post
marker or a pair button opens that post. Rank-0 origin cells still name
leftover-map comparison graphic leftover-map axis `σ 0.00`. Comparison copy
uses `leftover map comparison graphic leftover-map axis {axis} σ {value}` so
it stays distinct from `leftover-map axis {axis} σ {value}`, from
`leftover axis {axis} σ {value}`, from
`leftover map comparison axis {axis} ({share}%)`, and from
`leftover map comparison graphic leftover-map axis {axis} tick {value}`.
Share and singular value omit independently. Do not invent `σ_k` from
leftover-map axis share. This increment does not caption leftover-map
singular values on leftover-axis report badges with a distinct name.
A finite negative leftover is shown, never clamped. Never invent a leftover
score or a theta. No new columns.

- Period leftover pairs now name leftover-map coordinate ticks on the grouping
comparison leftover-map graphic (ADR 0320 / v2.77.0). After `make seed`,
closest and farthest leftover pairs sit above the member list with leftover-map
Expand All @@ -18,9 +36,8 @@ All notable changes to this project are documented here. Format follows
`leftover map comparison graphic leftover-map axis {axis} tick {value}` so it
stays distinct from `leftover-map axis {axis} tick {value}` and from
`leftover map comparison axis {axis} ({share}%)`. Do not invent evenly spaced
ticks that no persisted coordinate occupies. This increment does not caption
leftover-map singular values on the comparison graphic with a distinct name.
Do not invent leftover-map coordinate ticks from leftover-map distance.
ticks that no persisted coordinate occupies. Leftover-map singular values on
the comparison graphic are ADR 0321. Do not invent leftover-map coordinate ticks from leftover-map distance.
A finite negative leftover is shown, never clamped. Never invent a leftover
score or a theta. No new columns.

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), 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), 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
7 changes: 5 additions & 2 deletions docs/adr/0320-leftover-map-compare-plot-ticks.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 0321](0321-leftover-map-compare-plot-singular.md)
(leftover-map singular values on the grouping comparison leftover-map graphic)

Amends leftover-map coordinate ticks on graphic-display axes
([ADR 0270](0270-leftover-map-coordinate-ticks.md)), leftover-map distance
on the grouping comparison leftover-map graphic
Expand All @@ -12,7 +15,7 @@ on the grouping comparison leftover-map graphic
display on the grouping comparison strip
([ADR 0304](0304-leftover-map-compare-graphic.md)), leftover-map coordinates
([ADR 0267](0267-leftover-map-coordinates.md)). Independent of leftover-map
singular values on the grouping comparison leftover-map graphic.
singular values on leftover-axis report badges.

## Context

Expand Down Expand Up @@ -95,7 +98,7 @@ and distance are finite, `R̂ = ξ · ζ` and `d = ‖ξ − ζ‖`.

## Related

Independent of leftover-map singular values on the grouping comparison leftover-map graphic.
Independent of leftover-map singular values on leftover-axis report badges.

## References

Expand Down
111 changes: 111 additions & 0 deletions docs/adr/0321-leftover-map-compare-plot-singular.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# ADR 0321 — Name leftover-map singular values on the grouping comparison leftover-map graphic

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

Amends leftover-map coordinate ticks on the grouping comparison leftover-map
graphic ([ADR 0320](0320-leftover-map-compare-plot-ticks.md)), leftover-map
axis share on that comparison graphic
([ADR 0305](0305-leftover-map-compare-plot-axis-share.md)), leftover-map
graphic display on the grouping comparison strip
([ADR 0304](0304-leftover-map-compare-graphic.md)), leftover-map axis share
persistence ([ADR 0148](0148-leftover-map-axis-share.md)), leftover-map
coordinates ([ADR 0267](0267-leftover-map-coordinates.md)). Independent of
leftover-map singular values on leftover-axis report badges.

## Context

ADR 0148 already persists leftover-map singular values `σ_k` on
`report_leftover_map_axis` together with leftover-map axis share
`σ_k² / Σ_j σ_j²`. ADR 0305 already captions the grouping comparison
leftover-map graphic with `leftover map comparison axis {k} ({share}%)`
when that share is finite. ADR 0320 already ticks those comparison-graphic
axes at persisted `ξ` / `ζ` projections. The comparison graphic still
omits `σ_k`, so a buyer who compares leftover pairs can treat leftover-map
axis share, leftover-map distance `d`, leftover-map rank, or leftover-map
coordinate ticks as leftover-map structure without a next action. Gabriel
inertia share is `σ_k² / Σ_j σ_j²`; hiding the persisted singular value
lets share be read as a leftover score. A missing, non-finite, or negative
singular value is not a leftover score and must omit independently of
leftover-map axis share. Rank-0 unused axes still persist `σ_k = 0`.
A finite negative leftover is shown, never clamped. Do not invent `σ_k`
from leftover-map axis share.

This increment captions leftover-map singular values on the grouping
comparison leftover-map graphic from already-named leftover-map axes.
Comparison copy uses the accessible names
`leftover map comparison graphic leftover-map axis {axis} σ {value}` and
`leftover map comparison graphic leftover-map axis {axis} σ {value} ({share}%)`
so they stay distinct from hyphen `leftover-map axis {axis} σ {value}`,
from pair-list `leftover axis {axis} σ {value}`, from comparison axis-share
`leftover map comparison axis {axis} ({share}%)`, and from comparison
coordinate ticks
`leftover map comparison graphic leftover-map axis {axis} tick {value}`.
It does not add columns. Do not invent a leftover score. Do not invent a
theta.

This protected increment uses **0321** so it does not collide with leftover-map
coordinate ticks on the grouping comparison leftover-map graphic (0320),
leftover-map distance on that graphic (0319), leftover-map axis share on that
graphic (0305), leftover-map singular values on leftover-axis report badges,
or the dashboard stacks.

## Decision

On the grouping comparison leftover-map graphic, caption leftover-map axis 1
and leftover-map axis 2 with persisted leftover-map singular values `σ_k`
when that singular value is finite and non-negative. Share and singular
value omit independently: no share and no `σ_k` keeps
`leftover map comparison axis {k}`; share only stays
`leftover map comparison axis {k} ({share}%)`; `σ_k` only is
`leftover map comparison graphic leftover-map axis {k} σ {value}`; both is
`leftover map comparison graphic leftover-map axis {k} σ {value} ({share}%)`.
A missing, non-finite, or negative singular value omits that `σ` badge and
does not invent `σ_k` from leftover-map axis share. Rank-0 unused axes
still name `σ 0.00`. Click a post marker to open that post. Criterion
markers are not post buttons.

Leftover-map comparison graphic leftover-map singular values omit
independently of leftover-map comparison graphic leftover-map axis ticks
and leftover-map axis share. A missing singular value omits that leftover-map
comparison graphic leftover-map axis `σ` caption and keeps a usable
leftover-map comparison axis share caption, leftover-map comparison graphic
leftover-map axis ticks, leftover-map distance caption, leftover-map rank
caption, leftover expected `E`, leftover observed `Y`, leftover residual `R`,
leftover-map unexplained leftover `U`, leftover-map reconstruction `R̂`,
and leftover-map comparison graphic coverage notes.

This increment does not caption leftover-map singular values on leftover-axis
report badges with a distinct comparison-strip name. Those leftover singular
values already persist on leftover-map axes through ADR 0148. This increment
does not persist leftover-map inner product, cosine, or length.

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

## Consequences

After `make seed`, grouping comparison leftover pairs that already show
the leftover-map graphic of persisted `ξ` / `ζ` also name leftover-map
singular values on that graphic when those persisted `σ_k` are finite and
non-negative. Rank-0 unused axes still plot at the origin and still name
leftover-map comparison graphic leftover-map axis `σ 0.00`. Click a post
marker or a pair button opens that post. When coordinates, reconstruction,
and distance are finite, `R̂ = ξ · ζ` and `d = ‖ξ − ζ‖`. When leftover-map
singular values and leftover-map axis share are finite,
leftover-map axis share is `σ_k² / Σ_j σ_j²`.

## Related

Independent of leftover-map singular values on leftover-axis report badges.

## References

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

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
18 changes: 18 additions & 0 deletions docs/product-technical-gap-baseline.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
# Product & Technical Gap Baseline

> Exact-head loop overlay: 2026-08-31 10:20 KST. Protected `main` is
> `cb187cadee5fb6c46d8a944815ccc154a1e028d1`. Writes work. Do not
> self-approve. #860 leftover-map coordinate ticks on the grouping comparison leftover-map
> graphic (v2.77.0 / ADR 0320) is `40fa5bd`, stacked on #859 @ `9ba8535`. Independent
> APPROVE is missing. Next buyer increment on this
> cycle: leftover-map singular values on the grouping comparison leftover-map
> graphic (ADR 0321 / v2.78.0) delivered locally on
> `feat/leftover-map-compare-plot-singular-v2780`. Caption persisted leftover-map
> singular values `σ_k` on that comparison graphic from already-named leftover-map
> axes. Distinct accessible name `leftover map comparison graphic leftover-map
> axis {axis} σ {value}`. Rank-0 unused axes still name `σ 0.00`. Share and
> singular value omit independently. Do not invent `σ_k` from leftover-map axis
> share. Do not caption leftover-map singular values on leftover-axis report
> badges with a distinct name this increment. Stack onto #860.
> 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 09:28 KST. Protected `main` is
> `cb187cadee5fb6c46d8a944815ccc154a1e028d1`. Writes work. Do not
> self-approve. #859 leftover-map distance on the grouping comparison 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.77.0",
"version": "2.78.0",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
8 changes: 4 additions & 4 deletions frontend/src/App.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4197,8 +4197,8 @@ describe("App, authenticated", () => {
expect(screen.getByLabelText("Leftover map comparison graphic")).toBeInTheDocument();
expect(screen.getByText("leftover-map axis 1 (82%)")).toBeInTheDocument();
expect(screen.getByText("leftover-map axis 2 (18%)")).toBeInTheDocument();
expect(screen.getByText("leftover map comparison axis 1 (82%)")).toBeInTheDocument();
expect(screen.getByText("leftover map comparison axis 2 (18%)")).toBeInTheDocument();
expect(screen.getByText("leftover map comparison graphic leftover-map axis 1 σ 1.84 (82%)")).toBeInTheDocument();
expect(screen.getByText("leftover map comparison graphic leftover-map axis 2 σ 0.86 (18%)")).toBeInTheDocument();
expect(
screen.getAllByRole("button", {
name: /open leftover-map post public post at ξ \(\+0\.50, \+0\.10\)/i,
Expand Down Expand Up @@ -4322,12 +4322,12 @@ describe("App, authenticated", () => {
).not.toBeInTheDocument();
expect(
within(screen.getByLabelText("Grouping comparison")).getByText(
"leftover map comparison axis 1 (82%)",
"leftover map comparison graphic leftover-map axis 1 σ 1.84 (82%)",
),
).toBeInTheDocument();
expect(
within(screen.getByLabelText("Grouping comparison")).getByText(
"leftover map comparison axis 2 (18%)",
"leftover map comparison graphic leftover-map axis 2 σ 0.86 (18%)",
),
).toBeInTheDocument();
expect(
Expand Down
Loading
Loading