feat(reports): preserve grouping-comparison coordinate-payload delta for serialized successor - #840
Conversation
…d (v2.60.0)
Return persisted leftover-map coordinates ξ / ζ on GET /api/reports/compare/{period} leftover pairs so grouping comparison leftover-pair buttons can match the pair-row coordinate badge on live responses (ADR 0303).
|
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 overlay 2026-08-31 02:35 KSTWrites work (
Independent approval is required. No self-approval, admin bypass, or force push. |
| "leftover_map_person_axis_1": ( | ||
| None | ||
| if pair["leftover_map_person_axis_1"] is None | ||
| else float(pair["leftover_map_person_axis_1"]) | ||
| ), |
There was a problem hiding this comment.
🟡 Non-finite coordinates break comparisons
When a stored coordinate is NaN or infinite, float forwards it into JSON. The entire comparison request fails instead of omitting coordinates.
Prompt for agents
Make fetch_period_comparison serialize each of the four leftover-map coordinate fields only when its database numeric is finite; return null for missing or non-finite values. The report_leftover_pair coordinate columns are unconstrained PostgreSQL numeric values, which can contain NaN or infinities, while FastAPI's JSON serializer rejects their float forms. Apply the same handling consistently to person axes 1/2 and item axes 1/2, and add coverage for non-finite persisted coordinates without deriving replacement coordinates.
Was this helpful? React with 👍 or 👎 to provide feedback.
| "leftover_map_person_axis_1": ( | ||
| None | ||
| if pair["leftover_map_person_axis_1"] is None | ||
| else float(pair["leftover_map_person_axis_1"]) | ||
| ), | ||
| "leftover_map_person_axis_2": ( | ||
| None | ||
| if pair["leftover_map_person_axis_2"] is None | ||
| else float(pair["leftover_map_person_axis_2"]) | ||
| ), | ||
| "leftover_map_item_axis_1": ( | ||
| None | ||
| if pair["leftover_map_item_axis_1"] is None | ||
| else float(pair["leftover_map_item_axis_1"]) | ||
| ), | ||
| "leftover_map_item_axis_2": ( | ||
| None | ||
| if pair["leftover_map_item_axis_2"] is None | ||
| else float(pair["leftover_map_item_axis_2"]) | ||
| ), |
| "leftover_map_person_axis_1": ( | ||
| None | ||
| if pair["leftover_map_person_axis_1"] is None | ||
| else float(pair["leftover_map_person_axis_1"]) | ||
| ), | ||
| "leftover_map_person_axis_2": ( | ||
| None | ||
| if pair["leftover_map_person_axis_2"] is None | ||
| else float(pair["leftover_map_person_axis_2"]) | ||
| ), | ||
| "leftover_map_item_axis_1": ( | ||
| None | ||
| if pair["leftover_map_item_axis_1"] is None | ||
| else float(pair["leftover_map_item_axis_1"]) | ||
| ), | ||
| "leftover_map_item_axis_2": ( | ||
| None | ||
| if pair["leftover_map_item_axis_2"] is None | ||
| else float(pair["leftover_map_item_axis_2"]) | ||
| ), |
|
Cycle write probe 2026-08-31T03:23+09:00: leftover-map coordinates payload #840 remains open for independent APPROVE. No self-approval. Do not squash-merge onto the unprotected leftover base. |
|
Cycle write probe 2026-08-31T03:24+09:00: exact head |
|
Cycle overlay 2026-08-31 03:38 KST: leftover-map graphic display of already-named ξ / ζ on the grouping comparison strip is stacked as feat/leftover-map-compare-graphic-v2610 (ADR 0304 / v2.61.0) onto this payload head |
seonghobae
left a comment
There was a problem hiding this comment.
Current-head repair finding on b5732ba2a6de25595989db0b5fb74308b8eae75a: required Tests already fail in both frontend and full-suite lanes, and the same causal drift later reproduced on both direct children #841 and #842. The shared defects are owned here, not in either child: lineageweave.__version__ is still 2.41.0 while pyproject/frontend ship 2.60.0; the small-canvas segment-caption stack can escape the viewport; and Vietnamese explained-share copy/regression has drifted from the production caption. Repair #840 once with a realistic exact-head RED→GREEN and then reconstruct #841/#842 non-force. Do not duplicate the patch independently in sibling branches, and do not transfer predecessor checks or approval.
seonghobae
left a comment
There was a problem hiding this comment.
Correction to the earlier foundation note: #840 is the nearest shared parent for sibling #841/#842, but it is not the structural root of every inherited defect. Fresh ancestry inspection shows release-identity drift starts at #816: #815 is v2.41.0 with runtime 2.41.0, while #816 is v2.42.0 but still reports runtime 2.41.0. The active #840 isolated lane remains useful to verify the shared small-canvas/Vietnamese patch on this exact tree, but its clean result must not be promoted ahead of current-parent convergence beginning at #813 and per-release identity repair from #816 onward. After that ancestry reaches #840, adapt/replay the verified shared source delta on the reconstructed exact head, then rebuild #841/#842.
Summary
Preserve the valid delta that returns persisted leftover-map coordinates
ξ/ζonGET /api/reports/compare/{period}leftover pairs. Compare read-model payload only: no new SQL/schema, invented coordinates/score/theta, or persisted inner-product/cosine/length derivation.Current stack authority
GitHub base metadata points to immediate predecessor #839 (
feat/leftover-map-compare-coordinates-v2590@14453e71b3871cd726e14ac6e19462a66695b5db). The repaired serialized authority has advanced through exact #8270f9e9c8db37948041f39b4e68e4bbd808fa83752; #828 is now the earliest active reconstruction and #829→#839 retain their valid deltas behind it. The previous description naming #820 as earliest stale is superseded.Historical ADR0303/v2.60.0, current head
b5732ba2a6de25595989db0b5fb74308b8eae75a, and diagnostic run34015056955remain evidence only. Reconstruct this coordinate-payload delta only after exact promoted #839, allocate the then-next unclaimed ADR/release identity from live authority, and keep it Proposed while Draft. Do not promote the historical tree, bypass an ancestor, force-push, destructively rebase, or transfer predecessor checks.Descendant boundary
#841/#842 retain distinct downstream decisions and must converge after this PR is reconstructed; duplicate historical release/ADR identities must be repaired rather than collapsed. Their historical ancestry is not acceptance evidence for this PR.
Product invariant
A missing/non-finite persisted axis remains absent rather than inferred from rank, distance,
Y/E/R/U, reconstruction/share terms, coverage, pair count, or unused axes. Stored origin zeros remain valid. The compare payload may carry only persisted coordinates and existing persisted measurement outputs. Whole-population psychometric aggregates remain subject to current-parent ABAC and must not be recomputed from a caller-visible subset.Canonical KO/EN/JA/ZH/VI/ES/DE/FR translation authority remains #922/#929/#932. Keep Draft until realistic current-parent RED, causal repair, exact-head repository/security GREEN, applicable authenticated PostgreSQL/k6, current browser/responsive/keyboard/focus/a11y evidence, safe descendant convergence, and qualifying independent approval are current. No self-approval or gate weakening.