Repository navigation
Conversation
subagent_intent is now required, with parsed and parser_provenance. derived_from_parent requires parent_intent_id and a provenance that cites something, and the rule compares provenance_ids with provenance_ids instead of a step_id. fresh requires a user_input intent. The capability ceiling, the child session id rule and the parent's provenance and label propagation are stated as Guardian MUST rules in the schema and in hooks.md, with an optional parent_provenance_summary to carry the summary. Schema tests cover each accepted and refused spawn. Closes GenAI-Security-Project#474 Signed-off-by: Raghuvar Karthik Durga <177662415+drk-ram@users.noreply.github.com>
drk-ram
requested review from
GangGreenTemperTatum,
Lrd0036,
afogel,
almogbhl,
artmaro,
bar-capsule,
fewdisc,
mamicidal,
rocklambros,
sclintonowasp and
stefanoamorelli
as code owners
November 4, 2026 20:25
|
Thanks for this. It is queued rather than ignored. A lead has not reviewed this pull request yet. A lead will read it when they have time, and we can't promise a date. Nothing here is rejected. If a check below fails, please fix it. A pull request that waits a long time may be closed, and you can reopen it later. |
This branch has not been deployed
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.
What changed
steps/subagentStartnow accepts only spawns a Guardian can check, and the specification states the rules a second Guardian would implement from.subagent_intentis required on every spawn, withparsedandparser_provenance.derived_from_parentrequires a newparent_intent_idand aparser_provenance.derived_fromthat cites something. The rule now comparesprovenance_idwithprovenance_id:parent_intent_idis theprovenance_idof the parent's Intent, where the old text askedderived_fromto hold the parent'sstep_id, a different identifier space.parent_step_idstays for the audit trail.freshrequiresparser_provenance.originto beuser_input, which is the evidence the old prose said the payload had no member for.subagent_intent.parsedequals the parent's forinherit_full, is a subset forinherit_subset, and is a subset forderived_from_parentunless Guardian policy admits more. The Guardian compares against theIntent.parsedit holds forparent_session_id, never one the payload supplies.subagent_session_idMUST differ fromparent_session_id, from the envelope'smetadata.session_id, and from any session the Guardian tracks. JSON Schema cannot compare two members, so this is a Guardian MUST in the schema text and inhooks.md, and the test pins the wording.inherit_full,inherit_subsetandderived_from_parent, SHOULD forfresh). An optionalparent_provenance_summary(provenance-summary.json) carries the summary, as a floor the Guardian never seeds below.Files:
specification/v0.1.0/hooks/subagent-start.json,docs/spec/instrument/hooks.md,docs/concepts/session-lifecycle.md,tests/test_subagent_start_schema.py.Which issue does this implement
Closes #474
meaning, so it needs no issue
Base branch
integration, because this touches the specification, schemas, a referenceimplementation, an adapter, tests, or CI
main, because every changed path is on the documentation lane allowlist inCONTRIBUTING.md
Type of change
Specification changes
Breaking for implementers? Yes, for a sender of
steps/subagentStart. A spawn with nosubagent_intent, with an intent lackingparsedorparser_provenance, aderived_from_parentwith noparent_intent_idor an emptyderived_from, or afreshintent whose origin is notuser_inputno longer validates. Aninherit_fullsender now restates the parent'sparsed. The reference Guardian does not evaluatesteps/subagentStart(METHODS_EVALUATEDis the two tool-call methods), so nothing in the reference implementation changes.I tested this
bba1b84, the currentintegrationhead)uv run pytest -vpasses on my machine (run aspython -m pytest, see below)uv run mkdocs build --strictpasses on my machine (run aspython -m mkdocs build --strict)Results, Windows x64, Python 3.11:
python -m pytest -k subagent: 26 passed. Against the unchanged schema fromorigin/integration, the same file is 16 failed, 10 passed, so the tests fail before the fix and pass after it.python -m pytest --ignore=tests/test_closing_choice.py: 1160 passed, 11 failed. The same 11 fail onorigin/integrationwithout this change (Windows path, symlink and CRLF-patch cases intest_fetch_roadmap,test_overrides,test_pr_intake_workflow,test_publish_schemas,test_site_config).test_closing_choice.pyaborts on Windows with an environment-variable length error before and after.python -m mkdocs build --strict: built, no warnings or errors from the project.Checklist
git commit -s(required by the DCO)Security
This closes a delegation-boundary gap (ASI03): a spawn could widen a child's capabilities, alias the parent's session, or launder the parent's untrusted context. It does not describe an unreported vulnerability beyond what #474 states.