Skip to content

[Engineering] Convert the open PR backlog into dependency-aware merge trains and product verticals #966

Open

Description

@seonghobae

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

  1. added
    area: authAuthentication, authorization, identity, or tenant isolation
    area: ci-cdCI, GitHub Actions, checks, release, or supply chain
    area: securitySecurity boundary, hardening, or vulnerability prevention
    status: triagedOpen issue has an organization taxonomy assignment
    type: maintenanceMaintenance, build, dependency, or operational upkeep
    on Aug 22, 2026
  2. added and removed on Sep 1, 2026
  3. seonghobae commented on Sep 2, 2026

    @seonghobae
    CollaboratorAuthor

    Merge-train repair: the first-range Workspace micro-fan-out is now one explicit stack instead of three independent develop siblings.

    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.

  4. seonghobae commented on Sep 2, 2026

    @seonghobae
    CollaboratorAuthor

    #966 executable queue-control repair landed on canonical PR #968 without opening another writer. Source-order RED cbce0607acc4f11ccf8ada3bb1862d416d6ccae7 adds a regression where a superseded PR's own head is unchanged but its reviewed successor advances. Causal fix 3591195ef487c7f1709051a862cc0785bcadfad2 now invalidates reviewed routing whenever any referenced predecessor/overlap/successor changes exact head or independently resolved target-base identity, resetting the dependent decision to refresh_required rather than preserving stale succession evidence. Current #968 base remains #1116 917bead17bf0df0a204b75bfe380c86deffd36f3; protected develop remains 749511c3ad4000090048718f685c6bee6b3d2c25. Exact-head queue run 33652873708 is queued before terminal evidence, so no GREEN/merge claim is made; organization runner admission remains owned by .github#712 and this leaf will not be churned merely to retrigger.

  5. seonghobae commented on Sep 3, 2026

    @seonghobae
    CollaboratorAuthor

    Queue-control update from fresh live state: selected-part Workspace guidance is one product-boundary stack, not three sibling develop writers. 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 from develop.

  6. added
    bugSomething isn't working
    type: bugDefect or incorrect behavior
    on Sep 7, 2026
  7. seonghobae commented on Sep 10, 2026

    @seonghobae
    CollaboratorAuthor

    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.

    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.

  8. seonghobae commented on Sep 20, 2026

    @seonghobae
    CollaboratorAuthor

    Queue-stack repair receipt (2026-09-21): canonical baseline #1116 had advanced from e10cf16aabf47d4370f25d0a98509dca0d11b220 to 3045a9da259a973ee2d04679b7bb51b5236f2a55, while #968 still pointed at the predecessor. Fresh compare showed #968 behind_by=1 and GitHub reported the stacked PR non-mergeable. The only missing prerequisite delta was docs/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 head aadecc5fa38ab9f6dcd745845bc0d88b85912af4, second parent #1116 3045a9da259a973ee2d04679b7bb51b5236f2a55). Ref advancement used force=false. Fresh compare 3045a9da... -> f9523891... is behind_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.

  9. seonghobae commented on Sep 20, 2026

    @seonghobae
    CollaboratorAuthor

    2026-09-21 queue/baseline ownership repair receipt:

  10. seonghobae commented on Sep 20, 2026

    @seonghobae
    CollaboratorAuthor

    Queue-control exact-head evidence admission was repaired on canonical PR #968.

    Predecessor exact 870b028cbc000f50f45e61ff4a8a4a166723b44d had zero Actions runs and zero check runs despite the queue workflow's branch-wide, no-path-filter push trigger. Historical pushes on the same branch do have open-pr-queue-live generations, but current evidence does not identify which event producer was omitted, so no token/actor cause is asserted.

    Source RED 734d2b2c5600d88b0a989bc668375afbca784361 extends the existing queue-workflow regression: exact-head queue evidence must also be admitted on PR opened, reopened, and synchronize events against canonical baseline branch docs/gap-baseline-2026-08-31. The prior workflow fails that contract.

    Repair exact 0b02b0d03d37e2800f6f76a6731017335c8cb4b5 retains the branch-wide push trigger and adds that PR lifecycle admission without a path filter. Fresh #1116@c8cbe00b... → #968@0b02b0d... compare remains behind=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.

  11. seonghobae commented on Sep 20, 2026

    @seonghobae
    CollaboratorAuthor

    Queue-owner authority update — exact 4a4be8f16aeeb297b3ccafefce4eea5e304bb135

    Owner review found a second exact-head evidence defect after the earlier PR-admission repair. pull_request workflows use refs/pull/<n>/merge / the synthetic merge SHA by default; the queue contract requires evidence for the mutable PR head itself. Source RED 71813aa7cd70b3c3b2381641c4363a9f8ae02eed adds 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 4a4be8f16aeeb297b3ccafefce4eea5e304bb135 explicitly checks out that exact-head expression and names the evidence artifact from the same expression. Push behavior remains exact-head through github.sha; permissions and queue eligibility are unchanged. Fresh compare to canonical baseline #1116 c8cbe00b... is behind=0 with 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-live generation, 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.

  12. seonghobae commented on Sep 21, 2026

    @seonghobae
    CollaboratorAuthor

    2026-09-21 fresh canonicalization update:

    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.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: authAuthentication, authorization, identity, or tenant isolationarea: ci-cdCI, GitHub Actions, checks, release, or supply chainarea: dependenciesDependency or lockfile maintenancearea: securitySecurity boundary, hardening, or vulnerability preventionbugSomething isn't workingpriority: highHigh-priority or P1 workstatus: triagedOpen issue has an organization taxonomy assignmenttype: bugDefect or incorrect behaviortype: maintenanceMaintenance, build, dependency, or operational upkeep

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions