Repository navigation
[Engineering] Convert the open PR backlog into dependency-aware merge trains and product verticals #966
Description
Parent: #958
Baseline PR: #968
Machine-readable seed: docs/product-readiness/open-pr-queue.json
Human baseline: docs/product-technical-gap-baseline.md
Buyer and maintainer problem
The 2026-08-20 snapshot contains 83 open pull requests above protected develop@acdbea6344fe1231c39535b575f4de35e4c607c9. The queue contains valuable work, but it is not yet a reviewable product sequence:
- many feature heads depend on a canonical dependency/toolchain/coverage base;
- adjacent rehearsal PRs each add one cue or action without one active-player authority;
- current-head checks and approval cannot be transferred after restacking or predecessor changes;
- dependency, workflow, security, design, scientific, and buyer-facing work are interleaved;
- duplicate or superseded writers can remain open because closure would otherwise lose their unique test/requirement.
A high PR count is not product velocity. It increases review drift, stale evidence, conflicting ancestry, duplicate state, and the chance of merging locally correct slices that do not form a usable product.
Product outcome
Maintain one generated dependency/succession manifest and process the queue as bounded merge trains. Every live PR must appear exactly once and have one explicit disposition:
canonical_active
stacked_after
refresh_required
superseded_by
duplicate_of
invalid_or_out_of_scope
blocked_by_external_owner
The queue is reduced by merging coherent product verticals and closing superseded/duplicate work with evidence—not by bypassing checks or indiscriminately merging every head.
Initial live routing
The following classification was verified against the 83 live PRs returned during the investigation. It is an initial product-boundary routing, not a merge-readiness decision. Exact head SHA, checks, reviews, unresolved threads, diff overlap, and dependency edges must be refreshed before action.
T0 — dependency, toolchain, workflow, and quality base (30)
#754 #780 #783 #861 #867 #881 #894 #895 #896 #907 #918 #919 #920 #921 #922 #923 #924 #925 #926 #927 #928 #929 #930 #931 #932 #933 #936 #942 #944 #948
Canonical starting points currently include #783 for the JavaScript dependency-security baseline and #861 for Python branch-coverage evidence. CodeQL phase updates (#924, #930, #932, #933) must not land independently if doing so creates a mixed lifecycle.
T1 — local input, filesystem authority, resource admission, and cancellation (6)
#750 #811 #824 #858 #865 #866
#866 is the current canonical local-audio resource-policy slice. PDF, CLI, filesystem, timeout, and cancellation work must converge on shared limits and authority rather than separate constants.
T2 — scientific accuracy, MIR evaluation, and numerical parity (8)
#732 #746 #827 #828 #834 #873 #891 #892
These advance or support #770. #828 is a bounded known-stem/live-input slice, not by itself the complete multi-fixture product acceptance program.
T3 — rehearsal actions and active-player vertical (23)
#776 #845 #850 #874 #884 #900 #901 #903 #904 #905 #910 #912 #913 #914 #916 #934 #937 #939 #943 #946 #947 #955 #957
These must converge behind #961's single transport/action state machine. One cue per PR is acceptable only as an explicit stack; it must not create 23 permanent competing stores or callback contracts.
T4 — handoff and interoperability (2)
#737 #740
These own outbound/inbound handoff slices. They do not replace #962's durable project source of truth.
T5 — activation, UI system, Storybook, and accessibility (8)
#731 #744 #833 #849 #859 #897 #898 #899
#897 is the current executable Storybook/token slice. The train must reconcile code tokens, Figma file BP30foevuRtufwRpTknZUw, localization, first-run behavior, and shipped UI under #964/#965.
T6 — diagnostics, redaction, export security, and supportability (6)
#826 #941 #949 #950 #951 #956
Preserve each security regression while converging on #963's typed error/redaction/support-bundle contract.
T7 — commercial release
No current implementation PR in the 83-PR snapshot owns the complete #960 signed/notarized updater and rollback contract.
Required implementation
Generated queue manifest
Replace the initial read-only seed in #968 with an API-generated manifest containing, for every live PR:
- PR number, title, exact head SHA, base SHA, draft state, and last update time;
- owning train and canonical issue;
- predecessor/dependency PRs and overlapping writer set;
- current disposition and successor/predecessor reference;
- required checks and their exact-head status;
- review decision, last reviewed SHA, unresolved actionable thread count;
- decision timestamp, rationale, and responsible maintainer/agent.
The human table in docs/product-technical-gap-baseline.md must be generated from the same source or checked for exact parity.
Canonicalization rules
- One product/file boundary has one active canonical writer unless a stack order is declared.
- A leaf PR may not carry unrelated lockfile, toolchain, workflow, or dependency-baseline drift.
- After a squash merge or ancestry change, restack the successor and require fresh exact-head checks/review.
- Close a duplicate/superseded PR only after its unique tests, requirements, and findings are transferred.
- Post a succession comment linking the surviving issue/PR and retained evidence.
- Draft PRs state their missing exit criteria and are never represented as merge-ready.
queued,pending,skipped-required, failed inherited-base, predecessor-head, protected-base, self/author, or administrative-bypass evidence is not passing.
Execution loop
refresh live queue
→ validate canonical predecessor
→ inspect current review threads and exact diff overlap
→ repair root cause
→ remove unrelated drift
→ run current-head checks
→ obtain qualifying independent approval
→ merge or enable auto-merge
→ restack the next PR
→ close superseded duplicates with succession evidence
→ refresh manifest and baseline
Waiting for GitHub-hosted checks or external review on one train is not a blocker to productive work on an independent train. It is not permission to introduce a second writer for the same boundary.
Acceptance criteria
- Every live PR appears exactly once in the generated manifest.
- The manifest rejects missing/duplicate PRs, cycles, unknown predecessors, stale head SHAs, and impossible dispositions.
- fix(security): establish canonical npm, PDF.js, Nanoid, and Undici baseline #783 is integrated or replaced by one explicit canonical successor; feature PRs do not carry conflicting dependency baselines.
- Every overlapping writer set has an ordered stack or one surviving canonical PR.
- Duplicate/superseded PRs close only after unique requirements/tests are transferred and succession evidence is posted.
- Each train yields a buyer-visible vertical or a necessary release-quality boundary, not an arbitrary list of diffs.
- Every merged exact head has terminal-success required checks, qualifying independent approval, zero unresolved actionable threads, and ordinary branch-protection acceptance.
- No repository workflow duplicates central maintenance policy without a documented repository-specific requirement.
- Open PR count and median age are reported as operational signals, not incentives for unsafe merge or closure.
- The BandScope 1.0 release has no unexplained open PR affecting its supported product surface.
Non-goals
- Do not force-push over concurrent agent work.
- Do not merge solely to reduce the count.
- Do not close a PR before preserving its unique requirement/test/evidence.
- Do not create another PR for every checkbox here; use coherent stacked slices.
- Do not bypass independent review, branch protection, or current-head checks.
Activity
seonghobae commentedon Sep 2, 2026
Merge-train repair: the first-range Workspace micro-fan-out is now one explicit stack instead of three independent
developsiblings.ce6c8fcf11b4191c2925324f7b8ac2a1b086484f→develop@749511c3ad4000090048718f685c6bee6b3d2c25.aa604734baebec68b25134397fd215b7a0b64e4dis retargeted to feat(workspace): consolidate first-range rehearsal navigation #1143 and preserves unique Open-part/RoleSwitcher behavior + tests/locales.2b8542ecec025ad489c1f5fbc43865b56390d80bis retargeted to feat(workspace): consolidate first-range rehearsal navigation #1143 and preserves unique roadmap section+role focus, duplicate-identity fail-closed behavior, reduced-motion/repeated-focus semantics, and dedicated regressions.Both children currently expose genuine overlapping-file conflicts against #1143; this is intentional repair state, not evidence that either delta is disposable. Close neither child until the canonical owner (or verified successor) contains the full production behavior/tests/contracts/evidence. No predecessor check/review evidence transfers. This removes the immediate single-writer hazard without discarding buyer-visible behavior.
seonghobae commentedon Sep 2, 2026
#966 executable queue-control repair landed on canonical PR #968 without opening another writer. Source-order RED
cbce0607acc4f11ccf8ada3bb1862d416d6ccae7adds a regression where a superseded PR's own head is unchanged but its reviewed successor advances. Causal fix3591195ef487c7f1709051a862cc0785bcadfad2now invalidates reviewed routing whenever any referenced predecessor/overlap/successor changes exact head or independently resolved target-base identity, resetting the dependent decision torefresh_requiredrather than preserving stale succession evidence. Current #968 base remains #1116917bead17bf0df0a204b75bfe380c86deffd36f3; protecteddevelopremains749511c3ad4000090048718f685c6bee6b3d2c25. Exact-head queue run33652873708is queued before terminal evidence, so no GREEN/merge claim is made; organization runner admission remains owned by.github#712and this leaf will not be churned merely to retrigger.seonghobae commentedon Sep 3, 2026
Queue-control update from fresh live state: selected-part Workspace guidance is one product-boundary stack, not three sibling
developwriters. Canonical order is #1150 (entrance cue) → #1151 (first-pass simplification) → #1157 (confirmed chord). #1151 and #1157 are Draft and currently conflict on their parent because each originated from the protected base before retargeting. Preserve each PR's unique selector/tests/EN-KO copy/doctoring evidence and repair them by non-force descendant integration; do not close them for the conflict, force-rebase them, or open another selected-part callout PR. Any further selected-part action should accumulate on the current descendant owner rather than fan out fromdevelop.chore(queue): adopt refreshed product-gap baseline
chore(queue): adopt canonical baseline source repair
chore(queue): adopt v2 persistence baseline repair
seonghobae commentedon Sep 10, 2026
Live single-writer repair finding and disposition: two open Draft PRs claim reusable BandScope Slider authority against protected
develop@314ddeae7b775a4957594b599358c8255617eb2e, but they are not duplicate heads.220ca9f420bb743608011d5b2affa325a343255aexposes a one-horizontal-scalar-thumb boundary and rejects range arrays/vertical orientation. Its valid unique evidence includes a focusedslider.test.tsx, 24 px target contract, and upstream-style Track→Thumb composition.dc8ab810…through REDcb36971dadea5c91ea26cced24b615cbd20c7c80to fix1183b6bdd871ff4edc8671aae071d29268b57124. It preserves the range/vertical-capable composable Root/Control/Track/Indicator/Thumb API that feat(player): admit and bind playable stem artifacts #1160 explicitly names as its reusable Slider prerequisite.overflow-hidden; the new RED requires range/vertical thumbs inside Track without clipping, and the fix removes Track overflow clipping and updates all feat: Slider UI 컴포넌트 추가 #1188 Storybook compositions to the documented anatomy.Canonical direction for this train is therefore #1188's range/vertical-capable API, because the Active Player/timeline product contract requires selected-range semantics and #1160 already consumes #1188. This does not authorize closing #1169 yet. Before closure, transfer any remaining valid focused accessibility/API tests and CHANGELOG evidence from #1169 into #1188, or explicitly reject a requirement with executable product evidence. The scalar-only/no-vertical restriction is intentionally not inherited because it conflicts with the selected-range/vertical reusable-control contract. Do not merge both independently and do not treat predecessor check/review evidence as transferable.
seonghobae commentedon Sep 20, 2026
Queue-stack repair receipt (2026-09-21): canonical baseline #1116 had advanced from
e10cf16aabf47d4370f25d0a98509dca0d11b220to3045a9da259a973ee2d04679b7bb51b5236f2a55, while #968 still pointed at the predecessor. Fresh compare showed #968behind_by=1and GitHub reported the stacked PR non-mergeable. The only missing prerequisite delta wasdocs/product-technical-gap-baseline.md; the queue branch's 22 owned workflow/ADR/reference/manifest/script/test files do not overlap it.#968 now adopts exact #1116 through ordinary two-parent commit
f95238913e52e3a8530116c9bd0c73d9cd567abd(first parent prior queue headaadecc5fa38ab9f6dcd745845bc0d88b85912af4, second parent #11163045a9da259a973ee2d04679b7bb51b5236f2a55). Ref advancement usedforce=false. Fresh compare3045a9da... -> f9523891...isbehind_by=0, merge base exactly #1116, exactly 22 changed files, with neither the canonical baseline file nor the #1176 formatter file in the queue delta. GitHub reports #968 mergeable again.Because the queue head changed, predecessor checks/reviews are stale; #968 remains Draft. No force-push, destructive rebase, self-approval, gate weakening, blind rerun, or copied prerequisite delta was used.
seonghobae commentedon Sep 20, 2026
2026-09-21 queue/baseline ownership repair receipt:
c8cbe00b5618c1d9cd2ab26a5913c2a69d2196a1to correct stale Score Storage fault classification indocs/product-technical-gap-baseline.md;870b028cbc000f50f45e61ff4a8a4a166723b44d(f9523891...first parent,c8cbe00b...second parent), with ref advancementforce=false;c8cbe00b... → 870b028c...compare isbehind_by=0, merge base exactly docs(gap): refresh product-technical baseline (74 repos, live census) #1116, and exactly 22 queue-owned changed files. The baseline file is absent from the descendant delta, so docs(gap): refresh product-technical baseline (74 repos, live census) #1116 remains the single writer and feat(queue): make #966 open-PR merge trains executable #968 preserves all unique queue-control behavior;seonghobae commentedon Sep 20, 2026
Queue-control exact-head evidence admission was repaired on canonical PR #968.
Predecessor exact
870b028cbc000f50f45e61ff4a8a4a166723b44dhad zero Actions runs and zero check runs despite the queue workflow's branch-wide, no-path-filterpushtrigger. Historical pushes on the same branch do haveopen-pr-queue-livegenerations, but current evidence does not identify which event producer was omitted, so no token/actor cause is asserted.Source RED
734d2b2c5600d88b0a989bc668375afbca784361extends the existing queue-workflow regression: exact-head queue evidence must also be admitted on PRopened,reopened, andsynchronizeevents against canonical baseline branchdocs/gap-baseline-2026-08-31. The prior workflow fails that contract.Repair exact
0b02b0d03d37e2800f6f76a6731017335c8cb4b5retains the branch-wide push trigger and adds that PR lifecycle admission without a path filter. Fresh#1116@c8cbe00b... → #968@0b02b0d...compare remainsbehind=0, merge base exactly #1116, with the same 22 queue-owned files; baseline source is not duplicated.No hosted RED is claimed because repair followed before terminal evidence. Latest fresh exact-head read still shows zero workflow runs for
0b02b0d..., so this is not hosted GREEN and PR #968 stays Draft. Do not manufacture freshness with a no-op commit or blind rerun; if normal PR synchronization still produces no generation after settlement, continue RCA at repository/control-plane event admission.seonghobae commentedon Sep 20, 2026
Queue-owner authority update — exact
4a4be8f16aeeb297b3ccafefce4eea5e304bb135Owner review found a second exact-head evidence defect after the earlier PR-admission repair.
pull_requestworkflows userefs/pull/<n>/merge/ the synthetic merge SHA by default; the queue contract requires evidence for the mutable PR head itself. Source RED71813aa7cd70b3c3b2381641c4363a9f8ae02eedadds a workflow regression requiring both checkout and artifact identity to use${{ github.event.pull_request.head.sha || github.sha }}. The predecessor workflow would fail this contract.Repair
4a4be8f16aeeb297b3ccafefce4eea5e304bb135explicitly checks out that exact-head expression and names the evidence artifact from the same expression. Push behavior remains exact-head throughgithub.sha; permissions and queue eligibility are unchanged. Fresh compare to canonical baseline #1116c8cbe00b...isbehind=0with the same 22 queue-owned files and no baseline-source duplication.Hosted GREEN is not claimed. The current exact head still has no
open-pr-queue-livegeneration, and historical branch inventory still stops at the older ordinary-push generation. Keep the execution-admission RCA open and separate from the merge-ref identity bug now repaired. Do not create no-op wake commits, blind reruns or synthetic statuses to manufacture evidence.seonghobae commentedon Sep 21, 2026
2026-09-21 fresh canonicalization update:
UI/App Tooltip set: preserve(ui): zero-delta App tooltip provenance pending canonical #1193 #1240 was Ready while overlapping canonical fix(ui): consolidate unavailable App control tooltips #1193 on
App.tsx. preserve(ui): zero-delta App tooltip provenance pending canonical #1193 #1240 is now Draft preservation. Canonical fix(ui): consolidate unavailable App control tooltips #1193 ordinary/non-force adopted preserve(ui): zero-delta App tooltip provenance pending canonical #1193 #1240 exact353fb66cc447a04760285996af79526acb55cf03through two-parent descendantc30c4786416fefc6dac22a574abbd2a6a26a5c26, preserving fix(ui): consolidate unavailable App control tooltips #1193 Tooltip primitive/resilience/doctoring and adding preserve(ui): zero-delta App tooltip provenance pending canonical #1193 #1240 Import/Export + YouTube clear + App-test deltas. Fresh repair(ci): format consolidated supply-chain policy test #1176-base compare is ahead 41 / behind 0 with exactly 6 UI/doctoring files. preserve(ui): zero-delta App tooltip provenance pending canonical #1193 #1240 remains open until PR-0 verified succession. CodeRabbit's still-valid sibling finding—Save unavailable button still uses nativetitle—is routed to fix(ui): consolidate unavailable App control tooltips #1193, not repaired in the preservation branch.Score bridge set: preserve(score): superseded bridge-loop evidence pending #1190 #1236's generated title/body claimed a Workspace
roleMapoptimization, but live diff actually modifiesscoreStorage.ts/test,.jules/bolt.md, and the repair(ci): format consolidated supply-chain policy test #1176 formatter file. Its validation is weaker than canonical fix(score): enforce renderer score bridge admission #1190 because it accepts arbitrary numeric values and still callsUint8Array.from()after the manual loop. preserve(score): superseded bridge-loop evidence pending #1190 #1236 is now Draft preservation.Canonical fix(score): enforce renderer score bridge admission #1190 had a live/body mismatch too: exact
61eddb08...still carried the byte-identical repair(ci): format consolidated supply-chain policy test #1176 formatter delta as a fourth visible file. It now has ordinary two-parent ancestry repair7d27e95ac4752f2710c1c8c4eeeee68af30ab382with repair(ci): format consolidated supply-chain policy test #1176 exact8fe6b6d...as second parent and PR base retargeted to repair(ci): format consolidated supply-chain policy test #1176. Fresh compare is ahead 10 / behind 0, merge base exactly repair(ci): format consolidated supply-chain policy test #1176, with only 3 score-owned files visible.No PR was closed or merged. No force-push, destructive rebase, self-approval, gate weakening, synthetic status, no-op freshness commit, or predecessor evidence transfer was used.