feat(reports): preserve grouping-comparison unexplained-leftover delta for serialized successor - #833
Conversation
…on strip (v2.54.0) Caption leftover-map unexplained leftover U on grouping comparison leftover-pair buttons through formatLeftoverMapUnexplained (ADR 0297). After make seed, closest and farthest leftover pairs sit above the member list with the Gabriel biplot of already-named coordinates and grouping comparison leftover-pair buttons that match U on the pair row; click a post marker or a pair button opens that post. A missing or non-finite U omits that leftover-map comparison unexplained leftover badge and keeps leftover-map cross share x when finite. A finite negative leftover is shown, never clamped. Do not invent U from R and R̂. UI-only; no new columns. Never invent a leftover score or a theta. 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.
|
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 |
|
Cycle 2026-08-31T01:19 KST. Writes work (comment/create-PR/push). Token still empty X-OAuth-Scopes; GitHub App Grok has contents/PR/issues write as seonghobae. This PR (#833 / v2.54.0 / ADR 0297 / Verification: Leave open for independent review. Do not squash-merge onto the leftover base. Do not self-approve. Copilot review is not independent APPROVE. Stacked onto #831 @ Next buyer increment after this: leftover residual |
| const unexplainedLeftover = formatLeftoverMapUnexplained( | ||
| pair.leftover_map_unexplained, | ||
| ); |
There was a problem hiding this comment.
🟡 Production unexplained badges never appear
Real comparisons omit leftover_map_unexplained in fetch_period_comparison, so formatLeftoverMapUnexplained always hides the new badge. Only mocked responses display it.
Prompt for agents
Expose the persisted unexplained leftover through the real comparison API. In backend/app/report_ingestion.py, update fetch_period_comparison so its leftover-pair query selects report_leftover_pair.leftover_map_unexplained and its payload serialization returns the nullable finite value, matching fetch_period_reports. Add or extend the backend /api/reports/compare/{period_code} integration test to verify the field reaches authorized comparison pairs. Keep the frontend formatter fail-closed for missing or non-finite values.
Was this helpful? React with 👍 or 👎 to provide feedback.
|
Cycle 2026-08-31 01:19 KST. Head Local leftover residual Parallel stack #832 / #834 is a competing U-then-R increment on the same buyer gap; leave those open too. After independent review, retarget onto leftover-coordinates ( Next after R: leftover observed |
seonghobae
left a comment
There was a problem hiding this comment.
Parent-first/capacity finding: this PR is Ready while its base is the still-open feature branch owned by #831, which is itself stacked on an unmerged descendant chain behind the current #802/#811 foundation. Ready here is premature validation admission and can consume review/Actions capacity without a legal protected-main merge path. Preserve the full v2.54.0 delta, but keep this dependent PR Draft until its prerequisite chain converges normally; do not close or squash it.
seonghobae
left a comment
There was a problem hiding this comment.
Current-head stack-authority finding: live base already equals #831 exact 8a12062cd8efef0c99abe794ef3e9f8dcbc31617, but the PR body still cites obsolete parent 2cefc0b, predecessor verification, and historical retarget guidance. Preserve ADR 0297/product semantics and Draft state; make live parent/head/evidence authoritative and do not transfer predecessor tests.
Summary
Preserve the valid persisted grouping-comparison unexplained leftover
Udelta while the serialized report stack is repaired. Missing/non-finiteUomits only that metric; finite zero and negative values remain explicit. UI/read-model composition only: no SQL/schema, theta authority, or invented score.Current serialized authority
The active repair chain is #828 → #829 → #830 → #831 before this successor may be reconstructed.
1472d98b7513c360ca1c7cf6da4a401a716bc53c, Draft/RED. test(#828): verify grouping axis-share accessible semantics #981's dedicated accessibility regression is already part of the feat(reports): preserve grouping comparison axis-share delta for serialized successor #828 product tree; exact product-head run34180159005proves the grouping axis-share generic<span>still has an authoraria-label. Fresh owner review further found Proposed ADR0367 and the v2.54.0 changelog still require/claim distinct accessible naming. Therefore the owner repair is not source-only: remove the prohibited generic-span name while preserving visible localized persisted share text, repair the stale visible-text test contract, and make ADR/changelog/dead label resources code-current without adding a synthetic role. No descendant GREEN transfers across that future feat(reports): preserve grouping comparison axis-share delta for serialized successor #828 head movement.cad63edba68981a1ae3223e2f525284fc9d4ef0fon exact feat(reports): preserve grouping comparison axis-share delta for serialized successor #828. Its persisted unexplained-share transport repair is a valid distinct product delta, but its prior-parent GREEN is historical after feat(reports): preserve grouping comparison axis-share delta for serialized successor #828 moves.367498ed59396f490ce9b475175d748f7c43fc31on exact feat(reports): preserve grouping comparison unexplained-share delta for serialized successor #829. Its local axis-singular accessibility repair was verified on an earlier validation head; current ancestry still inherits feat(reports): preserve grouping comparison axis-share delta for serialized successor #828 RED and must be freshly reconverged after feat(reports): preserve grouping comparison axis-share delta for serialized successor #828/feat(reports): preserve grouping comparison unexplained-share delta for serialized successor #829 move.367498ed...; its historical product head remains8a12062cd8efef0c99abe794ef3e9f8dcbc31617, Draft/conflicting. Proposed ADR0372 is the current decision identity and no release identity is allocated while the product tree is stale. Reconstruct feat(reports): preserve grouping comparison cross-share delta for serialized successor #831 only after repaired feat(reports): preserve grouping comparison axis-share delta for serialized successor #828 → reconverged feat(reports): preserve grouping comparison unexplained-share delta for serialized successor #829 → reconverged feat(reports): preserve grouping comparison axis-singular delta for serialized successor #830, then allocate from then-live ADR/release authority.This PR remains on historical
#831@8a12062c...with headdbff5bf47b06eded0cff64b292815861d7f514f6. Do not retarget or promote it ahead of the serialized parents merely to reduce conflicts. When #831 advances, converge this child non-force and regenerate all non-transferable evidence.Historical identity and #832 recovery inheritance
Historical ADR0297/v2.54.0 is evidence only; current #828 owns v2.54.0. No replacement ADR/release version is materialized on this stale branch. Allocate both from fresh live authority only when the exact rebuilt #831 parent exists, keeping the new ADR Proposed while Draft.
#832 remains an open Draft recovery/evidence lane because it was previously closed before complete successor inheritance was proven. #832 head
1511166c53c16fef65f3330eee58d3a5664b1583and this PR's feature origin are sibling deltas over historical #831. Preserve #832's valid delta explicitly during reconstruction: persisted-Ufinite/missing/non-finite/negative/zero semantics; helper/i18n/App regressions; the assertion thatLEFTOVER_MAP_COMPARE_UNEXPLAINED_LABELremains distinct from the unexplained-share label; generated-lock/project-version parity by regeneration rather than hand edits; and all valid fixture/contract/evidence. Do not close #832 until exact rebuilt #833 proves complete inheritance.Product/accessibility invariants
U; never derive it fromR,R̂, distance, coordinates, residual, explained/unexplained/cross shares, rank, coverage, or unused axes.Uomits only its comparison suffix/badge; finite zero remainsU 0.00; finite negative values are not clamped.Leftover map comparison unexplained leftoversemantically distinct from the unexplained-share label.Uto the actionable grouping-comparison button's accessible name and hide only the duplicate visual badge from the accessibility tree; descendant-text-only evidence is insufficient for this actionable control.Reconstruction/evidence boundary
After #828 is repaired and promoted, converge #829, then #830, then #831 in order. Only then reconstruct this PR from historical
dbff5bf...onto exact repaired #831 with workflow-free non-destructive ancestry, preserving both #832 recovery invariants and this PR's distinctUdelta. Overlapping App/i18n/lock files require semantic reconstruction rather than wholesale ours/theirs selection.Keep Draft until realistic exact-parent RED → minimum causal fix → exact-head full backend/frontend GREEN, regenerated lock/version parity, lint/build/Storybook, current rendered responsive/pointer/touch/keyboard/focus/a11y evidence, canonical translation-ledger convergence, hosted security gates, applicable PostgreSQL/k6 acceptance, and qualifying independent review are current. No self-approval, bypass, force-push, destructive rebase, source duplication, psychometric recomputation, ancestor skip, or predecessor-evidence transfer.