Skip to content

fix/refactor: 2026-09-11 audit execution, successor to #2409 #2531

Description

@thymikee

Purpose

Execute the vetted findings of the 2026-09-11 codebase audit (26 rows, four parallel static audits, every row re-verified at eefe37b51e by read-only verifiers, then the execution shape adversarially reviewed). Successor to #2409 (vertical cost) and #2335 (decoupling wave 3). This umbrella is reliability and repo truth, not features: after wave 2 the primitives under every command (spawn, deadline, kill, lock, runner recovery) are honest.

Rules for every child:

  • Fix-shaped, not detector-shaped. No new ratchet, validator, guard script or helper module unless the child says so. The 2026-09-02 review ranked enforcement machinery as the top waste.
  • Behavior changes land with characterization tests observed on unmodified code first.
  • One local full gate per branch; stacked PRs share the tip's gate.
  • No collocation file moves (measured zero effect in refactor: cut the layers and files one feature change must touch (successor to #2278 and #2335) #2409); no refactor inside the lock child.

Children (waves = independent branches; ← = stack order)

Wave 1

Wave 2

Wave 3

Last

Evaluated and not scheduled

Needs a maintainer decision (no issue filed)

Reconciliation 2026-09-14 (main 730b20149e)

Activity

  1. thymikee commented on Sep 14, 2026

    @thymikee
    MemberAuthor

    Status 2026-09-14, main 730b20149e (38 commits past the audit's verification point).

    Done (5 of 12): #2519 → #2532, #2520 → #2533, #2521 → #2535, #2526 → #2567, #2527 → #2568. Wave 1 is complete.

    Corrections recorded in the body: the Promise.race "fourth site" in #2519 was not a defect (race subscribes to every member). engines.node keeps 22.12 by design; 22.13 is documented as the contributor floor.

    Open (7): wave 2 #2522 (exec settle-on-exit, then background type), #2523 (process lock), #2524 (apple-runner typed recovery), #2525 (shellQuote); wave 3 #2528 (scroll-until hoist), #2529 (size-tier decision); last #2530 (.env in worktrees). None has a branch or PR. No other commit on main touched their files.

    Next: #2522 first among wave 2. It carries the characterization-test list that #2524 also depends on for the deadline path.

  2. thymikee commented on Sep 14, 2026

    @thymikee
    MemberAuthor

    Status 2026-09-14, main 730b20149e.

    Wave 3 is complete: #2528 → #2596, #2529 → #2597. Both branch off main and share no files with wave 2, so #2522/#2523/#2524/#2525 stay independent of them.

    Gates: pnpm check:affected --run green at 3dbf9dcacf (#2596) and b30cf24e42 (#2597). One first-run failure to record for the flake ledger: test/integration/provider-scenarios/android-lifecycle.test.ts frame-action correlation failed once at load average 40+ on 12 cores and passed both alone and on the rerun.

    Left under this umbrella: #2530 in the Last lane.

  3. thymikee commented on Sep 21, 2026

    @thymikee
    MemberAuthor

    Reconciliation at main 45e4c594a1 (0.21.8).

    The wave 2 and wave 3 checkboxes are stale: those children are closed on GitHub and their implementations are on main. Checked each rather than trusting the boxes.

    Wave 1 — #2519 #2532, #2520 #2533, #2521 #2535, all merged 2026-09-13.
    Wave 2 — #2522 354d3516ec (#2599, killed command settles on exit, background exec refuses a timeout), #2523 ef62c7f845 (#2598, lock proves ownership before release), #2524 a901528351 (#2600, typed recovery rules and a verdict on a deadline), #2525 69667b1a3c (#2595, one shellQuote behind the runner host port).
    Wave 3 — #2526 #2567, #2527 #2568, #2528 ad9b906140 (#2596, one visibility index per pass), #2529 751520d49c (#2597, size tiers deleted rather than generalized).

    That is eleven of twelve children. The last one, #2530, is shipped as PR #2732 (chore/2530-worktree-dotenv, af177f40ff): the two .worktreeinclude lines are gone and the operator recipe is recorded in AGENTS.md's worktree traps. pnpm check:affected --run passed all runnable checks at that head; the PR is MERGEABLE with no conflicts. So the umbrella's implementation queue is empty and #2531 can close the moment #2732 merges.

    What this umbrella still owns is the block that never became an issue, and merging #2732 does not resolve any of it:

    1. .ad device-replay corpus has no automatic lane. iOS has been parked since 2026-07-24 by Prune the test lanes that don't pay for themselves, and add the checks we're missing #1781 A1 with no tracking issue and no kill criterion. Reactivate or delete — "parked indefinitely with no owner" is the worst of the three options.
    2. packages/managed-allocation has one production consumer and ADR 0021 never names the package boundary. Keep while the Simlock plan is alive, per the note here; that expiry condition is worth a date.
    3. undici behind a caret override: the pin was aligned to exact in chore(config): scope dependency overrides and delete dead fallow, worktree and prettier entries #2521, but the vendoring policy question is still open.

    I did not file these — publishing issues is a maintainer call. Say the word and I'll open three, one per decision, each with the option set above as its opening state. My recommendation: close #2531 when #2732 lands and carry these three as their own issues, since none of them is a finding awaiting execution and leaving them in a closed umbrella is how they get lost again.

  4. thymikee commented on Oct 2, 2026

    @thymikee
    MemberAuthor

    Closing: all twelve children are closed and each implementation is verified on main (no reverts; every landing SHA is an ancestor of cc5e356595): #2519 b8d70aa8a1 (#2532), #2520 b2b084d2e1 (#2533), #2521 973b74cc14 (#2535), #2522 354d3516ec (#2599), #2523 ef62c7f845 (#2598), #2524 a901528351 (#2600), #2525 69667b1a3c (#2595), #2526 ec712dd741 (#2567), #2527 e3880f10c8 (#2568), #2528 ad9b906140 (#2596), #2529 751520d49c (#2597), #2530 29ac8e6197 (#2732). Body checkboxes are stale in several rows; children were checked against main, not the boxes.

    The three 'needs a maintainer decision (no issue filed)' rows (replay corpus, managed-allocation, undici vendoring) have no tracker and are not implemented by these children. Per the 2026-09-21 reconciliation note, they should be carried as their own issues rather than kept alive through this umbrella.

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions