Skip to content

feat(reports): leftover-map rank on pair segments (v2.37.0) - #811

Draft
seonghobae wants to merge 24 commits into
feat/leftover-map-segment-explained-share-v2300from
feat/leftover-map-segment-rank-v2370
Draft

feat(reports): leftover-map rank on pair segments (v2.37.0)#811
seonghobae wants to merge 24 commits into
feat/leftover-map-segment-explained-share-v2300from
feat/leftover-map-segment-rank-v2370

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Preserve the persisted leftover-map successor sequence after #802 explained-share foundation: unexplained share U²/R², cross share 2R̂U/R², unexplained leftover U, residual R, observed Y, expected E[Y|θ,item], and rank (ADR 0274–0280 / v2.31.0–v2.37.0). Missing/non-finite values omit only their own captions; rank must be a non-negative integer and rank 0 remains explicit. Never derive a persisted quantity from another quantity or plotted coordinates. UI/read-model successor delta only; no new SQL/columns or theta/score authority.

Live parent / product state

Authoritative foundation #802 remains 32f1cda10a2a1a6cabd64a3ae6f59bd6f0b20fd6. #811 is current exact 4dcd789385f67c76a4e479194f566f35bb5d2d76; its newest test-only delta strengthens top/bottom plot-edge rank placement. Predecessor checks/reviews and stale merge refs are not inherited.

Verified repairs and foundation convergence

Review 5120615694 found the Vietnamese explained-share terminology regression; isolated run 33989558644 repaired the intended translation source/expectation surfaces. Review 5123492791 recorded the exact #802/#811 convergence policy; run 33999858322 completed GREEN and was promoted non-force. Concurrent 4dcd7893... was inspected and adopted rather than overwritten.

Descendant convergence

The rank-boundary delta is now preserved through #812 df419c5a2f75782fa883915806d8cada7a78ff78, #813 44ace39111664a9b39a81e575a8dbdf06506050f, #814 bd90a974b72c649c423a7b99ee47dae1d8236b0e, #815 c02dffc264f70283ff7ff2d07bfe83a47bd13e10, #816 4d81c881469496fedeb8d9bb98cd485209df2089, #817 aa47c96e15084d0b944558b980edef34133f8040, #818 de3a61988768bcfddcab1dec3dfe3c60f9a89743, and #819 f37ca315e3c48fa37bbcafe96e46c5d7dab991b7, each by verified non-force current-parent convergence. #820 is now the earliest stale descendant; run 34054337875 reconstructs its valid singular-value v2.46 delta from exact #819 and repairs the observed current-parent conflicts plus ADR/release state. #821 remains dependent and requires a distinct later ADR/release identity.

Verification boundary

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.

Gabriel, K. R. (1971). The biplot graphic display of matrices with application to principal component analysis. Biometrika, 58(3), 453–467.

Keep Draft until exact-head required checks, applicable rendered browser/a11y evidence, and qualifying independent approval are complete. Do not force-push, self-approve, bypass required gates, transfer stale evidence, or invent measurement values.

…ts (v2.31.0)

Caption leftover-map graphic-display pair segments with persisted
leftover-map unexplained leftover share s = U²/R² (ADR 0274). 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, axis ticks that match ξ (x, y) ζ (x, y) on the
pair row, pair segments that match d on the pair row, pair segments
that match R̂ on the pair row, pair segments that match R̂²/R² on the
pair row, and pair segments that match U²/R² on the pair row; click a
post marker or a pair button opens that post. A missing or non-finite
s omits that unexplained leftover share caption. A share greater than 1
is shown, never clamped. Do not invent s from U and R or from plotted
coordinates. Never invent a leftover score or a theta. No new columns.
Caption leftover-map graphic-display pair segments with persisted
leftover-map cross share x = 2 R̂ U / R² (ADR 0275). 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, axis ticks that match ξ (x, y) ζ (x, y) on the pair row,
pair segments that match d on the pair row, pair segments that match
R̂ on the pair row, pair segments that match R̂²/R² on the pair row,
pair segments that match U²/R² on the pair row, and pair segments that
match 2R̂U/R² on the pair row; click a post marker or a pair button
opens that post. A missing or non-finite x omits that leftover-map
cross share caption. A finite negative share is shown; do not clamp to
nonnegative. Do not invent x from R̂, U, and R or from plotted
coordinates. Never invent a leftover score or a theta. No new columns.
….33.0)

Caption leftover-map graphic-display pair segments with persisted
leftover-map unexplained leftover U = R − R̂ (ADR 0276). 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, axis ticks that match ξ (x, y) ζ (x, y) on the pair row,
pair segments that match d on the pair row, pair segments that match
R̂ on the pair row, pair segments that match R̂²/R² on the pair row,
pair segments that match U²/R² on the pair row, pair segments that
match 2R̂U/R² on the pair row, and pair segments that match U on the
pair row; click a post marker or a pair button opens that post. A
missing or non-finite U omits that unexplained leftover caption. A
finite negative leftover is shown; do not clamp to nonnegative. Do not
invent U from R and R̂ or from plotted coordinates. Never invent a
leftover score or a theta. No new columns.
Caption leftover-map graphic-display pair segments with persisted leftover residual R so U + R̂ = R is graphic-auditable. UI-only; no new columns. Do not invent R from Y and E, from U and R̂, or from plotted coordinates.
Caption leftover-map graphic-display pair segments with persisted leftover observed Y so Y − E = R is graphic-auditable. UI-only; no new columns. Do not invent Y from R and E or from plotted coordinates.
Caption leftover-map graphic-display pair segments with persisted leftover
expected E[Y|θ, item] (ADR 0279). After make seed, closest and farthest
leftover pairs sit above the member list with pair segments that match E
on the pair row; click a post marker or a pair button opens that post.

A missing or non-finite E omits that leftover expected caption. A finite
negative expected is shown; do not clamp to nonnegative. Do not invent E
from Y and R or from plotted coordinates. Never invent a leftover score
or a theta. UI-only; no new columns.
Caption leftover-map graphic-display pair segments with persisted leftover-map
rank (ADR 0280). After make seed, closest and farthest leftover pairs sit
above the member list with pair segments that match rank on the pair row;
click a post marker or a pair button opens that post.

A missing, negative, or non-integer rank omits that leftover-map rank
caption. Rank 0 is shown when that persisted rank is a non-negative integer;
do not hide a rank-0 collapse. Do not invent rank from plotted coordinates,
leftover-map distance, or the count of unused axes. Never invent a leftover
score or a theta. UI-only; no new columns.
@coderabbitai

coderabbitai Bot commented Aug 30, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Contributor Author

Queue 2026-08-30T19:08 KST. Head e626a1d v2.37.0 leftover-map rank on pair segments (ADR 0280) stacked onto #810 @ 6e37757. Frontend suite 617 passed; oxlint 0. UI-only; no new columns. Independent APPROVE still required. Do not squash-merge onto the leftover base. Do not self-approve. Only collaborator is seonghobae; no independent reviewer can be requested from this token.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Devin Review found 4 potential issues.

Devin Review

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔍 Focused tests need CI confirmation

The review environment lacks pnpm, so the changed Vitest suites could not run locally. CI must provide execution coverage.

Devin Review

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

Comment thread frontend/src/leftoverMapPlotLayout.ts
const residualLabel = formatLeftoverMapResidual(pair.leftover_residual);
const observedLabel = formatLeftoverMapObserved(pair.observed_response);
const expectedLabel = formatLeftoverMapExpected(pair.expected_response);
const rankLabel = formatLeftoverMapRank(pair.leftover_map_rank);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📝 Info: Invalid ranks remain omitted

formatLeftoverMapRank preserves zero while rejecting missing, negative, fractional, and non-finite values. No fallback derives rank from other measurements.

Devin Review

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

Comment on lines +445 to +456
const rankY = leftoverMapStackedCaptionY(
labelPosition.labelY,
(distanceLabel !== null ? 1 : 0) +
(reconstructionLabel !== null ? 1 : 0) +
(explainedShareLabel !== null ? 1 : 0) +
(unexplainedShareLabel !== null ? 1 : 0) +
(crossShareLabel !== null ? 1 : 0) +
(unexplainedLeftoverLabel !== null ? 1 : 0) +
(residualLabel !== null ? 1 : 0) +
(observedLabel !== null ? 1 : 0) +
(expectedLabel !== null ? 1 : 0),
);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📝 Info: Optional captions close stack gaps

The rank offset counts only preceding formatted labels. Missing measurements therefore leave no blank rows before the rank caption.

Devin Review

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

Copy link
Copy Markdown
Contributor Author

Cycle note (2026-08-30T19:21 KST): independent APPROVE still required on exact head e626a1d. Frontend lint/test/build is green; Full test suite was in progress. Do not self-approve. Do not squash-merge onto the unprotected leftover base. Next buyer gap after leftover-map rank on pair segments is leftover-map coverage on pair segments (v2.38.0), stacked onto this head — not mixed into other stacks. Synthetic fixtures only.

Copy link
Copy Markdown
Contributor Author

v2.38.0 leftover-map complete-case coverage on the graphic display (ADR 0281) is stacked locally on this head (e626a1d) as feat/leftover-map-plot-coverage-v2380. UI-only: plot-level caption of persisted map_post_count/scored_post_count; does not invent coverage from plotted marker count; does not persist leftover-map inner product / cosine / length as extra columns.

Leave this PR open. Independent APPROVE required on the leftover stack. Do not self-approve. Do not squash-merge onto the leftover base. After independent review, retarget onto leftover-coordinates (#782) rather than squash-merging here.

Copy link
Copy Markdown
Contributor Author

Stacked successor is #812 (feat/leftover-map-plot-coverage-v2380 @ 64964cb, ADR 0281 / v2.38.0): leftover-map complete-case coverage on the graphic display. UI-only; plot-level caption of persisted map_post_count/scored_post_count; does not invent coverage from plotted marker count.

Leave #811 and #812 open. Independent APPROVE required on the leftover stack. Do not self-approve. Do not squash-merge onto the leftover base. After independent review, retarget onto leftover-coordinates (#782) rather than squash-merging here.

@seonghobae
seonghobae changed the base branch from feat/leftover-map-segment-expected-v2360 to feat/leftover-map-segment-cross-share-v2320 September 5, 2026 06:58

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Stack-convergence review: fresh Git comparisons verify this exact head contains the complete former #805/#806/#809/#810 chain without rewrite. The current base is #804 exact head c513002bea9e0ee3e6ccd0931c5256e52dbbd878; #811 is exactly 5 commits ahead / 0 behind. Individual predecessor heads are immutable ancestors: #806 33f6c3dd… is 3 behind this head, #809 b334b00e… is 2 behind, #810 6e37757a… is 1 behind, each with that predecessor as the merge base. This validates predecessor closure only as full successor carryover. It does not validate product GREEN: base retargeting requires fresh exact-head checks, independent review, browser/a11y evidence, and applicable PostgreSQL/k6 evidence before normal merge.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

live parent #802가 85b3233e로 전진한 뒤 다시 비교했습니다. #811의 leftoverMapPlotLayout.ts에는 parent에서 이미 수리된 세 가지 foundation invariant가 아직 없습니다: (1) rounded label이 같아도 distinct persisted tick을 보존해야 하는 numeric dedup, (2) segment caption의 perpendicular offset + top/bottom clamp, (3) 짧은 canvas에서 stack spacing을 가용 높이에 맞춰 줄이는 bound. #811은 최대 10개 persisted caption을 추가하므로 세 번째 문제는 parent보다 더 크게 증폭됩니다. 이 finding은 close 조건이 아니라 descendant adaptation 대상입니다. extended-stack RED를 먼저 추가한 뒤 v2.31–v2.37 label semantics를 보존한 채 parent layout invariants를 적용합니다.

Copy link
Copy Markdown
Contributor Author

@codex address the remaining verified RED on the current exact head.

At 430077e24aca9a3643e66fa52bb8b7e21d0fb3b4, preserve the concurrent caption-bound/test repair already present. Minimally repair only the Vietnamese explained-share terminology inherited from #802: leftover-map explained leftover share {label} must use tỷ phần phần dư được giải thích trên bản đồ phần dư {label}, and the expanded graphic description must say tỷ phần phần dư được giải thích e. Run frontend/src/leftoverMapPlotVietnameseCopy.test.ts plus the relevant i18n/layout/rank suites. Keep Draft and do not force-push or choose either whole parent/child tree. After the copy RED is GREEN, compare against live #802@32f1cda10a2a1a6cabd64a3ae6f59bd6f0b20fd6; preserve every valid parent delta before any non-force convergence.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

Copy link
Copy Markdown
Contributor Author

@codex Please repair the current exact head non-force without rewriting concurrent work. Verify the existing RED in frontend/src/leftoverMapPlotVietnameseCopy.test.ts, then make the smallest production change in frontend/src/i18n.ts so Vietnamese leftover-map explained leftover share {label} is exactly tỷ phần phần dư được giải thích trên bản đồ phần dư {label} and the expanded leftover-map graphic description contains tỷ phần phần dư được giải thích e. Preserve all #802/#811 layout, rank, workflow, ADR, release-identity, and persisted-only semantics; keep the PR Draft; run the focused Vietnamese-copy/layout tests and report exact-head evidence. Do not force-push, rebase destructively, weaken the RED, or retarget yet.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

seonghobae added a commit that referenced this pull request Sep 5, 2026

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Exact-parent convergence reproduced five intersections against #802 32f1cda10a2a1a6cabd64a3ae6f59bd6f0b20fd6: docs/product-technical-gap-baseline.md, frontend/src/i18n.test.ts, frontend/src/i18n.ts, frontend/src/leftoverMapPlotLayout.ts, and lineageweave/__init__.py. The three frontend/runtime files are deliberate successor composition: this branch owns v2.37.0 and ADR 0274–0280 additions over #802's explained-share foundation, including the verified Vietnamese terminology repair. The baseline is different: this branch accumulated old Aug 29–30 loop overlays, while the foundation owns newer code-current shared baseline authority. Convergence must therefore retain successor code/i18n/runtime, take the current parent baseline, append only a current convergence note, assert all version surfaces remain exactly 2.37.0, and rerun Vietnamese/i18n/layout/small-canvas/plot contracts before creating a two-parent product commit. No wholesale ours/theirs policy outside these exact paths.

github-actions Bot added a commit that referenced this pull request Sep 6, 2026
github-actions Bot added a commit that referenced this pull request Sep 6, 2026
Promote the verified clean convergence tree from staging onto unchanged #811 and exact #802. Preserve #811 v2.37 successor i18n/layout/runtime authority, retain the verified Vietnamese terminology repair, and adopt the current #802 product-gap baseline. Temporary workflow history is absent. This is a non-force two-parent convergence.
seonghobae added a commit that referenced this pull request Sep 6, 2026
github-actions Bot added a commit that referenced this pull request Sep 6, 2026
seonghobae added a commit that referenced this pull request Sep 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant