Skip to content

feat(reports): fail-close leftover-map pair-list post coverage (v2.45.0) - #819

Open
seonghobae wants to merge 1 commit into
feat/leftover-map-list-incomplete-item-v2440from
feat/leftover-map-list-post-coverage-helper-v2450
Open

feat(reports): fail-close leftover-map pair-list post coverage (v2.45.0)#819
seonghobae wants to merge 1 commit into
feat/leftover-map-list-incomplete-item-v2440from
feat/leftover-map-list-post-coverage-helper-v2450

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Fail-close leftover-map post complete-case coverage on the pair list through leftoverMapCoverageCounts (ADR 0288 / v2.45.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, 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 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, pair segments that match U on the pair row, pair segments that match R on the pair row, pair segments that match Y on the pair row, pair segments that match E on the pair row, pair segments that match leftover-map rank on the pair row, a plot caption that matches leftover-map complete-case coverage above the pair list, a plot caption that matches leftover-map item complete-case coverage, a plot caption that matches leftover-map incomplete post coverage, a plot caption that matches leftover-map incomplete item coverage, a pair-list note that matches leftover-map post complete-case coverage, a pair-list note that matches leftover-map item complete-case coverage, a pair-list note that matches leftover-map incomplete post coverage, and a pair-list note that matches leftover-map incomplete item coverage; click a post marker or a pair button opens that post.
  • A missing, non-integer, negative used, non-positive scored, or used-greater-than-scored coverage omits that leftover-map coverage note and keeps the pair-list item coverage note, the pair-list incomplete post note, the pair-list incomplete item note, and any leftover-map distance, reconstruction, explained leftover share, unexplained leftover share, leftover-map cross share, unexplained leftover, leftover residual, leftover observed, leftover expected, leftover-map rank, leftover-map post coverage, leftover-map item coverage, leftover-map incomplete post, or leftover-map incomplete item caption on the graphic. Coverage 0 of M is shown when that persisted used count is a non-negative integer and scored is a positive integer. Do not invent post coverage from plotted marker count, leftover-map distance, leftover-map rank, leftover-map item coverage, leftover-map incomplete post coverage, leftover-map incomplete item coverage, or the count of unused axes.
  • UI-only; no SQL; no new columns. Never invent a leftover score. Never invent a theta. Do not persist leftover-map inner product, cosine, or length. Grouping comparison strip does not gain this caption.
  • Stacked onto leftover-map incomplete item coverage on the pair list (feat/leftover-map-list-incomplete-item-v2440 / feat(reports): leftover-map incomplete item coverage on pair list (v2.44.0) #818 @ aa32089). Leave this PR open for independent review. Do not squash-merge onto the unprotected leftover base. Do not self-approve. After independent review, retarget onto leftover-coordinates (feat/leftover-map-coordinates-v2240 / feat(reports): persist leftover-map coordinates (v2.24.0) #782) rather than squash-merging here.

Verification

  • frontend oxlint / vitest not executed in this sandbox (no LineageWeave frontend node_modules; UI-only change).
  • Helper leftoverMapCoverageCounts already omits used-greater-than-scored, negative, and non-integer counts. Pair-list label Leftover map coverage is distinct from graphic label Leftover-map graphic coverage.
  • tests/test_leftover_pairs.py and PostgreSQL period-report tests were not executed here (UI-only; no schema change)

Evidence boundary

Authenticated PostgreSQL API and k6 runtime acceptance are not claimed. No real records or credentials. Synthetic fixtures only.

Independent approval is required. No self-approval, admin bypass, or force push.

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.


Devin Review

Caption leftover-map post complete-case coverage on the pair list only when
leftoverMapCoverageCounts returns usable complete-case integers (ADR 0288).
A used-greater-than-scored, negative, or non-integer payload omits that note.
UI-only; no SQL; no new columns. Never invent a leftover score. Never invent
a theta.
@coderabbitai

coderabbitai Bot commented Aug 30, 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: 7840d40e-08bb-4a89-86de-bc9bbeffc3bb

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.

@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 2 potential issues.

Devin Review

Comment thread frontend/src/App.tsx
aria-label={openedGroupingLabel ? "Opened grouping report" : "Period report groups"}
>
{orderedReports.map((report) => {
const coverageCounts = leftoverMapCoverageCounts(report.leftover_map_coverage);

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: Shared validation preserves coverage semantics

leftoverMapCoverageCounts rejects malformed persisted counts while preserving valid zero-used coverage. It never derives post coverage from neighboring display data.

Devin Review

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

Comment on lines +7 to 10
export const LEFTOVER_MAP_LIST_COVERAGE_LABEL = "Leftover map coverage";

export const LEFTOVER_MAP_PLOT_COVERAGE =
"Leftover map used {used} of {scored} scored posts (complete-case)";

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: Shared text keeps labels distinct

The list and plot intentionally share translated coverage text. LEFTOVER_MAP_LIST_COVERAGE_LABEL keeps their accessible names independently addressable.

Devin Review

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

Copy link
Copy Markdown
Contributor Author

Write-retry this cycle (seonghobae MCP). #819 is leftover-map v2.45 fail-close pair-list post coverage at a2c96551 (ADR 0288), stacked on #818. Do not squash-merge onto an unprotected leftover base. Do not self-approve. Independent APPROVE still required. Copilot/Devin COMMENT is not independent APPROVE.

This cycle stacks leftover-map graphic axis singular values (σ_k / Gabriel 1971) as v2.46 / ADR 0289 on this head. UI-only; no SQL; no leftover score or theta. Do not merge #808 without independent APPROVE.

Copy link
Copy Markdown
Contributor Author

Write-retry this cycle (seonghobae MCP). #819 remains leftover-map v2.45 fail-close pair-list post coverage at a2c96551 (ADR 0288), stacked on #818. Do not squash-merge onto an unprotected leftover base. Do not self-approve. Independent APPROVE still required. Copilot/Devin COMMENT is not independent APPROVE.

This cycle stacks leftover-map complete-case coverage on the grouping comparison strip as v2.46 / ADR 0289 on this head (include persisted leftover_map_coverage on GET /api/reports/compare/{period}; caption each strip row through leftoverMapCoverageCounts; distinct aria-label Leftover map comparison coverage). No SQL; no leftover score or theta; no inner product/cosine/length columns; no item/incomplete/plot on the strip yet. Do not merge #808 without independent APPROVE.

Copy link
Copy Markdown
Contributor Author

Stacked leftover-map graphic axis singular values (σ_k) as #820 (feat/leftover-map-plot-singular-v2460 @ b7222713, ADR 0289 / v2.46.0) onto this head. Leave both PRs open for independent review. Do not squash-merge onto the unprotected leftover base. Do not self-approve.

Copy link
Copy Markdown
Contributor Author

Stacked #821 (feat/leftover-map-compare-coverage-v2460 @ 11a78553, ADR 0289 / v2.46.0) onto this head. Grouping comparison strip now names persisted leftover-map post complete-case coverage. Leave both PRs open. Independent APPROVE still required. Do not self-approve. Do not squash-merge onto this unprotected leftover base.

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