carlos / platform Public

runbook: paused state, the dev console's claim runtime off (2026-10-19)

7.4's console-config --enable-console-runtime reversed on sophie:
claim-console.env back to 6.3's off form (CARLOS_HOST_CLAIM= blank),
the 7.4 file and drop-in saved under /root/claim-trial/paused-20261019,
guard drop-in and protected console unchanged. Records the checks and
the exact resume.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev 8a08fca569bb30959489288644890043768069dd parent 6e35f73
1 file changed, +63 −0
  • docs/superpowers/plans/2026-10-16-claim-activation-dev-cohort1.md +63 −0

CI passed — run details

CI log
=== gate ===
cd launchctx && go vet ./... && go test ./... -count=1
ok  	amadan.net/carlos/platform.git/launchctx	0.011s
?   	amadan.net/carlos/platform.git/launchctx/controlname	[no test files]
?   	amadan.net/carlos/platform.git/launchctx/wireid	[no test files]
go vet ./...
gofmt -l .: clean
go test ./... -count=1 -timeout 30m
ok  	github.com/carlosframework/platform	296.635s
?   	github.com/carlosframework/platform/cmd/changelog	[no test files]
ok  	github.com/carlosframework/platform/cmd/console	2.983s
ok  	github.com/carlosframework/platform/cmd/moveprobe	92.152s
ok  	github.com/carlosframework/platform/cmd/zddprobe	0.699s
ok  	github.com/carlosframework/platform/internal/activator	250.868s
ok  	github.com/carlosframework/platform/internal/agentsock	0.014s
ok  	github.com/carlosframework/platform/internal/alerting	0.003s
ok  	github.com/carlosframework/platform/internal/analytics	0.018s
ok  	github.com/carlosframework/platform/internal/appconfig	2.441s
ok  	github.com/carlosframework/platform/internal/apperr	0.075s
ok  	github.com/carlosframework/platform/internal/applog	0.131s
ok  	github.com/carlosframework/platform/internal/awsinv	0.003s
ok  	github.com/carlosframework/platform/internal/boxchoice	0.004s
ok  	github.com/carlosframework/platform/internal/boxid	0.801s
?   	github.com/carlosframework/platform/internal/boxid/boxidtest	[no test files]
?   	github.com/carlosframework/platform/internal/boxid/internal/signtest	[no test files]
ok  	github.com/carlosframework/platform/internal/boxvolumes	0.008s
ok  	github.com/carlosframework/platform/internal/caps	0.013s
ok  	github.com/carlosframework/platform/internal/certwarm	0.002s
ok  	github.com/carlosframework/platform/internal/cgroup	0.691s
ok  	github.com/carlosframework/platform/internal/changelog	0.302s
ok  	github.com/carlosframework/platform/internal/claimactivation	0.026s
ok  	github.com/carlosframework/platform/internal/clamd	0.054s
?   	github.com/carlosframework/platform/internal/cliflag	[no test files]
ok  	github.com/carlosframework/platform/internal/console	402.183s
?   	github.com/carlosframework/platform/internal/controlname	[no test files]
?   	github.com/carlosframework/platform/internal/controlsock	[no test files]
ok  	github.com/carlosframework/platform/internal/dbdoor	5.662s
ok  	github.com/carlosframework/platform/internal/dbdoor/dbdoortest	0.008s
ok  	github.com/carlosframework/platform/internal/dbverify	0.004s
ok  	github.com/carlosframework/platform/internal/dnsrec	0.002s
ok  	github.com/carlosframework/platform/internal/docsite	0.004s
ok  	github.com/carlosframework/platform/internal/domains	2.418s
ok  	github.com/carlosframework/platform/internal/doorkey	0.006s
ok  	github.com/carlosframework/platform/internal/economics	0.005s
ok  	github.com/carlosframework/platform/internal/edge	44.905s
?   	github.com/carlosframework/platform/internal/edgeproof	[no test files]
ok  	github.com/carlosframework/platform/internal/edgesfile	0.007s
ok  	github.com/carlosframework/platform/internal/fleetapi	0.130s
ok  	github.com/carlosframework/platform/internal/gate	1.655s
ok  	github.com/carlosframework/platform/internal/genselect	0.014s
ok  	github.com/carlosframework/platform/internal/geo	0.018s
ok  	github.com/carlosframework/platform/internal/geoip	0.029s
ok  	github.com/carlosframework/platform/internal/historyreadback	0.154s
ok  	github.com/carlosframework/platform/internal/host	175.273s
ok  	github.com/carlosframework/platform/internal/hostactors	0.510s
ok  	github.com/carlosframework/platform/internal/hostbox	2.728s
ok  	github.com/carlosframework/platform/internal/hostclaim	0.590s
ok  	github.com/carlosframework/platform/internal/hostevidence	0.011s
ok  	github.com/carlosframework/platform/internal/hostexec	4.679s
ok  	github.com/carlosframework/platform/internal/hostfence	0.042s
ok  	github.com/carlosframework/platform/internal/hostfiles	10.419s
ok  	github.com/carlosframework/platform/internal/hostfloor	0.012s
ok  	github.com/carlosframework/platform/internal/hostguard	1.039s
ok  	github.com/carlosframework/platform/internal/hostops	1.604s
?   	github.com/carlosframework/platform/internal/hostops/fencerelease	[no test files]
ok  	github.com/carlosframework/platform/internal/hostops/internal/fencerelease	0.012s
ok  	github.com/carlosframework/platform/internal/hostquarantine	0.011s
ok  	github.com/carlosframework/platform/internal/hostrelocate	0.449s
ok  	github.com/carlosframework/platform/internal/hostresolve	0.141s
ok  	github.com/carlosframework/platform/internal/hostwrite	0.012s
ok  	github.com/carlosframework/platform/internal/infraview	0.012s
ok  	github.com/carlosframework/platform/internal/instancectl	5.208s
ok  	github.com/carlosframework/platform/internal/instanceexec	2.733s
ok  	github.com/carlosframework/platform/internal/instancefs	0.017s
ok  	github.com/carlosframework/platform/internal/instancekey	0.012s
ok  	github.com/carlosframework/platform/internal/instanceupdates	0.007s
ok  	github.com/carlosframework/platform/internal/layout	1.537s
ok  	github.com/carlosframework/platform/internal/lbhealth	0.002s
ok  	github.com/carlosframework/platform/internal/lease	9.786s
ok  	github.com/carlosframework/platform/internal/lease/leasetest	0.006s
ok  	github.com/carlosframework/platform/internal/ledger	0.011s
ok  	github.com/carlosframework/platform/internal/mail	0.177s
ok  	github.com/carlosframework/platform/internal/maintenance	0.073s
ok  	github.com/carlosframework/platform/internal/maintenanceexec	5.500s
ok  	github.com/carlosframework/platform/internal/maintenanceguard	0.068s
ok  	github.com/carlosframework/platform/internal/metrics	0.005s
ok  	github.com/carlosframework/platform/internal/moves	20.966s
ok  	github.com/carlosframework/platform/internal/moves/archive	0.827s
ok  	github.com/carlosframework/platform/internal/objstore	0.184s
ok  	github.com/carlosframework/platform/internal/ops	0.172s
ok  	github.com/carlosframework/platform/internal/park	0.192s
ok  	github.com/carlosframework/platform/internal/privatefile	0.004s
ok  	github.com/carlosframework/platform/internal/provision	17.431s
ok  	github.com/carlosframework/platform/internal/publicrelease	0.007s
?   	github.com/carlosframework/platform/internal/regionname	[no test files]
ok  	github.com/carlosframework/platform/internal/registry	5.377s
ok  	github.com/carlosframework/platform/internal/relay	7.215s
ok  	github.com/carlosframework/platform/internal/release	21.248s
ok  	github.com/carlosframework/platform/internal/rollout	3.603s
ok  	github.com/carlosframework/platform/internal/rolloutwords	0.003s
ok  	github.com/carlosframework/platform/internal/rootaws	0.007s
ok  	github.com/carlosframework/platform/internal/rootparticipation	0.057s
ok  	github.com/carlosframework/platform/internal/rootstate	0.026s
ok  	github.com/carlosframework/platform/internal/runs	0.572s
ok  	github.com/carlosframework/platform/internal/s3compat	0.007s
ok  	github.com/carlosframework/platform/internal/safefile	0.004s
ok  	github.com/carlosframework/platform/internal/schedule	2.468s
ok  	github.com/carlosframework/platform/internal/seeds	0.010s
ok  	github.com/carlosframework/platform/internal/sim/hostlife	8.352s
ok  	github.com/carlosframework/platform/internal/sim/litestreamfacts	4.329s
ok  	github.com/carlosframework/platform/internal/status	0.041s
ok  	github.com/carlosframework/platform/internal/steering	0.005s
ok  	github.com/carlosframework/platform/internal/stopevidence	0.123s
ok  	github.com/carlosframework/platform/internal/svcrole	0.002s
ok  	github.com/carlosframework/platform/internal/telemetry	0.003s
ok  	github.com/carlosframework/platform/internal/termfence	0.004s
ok  	github.com/carlosframework/platform/internal/tunnelclient	0.004s
ok  	github.com/carlosframework/platform/internal/unixdial	0.002s
ok  	github.com/carlosframework/platform/internal/updatewords	0.004s
ok  	github.com/carlosframework/platform/internal/usage	0.006s
ok  	github.com/carlosframework/platform/internal/version	0.001s
ok  	github.com/carlosframework/platform/internal/vet	1.542s
=== cross ===
--- shard 0 of 5 ---
cross-compiling darwin/arm64
--- shard 1 of 5 ---
cross-compiling darwin/amd64
--- shard 2 of 5 ---
cross-compiling linux/arm64
linux/arm64 carlos binary: 48824482 bytes (ceiling 52000000)
--- shard 3 of 5 ---
cross-compiling windows/amd64
--- shard 4 of 5 ---
cross-compiling windows/arm64
=== minio-contract ===
minio contract: arm64, minio RELEASE.2025-09-07T16-13-09Z, mc RELEASE.2025-08-13T08-35-41Z
  minio: cached, digest verified
  mc: cached, digest verified
  minio healthy on 127.0.0.1:20999
Added `local` successfully.
Bucket created successfully `local/contract-bucket`.
Bucket created successfully `local/denied-bucket`.
Created policy `contract-only` successfully.
Added user `scopeduser` successfully.
Attached Policies: [contract-only]
To User: scopeduser
  buckets and scoped user ready
=== RUN   TestDeliveredContractMinio
=== RUN   TestDeliveredContractMinio/put
=== RUN   TestDeliveredContractMinio/get_round-trips_the_body
=== RUN   TestDeliveredContractMinio/list_shows_the_key
=== RUN   TestDeliveredContractMinio/head_and_list_agree_on_the_version
=== RUN   TestDeliveredContractMinio/the_app_cannot_tag_its_own_object
=== RUN   TestDeliveredContractMinio/the_app_cannot_tag_its_own_object/not_by_PutObjectTagging
=== RUN   TestDeliveredContractMinio/the_app_cannot_tag_its_own_object/and_not_by_x-amz-tagging_on_upload
=== RUN   TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route
=== RUN   TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/not_by_CreateMultipartUpload
=== RUN   TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/not_by_CopyObject_with_a_REPLACE_tagging_directive
=== RUN   TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/but_multipart_itself_is_allowed
=== RUN   TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/and_copy_itself_is_allowed
=== RUN   TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/a_POST-policy_forged_tag_with_a_matching_version_is_still_not_a_verdict
=== RUN   TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/and_an_ordinary_tagged-with-something-else_upload_is_allowed
=== RUN   TestDeliveredContractMinio/delete_removes_it
=== RUN   TestDeliveredContractMinio/cross-bucket_denial
--- PASS: TestDeliveredContractMinio (0.02s)
    --- PASS: TestDeliveredContractMinio/put (0.00s)
    --- PASS: TestDeliveredContractMinio/get_round-trips_the_body (0.00s)
    --- PASS: TestDeliveredContractMinio/list_shows_the_key (0.00s)
    --- PASS: TestDeliveredContractMinio/head_and_list_agree_on_the_version (0.00s)
    --- PASS: TestDeliveredContractMinio/the_app_cannot_tag_its_own_object (0.00s)
        --- PASS: TestDeliveredContractMinio/the_app_cannot_tag_its_own_object/not_by_PutObjectTagging (0.00s)
        --- PASS: TestDeliveredContractMinio/the_app_cannot_tag_its_own_object/and_not_by_x-amz-tagging_on_upload (0.00s)
    --- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route (0.01s)
        --- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/not_by_CreateMultipartUpload (0.00s)
        --- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/not_by_CopyObject_with_a_REPLACE_tagging_directive (0.00s)
        --- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/but_multipart_itself_is_allowed (0.00s)
        --- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/and_copy_itself_is_allowed (0.00s)
        --- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/a_POST-policy_forged_tag_with_a_matching_version_is_still_not_a_verdict (0.00s)
        --- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/and_an_ordinary_tagged-with-something-else_upload_is_allowed (0.00s)
    --- PASS: TestDeliveredContractMinio/delete_removes_it (0.00s)
    --- PASS: TestDeliveredContractMinio/cross-bucket_denial (0.00s)
PASS
ok  	github.com/carlosframework/platform/internal/objstore	0.022s
=== RUN   TestT4StorageProbeMinio
2026/10/19 23:06:38 moves: T4: STORE: list: operation error S3: ListObjectsV2, https response error StatusCode: 403, RequestID: 18E010DE347FDC6A, HostID: 7c420053e0fbcd7f41653fdd92ffa2802c903d05303b1aa15adc2e8bb65d183f, api error SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method.
--- PASS: TestT4StorageProbeMinio (0.00s)
PASS
ok  	github.com/carlosframework/platform/internal/host	0.019s
minio contract: PASS
diff --git a/docs/superpowers/plans/2026-10-16-claim-activation-dev-cohort1.md b/docs/superpowers/plans/2026-10-16-claim-activation-dev-cohort1.md
index 9eb80319e..4be8d6d04 100644
--- a/docs/superpowers/plans/2026-10-16-claim-activation-dev-cohort1.md
+++ b/docs/superpowers/plans/2026-10-16-claim-activation-dev-cohort1.md
@@ -9,6 +9,69 @@
>
> Together these mean activating one cohort box inside a populated deployment isn't designed yet. platform-1e is writing the design note with Astra's review. Full report: platform-1e's `after236/step8-readiness-report.md`. Status: amadan #250.
+## Paused state (2026-10-19)
+
+On Paul's go, given directly to the controller and specified by platform-1e: the dev console's claim runtime is OFF while the trial is paused. This reverses 7.4's `console-config --enable-console-runtime` on sophie and nothing else. It was done from DOCS-T1 (profile `kass`) over SSM `send-command`, 22:51Z to 22:55Z.
+
+**What 7.4 wrote, read from `f3bf1214`.** `console-config` writes two files and nothing else: `/etc/carlos/claim-console.env` (root `600`) and `/etc/systemd/system/console.service.d/91-claim-runtime.conf` (root `644`, `EnvironmentFile=/etc/carlos/claim-console.env`). The env file is always `CARLOS_CONSOLE_ID=<id>`, `CONSOLE_HOME_REGION=ie` and `CARLOS_HOST_CLAIM=`. `--enable-console-runtime` only changes that last line to `CARLOS_HOST_CLAIM=1` (`activationConsoleEnvironment`). So 6.3's run wrote the off form (72 bytes) and 7.4's run changed one line of it (73 bytes). The drop-in is the same bytes both times. 6.3's guard is a separate file, `90-host-floor.conf`, holding only the `ExecStart` through `guard-exec` and the protected console. Nothing is shared.
+
+**No supported reverse.** `claims help` lists no disable option, and no commit on main after `f3bf1214` touches these files. `installActivationConsole` accepts an existing env file only if it equals the new content or that content with the flag blank. So going from on to off refuses: a `console-config` dry run without the flag, at revision 9, printed `claim activation: input or protected state refused` (22:52:57Z).
+
+**Before (22:51Z).** `console.service`: `active` since 19:35:50Z, PID 647490, `/opt/carlos/system/console/console` as `carlos`, with `CARLOS_HOST_CLAIM=1` in its environment. Its journal had `run sweep: off on a host-claim console` and `seeds pass: off on a host-claim console`. The files, all root, one link:
+
+| File | Mode | Size | sha256 | Written by |
+|---|---|---|---|---|
+| `/etc/systemd/system/console.service` | 644 | 495 | `028d6509…7bcf` | box setup (2026-09-07) |
+| `console.service.d/90-host-floor.conf` | 644 | 130 | `887585fe…5518` | 6.3, `guard-arm --console` |
+| `console.service.d/91-claim-runtime.conf` | 644 | 56 | `815226c3…e938` | 6.3 and 7.4, `console-config` |
+| `console.service.d/apps-domain.conf` | 644 | 60 | `ed501265…81ba` | earlier (2026-10-14) |
+| `console.service.d/release-key.conf` | 644 | 51 | `db00b7fc…a257` | earlier (2026-10-13) |
+| `/etc/carlos/host.env` | 600 | 677 | `1e66ddb0…27a7` | earlier; no `CARLOS_HOST_CLAIM` or `CARLOS_REGION` |
+| `/etc/carlos/claim-console.env` | 600 | 73 | `5df17bac…1d03` | 7.4, `console-config --enable-console-runtime` |
+| `/etc/carlos/release.env` | 600 | 64 | `7d6bdba3…e0d3` | earlier (2026-10-13) |
+
+**Saved copies.** `/root/claim-trial/paused-20261019/` on sophie, root `700`, made with `cp -p` and `cmp`-equal to the live files:
+- `claim-console.env`, root `600`, 73 bytes, `5df17bac42a91a02d90584edc5476c045400af57e467b2ea0815ba50b7e31d03` (7.4's file, `CARLOS_HOST_CLAIM=1`);
+- `91-claim-runtime.conf`, root `644`, 56 bytes, `815226c31a8ff4485f64ccaf9cbcd3d3a866105991aa5b03760c9890e9dae938`;
+- `SHA256SUMS.before`, root `600`, `34539e41…`: the eight files above, hashed at 22:52:40Z.
+
+**What was removed.** Only `CARLOS_HOST_CLAIM=1`. `/etc/carlos/claim-console.env` was swapped atomically (temp file, `mv`, guarded on the `5df17bac` hash) for 6.3's off form, the exact bytes `console-config` writes without the flag: `CARLOS_CONSOLE_ID=dev-console`, `CONSOLE_HOME_REGION=ie`, `CARLOS_HOST_CLAIM=` (root `600`, 72 bytes, `c1ae2900db31295090d2f4f2f9b5f6cdcca07e74545a6b1a9da039c3abf5c412`). The console ran in this state from 6.3 until 7.4. `console-config --dry-run` now accepts the file as its own: without the flag it plans the same bytes, and with `--enable-console-runtime` it plans the `=1` file, which is the resume. These are unchanged: `91-claim-runtime.conf`, `90-host-floor.conf` and the guard, `console.service`, `host.env`, every flag, leo, the roster, the floor. There was no `daemon-reload`, because no unit file changed.
+
+**Restart and checks.** `systemctl restart console.service` at 22:53:33Z, `active` the same second. A 1-second prober on `platform.dev…/healthz`, 22:53:24Z to 22:54:49Z, made 75 probes: one 502 at 22:53:33Z and 200 from 22:53:34Z. Afterwards, all PASS:
+- `/` and `/healthz` 200, `x-carlos-version: f3bf1214`.
+- The console has PID 653069, 0 restarts, and `exe` `/opt/carlos/system/console/console` as `carlos`. All four drop-ins are loaded, `90-host-floor.conf` included. Its environment has `CARLOS_HOST_CLAIM=` (empty) with `CARLOS_CONSOLE_ID=dev-console` and `CONSOLE_HOME_REGION=ie`. The guard directories are `755 root:root` and `sudo -u carlos test -x guard/carlos` passes.
+- The startup log no longer has the host-claim lines (0 matches for `off on a host-claim console` since the restart). The new startup lines are: `console: no console email (set CARLOS_CONSOLE_MAIL_FROM or CARLOS_MAIL_PLATFORM_SUFFIX, and CARLOS_MAIL_REGION); invites go by Keymail or by hand`, then `console: https://platform.dev.carlosframework.com listening on 127.0.0.1:8090`, then the known Cost Explorer lines.
+- wakecheck 200, and claimtrial 200 via `--resolve` to 18.200.150.210.
+- `carlos-edge` and `carlos-instance-control` are `active` with unchanged start times and PIDs: sophie since 07:50:46Z, leo since 07:51:53Z.
+- The bucket is unchanged. The roster is sha256 `20ebe512…` (revision 9, etag `a69f6d93…`, 19:35:16Z). The floor `moves-protocol.json` is `1a6a7e50…` and `moves-protocol-auth.json` is `3bbd48a8…` (19:33:45Z).
+- AccessDenied since 22:50Z: sophie 2, both `ce:GetCostAndUsage`; leo 0.
+
+**Resume.** Do this only on Paul's go, after the design note. Do it as 7.4, with the files put back first. From DOCS-T1, run `box_inspect "$SOPHIE"` (the box helpers) so `roster.json` and `rev` are current. Then on sophie, as root:
+
+```bash
+set -euo pipefail
+umask 077
+D=/root/claim-trial/paused-20261019
+[ "$(sha256sum /etc/carlos/claim-console.env | cut -c1-64)" = c1ae2900db31295090d2f4f2f9b5f6cdcca07e74545a6b1a9da039c3abf5c412 ]
+[ "$(sha256sum "$D/claim-console.env" | cut -c1-64)" = 5df17bac42a91a02d90584edc5476c045400af57e467b2ea0815ba50b7e31d03 ]
+[ "$(sha256sum "$D/91-claim-runtime.conf" | cut -c1-64)" = 815226c31a8ff4485f64ccaf9cbcd3d3a866105991aa5b03760c9890e9dae938 ]
+cmp "$D/91-claim-runtime.conf" /etc/systemd/system/console.service.d/91-claim-runtime.conf
+cp -p "$D/claim-console.env" /etc/carlos/.claim-console.env.resume
+mv -T /etc/carlos/.claim-console.env.resume /etc/carlos/claim-console.env
+cd /root/claim-trial
+PUB=$(cat release.pub)
+CID=$(cat console-id)
+REV=$(cat rev)
+/opt/carlos/carlos system claims console-config --roster /root/claim-trial/roster.json --expect-revision "$REV" \
+ --bucket carlos-dev-640012953448 --console-id "$CID" --public-key "$PUB" --enable-console-runtime --dry-run
+/opt/carlos/carlos system claims console-config --roster /root/claim-trial/roster.json --expect-revision "$REV" \
+ --bucket carlos-dev-640012953448 --console-id "$CID" --public-key "$PUB" --enable-console-runtime
+systemctl restart console.service
+systemctl is-active console.service
+```
+
+The `cmp` line checks that the drop-in is still the saved bytes. It was never removed, so nothing needs restoring there. If the drop-in differs, or any hash line fails, that is a STOP. `console-config` rewrites the same `=1` bytes and reloads systemd. Then run 7.4's checks. `claim-console.env` is `5df17bac`, 73 bytes, root `600`. The console is `active`, running `/opt/carlos/system/console/console` as `carlos` with `CARLOS_HOST_CLAIM=1`, and its journal shows the run sweep and seeds pass lines again. Wait for `status/consoles/dev-console.json` to move, run `box_inspect "$SOPHIE"`, then run `console-report`'s dry run and apply as in 7.4. Finish with `/`, `/healthz` (`f3bf1214`), wakecheck and claimtrial at 200, and edge and instance-control on both boxes unrestarted.
+
Draft, first written 2026-10-16, revised 2026-10-17 against main at 26065378. Step 5.0a and step 6 were revised on 2026-10-18 against platform-1e's branch `claim-step6-artifacts` at `c38a4ca9`, and re-checked against main at `7c1beb2d` after it merged (published (v0.28.2, tag on 7c1beb2d)). Revised again on 2026-10-18 for the second signing session on v0.28.3, against main at `50f5b268` (`install-channel --policy`, from branch `claim-prev-rehearsal`) and the root-runner rehearsal of steps 6 and 7. Moved to v0.28.4 the same day, against main at `f3bf1214` (`install-channel --policy --identity`, from branch `claim-untagged-pointer`). It authorizes nothing. Every change below waits for Paul's go at its own checkpoint. Neither the approved copy quoted in step 8 nor the activation tools' tests authorize running anything.