feat(workspace): name tonight's first drop plan on the map - #1040
feat(workspace): name tonight's first drop plan on the map#1040seonghobae wants to merge 27 commits into
Conversation
Name the earliest corroborated full-band arrival after a thin texture so the entering part can land together when the map fills. Heuristic demo topology stays unnamed until real stem activity proves the drop.
|
Warning Review limit reachedNext included review available in 27 minutes. View limit detailsLimit 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. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (13)
🚧 Files skipped from review as they are similar to previous changes (3)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthrough분석 엔진이 검증된 스템 활동에서 첫 드롭 계획을 생성합니다. 데스크톱 워크스페이스는 계획을 현지화해 표시하고, 해당 곡 맵 섹션으로 이동합니다. 데이터 계약과 문서도 갱신되었습니다. Changes첫 드롭 계획
Estimated code review effort: 4 (Complex) | ~45 minutes Merge Risk: 🔵 Low · up to The PR adds buyer-visible drop guidance and navigation, but excluding drum activity from density calculations can cause some valid drop plans to be omitted. The change is mergeable with explicit owner awareness or follow-up on that bounded detection gap. Sequence Diagram(s)sequenceDiagram
participant StemActivity
participant AnalysisEngine
participant Workspace
participant SongMap
StemActivity->>AnalysisEngine: 이전 및 현재 섹션 활동 제공
AnalysisEngine->>AnalysisEngine: 확인된 density fill에서 첫 드롭 계획 선택
AnalysisEngine-->>Workspace: dropPlan과 dropPlanSource 전달
Workspace->>Workspace: 계획 문구 현지화
Workspace->>SongMap: 일치하는 섹션으로 스크롤
SongMap-->>Workspace: 열린 계획 상태 표시
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 80.82% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 73 functions across 28 files. (1 skipped: 1 unsupported.) ✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
|
Strix exact-head handoff — no BandScope-local source repair is valid here.
Acceptance for this lane: rerun the unchanged then-current BandScope head only when at least one contracted provider can complete the assessment and emit the authoritative report; do not transfer predecessor, zero-vulnerability log text, neutral, or partial-provider evidence. Provider credit/capacity ownership is central/operational (see ContextualWisdomLab/.github#624), not this product branch. |
| overlap_warnings: Vec<String>, | ||
| #[serde(default, skip_serializing_if = "Option::is_none")] | ||
| drop_plan: Option<String>, | ||
| #[serde(default, skip_serializing_if = "Option::is_none")] | ||
| drop_plan_source: Option<DropPlanSourcePayload>, |
There was a problem hiding this comment.
🔍 Native role payload omits optional shared-types fields
RehearsalRolePayload uses deny_unknown_fields and adds drop_plan/drop_plan_source, but still lacks harmonicExplanation, transpositionPlan, transcription, and practiceProgress from the shared-types role. A persisted project carrying any of those is rejected by project_payload_from_content. Pre-existing, but this PR extends the same struct.
Was this helpful? React with 👍 or 👎 to provide feedback.
|
@opencode-agent Repair the exact current-head Ruff formatter failure on the existing |
| const landingRole = pickLandingRole( | ||
| rankedActiveRoles(section as RehearsalSection).flatMap((metadata) => { | ||
| if ( | ||
| previousActiveIds.has(metadata.id) || | ||
| ACCOMPANIMENT_SOURCE_ROLE_IDS.has(metadata.id) | ||
| ) { | ||
| return []; | ||
| } | ||
| const dropPlan = ownedDropPlan(metadata.role); | ||
| return dropPlan === null | ||
| ? [] | ||
| : [ | ||
| { | ||
| ...metadata, | ||
| dropPlan: dropPlan.text, | ||
| dropPlanSource: dropPlan.source, | ||
| dropPlanGuidance: dropPlan.guidance | ||
| } | ||
| ]; | ||
| }) | ||
| ); |
There was a problem hiding this comment.
📝 Info: User-authored drop plans surface only inside a detected density fill
resolveSafeFirstDropPlan gates every drop plan (including user-source and source-less ones) behind the full density-fill detection. A user who authors a dropPlan on a role in a section that is not a corroborated drop never sees it rendered. This is consistent with the fail-closed design, but means user guidance can silently disappear.
Was this helpful? React with 👍 or 👎 to provide feedback.
| if (value.dropPlan !== undefined && typeof value.dropPlan !== "string") { | ||
| return invalidField(`${path}.dropPlan`); | ||
| } | ||
| if ( | ||
| value.dropPlanSource !== undefined && | ||
| !isOneOf(PROVENANCE_SOURCES, value.dropPlanSource) | ||
| ) { | ||
| return invalidField(`${path}.dropPlanSource`); | ||
| } | ||
| if (value.dropPlanSource !== undefined && value.dropPlan === undefined) { | ||
| return invalidField(`${path}.dropPlanSource`); | ||
| } |
There was a problem hiding this comment.
📝 Info: Empty dropPlan with a source persists but never renders
Both the shared-types validateRehearsalRole and the Rust validate_drop_plan_provenance accept an empty-string dropPlan paired with a source, since they only reject the source-without-plan case. ownedDropPlan trims and drops zero-length text, so the record round-trips but never displays.
Was this helpful? React with 👍 or 👎 to provide feedback.
|
@opencode-agent Work only on the existing Repair the persisted contract at its owning BandScope layers, smallest scope only:
Return/record the successor exact head and test evidence on this PR. |
Buyer-visible next action
This PR names tonight's first drop plan on the rehearsal map when an entering part lands a full-band arrival after a thin texture: previous graph 1–2 distinct sources, current graph ≥3 sources, previous sources stay, and a new named entrance arrives. Open scrolls that rendered map section so the landing part can come in together when the texture fills.
A drop is a corroborated density fill that arrives. Breakdown is a staying sparse hold. Dropout is a leaving part. Cutoff is a stop-time. Pickup is rest-then-enter. Heuristic-only topology stays unnamed.
Summary
Hit this drop with {target}; come in together when the texture fills.(or the solo fill) only from real stem activity that proves the thin-to-full arrival. Sharedotherstems may corroborate density but never own the landing.dropPlancopy only from owned data properties and snapshots it once before ranking. Inherited, accessor-backed, or Proxy-substituted runtime metadata remains guidance-only.{at} {role} 드롭 열기.data-section-index) and fails closed on ambiguous or missing targets. Reduced motion usesbehavior: "auto".Exact current identity
develop@749511c3ad4000090048718f685c6bee6b3d2c25(fix(security): establish canonical npm, PDF.js, Nanoid, and Undici baseline #783 integrated, feat(workspace): name tonight's first playable range on the map #957 playable range on develop).feat/workspace-first-drop-plan.Verification
tests/test_drop_plan.pyplus extractor/roles/activitydrop_plan_contractround-triptsc --noEmitfor desktop and shared-types./scripts/harness/quickcheck.sh(CI)Security Notes
Attack surface
Untrusted rehearsal-song JSON, Proxy/inherited role metadata, and rendered-map DOM selectors used for Open navigation.
Trust boundary
UI resolver reads only own data properties (
Object.getOwnPropertyDescriptor) and fails closed. Engine drop copy is emitted only from corroborated stem activity. Native payload admits optionaldropPlan/dropPlanSourcewithdeny_unknown_fields.Mitigations
Bounded copy (180 code points), reject multiline/blank plans, reject provenance without copy, snapshot guidance before ranking, fail closed on ambiguous
song-structure-gridmounts, preserve user copy verbatim unless model provenance is explicit.Test points
Hostile Proxy get, inherited metadata, malformed song root, Korean particle-safe copy, navigation failure, reduced motion, demo unnamed, 2→3 solo fill, two named partners, other-stem unnamed, density-drop-is-not-drop, live stem extract.
Dependency and Supply Chain
Canonical #783 is protected
developshipped truth. This branch inherits that JavaScript baseline and does not duplicate or suppress it. Inherited npm HIGH must not be suppressed elsewhere.i18n impact
Reviewer checklist
developKeep unmerged until the unchanged then-current head has every applicable repository and central CI/build/release/security/SAST/SBOM/supply-chain/coverage/review gate terminal-success, zero valid unresolved findings, and a qualifying independent non-author last-push approval under live branch protection.
Queued, pending, skipped, cancelled, failed, predecessor-head, protected-base, model-only, self/author, or administrative-bypass evidence is not success.
Summary by CodeRabbit
새로운 기능
개선 사항