Skip to content
Open
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
13 changes: 10 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ stops startup instead of leaving a healthy-looking partial schema, and
application code must not compensate for a missing table.

Period leftover pairs (ADR 0017 / 0018 / 0048 / 0049 / 0119 / 0158 / 0162 /
0163 / 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) are computed in `lineageweave/leftover_pairs.py` from the
0163 / 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) are computed in `lineageweave/leftover_pairs.py` from the
residual after a real GRM/GPCM score, never invented. Distances are
Euclidean on the two-dimensional Gabriel leftover map; missing cells stay
out of the factorization. Closest and farthest post–criterion pairs
Expand Down Expand Up @@ -650,8 +650,12 @@ ADR 0322 captions leftover-axis report badges with persisted leftover-map singul
values `σ_k` when leftoverMapAxisBadgeSingular returns a usable finite non-negative
value; a missing, non-finite, or negative singular value omits that `σ` badge and
keeps `leftover axis {k} {share}%`. Do not invent leftover-map singular values from
leftover-map axis share. The grouping comparison strip does not gain leftover-axis
report badges with a distinct comparison-strip name.
leftover-map axis share. ADR 0323 captions leftover-axis report badges on the grouping
comparison strip with persisted leftover-map singular values `σ_k` when
leftoverMapCompareAxisBadge returns a usable leftover-axis caption. Distinct accessible
name `leftover map comparison leftover axis {axis} σ {value}`. Share and singular value
omit independently. Rank-0 unused axes still name `σ 0.00`. Do not invent leftover-map
singular values from leftover-map axis share.
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 @@ -753,6 +757,9 @@ values `σ_k` when leftoverSingularForAxis returns a usable finite non-negative
Leftover-axis report badge leftover-map singular values (ADR 0322) captions leftover-axis
report badges with persisted leftover-map singular values `σ_k` when leftoverMapAxisBadgeSingular
returns a usable finite non-negative value.
Grouping comparison leftover-axis report badge leftover-map singular values (ADR 0323) captions
leftover-axis report badges on the grouping comparison strip with persisted leftover-map
singular values `σ_k` when leftoverMapCompareAxisBadge returns a usable leftover-axis 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
5 changes: 4 additions & 1 deletion ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,8 @@ ADR 0321 captions leftover-map singular values on that grouping
comparison leftover-map graphic from already-named leftover-map axes.
ADR 0322 captions leftover-axis report badges with persisted leftover-map
singular values `σ_k`.
ADR 0323 captions leftover-axis report badges on the grouping comparison strip
with persisted leftover-map singular values `σ_k`.
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 @@ -803,7 +805,8 @@ graphic (ADR 0318), leftover-map distance on the grouping comparison leftover-ma
graphic (ADR 0319), leftover-map coordinate ticks on the grouping comparison leftover-map
graphic (ADR 0320), leftover-map singular values on the grouping comparison leftover-map
graphic (ADR 0321), leftover-map singular values on leftover-axis report badges
(ADR 0322);
(ADR 0322), leftover-map singular values on leftover-axis report badges on the
grouping comparison strip (ADR 0323);
`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
22 changes: 22 additions & 0 deletions CHANGELOG.d/2.80.0-leftover-map-compare-axis-singular.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## 2.80.0 — Leftover-map singular values on leftover-axis report badges on the grouping comparison strip

- Caption leftover-axis report badges on the grouping comparison strip with
persisted leftover-map singular values `σ_k` (ADR 0323). After `make seed`,
grouping comparison leftover-axis badges name persisted leftover-map singular
values when finite together with persisted leftover-map axis share; click a
leftover pair opens that post. A missing, non-finite, or negative singular
value omits that `σ` badge and keeps
`leftover map comparison leftover axis {k} {share}%`. Rank-0 unused axes still
name `σ 0.00`. Comparison leftover-axis badges stay
`leftover map comparison leftover axis {k} σ {value} {share}%` so they stay
distinct from period leftover-axis `leftover axis {k} σ {value} {share}%`,
from hyphen `leftover-map axis {k} σ {value} ({share}%)`, and from comparison
graphic `leftover map comparison graphic leftover-map axis {k} σ {value} ({share}%)`.
Do not invent `σ_k` from leftover-map axis share. This increment does not
change leftover-map singular values on leftover-axis report badges in the
period-report panel. A finite negative leftover is shown, never clamped.
Never invent a leftover score. Never invent a theta. No new columns.
Fail-closes leftover-map comparison graphic TypeScript on omitted leftover-map
singular values (`leftover_singular_value: Number.NaN` and percent/singular
narrowing) inherited from the grouping comparison leftover-map graphic σ
increment.
22 changes: 21 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,26 @@ All notable changes to this project are documented here. Format follows

### Added

- Period leftover pairs now caption leftover-axis report badges on the grouping
comparison strip with persisted leftover-map singular values `σ_k`
(ADR 0323 / v2.80.0). After `make seed`, grouping comparison leftover-axis
badges name persisted leftover-map singular values when finite together with
persisted leftover-map axis share; click a leftover pair opens that post. A
missing, non-finite, or negative singular value omits that `σ` badge and keeps
`leftover map comparison leftover axis {k} {share}%`. Rank-0 unused axes still
name `σ 0.00`. Comparison leftover-axis badges stay
`leftover map comparison leftover axis {k} σ {value} {share}%` so they stay
distinct from period leftover-axis `leftover axis {k} σ {value} {share}%`,
from hyphen `leftover-map axis {k} σ {value} ({share}%)`, and from comparison
graphic `leftover map comparison graphic leftover-map axis {k} σ {value} ({share}%)`.
Do not invent `σ_k` from leftover-map axis share. This increment does not
change leftover-map singular values on leftover-axis report badges in the
period-report panel. A finite negative leftover is shown, never clamped.
Never invent a leftover score or a theta. No new columns.
Fail-closes leftover-map comparison graphic TypeScript on omitted leftover-map
singular values inherited from the grouping comparison leftover-map graphic σ
increment.

- Period leftover pairs now caption leftover-axis report badges with persisted
leftover-map singular values `σ_k` (ADR 0322 / v2.79.0). After `make seed`,
leftover-axis badges name persisted leftover-map singular values when finite
Expand All @@ -20,7 +40,7 @@ All notable changes to this project are documented here. Format follows
`leftover map comparison graphic leftover-map axis {k} σ {value} ({share}%)`.
Do not invent `σ_k` from leftover-map axis share. This increment does not
caption leftover-map singular values on leftover-axis badges on the grouping
comparison strip with a distinct name. A finite negative leftover is shown,
comparison strip with a distinct name (ADR 0323). 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 singular values on the grouping
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), 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), 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/0148-leftover-map-axis-share.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
**Amended by:** [ADR 0269](0269-leftover-map-axis-share-plot.md)
(leftover-map axis share on the graphic display);
[ADR 0322](0322-leftover-map-axis-singular.md)
(leftover-map singular values on leftover-axis report badges)
(leftover-map singular values on leftover-axis report badges);
[ADR 0323](0323-leftover-map-compare-axis-singular.md)
(leftover-map singular values on leftover-axis report badges on the grouping comparison strip)

## Context

Expand Down
3 changes: 2 additions & 1 deletion docs/adr/0322-leftover-map-axis-singular.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ singular values (ADR 0321) remain.
Independent of leftover-map singular values on the grouping comparison
leftover-map graphic. This increment does not caption leftover-map singular
values on leftover-axis badges on the grouping comparison strip with a
distinct name.
distinct name
([ADR 0323](0323-leftover-map-compare-axis-singular.md)).

## References

Expand Down
116 changes: 116 additions & 0 deletions docs/adr/0323-leftover-map-compare-axis-singular.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# ADR 0323 — Name leftover-map singular values on leftover-axis report badges on the grouping comparison strip

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

Amends leftover-map singular values on leftover-axis report badges
([ADR 0322](0322-leftover-map-axis-singular.md)), leftover-map singular
values on the grouping comparison leftover-map graphic
([ADR 0321](0321-leftover-map-compare-plot-singular.md)), leftover-map
axis share persistence ([ADR 0148](0148-leftover-map-axis-share.md)), leftover-map
graphic display on the grouping comparison strip
([ADR 0304](0304-leftover-map-compare-graphic.md)). Independent of leftover-map
singular values on leftover-axis report badges in the period-report panel
(ADR 0322).

## 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 0322 already captions period-report leftover-axis
badges with `leftover axis {axis} σ {value} {share}%` when that singular
value is finite and non-negative. ADR 0321 already captions the grouping
comparison leftover-map graphic with
`leftover map comparison graphic leftover-map axis {axis} σ {value}`
when that singular value is finite and non-negative. The grouping
comparison strip still omits leftover-axis report badges, so a buyer
who compares leftover pairs can treat leftover-map graphic `σ_k` as
the leftover-axis report badge without a next action. Hiding persisted
`σ_k` on leftover-axis report badges lets leftover-map axis 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 leftover-axis
report badges on the grouping comparison strip from already-named
leftover-map axes. Comparison copy uses the accessible names
`leftover map comparison leftover axis {axis} σ {value}` and
`leftover map comparison leftover axis {axis} σ {value} {share}%`
so they stay distinct from hyphen `leftover-map axis {axis} σ {value}`,
from pair-list and period-report leftover-axis
`leftover axis {axis} σ {value} {share}%` (ADR 0322), from comparison
graphic `leftover map comparison graphic leftover-map axis {axis} σ {value}`,
and from comparison axis-share
`leftover map comparison axis {axis} ({share}%)`. It does not add
columns. Do not invent a leftover score. Do not invent a theta.

This protected increment uses **0323** so it does not collide with leftover-map
singular values on leftover-axis report badges in the period-report panel
(0322), leftover-map singular values on the grouping comparison leftover-map
graphic (0321), leftover-map coordinate ticks on that graphic (0320), leftover-map
axis share on that graphic (0305), leftover-map graphic display on the grouping
comparison strip (0304), leftover-map axis share persistence (0148), or the
dashboard stacks.

## Decision

On the grouping comparison strip, caption leftover-map axis 1 and leftover-map
axis 2 leftover-axis report badges 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` omits that
leftover-axis report badge; share only is
`leftover map comparison leftover axis {k} {share}%`; `σ_k` only is
`leftover map comparison leftover axis {k} σ {value}`; both is
`leftover map comparison leftover 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 leftover pair to open that post.

Leftover-map comparison leftover-axis singular values omit independently
of leftover-map comparison graphic leftover-map axis singular values and
leftover-map axis share. A missing singular value omits that leftover-map
comparison leftover-axis `σ` caption and keeps a usable leftover-map
comparison leftover-axis share caption, leftover-map comparison graphic
leftover-map axis `σ` 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 change leftover-map singular values on leftover-axis
report badges in the period-report panel. Those leftover-axis badges stay
`leftover axis {axis} σ {value} {share}%` (ADR 0322). 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 leftover-axis report badges when those persisted `σ_k`
are finite and non-negative. Rank-0 unused axes still name leftover-map
comparison leftover 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
in the period-report panel ([ADR 0322](0322-leftover-map-axis-singular.md)).

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

> Exact-head loop overlay: 2026-08-31 10:40 KST. Protected `main` is
> `cb187cadee5fb6c46d8a944815ccc154a1e028d1`. Writes work. Do not
> self-approve. #862 leftover-map singular values on leftover-axis report badges
> (v2.79.0 / ADR 0322) is `f24b664`, stacked on #861 @ `3aac452`. Independent
> APPROVE is missing. Next buyer increment on this
> cycle: leftover-map singular values on leftover-axis report badges on the
> grouping comparison strip (ADR 0323 / v2.80.0) delivered locally on
> `feat/leftover-map-compare-axis-singular-v2800`. Caption persisted leftover-map
> singular values `σ_k` on leftover-axis report badges from already-named leftover-map
> axes. Distinct accessible name `leftover map comparison leftover 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 change
> leftover-map singular values on leftover-axis report badges in the period-report
> panel this increment. Stack onto #862. 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 10:35 KST. Protected `main` is
> `cb187cadee5fb6c46d8a944815ccc154a1e028d1`. Writes work. Do not
> self-approve. #861 leftover-map singular values on the grouping comparison leftover-map
Expand Down
Loading