{
  "run_id": "collectiveai-team--botica-claude-haiku-5-5-1793140482031955127",
  "checker": {
    "claims": [
      {
        "claim": "botica lint exits 1 when a finding is an error",
        "command": "<guest-path> lint",
        "evidence": "error [no-utils] src/utils.py is a catch-all module \u2014 name modules for what they hold, not utils/helpers/aux/misc/common.\nsrc/utils.py:2:5: warning [log-no-print] Libraries log, they don't print: use the house get_logger (`botica refs show structured-logging`) instead of print() or sys.stdout/stderr.write in library code. `__main__.py`, `cli.py`, `cli/`, the tests and `if __name__ == \"__main__\":` blocks are exempt; another entry point goes in `extend-ignores`.\n",
        "expected": "exit 1 and the no-utils error",
        "input": "sample project with src/utils.py",
        "kind": "claim",
        "outcome": "Real input produced the expected result: error [no-utils] src/utils.py is a catch-all module",
        "returncode": 1,
        "source": "`botica lint` exits with 1 when a finding is an error and with 2 when the run fails.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "botica explain says what a rule asks and how it is configured",
        "command": "<guest-path> explain no-utils",
        "evidence": "no-utils (BTSTRUC002): No catch-all modules\n\nstate:     active, selected by `no-utils`\nseverity:  error\nstatus:    stable (since 0.7.0)\nfamily:    structure\nstandard:  CES-63\nlanguages: go, javascript, python, rust, typescript\nkind:      native (python, typescript, javascript, go, rust)\naliases:   none\ntags:      naming\noptions:   none\nconfig:    /tmp/sample_proj/botica.toml\nignores: none\n\n## Directive\n\nDon't create catch-all modules. A module named `utils`, `helpers`, `aux`, `misc` or `common` is an\nerror, anywhere except under `tests/`. It applies to the files of Python (`.py`), TypeScript (",
        "expected": "the rule description",
        "input": "no-utils",
        "kind": "claim",
        "outcome": "Real input produced the expected result: no-utils (BTSTRUC002): No catch-all modules",
        "returncode": 0,
        "source": "# what a rule asks, and how it is configured here",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Inspected README.md and crates/ entry points: botica lint, rules, explain, refs, recipe and rules new are one-shot commands; the only long-running entry point is botica server (LSP over stdio), started by an editor, not a schedule. No cron, --once, --now or webhook in the product.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Inspected README.md and crates/ entry points: botica lint, rules, explain, refs, recipe and rules new are one-shot commands; the only long-running entry point is botica server (LSP over stdio), started by an editor, not a schedule. No cron, --once, --now or webhook in the product.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>",
        "lint"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 1,
      "scope": "product operation",
      "stderr": "",
      "stdout": "src/utils.py:1:1: error [no-utils] src/utils.py is a catch-all module \u2014 name modules for what they hold, not utils/helpers/aux/misc/common.\nsrc/utils.py:2:5: warning [log-no-print] Libraries log, they don't print: use the house get_logger (`botica refs show structured-logging`) instead of print() or sys.stdout/stderr.write in library code. `__main__.py`, `cli.py`, `cli/`, the tests and `if __name__ == \"__main__\":` blocks are exempt; another entry point goes in `extend-ignores`.",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "list every rule with whether it is active",
        "command": "<guest-path> rules --all",
        "deferred": false,
        "evidence": "TTOOL002    ruff-selection         inactive  not selected\nBTTOOL003    pyrefly-strict         inactive  not selected\nBTTOOL004    no-type-cast           inactive  not selected\nBTTOOL005    ruff-heavy-imports-in-function inactive  not selected\nBTTOOL006    ruff-imports-at-top    inactive  not selected\nBTWRIT001    plain-writing          inactive  not selected; judged outside lint\nBTWRIT002    minimal-comments       inactive  not selected; judged outside lint\nBTWRIT003    ubiquitous-language    inactive  not selected; judged outside lint\nBTWRIT004    agents-md-refs-exist   inactive  not selected",
        "expected": "rule list including no-utils",
        "input": "rules --all in sample project",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "read the reference page of a topic",
        "command": "<guest-path> refs show structured-logging",
        "deferred": false,
        "evidence": "es and render your event dictionary to JSON that is picked up by a log aggregation system like ELK or Graylog, structlog comes with batteries included - you just have to tell it to use its JSONRenderer.\n\n## https://www.structlog.org/en/stable/api.html#structlog.dev.ConsoleRenderer\n\nthe console renderer formats exceptions itself, so the processor that turns them into data goes only before `JSONRenderer`\n\n> Changed in version 21.2.0: ConsoleRenderer now handles the exc_info event dict key itself. Do not use the structlog.processors.format_exc_info processor together with ConsoleRenderer anymore!",
        "expected": "topic text",
        "input": "refs show structured-logging",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "diagnosis": null
}
