commit 4eeeef86d12b58cf2e2acdbee6af033a2df362b2
parent 6d501f7683c3f272540505f907689e684b7e37cd
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Tue, 15 Sep 2026 15:00:42 -0400
plans: Phase 3 slice 1 sub-slices B and C shipped — every builder is a pure view
Records for b0a902e..eda6475 (jobs group) and 67c7f85..6d501f7 (console group),
with the merged-tip numbers. D (repoints, deletions, the full 533) is in flight.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
1 file changed, 57 insertions(+), 0 deletions(-)
diff --git a/plans/one-core-phase-3.md b/plans/one-core-phase-3.md
@@ -370,3 +370,60 @@ Seen once and not caused here: `controller/relocateChannelMedia.test.ts` "out @
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.
+
+### B — shipped 2026-09-14
+
+Branch `one-core/phase-3-s1b` off `8c43231`, rebased onto `bb52dbd` and fast-forwarded:
+`169874e` (workers) → `dfcb5f6` (activeJobs). Worktree and branch deleted.
+
+Gates (worktree #2): tsc clean after each commit; common **1239/1239** (+15: 5 workers, 10
+activeJobs); editor unit 59/59; editor `next build` clean; e2e subset of 13 specs (`jobs*`
+×6, `workers`, `worker-remote`, `worker-unit`, `dashboard`, `dashboard-paths`, `widget`)
+**68 passed, exit 0** in 4.3 min. Shells: `buildActiveJobs.ts` 461 → 120 (the 8 KB
+`readLastLogLine` tail lives there by design; the shell proper is ~45), `buildWorkers.ts`
+58 → 20. Views: `activeJobs.ts` 417 + 361 test, `workers.ts` 112 + 191 test.
+
+Divergences:
+
+1. **The injected readers are `channelStat` / `jobMeta`, not `readChannelStat` /
+ `readJobMeta`.** The plan named the fields with the `read` prefix AND put
+ `readChannelStat(` / `readJobMeta(` on the textual ban, which is context-blind, so
+ `i.readChannelStat(slug)` fails it. The fields were renamed; the guard was not loosened.
+2. Two comments reworded for the same ban (`Date.now()` and `getAutoRunnerStatus` mentions).
+3. `WorkersView.tsx` lives at `workers/components/WorkersView.tsx`; its now-unused
+ `WorkerRuntimeState` import was dropped.
+4. `stuckJobIds` in the shell samples the disk gate via the same input assembler as the
+ payload — as before, since it delegated to `buildActiveJobsPayload()`.
+
+### C — shipped 2026-09-14
+
+Branch `one-core/phase-3-s1c` off `8c43231`, rebased onto B's tip and fast-forwarded:
+`c30496d` (schedulerStatus) → `4931909` (lanes + channelPriority + status) → `2ff7d2c`
+(widgetSync + `widget/lib/syncInputs.ts`) → `5ddc158` (pulse). Worktree and branch deleted.
+
+Gates (worktree #3): tsc clean after each commit; common **1249/1249** on its own tip (+25:
+schedulerStatus 2, autoQueueLanes 6, autoQueueStatus 5, widgetSync 5, pulse 7); editor unit
+59/59; editor `next build` clean; e2e subset of 8 specs (`auto-queue`, `dashboard`,
+`dashboard-paths`, `lane-runner`, `operation-settings`, `pulse`, `scheduler`, `widget`)
+**82 passed, exit 0** in 2.9 min. `/api/pulse` rev bytes unchanged — the hashed parts, their
+order and the `|` join are the same; `pulse.test.ts` asserts the hashed STRING through an
+identity digest so a reorder names what moved. **`readAutoQueueState` is read once per
+poll, not four times.** Shells: `operations/lanes.ts` 131 → 11 (types only, D deletes it),
+`operations/status.ts` 179 → 72, `channelPriorityView.ts` 119 → 86, `scheduler/status.ts`
+53 → 32, `api/widget/sync/route.ts` 331 → 22, `api/pulse/route.ts` 161 → 52.
+
+Divergences:
+
+1. **`api/widget/sync/route.ts` kept one `export type { WidgetSyncPayload }`** until D: its
+ only importers are the five shared client files, which are D's to repoint.
+2. `operations/lanes.ts` re-exports three types, not one (`LaneWorker`, `LaneOperationView`,
+ `AutoQueueLanesPayload`) — a pure superset of the old surface.
+3. `now` is a number on `schedulerStatus` and `widgetSync` (one-shot folds; the plan's shells
+ pass `Date.now()`) and a function on `autoQueueStatus` (the plan's `Pick<LiveInputs, …
+ "now">`).
+4. `channelFocusName` stays in the editor with `readPriorityView`, its only caller.
+5. `operations/status.ts` is 72 rather than ~40 because of the `byLane` helper that folds the
+ four runner statuses and pending counts into the `Record<AutoQueueKind, …>` the view takes.
+
+**Merged tip `5ddc158`**: tsc clean; common **1264/1264**; editor unit 59/59. The two
+`"use client"` importers of a view (`components/pulse.ts`, `WorkersView.tsx`) are type-only.