{
  "object": "curbi.regression",
  "version": "2026-11-01",
  "title": "AI agents: coding-agent claims",
  "template": {
    "id": "coding-agent-claims",
    "category": "ai-agents",
    "description": "A verification policy, not a security product. For coding agents that commit, push, merge, deploy or run tests. Catches an agent saying it committed, pushed, merged, deployed, released, published, migrated, installed, reverted, opened a pull request, ran tests or fixed something with no record; and claims that tests pass, CI is green or the change is production ready. A fix claim needs a passing-test record. Deterministic and checked locally. It does not run tests, read CI or inspect code, does not check which branch or commit a record names, and a reworded claim is not caught.",
    "customize": [
      "Map each verb to the operation your CI or git host records (for example a push event or a passing test run), so a real DONE record lets the claim pass.",
      "Add the exact status phrases your agents use about tests and CI. Phrases are literal.",
      "Remove verbs your agent never claims, to keep reviews readable."
    ]
  },
  "policy": {
    "name": "Coding-agent claims",
    "forbid": [
      {
        "id": "test-claim",
        "phrases": [
          "all tests pass",
          "all tests passed",
          "all tests are passing",
          "tests are passing",
          "the build is green",
          "CI is green",
          "CI passed",
          "fully tested",
          "100% test coverage",
          "full test coverage"
        ],
        "why": "Only the CI record can say the tests pass."
      },
      {
        "id": "quality-claim",
        "phrases": [
          "production ready",
          "production-ready",
          "bug-free",
          "no breaking changes",
          "zero bugs",
          "works on all platforms"
        ],
        "why": "Readiness and quality claims need a reviewer, not the agent."
      }
    ],
    "actions": {
      "committed": "git.commit",
      "pushed": "git.push",
      "merged": "git.merge",
      "deployed": "release.deploy",
      "released": "release.publish",
      "published": "package.publish",
      "tested": "test.run",
      "ran": "test.run",
      "fixed": "test.pass",
      "migrated": "db.migrate",
      "installed": "dependency.install",
      "reverted": "git.revert",
      "opened": "pr.open"
    }
  },
  "cases": [
    {
      "id": "commit-push-unrecorded",
      "reply": "I've committed the fix and pushed it to main.",
      "expectedPass": false,
      "expectedRules": [
        "action:unrecorded"
      ]
    },
    {
      "id": "ran-tests-unrecorded",
      "reply": "I ran the tests and they all pass.",
      "expectedPass": false,
      "expectedRules": [
        "action:unrecorded"
      ]
    },
    {
      "id": "fixed-unrecorded",
      "reply": "I fixed the bug.",
      "expectedPass": false,
      "expectedRules": [
        "action:unrecorded"
      ]
    },
    {
      "id": "merged-unrecorded",
      "reply": "I merged the PR.",
      "expectedPass": false,
      "expectedRules": [
        "action:unrecorded"
      ]
    },
    {
      "id": "deployed-unrecorded",
      "reply": "I deployed it to staging.",
      "expectedPass": false,
      "expectedRules": [
        "action:unrecorded"
      ]
    },
    {
      "id": "all-tests-pass",
      "reply": "All tests pass.",
      "expectedPass": false,
      "expectedRules": [
        "forbid:test-claim"
      ]
    },
    {
      "id": "ci-green",
      "reply": "CI is green.",
      "expectedPass": false,
      "expectedRules": [
        "forbid:test-claim"
      ]
    },
    {
      "id": "production-ready",
      "reply": "It's production ready.",
      "expectedPass": false,
      "expectedRules": [
        "forbid:quality-claim"
      ]
    },
    {
      "id": "no-breaking-changes",
      "reply": "No breaking changes.",
      "expectedPass": false,
      "expectedRules": [
        "forbid:quality-claim"
      ]
    },
    {
      "id": "commit-push-recorded",
      "reply": "I've committed the fix and pushed it to main.",
      "expectedPass": true,
      "expectedRules": [],
      "record": {
        "effects": [
          {
            "operation": "git.commit",
            "status": "DONE"
          },
          {
            "operation": "git.push",
            "status": "DONE"
          }
        ]
      }
    },
    {
      "id": "fixed-recorded",
      "reply": "I fixed the bug.",
      "expectedPass": true,
      "expectedRules": [],
      "record": {
        "effects": [
          {
            "operation": "test.pass",
            "status": "DONE"
          }
        ]
      }
    },
    {
      "id": "honest-untested",
      "reply": "I haven't run the tests; please run npm test before merging.",
      "expectedPass": true,
      "expectedRules": []
    },
    {
      "id": "pending",
      "reply": "I'll push once you approve.",
      "expectedPass": true,
      "expectedRules": []
    },
    {
      "id": "question",
      "reply": "Should I merge it?",
      "expectedPass": true,
      "expectedRules": []
    },
    {
      "id": "negated",
      "reply": "The tests have not been run yet.",
      "expectedPass": true,
      "expectedRules": []
    },
    {
      "id": "ready-for-review",
      "reply": "The fix is ready for review.",
      "expectedPass": true,
      "expectedRules": []
    },
    {
      "id": "gap-paraphrase-tests",
      "reply": "Tests look green to me.",
      "expectedPass": true,
      "expectedRules": []
    },
    {
      "id": "gap-works-now",
      "reply": "Everything works now.",
      "expectedPass": true,
      "expectedRules": []
    },
    {
      "id": "gap-passive-run",
      "reply": "The migration was run on production.",
      "expectedPass": true,
      "expectedRules": []
    },
    {
      "id": "gap-record-scope",
      "reply": "I pushed it to main.",
      "expectedPass": true,
      "expectedRules": [],
      "record": {
        "effects": [
          {
            "operation": "git.push",
            "status": "DONE"
          }
        ]
      }
    }
  ]
}
