settings-2-promotion-records
Signed promotion records (instance update settings spec rev 11, §4.1 and §4.3a; settings plan 2).
Every promotion that moves a channel head to a new version writes releases/<acct>/<app>/promoted/<version>, signed in the pointer's wire format (grant attached for a scoped key), binding the version to its manifest digest. It is written after the retry guard and the authorize callback and before the pointer's conditional write; repeats and renewals write none, and nothing is backfilled. AuthorizedManifest checks a record and its digest; nothing installs on it until plan 4.
carlos releases authorize shows a build's manifest and file digests and, on "yes", signs a record for exactly those bytes (root key; idempotent; refuses if the manifest moved). Console door GET/POST /api/cli/apps/{account}/{app}/releases/{version}/authorize: person-only, membership-level (ruling R12, spec §4.1), write-budgeted, admitted by the claim boundary (new hostops family promotion-record).
A move's held stage (root relay and the agent-side T7 path) installs only a build a promotion record or a verified, ratchet-admitted pointer names, bound to that digest; digestless history entries on digested channels are not evidence; faults that cannot tell are retried, never dropped. The fleet store door serves a box its own account's records. Pruning removes a version's record; purging removes the app's.
internal/updatewords holds the member-facing drafts (17). They await Paul's copy review: copy-review/strings.json in the worktree (TODO-COPY in words_authorize.go). Do not merge before that review.
Astra final review: REJECT (3 Important, 1 Minor), all fixed; scoped re-review ACCEPT. See docs/superpowers/plans/CODEX-FINDINGS-SETTINGS-IMPL-2*.md. Merged with main at 412ca787.
Discussions
- No discussions on this branch yet.
Tasks
- No tasks yet.
Activity
- claude agent, operated by paul@keymail.dev pushed cf58b27b9 settings-2: reconcile with main (held-stage authorization on the claim path)
- claude agent, operated by paul@keymail.dev pushed 04d5e3886 Merge origin/main (d905a676) into settings-2-promotion-records
- claude agent, operated by paul@keymail.dev pushed 6b033c361 Merge origin/main (29dab2d8) into settings-2-promotion-records
- claude agent, operated by paul@keymail.dev pushed 6a7d58e9d settings-2: reconcile with main (record-write census)
- claude agent, operated by paul@keymail.dev pushed fee327ba1 Merge origin/main (a3bf7d6c) into settings-2-promotion-records
- claude agent, operated by paul@keymail.dev pushed 7ea90f330 settings-2: apply Paul's approved copy and pin it
- claude agent, operated by paul@keymail.dev pushed a18b0a290 settings-2: the authorize door is the system operators' (R19)
- claude agent, operated by paul@keymail.dev pushed 629846405 settings-2: Astra's final review findings (REJECT, fixed) and scoped re-review (ACCEPT)
- claude agent, operated by paul@keymail.dev pushed 2c3f0ad8a settings-2 final review: the authorize write-failed draft no longer claims nothing was signed
- claude agent, operated by paul@keymail.dev pushed 0fc74c118 settings-2 final review: the fleet store door serves a box its own account's promotion records
- claude agent, operated by paul@keymail.dev pushed 6f79b01d3 settings-2 final review: held stages observe every verified pointer and skip digestless entries on digested channels
- claude agent, operated by paul@keymail.dev pushed 98e3f1649 Merge origin/main (moves-phase1-4) into settings-2-promotion-records
- claude agent, operated by paul@keymail.dev pushed 47037e314 settings-2 task 8: carlos releases authorize
- claude agent, operated by paul@keymail.dev pushed 85c23a677 settings-2 task 7: a held stage that cannot tell is retried, never dropped
- claude agent, operated by paul@keymail.dev pushed 9d4f8d0d9 settings-2 task 7: a move's held stage installs only §4.1-authorized builds
- claude agent, operated by paul@keymail.dev pushed 442ada567 settings-2 task 6: the authorize POST draws the write budget
- claude agent, operated by paul@keymail.dev pushed 9d7f410f3 settings-2 task 6: the console's authorize door (person-only, root-signed)
- claude agent, operated by paul@keymail.dev pushed 21096648a settings-2 task 5: pruning and purging remove promotion records
- claude agent, operated by paul@keymail.dev pushed 4fb51f77a settings-2 task 4: report a manifest read failure as itself, not as a change
- claude agent, operated by paul@keymail.dev pushed c41c0c406 settings-2 task 4: PlanAuthorize and Authorize (root key, explicit, never automatic)
- claude agent, operated by paul@keymail.dev pushed fcaa86df3 settings-2 task 3: a new head's promotion writes its signed record after authorization, before the pointer moves
- claude agent, operated by paul@keymail.dev pushed fac0f5330 settings-2 task 2: reader-side refusal tests for promotion records
- claude agent, operated by paul@keymail.dev pushed 024fb5547 settings-2 task 2: the signed promotion record and AuthorizedManifest
- claude agent, operated by paul@keymail.dev pushed 75aae4249 settings-2 task 1: internal/updatewords, the draft strings for the settings plans