# test-task.sh coverage with DOCKER_HOST=unix:///nonexistent.sock Docker info refuses this endpoint. Four conditional blocks are skipped; printed skips count as neither passes nor failures. The skipped blocks contain 51 + 8 + 11 + 2 = 72 checks. The 26 executed checks plus these 72 account for the Docker-capable 98; this run claims only the executed 26. Executed: schema/mission validation, immutable validation, prune receipts and retention, onboarding profile, and absence of an agent identity on a headless run. ## Skipped adapter seam, mission/retry, skills/seat skills, role contracts/ceilings, seat fail-closed resolution, capability policy and user injection Source lines 139-391: - mock adapter: gate passes on matching mock response - mock adapter: expect-mismatch recorded - mismatch reason recorded - unknown adapter fails closed - mission task runs via mock adapter - mission section injected into generated prompt - retry of mission run succeeds - retriedFrom lineage recorded - mission section present after retry (relative path resolved) - retry of missing run exits 4 - skill install bundled ms-tools - installed to skills-available - double install refuses - activate enables skill - enabled dir populated - uninstall while enabled refuses - deactivate moves back to available - uninstall removes from available - seat with enabled skill launches - skill path delivered to adapter - shipped researcher contract resolves (ceiling + network) - resolve-role refuses a non-role document (conductor policy) - resolve-role refuses name/filename mismatch - resolve-role refuses unknown network declaration - resolve-role refuses duplicate role tool - resolve-role refuses unsupported tool - resolve-role refuses missing contract file - version 1 role prints no contract line - shipped version 2 roles resolve with their contracts (pm, cto, coder, reviewer) - resolve-role accepts a minimal version 2 role - resolve-role refuses an action outside the vocabulary - resolve-role refuses a gated-only action in a role file - resolve-role refuses a Vikunja verb no role may hold - resolve-role refuses a version 2 role whose contract is missing - resolve-role refuses a contract that is a symbolic link - seat launches under role ceiling - role ceiling narrows seat tools (read,write,bash -> read,bash) - narrowing recorded loudly - missing role contract refuses launch (exit 2) - missing-contract refusal names the role - empty ceiling intersection -> tool-free seat - tool-free outcome recorded loudly - overridden agents dir without seat definition refuses (exit 4) - seat-resolution refusal names the seat - policy: mission only -> mission tools - policy: task only -> task tools - policy: both -> intersection (task narrowed) - policy: empty intersection -> tool-free - invalid mission capabilities rejected - task run with user layer present - user context dispatched into generated prompt ## Skipped workspace and capability mock launches Source lines 395-423: - workspace+tools task runs via mock - workspace path + tools delivered to adapter - persistent workspace created on host - plain task still runs (no workspace/tools) - workspace var present but empty when absent - tools empty when absent - unknown tool exits 2 - workspace traversal exits 2 ## Skipped live provider task and session fork Source lines 442-492: - live hello task succeeds with exact marker - result.json written in run dir - result.json contents are correct - wrong expectExact fails with exit 1 (reason: expect-mismatch) - each run gets a distinct run dir (no clobber) - list shows both runs - fork base: teach succeeds - fork child recalls ancestor context - forked child recalled ancestor code word - ancestor session untouched by fork - child session dir has its own branch file ## Skipped live user recall pair Source lines 517-527: - user recall run succeeds - recalled user name (response: $RESP)