carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1{
2 "approved_by": "Paul",
3 "approved_on": "2026-10-08",
4 "entries": [
5 {"id": "digests.rollback-resign", "file": "internal/release/digestwords.go", "text": "rollback: %s %s would go back to %s, which has no signed digest. Run carlos channels resign --app %s %s first, or promote a newer build"},
6 {"id": "digests.marker-unreadable", "file": "internal/release/digestwords.go", "text": "%s: the pointer digest marker for account %s could not be verified, so nothing was signed: %v"},
7 {"id": "digests.resign-changed", "file": "internal/release/digestwords.go", "text": "%s moved since these digests were shown. Nothing was signed. Run the command again"},
8 {"id": "digests.resign-unreadable", "file": "internal/release/digestwords.go", "text": "%s has no readable manifest, so its digest cannot be confirmed. Promote a newer build instead"},
9 {"id": "digests.resign-no-marker", "file": "internal/release/digestwords.go", "text": "resign: pointer digests are not turned on for account %s. Upgrade every writer, then run carlos channels digests on --account-id %s first"},
10 {"id": "digests.resign-intro", "file": "channels_digests.go", "text": "Re-sign %s %s with these manifest digests:"},
11 {"id": "digests.resign-row", "file": "channels_digests.go", "text": " %s %s %s"},
12 {"id": "digests.resign-computed", "file": "channels_digests.go", "text": "from the bucket now: check it"},
13 {"id": "digests.resign-kept", "file": "channels_digests.go", "text": "already signed"},
14 {"id": "digests.resign-missing", "file": "channels_digests.go", "text": "no manifest: left without a digest"},
15 {"id": "digests.resign-prompt", "file": "channels_digests.go", "text": "Sign this pointer? Type yes to continue: "},
16 {"id": "digests.resign-done", "file": "channels_digests.go", "text": "re-signed %s %s with digests"},
17 {"id": "digests.resign-aborted", "file": "channels_digests.go", "text": "nothing signed"},
18 {"id": "digests.channels-header", "file": "channels_digests.go", "text": "CHANNEL\\tVERSION\\tPROMOTED\\tTAG\\tDIGESTS"},
19 {"id": "digests.state-yes", "file": "channels_digests.go", "text": "yes"},
20 {"id": "digests.state-no", "file": "channels_digests.go", "text": "no"},
21 {"id": "digests.state-straggler", "file": "channels_digests.go", "text": "no (written after digests were turned on: an old writer may still be in use)"},
22 {"id": "digests.status-on", "file": "channels_digests.go", "text": "pointer digests: on for %s since %s"},
23 {"id": "digests.status-off", "file": "channels_digests.go", "text": "pointer digests: off for %s"},
24 {"id": "digests.status-header", "file": "channels_digests.go", "text": "ACCOUNT\\tAPP\\tCHANNEL\\tVERSION\\tDIGESTS"},
25 {"id": "digests.status-none-left", "file": "channels_digests.go", "text": "every channel's pointer carries digests: CARLOS_REQUIRE_POINTER_DIGEST can be turned on"},
26 {"id": "digests.turned-on", "file": "channels_digests.go", "text": "pointer digests on for %s. Upgraded writers sign digests from now on"},
27 {"id": "digests.turned-off", "file": "channels_digests.go", "text": "pointer digests off for %s. Boxes that have already seen digests keep refusing pointers without them"},
28 {"id": "digests.all-accounts", "file": "channels_digests.go", "text": "every account"},
29 {"id": "digests.cli-heading-resign", "file": "docs/site/cli.md", "text": "Re-signs a channel's current pointer with the sha256 of each build's manifest, so boxes that insist on digests accept it. It shows every digest first and signs only when you type yes. Use it on a channel nobody has promoted to since digests were turned on. It refuses until `carlos channels digests on` has been run for the account."},
30 {"id": "digests.cli-heading-digests", "file": "docs/site/cli.md", "text": "Shows whether channel pointers carry manifest digests, and lists the channels that still do not. on and off are for platform operators: on tells upgraded writers to sign digests, and off stops them while a writer is being fixed. Turn it on only after every console, CLI and deploy script that promotes has been upgraded."},
31 {"id": "digests.roll-note", "file": "README.md", "text": "**Pointer digests (#253): writers before readers.** Once a box has verified a channel pointer that carries manifest digests, it refuses pointers for that channel without them. So digests are turned on in order. First upgrade every writer: every console, and every CLI or deploy script that promotes, rolls back or fast-tracks. Then run `carlos channels digests on`. Then watch `carlos channels digests`: a channel marked as written by an old writer means one is still in use. Rolling a writer back below this release stops it writing pointers boxes accept; `carlos channels digests off` suspends digests while it is fixed, but does not clear the boxes that have already seen them. When `carlos channels digests` lists nothing, set `CARLOS_REQUIRE_POINTER_DIGEST=on` in every box's host.env, so a new box refuses old pointers too."},
32 {"id": "digests.console-no-key", "file": "internal/console/apidigests.go", "text": "this console has no release key"},
33 {"id": "digests.console-pointer-write", "file": "internal/console/apidigests.go", "text": "could not write the pointer"},
34 {"id": "digests.console-marker-write", "file": "internal/console/apidigests.go", "text": "could not write the marker for %s"},
35 {"id": "digests.activity-resigned", "file": "internal/console/apidigests.go", "text": "re-signed %s at %s with manifest digests (cli)"},
36 {"id": "digests.unknown-account", "file": "channels_digests.go", "text": "no account %s on this console, so nothing was changed for it"},
37 {"id": "digests.status-error", "file": "channels_digests.go", "text": "pointer digests: unknown for %s, the report could not be read: %s"}
38 ]
39}
40