Repository navigation
Fleet root is never delivered the verify step digest and exhausts its context #5273
Description
Fix target and integration order — mandatory routing
Repository: TalonT-Org/AutoSkillit.
Fix PR base branch: develop, currently 381afb4e59cc23acf4ca9ace7a7644b75e6e7b14.
Scope: recipe-execution attestation and delivery of per-step invocation digests to a fleet root. This is product runtime; the files exist on develop.
Open the remediation PR against develop. Once merged, the owner of parent PR #5255 integrates the develop commit and reruns commissioning.
Defect
A fleet root running the implementation recipe reached the verify step without the invocation_template_digest that run_skill requires for it. No tool response in the whole run delivered that digest. The rejection told the root to read a map that was empty for that step. The root then spent its context searching: it pulled the whole recipe, guessed digests, and looped until it hit the output cap. That is what drove it to automatic compaction, which produced the failures tracked in #5271 and #5272.
Owner priority: a fleet root should not come near its context limit in a normal run.
Evidence
Run 38431354139, attempt 1 at 93457f16ecc30249799c02084c20f41d9cd88455, Claude Code 2.1.280, model MiniMax-M3. Artifact e2e-implementation-38431354139-1. Record numbers refer to the root transcript out/transcripts/-workspace-sandbox/123756d6-70db-4319-a2a1-226e765d3d30.jsonl.
What the gate asked for. Record 155, the first verify rejection:
RECIPE EXECUTION REJECTED [recipe_execution_attestation_missing]: an active recipe requires recipe_execution_id and invocation_template_digest; take both from the recipe_execution block of the complete_recipe_initialization receipt (bounded delivery) or of the open_kitchen response (inline delivery), using invocation_template_digests[step_name] for this step
What was delivered. Every product tool response in the run that carries an invocation_template_digests map (run_cmd output where the root printed files itself is excluded):
| Record | Tool (step_name sent) | Step digests delivered |
|---|---|---|
| 15 | open_kitchen |
none |
| 23 | complete_recipe_initialization |
none |
| 28 | bootstrap_clone (clone) |
plan |
| 35 | claim_and_resolve_issue (claim_and_resolve) |
none |
| 57 | run_skill (plan) |
none |
| 67, 103 | complete_run_skill_result |
none |
| 79 | run_python (check_replan_iteration) |
none |
| 155 | run_skill (verify) |
none |
| 807, 1003, 1301 | complete_run_skill_result |
none |
| 1017 | merge_worktree (merge) |
none |
| 1326 | wait_for_ci (ci_watch) |
none |
plan is the only step digest any response delivered.
What the root did.
verifyattempts before compaction: record 154 with no digest (rejected,recipe_execution_attestation_missing); record 171 with a guessed digest and record 284 withsha256:0000…(both rejected,invocation_template_digest_mismatch).- 15
get_recipe_sectioncalls between records 128 and 365, requestingverify,verify_segment,orchestration_rules,content,plan,flow,verify_invocation_template,flow_content,verify_template_digest,invocation_templates,verify_flow_record,verify_digest,section_registryandregistry. Thecontentcall at record 148 returned 116,994 characters. - Context size (input plus cache-read tokens): 36,526 at record 13; 53,797 at record 112; 93,559 at record 164; 130,482 at record 376.
- Record 376 is one thinking block of 261,571 characters, 64,000 output tokens,
stop_reason: "max_tokens", about finding that digest. It took the context to 194,567. - Record 382: automatic compaction.
- The digest that finally worked first appears at record 758. The root read it from the recipe-delivery artifact on disk (
.autoskillit/temp/recipe-delivery/…/open_kitchen/implementation/descriptor-2-schema-2/…) throughrun_cmd.verifythen succeeded at record 796, after two further rejections (recipe_execution_static_tool_mismatch).
step_name usage before compaction. Sent on bootstrap_clone, claim_and_resolve_issue, create_and_publish_branch, run_skill and bind_plan_set. Not sent on complete_recipe_initialization, complete_run_skill_result or record_pipeline_step.
Prior occurrence
#4411 (closed 2026-07-31) reported the same shape on the bounded-initialization path: the attestation values were never returned to the orchestrator, it started guessing, and the values survived only in the spilled payload on disk. In this run the first step's digest (plan) was delivered and the next skill step's (verify) was not.
verify does not use dispatch_items, so this is not #4775.
Not established
- Whether the product is meant to deliver each next step's digest in a tool response and did not, or whether the root omitted a call or argument that would have triggered delivery. The PR Add seeded sandbox implementation E2E validation #5255 text attributes missing digests to the model omitting
step_name. This ticket checked what was delivered, not the delivery code. - This is one run, on MiniMax-M3.
Required behaviour
- A root that follows the recipe can obtain every step's digest from the tool responses it is told to read, without pulling the whole recipe into context or reading delivery artifacts from disk.
- A rejection for a missing or wrong digest names the one action that yields the right digest for that step.
- Add a regression covering the
plantobind_plan_settoverifytransition under attestation. Runpre-commit run --all-filesand the configuredtask test-local-gate.
Coordination
This is upstream of #5271 and #5272 in the same run and independent of #5270. It can be worked in parallel with all three.
Activity