evidence · 1.7 KiB

card-shell-policy-host.md

Committed at docs/evidence/card-shell-policy-host.md. This is what grounds the requirements that cite it.

Open raw source

Product card policy: coordinator host review

On 2026-09-23 the coordinator reviewed the actual C policy in nix/card-shell-policy/card-shell-policy.c and its integration contract. Source commits 237be7b and c2ece6a were integrated as 1755cb3 and 8f21cf3. The adapter compiles this shared source; there is no independent Python state model. Adapter integration remains a separate task.

Command run from the integration worktree:

python3 tests/test_card_shell_state.py
openspec validate the-shell-manages-apps-as-cards --strict

Both exited zero. All 21 scenarios passed with AddressSanitizer and UndefinedBehaviorSanitizer. They exercise dynamic snapshots, horizontal tracking, adjacent-card identity, private/unavailable states and transitions, graceful close, refusal, timeout, source removal, edge entry, multiple contacts, button equivalents, keyboard geometry and reduced-motion outcomes. A 257-card fixture avoids baking the two-app architecture probe into the product policy.

Review found that locally cancelling a gesture and ending a complete touch stream need different semantics. Waiting for an up event after compositor cancellation or device removal can swallow future input indefinitely. The correction adds cs_stream_cancel, which clears all held contacts immediately; locally rejected gestures still consume their remaining releases. Tests cancel without any later up and then complete a fresh gesture, including after a multiple-contact abort. The adapter owner received this API requirement.

This closes only the host policy task. Actual scene buffers, privacy pixels, surface lifetimes, UI routes, keyboard focus, live rendering, physical touch, performance and image integration remain UNVERIFIED by this evidence.