JSONSchema (Draft 2020-12) contracts for every structured artifact the plugin
produces or consumes. The schemas are the single source of truth for the
data contracts; scripts/validators/validate_intermediate.py loads them at runtime
and enforces runtime artifacts via jsonschema; plugin-shipped config/data
catalogs are checked by dedicated validators such as scripts/validators/validate_config.py.
The numbered Markdown API in .recon-summary.md is defined by
agents/shared/recon-output-template.md and validated by the producer and
controller through scripts/validators/validate_recon_summary.py. The ordered Markdown
API in .threat-modeling-context.md is defined by the legacy resolver's output
template, emitted deterministically on context-v2, and validated through
scripts/validators/validate_threat_modeling_context.py; neither contract is JSONSchema.
| Schema | Artifact | Written by | Read by |
|---|---|---|---|
agent-call-lifecycle.schema.json |
$OUTPUT_DIR/.active-tool-calls/agent-lifecycle.json |
scripts/runtime/agent_logger.py through scripts/runtime/agent_lifecycle.py |
lifecycle, budget, deterministic join, and progress telemetry |
agent-call-budget-state.schema.json |
$OUTPUT_DIR/.budget-state.json |
scripts/runtime/budget_watchdog.py |
call-scoped threshold emission and current-claim consumers |
agent-call-budget-marker.schema.json |
$OUTPUT_DIR/.budget-warning, $OUTPUT_DIR/.budget-critical |
scripts/runtime/budget_watchdog.py |
actionable call and controller-claim identity for transient budget signals |
stride-progress.schema.json |
$OUTPUT_DIR/.progress/<component-id>.json |
scripts/runtime/write_stride_progress.py |
current claim-bound STRIDE progress and status rendering |
stride.schema.yaml |
$OUTPUT_DIR/.stride-attempts/<component-id>.attempt-<n>.json, promoted to $OUTPUT_DIR/.stride-<component-id>.json |
appsec-stride-analyzer-v2 |
scripts/orchestrator/stride_dispatch_waves.py, then controller merge |
stride-evidence-bundle.schema.json |
$OUTPUT_DIR/.dispatch-context/<component-id>/evidence-bundle.json |
scripts/contexts/build_stride_evidence_bundles.py |
context-v2 manifest validator and STRIDE analyzer |
stride-component-business-context.schema.json |
$OUTPUT_DIR/.dispatch-context/<component-id>/business-context.json |
scripts/contexts/build_stride_evidence_bundles.py |
context-v2 manifest and context-plan validators and STRIDE analyzer when selected |
stride-component-architecture-context.schema.json |
$OUTPUT_DIR/.dispatch-context/<component-id>/architecture-context.json |
scripts/contexts/build_stride_evidence_bundles.py |
context-v2 manifest and context-plan validators and STRIDE analyzer when selected |
stride-component-security-context.schema.json |
$OUTPUT_DIR/.dispatch-context/<component-id>/*-context.json for controls, actors, boundaries, requirements, prior findings, and known threats |
scripts/contexts/build_stride_evidence_bundles.py |
context-v2 manifest and context-plan validators and STRIDE analyzer when selected |
stride-component-context-plan.schema.json |
$OUTPUT_DIR/.dispatch-context/<component-id>/context-plan.json |
scripts/orchestrator/orchestration_controller.py |
context-v2 action validator and STRIDE analyzer |
stride-component-repository-roots.schema.json |
$OUTPUT_DIR/.dispatch-context/<component-id>/repository-roots.json |
scripts/orchestrator/orchestration_controller.py |
context-v2 action validator and STRIDE analyzer |
stride-analyst-context.schema.json |
$OUTPUT_DIR/.stride-analyst-context.json |
appsec-control-analyst |
scripts/validators/validate_intermediate.py checks routing hints against finalized component ownership before scripts/orchestrator/build_stride_dispatch_manifest.py; carries only bounded human-facing business attributes per component |
recon-signals.schema.json |
$OUTPUT_DIR/.recon-signals.json |
appsec-recon-scanner |
actor resolution, trust-boundary input, and STRIDE bundle construction; v2 carries structured, repository-validated evidence locations |
trust-boundary-selection.schema.json |
$OUTPUT_DIR/.dispatch-context/trust-boundary-selection.json |
scripts/contexts/prepare_trust_boundary_context.py |
STRIDE context dispatch and scripts/model/build_threat_model_yaml.py |
stride-repository-registry.schema.json |
$OUTPUT_DIR/.stride-repository-registry.json |
context-v2 controller via contexts/build_stride_evidence_bundles.py |
evidence-bundle builder, manifest validator, and component repository projector |
stride-dispatch-manifest.schema.yaml |
$OUTPUT_DIR/.stride-dispatch-manifest.json |
scripts/orchestrator/build_stride_dispatch_manifest.py |
Level-0 dispatcher and scripts/validators/validate_dispatch_manifest.py |
stride-dispatch-waves.schema.json |
$OUTPUT_DIR/.dispatch-waves.json |
scripts/orchestrator/stride_dispatch_waves.py |
context-v2 controller and bounded STRIDE join waiter |
orchestration-action.schema.json |
ephemeral controller stdout | scripts/orchestrator/orchestration_controller.py |
thin skill runtimes |
merge-candidates.schema.json |
$OUTPUT_DIR/.merge-candidates.json |
scripts/model/merge_threats.py collect |
threat merger and scripts/model/merge_threats.py finalize |
merge-review-context.schema.json |
$OUTPUT_DIR/.merge-context/candidates.json |
context-v2 controller | focused threat merger |
threats-merged.schema.yaml |
$OUTPUT_DIR/.threats-merged.json |
orchestrator Phase 9 | diagram annotator, YAML/SARIF exporters, changelog writer, triage validator |
evidence-verification.schema.json |
$OUTPUT_DIR/.evidence-verification.json |
appsec-evidence-verifier |
evidence guard and Phase 10b triage |
evidence-verifier-context.schema.json |
$OUTPUT_DIR/.dispatch-context/post-stride/evidence-sample.json |
scripts/contexts/build_post_stride_contexts.py |
evidence verifier and controller-owned canonical annotation |
post-stride-generated-threats.schema.json |
$OUTPUT_DIR/.dispatch-context/post-stride/generated-threats.json |
scripts/contexts/build_post_stride_contexts.py |
post-STRIDE synthesizer |
post-stride-proposed-mitigations.schema.json |
$OUTPUT_DIR/.dispatch-context/post-stride/proposed-mitigations.json |
scripts/contexts/build_post_stride_contexts.py |
post-STRIDE synthesizer |
abuse-case-deriver-context.schema.json |
$OUTPUT_DIR/.dispatch-context/abuse-cases/deriver.json |
scripts/model/derive_abuse_cases.py |
the abuse-case deriver job (thorough depth) |
abuse-case-verifier-context.schema.json |
$OUTPUT_DIR/.dispatch-context/abuse-cases/<candidate-id>.json |
scripts/contexts/build_abuse_case_contexts.py |
one abuse-case verifier job |
merge-decisions.schema.json |
$OUTPUT_DIR/.merge-decisions.json |
appsec-threat-merger (Phase 9) |
scripts/model/merge_threats.py finalize |
triage-flags.schema.yaml |
$OUTPUT_DIR/.triage-flags.json |
appsec-triage-validator (Phase 10b) |
Phase 11 rendering, QA reviewer |
threat-model.output.schema.yaml |
$OUTPUT_DIR/threat-model.yaml |
orchestrator Phase 10/11 | CI/CD, DefectDojo, SonarQube, cross-repo discovery |
known-threats.schema.yaml |
docs/known-threats.yaml (user-supplied input) |
analyzed team | contexts/build_threat_modeling_context.py, then the focused STRIDE analyzer |
related-repos.schema.yaml |
docs/related-repos.yaml (user-supplied input) |
analyzed team | scripts/contexts/load_related_repos.py |
cross-repo-register.schema.json |
$OUTPUT_DIR/.cross-repo-register.json |
scripts/contexts/build_cross_repo_register.py |
STRIDE dispatcher, Phase 11 §5/§7 renderer |
actors-repo.schema.yaml |
<repo>/.appsec/actors.yaml |
analyzed team | scripts/model/resolve_actors.py |
actors-discovered.schema.yaml |
$OUTPUT_DIR/.actors-discovered.json |
appsec-actor-discoverer |
scripts/model/resolve_actors.py |
actors-merged-static.schema.yaml |
$OUTPUT_DIR/.actors-merged-static.json |
scripts/model/resolve_actors.py |
appsec-actor-discoverer |
actors-resolved.schema.yaml |
$OUTPUT_DIR/.actors-resolved.json |
scripts/model/resolve_actors.py |
actor slicer, report composer, architect review |
context-routing-catalog.schema.json |
data/context-routing-catalog.yaml |
plugin maintainers | semantic validator and context-v2 resolver |
context-routing-bindings.schema.json |
data/context-routing-bindings.json |
plugin maintainers | semantic validator and context-v2 resolver |
context-effective-plan.schema.json |
$OUTPUT_DIR/.context-routing-plan.json |
scripts/contexts/context_routing.py |
local audit, active delivery binding, and migration diagnostics |
context-effective-plan-receipt.schema.json |
$OUTPUT_DIR/.context-routing-plan.receipt.json |
scripts/contexts/context_routing.py |
exact-byte plan freshness validation |
recon-patterns.schema.json |
$OUTPUT_DIR/.recon-patterns.json |
scripts/analyzers/recon_patterns.py |
receipted recon-scanner input |
recon-summary-context.schema.json |
$OUTPUT_DIR/.dispatch-context/architecture/recon-summary-context.json |
scripts/contexts/build_architecture_analysis_context.py |
actor, architecture, and exceptional triage roles |
architecture-route-context.schema.json |
$OUTPUT_DIR/.dispatch-context/architecture/route-context.json |
scripts/contexts/build_architecture_analysis_context.py |
architecture analyst |
threat-summary.schema.json |
<OUTPUT_DIR>/threat-summary.json (when --format json or both) |
scripts/model/aggregate_threat_summary.py |
External dashboards / internal reporting jobs |
analyst-request.schema.json |
request.json in an on-demand threat analysis job root |
on-demand threat analysis controller | scripts/validators/validate_analyst.py |
analyst-state.schema.json |
state.json in an on-demand threat analysis job root |
on-demand threat analysis controller | scripts/validators/validate_analyst.py |
analyst-snapshot.schema.json |
snapshot.json in an on-demand threat analysis job root |
on-demand threat analysis snapshot capture | scripts/validators/validate_analyst.py |
analyst-context.schema.json |
context.json in an on-demand threat analysis job root |
scripts/contexts/build_analyst_context.py |
analyst controller and prompt builder |
analyst-response.schema.json |
untrusted model reply of one analysis pass | model session via scripts/runtime/analyst_host.py |
scripts/validators/validate_analyst.py before any use |
analyst-result.schema.json |
result.json in the job root and analyst-result.json in the chosen output |
scripts/orchestrator/analyst_controller.py |
scripts/renderers/render_analyst_report.py, CI consumers |
analyst-feature.schema.json |
developer-chosen feature-context file | scripts/contexts/analyst_questions.py on explicit save |
analyst controller (--feature) |
analyst-catalog.schema.json |
data/analyst-questions.yaml and custom question packages |
plugin maintainers, organizations | scripts/contexts/resolve_analyst_catalog.py |
analyst-methodology.schema.json |
data/analyst-methods/*.yaml and custom methodology profiles |
plugin maintainers, organizations | scripts/contexts/resolve_analyst_catalog.py |
analyst-limits.schema.json |
data/analyst-limits.yaml |
plugin maintainers | scripts/contexts/resolve_analyst_catalog.py |
- Schemas capture structural invariants (required fields, enum values,
field types, regex patterns). They are enforced on every write by the
producing agent (
validators/validate_intermediate.py <type> <path>). - Rules that JSONSchema cannot express in Draft 2020-12 remain as Python
post-checks inside
validators/validate_intermediate.py:- Sequential
T-NNNnumbering inthreats-merged(T-001,T-002, …) - Uniqueness of
t_idacross the merged list - Redaction rule on
hardcoded_secrets[].snippet(must contain****, may not expose more than 4 chars of the original secret) scenarioin stride findings must be ≥ 10 non-whitespace chars- Sequential
TF-NNNnumbering and uniqueness intriage-flags summary.total_flags/warnings/infocounters consistent with the actualflags[]array intriage-flags- Uniqueness of
idacross the user-suppliedknown-threats.yaml
- Sequential
- Error stubs (objects with
parse_error) bypass the full schema; they are a known failure-state contract between a sub-agent and the orchestrator.
Each schema carries a $id of the form
https://appsec-advisor/schemas/<name>.schema.yaml and the
https://json-schema.org/draft/2020-12/schema meta-schema. Breaking changes
require a version bump in the schema $id path (e.g. /v2/<name>.schema.yaml)
and a coordinated update across the producing agent, the validator, and any
downstream consumer.