{
  "schema": "project-telos.admission-telemetry/v1",
  "purpose": "Keep action-boundary admission decisions observable without collapsing them into verification verdicts or leaking raw evidence.",
  "decision_outcomes": [
    "allow",
    "block",
    "escalate",
    "require_review"
  ],
  "verification_verdicts": [
    "match",
    "drift",
    "unverifiable"
  ],
  "criterion_sources": [
    "policy",
    "rule",
    "eval",
    "reviewer",
    "budget",
    "external_verifier"
  ],
  "failure_codes": [
    "binding_failed",
    "unjoinable_action",
    "verification_unverifiable",
    "stale_criterion",
    "policy_denied"
  ],
  "required_fields": [
    "decision.outcome",
    "verification.verdict",
    "expected_failure_code",
    "proposed.action_intent_id",
    "proposed.args_hash",
    "proposed.criterion_ref",
    "admission.action_intent_id",
    "admission.args_hash",
    "admission.criterion_ref",
    "execution.action_intent_id",
    "execution.result_ref_or_hash",
    "criterion.source",
    "criterion.id",
    "evidence.reference",
    "evidence.hash",
    "evaluated_at",
    "action.identity.action_id",
    "action.identity.span_id",
    "action.identity.tool_name"
  ],
  "privacy": {
    "raw_prompt_allowed": false,
    "raw_tool_args_allowed": false,
    "raw_evidence_allowed": false,
    "allowed_evidence_forms": [
      "sha256",
      "redacted_reference",
      "receipt_id",
      "verifier_artifact_uri"
    ]
  },
  "conformance_fixture": {
    "join_field": "action_intent_id",
    "privacy_prohibited_fields": [
      "raw_prompt",
      "raw_tool_args",
      "raw_evidence",
      "verifier_internals",
      "raw_result"
    ],
    "happy_path": {
      "name": "joined_allow",
      "expected_failure_code": null,
      "resolved_criterion": {
        "criterion_ref": "policy:tool-args-envelope-v1",
        "source": "policy",
        "evaluated": true
      },
      "records": {
        "proposed_action": {
          "action_intent_id": "intent_42",
          "action_kind": "tool_call",
          "tool_name": "gather.docs",
          "args_hash": "sha256:args-42",
          "criterion_ref": "policy:tool-args-envelope-v1"
        },
        "admission_record": {
          "action_intent_id": "intent_42",
          "decision_outcome": "allow",
          "verification_verdict": "match",
          "args_hash": "sha256:args-42",
          "criterion_ref": "policy:tool-args-envelope-v1",
          "evidence_ref": "receipt:tool-call-42",
          "evaluated_at": "2026-06-27T00:00:00Z"
        },
        "execution_span": {
          "action_intent_id": "intent_42",
          "execution_result": "completed",
          "result_hash": "sha256:result-42"
        }
      },
      "expected": {
        "joins_on_action_intent_id": true,
        "admission_args_hash_matches_proposed": true,
        "criterion_ref_resolves_to_evaluated_criterion": true,
        "result_reference_present_without_raw_result": true
      }
    }
  },
  "negative_test_cases": [
    {
      "name": "changed_args_hash",
      "expected_failure_code": "binding_failed",
      "decision": "require_review",
      "verification": "drift",
      "reason": "The action identity joined, but admission.args_hash did not match proposed.args_hash.",
      "mutated_field": "admission.args_hash"
    },
    {
      "name": "missing_action_intent_id",
      "expected_failure_code": "unjoinable_action",
      "decision": "block",
      "verification": "unverifiable",
      "reason": "The admission or execution record lacks the join field, so the proposed action cannot be followed across records.",
      "mutated_field": "action_intent_id"
    },
    {
      "name": "missing_verifier_result",
      "expected_failure_code": "verification_unverifiable",
      "decision": "require_review",
      "verification": "unverifiable",
      "reason": "The verifier did not produce a recomputable result for the joined action.",
      "mutated_field": "admission.verifier_result_ref"
    },
    {
      "name": "stale_or_unresolved_criterion_ref",
      "expected_failure_code": "stale_criterion",
      "decision": "escalate",
      "verification": "unverifiable",
      "reason": "criterion_ref is stale or does not resolve to the criterion actually evaluated.",
      "mutated_field": "criterion_ref"
    },
    {
      "name": "evaluated_policy_denial",
      "expected_failure_code": "policy_denied",
      "decision": "block",
      "verification": "match",
      "reason": "The policy criterion joined to the same proposed action and evaluated to denial.",
      "mutated_field": "criterion.result",
      "requires": {
        "joined_action_intent_id": true,
        "criterion_evaluated_against_proposed_action": true
      }
    }
  ],
  "examples": [
    {
      "name": "matched_allow",
      "decision": {
        "outcome": "allow"
      },
      "verification": {
        "verdict": "match"
      },
      "criterion": {
        "source": "policy",
        "id": "tool-args-envelope-v1"
      },
      "evidence": {
        "reference": "receipt:tool-call-42",
        "hash": "sha256:example-redacted"
      },
      "evaluated_at": "2026-06-27T00:00:00Z",
      "action": {
        "identity": {
          "action_id": "act_42",
          "span_id": "span_42",
          "tool_name": "gather.docs"
        }
      }
    },
    {
      "name": "unverifiable_requires_review",
      "decision": {
        "outcome": "require_review"
      },
      "verification": {
        "verdict": "unverifiable"
      },
      "criterion": {
        "source": "external_verifier",
        "id": "missing-recheck-result"
      },
      "evidence": {
        "reference": "redacted:missing",
        "hash": ""
      },
      "evaluated_at": "2026-06-27T00:00:00Z",
      "action": {
        "identity": {
          "action_id": "act_unknown",
          "span_id": "",
          "tool_name": "crucible.assess"
        }
      }
    }
  ]
}
