{
  "checker": {
    "claims": [
      {
        "claim": "The wrapper passes the command's arguments and exit status through",
        "command": "node dist/codex/run.js -- node tests/fixtures/codex-noisy-build.mjs 1 once",
        "evidence": "Stage 1 finished; deployment remains blocked.\nstderr: stage 1 diagnostic channel preserved\n",
        "expected": "fixture stage output returned, exit 0",
        "input": "node tests/fixtures/codex-noisy-build.mjs 1 once",
        "kind": "claim",
        "outcome": "Real input produced the expected result: Stage 1 finished; deployment remains blocked.",
        "returncode": 0,
        "source": "The executable and arguments after `--` are passed directly, preserving cwd,",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Pruning fails open when Jev access is unavailable, leaving output unchanged",
        "command": "node dist/codex/run.js -- node tests/fixtures/codex-noisy-build.mjs 1 once",
        "evidence": "Stage 1 finished; deployment remains blocked.\nstderr: stage 1 diagnostic channel preserved\n",
        "expected": "full fixture output returned unchanged",
        "input": "same fixture run without TYPESAFE_API_KEY",
        "kind": "claim",
        "outcome": "Real input produced the expected result: Stage 1 finished; deployment remains blocked.",
        "returncode": 0,
        "source": "configuration; pruning fails open while access is unavailable.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Jev pruning needs a TypeSafe API key",
        "command": "",
        "evidence": "No TypeSafe API key is available in this guest and it must not be obtained; live Jev scoring also needs a Codex/Claude session with a recorded transcript pointer.",
        "expected": "",
        "input": "",
        "kind": "claim",
        "outcome": "No TypeSafe API key is available in this guest and it must not be obtained; live Jev scoring also needs a Codex/Claude session with a recorded transcript pointer.",
        "source": "Make `TYPESAFE_API_KEY` available in the terminal where you will launch Codex.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Inspected src/index.ts, src/codex/run.ts, src/codex/prune.ts, hooks/ and README. The plugin has no cron, scheduler, loop, --once/--now trigger or webhook. It runs once per Bash command through the hook or wrapper; the only timer is a 30-second API request timeout in src/codex/prune.ts.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Inspected src/index.ts, src/codex/run.ts, src/codex/prune.ts, hooks/ and README. The plugin has no cron, scheduler, loop, --once/--now trigger or webhook. It runs once per Bash command through the hook or wrapper; the only timer is a 30-second API request timeout in src/codex/prune.ts.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "checks": [
        {
          "check": "install",
          "details": {
            "argv": [
              "node",
              "dist/codex/run.js",
              "--",
              "node",
              "tests/fixtures/codex-noisy-build.mjs",
              "1",
              "once"
            ],
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 0,
            "scope": "partial: install",
            "stderr": "stderr: stage 1 diagnostic channel preserved",
            "stdout": "nchanged unchanged \nprogress: stage 1 cache entry 882 already current; unchanged unchanged unchanged unchanged unchanged \nprogress: stage 1 cache entry 883 already current; unchanged unchanged unchanged unchanged unchanged \nprogress: stage 1 cache entry 884 already current; unchanged unchanged unchanged unchanged unchanged \nprogress: stage 1 cache entry 885 already current; unchanged unchanged unchanged unchanged unchanged \nprogress: stage 1 cache entry 886 already current; unchanged unchanged unchanged unchanged unchanged \nprogress: stage 1 cache entry 887 already current; unchanged unchanged unchanged unchanged unchanged \nprogress: stage 1 cache entry 888 already current; unchanged unchanged unchanged unchanged unchanged \nprogress: stage 1 cache entry 889 already current; unchanged unchanged unchanged unchanged unchanged \nprogress: stage 1 cache entry 890 already current; unchanged unchanged unchanged unchanged unchanged \nprogress: stage 1 cache entry 891 already current; unchanged unchanged unchanged unchanged unchanged \nprogress: stage 1 cache entry 892 already current; unchanged unchanged unchanged unchanged unchanged \n[excerpt truncated]",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        }
      ],
      "scope": "partial checks",
      "working": false
    },
    "evidence_strength": "partly_checked",
    "example_checks": [
      {
        "claim": "Offline test suite passes",
        "command": "npm test",
        "deferred": false,
        "evidence": "test.ts (2 tests) 139ms\n \u2713 tests/compact-markers.test.ts (7 tests) 161ms\n \u2713 tests/compaction.test.ts (4 tests) 190ms\n \u2713 tests/compaction-boundaries.test.ts (2 tests) 155ms\n \u2713 tests/compaction-context.test.ts (2 tests) 102ms\n \u2713 tests/eval-observer.test.ts (5 tests) 8ms\n \u2713 tests/partial-chunks.test.ts (2 tests) 38ms\n \u2713 tests/codex-session-utils.test.mjs (3 tests) 3ms\n \u2713 tests/decisions.test.ts (6 tests) 59ms\n\n Test Files  21 passed (21)\n      Tests  291 passed (291)\n   Start at  02:24:32\n   Duration  26.57s (transform 570ms, setup 0ms, collect 1.11s, tests 16.81s, environment 3ms, prepare 1.55s)",
        "expected": "all offline tests pass",
        "input": "npm test",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Tests section",
        "verdict": "yes"
      },
      {
        "claim": "Type check passes",
        "command": "npm run typecheck",
        "deferred": false,
        "evidence": "> fast-jev-output@0.1.0 typecheck\n> tsc --noEmit && npm run typecheck:hooks\n\n\n> fast-jev-output@0.1.0 typecheck:hooks\n> tsc -p tsconfig.hooks.json",
        "expected": "exit 0",
        "input": "npm run typecheck",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Tests section",
        "verdict": "yes"
      },
      {
        "claim": "Build succeeds",
        "command": "npm run build",
        "deferred": false,
        "evidence": "> fast-jev-output@0.1.0 build\n> tsc",
        "expected": "exit 0",
        "input": "npm run build",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Tests section",
        "verdict": "yes"
      },
      {
        "claim": "Plugin validates with the installed Claude Code CLI",
        "command": "npm run validate:plugin",
        "deferred": false,
        "evidence": "y the plugin in this folder. To check another plugin that the marketplace lists, run validate on that plugin's folder.\n  \u276f hooks/hooks.json names a hooks module (a code file listed under `modules`). The plugin directory has rules of its own for such code, and these checks apply none of them, so passing here does not mean the directory accepts the plugin. The developer portal's own validation applies those rules.\n\nThese plugin directory checks do not change the result below.\n\nThe directory also runs a safety scan and a policy review that this command does not.\n\n\u2714 Validation passed with warnings",
        "expected": "validation passes with warnings",
        "input": "npm run validate:plugin",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Tests section",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "Global npm install of @anthropic-ai/claude-code failed with EACCES on /usr/local/lib/node_modules; retried with sudo -n and it succeeded.",
    "Did not git init or fetch the pinned commit: no documented command needed Git metadata, and the source snapshot was used as delivered.",
    "No credentials_error check was recorded: the wrapper exits 0 and prints no credential message when the key is missing, so a real credential error cannot be captured. The checker would therefore report a failed credential check for this documented call, not a true one.",
    "Pruning could not be observed end to end: with no key and no session the wrapper returns output unchanged before any Jev request.",
    "Used the dummy value invalid-dummy-key only to confirm the no-call path; no real key was used."
  ],
  "fault_owner": "prerequisite",
  "main_blocker": "No TYPESAFE_API_KEY and no Codex/Claude Code session with a recorded transcript pointer in this disposable guest.",
  "operation": "Trim large command output through Jev via the documented wrapper: node dist/codex/run.js -- <command>",
  "operation_scope": "Offline build, type check and test suite, plugin validation, and pass-through of the wrapper all ran. Live Jev pruning was NOT exercised: it needs a TypeSafe API key (TYPESAFE_API_KEY), which this guest does not have and must not obtain, plus a Codex or Claude Code session that records a transcript pointer (CODEX_THREAD_ID). Requires Node 18+ (guest: Node 18.19.1, npm 9.2.0).",
  "outcome": "unverified",
  "plain_failure": "The product's main job, shrinking long command output, could not be tested here. It needs a TypeSafe account key and a live Codex or Claude Code session, which this sandbox does not provide. Everything else worked: the build, the 291 offline tests, the type check and the plugin validation all pass, and the wrapper passes commands through unchanged when it cannot prune.",
  "steps": [
    "sudo -n apt-get install -y nodejs npm (guest had no node; installed Node 18.19.1 / npm 9.2.0, meets engines >=18)",
    "export NODE_USE_ENV_PROXY=1; npm ci",
    "npm run build",
    "npm test (291 tests passed)",
    "npm run typecheck",
    "sudo -n npm install -g @anthropic-ai/claude-code (for npm run validate:plugin; claude 2.1.310)",
    "npm run validate:plugin (passed with warnings: missing icon, hooks module)",
    "node tests/fixtures/codex-noisy-build.mjs 1 once (fixture, 101,632 bytes, exit 0)",
    "node dist/codex/run.js -- node tests/fixtures/codex-noisy-build.mjs 1 once (wrapper with no key: output returned unchanged, exit 0)",
    "TYPESAFE_API_KEY=invalid-dummy-key node dist/codex/run.js -- ... (dummy value only: still output unchanged, exit 0; no API call is made without a session ID)"
  ],
  "stuck_step": "Live Jev pruning step (README 'Codex install' sections 2 and 4, and 'How the Codex wrapper works')",
  "suggested_fix": "Run the live check in an environment with TYPESAFE_API_KEY and an authenticated Codex or Claude Code session: JEV_CODEX_STAGES=2 npm run test:codex-session, then npm run test:live. Also consider having the wrapper print a clear message when the key is missing, so the fallback is not silent."
}
