cf:test · v2.0.0 · 2026-09-03 · sha256 e1af453215b71fc9
cf:test v2.0.0A
Immutable. This exact content is served forever at /api/v1/blob/e1af453215b71fc9.
--- name: cf:test description: "Execute the smallest adequate verification scope and own the canonical execution proof." user-invocable: true when_to_use: "Use after implementation, for a feature scope, or for an explicit test request." category: testing keywords: [test, unit, integration, e2e, proof] argument-hint: "[scope|--full|--ui <url>|--ui-auth <url>|--ui-flow <url>]" metadata: author: haposoft version: "2.0.0" --- # Test — execution proof owner `cf:test` executes the smallest adequate real verification and owns the canonical execution result. For process-first work it returns one typed proof handoff to the controller; it never writes task state or the inline Receipt. Review consumes validated proof and never invents or duplicates execution. ## Usage ```text /cf:test /cf:test --full /cf:test <scope-or-path> /cf:test <feature-name> /cf:test specs/<feature> /cf:test specs/<feature>/task-NN-<slug>.md /cf:test --ui <url> /cf:test --ui-auth <url> /cf:test --ui-flow <url> ``` ## Hard gates - Never claim a pass without executing the exact relevant command. - Never mock, weaken, delete, or skip a failing assertion to obtain green. - Missing tooling, a missing command, nonzero exit, or zero executed tests is never `PASS`. Do not auto-install project-local tooling during proof. - Preserve exact commands, counts, output, reachability, proof level, Base, Head, artifact hashes, and redaction labels. - Source, installed, and live proof are distinct. Live adherence is `[UNVERIFIED]` without a host invocation. - Use only `PASS | PASS_WITH_WARNINGS | FAIL | BLOCKED`. Unknown, malformed, partial, contradictory, duplicate, skipped, or stale proof fails closed. ## Target routing Classify current filesystem bytes before selecting tests. Use `lstat` so broken links count as markers. Never migrate or repair packet state while testing. | Observed state | Route | |---|---| | Valid regular `plan.md` with `Specs-Contract: process-first-ready-v1`, one or more valid regular flat `task-NN-*.md`, and no legacy marker | Process-first | | Any flat marker that is orphaned, malformed, duplicated, symlinked, nonregular, or mixed with a legacy marker | `BLOCKED` | | Valid regular legacy root resolving every nested task and separate receipt, with no flat marker | Legacy adapter | | Orphan, malformed, symlinked, nonregular, identity-conflicting, or mixed legacy state | `BLOCKED` | | No flat or legacy marker | Ordinary non-Spec testing | A flat marker is a direct-child `plan.md` or `task-NN-*.md`. A legacy marker is `spec.json`, a nested legacy task, or a separate legacy receipt. See `references/execution-strategy.md` for the complete validation truth table. ## Spec-Aware Mode <SCOPE-GATE> For a feature target, test only current accepted scope, the active task's exact Verification Plan, and reachable runtime surfaces. Missing or orphaned reachability fails even when a command exits successfully. </SCOPE-GATE> For a process-first feature: 1. Read current `plan.md` and flat task bytes. Select only a contained regular task whose dependencies allow proof. 2. Use the task's exact `Command`, exact unique `Named probes`, `Reachability`, `Oracle`, `Counterexample`, required proof level, and artifact declaration. 3. Run the smallest adequate proof. `--full` expands scope but cannot weaken the Verification Plan or substitute unrelated green tests. 4. Return exactly one canonical `test-proof-v1` object. Do not edit `plan.md`, `Status:`, the task's `## Receipt`, or any sibling task. 5. The Develop controller validates the payload, recomputes its digest, checks current provenance, and alone writes process-first Status and inline Receipt. ## Execution 1. Detect commands from task and repository files; never invent them. 2. Run a cheap compile or typecheck precheck when the project provides one. 3. Execute the exact task command and all named probes with real counts. 4. Inspect negative paths, runtime reachability, and declared artifacts. 5. Capture tracked, untracked, and ignored project-command drift separately from runtime Head. Never silently clean or hide project changes. 6. Redact sensitive material, validate the complete proof object, then return a concise human report separately from the machine handoff. Required proof follows the behavior: | Surface | Adequate proof | |---|---| | pure logic/parser/validator | unit plus negative path | | stateful UI or module wiring | component/integration plus mounted path | | API, persistence, provider, or process boundary | real contract/state handoff | | complete user workflow | E2E or UI flow | | layout, focus, labels, keyboard | viewport/visual/accessibility check | | regression | reproduction before fix plus passing regression | | security/performance | only when requirement, risk, or boundary requires it | ## Process-first proof handoff The machine payload is canonical UTF-8 JSON with exact top-level keys: ```text schema_version, target, verdict, command, exit, counts, provenance, proof_level, expected, observed, reachability, artifacts, branches, raw_output, redactions, payload_sha256 ``` `schema_version` is exactly `test-proof-v1`; unknown keys block. Branch IDs map one-to-one to exact unique Named probes. The digest is lowercase SHA-256 of stable JSON excluding only `payload_sha256`. Exact field shapes, nullable pre-execution `BLOCKED` rules, and aggregation live in `references/execution-strategy.md`. Only all required branches passing with exact command, exit 0, executed > 0, failed/skipped 0, matching Base/Head, `reachability.status: PASS`, valid artifact hashes, and safe redaction can aggregate `PASS`. Aggregate in this order: `FAIL` > `BLOCKED` > `PASS_WITH_WARNINGS` > `PASS`. ## Persistent-write and authentication boundary - `.hapo/test-memory.json` is optional read-only context. Hash absent/present bytes before and after; never create, merge, or update it during proof. - Put only Test-owned temporary files outside the project and clean them. Never create Test-owned reports, caches, lazy installs, or auth state. - For authenticated UI proof, prefer the project's own auth helper. Otherwise use only an explicitly selected user-controlled profile bound to a confirmed HTTPS or localhost origin, identity, permissions, and action scope. - Block cross-origin redirects and destructive production actions without fresh consent. Never ask for, export, paste, or persist cookies or tokens. - Redact Authorization, Cookie, Set-Cookie, session tokens, credentials, and scoped PII from commands, headers/bodies, logs, screenshots, and reports. If safe proof is impossible, return `BLOCKED`. ## Verdict and report ```markdown ## Test Verdict **Status:** PASS | PASS_WITH_WARNINGS | FAIL | BLOCKED **Scope:** [target and selected proof] **Commands:** [exact redacted commands] **Exit:** [actual result] ### Results - Passed: N | Failed: N | Skipped: N | Executed: N - Reachability: PASS | FAIL | BLOCKED - Proof level: source | installed | live - Project-command drift: [tracked/untracked/ignored, or none] ### Action - [controller handoff, exact failure, or changed prerequisite] ``` Do not place the full JSON payload, secrets, verbose raw logs, or screenshots in the concise report. `PASS_WITH_WARNINGS` remains unfinished; only literal validated `PASS` may be synchronized by the controller. ## Legacy workflow compatibility A valid legacy packet keeps the v2.1 adapter, legacy task resolution, and its separate receipt path. Do not write process-first inline proof into it. If legacy proof identities conflict or the packet is mixed/malformed, return `BLOCKED`; never choose one source or migrate it during unrelated testing. Flash legacy behavior remains proof-only: testing may make a current `FLASH_UNVERIFIED` task eligible for trusted sync-finalize, but never promotes state or unblocks dependents itself. Only explicit trusted sync-finalize may promote it. ## References - `references/execution-strategy.md` — routing, payload schema, aggregation, blast radius, UI safety, and report separation. - `references/failure-triage.md` — failure classification and four verdicts. - `references/test-memory.md` — optional read-only historical context.