Skip to content

orchestrate run prd352-20260803-015333 — the slice-executor delegation layer (PRD #352) - #381

Open
rodrigorjsf wants to merge 18 commits into
developmentfrom
orchestrate/umbrella-prd352-20260803-015333
Open

rodrigorjsf wants to merge 18 commits into
developmentfrom
orchestrate/umbrella-prd352-20260803-015333

Conversation

@rodrigorjsf

Copy link
Copy Markdown
Owner

Autonomous orchestrate run of PRD #352, ADR-0017's slice-executor delegation layer. 12 of 12 slices passed, none failed, none skipped. 49 files, +7931/−1008, across six dependency waves.

Left unmerged for review. Ships orchestrate 1.7.0.

What changed

The orchestrator no longer runs slices — it delegates them. Its per-slice section is five steps: create the worktree, freeze routing, spawn orchestrate:slice-executor-<variant> with a briefing, validate the returned envelope, act on it. Investigation, implementation, the continue-in-place loop, review, the changeset check and the capability gate all moved into a skill the executor preloads.

Wave Slice PR
0 #353 run-discovery extracted from the watchdog #366
0 #354 slice-executor envelope role + failure classes #367
0 #355 slice progress record + recover_slice_progress #368
0 #356 routing entry for the executor #369
0 #364 complete a partial .orchestrate/ config #370
1 #358 spawn-budget awareness in the watchdog #371
1 #359 the slice-pipeline skill #372
1 #365 pre-flight capability probe #373
2 #360 the two slice-executor definitions + variant parity test #376
3 #361 read guard hook + hook-matcher consistency test #377
4 #362 orchestrator spine restructure — the keystone #379
5 #363 release closure — version cascade and README #380

Premises the run falsified

Four acceptance criteria rested on claims that turned out to be wrong. Each was corrected rather than implemented as written:

Defects found by review that the implementation would have shipped

Verification

Every slice passed an orchestrator-run capability gate independent of the reviewer's self-report. The suite went 698 → 808 tests; the single failure throughout is one known pre-existing baseline (resolveMergeConflict RE-ENTRANCY), confirmed by knownFailureMatches on every run. dist/ is committed and CI's bundle check gated the three slices that touched source.

#361 was proven red from both directions — a permissive stub turned all 29 deny cases red, and a deliberately over-broad implementation turned all 27 allow cases red together. A one-sided proof would have accepted a guard that blocks everything.

Known limitations, filed rather than hidden

Closes #353
Closes #354
Closes #355
Closes #356
Closes #358
Closes #359
Closes #360
Closes #361
Closes #362
Closes #363
Closes #364
Closes #365

The parallel path told the orchestrator to batch spawns 'when several in-flight
slices are at the same subagent stage'. Under delegation it spawns one executor
per slice and has no visibility into the stages, so that trigger can never be
evaluated by the party the instruction addresses — and no file said to batch the
executors themselves. Either the wave silently ran one slice at a time while
reporting itself parallel, making the wave-width machinery unreachable, or a
literal reading had the orchestrator spawning workers itself and breaking the
trust chain.

Claude-Session: https://claude.ai/code/session_01Njmfu7hqbFqzQFRPgQuEZz
…r spawned

The tool description still read 'schema groundwork only — no slice-executor
subagent is spawned yet', true when the routing entry landed and false from the
definitions onward. MCP tool descriptions are injected into the orchestrator's
context every run, so this was a live contradiction of the spine carrying the
authority of the tool's own schema.

Claude-Session: https://claude.ai/code/session_01Njmfu7hqbFqzQFRPgQuEZz
The glossary still attributed the continue-in-place loop, the changeset scope
check and the worktree fallback to the orchestrator, each contradicted by files
in the same change. It also claimed the continuation counter and fingerprint are
never persisted, which the slice progress record makes required fields.

Claude-Session: https://claude.ai/code/session_01Njmfu7hqbFqzQFRPgQuEZz
…trator writes

The sentence said 'only ever writes the last three' and then enumerated the
first three. A literal reading writes a subState the spine forbids mid-slice.

Claude-Session: https://claude.ai/code/session_01Njmfu7hqbFqzQFRPgQuEZz
Both suites compared the frontmatter fence with an exact === '---'. Under
core.autocrlf=true the checkout is CRLF though the blobs are LF, so every
definition was unparseable: four tests failed and the shipped-name set went
empty, leaving the matcher-consistency checks comparing against nothing and
passing vacuously. That is the silently-never-fires guard this suite exists to
prevent, so the empty set now throws.

Claude-Session: https://claude.ai/code/session_01Njmfu7hqbFqzQFRPgQuEZz
The tree comment named only the PostToolUse watchdog. The plugin ships three
hook events — SessionStart, the PreToolUse read guard, and PostToolUse. The
release cascade updated the two lines directly beneath this one and missed it.

Claude-Session: https://claude.ai/code/session_01Njmfu7hqbFqzQFRPgQuEZz
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment