Prove one pinned instruction and skill reaches every provider in the recorded required-provider set before the storage and projection contracts harden. The four named provider families are the initial inventory; the required set derives from recorded supported-status, so a vendor-withdrawn provider changes the set only by an explicit recorded decision and never by silently failing this gate.
Define providers.json and providers.schema.json rows for Claude Code, OpenCode, Codex CLI, and Gemini CLI with binary, supported version range, discovery paths, adapter form, repository layouts, and symlink rules.
Define one provider_projection.py interface that renders a synthetic core skill plus project overlay into an isolated fixture; later activation must consume this interface without a provisional renderer.
Probe each client’s static native instruction and skill discovery from repository root, nested directory, worktree, and monorepo layouts.
Pin Gemini’s physical in-tree adapter constraint and the supported symlink semantics for Claude, OpenCode, and Codex with actual client-version receipts.
Fail closed when a client binary, required discovery path, effective instruction receipt, or skill receipt is absent; persist actionable evidence.
Record provider distribution/fork identity and immutable build identity (source revision and/or allowed binary digest) SEPARATELY from the supported compatibility range, and resolve which binary a shell actually selects rather than trusting a version string.
Model provider SUPPORTED-STATUS and succession as first-class row data (supported | deprecated-by-vendor | superseded-by ), so a client the vendor has retired is represented as a state the platform handles rather than an assumption the acceptance gate silently fails on. Live instance: gemini-cli 0.42.0 returns reasonCode UNSUPPORTED_CLIENT for its individual tier and directs migration to a successor product.
Treat headless workspace-trust gating as part of the discovery contract: a client that refuses to run non-interactively without an explicit trust opt-in (gemini requires GEMINI_CLI_TRUST_WORKSPACE or —skip-trust) must be probed with that opt-in recorded in the receipt, and its absence must fail closed with actionable evidence rather than reading as a discovery miss.
Verification
Write failing positive, negative, interruption, concurrency, and idempotency cases before implementation.
Pin the consumer-visible outcome through the real CLI/runtime entry point.
Run focused pytest and the owning runtime self-test with a 150-second test timeout.
Run python -m scripts.harness_dist verify --root . when distributed artifact classification changes.