orchestrate run prd352-20260803-015333 — the slice-executor delegation layer (PRD #352) - #381
Open
rodrigorjsf wants to merge 18 commits into
Open
rodrigorjsf wants to merge 18 commits into
rodrigorjsf wants to merge 18 commits into
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.recover_slice_progress.orchestrate/configslice-pipelineskillPremises the run falsified
Four acceptance criteria rested on claims that turned out to be wrong. Each was corrected rather than implemented as written:
bootstrapConfig()was already idempotent; the defect was that its trigger gated on.orchestrate/being wholly absent.SubagentStart/SubagentStopmatch on agent type, and this slice adds aPreToolUse, which matches on tool name. Inventing a matcher to have something to test would have been an unrequested hook. It shipped as a general invariant overhooks.jsonwhose load-bearing layer is the bare-name trap.SKILL.mdcap'spaths:covers only two other plugins — corroborated behaviourally, since the same rule mandates semantic tags neither orchestrate skill has, so if it reached them both would be in permanent hard-fail. The cap binds by self-declaration; the spine's own claim to be "within" it was false at 501 lines.resolveRunDiralready provides for free; the real hazard was intra-run, so the filename had to carry the issue number.Defects found by review that the implementation would have shipped
skills:by nothing, so a misspelled skill name in the deep variant passed 27/27 green — precisely the silent-preload failure the slice exists to prevent.routing.jsonexample dropped a required tier with a note implying it was inferable. Anyone copying it would have produced a config that fails validation.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 (
resolveMergeConflictRE-ENTRANCY), confirmed byknownFailureMatcheson 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
cwd, which a slice worktree cannot satisfy, so nested executor spawns may go uncounted. Becomes live now that the executor actually spawns workers.skills:preload for a plugin subagent is unverified. A probe series could not confirm it fires; the plugin-subagent path could not be tested in-session because plugin definitions register only at startup. orchestrate: slice-executor agent definitions (standard and deep) with variant parity test #360 ships a body guard that turns a silent miss into ablockedenvelope. First real run of this layer verifies it.remainingWork, so a resumed executor loses the continuation handoff note. Deliberate closed set; filed so the decision is explicit.Closes #353
Closes #354
Closes #355
Closes #356
Closes #358
Closes #359
Closes #360
Closes #361
Closes #362
Closes #363
Closes #364
Closes #365