{
  "checker": {
    "claims": [
      {
        "claim": "--explain prints per-package decisions of native install or Composer handoff",
        "command": "phpm -d <guest-path> install --explain",
        "evidence": "decision install: nothing to do, composer.json, composer.lock and vendor/ are as phpm left them\nNothing to install, update or remove\n",
        "expected": "decision lines for install and autoload are printed",
        "input": "ytmate fixture composer.json and composer.lock in a fresh project",
        "kind": "claim",
        "outcome": "Real input produced the expected result: decision install:",
        "returncode": 0,
        "source": "`--explain` prints, per package, whether it was installed natively or handed",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "-o / --optimize-autoloader works",
        "command": "phpm -d <guest-path> install --explain --optimize-autoloader",
        "evidence": "decision install: nothing to do, composer.json, composer.lock and vendor/ are as phpm left them\nNothing to install, update or remove\n",
        "expected": "autoloader is written natively",
        "input": "ytmate fixture composer.json and composer.lock in a fresh project",
        "kind": "claim",
        "outcome": "Real input produced the expected result: decision install:",
        "returncode": 0,
        "source": "`--optimize-autoloader` / `-o`, `--classmap-authoritative` / `-a` all work.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "phpm is a one-shot CLI (install is the only subcommand, per phpm --help). README and crates/*/src contain no cron, scheduler, --once/--now, watch, daemon or webhook entry points, so there is no product cycle to trigger.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "phpm is a one-shot CLI (install is the only subcommand, per phpm --help). README and crates/*/src contain no cron, scheduler, --once/--now, watch, daemon or webhook entry points, so there is no product cycle to trigger.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "phpm",
        "-d",
        "<guest-path>",
        "install",
        "--explain",
        "-o"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "decision install: nothing to do, composer.json, composer.lock and vendor/ are as phpm left them\nNothing to install, update or remove",
      "stdout": "",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "Quickstart: install a PHP project's lockfile with --explain",
        "command": "phpm -d <guest-path> install --explain",
        "deferred": false,
        "evidence": "decision install: nothing to do, composer.json, composer.lock and vendor/ are as phpm left them\nNothing to install, update or remove",
        "expected": "packages installed natively with decision lines",
        "input": "cd project; phpm install --explain (ytmate fixture)",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Usage section",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "README says Rust 1.96+ is needed only for the cargo source install; the shell installer was used as the README's primary route, which installs a prebuilt binary, so no Rust toolchain was built. System cargo is 1.75 (rust-toolchain.toml asks for 1.98.1) and was not used.",
    "The installer put phpm in /var<guest-path> (CARGO_HOME of this guest), not ~/.cargo/bin as the README says. The probe and claims set PATH to that directory.",
    "PHP was not installed in the guest; the README says PHP must be installed. Installed php-cli 8.3.6 plus extensions via apt. phpm first refused to install until ext-pdo_mysql and ext-gd were present (platform check), so php-mysql and php-gd were installed.",
    "The checker path /inputs/coldpass-preflight.py does not exist; used <guest-path> as given in the top-level instructions.",
    "First validation failed twice, both caused by my probe setup and fixed: (1) claim argv lacked --explain, which is needed to print the decision lines; (2) probe expected_text matched a fresh-install line, but the replay ran against an already-installed project. Switched to the line 'decision install:' which appears in both fresh and repeat runs.",
    "phpm writes its decision lines to stderr, not stdout; the checker matched them anyway."
  ],
  "fault_owner": null,
  "main_blocker": null,
  "operation": "Install a composer.lock into vendor/ with phpm install --explain (README Usage) and get per-package native/Composer decisions",
  "operation_scope": "Linux x86_64 guest (Ubuntu, uid 1000 with passwordless sudo). Uses the ytmate fixture composer.json/composer.lock copied into fresh project dirs under <guest-path> Requires PHP CLI with pdo_mysql and gd extensions because the lock's platform requirements are checked. No Composer reference run, so byte-identity with Composer was not verified.",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "curl -LsSf https://github.com/speedsharmaai/phpm/releases/latest/download/phpm-installer.sh | sh (run as sh /tmp/phpm-installer.sh; installed phpm 0.1.1)",
    "phpm --version -> phpm 0.1.1",
    "sudo apt-get -o DPkg::Lock::Timeout=300 install php-cli php-xml php-mbstring php-curl php-zip unzip php-mysql php-gd",
    "cd <project>; phpm install --explain (ytmate fixture; 42 packages installed natively, autoloader written)",
    "phpm -d <project> install --explain -o (repeat run: nothing to do)"
  ],
  "stuck_step": null,
  "suggested_fix": "None required for the tested path. Docs could mention that PHP plus pdo_mysql and gd are needed before install, and that the installer's default location is CARGO_HOME, not ~/.cargo/bin."
}
