{
  "checker": {
    "claims": [
      {
        "claim": "The three legs pass the same 203 conformance rows",
        "command": "php php/tests/parity.php",
        "evidence": "203/203 = 100.0%\n  node=exp       203/203 = 100.0%\n  py=exp         203/203 = 100.0%\n  3 legs equal   211/211 = 100.0%\n\nrendered corpus documents: /tmp/fancy-template-parity-11795/rendered\n",
        "expected": "203/203 rows match on each leg",
        "input": "php php/tests/parity.php (all template/* rows, byte-for-byte across PHP, TypeScript, Python)",
        "kind": "claim",
        "outcome": "Real input produced the expected result: 203/203 = 100.0%",
        "returncode": 0,
        "source": "The three legs pass the same 203 `template/*` conformance rows",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Three legs produce byte-identical output",
        "command": "php php/tests/parity.php",
        "evidence": "3 legs equal\ntemplate/tokenize         32  32/32        32/32        32/32        32/32       \ntemplate/resolve          29  29/29        29/29        29/29        29/29       \ntemplate/filters          37  37/37        37/37        37/37        37/37       \ntemplate/directives       24  24/24        24/24        24/24        24/24       \ntemplate/limits           29  29/29        29/29        29/29        29/29       \ntemplate/profiles         27  27/27        27/27        27/27        27/27       \ntemplate/inspect          25  25/25        25/25        25/25        25/25       \ncorpus/certif",
        "expected": "all three legs equal",
        "input": "php php/tests/parity.php",
        "kind": "claim",
        "outcome": "Real input produced the expected result: 3 legs equal",
        "returncode": 0,
        "source": "produce byte-identical output on every row and on",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Realistic example templates render identically across legs",
        "command": "php php/tests/parity.php",
        "evidence": "211/211 = 100.0%\n\nrendered corpus documents: /tmp/fancy-template-parity-11813/rendered\n",
        "expected": "211/211 rows equal across the three legs",
        "input": "php php/tests/parity.php (includes corpus certificate, invoice, deck, report)",
        "kind": "claim",
        "outcome": "Real input produced the expected result: 211/211 = 100.0%",
        "returncode": 0,
        "source": "the realistic templates in `examples/` (`php php/tests/parity.php`).",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Entry points inspected: README.md, python/README.md, AGENTS.md, package.json, composer.json, python/pyproject.toml, and source grep for cron/schedule/webhook/loop/--once/--now found nothing. The product is a template library (inspect/validate/render) with no scheduler, daemon or webhook; it runs only when a caller invokes it.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Entry points inspected: README.md, python/README.md, AGENTS.md, package.json, composer.json, python/pyproject.toml, and source grep for cron/schedule/webhook/loop/--once/--now found nothing. The product is a template library (inspect/validate/render) with no scheduler, daemon or webhook; it runs only when a caller invokes it.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "php",
        "php/tests/parity.php"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "",
      "stdout": "group                   rows  php=exp      node=exp     py=exp       3 legs equal\ntemplate/tokenize         32  32/32        32/32        32/32        32/32       \ntemplate/resolve          29  29/29        29/29        29/29        29/29       \ntemplate/filters          37  37/37        37/37        37/37        37/37       \ntemplate/directives       24  24/24        24/24        24/24        24/24       \ntemplate/limits           29  29/29        29/29        29/29        29/29       \ntemplate/profiles         27  27/27        27/27        27/27        27/27       \ntemplate/inspect          25  25/25        25/25        25/25        25/25       \ncorpus/certificate         2  n/a          n/a          n/a          2/2         \ncorpus/invoice             2  n/a          n/a          n/a          2/2         \ncorpus/deck                2  n/a          n/a          n/a          2/2         \ncorpus/report              2  n/a          n/a          n/a          2/2         \n[excerpt truncated]",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "Python leg suite passes (documented offline tests)",
        "command": "<guest-path> -m pytest -q",
        "deferred": false,
        "evidence": "ipped\n.\ntemplate/limits [python] -- fancy-conformance 0.36.0\n  29 passed, 0 failed, 0 skipped\n.\ntemplate/profiles [python] -- fancy-conformance 0.36.0\n  27 passed, 0 failed, 0 skipped\n.\ntemplate/inspect [python] -- fancy-conformance 0.36.0\n  25 passed, 0 failed, 0 skipped\n............................................................ [ 27%]\n........................................................................ [ 55%]\n........................................................................ [ 82%]\n.............................................                            [100%]\n261 passed in 1.07s",
        "expected": "261 passed",
        "input": "python -m pytest -q",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "AGENTS.md Testing: cd python && python -m pytest -q",
        "verdict": "yes"
      },
      {
        "claim": "PHP leg suite passes (documented Pest command)",
        "command": "php vendor/bin/pest --test-directory=php/tests",
        "deferred": false,
        "evidence": "tten\u001b[39m\n  \u001b[32;1m\u2713\u001b[39;22m\u001b[90m \u001b[39m\u001b[90mit section 9: $index in a cell is a number\u001b[39m\n  \u001b[32;1m\u2713\u001b[39;22m\u001b[90m \u001b[39m\u001b[90mit section 9: markup escapes only the value, never the template's own markup\u001b[39m\n  \u001b[32;1m\u2713\u001b[39;22m\u001b[90m \u001b[39m\u001b[90mit section 9: a literal token's text is a value too\u001b[39m\n  \u001b[32;1m\u2713\u001b[39;22m\u001b[90m \u001b[39m\u001b[90mit section 9: non-ASCII punctuation is left alone\u001b[39m\n  \u001b[32;1m\u2713\u001b[39;22m\u001b[90m \u001b[39m\u001b[90mit section 4: validateData in declaration order, depth-first\u001b[39m\n\n  \u001b[90mTests:\u001b[39m    \u001b[32;1m56 passed\u001b[39;22m\u001b[90m (123 assertions)\u001b[39m\n  \u001b[90mDuration:\u001b[39m \u001b[39m1.62s\u001b[39m",
        "expected": "56 passed",
        "input": "pest --test-directory=php/tests",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "AGENTS.md Testing: php vendor/bin/pest --test-directory=php/tests",
        "verdict": "yes"
      },
      {
        "claim": "TypeScript leg tests pass (documented npm test)",
        "command": "npm test",
        "deferred": false,
        "evidence": "25 passed, 0 failed, 0 skipped\n\n \u001b[32m\u2713\u001b[39m tests/conformance.test.ts \u001b[2m(\u001b[22m\u001b[2m227 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 191\u001b[2mms\u001b[22m\u001b[39m\n \u001b[32m\u2713\u001b[39m tests/security.test.ts \u001b[2m(\u001b[22m\u001b[2m21 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 29\u001b[2mms\u001b[22m\u001b[39m\n \u001b[32m\u2713\u001b[39m tests/spec.test.ts \u001b[2m(\u001b[22m\u001b[2m12 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 13\u001b[2mms\u001b[22m\u001b[39m\n\n\u001b[2m Test Files \u001b[22m \u001b[1m\u001b[32m3 passed\u001b[39m\u001b[22m\u001b[90m (3)\u001b[39m\n\u001b[2m      Tests \u001b[22m \u001b[1m\u001b[32m260 passed\u001b[39m\u001b[22m\u001b[90m (260)\u001b[39m\n\u001b[2m   Start at \u001b[22m 21:54:22\n\u001b[2m   Duration \u001b[22m 2.12s\u001b[2m (transform 376ms, setup 0ms, import 611ms, tests 233ms, environment 0ms)\u001b[22m",
        "expected": "260 passed",
        "input": "npm test",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "AGENTS.md Testing: npm run lint && npm test && npm run build",
        "verdict": "yes"
      },
      {
        "claim": "TypeScript leg builds (documented npm run build)",
        "command": "npm run build",
        "deferred": false,
        "evidence": "> @particle-academy/fancy-template@0.2.0 build\n> tsup src/index.ts --format esm,cjs --dts --clean\n\nCLI Building entry: src/index.ts\nCLI Using tsconfig: tsconfig.json\nCLI tsup v8.5.1\nCLI Target: es2022\nCLI Cleaning output folder\nESM Build start\nCJS Build start\nCJS dist/index.cjs 53.60 KB\nCJS \u26a1\ufe0f Build success in 94ms\nESM dist/index.js 52.35 KB\nESM \u26a1\ufe0f Build success in 96ms\nDTS Build start\nDTS \u26a1\ufe0f Build success in 1300ms\nDTS dist/index.d.ts  3.48 KB\nDTS dist/index.d.cts 3.48 KB",
        "expected": "Build success",
        "input": "npm run build",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "AGENTS.md Testing: npm run lint && npm test && npm run build",
        "verdict": "yes"
      },
      {
        "claim": "Sabotage harness breaks every bound (documented)",
        "command": "",
        "deferred": false,
        "evidence": "Not run: scripts/sabotage.py reads envelope sibling checkouts (repos/fancy-expr, writer repos) that do not exist in this VM; AGENTS.md says it runs from inside the envelope only.",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "Not run: scripts/sabotage.py reads envelope sibling checkouts (repos/fancy-expr, writer repos) that do not exist in this VM; AGENTS.md says it runs from inside the envelope only.",
        "source": "AGENTS.md Testing: python -I scripts/sabotage.py",
        "verdict": "blocked"
      },
      {
        "claim": "Writer read-back of corpus (documented)",
        "command": "",
        "deferred": false,
        "evidence": "Not run: --writers needs the nine writer repo checkouts of the envelope (AGENTS.md); not present. Plain parity run was executed instead via the probe.",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "Not run: --writers needs the nine writer repo checkouts of the envelope (AGENTS.md); not present. Plain parity run was executed instead via the probe.",
        "source": "README.md / AGENTS.md: php php/tests/parity.php --writers",
        "verdict": "blocked"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "README has no install section; install steps were taken from AGENTS.md Testing and .github/workflows/ci.yml.",
    "fancy-expr is not on PyPI (pip download returned 'no matching distribution'); installed from GitHub tag v0.2.0 as CI does.",
    "Ubuntu 24.04 ships PHP 8.3 only; added ppa:ondrej/php via add-apt-repository and installed php8.4 (8.4.27, meets the CI's patched floor). Composer came from apt, not the getcomposer installer.",
    "parity.php's Python leg calls a bare 'python' (CI gets it from setup-python); the guest has only python3, so the probe runs with the venv bin directory first on PATH (venv Python 3.12.3). First attempt failed with proc_open posix_spawn ENOENT, logged in this session.",
    "Not run: scripts/sabotage.py and parity.php --writers (need envelope sibling checkouts); ruff/mypy lint steps from AGENTS.md not run."
  ],
  "fault_owner": null,
  "main_blocker": null,
  "operation": "Cross-leg parity run from the README: php php/tests/parity.php renders the 203 template/* conformance rows and the 4 corpus examples through PHP, TypeScript and Python and compares the output byte for byte (result: 211/211 equal, exit 0).",
  "operation_scope": "fancy-template 0.2.0 at af965c9. This is a template library with no CLI or server; the README's render() calls are library APIs, so the parity harness is the only documented runnable operation. Needs PHP 8.4.27 with composer deps, Node 22 with npm deps and a built dist/, and Python >=3.11 with fancy-expr v0.2.0 (not on PyPI) installed; the fancy-conformance v0.36.0 fixtures for the Python tests.",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "git init; git remote add origin https://github.com/Particle-Academy/fancy-template; git fetch --depth 1 origin af965c9885141f982d8a590502f1be7925eede31; git reset --mixed FETCH_HEAD (clean status, matches pin)",
    "python3 -m venv <guest-path> (Python 3.12.3)",
    "git clone --depth 1 --branch v0.2.0 https://github.com/Particle-Academy/fancy-expr; <guest-path> -m pip install <guest-path>",
    "<guest-path> -m pip install -e ./python --group ./python/pyproject.toml:test",
    "git clone --depth 1 --branch v0.36.0 https://github.com/Particle-Academy/fancy-conformance; cd python && python -m pytest -q (261 passed)",
    "sudo apt-get install software-properties-common; sudo add-apt-repository ppa:ondrej/php; sudo apt-get install php8.4-cli php8.4-mbstring php8.4-xml php8.4-curl php8.4-zip composer",
    "composer install --no-interaction --prefer-dist",
    "vendor/bin/pest --test-directory=php/tests (56 passed)",
    "npm install --no-audit --no-fund; npm run lint; npm test (260 passed); npm run build",
    "php php/tests/parity.php (exit 0, 211/211 = 100.0%)"
  ],
  "stuck_step": null,
  "suggested_fix": "None required for the working path. Optional: ship a CLI or a README install section so the render operation can be run without writing Python/PHP/TypeScript code, and make parity.php use python3 or document the 'python' requirement."
}
