Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 18 additions & 11 deletions devlog/_plan/260905_now_split_train/000_plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@ the closeout tallies both and only the first counts as resolved.
- Pure move only. No renames of exported identifiers, no signature changes,
no deletion of exports, no "while I'm here" fixes. A behavior defect found
during a move is recorded in the decade doc and left alone.
- New leaf files ≤400 lines; the residual original file ≤400 lines or the
layer states why a second layer (`#b`) follows (003 INTERMEDIATE-RESIDUAL-01,
RESIDUAL-FN-01).
- New leaf files ≤400 lines. A residual original file above400 requires a
bounded declared successor chain (003 INTERMEDIATE-RESIDUAL-01), or the
explicit final-state RESIDUAL-FN-01 exception in003. The exception requires
one unsplittable function to be the sole cause after all permitted moves;
it is recorded as unresolved function debt, not a resolved file.
- The ≤500-line PR cap is measured on the non-move diff for pure-move layers
(003 PURE-MOVE-SIZE-01); non-move diff ≤150 lines.
- Re-export binds nothing locally (260818 WP1 lesson): internal call sites in
Expand All @@ -37,11 +39,14 @@ the closeout tallies both and only the first counts as resolved.
a new leaf imported from a protected root must not reach `src/lab`.
- Verification from WP400 onward: typecheck, focused tests, privacy scan and
full suite run in an isolated checkout on `ssh lidge`; no local suites.
- Git: layer branches `codex/split-<slug>`; bottom layer base `dev`, each
upper layer base = the branch below; push + PR creation pre-authorized by
the user for this loop; **merge never** (DEV-STACK-04 ESCALATE). Cascade
with `git rebase --update-refs` + `--force-with-lease` when a lower layer
changes (DEV-STACK-02).
- Git: layer branches `codex/split-<slug>`. Only declared dependency edges
use a lower layer's branch; independent layers target `dev`, as specified
by003 STACK-INDEPENDENCE-01 and002. Push and PR creation are pre-authorized;
admin landing follows003 USER-ADMIN-LANDING-01 after passing checks.
Cascade only affected dependent branches when their lower layer changes,
using explicit `--force-with-lease` protection. Preserve checkpoint and
unrelated refs; do not let automatic update-refs move them. Managed-worktree
identity and current verification rules in003 remain binding.
- Open-stack depth cap: 5 dependent PRs. S04 contains six total layers,
including prerequisite layer 105, but STACK-INDEPENDENCE-01 replaced the initial
six-deep linear proposal: its longest current base chain is 3. Across the
Expand All @@ -64,12 +69,14 @@ Total: 77 implementation layers across 21 stacks (002_layer_map.md; 105 and
## Out of scope

The 151 `RESOLVABLE_AFTER` and 19 `ACCEPTED` rows; core.ts / config.ts /
service.ts / auth-api.ts; merges; releases.
service.ts / auth-api.ts; releases and direct branch pushes. Reviewed admin
landing after passing CI is now authorized by USER-ADMIN-LANDING-01 in003.

## Terminal outcome expected

DONE when every layer in 002 has an open PR with a green exact-head CI rollup
recorded in its decade doc.
DONE when every approved layer in002 has passing final-head CI and an admin
landing recorded with its review, stack-safety and dev-ancestry evidence.
The user's later delivery instruction supersedes the initial open-PR-only end.

## Completion spine

Expand Down
41 changes: 35 additions & 6 deletions devlog/_plan/260905_now_split_train/003_parent_decisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,13 @@ Permitted transformations of a moved line (still pure-move):
Evidence: the C phase pastes `git diff --color-moved=dimmed-zebra
--color-moved-ws=allow-indentation-change` for each converted method and
shows the body as a move block; the layer's focused tests cover every
converted method (listed in the doc's Tests section). The same rule
covers a class method split by `this`-fields, should one occur.
converted method (listed in the doc's Tests section). This exception is
limited to object-literal methods with ordinary lexical captures and no
dependence on `super`, private-name resolution, dynamic `this`,
`arguments`, or other method-only semantics. Class methods are excluded:
do not replace prototype dispatch with an own-property function. Such
cases need a separately planned and tested behavior-preserving design,
not this pure-move exception.
4. JSX block → sibling component with verbatim props (GUI-SEAM-01).

Anything else (reordering statements inside a moved body, renaming, changing
Expand All @@ -57,10 +62,14 @@ The layer count in 002 stands as drafted; no stack is re-sliced for size.
S07 L1: `parseRequest` is 464 lines by itself, so `src/responses/parser.ts`
cannot reach ≤400 by moving other symbols. Splitting the function is a
behavior-preserving extraction, not a move, and is out of this train's scope.
Decision: the layer moves everything movable, the residual stays over 400,
and the doc records the function as `RESOLVABLE_AFTER(design:L1-parse-request-extraction)`
for the 021 ledger's next revision. Same rule applies to any other layer that
finds a single >350-line function (none other reported).
Decision: apply this exception only after all permitted moves, when the
final residual still exceeds400 lines and one unsplittable function is the
sole cause. A function exceeding350 lines is not sufficient on its own.
Record the final residual size, the function and why no further pure move
can bring the file within400. For this parser case, record
`RESOLVABLE_AFTER(design:L1-parse-request-extraction)` in the next021 revision.
Every later case needs its own final-state evidence. RESIDUAL-ACCOUNTING-01
keeps such files outside the resolved count.

## INTERMEDIATE-RESIDUAL-01 — over-400 residuals inside a multi-part file

Expand Down Expand Up @@ -203,3 +212,23 @@ state, while preserving output and failures inside the receipt command.
No local Bun test command is allowed. Older shared-checkout recipes must not
be reused; each current plan must supply its isolated verifier. Availability
and success require real execution evidence.

## USER-ADMIN-LANDING-01 — current delivery authority

The user's later direct instruction requires every merge to use admin after
CI passes. This supersedes earlier no-merge and open-PR-only delivery language
in000, individual decade plans and the original goal wording. It does not
waive verification or authorize direct pushes, releases or service changes.

Before each landing, verify the exact PR head and tested integration tree,
fresh passing required CI, and resolution of valid review blockers. Use admin
merge with an explicit expected-head match. Preserve stacked children before
automatic parent-branch deletion; recheck their base/head/diff after retarget.
Fetch dev and prove the merge is its ancestor. Record these results per layer.
Existing open criterion c-4 was amended to this requirement with its original
definition preserved in the steering ledger; no criterion was marked met.

The coordinator still schedules one non-Windows CI at a time. Retargeting and
merging may start new CI, so those actions consume the assigned slot too.
Windows-owner work remains excluded. Each peer retains its task scope; the
admin instruction removes redundant permission questions, not failure gates.
Loading
Loading