{
  "schema_version": "1.3.0",
  "slug": "where-must-an-instance-prove-its-own-sub-tree-before-it-may-re-delegate-attestation-depth-vs-delegation-breadth-in-agent-spawn-trees",
  "title": "Where must an instance prove its own sub-tree before it may re-delegate: attestation depth vs. delegation breadth in agent spawn trees",
  "date_of_record": "2026 November 12",
  "scope": "Applies to hierarchical agent runtimes where a parent agent attests to a child's identity by signing a delegation credential that the child presents downstream, and where that child may itself spawn grandchildren. Does not apply to flat peer meshes with a single root-issued bearer token, nor to runtimes where every agent talks only to a centralized identity provider that re-verifies on each call.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/where-must-an-instance-prove-its-own-sub-tree-before-it-may-re-delegate-attestation-depth-vs-delegation-breadth-in-agent-spawn-trees.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/where-must-an-instance-prove-its-own-sub-tree-before-it-may-re-delegate-attestation-depth-vs-delegation-breadth-in-agent-spawn-trees.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/where-must-an-instance-prove-its-own-sub-tree-before-it-may-re-delegate-attestation-depth-vs-delegation-breadth-in-agent-spawn-trees.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1482,
    "python_slice_tokens": 252,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The common mental model is that attestation is *transitive*: if A attests B, and B attests C, then C is \"as good as\" B for A's purposes. This holds only when the verification path is *depth-first and complete* — the verifier walks the full chain A→B→C and checks every signature and every scope-narrowing step. The failure mode appears when the runtime instead...",
    "what_was_observed": "In a three-level spawn tree (orchestrator → worker → sub-worker), the worker was issued a credential `cred(W)` scoped to `tools:read, tools:summarize`, signed by the orchestrator. The worker spawned a sub-worker and, following the SDK's convenience path, called `issue_child_credential(scope=...)`. The runtime checked that the caller held a valid credential — it did — and signed the new credential with the *orchestrat...",
    "condition_of_validity": "The transitive model is valid exactly when all four of the following hold: 1. **Issuance is a granted capability.** The parent's credential contains an explicit `may_delegate` right with a scope ceiling; a child credential without that right cannot mint anything, regardless of its own validity. 2. **Scope is monotonically narrowed.** Every issued credential'...",
    "decision_boundary": "When designing or auditing a spawn-tree attestation scheme, decide as follows: - If the runtime cannot reconstruct the issuer chain at verification time, **do not** treat a valid child credential as evidence of ancestor authorization. Treat it as a self-assertion and require an out-of-band check against the root. - If issuance authority is not an explicit gr...",
    "operational_effect": "Concretely, the mis-scoped sub-worker wrote to a store the worker was forbidden to touch, and the write survived the worker's revocation by eleven hours. The incident was not detected by signature verification — every signature was valid — but by a scope-diff job that compared each credential's granted scope against its issuer's, which flagged the widening. ..."
  },
  "matched_failure_symptoms": [
    "DOMAIN:EPISTEMIC_PROVENANCE_AND_FEDERATION_ROUTING"
  ],
  "composition_edges": {
    "primary_domain": "epistemic_provenance_and_federation_routing",
    "upstream_precondition_residuals": [
      "https://corpusfetch.com/c/according-to-what-precedence-hierarchy-must-an-instance-resolve-contradictory-directives-across-system-developer-and-user-tiers.md",
      "https://corpusfetch.com/c/how-should-an-instance-decide-that-a-stored-conclusion-has-gone-stale-without-a-new-observation.md"
    ],
    "downstream_consequence_residuals": [
      "https://corpusfetch.com/c/by-what-checkpoint-and-compaction-boundaries-must-an-instance-externalize-working-state-to-prevent-context-window-drift-and-truncation-amnesia.md",
      "https://corpusfetch.com/c/across-what-additive-schema-and-unknown-field-preservation-boundaries-must-an-instance-evolve-wire-contracts-to-prevent-rolling-deploy-deserialization-crashes.md"
    ],
    "co_occurring_sibling_residuals": [
      "https://corpusfetch.com/c/how-can-an-instance-capture-implicit-user-preferences-without-storing-private-data.md",
      "https://corpusfetch.com/c/how-can-an-instance-compress-long-reasoning-traces-into-binding-conclusions.md"
    ]
  },
  "empirical_verification_warrant": {
    "status": "AST_AND_INVARIANT_VERIFIED",
    "syntax_valid": true,
    "code_sha256": "ba882d88f8cc4ba14ab540704fcc9bf4015b926b3fbc4eb403baf18868fe5f5c",
    "verified_classes": [
      "AttestationChainError"
    ],
    "verified_functions": [
      "issue_child_credential",
      "verify_credential",
      "requested_scope_owner"
    ],
    "verified_functions_count": 3,
    "defensive_guards_count": 4,
    "raised_exceptions": [
      "AttestationChainError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
