fix(delivery): deliver the harness files the dispatch ops apply - #362
Merged
Conversation
spawn-agent and continue-agent each Apply two techniques mid-Protocol: the kind-to-file map, then the resolved harness file's spawn/resume/concurrent Rules section. Neither reached the orchestrator. A technique named inside another technique's Protocol has no delivery path of its own — get_technique resolves only step-bound or first-declared techniques, and no tool loads a technique by id — so the bundle carried spawn-agent's body and the group rules, and nothing to apply at the step that dispatches. An orchestrator arriving there improvises the invocation. Observed on a live meta walk: the dispatch step guessed get_resource for harness-compat::claude-code, then for claude-code, took the two not-found errors, and hand-rolled the spawn from the group contract alone. The #272 host split created the gap. Before it, spawn-agent's Protocol branched inline on the harness kind, so the invocation prose arrived inside the op body the orchestrator already received. The split moved that prose into five files and left the ref list naming two. All four harness files ship rather than the one that applies. Nothing binds {harness_kind} server-side — no session field holds it and no step sets it — so the server cannot pick; the orchestrator selects its own through the map, which stays the single authoritative table. The five files total under 150 lines. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Problem
spawn-agentandcontinue-agenteach Apply two techniques mid-Protocol:Neither reached the orchestrator.
CORE_ORCHESTRATOR_TECHNIQUESnamedharness-compat::spawn-agentand::continue-agentonly, and a technique named inside another technique's Protocol has no delivery path of its own —get_techniqueresolves only step-bound or first-declared techniques, and no tool loads a technique by id. Resolving the list directly returns spawn-agent's body plus the four group rules, and nothing to apply at the step that dispatches.An orchestrator arriving there improvises. Observed on a live
metawalk: the dispatch step guessedget_resourceforharness-compat::claude-code, then forclaude-code, took bothResource not founderrors, and hand-rolled the spawn from the group contract alone.Root cause
The #272 host split. Before it,
spawn-agentv1.0.0 branched inline:harness-compat::spawn-agentwas already in the ref list, so the invocation prose arrived inside the op body the orchestrator already received. The split moved that prose into five files and left the ref list naming two. The existing comment on those two entries — "so the orchestrator must receive the harness-specific prose … instead of improvising / inlining" — states the intent the list stopped satisfying.Change
Five refs added:
resolve-harness-operationplus all four harness files.All four ship rather than the one that applies, because nothing binds
{harness_kind}server-side — no session field holds it, no step sets it, and it appears nowhere insrc/. The server cannot pick, so the orchestrator selects its own through the map, which stays the single authoritative table. The five files total under 150 lines.Verification
npm run check:all— 18/18 guards passsession-cryptoEACCES failure is a bubblewrap artifact and passes unsandboxed)Follow-ups
workflow/harness-invoke-surfacecorrects the staleTask/run_in_backgroundprose these entries now deliver.chore(corpus)pointer bump after that merges.{harness_kind}from the MCPinitializehandshake'sclientInfoso only the matching harness file ships. Would let the resolve map do the work it was designed for.🤖 Generated with Claude Code