Skip to content

feat(leftover): persist leftover-map explained share (ADR 0232) - #728

Merged
seonghobae merged 10 commits into
feat/dashboard-case-metricsfrom
feat/leftover-map-explained-share-v219
Aug 26, 2026
Merged

feat(leftover): persist leftover-map explained share (ADR 0232)#728
seonghobae merged 10 commits into
feat/dashboard-case-metricsfrom
feat/leftover-map-explained-share-v219

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Summary

Period leftover pair rows now name leftover-map explained share e = R̂² / R² of raw residual after two-axis Gabriel reconstruction R̂ = ξ_{1:2} · ζ_{1:2} (ADR 0232 / migration 0232). Closest and farthest leftover pairs sit above the member list with R̂²/R² next to leftover-map distance d; click opens that post.

This is not closed historical PR #539. That reconstruction used a centered formula e = R̂_c² / R̃² under ADR 0185. Current main already persists raw-residual cross share x = 2 R̂ U / R² (ADR 0185) and signed reconstruction (ADR 0201). This increment completes the cell identity e + s + x = 1 by persisting e. Unexplained leftover share s = U² / R² is not persisted.

Buyer next action

Leftover map explains {share} of raw residual after IRT main effects. Open this post to read {criterion}. A missing or non-finite share omits the badge and keeps the existing cross-share / reconstruction / unexplained fallback. A finite share greater than 1 is stored and shown, never clamped: truncated two-axis reconstruction of a higher-rank cell can make |R̂| > |R|. Do not invent a leftover score. Do not invent a theta.

Evidence

  • uv run leftover pair tests: 23 passed (tests/test_leftover_pairs.py)
  • Migration replay window covers 0232 (add column if not exists, no unit/nonnegative CHECK)
  • Frontend: leftoverMapExplainedShare + LeftoverPairList + i18n 81 passed; App leftover cases 2 passed
  • Nullable column; unexplained share still absent
  • Grounded in Gabriel (1971) and Jeon et al. (2021, eq. 3)

Does not mix into #680 / #714 / #643 stacks. Independent review required; seonghobae will not self-approve.


Open in Devin Review

Name e = R̂² / R² of raw residual after two-axis Gabriel reconstruction
on leftover pair rows (ADR 0232 / migration 0232). Unexplained leftover
share s stays omitted. A finite share greater than 1 is stored, never
clamped. Next action opens the named post.
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9d44d4e8-1400-4b38-9c45-e70435cb17ee

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@seonghobae
seonghobae enabled auto-merge (squash) August 26, 2026 17:49

Copy link
Copy Markdown
Contributor Author

Independent review requested. seonghobae will not self-approve. Leftover-map explained share e = R̂² / R² of raw residual (ADR 0232) is the next buyer increment on current main; unexplained share s stays omitted.

devin-ai-integration[bot]

This comment was marked as resolved.

@opencode-agent
opencode-agent Bot disabled auto-merge August 26, 2026 17:59
@seonghobae
seonghobae enabled auto-merge (squash) August 26, 2026 18:03
devin-ai-integration[bot]

This comment was marked as resolved.

@opencode-agent
opencode-agent Bot disabled auto-merge August 26, 2026 18:09
@seonghobae
seonghobae changed the base branch from main to feat/dashboard-case-metrics August 26, 2026 18:40
devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Rust boundary evidence:

  • This PR is stacked on feat(dashboard): quantify cases and preserve project journeys #640 at exact parent ebfe60afa53d0ceff8c8e30392c5c8228ed4a070.
  • fast-mlsirm PR #1457 owns explained_share arithmetic in Rust at immutable commit 54bcdf0b1d8a8e98d2265e05e3c03bd42e8b57c2; LineageWeave pins that exact commit.
  • LineageWeave only projects result.explained_share; no local SVD or share formula remains.
  • Rust focused interaction-map tests: 9 passed. Upstream Python/Rust/package hosted checks are successful; protected delivery still awaits its remaining independent gates.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact dependency refresh: concurrent upstream work unified the result with the versioned interaction-map envelope. This PR now pins current #1457 head 5c7dc9ead1feddcaff0d6c9032fcace4c7028f7c, which contains the earlier Rust explained-share commit and adds envelope binding, validation, projection, and parity proof. The older 54bcdf0b… evidence remains an ancestor, not the current pin.

@seonghobae
seonghobae merged commit cede3ad into feat/dashboard-case-metrics Aug 26, 2026
4 checks passed
seonghobae added a commit that referenced this pull request Aug 27, 2026
Persist leftover-map unexplained leftover share s = U² / R² of raw
residual on leftover post–criterion pairs so the leftover the truncated
two-axis map cannot reconstruct is not read as leftover residual R,
leftover-map distance d, unexplained leftover U, or leftover-map cross
share x. Do not persist leftover-map explained share e.

After make seed, closest and farthest leftover pairs sit above the
member list with U²/R² next to leftover-map distance d; click opens
that post. Missing or non-finite share omits the badge rather than
inventing a leftover score. A share greater than 1 is stored, never
clamped. The grouping comparison strip stays on its reduced leftover
payload (distance, residual, reconstruction).

Independent of leftover stacks #640, #680, #720 and dashboard explained
share ADR 0232 (#728).
seonghobae added a commit that referenced this pull request Aug 27, 2026
Persist leftover-map unexplained leftover share s = U² / R² of raw
residual on leftover post–criterion pairs so the leftover the truncated
two-axis map cannot reconstruct is not read as leftover residual R,
leftover-map distance d, unexplained leftover U, or leftover-map cross
share x. Do not persist leftover-map explained share e.

After make seed, closest and farthest leftover pairs sit above the
member list with U²/R² next to leftover-map distance d; click opens
that post. Missing or non-finite share omits the badge rather than
inventing a leftover score. A share greater than 1 is stored, never
clamped. The grouping comparison strip stays on its reduced leftover
payload (distance, residual, reconstruction).

Independent of leftover stacks #640, #680, #720 and dashboard explained
share ADR 0232 (#728).
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