Skip to content

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

Draft
seonghobae wants to merge 4 commits into
feat/leftover-map-list-incomplete-item-v2440from
feat/leftover-map-list-post-coverage-helper-v2450
Draft

feat(reports): fail-close leftover-map pair-list post coverage (v2.45.0)#819
seonghobae wants to merge 4 commits 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 (ADR0288 / v2.45.0). Missing, invalid, negative, non-positive-denominator, or used-greater-than-scored coverage omits only that note; valid persisted 0 of M remains visible. UI/read-model only; no SQL or measurement authority changes.

Current exact ancestry

Current product head f37ca315e3c48fa37bbcafe96e46c5d7dab991b7 preserves prior #819 e6e3c5d0bad22292005f49c07b1c97944b0442d6 as first parent and exact #818 de3a61988768bcfddcab1dec3dfe3c60f9a89743 as second parent. Workflow-free product tree is 2d0fb56144e67d0f4b0d8a52aa4faaa866bd6939. Run 34053742534 completed current-parent GREEN; predecessor checks/approval do not transfer.

Descendant boundary

#820 is current exact 503d043e165e0ae4c6b5c8cca4366c114c74ef2d (ADR0289/v2.46.0) and #821 is current exact 93eaa40f34098678fd53da4dbdccb1782dfd41a7 (ADR0290/v2.47.0). #821's authorization repair omits persisted grouping coverage whenever ABAC hides any persisted grouping member, preventing hidden denominator disclosure without recalculating psychometric coverage.

#822 now bases on exact #821 as ADR0291/v2.48.0. Current reconstruction r9 34066701457 restores the repository-authoritative pinned Rust + frozen uv + Corepack/pnpm dependency contract after r7/r8 isolated an incorrect npm frontend-install harness. #823/#824/#825 are explicitly serialized after #822 as ADR0292/v2.49.0, ADR0293/v2.50.0, and ADR0294/v2.51.0 respectively; their historical identities are evidence only until reconstruction.

Keep Draft. Fresh exact-product-head required checks, applicable Storybook/browser/a11y evidence, authenticated acceptance where applicable, and qualifying independent approval remain required. No self-approval, protection bypass, force-push, destructive rebase, stale evidence transfer, or invented measurement values.

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.

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

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.

@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.

@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.

Parent-first finding: Ready is premature while base #818 and the upstream leftover-map stack remain unmerged. Preserve this fail-closed coverage delta and return the dependent PR to Draft.

Preserve #819 ADR 0288/product delta while inheriting current #818 ancestry through a normal two-parent merge. No force-push or destructive rebase.
seonghobae added a commit that referenced this pull request Sep 5, 2026
Preserve #821 ADR 0289/grouping-comparison delta while inheriting current #819 ancestry through a normal two-parent merge. No force-push or destructive rebase.

@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.

Current-head repair finding: this Draft successor still has two inherited governance/provenance defects that must be repaired during reconstruction after #818 is cleanly promoted. ADR 0288 is Accepted while unmerged/Draft; keep the valid v2.45 fail-close post-coverage delta but require an executable governance RED and restore ADR 0288 to Proposed. Separately, pyproject.toml declares 2.45.0 while lineageweave.__version__ remains 2.41.0, so the existing release-synchronization contract should reproduce a RED before the minimal runtime correction to 2.45.0. Do not replay the historical #818 convergence commit or recreate the already-repaired Vietnamese/small-canvas authority locally; reconstruct from the future exact #818 parent and regenerate evidence.

seonghobae added a commit that referenced this pull request Sep 6, 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.

Current-head repair finding: the valid v2.45 UI delta is separable from the historical docs/product-technical-gap-baseline.md overlay. That overlay still asserts an Aug-30 protected-main SHA/state and old open-stack inventory, so replaying the feature commit wholesale onto the newly promoted #818 parent would regress code-current authority. Reconstruct from exact #818, preserve the product delta, restore the current parent baseline, then add only a current #819 reconstruction note. The same candidate must reproduce release/governance REDs before changing runtime to 2.45.0 and ADR0288 to Proposed. Do not replay the historical convergence merge or stale scheduler-era baseline text.

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

@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.

Upstream-authority correction after this lane completed: #811 subsequently advanced non-force to 4dcd789385f67c76a4e479194f566f35bb5d2d76, while #812 product head still remains aea06ad7c70f4542a1413b6003d414c0c42d59a7 and its current-parent convergence run 34036103266 is queued. The promoted #819 tree is valid evidence for its local v2.45 repair, but it is not yet final stack authority because #812#818 will have to converge on the moved #811 foundation. Do not advance #820/#821 product promotion from this provisional ancestry. Preserve #819's valid delta and reconstruct/converge it non-force after the upstream chain has absorbed the #811 test-boundary delta.

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant