{
"head": "init",
"result": {
"command": "review",
"data": {
"approval": null,
"changes": [
{
"id": "FR-001",
"now": "- **FR-001**: Users MUST log in with a passkey.",
"now_line": 9,
"path": "specs/001-graph/spec.md",
"then": "- **FR-001**: Users MUST log in.",
"then_line": 9
},
{
"id": "FR-002",
"now": "- **FR-002**: Sessions MUST expire after thirty minutes.",
"now_line": 10,
"path": "specs/001-graph/spec.md",
"then": "- **FR-002**: Sessions MUST expire after [NEEDS CLARIFICATION: how long?].",
"then_line": 10
}
],
"feature": "001-graph",
"file": "specs/001-graph/review.json",
"history": [
{
"added": [
"FR-001",
"FR-002"
],
"author": "Dana Example",
"commit": "<hex>",
"date": "2026-10-26",
"removed": [],
"reworded": [],
"subject": "init"
}
],
"oracle": [],
"questions": [],
"requirements": [
{
"at": 0,
"by": "Dana Example",
"comment": "say which passkeys",
"decided_on": null,
"id": "FR-001",
"state": "changes_requested",
"text": "Users MUST log in with a passkey."
},
{
"at": 0,
"by": "Dana Example",
"comment": null,
"decided_on": null,
"id": "FR-002",
"state": "approved",
"text": "Sessions MUST expire after thirty minutes."
}
],
"revise_with": null,
"revision": "Revise the spec per the reviewer's change requests; keep every requirement ID, reword only what is asked:\n- FR-001 (\"Users MUST log in with a passkey.\"): say which passkeys",
"sheet": null,
"tests_notice": null,
"totals": {
"ambiguous": 0,
"approved": 1,
"changes_requested": 1,
"lapsed": 0,
"open": 0,
"questions": 0
}
},
"exit_code": 0,
"message": "changes requested on FR-001; 1/2 requirements approved; 1 with changes requested — commit specs/001-graph/review.json to share it",
"payload": "review",
"schema_version": 2,
"status": "ok"
},
"review": {
"requirements": {
"FR-001": {
"at": 0,
"by": "Dana Example",
"comment": "say which passkeys",
"line": "- **FR-001**: Users MUST log in with a passkey.",
"sha256": "sha256:<hex>",
"verdict": "changes_requested",
"via": "web"
},
"FR-002": {
"at": 0,
"by": "Dana Example",
"line": "- **FR-002**: Sessions MUST expire after thirty minutes.",
"sha256": "sha256:<hex>",
"verdict": "approved",
"via": "web"
}
}
},
"status": " M specs/001-graph/spec.md\n?? specs/001-graph/review.json\n"
}