{
  "checker": {
    "claims": [
      {
        "claim": "PONYTAIL_DEFAULT_MODE sets the default level",
        "command": "env PONYTAIL_DEFAULT_MODE=ultra CLAUDE_CONFIG_DIR=/tmp/ponytail-claude-cfg node hooks/ponytail-activate.js",
        "evidence": "level: ultra\n\n# Ponytail\n\nYou are a lazy senior developer. The best code is the code never written. You solve the whole problem with the least new code. End your reply with one or two lines: what you skipped or did not check, and any risk the user must know.\n\nActive for the whole session until the user says \"stop ponytail\" or \"normal mode\". Switch level: `/ponytail lite|full|ultra`.\n\n## Before you write\n\nRead the task and the code it touches. List every place your change must reach: callers, tests, fixtures, config, exports. Check what your change could break for users: data it would destroy o",
        "expected": "activation text reports level ultra",
        "input": "PONYTAIL_DEFAULT_MODE=ultra",
        "kind": "claim",
        "outcome": "Real input produced the expected result: level: ultra",
        "returncode": 0,
        "source": "An optional `~/.config/ponytail/config.json` or `PONYTAIL_DEFAULT_MODE` env var can set the default level, but nothing is required.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Startup text shows the current mode",
        "command": "env -u PONYTAIL_DEFAULT_MODE CLAUDE_CONFIG_DIR=/tmp/ponytail-claude-cfg node hooks/ponytail-activate.js",
        "evidence": "level: full\n\n# Ponytail\n\nYou are a lazy senior developer. The best code is the code never written. You solve the whole problem with the least new code. End your reply with one or two lines: what you skipped or did not check, and any risk the user must know.\n\nActive for the whole session until the user says \"stop ponytail\" or \"normal mode\". Switch level: `/ponytail lite|full|ultra`.\n\n## Before you write\n\nRead the task and the code it touches. List every place your change must reach: callers, tests, fixtures, config, exports. Check what your change could break for users: data it would destroy or",
        "expected": "activation text reports level full (the default)",
        "input": "no PONYTAIL_DEFAULT_MODE set",
        "kind": "claim",
        "outcome": "Real input produced the expected result: level: full",
        "returncode": 0,
        "source": "Startup and mode-change text shows the current mode.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Entry points inspected: hooks/*.js run only when the host fires lifecycle events (SessionStart, SubagentStart, UserPromptSubmit per hooks/claude-codex-hooks.json); scripts/ and pi-extension contain no setInterval, cron, --once, or --now. No product scheduler or loop exists, so no cycle was triggered.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Entry points inspected: hooks/*.js run only when the host fires lifecycle events (SessionStart, SubagentStart, UserPromptSubmit per hooks/claude-codex-hooks.json); scripts/ and pi-extension contain no setInterval, cron, --once, or --now. No product scheduler or loop exists, so no cycle was triggered.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "node",
        "hooks/ponytail-activate.js"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "",
      "stdout": "PONYTAIL MODE ACTIVE \u2014 level: full\n\n# Ponytail\n\nYou are a lazy senior developer. The best code is the code never written. You solve the whole problem with the least new code. End your reply with one or two lines: what you skipped or did not check, and any risk the user must know.\n\nActive for the whole session until the user says \"stop ponytail\" or \"normal mode\". Switch level: `/ponytail lite|full|ultra`.\n\n## Before you write\n\nRead the task and the code it touches. List every place your change must reach: callers, tests, fixtures, config, exports. Check what your change could break for users: data it would destroy or expose, callers that stop working. That is scope. Extra features are not.\n\n[excerpt truncated]",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "CI rule-copy check passes",
        "command": "node scripts/check-rule-copies.js",
        "deferred": false,
        "evidence": "Rule copies match AGENTS.md; 10 rule invariants present in SKILL.md and AGENTS.md.",
        "expected": "Rule copies match AGENTS.md; 10 rule invariants present",
        "input": "repo at pinned commit",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": ".github/workflows/test.yml",
        "verdict": "yes"
      },
      {
        "claim": "Examples are illustrative outputs, not runnable programs",
        "command": "",
        "deferred": false,
        "evidence": "examples/ holds markdown before/after code samples with no runnable entrypoint; the runnable offline checks are the node test suite (CI runs node --test; 144/144 passed with pandas installed in /tmp/venv-ponytail) and the rule-copy check above",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "examples/ holds markdown before/after code samples with no runnable entrypoint; the runnable offline checks are the node test suite (CI runs node --test; 144/144 passed with pandas installed in /tmp/venv-ponytail) and the rule-copy check above",
        "source": "examples/README.md",
        "verdict": "blocked"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "Guest had no node or npm; installed Node 22 from the NodeSource apt repo (CI version) instead of the distro Node 18.",
    "First run of the offline suite had 1 failure (correctness: csv pandas one-liner) because pandas was missing; fixed by installing pandas into /tmp/venv-ponytail (python3.12-venv installed via apt first, since system pip is externally managed). Rerun: 144/144 pass.",
    "The README has no runnable install command: the documented installs are Claude Code/Codex '/plugin' slash commands and host-app steps, which cannot run in this guest. Substituted the product's own SessionStart hook entrypoint, invoked as 'node hooks/ponytail-activate.js' rather than the 'node -e require(...)' form in hooks/claude-codex-hooks.json (same file, same function).",
    "Claim checks set the variable with the coreutils 'env' wrapper in argv, because the checker's claim replay does not apply a claim's 'env' field (probe and example replay do).",
    "Hook writes its mode flag to CLAUDE_CONFIG_DIR=/tmp/ponytail-claude-cfg, a scratch directory outside the workspace.",
    "No telemetry or consent prompts were encountered. No servers were started, so none needed stopping."
  ],
  "fault_owner": null,
  "main_blocker": null,
  "operation": "Run the Ponytail SessionStart activation hook (hooks/ponytail-activate.js) and read back the activated level from its output, including the PONYTAIL_DEFAULT_MODE override.",
  "operation_scope": "Node.js 22 on Ubuntu 24.04 guest. Covers the local hook that the Claude Code/Codex/Cursor plugins run at session start. Does not exercise the slash-command skills (/ponytail-review, /ponytail-audit), which are LLM prompts and cannot be run offline, nor the Claude Code plugin install, which needs the host app.",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "git init; git remote add origin https://github.com/DietrichGebert/ponytail; git fetch --depth 1 origin 09c434ab73ca43761c5d8b0c5d341926c2fba710; git reset --mixed FETCH_HEAD",
    "Install Node 22 via NodeSource apt repo (CI uses node-version 22): sudo apt-get install -y nodejs (node v22.23.4, npm 10.9.9)",
    "python3 -m venv /tmp/venv-ponytail (after sudo apt-get install python3.12-venv); /tmp/venv-ponytail/bin/pip install pandas (CI step 'pip install pandas')",
    "node scripts/check-rule-copies.js (CI 'Check rule copies')",
    "PATH=/tmp/venv-ponytail/bin:$PATH node --test tests/*.test.js (144/144 pass)",
    "CLAUDE_CONFIG_DIR=/tmp/ponytail-claude-cfg node hooks/ponytail-activate.js (prints 'PONYTAIL MODE ACTIVE \u2014 level: full' and writes the mode flag)",
    "PONYTAIL_DEFAULT_MODE=ultra CLAUDE_CONFIG_DIR=/tmp/ponytail-claude-cfg node hooks/ponytail-activate.js (prints 'level: ultra')"
  ],
  "stuck_step": null,
  "suggested_fix": "None required for this operation. Optional: document the Node.js 22 requirement (and that the hooks need node on PATH) next to the install steps in README.md, and note that the offline suite needs pandas for the correctness tests."
}
