Skip to content

feat(workspace): name tonight's first transition cue on the map - #993

Open
seonghobae wants to merge 27 commits into
developfrom
feat/workspace-first-transition-cue
Open

feat(workspace): name tonight's first transition cue on the map#993
seonghobae wants to merge 27 commits into
developfrom
feat/workspace-first-transition-cue

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Product outcome

Name tonight's first transition cue so the room can catch the change together. The Open action moves to the matching rendered map section.

Design authority: workspace next-action pattern plus docs/design-system/component-contract.md. This uses the already-owned CueAnchorKind value transition; it does not invent a new MIR product.

Exact current identity

  • Protected target: develop@acdbea6344fe1231c39535b575f4de35e4c607c9.
  • Canonical branch: feat/workspace-first-transition-cue.
  • Exact current head: ad661de729a332cf55353d61992581f94f022e6c.
  • Open, non-Draft, mergeable, unmerged at the latest refetch.

Buyer-visible contract

  • FirstTransitionCallout names the holding part when an active graph node corroborates it, the owned cue.kind === "transition" value, and the validated transition time.
  • Open scrolls only the matching rendered map section in the callout's own unambiguous workspace scope. Ambiguous co-mounted renderers fail closed rather than scrolling another workspace.
  • Unavailable and ready states keep the same concise accessible landmark name while unavailable guidance remains visible body copy.
  • Co-mounted transition callouts receive unique DOM ids.
  • Armed guidance survives immutable replacement of the same logical song when its trusted identity and transition signature are unchanged.
  • Owned cue text is rendered as a text node and is never rescanned as template syntax; Korean copy remains particle-safe.

Current repairs

  • Transition resolution and section-index derivation are memoized by song identity so unrelated rerenders do not rescan section/role metadata.
  • useId() removes duplicate landmark ids when transition callouts are co-mounted.
  • Navigation resolves the song-structure renderer relative to the clicked callout and rejects ambiguous local/global mounts; regression FirstTransitionCallout.workspace-scope.test.tsx pins multi-workspace correctness.
  • The unavailable landmark now uses firstTransitionLabel instead of the long guidance sentence; FirstTransitionCallout.unavailable-a11y.test.tsx pins the accessible name.
  • Existing descriptor-snapshot guards continue to prevent Proxy getter substitution of validated transition time.

The memoization, landmark-id, workspace-scope, and unavailable-label tests were committed before their successor production fixes, but hosted RED runs did not reach terminal state before the successor pushes. Treat them as regression-first source evidence, not terminal hosted RED evidence.

Single-writer ownership

PR #994 overlaps this exact FirstTransitionCallout / firstTransition production authority and is Draft. #994 is not closed because its labeled-section/localization and cue-truncation semantics are not identical. Keep #993 as the earlier canonical first-transition owner and do not mutate both lanes in parallel.

Exact-head verification state

Fresh repository workflows for exact head ad661de729a332cf55353d61992581f94f022e6c were dispatched after the latest repair. At the latest refetch, CI, release, security-audit, aggregate Security Scan, SBOM, build-baseline, Semgrep, Bandit, and secret-scan were queued. None is counted as success and no predecessor-head workflow/review evidence transfers.

The previously open Devin finding about unmemoized transition resolution has been verified against the current implementation and resolved. No current approval is inferred from that thread resolution.

Dependency and merge gate

Canonical #783 owns the protected-base JavaScript dependency-security baseline. This branch has no JavaScript dependency, lockfile, or vulnerability-suppression delta; inherited dependency findings must not be suppressed here.

Keep unmerged until one unchanged exact head has every applicable repository and central CI/build/release/security/SAST/SBOM/supply-chain/coverage/review gate terminal-success, exact required coverage/docstring evidence, zero valid unresolved current-head findings, and the live ruleset requirement for two qualifying independent approvals is satisfied. Never self-approve, bypass protection, or transfer queued/pending/skipped/failed/stale/predecessor/protected-base/model-only/status-only evidence.


Open in Devin Review

Name the holding part when an active graph node corroborates it, the
owned cue.kind === "transition" value, and the time so the room can
catch the change together. Open scrolls the renderer-owned song-structure
section. Do not invent a change from lyric, count, groove, setup,
simplification, overlap, or form labels.
@coderabbitai

coderabbitai Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

Next included review available in 54 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 102f736a-2fc1-4a16-b862-57aa2121a726

📥 Commits

Reviewing files that changed from the base of the PR and between 151d8ec and 5d2d14c.

📒 Files selected for processing (20)
  • AGENTS.md
  • ARCHITECTURE.md
  • CHANGELOG.md
  • CLAUDE.md
  • apps/desktop/src/features/workspace/FirstTransitionCallout.landmark-id.test.tsx
  • apps/desktop/src/features/workspace/FirstTransitionCallout.particle.test.tsx
  • apps/desktop/src/features/workspace/FirstTransitionCallout.resolver-cache.test.tsx
  • apps/desktop/src/features/workspace/FirstTransitionCallout.test.tsx
  • apps/desktop/src/features/workspace/FirstTransitionCallout.tsx
  • apps/desktop/src/features/workspace/FirstTransitionCallout.unavailable-a11y.test.tsx
  • apps/desktop/src/features/workspace/FirstTransitionCallout.workspace-scope.test.tsx
  • apps/desktop/src/features/workspace/Workspace.test.tsx
  • apps/desktop/src/features/workspace/Workspace.tsx
  • apps/desktop/src/features/workspace/firstTransition.test.ts
  • apps/desktop/src/features/workspace/firstTransition.time-range-authority.test.ts
  • apps/desktop/src/features/workspace/firstTransition.ts
  • apps/desktop/src/i18n/index.test.ts
  • apps/desktop/src/i18n/index.ts
  • apps/desktop/src/locales/en/common.json
  • apps/desktop/src/locales/ko/common.json

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: 5a5a9bbf-2582-4f0c-8ed0-4f9bfef4d3c3

📥 Commits

Reviewing files that changed from the base of the PR and between acdbea6 and 151d8ec.

📒 Files selected for processing (20)
  • AGENTS.md
  • ARCHITECTURE.md
  • CHANGELOG.md
  • CLAUDE.md
  • apps/desktop/src/features/workspace/FirstTransitionCallout.identity.test.tsx
  • apps/desktop/src/features/workspace/FirstTransitionCallout.particle.test.tsx
  • apps/desktop/src/features/workspace/FirstTransitionCallout.reduced-motion.test.tsx
  • apps/desktop/src/features/workspace/FirstTransitionCallout.test.tsx
  • apps/desktop/src/features/workspace/FirstTransitionCallout.tsx
  • apps/desktop/src/features/workspace/Workspace.test.tsx
  • apps/desktop/src/features/workspace/Workspace.tsx
  • apps/desktop/src/features/workspace/firstTransition.inherited-metadata.test.ts
  • apps/desktop/src/features/workspace/firstTransition.test.ts
  • apps/desktop/src/features/workspace/firstTransition.ts
  • apps/desktop/src/i18n/index.test.ts
  • apps/desktop/src/locales/en/common.json
  • apps/desktop/src/locales/ko/common.json
  • apps/desktop/vite.config.ts
  • docs/design-system/component-contract.md
  • docs/doctoring/reduced-motion-first-transition-navigation.md

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


📝 Walkthrough

Walkthrough

첫 번째 소유 전환 큐를 검증하고 선택하는 로직을 추가했습니다. 워크스페이스는 전환 안내를 표시하고 대응하는 곡 구조 섹션으로 이동합니다. 지역화, reduced-motion, 런타임 입력 검증, 회귀 테스트와 문서가 추가되었습니다.

Changes

첫 전환 기능

Layer / File(s) Summary
첫 전환 해석과 검증
apps/desktop/src/features/workspace/firstTransition.ts, apps/desktop/src/features/workspace/firstTransition.test.ts, apps/desktop/src/features/workspace/firstTransition.inherited-metadata.test.ts, apps/desktop/vite.config.ts
유효한 소유 전환 큐를 검증하고 가장 이른 섹션과 역할을 선택합니다. 시간 형식, 중복 ID, 잘못된 메타데이터와 런타임 예외를 처리합니다.
전환 안내와 표시 계약
apps/desktop/src/features/workspace/FirstTransitionCallout.tsx, apps/desktop/src/features/workspace/FirstTransitionCallout*.test.tsx, apps/desktop/src/locales/*/common.json, apps/desktop/src/i18n/index.test.ts, docs/design-system/component-contract.md, docs/doctoring/reduced-motion-first-transition-navigation.md
전환 역할과 시간을 지역화된 안내로 표시합니다. 버튼은 렌더링된 섹션으로 이동하며 reduced-motion 설정에 따라 auto 또는 smooth를 사용합니다. 안내 상태, 한국어 조사, 템플릿 문자와 대상 격리를 테스트합니다.
워크스페이스 연결과 통합 검증
apps/desktop/src/features/workspace/Workspace.tsx, apps/desktop/src/features/workspace/Workspace.test.tsx, AGENTS.md, ARCHITECTURE.md, CHANGELOG.md, CLAUDE.md
워크스페이스에 FirstTransitionCallout을 배치하고 곡 구조 섹션에 data-section-index를 추가합니다. 통합 탐색 동작과 관련 지침 및 변경 기록을 갱신합니다.

Estimated code review effort: 4 (Complex) | ~45 minutes

Merge Risk: ⚪ Minimal · up to 151d8

This localized documentation-only change has no actionable merge-blocking risk remaining and is merge-ready after normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant Workspace
  participant FirstTransitionCallout
  participant resolveFirstTransition
  participant SongStructure
  Workspace->>FirstTransitionCallout: song 전달
  FirstTransitionCallout->>resolveFirstTransition: 첫 전환 해석 요청
  resolveFirstTransition-->>FirstTransitionCallout: 역할, 큐, 시간 반환
  FirstTransitionCallout->>SongStructure: data-section-index 대상 검색
  FirstTransitionCallout->>SongStructure: scrollIntoView({block: "nearest", behavior: "smooth" 또는 "auto"})
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 82.61% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 23 functions across 12 files. (8 skipped: 8…
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 워크스페이스에 오늘 밤의 첫 전환 큐를 표시하고 지도에서 탐색하는 핵심 변경을 정확하고 간결하게 설명합니다.
Full details: Docstring Coverage

Explanation

Docstring coverage is 82.61% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 23 functions across 12 files. (8 skipped: 8 unsupported.)

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/workspace-first-transition-cue

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.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae

Copy link
Copy Markdown
Collaborator Author

Re-review request for exact head 8a75142a8bd150e556e3fbeb314e0327b8c46077: all required status contexts are green on this head (including coverage-evidence and security scans) and all review threads are resolved. @opencode-agent please review current head 8a75142a8bd150e556e3fbeb314e0327b8c46077 and update the review decision.

# Conflicts:
#	AGENTS.md
#	CLAUDE.md
#	apps/desktop/src/features/workspace/Workspace.tsx
#	apps/desktop/src/locales/en/common.json
#	apps/desktop/src/locales/ko/common.json
@seonghobae

Copy link
Copy Markdown
Collaborator Author

Resolved merge conflicts against origin/develop (749511c): unioned AGENTS.md bullets, merged both workspace descriptions in CLAUDE.md, kept both import sets in Workspace.tsx (FirstTransitionCallout + firstRangeSqueeze; both render paths already auto-merged), and unioned en/ko locale tails (transition keys + range keys; JSON valid, en/ko symmetric). No conflict markers remain. Merge head: 5d2d14c.

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