Skip to content

feat(reports): leftover-map explained leftover share on pair segments (v2.30.0) - #802

Draft
seonghobae wants to merge 19 commits into
mainfrom
feat/leftover-map-segment-explained-share-v2300
Draft

feat(reports): leftover-map explained leftover share on pair segments (v2.30.0)#802
seonghobae wants to merge 19 commits into
mainfrom
feat/leftover-map-segment-explained-share-v2300

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Caption leftover-map graphic-display pair segments with persisted leftover-map explained leftover share e = R̂² / R² (ADR 0273 / v2.30.0).
  • Replays leftover-map reconstruction captions (ADR 0272 / v2.29.0) onto leftover-coordinates (feat/leftover-map-coordinates-v2240 / feat(reports): persist leftover-map coordinates (v2.24.0) #782 @ 9bdd3e4d) because feat(reports): leftover-map reconstruction on pair segments (v2.29.0) #801 squash-merged onto unprotected leftover-map distance (feat/leftover-map-segment-distance-v2280), not onto feat(reports): persist leftover-map coordinates (v2.24.0) #782.
  • After make seed, closest and farthest leftover pairs sit above the member list with the Gabriel biplot of already-named coordinates, leftover-map axis share when finite, axis ticks that match ξ (x, y) ζ (x, y) on the pair row, pair segments that match d on the pair row, pair segments that match on the pair row, and pair segments that match R̂²/R² on the pair row; click a post marker or a pair button opens that post.
  • A missing or non-finite e omits that explained leftover share caption and keeps the connecting line and any leftover-map distance or reconstruction caption. Rank-0 origin cells still name R̂²/R² 0.00 when that persisted share is finite. A share greater than 1 is shown, never clamped. Do not invent e from and R or from plotted coordinates.
  • UI-only; no SQL; no new columns. Never invent a leftover score. Never invent a theta. Do not persist leftover-map inner product, cosine, or length.
  • Stacked onto leftover-map coordinates (feat/leftover-map-coordinates-v2240 / feat(reports): persist leftover-map coordinates (v2.24.0) #782 @ 9bdd3e4d). Leave this PR open for independent review. Do not squash-merge onto the unprotected leftover base. Do not self-approve.

Verification

  • frontend vitest: leftoverMapPlotLayout + LeftoverMapPlot + i18n leftover keys + LeftoverPairList + leftoverMapExplainedShare (164 passed)
  • oxlint on changed leftover-map files: 0 warnings, 0 errors
  • tests/test_leftover_pairs.py and PostgreSQL period-report tests were not executed here (UI-only; no schema change)

Evidence boundary

Authenticated PostgreSQL API and k6 runtime acceptance are not claimed. No real records or credentials. Synthetic fixtures only.

Independent approval is required. No self-approval, admin bypass, or force push.

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.


Devin Review

Summary by CodeRabbit

  • 새로운 기능

    • 잔여 지도 그래프의 쌍 세그먼트에 저장된 재구성값 과 설명된 잔여 비율 e를 표시합니다.
    • 값이 없거나 유한하지 않으면 해당 캡션을 생략하고, 저장된 값을 그대로 표시합니다.
    • 관련 캡션과 설명을 한국어를 포함한 여러 언어로 제공합니다.
  • 문서

    • 표시 규칙과 동작을 릴리스 노트 및 기술 문서에 반영했습니다.
    • 버전을 2.30.0으로 업데이트했습니다.
  • 테스트

    • 정상값, 0값, 누락값 및 유효하지 않은 값에 대한 표시 검증을 추가했습니다.

seonghobae and others added 9 commits August 28, 2026 04:39
Name leftover-map coordinates ξ_{1:2} and ζ_{1:2} on leftover
post–criterion pairs (ADR 0267, migration 0245). After make seed,
closest and farthest leftover pairs sit above the member list with
ξ (x, y) ζ (x, y) next to leftover-map distance d; click opens that
post. Rank-0 unused axes store 0.0. When coordinates, reconstruction,
and distance are finite, R̂ = ξ · ζ and d = ‖ξ − ζ‖. Never invent a
leftover score. Never invent 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.
* feat(reports): leftover-map graphic display (v2.25.0)

Draw persisted leftover-map coordinates ξ and ζ as a Gabriel biplot
above leftover pair buttons (ADR 0268). Click a post marker to open
that post. Omit the plot when coordinates are missing. No new columns.
Never invent a leftover score or a theta.

* fix(reports): preserve leftover-map distances

Signed-off-by: Codex <codex@localhost>

* fix(reports): keep plot labels readable

Signed-off-by: Codex <codex@localhost>

* docs(reports): correct leftover plot omission rule

---------

Signed-off-by: Codex <codex@localhost>
Co-authored-by: Codex <codex@localhost>
…787)

Caption leftover-map plot axes with persisted ADR 0148 leftover-map
axis share σ_k² / Σ_j σ_j² (ADR 0269). Rank-0 zero-share axes still
name 0%. A missing or non-finite share omits that axis badge and
keeps the existing leftover-map axis text. Click a post marker to
open that post. No new columns. Never invent a leftover score or a
theta.
Signed-off-by: Codex <codex@localhost>
Caption leftover-map graphic-display axes with persisted leftover-map
coordinate ticks (ADR 0270). After make seed, closest and farthest
leftover pairs sit above the member list with the Gabriel biplot of
already-named coordinates, leftover-map axis share when finite, and
axis ticks that match ξ (x, y) ζ (x, y) on the pair row; click a post
marker or a pair button opens that post. Origin is always named 0.
Rank-0 unused axes do not invent −1 / +1 drawing-scale ticks. Never
invent a leftover score or a theta. No new columns.
Caption leftover-map graphic-display pair segments with persisted
leftover-map distance d (ADR 0271). After make seed, closest and
farthest leftover pairs sit above the member list with the Gabriel
biplot of already-named coordinates, leftover-map axis share when
finite, axis ticks that match ξ (x, y) ζ (x, y) on the pair row, and
pair segments that match d on the pair row; click a post marker or a
pair button opens that post. A missing or non-finite d omits that
segment caption. Do not invent d from plotted coordinates. Never
invent a leftover score or a theta. No new columns.
Caption leftover-map graphic-display pair segments with persisted
leftover-map reconstruction R̂ (ADR 0272). After make seed, closest
and farthest leftover pairs sit above the member list with the Gabriel
biplot of already-named coordinates, leftover-map axis share when
finite, axis ticks that match ξ (x, y) ζ (x, y) on the pair row, pair
segments that match d on the pair row, and pair segments that match
R̂ on the pair row; click a post marker or a pair button opens that
post. A missing or non-finite R̂ omits that reconstruction caption.
Do not invent R̂ from plotted coordinates. Never invent a leftover
score or a theta. No new columns.
… (v2.30.0)

Caption leftover-map graphic-display pair segments with persisted
leftover-map explained leftover share e = R̂²/R² (ADR 0273). After
make seed, closest and farthest leftover pairs sit above the member
list with the Gabriel biplot of already-named coordinates, leftover-map
axis share when finite, axis ticks that match ξ (x, y) ζ (x, y) on the
pair row, pair segments that match d on the pair row, pair segments
that match R̂ on the pair row, and pair segments that match R̂²/R² on
the pair row; click a post marker or a pair button opens that post. A
missing or non-finite e omits that explained leftover share caption. A
share greater than 1 is shown, never clamped. Do not invent e from R̂
and R or from plotted coordinates. Never invent a leftover score or a
theta. No new columns.
@coderabbitai

coderabbitai Bot commented Aug 29, 2026

Copy link
Copy Markdown

Review Change Stack

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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 86e9670d-3aa2-44f3-83cc-134a549ed235

📥 Commits

Reviewing files that changed from the base of the PR and between 6c5a226 and 1840378.

📒 Files selected for processing (3)
  • docs/product-technical-gap-baseline.md
  • lineageweave/__init__.py
  • tests/test_package_version.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/product-technical-gap-baseline.md

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

잔여 맵 쌍 세그먼트가 지속된 재구성값 와 설명된 잔여 공유 e를 표시합니다. 누락되거나 유한하지 않은 값의 캡션은 생략합니다. 레이아웃, 번역, 테스트, ADR, 릴리스 기록을 갱신했습니다.

Changes

잔여 맵 세그먼트 캡션

Layer / File(s) Summary
캡션 데이터와 레이아웃
frontend/src/leftoverMapPlotLayout.ts
쌍 데이터와 세그먼트 타입에 e 필드를 추가했습니다. 두 값을 포맷하고 거리 캡션과 함께 수직으로 배치합니다. 서로 다른 원시 좌표값이 같은 표시 라벨을 가질 때도 틱을 구분합니다.
SVG 렌더링과 번역 검증
frontend/src/components/LeftoverMapPlot.tsx, frontend/src/components/LeftoverMapPlot.test.tsx, frontend/src/i18n.ts, frontend/src/i18n.test.ts, frontend/src/components/LeftoverMapPlot.stories.tsx, docs/storybook-inventory.md, frontend/src/components/LeftoverPairList.tsx, frontend/src/leftoverMapPlotLayout.test.ts
e 캡션을 조건부 SVG 텍스트와 접근성 라벨로 렌더링합니다. 누락 및 NaN 값, rank-0 값, 겹치는 틱, 지원 로케일의 번역을 검증합니다.
ADR와 기술 문서
docs/adr/*.md, AGENTS.md, ARCHITECTURE.md, CLAUDE.md
ADR 0272는 지속된 캡션을 정의합니다. ADR 0273은 지속된 e = R̂² / R² 캡션을 정의합니다. 관련 ADR 목록과 프로젝트 문서를 갱신했습니다.
릴리스 기록과 버전
CHANGELOG.d/*.md, CHANGELOG.md, docs/product-technical-gap-baseline.md, frontend/package.json, pyproject.toml, lineageweave/__init__.py, tests/test_package_version.py
프로젝트 버전을 2.30.0으로 변경했습니다. 변경 로그와 기술 기준 기록을 추가하고 세 버전 값의 동기화를 테스트합니다.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 18403

This change adds persisted explained-leftover-share captions to the leftover-map display without changing stored data or backend behavior. No actionable merge-blocking risk remains beyond normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant PairData
  participant layoutLeftoverMapPlot
  participant LeftoverMapPlot
  participant i18n
  PairData->>layoutLeftoverMapPlot: 지속된 R̂와 e 전달
  layoutLeftoverMapPlot->>layoutLeftoverMapPlot: 캡션 포맷과 위치 계산
  layoutLeftoverMapPlot->>LeftoverMapPlot: 캡션 텍스트와 좌표 전달
  LeftoverMapPlot->>i18n: 캡션 레이블 번역 조회
  i18n-->>LeftoverMapPlot: 번역된 접근성 레이블 반환
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 30.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 10 functions across 10 files. (1 skipped:… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 leftover-map pair segment에 explained leftover share를 추가하는 주요 변경을 정확히 요약합니다. v2.30.0 범위도 명확합니다.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 30.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 10 functions across 10 files. (1 skipped: 1 unsupported.)

✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/leftover-map-segment-explained-share-v2300

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

Write probe after open. Stacked onto leftover-map coordinates (feat/leftover-map-coordinates-v2240 / #782), not onto unprotected leftover-map distance. Independent APPROVE required. Copilot review is not independent APPROVE. Do not self-approve. Do not squash-merge this PR onto the leftover base.

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

#803 leftover-map unexplained leftover share s on pair segments (ADR 0274 / v2.31.0) is stacked on this branch. Leave both PRs open for independent review. Do not squash-merge stacked leftover PRs onto unprotected leftover bases. Independent APPROVE is still required. Do not self-approve.

Copy link
Copy Markdown
Contributor Author

Cycle 2026-08-29: independent APPROVE still required on exact head 79ec22f0. No self-approval. #803 (v2.31.0 unexplained leftover share) and #804 (v2.32.0 leftover-map cross share) are stacked above this PR. Do not squash-merge onto the leftover base.

@seonghobae
seonghobae changed the base branch from feat/leftover-map-coordinates-v2240 to main August 30, 2026 21:27
devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae
seonghobae enabled auto-merge (squash) August 30, 2026 21:31
coderabbitai[bot]

This comment was marked as resolved.

@opencode-agent
opencode-agent Bot disabled auto-merge August 30, 2026 22:44
Signed-off-by: Codex <codex@localhost>
@seonghobae
seonghobae enabled auto-merge (squash) August 31, 2026 01:16
devin-ai-integration[bot]

This comment was marked as resolved.

@opencode-agent
opencode-agent Bot disabled auto-merge August 31, 2026 01:18
@seonghobae
seonghobae enabled auto-merge (squash) August 31, 2026 01:25
Signed-off-by: Codex <codex@localhost>
@opencode-agent
opencode-agent Bot disabled auto-merge August 31, 2026 02:46
Signed-off-by: Codex <codex@localhost>
@seonghobae
seonghobae enabled auto-merge (squash) August 31, 2026 02:48
Codex added 2 commits August 31, 2026 12:15
Signed-off-by: Codex <codex@localhost>
Signed-off-by: Codex <codex@localhost>
devin-ai-integration[bot]

This comment was marked as resolved.

@opencode-agent
opencode-agent Bot disabled auto-merge August 31, 2026 03:19
Signed-off-by: Codex <codex@localhost>
@seonghobae
seonghobae enabled auto-merge (squash) August 31, 2026 03:21
@opencode-agent
opencode-agent Bot disabled auto-merge August 31, 2026 03:25
@seonghobae
seonghobae enabled auto-merge (squash) August 31, 2026 10:41
@opencode-agent
opencode-agent Bot disabled auto-merge August 31, 2026 14:54
@seonghobae
seonghobae enabled auto-merge (squash) August 31, 2026 16:41
@opencode-agent
opencode-agent Bot disabled auto-merge September 1, 2026 00:48
@seonghobae
seonghobae enabled auto-merge (squash) September 1, 2026 00:54
@opencode-agent
opencode-agent Bot disabled auto-merge September 1, 2026 10:41

Copy link
Copy Markdown
Contributor Author

Loop 2026-09-03 09:15 KST. Writes work (MCP). Do not self-approve.

Independent APPROVE is still required on this leftover-map stack root and every stacked successor through #918. Copilot/Devin/CodeRabbit COMMENT is not independent APPROVE. Do not squash-merge stacked leftover PRs onto an unprotected leftover base. Do not merge #808 without independent APPROVE. Issues #79 and #87 stay OPEN.

This cycle reconstructs leftoverMapPlotOriginBadge (ADR 0355 / v2.112.0) onto live #918 @ a91d2ec without mixing #877 or dirty draft #890.

@seonghobae
seonghobae marked this pull request as draft September 3, 2026 04:59
… main

Adopt protected main #923's docs-only Tests workflow delta without rewriting the reviewed leftover-map product tree.
@opencode-agent

opencode-agent Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Scheduled review-feedback autofix for this PR head.

  • Head SHA: 5a8afbd9099efae658ee3c2a9b02ceaa3b78022c

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant