Skip to content

feat(workspace): guide tonight's first intro on map and player - #943

Draft
seonghobae wants to merge 48 commits into
bolt-performance-chart-export-13223013812255847379from
feat/workspace-first-intro-count-in
Draft

seonghobae wants to merge 48 commits into
bolt-performance-chart-export-13223013812255847379from
feat/workspace-first-intro-count-in

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 19, 2026 •

Copy link
Copy Markdown
Collaborator

Product outcome

After analysis, the room can see tonight's first labeled intro and take one honest next action: open that start on the renderer-owned map, or hear it from Player only when playback authority is supplied. Copy names the holding part when an active role is corroborated, the labeled start, and the time so the room can count in together.

Exact current identity

Product / trust boundary

  • Resolve only an explicit labeled intro section whose runtime window is an integer, non-negative, positive-duration interval bounded by shared MAX_SECTION_TIME_SECONDS.
  • Do not invent an intro from verse, chorus, pickup, stop, handoff, or the first unlabeled section.
  • Name a holding part only when a unique active ranked section-local graph node corroborates it; otherwise keep the start band-wide.
  • Workspace navigation uses renderer-owned section position, never analysis-controlled DOM ids, and arms follow-up guidance only after the action actually executes.
  • Player Hear exists only when the owning surface injects a callable seek callback.
  • Malformed runtime roots/collections/elements/ids/names/priorities/activity/timing are contained rather than becoming buyer-visible authority.
  • Player summary count and labeled section form use the detected locale.

Current review repair

Fresh review found that the Korean rehearsal surface mixed the canonical product term 구간 with 섹션: metricConfidenceSectionCountSingular/Plural rendered {count}개 섹션 while neighboring navigation, confidence, and roadmap copy used 구간.

  • RED 39ed0bef4e67cd7abe7696ee1adbea213a79d5ff: Workspace localization now requires 개 구간.
  • RED 7e8824087e62b6bd95cd5afd2ec4bb369f62b51e: Player localization requires 2개 구간 and explicitly rejects 2개 섹션.
  • Causal repair 066cc31c9a7c675e0f5fc8f62a8c4245faf77fd9: change only the two Korean section-count resources to {count}개 구간.
  • Restack/current 5e357e8d4b06befe2265ac1e09e480d929a9d8d9: ordinary two-parent descendant of 066cc31... and repair(ci): format consolidated supply-chain policy test #1176 8fe6b6d...; tree preserves the feature and adopts current prerequisite/protected content. No force-push or destructive rebase.

The mixed-terminology review thread was replied to with this lineage and resolved after the source repair. The only remaining informational read-asymmetry thread was also revalidated on this exact head: Player intentionally probes Reflect.get to fail closed on throwing Proxy gets, while the intro resolver consumes only an own data descriptor value. It requires no source change and is resolved as informational evidence.

Exact-current-head verification

Current repository-owned generation for 5e357e8d4b06befe2265ac1e09e480d929a9d8d9 exists. At the latest fresh read:

  • build-baseline 35793171170: in progress. Hosted Windows/macOS matrix runners are assigned; macOS arm64 has passed checkout, pinned npm activation, dependency installation, Python sync, and frontend build and is in native shell build. No terminal build verdict yet.
  • ci 35793171215: queued
  • Security Scan 35793171202: queued
  • SAST Semgrep 35793171228: queued
  • sbom 35793171197: queued
  • CodeQL PR 35793171306: queued

Nonterminal/queued is not GREEN. No predecessor-head workflow or review evidence transfers to this head. Current formal review inventory contains COMMENTED submissions only; there is no qualifying independent non-author APPROVED review for this exact head.

Dependency / merge order

#1176 must first settle its own central CodeQL publication/re-entry lifecycle and independent-review gate, then become protected ancestry through normal merge. This PR must then be reconciled non-force against the resulting protected head and receive fresh exact-head checks/review. Do not duplicate #1176's formatter delta locally.

Merge gate

  • Require all exact-current-head repository and central CI/security/SAST/SBOM/coverage gates to reach terminal success.
  • Require zero valid unresolved current-head findings.
  • Require a qualifying independent non-author latest-head APPROVED review.
  • Keep this PR Draft while its prerequisite and exact-head evidence remain incomplete.
  • Never bypass branch protection, self-approve, transfer predecessor evidence, force-push, or destructively rebase.

Security Notes

Untrusted rehearsal metadata remains data only. Runtime roots and collections are validated before access; section time windows are bounded; section-local identities and ranked activity are corroborated; renderer positions own navigation; Player playback remains explicit callback authority; localization only maps validated shared section-form labels to trusted copy; and this change adds no filesystem, network, subprocess, WebView, model, export, persistence, dependency, or review-credential authority.

Name the labeled intro start so the room can count in together.
The workspace action opens the matching map section. Player Hear
exists only when the owning playback surface supplies a seek
callback. Do not invent an intro from verse, chorus, pickup,
stop, handoff, or the first unlabeled section.
@coderabbitai

coderabbitai Bot commented Aug 19, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

첫 번째 유효한 intro와 활성 역할을 안전하게 해석합니다. 워크스페이스는 해당 섹션으로 이동하고, 플레이어는 seek callback이 있을 때만 Hear 동작을 제공합니다. 안내 문구, 현지화, 테스트 및 관련 문서를 추가했습니다.

Changes

첫 인트로 안내

Layer / File(s) Summary
첫 intro 해석
apps/desktop/src/features/workspace/firstIntro.ts, apps/desktop/src/features/workspace/firstIntro.test.ts, apps/desktop/src/features/workspace/firstIntro.inherited-metadata.test.ts, apps/desktop/src/features/workspace/runtimeSectionCollection.test.tsx
곡 데이터, 메타데이터, 시간 범위를 검증합니다. 가장 이른 intro와 우선순위가 가장 높은 활성 역할을 반환합니다. Proxy, 상속 속성, 희소 배열 및 예외 입력을 안전하게 거부합니다.
워크스페이스 안내 및 탐색
apps/desktop/src/features/workspace/FirstIntroCallout.tsx, apps/desktop/src/features/workspace/Workspace.tsx, apps/desktop/src/features/workspace/*test*
FirstIntroCallout을 렌더링합니다. workspace-scroll 모드에서 대상 섹션으로 이동하고, reduced-motion 설정에 따라 스크롤 동작을 선택합니다. 실행 후 완료 상태를 표시합니다.
플레이어 Hear 연결
apps/desktop/src/features/player/index.tsx, apps/desktop/src/features/player/index.test.tsx
플레이어 입력과 섹션 목록을 검증합니다. onPlayFromSeconds가 있을 때 callback-only Hear 동작을 연결합니다. 섹션 수와 라벨을 현지화합니다.
현지화 및 동작 계약
apps/desktop/src/i18n/*, apps/desktop/src/locales/*/common.json, docs/..., AGENTS.md, ARCHITECTURE.md, CLAUDE.md, CHANGELOG.md
영어와 한국어의 intro 라벨 및 안내 문구를 추가합니다. 워크스페이스 요약을 현지화합니다. 컴포넌트 계약, reduced-motion 동작, 프로젝트 문서를 갱신합니다.

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

Sequence Diagram(s)

sequenceDiagram
  participant Workspace
  participant FirstIntroCallout
  participant SongStructure
  participant PlayerFeature
  participant PlaybackSurface

  Workspace->>FirstIntroCallout: song 전달
  FirstIntroCallout->>SongStructure: 첫 intro 위치 탐색
  SongStructure-->>FirstIntroCallout: renderer 소유 대상 반환
  FirstIntroCallout->>SongStructure: intro 섹션으로 스크롤
  PlayerFeature->>FirstIntroCallout: onPlayFromSeconds 전달
  FirstIntroCallout->>PlaybackSurface: intro 시작 시간 전달
  PlaybackSurface-->>PlayerFeature: intro 재생 시작
Loading

Possibly related PRs

Merge Risk: 🟠 High · up to 6d386

The change can still miss a valid first intro or fail to render Player when malformed rehearsal metadata triggers an exception, preventing users from seeing or hearing the intended count-in guidance. Required exact-head checks are not yet terminal, so the PR is not merge-ready until the runtime handling is fixed and all required gates pass.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring check was indeterminate for this PR — some files could not be analyzed in time. Not blocking.
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 제목은 워크스페이스와 플레이어에서 첫 인트로를 안내하는 주요 변경 사항을 명확하게 설명합니다.
✨ 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-intro-count-in

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.

coderabbitai[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Collaborator Author

@opencode-agent Review only exact current head 9a7a4652ae9dc82f709b05ca15aa5ca047b012b8 against protected develop@acdbea6344fe1231c39535b575f4de35e4c607c9. Refetch both before review and abort if either moves.

Verify this buyer-facing first-intro slice remains distinct from neighboring first-action PRs; only an explicit bounded intro section may authorize the callout; holding-role copy requires a unique active ranked section-local graph node; malformed runtime roots/collections/ids/activity/timing fail contained; workspace navigation remains renderer-position owned; Player Hear remains callback-owned; and EN/KO section count plus section-form labels stay locale-consistent with inherited-key fallback blocked. Confirm every visible inline finding is actually resolved on this head and treat inherited npm security only as #783-owned if this diff has no dependency/root-lock change.

Submit formal APPROVE only after exact-head required evidence is terminal and no valid source finding remains; otherwise REQUEST_CHANGES with the first causal boundary and narrowest RED→GREEN correction. Do not edit, merge, weaken protection, rerun unrelated workflows, or transfer predecessor evidence.

@opencode-agent

Copy link
Copy Markdown
Contributor

Queued @opencode-agent for PR #943 at head 9a7a4652ae9dc82f709b05ca15aa5ca047b012b8. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #943 at head 9a7a4652ae9dc82f709b05ca15aa5ca047b012b8. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #943 at head 9a7a4652ae9dc82f709b05ca15aa5ca047b012b8. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

3 similar comments
@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #943 at head 9a7a4652ae9dc82f709b05ca15aa5ca047b012b8. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #943 at head 9a7a4652ae9dc82f709b05ca15aa5ca047b012b8. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #943 at head 9a7a4652ae9dc82f709b05ca15aa5ca047b012b8. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #943 at head 9a7a4652ae9dc82f709b05ca15aa5ca047b012b8. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

1 similar comment
@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #943 at head 9a7a4652ae9dc82f709b05ca15aa5ca047b012b8. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

devin-ai-integration[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@opencode-agent

Copy link
Copy Markdown
Contributor

Queued @opencode-agent for PR #943 at head 6d38625470951902f00c8b64bda211ff07c333f6. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@opencode-agent

Copy link
Copy Markdown
Contributor

Queued @opencode-agent for PR #943 at head 4855357e19dd444271f95142667cb226989e1142. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

devin-ai-integration[bot]

This comment was marked as resolved.

# 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

Merged current develop into this branch: resolved shared-file conflicts by including both this feature's first-intro count-in callout and the newly landed #957 playable-range work (Workspace.tsx keeps both imports; en/ko locales unioned with symmetric keys; AGENTS/CLAUDE unioned). No behavior dropped.

devin-ai-integration[bot]

This comment was marked as resolved.

seonghobae and others added 2 commits August 26, 2026 20:56
FirstIntroCallout read runtimeSong.sections directly for indexOf,
so a throwing getter or Proxy get-trap crashed the render after
resolveFirstIntro had already validated via descriptor reads.
Route both the identity and section-index reads through
descriptor-only helpers that fail closed (-1/empty), matching the
player's trust-boundary posture.

Tests: FirstIntroCallout suite 13/13 (adds throwing-accessor and
get-trap-Proxy cases), Workspace suite 12/12.

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

Devin Review

Comment thread apps/desktop/src/locales/ko/common.json Outdated
Comment thread apps/desktop/src/features/player/index.tsx

Copy link
Copy Markdown
Collaborator Author

Admission-state correction for exact head ff5e47d5cff84194e457c05e4bfbe26a30ea69a8.

Finding: live develop comparison is diverged (44 ahead / 2 behind) and 2 review threads remain unresolved.

This PR remains Open and is moved to Draft/Proposed. Its commits, reviews, threads, and valid delta are preserved. Return it to Ready after causal repair/non-force reconciliation and fresh exact-head evidence. No bypass, synthetic status/approval, manual rerun, Force Push, review dismissal, or Close is used.

@seonghobae
seonghobae marked this pull request as draft September 19, 2026 22:02
@seonghobae
seonghobae changed the base branch from develop to bolt-performance-chart-export-13223013812255847379 September 22, 2026 22:35

Copy link
Copy Markdown
Collaborator Author

Fresh exact-head verification receipt for 5e357e8d4b06befe2265ac1e09e480d929a9d8d9: build-baseline 35793171170 has now completed all four platform jobs successfully (Windows arm64 106966567745, Windows amd64 106966568081, macOS arm64 106966568032, macOS amd64 106966568630). The required final aggregate jobs remain unexecuted/queued on Ubuntu with no runner and no steps: gate / build / macos 106968686451 and gate / build / windows 106969107249, both runner_id=0. Repository CI is likewise blocked before execution at gate / ci / npm-lock-validation 106966238912 with steps=[], runner_id=0.

This supersedes the earlier body snapshot that described platform builds as still in progress. Four-platform build success is valid exact-head evidence, but the required aggregate contexts and CI admission are not GREEN. The cross-repository queue/admission receipt was routed to canonical owner ContextualWisdomLab/.github#712 (comment 5786151126) without no-op source churn, cancellation, or gate bypass. Keep this PR Draft; prerequisite #1176 and independent current-head approval remain separate requirements.

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

Labels

area: ui-ux Frontend, interaction, design, or user experience enhancement New feature or request priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: feature New or expanded product capability

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant