Conversation
afogel
force-pushed
the
slice/v10
branch
2 times, most recently
from
August 21, 2026 12:14
a638666 to
69a866b
Compare
The collision here is not a word, it is a subject, and it is the one this
slice is most able to overclaim. AGT's content_hash gate is about a TOOL;
ACS v0.1.0 puts the integrity digest on a SKILL. The AgBOM makes that split
deliberate rather than incidental -- skill_fields.definition is required to
carry {ref, digest} and is called "the surface attackers poison", while
tool_fields requires only capability.
So commitment 1 is the published claim itself: AGT's unforked rule decides an
ACS-native subject, never "ACS carries AGT's tool hash". The demo is more
interesting because the subjects differ, not less.
Also records the limit before anyone can discover it in a demo: the approved
digest is manifest-static and cannot be otherwise from this side.
content_hash.rego reads input.tool.content_hash and nowhere else, the SDK
resolves that from the manifest catalog, and there is no destination_paths
counterpart. A digest approved at steps/skillRegister cannot reach the gate
through session state.
Claude-Session: https://claude.ai/code/session_019qZbQWyJHrYG7UodpyKjYr
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.
Closes #29
Stacked on
slice/v9. Review the diff against that base, notmain. Slice 10 of 10.What this slice is for
Drive an AGT stock gate from an ACS hook no AGT host package implements. This is R8.3 answered by building it rather than by showing a surface exists, and it is the first place the headroom argument is run.
What a reviewer is looking at
Planning only:
slices/v10/README.md's frozen subject. No V10 implementation yet. The shaping and breadboard for both slices land in #30, which this is stacked on.Why it is reachable — two measured facts, neither obvious from reading AGT
$defs/toolisadditionalProperties: true, so a manifest tool entry may declare acontent_hash— legal rather than merely tolerated. And the SDK carries it through. Reading AGT's ownpolicyInputback out of the bridge's evidence path:{"content_hash":"sha-256:APPROVED","id":"code-reviewer","type":"Tool","name":"code-reviewer"}With
config.content_hash.enforce: trueand the observed hash atsnapshot.tool_call.content_hash, all three stock behaviours fire:allowdenytool_content_hash_mismatch— "declared sha-256:APPROVED but observed sha-256:POISONED"denytool_content_hash_mismatch— "manifest declared tool.content_hash but snapshot.tool_call.content_hash was missing"The gate needs one thing from this side: a
snapshot.tool_call.content_hash. ACS supplies it atsteps/skillLoad.Two documents, written independently about the same threat
hooks/skill-load.jsonrequiresdigest {algorithm, value}and says the Guardian compares it against the digest approved atsteps/skillRegister, and that a load whose digest differs "is unverifiable and SHOULD be denied." That is, clause for clause, whatcontent_hash.regodecides. Neither cites the other.The claim, stated precisely — this is what
slices/v10/README.mdfreezesAGT's gate is about a tool. ACS v0.1.0 puts the integrity digest on a skill, and the AgBOM makes that split deliberate rather than incidental:
skill_fields.definitionis required to carry{ref, digest}and is described as "the surface attackers poison", whiletool_fieldsrequires onlycapability.Same control, different component class. The published claim is "AGT's unforked rule decides an ACS-native subject" — never "ACS carries AGT's tool hash". The demo is more interesting because the subjects differ, not less.
The limit, recorded before anyone can find it in a demo
The approved digest is manifest-static, and cannot be otherwise from this side.
content_hash.regoreads the declared hash frominput.tool.content_hashand nowhere else; the SDK resolvesinput.toolfrom the manifest catalog; there is nodestination_pathscounterpart and annotations are not consulted. A digest a Guardian approved atsteps/skillRegistercannot reach this gate through session state.This slice declares it in the manifest and says so. The
(skill_id, digest)binding ACS specifies is a Guardian-side control AGT has no part in, and V10 does not build it. Closing it the other way would mean AGT accepting a declared hash from the snapshot, which weakens AGT's own trust model — an upstream conversation, not a slice.Depends on V9
A skill-load snapshot has no
commandargument, so under the pre-V9 manifest it hitsruntime_error:path_missingbeforecontent_hashis consulted. The normalised policy-target leaf is the dependency, not the egress gate.Closes D3 and R5.4
Three
steps/*hooks of nineteen:steps/toolCallRequest,steps/toolCallResult,steps/skillLoad. Both counts in circulation are right for different sets — 22 is every hook payload schema, 19 is thesteps/*subset R5.4 asks about.Slice notes:
slices/v10/README.md.https://claude.ai/code/session_019qZbQWyJHrYG7UodpyKjYr