Skip to content
Merged
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
8 changes: 6 additions & 2 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) are computed in `lineageweave/leftover_pairs.py` from the
0163 / 0164 / 0182 / 0185 / 0201 / 0233 / 0266 / 0267 / 0268 / 0269 / 0270) 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 All @@ -294,7 +294,11 @@ buttons; omit the plot when coordinates are missing; click a post
marker to open that post. ADR 0269 captions those leftover-map axes
with persisted leftover-map axis share `σ_k² / Σ_j σ_j²` when finite,
including rank-0 zero-share axes; a missing or non-finite share omits
that axis badge and keeps the existing leftover-map axis text. When `R`, `R̂`, `U`, `x`,
that axis badge and keeps the existing leftover-map axis text. ADR 0270
ticks leftover-map axes at the origin and at each unique finite
persisted `ξ` / `ζ` coordinate so the pair-row badge matches the
plot; rank-0 unused axes name only `0` and do not invent drawing-scale
ticks. When `R`, `R̂`, `U`, `x`,
`s`, and `e` are finite, `e + s + x = 1`. When coordinates,
reconstruction, and distance are finite, `R̂ = ξ · ζ` and
`d = ‖ξ − ζ‖`. The pairs sit above the member
Expand Down
6 changes: 4 additions & 2 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -637,14 +637,16 @@ information at the group's mean θ (Lord, 1980 max-info CAT). Rankings
persist to `report_item_information`. After those IRT main effects,
residual SVD leftover pairs on two Gabriel axes (Jeon et al., 2021;
ADR 0017 / 0048 / 0049 / 0119 / 0148 / 0158 / 0162 / 0163 / 0164 / 0168 /
0182 / 0185 / 0201 / 0233 / 0266 / 0267 / 0268 / 0269) persist to `report_leftover_pair` with signed residual `R`,
0182 / 0185 / 0201 / 0233 / 0266 / 0267 / 0268 / 0269 / 0270) persist to `report_leftover_pair` with signed residual `R`,
observed `Y`, expected `E[Y|θ, item]`, full leftover-map rank, unexplained
leftover, ADR 0201 reconstruction evidence, ADR 0185 cross-share evidence,
ADR 0233 unexplained leftover share `s`, ADR 0266 explained leftover
share `e`, and ADR 0267 leftover-map coordinates `ξ_{1:2}` / `ζ_{1:2}`.
ADR 0268 draws those persisted coordinates as the leftover-map graphic
display above the pair buttons. ADR 0269 captions leftover-map axes 1
and 2 with persisted leftover-map axis share. Click a post marker or a pair button
and 2 with persisted leftover-map axis share. ADR 0270 ticks those
leftover-map axes at persisted `ξ` / `ζ` coordinates so the pair-row
badge matches the plot. 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
(Gabriel inertia of residual SVD axes 1 and 2; ADR 0148) persists to
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.d/2.27.0-leftover-map-coordinate-ticks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
## 2.27.0 — Leftover-map coordinate ticks on the graphic display

- Caption leftover-map graphic-display axes with persisted leftover-map
coordinate ticks (ADR 0270). After `make seed`, closest and farthest
leftover pairs sit above the member list with the Gabriel biplot of
already-named coordinates, leftover-map axis share when finite, and
axis ticks that match `ξ (x, y) ζ (x, y)` on the pair row; click a
post marker or a pair button opens that post. Origin is always named
`0`. Rank-0 unused axes do not invent `−1` / `+1` drawing-scale
ticks. 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-display axes
with persisted leftover-map coordinate ticks (ADR 0270 / v2.27.0).
After `make seed`, closest and farthest leftover pairs sit above the
member list with the Gabriel biplot of already-named coordinates,
leftover-map axis share when finite, and axis ticks that match
`ξ (x, y) ζ (x, y)` on the pair row; click a post marker or a pair
button opens that post. Origin is always named `0`. Rank-0 unused
axes do not invent `−1` / `+1` drawing-scale ticks. Never invent a
leftover score or a theta. No new columns.

- Period leftover pairs now caption leftover-map graphic-display axes
with persisted leftover-map axis share `σ_k² / Σ_j σ_j²` (ADR 0269 /
v2.26.0). After `make seed`, closest and farthest leftover pairs sit
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), occupational construct catalog search
(ADR 0048–0164 / 0182 / 0185 / 0201 / 0233 / 0266 / 0267 / 0268 / 0269 / 0270), 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
6 changes: 4 additions & 2 deletions docs/adr/0048-persist-lsirm-leftover-pairs.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
[ADR 0266](0266-leftover-map-explained-share.md) (explained leftover share e);
[ADR 0267](0267-leftover-map-coordinates.md) (leftover-map coordinates ξ, ζ);
[ADR 0268](0268-leftover-map-graphic-display.md) (leftover-map graphic display);
[ADR 0269](0269-leftover-map-axis-share-plot.md) (leftover-map axis share on the graphic display)
[ADR 0269](0269-leftover-map-axis-share-plot.md) (leftover-map axis share on the graphic display);
[ADR 0270](0270-leftover-map-coordinate-ticks.md) (leftover-map coordinate ticks)

## Context

Expand Down Expand Up @@ -69,7 +70,8 @@ reconstruction `R̂ = ξ · ζ` and distance `d = ‖ξ − ζ‖` stay auditabl
from the pair row. ADR 0268 draws those persisted coordinates as the
leftover-map graphic display; it adds no columns. ADR 0269 captions
those leftover-map axes with persisted leftover-map axis share; it
adds no columns.
adds no columns. ADR 0270 ticks leftover-map axes at persisted `ξ` /
`ζ` coordinates; it adds no columns.

Cascade the rows with `report_period_score`. A leftover post must
also be a `report_member_score` row, and the leftover criterion
Expand Down
10 changes: 8 additions & 2 deletions docs/adr/0049-leftover-pair-report-ui.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
[ADR 0266](0266-leftover-map-explained-share.md) (explained leftover share e);
[ADR 0267](0267-leftover-map-coordinates.md) (leftover-map coordinates ξ, ζ);
[ADR 0268](0268-leftover-map-graphic-display.md) (leftover-map graphic display);
[ADR 0269](0269-leftover-map-axis-share-plot.md) (leftover-map axis share on the graphic display)
[ADR 0269](0269-leftover-map-axis-share-plot.md) (leftover-map axis share on the graphic display);
[ADR 0270](0270-leftover-map-coordinate-ticks.md) (leftover-map coordinate ticks)

## Context

Expand All @@ -39,7 +40,8 @@ leftover-map cross share next to distance when finite. When four finite
coordinates exist, the leftover-map graphic display of those positions
sits above the pair buttons (ADR 0268); click a post marker to open
that post. Leftover-map axis share captions those leftover-map axes
when finite (ADR 0269). The pair renders every available finite measurement.
when finite (ADR 0269). Leftover-map axis ticks name persisted `ξ` /
`ζ` coordinates (ADR 0270). The pair renders every available finite measurement.
The next action uses the first available value in the priority below; no
amendment hides another badge, rank 0
explicitly names no leftover structure, and unexplained leftover names
Expand All @@ -66,6 +68,10 @@ Leftover-map coordinate naming is
[ADR 0267](0267-leftover-map-coordinates.md).
Leftover-map graphic display is
[ADR 0268](0268-leftover-map-graphic-display.md).
Leftover-map axis share on the graphic display is
[ADR 0269](0269-leftover-map-axis-share-plot.md).
Leftover-map coordinate ticks are
[ADR 0270](0270-leftover-map-coordinate-ticks.md).

After `make seed`, closest and farthest leftover pairs sit above the
member list. Click a pair to open that post with the leftover
Expand Down
14 changes: 9 additions & 5 deletions docs/adr/0267-leftover-map-coordinates.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,19 @@
**Date:** 2026-08-28

**Amended by:** [ADR 0268](0268-leftover-map-graphic-display.md)
(leftover-map graphic display)
(leftover-map graphic display);
[ADR 0270](0270-leftover-map-coordinate-ticks.md)
(leftover-map coordinate ticks)

Amends [ADR 0048](0048-persist-lsirm-leftover-pairs.md),
[ADR 0049](0049-leftover-pair-report-ui.md), and
[ADR 0201](0201-leftover-map-reconstruction.md). Builds on ADR 0201's
leftover-map reconstruction. Coordinate publication is independent of the
explained leftover share ([ADR 0266](0266-leftover-map-explained-share.md)),
and leftover-map unexplained leftover share
([ADR 0233](0233-leftover-map-unexplained-share.md)).
leftover-map unexplained leftover share
([ADR 0233](0233-leftover-map-unexplained-share.md)), and leftover-map
axis share on the graphic display
([ADR 0269](0269-leftover-map-axis-share-plot.md)).

## Context

Expand Down Expand Up @@ -104,8 +108,8 @@ leftover-map distance, leftover-map rank, leftover-map inner product,
leftover-map cosine, leftover-map length, leftover-map reconstruction,
leftover-map unexplained leftover, leftover-map cross share,
leftover-map unexplained leftover share, leftover-map explained
leftover share, leftover-map graphic display, and leftover-map axis
share on the graphic display.
leftover share, leftover-map graphic display, leftover-map axis
share on the graphic display, and leftover-map coordinate ticks.

## References

Expand Down
11 changes: 7 additions & 4 deletions docs/adr/0268-leftover-map-graphic-display.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
**Date:** 2026-08-28

**Amended by:** [ADR 0269](0269-leftover-map-axis-share-plot.md)
(leftover-map axis share on the graphic display)
(leftover-map axis share on the graphic display);
[ADR 0270](0270-leftover-map-coordinate-ticks.md)
(leftover-map coordinate ticks)

Amends [ADR 0049](0049-leftover-pair-report-ui.md) and
[ADR 0267](0267-leftover-map-coordinates.md). Independent of leftover-map
Expand Down Expand Up @@ -77,7 +79,8 @@ After `make seed`, closest and farthest leftover pairs sit above the
member list with the leftover-map graphic display of persisted `ξ`
and `ζ`; click a post marker or a pair button opens that post.
Hidden posts stay hidden. Leftover-map axis share captions those
leftover-map axes when finite (ADR 0269). When coordinates, reconstruction, and
leftover-map axes when finite (ADR 0269). Leftover-map axis ticks name
persisted `ξ` / `ζ` coordinates (ADR 0270). When coordinates, reconstruction, and
distance are all finite, `R̂ = ξ_{1:2} · ζ_{1:2}` and
`d = ‖ξ_{1:2} − ζ_{1:2}‖` remain the same identities already
persisted by ADR 0267.
Expand All @@ -92,8 +95,8 @@ leftover-map distance, leftover-map rank, leftover-map inner product,
leftover-map cosine, leftover-map length, leftover-map reconstruction,
leftover-map unexplained leftover, leftover-map cross share,
leftover-map unexplained leftover share, leftover-map explained
leftover share, leftover-map coordinate persistence, and leftover-map
axis share on the graphic display.
leftover share, leftover-map coordinate persistence, leftover-map
axis share on the graphic display, and leftover-map coordinate ticks.

## References

Expand Down
6 changes: 4 additions & 2 deletions docs/adr/0269-leftover-map-axis-share-plot.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ explained leftover share ([ADR 0266](0266-leftover-map-explained-share.md)),
leftover-map unexplained leftover share ([ADR 0233](0233-leftover-map-unexplained-share.md)),
leftover-map reconstruction ([ADR 0201](0201-leftover-map-reconstruction.md)),
and leftover-map coordinates ([ADR 0267](0267-leftover-map-coordinates.md)).
Independent of leftover-map coordinate ticks
([ADR 0270](0270-leftover-map-coordinate-ticks.md)).

## Context

Expand Down Expand Up @@ -78,8 +80,8 @@ strip, two-axis leftover-map distance, leftover-map rank, leftover-map
inner product, leftover-map cosine, leftover-map length, leftover-map
reconstruction, leftover-map unexplained leftover, leftover-map cross
share, leftover-map unexplained leftover share, leftover-map explained
leftover share, leftover-map coordinate persistence, and leftover-map
graphic display.
leftover share, leftover-map coordinate persistence, leftover-map
graphic display, and leftover-map coordinate ticks.

## References

Expand Down
106 changes: 106 additions & 0 deletions docs/adr/0270-leftover-map-coordinate-ticks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# ADR 0270 — Name leftover-map coordinates as graphic-display axis ticks

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

Amends [ADR 0268](0268-leftover-map-graphic-display.md) and
[ADR 0267](0267-leftover-map-coordinates.md). Independent of leftover-map
axis share on the graphic display
([ADR 0269](0269-leftover-map-axis-share-plot.md)), leftover-map
explained leftover share ([ADR 0266](0266-leftover-map-explained-share.md)),
leftover-map unexplained leftover share
([ADR 0233](0233-leftover-map-unexplained-share.md)), leftover-map
reconstruction ([ADR 0201](0201-leftover-map-reconstruction.md)), and
leftover-map axis share persistence ([ADR 0148](0148-leftover-map-axis-share.md)).

## Context

ADR 0267 already persists two-axis Gabriel person coordinates
`ξ_{1:2}` and item coordinates `ζ_{1:2}` on leftover pair rows so
`R̂ = ξ_{1:2} · ζ_{1:2}` and `d = ‖ξ_{1:2} − ζ_{1:2}‖` stay
auditable. ADR 0268 already draws those positions. ADR 0269 captions
leftover-map axes with persisted Gabriel inertia share. The plot still
has no coordinate scale, so a buyer who reads `ξ (x, y) ζ (x, y)` on
the pair row cannot match those numbers to leftover-map location.
Hiding ticks lets leftover residual `R`, leftover-map distance `d`, or
reconstruction `R̂` be read as leftover-map location even after the
coordinates themselves are named and plotted.

This increment names leftover-map graphic-display axes with persisted
coordinate ticks. It does not add columns. It does not persist
leftover-map inner product, cosine, or length. It does not land Post
quality on the leftover criterion. Leftover-map distance stays
two-axis Euclidean. Do not invent a leftover score. Do not invent a
theta.

The dashboard stack already used neighbouring leftover facts under
other numbers. This protected increment uses **0270** so it does not
collide with leftover-map axis share on the graphic display (0269),
leftover-map graphic display (0268), leftover-map coordinates (0267 /
migration 0245), leftover-map explained leftover share (0266 /
migration 0244), leftover-map unexplained leftover share (0233 /
migration 0233), leftover-map reconstruction (0201 / migration 0206),
leftover-map cross share (0185), leftover residual disclosure,
leftover observed `Y` / expected `E`, leftover-map rank, two-axis
leftover-map distance, leftover coverage, leftover-map axis share
persistence (0148), leftover interaction-map persistence, occupational
construct catalog search (0265), or the dashboard stacks.

## Decision

On the leftover-map graphic display, tick leftover-map axis 1 and
leftover-map axis 2 at the origin and at each unique finite persisted
`ξ` / `ζ` coordinate projected onto that axis. Tick labels use the
same signed leftover-map coordinate formatter as the pair-row badge.
The origin is always named `0` because it is the rank-0 unused-axis
location, not a leftover score. Duplicate coordinates share one tick.
A rank-0 origin cell names only `0`; the unit drawing window used to
keep that origin visible is drawing scale and must not sprout `−1` or
`+1` ticks. Do not invent evenly spaced ticks that no persisted
coordinate occupies. Click a post marker to open that post. Criterion
markers are not post buttons. The grouping comparison strip
(ADR 0149) stays on its reduced leftover payload and does not gain
these ticks.

Do not add SQL. Do not edit shipped migrations. Do not persist inner
product, cosine, or length as separate columns. Do not invent a
leftover score. Do not invent a theta.

## Consequences

After `make seed`, closest and farthest leftover pairs sit above the
member list with the leftover-map graphic display of persisted `ξ`
and `ζ`, leftover-map axes name persisted Gabriel inertia share when
finite, and leftover-map axis ticks name the same coordinates shown
on the pair row; click a post marker or a pair button opens that
post. Hidden posts stay hidden. Rank-0 unused axes still plot at the
origin and still name zero leftover-map axis share with a `0` tick.
When coordinates, reconstruction, and distance are all finite,
`R̂ = ξ_{1:2} · ζ_{1:2}` and `d = ‖ξ_{1:2} − ζ_{1:2}‖` remain the
same identities already persisted by ADR 0267.

## Related

Independent of leftover interaction-map persistence, leftover-criterion
evaluation landing, leftover residual disclosure, leftover observed
`Y` / expected `E`, leftover-map complete-case coverage, leftover-map
axis share persistence, leftover pairs on the grouping comparison
strip, two-axis leftover-map distance, leftover-map rank, leftover-map
inner product, leftover-map cosine, leftover-map length, leftover-map
reconstruction, leftover-map unexplained leftover, leftover-map cross
share, leftover-map unexplained leftover share, leftover-map explained
leftover share, leftover-map coordinate persistence, leftover-map
graphic display, and leftover-map axis share on the graphic display.

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

> Exact-head loop overlay: 2026-08-29 13:15 KST. Protected `main` is
> `fc13acaa20adca11968238e398d4aafcf62b6cee` (v2.23.0 leftover-map
> explained leftover share, #775). Open ready PRs still lack independent
> APPROVE. #782 leftover-map coordinates + graphic display + axis share
> (v2.24.0 / v2.25.0 / v2.26.0 / ADR 0267 / ADR 0268 / ADR 0269) is on
> `4a0afbf4804d9862bba58869db20ccdfb0a0b37e`; Strix fail-closed and no
> independent APPROVE. Auto-merge squash remains armed on
> #782/#780/#774/#772/#771/#770. Drafts remain dirty against `main`.
> #96 stays closed as a weaker duplicate of #91. GitHub writes through
> `gh`/MCP succeed (comment/create-branch/auto-merge). `git push` HTTPS
> still fails (empty `X-OAuth-Scopes`). Copilot review is not
> independent APPROVE. Do not self-approve.
>
> Next buyer increment on this cycle: leftover-map coordinate ticks
> (ADR 0270 / v2.27.0). Tick leftover-map axes at the origin and at each
> unique finite persisted `ξ` / `ζ` so pair-row `ξ (x, y) ζ (x, y)`
> matches the graphic. UI-only; no new columns. Rank-0 unused axes name
> only `0` and do not invent drawing-scale `−1` / `+1` ticks. Do not
> invent leftover scores. Do not mix into #782; stack onto leftover
> branch `feat/leftover-map-coordinates-v2240`.

> Exact-head loop overlay: 2026-08-28 19:15 KST. Protected `main` is
> `fc13acaa20adca11968238e398d4aafcf62b6cee` (v2.23.0 leftover-map
> explained leftover share, #775). Open ready PRs still lack independent
Expand Down
Loading
Loading