nocp: shared-variables/v1 + repo-readonly/v1 (no CP credential). write: shared-variables/v1 + cp-write-token/v1 + repo-readonly/v1. repo-readonly/v1 is last in both (WF-COMP-34); neither layers cp-service-token/v1 or gitea-ssh/v1. HOLD: do not merge until the CP release (AU-55/55a/56/57, WF-COMP-31b engine/ dispatch/compiler composite-set changes) and the dispatcher image (cp-write-token delivery, AU-55b) are deployed. The dispatcher advertises every composite found in the CRS-synced harnesses/ tree (dispatcher/poller.py _collect_supported_harnesses), so merging this to origin/main IS the advertisement event. Claude-Session: https://claude.ai/code/session_01N218bERyNeLhbLmDRDvbWF