commit dd464eb13679b9ee3a829af493003952776355aa
parent e731f8af332d4f39550f284c8f9e0ff60cbca048
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Mon, 14 Sep 2026 17:05:24 -0400
plans: Phase 3 slice 1 sub-slice A shipped — the view layer exists and the guard sees it
Record for b0cca40..e731f8a: allow-list 11 -> 10, six divergences, gate numbers.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
1 file changed, 45 insertions(+), 0 deletions(-)
diff --git a/plans/one-core-phase-3.md b/plans/one-core-phase-3.md
@@ -325,3 +325,48 @@ undone).
Filled in as sub-slices ship: sha range, actual gate numbers, every divergence from this
plan.
+
+### A — shipped 2026-09-14
+
+Branch `one-core/phase-3-s1a` off `1faa987`, four commits `91b06b3` → `8c43231`,
+fast-forwarded onto `main`; worktree and branch deleted. **Allow-list 11 → 10, nothing
+added. No rendering change, no route path moved.**
+
+| commit | what |
+|---|---|
+| `91b06b3` | the guard sees `views/`: `FORBIDDEN` rows, `ROOTS`, the `StreamActionLog` entry burned, `BARE_FORBIDDEN` + `bareEdges()`, the textual ban; `views/inputs.ts`, `views/streamAction.ts` (+ compile-time assignability test), `editor/app/lib/liveInputs.ts`; exports map and test globs; corpus-walk test widened |
+| `bc070b3` | `views/pipeline/{band,buildBands,stageStatus,channelFlow,tone}.ts` + 3 tests, imports rewritten relative, every importer repointed |
+| `44c65e9` | `views/{laneState,jobRowView,jobRows,channelGroupSections,builtInPresets}.ts` + 3 tests; `builtInPresets.test.ts` stays in the editor |
+| `8c43231` | review fix: the assignability assertion was a DISTRIBUTIVE conditional (`A extends B`), so a non-assignable union member collapsed to `true | never` = `true`; now `[A] extends [B]` |
+
+Gates (worktree #2): tsc clean after every commit; common **1224/1224** (1159 + 62 moved + 3
+new); editor unit **59/59**; editor and export `next build` clean; e2e subset of 16 specs
+(`channel-groups, channel-line, channels-counts, channel-stage-selection, channel-work,
+dashboard-paths, dashboard, jobs-active-order, jobs-batch-tasks-drain, jobs-channel,
+jobs-filters, jobs-reorder, jobs-retry, jobs, pipeline, widget`) **92 passed, exit 0** in
+4.6 min. `common/views/` holds 19 files, 4,420 lines (2,755 non-test, of which 2,662 moved).
+
+Divergences, each because the code said so:
+
+1. **The plan file is its own commit (`1faa987`) on `main`**, not part of A1, so every
+ worktree branches with it in-tree.
+2. **The pulse route's `declare global` block was deleted, not moved.**
+ `common/jobs/{registry,scheduler,workerPool}.ts` already declare the three globals; the
+ route's copy only existed to spell `ReturnType<typeof …>`. C4 finishes the route.
+3. **`liveInputs.ts` does not import `getChannelBriefs`.** `LiveInputs` has no briefs field;
+ shells that need briefs import `./requestCache` themselves (C's status shell and
+ `widget/lib/syncInputs.ts`).
+4. **`buildBands.test.ts`'s `StateBand.tsx` guard reads across the package boundary**
+ (`readFileSync` of `editor/app/components/pipelines/StateBand.tsx`, textual, not an
+ import). Kept: it is the check that catches a client module exporting a callable helper,
+ which `next build` does not.
+5. **A repointed three files the conflict table assigns to B/C** — `operations/lanes.ts`,
+ `buildActiveJobs.ts:27-39`, `operations/components/{OperationRail,OperationDetail,railStates}`
+ — one import line each; B and C fork from A's tip, so no conflict.
+6. `views/inputs.ts` comments reworded so no banned name appears with its parenthesis (the
+ plan's trap, hit as predicted).
+
+Seen once and not caused here: `controller/relocateChannelMedia.test.ts` "out @ swap: crash
+before the rename" failed on one run (`2 file(s) still differ (first: .d..t...... ./)`, an
+rsync directory-mtime race) and passed on the immediate re-run. A pre-existing flake; if it
+recurs it gets its own note in FACTS.