Repository navigation
Define and validate immutable tool-call progression - #8
Merged
Merged
Conversation
This was referenced Oct 5, 2026
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.
A capture can now record partial tool arguments and a later capture can complete them without changing the original event or inventing a second invocation. Previously both validators rejected the second event as a duplicate call identity.
Closes #1.
Normative proposal / RFC
Use the existing event
supersedesfield for incomplete-call amendments. Preserve call, tool, actor, execution, and retry identities; retain the earlier event and its stream unchanged. Unknown/partial argument knowledge may advance, but completed calls cannot be amended through this mechanism. A retry requires a new call ID.Selected histories fold one explicit amendment chain in branch order. Conflicting successors can live on separate branches; selecting both is invalid. A late amendment retains previously recorded decisions/results and never reopens a terminal invocation. Contexts select one typed call input per invocation.
An amendment requires its predecessor event locally so both validators can verify its identity fields. An external descriptor cannot substitute for that envelope. Unchanged external invocations can still receive late results through existing bindings.
Implementation and evidence
Alternatives and compatibility
Mutating the original call would violate immutable evidence. Allocating another invocation ID for argument completion would confuse completion with retry. External-only supersession lacks enough identity information to validate the relationship, so this proposal requires materializing the authentic predecessor instead.
No JSON fields, schema shape, or version identifiers change: these are inter-event semantic rules beyond JSON Schema. Existing ordinary single-event calls keep their representation. Older reference validators reject amended captures; implementations claiming the updated draft semantics need the new checks. Complete-call factual corrections are outside this incomplete-argument progression mechanism.
No new fetching, execution, credential transfer, or authorization behavior is introduced. Examples are synthetic and contain no private data; these checks provide no live-continuation or independent-interoperability evidence.
Validation
tests/check_schema.py: 27 checks passed.tests/check_examples.py: 10 examples and 5 negative checks passed.tests/check_continuation.py: 44 checks passed.tests/check_reference.py: 93 checks passed.npm run typecheckandnpm test: typecheck and 120 tests passed.tests/check_documentation.py: 124 objects, 136 object examples, and generated-document/link checks passed.mkdocs build --strictandgit diff --check: passed.