Record: S1 reproducible measurement contract
Revision: 3dc2c3feaa17af591eb6e819a055d26ab6990efb
Setup: Run archived setup.py.txt as Python from source checkout; copy collector.py.txt to printed WORK/collector.py. Never run against a real instance. All commands use collector ENV and APP working directory.
Fixture: Existing parity_minimal_v1 plus N synthetic canonical posts, N = 1000, 10000, 40000; deterministic IDs 400000 through 400000+N-1, fixed date, one tag, 2048-byte bodies. Existing three fixture posts retained and separately counted. One Git commit. Fixture generation excluded from timings.
Variants: Independent body-size, reply fanout, reactions, pin count, history commit count and large-commit paths. Each needs its own disposition; baseline does not establish these costs.
Isolation: Git archive source copy outside repository; no inherited credentials/environment; empty explicit PHP secrets; repository/database/static/public/image/queue/scoring paths under disposable root. External providers and automatic scoring/replies disabled. HTTP loopback only. No external tools installed.
Limits: 128 MiB PHP per process; 600 seconds per command; 30-second overlap windows; concurrency 1/2/4; aggregate sampled process RSS at most min(1 GiB,25 percent initial available RAM); scratch allocation at most 2 GiB. Stop dependent workloads at semantic mismatch or resource stop, retain failures.
Repeats: Three independent process invocations for each eligible CLI case. HTTP first request is process-cold then two process-warm requests; OS cache cold is unavailable without global cache interference. No global cache flushing.
Metrics: Monotonic wall time; PHP shutdown peak allocation; aggregate process group RSS at 20ms sampling; distinct observed children; last-seen proc I/O totals. Short-lived processes may evade sampling. RSS is a sampled lower bound, shared pages can be counted twice. I/O measures physical block bytes, not application read volume. PHP peak differs from RSS.
Loaded/used: Fixture and selected/returned counts are validated where observable; internal records loaded unavailable absent instrumentation. Do not infer loaded count from output count or SQL limits.
Overhead: Three PHP no-op samples retain collector/launcher startup and sampling overhead; no subtraction. Tiny full rebuild and body/count parity passed. PHP telemetry writes one line per process/request outside response bodies. Shutdown timing may lag client completion.
Correctness: Check status, returned IDs/order/body where accessible, complete database body/count parity after rebuild, output activation and failure/retry retention. Unexpected errors are retained and block dependent acceptance.
Targets: Ordinary-read p95 at most 1 second, zero unexpected errors; proposed PHP allocation budgets public 16/32 MiB and maintenance 48/64 MiB. These are study criteria, not host limits.
Reset: Stop process groups before resetting. Delete only the disposable WORK printed by setup after checking marker.txt. Re-run setup for a pristine campaign; never reset the real repository. fixture(N) resets only WORK/repository; rebuild refreshes derived model.
Recovery: A killed candidate job may leave temporary candidates/locks. Retry the same ordinary command; inspect ./v3 rebuild diagnose first. Preserve logs and failed candidates until results are archived.
Host boundary: Local PHP 8.1 CLI/dev server; PHP 8.3/FastCGI, production data, true disk-cold reads and long-lived FPM pools unverified.

Collector revision in S4: InvocationSupervisor starts a separate session. Earlier RSS/I/O samples observe only the launch process group and can miss these descendants; they are lower bounds, not full process-tree peaks. S4 final import recovery and all later samples discover descendants by PPID as well as group. Stop captures and kills descendants before parents; sampling still cannot capture exited children. Initial forced import killed only launch group, child completed; that interruption attempt is invalid and retained. Final clean destination interruption/resume passed with descendant supervision. HTTP first-pass telemetry/session limitations are recorded in S2; use final setup.

S7 clarification: Only the first request per server process is process-cold, not the first request to each route. Later routes reuse the server process. PHP -r does not execute the prepend file; no-op allocation is unavailable. Final setup adds explicit PHP sample labels; earlier CLI attribution depends on execution sequence. Static generation/activation does not mean every PHP route is a static hit: /latest and /top remain dynamic here; final root artifact and separate file-server byte checks establish the actual tested delivery paths.