Skip to content

Testing evidence

This directory holds artefacts, not prose. Every claim about a platform in the repository should resolve to a file here, or it should not be made.

Contents

Path What it is
RESULTS.md Cross-platform summary table with per-platform numbers and an explicit "not verified" section
install-failures.md Clean-VM / agent install failure catalog → CI regressions
status.md Which machines were reachable during the run, and which were not
canary-vectors.json Canonical proof-of-read test vectors (PROBE_PROTOCOL.md §9)
macos-arm64/, linux-x64/, windows-x64/ Raw per-platform logs

Per-platform directory layout:

File Content
runtime-info.txt OS, kernel, CPU, RAM, SDK version
build.log dotnet restore + dotnet build -c Release, with exit codes and wall time
test.log dotnet test --collect:"XPlat Code Coverage" output
coverage-summary.txt Line/branch coverage for the namespace under test and for the whole assembly
canary-smoke.log canary selftest and canary smoke transcripts
canary-vectors.log Semantic and byte-identity checks of the published vectors
aot-publish.log dotnet publish -c Release -r <rid>
binary-size.txt, hash.txt AOT binary size, file type and SHA-256
cascade-selftest.log cascade selftest marker
cascade-live-smoke.log / .jsonl Live 3-URL cascade with per-URL latency
canary-aot.log The AOT binary re-running all three canary verbs

Two test layers, different purposes

This repository has two verification systems, and conflating them produces misleading coverage claims.

tests/OccamMcp.Core.Tests (xunit). Unit, integration and property-based tests over deterministic code. Fast (~350 ms), coverage-instrumented, runs everywhere with no network, no browser and no Node. This is what the coverage numbers in RESULTS.md measure.

benchmarks/l0-gate (console runner). The pre-existing integration gate: live extraction against real URLs, worker spawning, browser pool, failure taxonomy. It asserts by printing markers such as L0_GATE_OK. It needs npm ci and Playwright Chromium, and it is not coverage-instrumented — so the ~300 files it exercises show as uncovered in a Cobertura report.

A single blended coverage percentage across both layers would be dishonest in either direction: it understates what is verified and overstates what is unit-tested. RESULTS.md therefore reports the two scopes separately.

Re-running

See RESULTS.md §7. The runner scripts used for the recorded run live in scripts/testing/:

Script Purpose
run-platform.sh <label> <rid> Full Unix leg: runtime info, build, test + coverage, canary verbs, AOT publish, binary hash
run-platform.ps1 [-PlatformLabel] [-Rid] Same leg on Windows
verify-vectors.sh <label> Sentinel derivation only: semantic re-derive plus a SHA-256 comparison of the emitted file
coverage-summary.ps1 -Path <cobertura> Reduces a Cobertura report to the two-scope summary committed here

These are maintainer tooling for evidence collection, not part of the shipped occam CLI. The checks they wrap are shipped — occam canary selftest, vectors and smoke all run from the published binary, which is what makes the evidence reproducible by someone else.