Skip to content

feat(reports): reconstruct grouping comparison coverage as v2.47.0 - #821

Draft
seonghobae wants to merge 3 commits into
feat/leftover-map-plot-singular-v2460from
feat/leftover-map-compare-coverage-v2460
Draft

feat(reports): reconstruct grouping comparison coverage as v2.47.0#821
seonghobae wants to merge 3 commits into
feat/leftover-map-plot-singular-v2460from
feat/leftover-map-compare-coverage-v2460

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Current authority

#821 is the serialized successor of exact #820 503d043e165e0ae4c6b5c8cca4366c114c74ef2d and has clean product head 93eaa40f34098678fd53da4dbdccb1782dfd41a7, tree bc2be97ea83cefd32a10c055958a991b4add4748. The workflow-free product commit advanced feat/leftover-map-compare-coverage-v2460 with force=false; its parents are prior #821 5d9ed038a8525736ba47d5a80e4ff04edfbab28c and exact #820.

Verified RED → causal fix → GREEN

Run 34060780229, job 101560797899, reproduced a real authorization defect: when ABAC hid part of a persisted grouping, filtered post_count could coexist with full persisted leftover-map coverage and disclose a hidden population denominator. The causal fix returns persisted grouping coverage only when caller-visible persisted membership equals full persisted membership; partial visibility omits the aggregate and never recomputes psychometric coverage from the visible subset.

The run completed exact-parent/history verification, realistic RED, minimal fix, focused/full reconstructed tests, frontend production build, Storybook, and workflow-free clean staging commit ae526d869301bd1e465065bf5747c582da07d2c2 with the same product tree.

ADR0290 remains Proposed while Draft. Package/frontend/runtime identity is v2.47.0. Isolated reconstruction GREEN is not hosted exact-product-head required GREEN, independent approval, browser/keyboard/focus/a11y acceptance, or eight-locale ledger acceptance.

Descendant convergence

#822 bases on this exact head and owns ADR0291/v2.48.0 grouping-comparison item coverage with this full-visible-grouping confidentiality invariant. Multiple failed reconstruction attempts were harness/environment findings rather than product ancestry. Current r9 34066701457 follows the repository-authoritative dependency contract: pinned Rust 1.97.1, frozen uv backend dependencies, Corepack + frozen pnpm frontend dependencies, then split ADR/authorization/release/frontend/build/Storybook GREEN and workflow-free staging.

#823 has been explicitly retargeted after #822 for ADR0292/v2.49.0; #824 after #823 for ADR0293/v2.50.0; #825 remains after #824 for ADR0294/v2.51.0. Historical heads and collided identities are preserved only as evidence until each exact-parent reconstruction succeeds.

This PR stays Draft until its own hosted exact-head evidence and acceptance requirements are satisfied.

…ison strip (v2.46.0)

Caption persisted leftover-map post complete-case coverage on GET /api/reports/compare/{period} through leftoverMapCoverageCounts (ADR 0289). Distinct aria-label Leftover map comparison coverage. Omit when counts are unusable. Do not invent coverage from leftover pair count. No SQL. No leftover score or theta.

Copy link
Copy Markdown
Contributor Author

Write-retry this cycle (seonghobae MCP). #821 is leftover-map v2.46 grouping comparison complete-case coverage at 11a78553 (ADR 0289), stacked on #819 @ a2c96551. Distinct aria-label Leftover map comparison coverage. Do not squash-merge onto an unprotected leftover base. Do not self-approve. Independent APPROVE still required. Copilot/Devin COMMENT is not independent APPROVE.

Do not merge #808 without independent APPROVE. Issues #79 and #87 stay open. #96 is already closed.

@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: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Devin Review

Copy link
Copy Markdown
Contributor Author

Stacked #822 (feat/leftover-map-compare-item-coverage-v2470 @ 6726353, ADR 0290 / v2.47.0) onto this head. Grouping comparison strip now names persisted leftover-map item complete-case coverage. Leave both PRs open. Independent APPROVE still required. Do not self-approve. Do not squash-merge onto this unprotected leftover base.

Copy link
Copy Markdown
Contributor Author

Write-retry this cycle (seonghobae gh). Standing leftover-map constraint: grouping comparison strip (ADR 0149) stays on its reduced leftover payload and does not gain leftover-map captions. This cycle stacked leftover-map singular values on graphic axes as #820 (v2.46 / ADR 0289) and leftover-axis badges as #823 (v2.47 / ADR 0290) onto #819 instead. Do not squash-merge onto an unprotected leftover base. Do not self-approve. Independent APPROVE still required. Do not merge #808 without independent APPROVE.

@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 #819 and the upstream leftover-map stack remain unmerged. Preserve this comparison-coverage delta and return the dependent PR to Draft.

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 added a commit that referenced this pull request Sep 5, 2026
Preserve #822 ADR 0290/product delta while inheriting current #821 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 topology/governance finding: #820 and this Draft sibling both claim ADR 0289 and release identity v2.46.0 for different decisions. #822/#823 already repeat the same pattern at ADR 0290 / v2.47.0, so this is not a harmless filename collision: the open product ancestry has ambiguous decision and release identities. Preserve the grouping-comparison coverage delta, but after #818#819 convergence reconstruct the sibling lanes into a single ordered ancestry with unique ADR/release identities and Proposed decisions. Do not replay historical convergence commits or treat predecessor checks as current evidence.

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

Fresh parent move is now real: #820 has a verified clean two-parent product commit 503d043e165e0ae4c6b5c8cca4366c114c74ef2d on exact #819, so #821 has been retargeted to that branch rather than left on #819. The #821 grouping-comparison complete-case coverage delta remains valid, but its historical ADR0289/v2.46.0 identity is invalid because current parent #820 now owns ADR0289/v2.46.0 for singular-value axis badges. Historical #821 also carries package/frontend 2.46.0 while runtime is 2.41.0, so a child reconstruction must establish a distinct later release identity and Proposed ADR before promotion. Preserve the product/API/UI coverage delta; do not close, bypass #820, or reuse sibling checks.

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

Current-parent review after #820503d043 became authoritative:

  1. The historical #821 identity is no longer valid. #820 now owns ADR 0289 / v2.46.0 for persisted leftover-map singular values, so this valid grouping-comparison coverage delta must be reconstructed as the next explicit child with a distinct ADR/release identity; do not close it and do not reuse the historical ADR 0289 / v2.46.0.

  2. Authorization finding: the historical design fetches persisted report_leftover_map_coverage for the full grouping and returns those counts on the comparison row while compare_period_groupings() separately ABAC-filters caller-visible members/pairs and rewrites post_count. The ADR even states that hiding pairs does not hide persisted coverage counts. For a partially visible grouping this discloses a full-population denominator/census (map_post_count / scored_post_count) that the caller cannot derive from authorized posts. This is the same confidentiality boundary already identified for persisted comparison axis aggregates in #828: persisted report aggregates are not safe to expose when the caller sees only a subset of the population.

Realistic RED for the reconstruction: a grouping with two persisted members, one caller-visible and one hidden, remains present with post_count == 1 but MUST return leftover_map_coverage is None (or omit it) rather than the full-group persisted counts. Do not recompute psychometric coverage from the visible subset, pair count, or marker count. Minimal causal fix: keep persisted coverage only when len(visible_members) == len(persisted_members); otherwise fail closed. Full-visible and 0 of M cases remain unchanged.

Keep the reconstructed ADR Proposed while Draft and preserve #820's singular-value delta/current-parent regressions.

seonghobae added a commit that referenced this pull request Sep 6, 2026
@seonghobae seonghobae changed the title feat(reports): leftover-map complete-case coverage on grouping comparison strip (v2.46.0) feat(reports): reconstruct grouping comparison coverage as v2.47.0 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