Repository navigation
0.35.0 — depends_on becomes batches
Two read-only MCP tools take the served surface 12 → 14.
| tool | input | answers |
|---|---|---|
work_plan |
any {id, depends_on, priority?} graph |
level-synchronous Kahn batches |
shiftwork_plan |
a checkpoint path | the same over its plan.units, honouring the done/dropped satisfied rule |
Batch k holds every node whose dependencies all appear in batches < k; inside a batch, priority descending then insertion order. Three refusals, worded identically on both sides: duplicate node id <id>, node <id> depends on <dep>, which no node declares, the graph has a cycle: <a> -> <b> -> <a>.
Nothing existing changes shape. Both tools are read-only. Cursor advance is still v1-linear, and clock_in / clock_out are byte-untouched — verified by grepping every added and removed diff line on both shiftwork modules for clock_/cursor/_advance: zero matches. Upgrading changes no behaviour you already depend on.
Why
Measured over this repo's own checkpoints: 215 units collapse to 119 batches — 96 serial steps (44.7%) were false serialization. Re-measured a day later at 21 graphs / 228 units / 126 batches, with 18 of the 19 original rows reproducing exactly.
The gate
A new conformance suite: 163 cases, 0 failures, 0 rulings — nothing here is supposed to differ between the runtimes, and nothing does.
86 of the 163 are per-side literals rather than cross-runtime comparisons, because a differential harness is structurally blind to a regression that lands in both implementations. That blind spot was demonstrated, not assumed — applying one symmetric mutation to both runtimes at once reddens 52 literals, exactly 26 per side, and not one differential case. A contrasting one-sided mutation reddens 35 including 13 differentials, and not one widths/ case, since reordering changes membership order but not batch sizes.
No new dependency
ex-flow was evaluated and rejected. runtime-ts still declares exactly one runtime dependency, @modelcontextprotocol/sdk@1.30.0.
Gates at this tag
run.mjs --all 8321 cases / 0 failures · --suite workplan 163 / 0 · ruff check runtime-py tools all checks passed · pytest 2909 passed (4 known worktree-only rig failures) · npm test 1065 tests / 1018 pass / 0 fail.
Known debt, recorded rather than hidden
- Layer 1 purity is asserted by no test in either runtime. The property holds today by inspection (
workplan.pyimports onlytyping.Any;workplan.tsimports nothing) and is written intodocs/architecture.mdas debt that explicitly nothing checks. docs/mcp.md's tool table has two stale and two missing rows that cancel out at 14-vs-14, so no count-based gate can see it. Nothing compares roster names.
Full changelog: v0.34.3...v0.35.0