Skip to content

Agent Output Schemas

Every PACE agent produces a structured YAML artifact validated against a JSON Schema. These artifacts are stored in .pace/day-N/ and passed as inputs to downstream agents.


Story Card (PRIME)

File: .pace/day-N/story-card.yaml

day: 1
agent: PRIME
theme: "User model and password hashing"
stories:
- title: "Secure user creation"
acceptance_criteria:
- "User.create() stores bcrypt-hashed password"
- "User.verify_password() returns True for correct password"
out_of_scope:
- "OAuth / social login"
FieldTypeDescription
dayintegerDay number
agentstringAlways "PRIME"
themestringDay theme from plan.yaml
storieslistOne or more story objects
stories[].titlestringStory title
stories[].acceptance_criterialist[string]Testable conditions
stories[].out_of_scopelist[string]Explicitly deferred items

Handoff Note (FORGE)

File: .pace/day-N/handoff.yaml

day: 1
agent: FORGE
summary: "Implemented User model with bcrypt password hashing."
files_written:
- src/models/user.py
- tests/test_user_model.py
commit_sha: "abc123def456"
deferred: []
FieldTypeDescription
dayintegerDay number
agentstringAlways "FORGE"
summarystringNarrative description of what was built
files_writtenlist[string]Files created or modified (relative to repo root)
commit_shastring | nullGit commit SHA of the changes
deferredlist[string]Items explicitly deferred (not FAIL, just not done today)

Gate Report (GATE)

File: .pace/day-N/gate-report.yaml

day: 1
agent: GATE
criteria_results:
- criterion: "User.create() stores bcrypt-hashed password"
result: PASS
evidence: "tests/test_user_model.py::test_create_hashes_password PASSED"
- criterion: "CI pipeline green"
result: PARTIAL
evidence: "CI not yet configured — mapped to out_of_scope"
blockers: []
deferred:
- "CI pipeline — not yet configured in this sprint"
gate_decision: SHIP
hold_reason: ""
FieldTypeValuesDescription
dayintegerDay number
agentstring"GATE"
criteria_resultslistOne entry per acceptance criterion
criteria_results[].criterionstringExact criterion text
criteria_results[].resultstringPASS, PARTIAL, FAILVerdict for this criterion
criteria_results[].evidencestringTest name, log line, CI URL, or code reference
blockerslist[string]Human-readable description of each FAIL
deferredlist[string]PARTIAL items mapped to out_of_scope
gate_decisionstringSHIP, HOLDDay decision
hold_reasonstringActionable instruction for FORGE when HOLD

Sentinel Report (SENTINEL)

File: .pace/day-N/sentinel-report.yaml

day: 1
agent: SENTINEL
findings:
- check: "Hardcoded secrets in source files"
result: PASS
evidence: "Secret pattern scan returned no results"
- check: "HTTP timeout on external API calls"
result: ADVISORY
evidence: "src/clients/payment.py:42 — requests.get() with no timeout parameter"
advisories:
- "No timeout on requests.get() in payment.py:42 — add timeout=30"
blockers: []
sentinel_decision: ADVISORY
hold_reason: ""
FieldTypeValuesDescription
dayintegerDay number
agentstring"SENTINEL"
findingslistOne entry per security/SRE check
findings[].checkstringWhat was checked
findings[].resultstringPASS, ADVISORY, FAILCheck verdict
findings[].evidencestringFile path, line number, or test name
advisorieslist[string]Non-blocking findings (one per ADVISORY result)
blockerslist[string]Exploitable vulnerabilities (one per FAIL result)
sentinel_decisionstringSHIP, HOLD, ADVISORYDay decision
hold_reasonstringActionable instruction for FORGE when HOLD

Conduit Report (CONDUIT)

File: .pace/day-N/conduit-report.yaml

day: 1
agent: CONDUIT
findings:
- check: "Action version pinning"
result: ADVISORY
evidence: ".github/workflows/ci.yml uses actions/checkout@master"
- check: "Test gate in CI"
result: PASS
evidence: "ci.yml job 'test' runs pytest before any deploy step"
advisories:
- "actions/checkout@master in ci.yml — pin to @v4"
blockers: []
conduit_decision: ADVISORY
hold_reason: ""
FieldTypeValuesDescription
dayintegerDay number
agentstring"CONDUIT"
findingslistOne entry per DevOps check
findings[].checkstringWhat was checked
findings[].resultstringPASS, ADVISORY, FAILCheck verdict
findings[].evidencestringWorkflow file name, step name, Makefile target
advisorieslist[string]Non-blocking findings
blockerslist[string]Broken CI or leaked secrets (FAIL)
conduit_decisionstringSHIP, HOLD, ADVISORYDay decision
hold_reasonstringActionable instruction for FORGE when HOLD

Decision semantics

DecisionMeaningDay advances?
SHIPNo failures or advisoriesYes
ADVISORYNo failures, but concerns worth trackingYes (advisory stored)
HOLDAt least one blocking failureNo (FORGE must fix)

For GATE specifically, PARTIAL in criteria_results means a criterion was not fully met but maps to an out_of_scope item — GATE can still issue SHIP or ADVISORY if all non-deferred criteria pass.