Archived
Phase C of model-access (ADR 0050). Refresh above calls an in-process VendorRefresher, which would open the at-rest envelope inside the control plane's own process. Anthropic must not: its refresh runs on the manager node. So add SubmitRefresh, the companion that publishes a refresh a manager node already performed -- it is given only the new access token in the clear (sealed per holder, as any accepted key) and an opaque re-sealed refresh envelope (stored unopened). The refresh token in the clear never crosses this boundary. The reseal-and-publish half is extracted and shared with Refresh, so the sealing logic is one implementation. CLI: licence grant (print the opaque envelope), set-grant (store a module-produced envelope -- adoption), submit-refresh (access token + optional rotated envelope). Tests defend that the manager alone opens the refresh token and the control plane never holds it in the clear. Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF