speccoder-runtime 0.12.0

Application services of speccoder: the only crate that executes anything.
Documentation
{
  "result": {
    "schema_version": 2,
    "command": "review",
    "status": "ok",
    "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",
    "data": {
      "feature": "001-graph",
      "file": "specs/001-graph/review.json",
      "requirements": [
        {
          "id": "FR-001",
          "text": "Users MUST log in with a passkey.",
          "state": "changes_requested",
          "by": "Dana Example",
          "at": 0,
          "comment": "say which passkeys",
          "decided_on": null
        },
        {
          "id": "FR-002",
          "text": "Sessions MUST expire after thirty minutes.",
          "state": "approved",
          "by": "Dana Example",
          "at": 0,
          "comment": null,
          "decided_on": null
        }
      ],
      "totals": {
        "approved": 1,
        "changes_requested": 1,
        "open": 0,
        "lapsed": 0,
        "questions": 0,
        "ambiguous": 0
      },
      "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",
      "questions": [],
      "changes": [
        {
          "id": "FR-001",
          "then": "- **FR-001**: Users MUST log in.",
          "now": "- **FR-001**: Users MUST log in with a passkey.",
          "path": "specs/001-graph/spec.md",
          "then_line": 9,
          "now_line": 9
        },
        {
          "id": "FR-002",
          "then": "- **FR-002**: Sessions MUST expire after [NEEDS CLARIFICATION: how long?].",
          "now": "- **FR-002**: Sessions MUST expire after thirty minutes.",
          "path": "specs/001-graph/spec.md",
          "then_line": 10,
          "now_line": 10
        }
      ],
      "history": [
        {
          "commit": "<hex>",
          "date": "<date>",
          "author": "Dana Example",
          "subject": "init",
          "added": [
            "FR-001",
            "FR-002"
          ],
          "reworded": [],
          "removed": []
        }
      ],
      "oracle": [],
      "tests_notice": null,
      "approval": null,
      "sheet": null,
      "readiness": {
        "requirements": 2,
        "scenarios": 0,
        "open_questions": 0,
        "untestable": [
          "US1"
        ],
        "identifiers": true
      }
    }
  },
  "head": "init",
  "status": " M specs/001-graph/spec.md\n?? specs/001-graph/review.json\n",
  "review": {
    "requirements": {
      "FR-001": {
        "verdict": "changes_requested",
        "line": "- **FR-001**: Users MUST log in with a passkey.",
        "sha256": "sha256:<hex>",
        "by": "Dana Example",
        "via": "web",
        "at": 0,
        "comment": "say which passkeys"
      },
      "FR-002": {
        "verdict": "approved",
        "line": "- **FR-002**: Sessions MUST expire after thirty minutes.",
        "sha256": "sha256:<hex>",
        "by": "Dana Example",
        "via": "web",
        "at": 0
      }
    }
  }
}