Skip to content

feat(reports): preserve grouping comparison reconstruction for serialized successor - #826

Draft
seonghobae wants to merge 3 commits into
feat/leftover-map-compare-incomplete-item-v2490from
feat/leftover-map-compare-reconstruction-v2500
Draft

feat(reports): preserve grouping comparison reconstruction for serialized successor#826
seonghobae wants to merge 3 commits into
feat/leftover-map-compare-incomplete-item-v2490from
feat/leftover-map-compare-reconstruction-v2500

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Preserve the valid persisted leftover-map reconstruction comparison delta as the serialized successor of exact #825@b73b10e3079e77f3e62235b2b709dc8a3f450292, while repairing its historical accessibility defect. Current identity is ADR0295 / v2.52.0, Proposed while Draft. Historical ADR0293/v2.50.0 remains ancestry/evidence only.

The product rule is bounded: format only persisted leftover_map_reconstruction; finite zero remains explicit; missing/non-finite values omit only . Never derive reconstruction from distance, coordinates, residuals, unexplained leftover, rank, coverage, or visible-subset proxies. fast-mlsirm retains psychometric authority.

Valid finding → realistic RED → causal repair → reconstructed GREEN

The Devin accessibility finding was valid. Historical #826 rendered an badge inside a pair button with an explicit aria-label, so descendant badge text did not contribute to the accessible name. Run 34084886224 reproduced the realistic RED: a persisted R̂ +0.25 fixture was visibly present while the computed button name remained Open leftover closest pair from comparison: Public post · sales-lead.

The first reconstruction harness also exposed a test-fixture anchoring defect: exact #825 intentionally has two matching generic pair prefixes, so the script's one-anchor assertion was invalid. The workflow prepatch was removed and the product script was bound to the unique comparison-report context immediately preceding leftover_map_coverage.

Corrected run 34085092049, job 101627486611, is terminal GREEN. It passed exact-parent/bounded-harness verification, the accessibility RED, the minimal accessible-name repair, diff integrity, focused App/i18n/reconstruction tests, oxlint, production build, Storybook, frozen dev/backend install, inherited coverage-visibility/governance/package-version tests, and emitted workflow-free staging commit 8e350aa9db4473e4ad32aaf0c312cf171fa0892a with tree e1476f66eb0ce9d3c61a72ba25704a24bb55010a. Independent Git object inspection confirmed that exact tree and both temporary harness paths are absent.

That verified tree has now been promoted to product commit 66a7750a10ad0e9526716d382707f99528a75d90 using normal non-force ref advancement. Parent order preserves historical #826 1418d0dfecd240c5ac6b9f09111c732700330986 first and exact current #825 b73b10e3079e77f3e62235b2b709dc8a3f450292 second. Product tree is exactly e1476f66eb0ce9d3c61a72ba25704a24bb55010a; no automation workflow/script is part of the product tree.

The repair includes the localized reconstruction label/value in the explicit pair-button accessible name and marks the duplicate visible badge aria-hidden, avoiding both suppression and double announcement. Current inline compatibility copy is preserved while canonical eight-locale translation authority remains #922/#929/#932.

Remaining acceptance

Keep Draft. Reconstructed GREEN is not hosted exact-product-head acceptance. Require fresh hosted Tests/SAST/Security/CodeQL where applicable, material browser/keyboard/focus/screen-reader evidence for the current product head, canonical ko/en/ja/zh/vi/es/de/fr ledger convergence, applicable authenticated PostgreSQL/k6 evidence, and qualifying independent approval before merge. No predecessor evidence transfer, self-approval, force push, destructive rebase, or gate weakening.

#827 must converge from this exact promoted head rather than historical #826 ancestry.

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.

…ip (v2.50.0)

Caption persisted leftover-map reconstruction R̂ on GET /api/reports/compare/{period} leftover-pair buttons through formatLeftoverMapReconstruction (ADR 0293). Distinct aria-label Leftover map comparison reconstruction. Omit when R̂ is missing or non-finite. Do not invent R̂ from leftover-map distance or plotted coordinates. No SQL. No leftover score or 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.

Copy link
Copy Markdown
Contributor Author

Independent exact-head APPROVE is required before squash-merge. This token is seonghobae (ADMIN); Copilot/Devin COMMENTED is not independent APPROVE. Do not self-approve. Do not squash-merge onto the unprotected leftover base (feat/leftover-map-compare-incomplete-item-v2490 / #825). After independent review, retarget onto leftover-coordinates (feat/leftover-map-coordinates-v2240 / #782) rather than squash-merging here.

Head a4bf239 (v2.50.0 / ADR 0293) captions persisted leftover-map reconstruction R̂ on grouping comparison leftover-pair buttons through formatLeftoverMapReconstruction. Distinct aria-label Leftover map comparison reconstruction. Missing or non-finite R̂ omits the badge and keeps leftover-map distance d plus strip coverage notes. UI-only; no SQL; no leftover score or theta.

Copy link
Copy Markdown
Contributor Author

cycle write probe 2026-08-30T15:27Z — confirming REST comment permission

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

Devin Review

Comment thread frontend/src/App.tsx Outdated
Comment on lines +4095 to +4099
{reconstruction ? (
<span
className="post-badge"
aria-label={t(LEFTOVER_MAP_COMPARE_RECONSTRUCTION_LABEL)}
>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Screen readers miss reconstruction badges

When reconstruction exists, the enclosing button’s explicit accessible name suppresses this descendant. Screen-reader users cannot discover its R̂ value or meaning.

Prompt for agents
The grouping comparison pair button in frontend/src/App.tsx has its own aria-label, so its descendant reconstruction badge does not contribute to the button's accessible name and can be flattened as presentational button content. Preserve the visible R̂ badge while exposing both the reconstruction label and formatted value to assistive technology. Update the accessibility test to assert the pair button's computed accessible name or another independently exposed semantic element, rather than locating a labeled span that sits inside the button.
Devin Review

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

Comment thread frontend/src/App.tsx
Comment on lines +4066 to +4068
const reconstruction = formatLeftoverMapReconstruction(
pair.leftover_map_reconstruction,
);

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: Comparison payload already carries reconstruction

The comparison payload already returns persisted reconstruction after authorization filtering. Missing and non-finite values remain omitted by the shared formatter.

Devin Review

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

Comment thread frontend/src/App.tsx
Comment on lines +4095 to +4102
{reconstruction ? (
<span
className="post-badge"
aria-label={t(LEFTOVER_MAP_COMPARE_RECONSTRUCTION_LABEL)}
>
{reconstruction}
</span>
) : null}

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: Zero reconstruction survives truthiness guard

formatLeftoverMapReconstruction(0) returns a nonempty R̂ 0.00 label. The conditional therefore retains valid zero reconstruction.

Devin Review

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

Copy link
Copy Markdown
Contributor Author

Stacked leftover-map explained leftover share e on grouping comparison leftover-pair buttons is open as #827 (feat/leftover-map-compare-explained-share-v2510 @ ead81bd, ADR 0294 / v2.51.0) onto this head. This PR still has no independent APPROVE. Leave #825, #826, and #827 open. Do not self-approve. Do not squash-merge.

@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 #825 and the upstream leftover-map chain are unmerged. Preserve the reconstruction delta; return this dependent PR to Draft until prerequisites converge normally.

Preserve #826 ADR 0293/product delta while inheriting current #825 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 #827 ADR 0294/product delta while inheriting current #826 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 stack-authority finding: metadata is already safely converged onto #825 exact 342f78b3ce37724caf66f43b2b9010dbeb4a1e26, but the body still cites obsolete parent bca6baa and historical retarget guidance. Preserve ADR 0293/product semantics and Draft state; current parent/head and current evidence must be authoritative, with predecessor test observations non-transferable.

@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 stack finding: this PR's historical ADR0293/v2.50.0 identity is already consumed by current #824. #825 is being reconstructed from exact #824 with its own collision-free identity, so #826 cannot preserve ADR0293/v2.50.0 or treat the historical #825 head as final parent authority. Keep the reconstruction delta, stay Draft, and after #825 clean promotion reconstruct non-force from that exact parent with an unclaimed ADR/release identity. Do not retarget around #825 or close the valid delta.

@seonghobae seonghobae changed the title feat(reports): leftover-map reconstruction on grouping comparison strip (v2.50.0) feat(reports): preserve grouping comparison reconstruction for serialized successor Sep 7, 2026
seonghobae added a commit that referenced this pull request Sep 7, 2026
seonghobae added a commit that referenced this pull request Sep 7, 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