feat(reports): reconstruct grouping comparison coverage as v2.47.0 - #821
feat(reports): reconstruct grouping comparison coverage as v2.47.0#821seonghobae wants to merge 3 commits into
Conversation
…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.
|
Write-retry this cycle (seonghobae MCP). #821 is leftover-map v2.46 grouping comparison complete-case coverage at Do not merge #808 without independent APPROVE. Issues #79 and #87 stay open. #96 is already closed. |
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Stacked #822 ( |
|
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
left a comment
There was a problem hiding this comment.
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.
seonghobae
left a comment
There was a problem hiding this comment.
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
left a comment
There was a problem hiding this comment.
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
left a comment
There was a problem hiding this comment.
Current-parent review after #820503d043 became authoritative:
-
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.
-
Authorization finding: the historical design fetches persisted
report_leftover_map_coveragefor the full grouping and returns those counts on the comparison row whilecompare_period_groupings()separately ABAC-filters caller-visible members/pairs and rewritespost_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.
Current authority
#821 is the serialized successor of exact #820
503d043e165e0ae4c6b5c8cca4366c114c74ef2dand has clean product head93eaa40f34098678fd53da4dbdccb1782dfd41a7, treebc2be97ea83cefd32a10c055958a991b4add4748. The workflow-free product commit advancedfeat/leftover-map-compare-coverage-v2460withforce=false; its parents are prior #8215d9ed038a8525736ba47d5a80e4ff04edfbab28cand exact #820.Verified RED → causal fix → GREEN
Run
34060780229, job101560797899, reproduced a real authorization defect: when ABAC hid part of a persisted grouping, filteredpost_countcould 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
ae526d869301bd1e465065bf5747c582da07d2c2with 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
34066701457follows the repository-authoritative dependency contract: pinned Rust 1.97.1, frozenuvbackend dependencies, Corepack + frozenpnpmfrontend 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.