carlos / platform Public

WIP claim Plan 14 track D checkpoint 2 (not for merge): D1-D3 production wiring

Co-Authored-By: Codex <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
codex agent, operated by paul@keymail.dev pushed by claude agent, operated by paul@keymail.dev a73aa2e8d384a2e768c8c26d816b30c2400dc203 parent ab00455
53 files changed, +2058 −154
  • internal/host/claimassembly.go +12 −1
  • internal/host/claimlaunch_production.go +3 −0
  • internal/host/claimparticipation.go +20 −11
  • internal/host/claimparticipation_relocation.go +3 −0
  • internal/host/claimparticipation_stale_test.go +1 −1
  • internal/host/claimproduction_admintoken_test.go +1 −1
  • internal/host/claimretire_transport.go +18 −9
  • internal/host/claimstop_run.go +9 −0
  • internal/host/guardparticipation_test.go +3 −3
  • internal/host/guardtransaction.go +23 −12
  • internal/host/guardtransaction_test.go +3 −3
  • internal/host/plan13_region_test.go +1 −1
  • internal/host/plan13_views_test.go +1 −1
  • internal/host/plan9_a_guard_test.go +9 −3
  • internal/host/plan9_production_test.go +7 −7
  • internal/host/relocatepass_absence_test.go +1 −1
  • internal/host/relocatepass_carries_test.go +1 −1
  • internal/host/relocatepass_round1_test.go +3 −3
  • internal/host/relocatepass_test.go +3 −3
  • internal/host/relocationdischarge_restart_unix_test.go +1 −1
  • internal/host/relocationfinish_unix_test.go +1 −1
  • internal/host/relocationfirstwake_unix_test.go +1 −1
  • internal/host/relocationparticipation_linux_test.go +1 −1
  • internal/host/rootexecution_authority.go +3 −0
  • internal/host/rootexecution_client.go +205 −0
  • internal/host/rootexecution_migration_test.go +217 −0
  • internal/host/rootexecution_recovery.go +69 −0
  • internal/host/rootexecution_runtime.go +96 −0
  • internal/host/rootexecution_runtime_linux_test.go +167 −0
  • internal/host/rootexecution_settle.go +228 −0
  • internal/host/rootexecution_source.go +51 −0
  • internal/host/rootexecution_update_test.go +122 −0
  • internal/host/systemapply.go +3 −1
  • internal/host/systemapply_test.go +1 −0
  • internal/host/systemparticipation.go +79 −44
  • internal/hostexec/plan14_root_participation_test.go +14 −0
  • internal/hostexec/rootbroker.go +13 −1
  • internal/hostexec/rootbroker_serving_test.go +1 −1
  • internal/hostexec/rootclient.go +39 −3
  • internal/hostexec/rootlease_scopes_linux_test.go +99 −0
  • internal/hostexec/rootmirror.go +49 −0
  • internal/hostexec/rootserving.go +1 −1
  • internal/hostfloor/disk.go +51 −11
  • internal/hostfloor/floor_test.go +2 −2
  • internal/hostfloor/participation.go +6 −1
  • internal/hostfloor/participation_test.go +2 −2
  • internal/hostfloor/plan9_a_test.go +3 −3
  • internal/hostfloor/rootparticipation_test.go +125 −0
  • internal/provision/plan9_b8_census_test.go +3 −3
  • internal/provision/testdata/plan14-root-reads-merge.tsv +40 −14
  • internal/rootparticipation/ledger.go +74 −2
  • internal/rootparticipation/production.go +46 −0
  • internal/rootparticipation/recovery_linux_test.go +123 −0

CI failed — 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	362.646s
?   	github.com/carlosframework/platform/cmd/changelog	[no test files]
ok  	github.com/carlosframework/platform/cmd/console	3.115s
ok  	github.com/carlosframework/platform/cmd/moveprobe	93.355s
ok  	github.com/carlosframework/platform/internal/activator	233.036s
ok  	github.com/carlosframework/platform/internal/agentsock	0.016s
ok  	github.com/carlosframework/platform/internal/alerting	0.003s
ok  	github.com/carlosframework/platform/internal/analytics	0.019s
ok  	github.com/carlosframework/platform/internal/appconfig	2.334s
ok  	github.com/carlosframework/platform/internal/apperr	0.073s
ok  	github.com/carlosframework/platform/internal/applog	0.131s
ok  	github.com/carlosframework/platform/internal/awsinv	0.004s
ok  	github.com/carlosframework/platform/internal/boxchoice	0.004s
ok  	github.com/carlosframework/platform/internal/boxid	0.946s
?   	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.009s
ok  	github.com/carlosframework/platform/internal/caps	0.011s
ok  	github.com/carlosframework/platform/internal/certwarm	0.002s
ok  	github.com/carlosframework/platform/internal/cgroup	0.190s
ok  	github.com/carlosframework/platform/internal/changelog	0.254s
ok  	github.com/carlosframework/platform/internal/clamd	0.057s
?   	github.com/carlosframework/platform/internal/cliflag	[no test files]
2026/10/13 11:04:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: account fleet bab: open registry: unable to open database file (14)
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: account fleet bab: fleet view: bucket having a moment
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:51 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:51 console: alert watch: keymail box-a/disk to ops-a@keymail.dev: context deadline exceeded
2026/10/13 11:04:51 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: alert watch: keymail box-a/disk to ops-b@keymail.dev: context deadline exceeded
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:51 console: alert watch: box-a/disk transition dropped — no operator holds a keymail grant
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:51 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:51 console: alert watch: unparsable alerts/boxes/box-junk.json: invalid character 'n' looking for beginning of object key string
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:52 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:52 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:52 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:52 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:52 console: alert watch: no keymail grant for ops-b@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: app region bab/gamma:  (default)
2026/10/13 11:04:52 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:52 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:52 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:52 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:52 console: could not notify paul@keymail.dev of a CLI token issue: Post "http://127.0.0.1:36433/api/app/send": dial tcp 127.0.0.1:36433: connect: connection refused
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: app region bab/piped:  (default)
2026/10/13 11:04:53 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: api channels bab/widget: pipeline read: pipeline wrapper: invalid character 'o' in literal null (expecting 'u')
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: could not notify alice@keymail.dev of a CLI token issue: Post "http://127.0.0.1:43473/api/app/send": dial tcp 127.0.0.1:43473: connect: connection refused
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: app region bab/piped:  (default)
2026/10/13 11:04:53 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: could not notify paul@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: api promote titogo abc1234 -> beta: promote titogo abc1234 -> beta: beta is entered from edge only, and this build is on no rung yet — use --hotfix to bypass the ladder
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:54 console: could not notify eve@keymail.dev of a CLI token issue: Post "http://127.0.0.1:40449/api/app/send": EOF
2026/10/13 11:04:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: bab/titogo is in the trash in the bucket; marking it trashed here
2026/10/13 11:04:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:55 console: trashed bab/titogo: settle: release: read trash marker for bab/titogo: AccessDenied: s3://carlos-prod-secret/deleted.json request id ABC123
2026/10/13 11:04:55 console: bab/titogo is in the trash in the bucket; marking it trashed here
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: api trash bab/titogo: production flag: AccessDenied: s3://carlos-prod-secret/production.json request id ABC123
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: app region bab/paul:  (default)
2026/10/13 11:04:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: app region bab/titogo:  (default)
2026/10/13 11:04:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:56 console: app region bab/unplaced:  (default)
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: app region bab/titogo:  (default)
2026/10/13 11:04:56 console: claim bab/titogo: set placement fleet/pi: SQL logic error: no such column: placement (1)
2026/10/13 11:04:56 console: backfilled account manifest for bab ()
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: could not notify paul@keymail.dev of a CLI token issue: Post "http://127.0.0.1:33289/api/app/send": dial tcp 127.0.0.1:33289: connect: connection refused
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: could not notify paul@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: app region bab/app-0:  (default)
2026/10/13 11:04:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:04:56 console: app region bab/app-1:  (default)
2026/10/13 11:04:56 console: app region bab/app-2:  (default)
2026/10/13 11:04:56 console: app region bab/app-3:  (default)
2026/10/13 11:04:56 console: app region bab/app-4:  (default)
2026/10/13 11:04:56 console: app region bab/app-5:  (default)
2026/10/13 11:04:56 console: app region bab/app-6:  (default)
2026/10/13 11:04:56 console: app region bab/bob-fresh:  (default)
2026/10/13 11:04:56 console: app region bab/via-browser:  (default)
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:56 console: api ship bab/console: read app flags: SQL logic error: no such column: build_probe (1)
2026/10/13 11:04:56 console: could not notify paul@keymail.dev of a CLI token issue: Post "http://127.0.0.1:40259/api/app/send": dial tcp 127.0.0.1:40259: connect: connection refused
2026/10/13 11:04:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:57 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:57 console: could not notify alice@keymail.dev of a CLI token issue: Post "http://127.0.0.1:46659/api/app/send": read tcp 127.0.0.1:41386->127.0.0.1:46659: read: connection reset by peer
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: api config apply bab/titogo (default): config: titogo has no default bundle — nothing to unset
2026/10/13 11:04:58 console: api config apply bab/titogo (staging): config: titogo has no staging bundle — nothing to unset
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:04:59 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/13 11:04:59 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000003
2026/10/13 11:04:59 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000003 maxTXID=0000000000000003 size=454
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000003 txid.db=0000000000000003
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:04:59 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:04:59 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:04:59 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:04:59 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 console: api db bab/titogo/acme.go.tito.io: list level 0: api error AccessDenied: no access to secret-bucket
2026/10/13 11:04:59 console: api db bab/titogo/acme.go.tito.io: open level 0 1-1: api error AccessDenied: no access to secret-bucket
2026/10/13 11:04:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:04:59 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:04:59 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:00 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:00 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:00 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/13 11:05:00 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000003
2026/10/13 11:05:00 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000003 maxTXID=0000000000000003 size=454
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000003 txid.db=0000000000000003
2026/10/13 11:05:00 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:00 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:00 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:00 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:00 console: could not notify bob@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:00 console: api db bab/titogo/acme.go.tito.io: stream level 0 1-1: context canceled
2026/10/13 11:05:00 console: api db bab/titogo/acme.go.tito.io: stream level 0 1-1: context canceled
2026/10/13 11:05:00 console: api db bab/titogo/acme.go.tito.io: stream level 0 1-1: context canceled
2026/10/13 11:05:00 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:00 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:00 console: api db bab/titogo/acme.go.tito.io: stream level 0 1-1: context canceled
2026/10/13 11:05:00 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:00 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:00 console: api db bab/titogo/acme.go.tito.io: stream level 0 1-1: write tcp 127.0.0.1:36955->127.0.0.1:59530: i/o timeout
2026/10/13 11:05:00 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:00 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:00 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:00 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:00 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:00 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: could not notify alice@keymail.dev of a CLI token issue: keymail: lookup alice@keymail.dev: Get "http://127.0.0.1:33559/api/federation/lookup?addr=alice%40keymail.dev&from=console%40127.0.0.1%3A42021": dial tcp 127.0.0.1:33559: connect: connection refused
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000003
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000003 maxTXID=0000000000000003 size=454
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000003 txid.db=0000000000000003
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000003
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000003 maxTXID=0000000000000003 size=454
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000003 txid.db=0000000000000003
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000003
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000003 maxTXID=0000000000000003 size=454
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000003 txid.db=0000000000000003
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000003
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000003 maxTXID=0000000000000003 size=454
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000003 txid.db=0000000000000003
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/13 11:05:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/13 11:05:01 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/13 11:05:01 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/13 11:05:02 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:02 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/13 11:05:02 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/13 11:05:02 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:02 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/13 11:05:02 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/13 11:05:02 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:05:02 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/13 11:05:02 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/13 11:05:02 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/13 11:05:02 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:02 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:02 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:02 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:02 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:03 console: api rollback km canary/x: rollback: km canary/x would go back to v1, which has no signed digest. Run carlos channels resign --app km canary/x first, or promote a newer build
2026/10/13 11:05:03 console: could not notify paul@keymail.dev of a CLI token issue: Post "http://127.0.0.1:36287/api/app/send": dial tcp 127.0.0.1:36287: connect: connection refused
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:03 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:04 console: could not notify alice@keymail.dev of a CLI token issue: Post "http://127.0.0.1:46365/api/app/send": dial tcp 127.0.0.1:46365: connect: connection refused
2026/10/13 11:05:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_ACME_DELEGATION_ZONE "*.bad zone" is not a valid domain — delegation off, wildcard-enable requests refuse with "no delegation zone configured" until it's fixed
2026/10/13 11:05:05 console: CARLOS_ACME_DELEGATION_ZONE "-leading-hyphen.example.com" is not a valid domain — delegation off, wildcard-enable requests refuse with "no delegation zone configured" until it's fixed
2026/10/13 11:05:05 console: CARLOS_ACME_DELEGATION_ZONE "has a space.example.com" is not a valid domain — delegation off, wildcard-enable requests refuse with "no delegation zone configured" until it's fixed
2026/10/13 11:05:05 console: CARLOS_ACME_DELEGATION_ZONE "*.bad zone" is not a valid domain — delegation off, wildcard-enable requests refuse with "no delegation zone configured" until it's fixed
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: door keys bab/titogo: database revision 1 was below the bucket's 99; advanced past it
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: door keys bab/titogo: database revision 2 was below the bucket's 7; advanced past it
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: door keys bab/titogo: overwriting an unverifiable object: invalid character 'o' in literal null (expecting 'u')
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: door keys bab/titogo: overwriting an unverifiable object: doorkey: bad signature
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: api features block bab/titogo: features at apps/bab/titogo/features.json: unknown schema 9
2026/10/13 11:05:07 console: api features get bab/titogo: features at apps/bab/titogo/features.json: unknown schema 9
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:09 console: api instance move bab/titogo/acme.go.tito.io: termination fence of uk-box: hostactors: roster authority refused
2026/10/13 11:05:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:09 console: api instance move bab/titogo/acme.go.tito.io: begin move mv_xllvsk5xawsj77vsefpxwzjote: hostops: identity mismatch
2026/10/13 11:05:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:09 console: api instance move bab/titogo/acme.go.tito.io: the claim is moving under mv_tb44y2xr5hy547gryiwunewygu but the record start failed: secret-detail: record put failed
2026/10/13 11:05:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:09 console: api instances delete bab/titogo/acme.go.tito.io: provision: claim retirement unavailable
2026/10/13 11:05:09 console: api instances delete bab/titogo/acme.go.tito.io: provision: claim retirement unavailable
2026/10/13 11:05:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:10 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostops: identity mismatch
2026/10/13 11:05:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:10 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostops: identity mismatch
2026/10/13 11:05:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:10 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostops: identity mismatch
2026/10/13 11:05:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:10 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostops: identity mismatch
2026/10/13 11:05:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:10 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostops: identity mismatch
2026/10/13 11:05:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:10 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostops: identity mismatch
2026/10/13 11:05:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:10 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostops: identity mismatch
2026/10/13 11:05:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:10 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostops: identity mismatch
2026/10/13 11:05:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:11 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostops: identity mismatch
2026/10/13 11:05:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:11 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostclaim: transition not legal from the claim's state
2026/10/13 11:05:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:11 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostops: pending
2026/10/13 11:05:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:11 console: api instance move bab/titogo/acme.go.tito.io: typed move write refused: hostclaim: transition not legal from the claim's state
2026/10/13 11:05:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:14 console: api instance move bab/titogo/acme.go.tito.io: declared loss refused: hostresolve: evidence or operation does not authorize resolution
2026/10/13 11:05:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:15 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:16 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:16 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:16 edges: box "uk-box" has an edges file under control/edges/ but no status snapshot at all, so no region outside the home is automatically eligible until it reports; said once
2026/10/13 11:05:16 edges: 1 edges file(s) under control/edges/ but no fresh box snapshot matched any of them, so automatic region placement sees the home alone (are edges and status in different buckets? see CARLOS_STATUS_BUCKET/CARLOS_STATUS_PREFIX)
2026/10/13 11:05:16 console: an incomplete read of the edges files or box snapshots (edges complete true, snapshots complete false), so no region outside the home is automatically eligible this request; said once
2026/10/13 11:05:16 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:16 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:16 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:16 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:16 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:16 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:16 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:17 edges: could not read control/edges/se-box.json for the placement join: read timeout
2026/10/13 11:05:17 edges: could not read control/edges/se-box.json for the placement join: read timeout
2026/10/13 11:05:17 edges: box "se-box" has a fresh status snapshot but no edges file under control/edges/, so no region outside the home is automatically eligible until it publishes one; said once
2026/10/13 11:05:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:17 console: api instance move bab/titogo/acme.go.tito.io: protocol floor: moves: read floor: read timeout
2026/10/13 11:05:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:19 console: api instance move bab/titogo/acme.go.tito.io: termination fence of ie-box: secret-detail: fence store down
2026/10/13 11:05:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:19 console: api instance move bab/titogo/acme.go.tito.io: termination fence of ie-box: hostactors: roster authority refused
2026/10/13 11:05:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:19 console: api instance move bab/titogo/acme.go.tito.io: host roster: dirstore: control/host-actors.json: file does not exist
2026/10/13 11:05:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:19 console: api instance move bab/titogo/acme.go.tito.io: host roster: hostactors: roster authority refused
2026/10/13 11:05:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:19 console: api instance move bab/titogo/acme.go.tito.io: host roster: hostactors: roster authority refused
2026/10/13 11:05:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:19 console: api instance move bab/titogo/acme.go.tito.io: host roster: hostactors: roster authority refused
2026/10/13 11:05:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:19 console: api instance move bab/titogo/acme.go.tito.io: storage binding: read timeout
2026/10/13 11:05:19 console: api instance move bab/titogo/acme.go.tito.io: manifest: read timeout
2026/10/13 11:05:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:20 console: api instance move bab/titogo/acme.go.tito.io: the claim is moving under mv_ul6gtviqyrcerm26z4xowfvvmq but the record write failed: write timeout
2026/10/13 11:05:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:20 console: api instance move bab/titogo/acme.go.tito.io: the claim is moving under mv_4ohdr5mio4uje73q5ewv3uz5qi but the record write failed: write timeout
2026/10/13 11:05:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:20 console: api instance move bab/titogo/acme.go.tito.io: the claim is moving under mv_k4zaulbvzbhnb2rdoav4v55ij4 but the record write failed: write timeout
2026/10/13 11:05:20 console: api instance move bab/titogo/acme.go.tito.io: move mv_k4zaulbvzbhnb2rdoav4v55ij4: record reread: read timeout; the claim is left moving
2026/10/13 11:05:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:21 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:21 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:21 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:21 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:21 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:21 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 provision: minted instance route acme.go.tito.io (app "titogo" acct "kam")
2026/10/13 11:05:22 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: could not notify alice@keymail.dev of a CLI token issue: Post "http://127.0.0.1:46319/api/app/send": dial tcp 127.0.0.1:46319: connect: connection refused
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: app region bab/titogo:  (default)
2026/10/13 11:05:22 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:22 status: fleet: skipping status/boxes/broken.json: corrupt snapshot: invalid character 'n' looking for beginning of object key string
2026/10/13 11:05:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: api instances create bab/titogo/acme.go.tito.io: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:23 console: api instances manifest bab/titogo: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:23 console: api instances delete bab/titogo/acme.go.tito.io: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 edges: skipping control/edges/broken.json in the placement join: not a versioned edges file
2026/10/13 11:05:23 edges: skipping control/edges/old.json in the placement join: not a versioned edges file
2026/10/13 11:05:23 edges: skipping control/edges/broken.json in the placement join: not a versioned edges file
2026/10/13 11:05:23 edges: skipping control/edges/old.json in the placement join: not a versioned edges file
2026/10/13 11:05:23 edges: skipping control/edges/broken.json in the placement join: not a versioned edges file
2026/10/13 11:05:23 edges: skipping control/edges/old.json in the placement join: not a versioned edges file
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: api instances create bab/titogo: host claim check junk-titogo.bab.oncarlos.test: domains: claim junk-titogo.bab.oncarlos.test: invalid character 'o' in literal null (expecting 'u')
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: api instances create bab/titogo: pipeline read: pipeline wrapper: invalid character 'o' in literal null (expecting 'u')
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 provision: minted instance route hub.kam.oncarlos.test (app "hub" acct "kam")
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:25 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: ledger append bab/titogo/carbon: ledger: append lost 4 CAS races: ledger: append contention: dirstore: ledgers/bab/titogo/carbon/entries/20261013T110527Z-b1f0940c8598.json exists: store: compare-and-swap conflict
2026/10/13 11:05:27 console: ledger publish bab/titogo: store: compare-and-swap conflict
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: ledger append bab/titogo/carbon: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:27 console: ledger publish bab/titogo: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:27 console: ledger list bab/titogo: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: app region bab/widget:  (default)
2026/10/13 11:05:29 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: api pipeline get bab/widget: pipeline wrapper: invalid character 'o' in literal null (expecting 'u')
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: app region bab/widget:  (default)
2026/10/13 11:05:29 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: api pipeline put bab/widget: set: store: compare-and-swap conflict
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: api pipeline put bab/widget: set: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation d47d1c4da90b30b5, op 1)
2026/10/13 11:05:29 console: relay disabled bab/titogo by alice@keymail.dev (op 2)
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation de87ed39c7bf2b75, op 1)
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation c03b121188e547f3, op 1)
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 55e8994a54ab7110, op 1)
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 7252c8efd278445a, op 1)
2026/10/13 11:05:29 console: relay rotated eu-west-1 to kid k2, re-issued 1 app(s)
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation eb2d409c4e04b41d, op 1)
2026/10/13 11:05:29 console: relay rotated eu-west-1 to kid k2, re-issued 1 app(s)
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 5773784ebf8b1b7b, op 1)
2026/10/13 11:05:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:29 console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation c8f948fea8c73e98, op 1)
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation a354b30da11f69b1, op 1)
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: could not notify alice@keymail.dev of a CLI token issue: Post "http://127.0.0.1:41831/api/app/send": dial tcp 127.0.0.1:41831: connect: connection refused
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: could not notify alice@keymail.dev of a CLI token issue: Post "http://127.0.0.1:42425/api/app/send": dial tcp 127.0.0.1:42425: connect: connection refused
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:30 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: api scan sweep bab/titogo: objstore: object scanning is disabled for this deployment (bab/titogo)
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: api schedule status bab/titogo: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: api schedule status bab/titogo: apps/bab/titogo/schedule-status/bad.bab.oncarlos.com.json: invalid character 'n' looking for beginning of object key string
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: could not notify paul@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:33 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: api sidecars create bab/titogo/bot: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:34 console: api sidecars manifest bab/titogo: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:34 console: api sidecars list bab/titogo: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:34 console: api sidecars delete bab/titogo/bot: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:34 console: api sidecars create bab/titogo: open registry: unable to open database file (14)
2026/10/13 11:05:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: app region bab/afterstatus:  (default)
2026/10/13 11:05:35 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: could not notify eve@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: could not notify owner@example.teſt of a CLI token issue: Post "http://127.0.0.1:39777/api/app/send": dial tcp 127.0.0.1:39777: connect: connection refused
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: store decision bab: no keymail grant for paul@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: store decision bab: no keymail grant for paul@keymail.dev — not notified (they must sign in to the console once)
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:35 console: api store approvals: list entitlements: list unavailable
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: api store approvals: read store/entitlements/bab.json: objstore: store/entitlements/bab.json: invalid character 'o' in literal null (expecting 'u')
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: api store provision bab/titogo: objstore: ensure bucket carlos-bab-titogo: backend detail must stay private
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: api store provision bab: read entitlement: objstore: store/entitlements/bab.json: invalid character 'p' looking for beginning of value
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: could not notify alice@keymail.dev of a CLI token issue: Post "http://127.0.0.1:39469/api/app/send": dial tcp 127.0.0.1:39469: connect: connection refused
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: api store grant bab/titogo (bucket "other-uploads"): objstore: bucket or IAM user name belongs to another store: other-uploads
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: api store seal key: CARLOS_SECRETS_PUBKEY: invalid base64: illegal base64 data at input byte 3
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:37 console: api store rotate bab/titogo: dirstore: apps/bab/titogo/store.json moved on: store: compare-and-swap conflict
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: api store grant bab/titogo (bucket ""): objstore: ensure bucket carlos-bab-titogo: AccessDenied: arn:aws:s3:::carlos-bab-titogo — status code 403, request id 8EXAMPLE7
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: could not notify paul@keymail.dev of a CLI token issue: Post "http://127.0.0.1:35711/api/app/send": dial tcp 127.0.0.1:35711: connect: connection refused
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: object scanning disabled deployment-wide by alice@keymail.dev
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: object scanning enabled deployment-wide by alice@keymail.dev
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: object scanning enabled deployment-wide by alice@keymail.dev
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: api system antivirus: read: release: system/antivirus.json: schema 99 is not 1
2026/10/13 11:05:38 console: api system antivirus: replacing an unreadable record on disable: release: system/antivirus.json: schema 99 is not 1
2026/10/13 11:05:38 console: object scanning disabled deployment-wide by alice@keymail.dev
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: geoip publish refused: geoip database refused: not a valid MaxMind-format database
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: geoip upload: unexpected EOF
2026/10/13 11:05:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:38 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:05:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:39 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:05:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:39 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:05:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:39 console: could not notify paul@keymail.dev of a CLI token issue: Post "http://127.0.0.1:44681/api/app/send": EOF
2026/10/13 11:05:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:39 console: could not notify roller@keymail.dev of a CLI token issue: Post "http://127.0.0.1:45093/api/app/send": dial tcp 127.0.0.1:45093: connect: connection refused
2026/10/13 11:05:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:41 console: could not notify paul@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:41 console: could not notify paul@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:41 console: api system: role: SQL logic error: no such table: memberships (1)
2026/10/13 11:05:41 console: api system: role: SQL logic error: no such table: memberships (1)
2026/10/13 11:05:41 console: api system: role: SQL logic error: no such table: memberships (1)
2026/10/13 11:05:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:42 console: api system: list fleets: unable to open database file (14) — reporting the platform's own boxes only
2026/10/13 11:05:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:42 console: api system status: canary pointer: system pointer does not verify: system pointer router/canary: signature does not verify
2026/10/13 11:05:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: SystemFeed is only partly configured (latest_url=false download_base=true pub_key=false) — a feed is all three or none, so this console is using the vendor feed instead
2026/10/13 11:05:44 console: SystemFeed is only partly configured (latest_url=false download_base=true pub_key=true) — a feed is all three or none, so this console is using the vendor feed instead
2026/10/13 11:05:44 console: SystemFeed is only partly configured (latest_url=false download_base=false pub_key=true) — a feed is all three or none, so this console is using the vendor feed instead
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: could not notify paul@keymail.dev of a CLI token issue: Post "http://127.0.0.1:42065/api/app/send": dial tcp 127.0.0.1:42065: connect: connection refused
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: app region bab/tmp-docs:  (default)
2026/10/13 11:05:44 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: app region bab/tmp-docs:  (default)
2026/10/13 11:05:44 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: could not notify paul@keymail.dev of a CLI token issue: Post "http://127.0.0.1:39769/api/app/send": dial tcp 127.0.0.1:39769: connect: connection refused
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: app region bab/tmp-other:  (default)
2026/10/13 11:05:44 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: temporary create bab/tmp-blind: routes: unable to open database file (14)
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: app region bab/tmp-race3:  (default)
2026/10/13 11:05:44 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:44 console: app region bab/tmp-race4:  (default)
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: app region bab/tmp-ci:  (default)
2026/10/13 11:05:44 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:44 console: app region bab/tmp-b0:  (default)
2026/10/13 11:05:44 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:44 console: app region bab/tmp-b1:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b2:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b3:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b4:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b5:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b6:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b7:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b8:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b9:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b10:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b11:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b12:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b13:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b14:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b15:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b16:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b17:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b18:  (default)
2026/10/13 11:05:44 console: app region bab/tmp-b19:  (default)
2026/10/13 11:05:45 console: app region bab/permanent-one:  (default)
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: bab/tmp-a is in the trash in the bucket; marking it trashed here
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: bab/tmp-a is in the trash in the bucket; marking it trashed here
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: bab/tmp-b is in the trash in the bucket; marking it trashed here
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: api updates bab/km/a.example.com: enable refused, not every box applies update settings: ie-1: runs a binary that does not apply update settings
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: api updates bab/km/a.example.com: enable refused, the box inventory could not be read: edges records: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: api updates bab/km/a.example.com: enable refused, not every box applies update settings: ie-1: runs a binary that does not apply update settings
2026/10/13 11:05:45 console: api updates bab/km/a.example.com: enable refused, not every box applies update settings: ie-1: runs a binary that does not apply update settings
2026/10/13 11:05:45 console: api updates bab/km/a.example.com: enable refused, not every box applies update settings: ie-1: runs a binary that does not apply update settings
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: api updates bab/km/a.example.com: promotion record v2: promotion record km/v2: signature verification failed
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:45 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: api updates install bab/km/a.example.com: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: api updates bab/km policy: enable refused, not every box applies update settings: ie-1: runs a binary that does not apply update settings
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: api updates bab/km policy: enable refused, not every box applies update settings: ie-1: runs a binary that does not apply update settings
2026/10/13 11:05:46 console: api updates bab/km policy: enable refused, not every box applies update settings: ie-1: runs a binary that does not apply update settings
2026/10/13 11:05:46 console: api updates bab/km policy: enable refused, not every box applies update settings: ie-1: runs a binary that does not apply update settings
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: api updates bab/km policy: enable refused, the box inventory could not be read: edges records: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: api updates policy bab/km: manifest: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: api updates policy bab/km: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:46 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: api version-target set bab/km: version target: write: AccessDenied: s3://carlos-prod-secret-bucket/version-target request id ABC123
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: could not notify eve@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: api releases list bab/km: tags: AccessDenied: s3://carlos-prod-secret-bucket/tags request id DEF456
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: app region bab/existing-site:  (default)
2026/10/13 11:05:47 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: app region bab/existing-site:  (default)
2026/10/13 11:05:47 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: app region bab/existing-site:  (default)
2026/10/13 11:05:47 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: app region bab/fresh-site:  (default)
2026/10/13 11:05:47 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: app region bab/console:  (default)
2026/10/13 11:05:47 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: app region bab/console:  (default)
2026/10/13 11:05:47 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:47 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:48 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: store destroy bab/kass: objstore: empty bucket carlos-bab-kass: backend unreachable
2026/10/13 11:05:49 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:49 console: settings mail read bab/kass: AccessDenied: s3://carlos-releases/apps/.../email.json request id XYZ
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: architecture refresh: console: infra inventory disabled for this process
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: architecture: registry: unable to open database file (14)
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: architecture: fleet view: bucket having a bad moment
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: instances manifest bab/kass: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: app region bab/svc-a0:  (default)
2026/10/13 11:05:51 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:51 console: app region bab/svc-a1:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a2:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a3:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a4:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a5:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a6:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a7:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a8:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a9:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a10:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a11:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a12:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a13:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a14:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a15:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a16:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a17:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a18:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a19:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a20:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a21:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a22:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a23:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a24:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a25:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a26:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a27:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a28:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a29:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a30:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a31:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a32:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a33:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a34:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a35:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a36:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a37:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a38:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a39:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a40:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a41:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a42:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a43:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a44:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a45:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a46:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a47:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a48:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a49:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a50:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a51:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a52:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a53:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a54:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a55:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a56:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a57:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a58:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a59:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a60:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a61:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a62:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a63:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a64:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a65:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a66:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a67:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a68:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a69:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a70:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a71:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a72:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a73:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a74:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a75:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a76:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a77:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a78:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a79:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a80:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a81:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a82:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a83:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a84:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a85:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a86:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a87:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a88:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a89:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a90:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a91:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a92:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a93:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a94:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a95:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a96:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a97:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a98:  (default)
2026/10/13 11:05:51 console: app region bab/svc-a99:  (default)
2026/10/13 11:05:51 console: app region bab/mine:  (default)
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: app region bab/rot-a0:  (default)
2026/10/13 11:05:51 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:51 console: app region bab/rot-a1:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a2:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a3:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a4:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a5:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a6:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a7:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a8:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a9:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a10:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a11:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a12:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a13:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a14:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a15:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a16:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a17:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a18:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a19:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a20:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a21:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a22:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a23:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a24:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a25:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a26:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a27:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a28:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a29:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a30:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a31:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a32:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a33:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a34:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a35:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a36:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a37:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a38:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a39:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a40:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a41:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a42:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a43:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a44:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a45:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a46:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a47:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a48:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a49:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a50:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a51:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a52:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a53:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a54:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a55:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a56:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a57:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a58:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a59:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a60:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a61:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a62:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a63:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a64:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a65:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a66:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a67:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a68:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a69:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a70:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a71:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a72:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a73:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a74:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a75:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a76:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a77:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a78:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a79:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a80:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a81:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a82:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a83:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a84:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a85:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a86:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a87:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a88:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a89:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a90:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a91:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a92:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a93:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a94:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a95:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a96:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a97:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a98:  (default)
2026/10/13 11:05:51 console: app region bab/rot-a99:  (default)
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: app region bab/person-a0:  (default)
2026/10/13 11:05:51 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:51 console: app region bab/person-a1:  (default)
2026/10/13 11:05:51 console: app region bab/person-a2:  (default)
2026/10/13 11:05:51 console: app region bab/person-a3:  (default)
2026/10/13 11:05:51 console: app region bab/person-a4:  (default)
2026/10/13 11:05:51 console: app region bab/person-a5:  (default)
2026/10/13 11:05:51 console: app region bab/person-a6:  (default)
2026/10/13 11:05:51 console: app region bab/person-a7:  (default)
2026/10/13 11:05:51 console: app region bab/person-a8:  (default)
2026/10/13 11:05:51 console: app region bab/person-a9:  (default)
2026/10/13 11:05:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:51 console: app region bab/hub-a-0:  (default)
2026/10/13 11:05:51 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:51 console: app region bab/hub-a-1:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-2:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-3:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-4:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-5:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-6:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-7:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-8:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-9:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-10:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-11:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-12:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-13:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-14:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-15:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-16:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-17:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-18:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-19:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-20:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-21:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-22:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-23:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-24:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-25:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-26:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-27:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-28:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-29:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-30:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-31:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-32:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-33:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-34:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-35:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-36:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-37:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-38:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-39:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-40:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-41:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-42:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-43:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-44:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-45:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-46:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-47:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-48:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-49:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-50:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-51:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-52:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-53:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-54:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-55:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-56:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-57:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-58:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-59:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-60:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-61:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-62:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-63:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-64:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-65:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-66:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-67:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-68:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-69:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-70:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-71:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-72:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-73:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-74:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-75:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-76:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-77:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-78:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-79:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-80:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-81:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-82:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-83:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-84:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-85:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-86:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-87:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-88:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-89:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-90:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-91:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-92:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-93:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-94:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-95:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-96:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-97:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-98:  (default)
2026/10/13 11:05:51 console: app region bab/hub-a-99:  (default)
2026/10/13 11:05:51 console: app region bab/hub-b-fresh:  (default)
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: materialized account bac (Kass) from the bucket
2026/10/13 11:05:52 console: materialized account bac (Legacy) from the bucket
2026/10/13 11:05:52 console: account bac names owner "not-an-address", which is not a keymail address — nobody could sign in as it, so no membership was created. Fix it with: console member --add <address> bac --role owner
2026/10/13 11:05:52 console: materialized account bac (Typo) from the bucket
2026/10/13 11:05:52 console: accounts/bac/account.json names owner "not-an-address", which is not a keymail address — materializing the account without it; give it one with `console member --add <address> bac --role owner`
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: production flag kass: production flag wrapper: invalid character 'n' looking for beginning of object key string
2026/10/13 11:05:52 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:52 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 edges: skipping control/edges/broken.json in the placement join: not a versioned edges file
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: move door: read the identity record of uk-b: read timeout
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:55 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: api updates bab/kass/web.kass.carlosapp.dev: enable refused, not every box applies update settings: linus-marquetry: runs a binary that does not apply update settings
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:05:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:57 console: materialized account bac (Account) from the bucket
2026/10/13 11:05:58 console: audit geoip off platform: sql: no rows in result set
2026/10/13 11:05:58 console: geoip publish refused: geoip database refused: not a valid MaxMind-format database
2026/10/13 11:05:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:59 console: mail push: bab/kass: hostops: identity mismatch
2026/10/13 11:05:59 console: mail push: bab/kass: hostops: identity mismatch
2026/10/13 11:05:59 console: api config apply bab/kass (default): hostops: identity mismatch
2026/10/13 11:05:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:59 console: mail push: bab/kass: hostops: identity mismatch
2026/10/13 11:05:59 console: api config apply bab/kass (default): hostops: identity mismatch
2026/10/13 11:05:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:05:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:06:04 console: claim request refused: hostops: pending
2026/10/13 11:06:05 console: api email credentials revoke bab/titogo (laptop): mail: lifecycle resource operation pending
hostops: pending
2026/10/13 11:06:06 console: api email domain remove bab/titogo (titogo.bab.oncarlos.com): mail: lifecycle resource operation pending
hostops: pending
2026/10/13 11:06:06 console: api email push off bab/titogo: hostops: pending
2026/10/13 11:06:07 console: audit instance-delete titogo: hostops: pending
2026/10/13 11:06:17 console: audit sidecar-delete titogo: hostops: pending
2026/10/13 11:06:26 console: audit db-read titogo: hostops: pending
2026/10/13 11:06:27 console: control-plane clear bab/titogo: hostops: pending
2026/10/13 11:06:27 console: api instances update bab/titogo/ha.go.tito.io: hostops: pending
2026/10/13 11:06:28 console: app region bab/claim-web-new:  (default)
2026/10/13 11:06:28 console: backfilled account manifest for bab (ops)
2026/10/13 11:06:28 console: analytics setting bab/kass: hostops: pending
2026/10/13 11:06:28 console: canary kass v1 -> canary/rc: hostops: pending
2026/10/13 11:06:29 console: retire kass canary/rc: hostops: pending
2026/10/13 11:06:29 console: control-plane clear bab/titogo: hostops: pending
2026/10/13 11:06:30 console: control-plane set bab/titogo: hostops: pending
2026/10/13 11:06:30 console: trash bab/titogo: hostops: pending
2026/10/13 11:06:32 console: errors level bab/kass: hostops: pending
2026/10/13 11:06:32 console: fast-track kass stable: hostops: pending
2026/10/13 11:06:33 console: gate write bab/titogo/acme.go.tito.io: hostops: pending
2026/10/13 11:06:33 console: browser restart bab/kass/kass.carlosapp.dev: hostops: pending
2026/10/13 11:06:34 console: browser retry bab/titogo/web.go.tito.io: hostops: pending
2026/10/13 11:06:34 console: api updates bab/titogo/acme.go.tito.io: hostops: pending
2026/10/13 11:06:35 console: api updates install bab/titogo/acme.go.tito.io: hostops: pending
2026/10/13 11:06:35 console: app region bab/tmp-claim-keep:  (default)
2026/10/13 11:06:35 console: backfilled account manifest for bab (ops)
2026/10/13 11:06:35 console: keep bab/tmp-claim-keep: hostops: pending
2026/10/13 11:06:36 console: confirm pending change: hostops: pending
2026/10/13 11:06:37 console: reject pending change 1b94e46ffdb2862899fff1447b7a2d13: hostops: pending
2026/10/13 11:06:37 console: backfilled account manifest for bab (ops)
2026/10/13 11:06:37 console: pipeline settings save bab/titogo: set: hostops: pending
2026/10/13 11:06:38 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:06:38 console: production kass -> true: hostops: pending
2026/10/13 11:06:39 console: promote kass v1 -> canary/x: hostops: pending
2026/10/13 11:06:40 console: browser restart bab/kass/: hostops: pending
2026/10/13 11:06:40 console: rollback kass canary/x: hostops: pending
2026/10/13 11:06:41 console: store destroy bab/titogo: hostops: pending
2026/10/13 11:06:41 console: swap policy bab/kass: hostops: pending
2026/10/13 11:06:41 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:06:42 console: service create bab/svc-web: hostops: pending
2026/10/13 11:06:42 console: service revoke bab: hostops: pending
2026/10/13 11:06:43 console: service rotate bab/svc-a: hostops: pending
2026/10/13 11:06:43 console: claim request refused: hostops: pending
2026/10/13 11:06:44 console: restore bab/titogo: hostops: pending
2026/10/13 11:06:45 console: app region bab/claim-cli-new:  (default)
2026/10/13 11:06:45 console: backfilled account manifest for bab (ops)
2026/10/13 11:06:45 console: app region bab/tmp-claim-cli:  (default)
2026/10/13 11:06:45 console: backfilled account manifest for bab (ops)
2026/10/13 11:06:46 console: api resign bab/kass canary/x: hostops: pending
2026/10/13 11:06:46 console: api config sync bab/titogo: hostops: pending
2026/10/13 11:06:47 console: api trash bab/titogo: hostops: pending
2026/10/13 11:06:48 console: door key mint bab/titogo: hostops: pending
2026/10/13 11:06:48 console: door key revoke bab/titogo 1438685a991b7af7: hostops: pending
2026/10/13 11:06:49 console: api email declare bab/titogo: mail: lifecycle resource operation pending
hostops: pending
2026/10/13 11:06:49 console: api email credentials create bab/titogo: mail: lifecycle resource operation pending
hostops: pending
2026/10/13 11:06:50 console: api email domain ensure bab/titogo (titogo.bab.oncarlos.com): mail: lifecycle resource operation pending
hostops: pending
2026/10/13 11:06:50 console: api email domain verify bab/titogo.bab.oncarlos.com: mail: lifecycle resource operation pending
hostops: pending
2026/10/13 11:06:51 console: api email enable bab/titogo: apply grant: mail: lifecycle resource operation pending
hostops: pending
2026/10/13 11:06:51 console: api email pause bab/titogo: mail: lifecycle resource operation pending
hostops: pending
2026/10/13 11:06:52 console: api email rotate bab/titogo: mail: lifecycle resource operation pending
hostops: pending
2026/10/13 11:06:52 console: api features set bab/titogo: hostops: pending
2026/10/13 11:06:53 console: api instance token bab/titogo: hostops: pending
2026/10/13 11:06:53 console: claim request refused: hostops: pending
2026/10/13 11:06:54 console: api instance channel bab/titogo/web.go.tito.io: hostops: pending
2026/10/13 11:06:55 console: api instance retry bab/titogo/web.go.tito.io: hostops: pending
2026/10/13 11:06:55 console: api updates install bab/titogo/acme.go.tito.io: hostops: pending
2026/10/13 11:06:56 console: app region bab/tmp-claim-keep:  (default)
2026/10/13 11:06:56 console: backfilled account manifest for bab (ops)
2026/10/13 11:06:56 console: lifecycle tmp-claim-keep: hostops: pending
2026/10/13 11:06:56 console: ledger publish bab/titogo: hostops: pending
2026/10/13 11:06:57 console: ledger append bab/titogo/carbon: hostops: pending
2026/10/13 11:06:57 console: ledger blob bab/titogo/prompts: hostops: pending
2026/10/13 11:06:58 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:06:58 console: api promote kass v1 -> canary/claim: hostops: pending
2026/10/13 11:06:59 console: api relay enable: hostops: pending
2026/10/13 11:06:59 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation 8aea6b7e65d8f743, op 1)
2026/10/13 11:06:59 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation c1f0bf05d17bb964, op 1)
2026/10/13 11:06:59 console: api relay adopted: hostops: pending
2026/10/13 11:07:00 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation d10e6109248e0378, op 1)
2026/10/13 11:07:00 console: api relay disable: hostops: pending
2026/10/13 11:07:00 console: relay disabled bab/titogo by paul@keymail.dev (op 2)
2026/10/13 11:07:00 console: api ship titogo abc1234: hostops: pending
2026/10/13 11:07:01 console: api authorize bab/kass v1: hostops: pending
2026/10/13 11:07:01 console: api restart bab/titogo: hostops: pending
2026/10/13 11:07:02 console: api restart scope bab/kass (host kass.carlosapp.dev): hostops: pending
2026/10/13 11:07:02 console: api restore bab/titogo: hostops: pending
2026/10/13 11:07:03 console: api retention set bab/titogo: hostops: pending
2026/10/13 11:07:03 console: api rollback kass canary/x: hostops: pending
2026/10/13 11:07:03 console: api schedule set bab/titogo sync: hostops: pending
2026/10/13 11:07:04 console: api schedule rm bab/titogo sync: hostops: pending
2026/10/13 11:07:04 console: api schedule run bab/titogo sync: hostops: pending
2026/10/13 11:07:05 console: claim request refused: hostops: pending
2026/10/13 11:07:05 console: api sidecars wake bab/titogo/bot: hostops: pending
2026/10/13 11:07:06 console: api store create bab/titogo: hostops: pending
2026/10/13 11:07:06 console: api store grant bab/titogo (bucket ""): hostops: pending
2026/10/13 11:07:07 console: api store provision bab/titogo: hostops: pending
2026/10/13 11:07:07 console: api store rotate bab/titogo: hostops: pending
2026/10/13 11:07:08 console: api store rotate finish bab/titogo: hostops: pending
2026/10/13 11:07:08 console: api scan request bab/titogo: hostops: pending
2026/10/13 11:07:09 console: api scan enforce bab/titogo: hostops: pending
2026/10/13 11:07:09 console: api scan grant bab/titogo: enable: hostops: pending
2026/10/13 11:07:10 console: api scan revoke bab/titogo: hostops: pending
2026/10/13 11:07:10 console: api scan sweep bab/titogo: hostops: pending
2026/10/13 11:07:11 console: app region bab/tmp-claim-ttl:  (default)
2026/10/13 11:07:11 console: backfilled account manifest for bab (ops)
2026/10/13 11:07:11 console: lifecycle tmp-claim-ttl: hostops: pending
2026/10/13 11:07:12 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation cd9b52a78d3f2fdd, op 1)
2026/10/13 11:07:12 console: relay rotate eu-west-1: bab/titogo: hostops: pending
2026/10/13 11:07:12 console: relay rotated eu-west-1 to kid k2, re-issued 0 app(s)
2026/10/13 11:07:12 console: audit relay-rotate platform: sql: no rows in result set
2026/10/13 11:07:12 console: relay rotated eu-west-1 to kid k3, re-issued 1 app(s)
2026/10/13 11:07:12 console: audit relay-rotate platform: sql: no rows in result set
2026/10/13 11:07:12 console: service create bab/svc-cli: hostops: pending
2026/10/13 11:07:13 console: service revoke bab: hostops: pending
2026/10/13 11:07:13 console: service rotate bab/svc-a: hostops: pending
2026/10/13 11:07:14 console: ses events: logging Delivery for bab/titogo: hostops: pending
2026/10/13 11:07:14 console: ses events: recording Delivery for bab/titogo: hostops: pending
2026/10/13 11:07:14 console: cli token revoke paul@keymail.dev: hostops: pending
2026/10/13 11:07:14 console: api config apply bab/titogo (default): hostops: pending
2026/10/13 11:07:15 console: api domains paths bab/titogo ti.to: hostops: pending
2026/10/13 11:07:15 console: api email push key bab/titogo: hostops: pending
2026/10/13 11:07:16 console: api instances enable bab/titogo: hostops: pending
2026/10/13 11:07:16 console: api updates bab/titogo/acme.go.tito.io: hostops: pending
2026/10/13 11:07:17 console: api pipeline put bab/titogo: set: hostops: pending
2026/10/13 11:07:17 console: api sidecars enable bab/titogo: hostops: pending
2026/10/13 11:07:18 console: api swap bab/titogo: hostops: pending
2026/10/13 11:07:18 console: api telemetry bab/titogo: hostops: pending
2026/10/13 11:07:19 console: api updates policy bab/titogo: hostops: pending
2026/10/13 11:07:19 console: api version-target set bab/titogo: hostops: pending
2026/10/13 11:07:23 console: claim restore bab/titogo: recovered (restored)
2026/10/13 11:07:26 console: door keys re-sign bab/titogo: hostops: pending
2026/10/13 11:07:33 console: app region bab/tmp-claim-expiry:  (default)
2026/10/13 11:07:33 console: backfilled account manifest for bab (ops)
2026/10/13 11:07:33 console: expiry pass: trash bab/tmp-claim-expiry: hostops: pending
2026/10/13 11:07:39 console: mail push: bab/titogo: hostops: pending
2026/10/13 11:07:45 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation 11c171dda72b7df6, op 1)
2026/10/13 11:07:46 console: relay writer lease acquired (holder e18037964229323f)
2026/10/13 11:07:46 console: relay reconcile bab/titogo: hostops: pending
2026/10/13 11:07:49 console: relay writer lease acquired (holder e18037964229323f)
2026/10/13 11:07:52 console: scan pass: bab/titogo: hostops: pending
2026/10/13 11:08:01 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:08:02 console: audit geoip off platform: sql: no rows in result set
2026/10/13 11:08:02 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:03 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:03 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:03 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:04 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:04 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:05 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:05 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:05 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:06 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:06 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:07 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:07 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:08 console: backfilled account manifest for bab (ops)
2026/10/13 11:08:08 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:08:09 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:08:09 console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
2026/10/13 11:08:20 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation a698339844bec83a, op 1)
2026/10/13 11:08:25 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:08:27 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/13 11:08:27 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:08:28 console: audit system-update platform: sql: no rows in result set
2026/10/13 11:08:29 console: audit system-update platform: sql: no rows in result set
2026/10/13 11:08:34 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/13 11:08:36 console: audit analytics-setting account: sql: no rows in result set
2026/10/13 11:08:37 console: audit errors-level account: sql: no rows in result set
2026/10/13 11:08:37 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:08:37 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/13 11:08:37 console: audit fleet-detach-box pi: sql: no rows in result set
2026/10/13 11:08:38 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:08:38 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/13 11:08:38 console: audit fleet-rotate-box pi: sql: no rows in result set
2026/10/13 11:08:38 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:08:38 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/13 11:08:38 console: audit fleet-tag-box pi: sql: no rows in result set
2026/10/13 11:08:40 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/13 11:08:41 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/13 11:08:41 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/13 11:08:41 console: audit store-approve : constraint failed: claim: app write not permitted (1811)
2026/10/13 11:08:41 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/13 11:08:41 console: audit store-decline : constraint failed: claim: app write not permitted (1811)
2026/10/13 11:08:42 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:08:42 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:08:42 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/13 11:08:43 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:08:43 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/13 11:08:43 console: audit fleet-detach-box pi: sql: no rows in result set
2026/10/13 11:08:43 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:08:43 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/13 11:08:43 console: audit fleet-rotate-box pi: sql: no rows in result set
2026/10/13 11:08:44 console: audit fleet-create pi: sql: no rows in result set
2026/10/13 11:08:44 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/13 11:08:44 console: audit fleet-tag-box pi: sql: no rows in result set
2026/10/13 11:08:44 console: audit system-update platform: sql: no rows in result set
2026/10/13 11:08:44 console: audit system-activation-cancel platform: sql: no rows in result set
2026/10/13 11:08:45 console: object scanning enabled deployment-wide by paul@keymail.dev
2026/10/13 11:08:45 console: audit system-layout platform: sql: no rows in result set
2026/10/13 11:08:46 console: audit pointer-digests-on platform: sql: no rows in result set
2026/10/13 11:08:46 console: audit system-update platform: sql: no rows in result set
2026/10/13 11:08:46 console: audit system-update platform: sql: no rows in result set
2026/10/13 11:08:46 console: audit system-rollback platform: sql: no rows in result set
2026/10/13 11:08:46 console: audit system-update platform: sql: no rows in result set
2026/10/13 11:08:49 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/13 11:08:49 console: audit store-decline : constraint failed: claim: app write not permitted (1811)
2026/10/13 11:08:50 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:08:50 console: audit geoip publish platform: sql: no rows in result set
2026/10/13 11:09:16 console: cli token revoke paul@keymail.dev: hostops: pending
2026/10/13 11:09:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:17 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:18 console: claim recovery: context canceled
2026/10/13 11:09:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:18 console: claim recovery: sns: context canceled
context canceled
context canceled
2026/10/13 11:09:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:20 console: materialized account bac (Account) from the bucket
2026/10/13 11:09:20 console: materialized account bac (Account) from the bucket
2026/10/13 11:09:20 console: materialized account bac (Account) from the bucket
2026/10/13 11:09:20 console: materialized account bac (Account) from the bucket
2026/10/13 11:09:20 console: materialized account bac (Account) from the bucket
2026/10/13 11:09:20 console: materialized account bac (Account) from the bucket
2026/10/13 11:09:20 console: materialized account bac (Account) from the bucket
2026/10/13 11:09:20 console: materialized account bac (Account) from the bucket
2026/10/13 11:09:20 console: materialized account bac (Account) from the bucket
2026/10/13 11:09:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: claim restore bab/kass: recovered (restored)
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: claim restore bab/kass: recovered (restored)
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: hold app materialization bab/kass: constraint failed: test restore SQL failure (1811)
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:24 console: restore row bab/kass: constraint failed: test restore SQL failure (1811)
2026/10/13 11:09:26 console: mail push: bab/titogo: hostops: pending
2026/10/13 11:09:32 console: mail push: bab/titogo: no answer: lost response
no answer: lost response
2026/10/13 11:09:33 mail: disassociating tenant resource for bab/remove.example.com: lost disassociation response
2026/10/13 11:09:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:36 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:36 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: could not notify paul@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: materialized account bac (Testco) from the bucket
2026/10/13 11:09:37 console: account telemetry bac: dirstore: invalid key "apps/bac//telemetry.json"
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: materialized account bac (Testco) from the bucket
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:37 console: could not notify paul@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:09:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:38 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:38 console: control-plane check console in account bab: SQL logic error: no such column: control_plane (1)
2026/10/13 11:09:38 console: control-plane check console in account bab: SQL logic error: no such column: control_plane (1)
2026/10/13 11:09:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:38 console: could not notify paul@keymail.dev of a CLI token issue: Post "http://127.0.0.1:43893/api/app/send": dial tcp 127.0.0.1:43893: connect: connection refused
2026/10/13 11:09:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: could not notify paul@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:09:39 console: could not notify eve@keymail.dev of a CLI token issue: Post "http://127.0.0.1:35135/api/app/send": dial tcp 127.0.0.1:35135: connect: connection refused
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:39 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:39 console: api instances create bab/titogo: refused: acme.go.tito.io still holds replica data from a deleted record (#199); purge it to free the host
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:39 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:39 console: api sidecars create bab/titogo: refused: bot.titogo.bab.sidecar.internal still holds replica data from a deleted record (#199); purge it to free the host
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:39 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:39 console: api instances create bab/titogo: refused: acme.go.tito.io still holds replica data from a deleted record (#199); purge it to free the host
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:39 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:39 console: api sidecars create bab/titogo: refused: bot.titogo.bab.sidecar.internal still holds replica data from a deleted record (#199); purge it to free the host
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:39 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:39 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:39 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:39 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:39 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:39 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:39 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:39 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:39 console: api instances create bab/titogo: leftover replica check for acme.go.tito.io: replica client for instances/acme.go.tito.io: resolve region for secret-bucket: no credentials
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: api instances create bab/titogo: leftover replica check for acme.go.tito.io: list instances/acme.go.tito.io level 0: list secret-bucket: connection reset
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: api instances create bab/titogo: leftover replica check for acme.go.tito.io: list instances/acme.go.tito.io level 0: page secret-bucket: timeout
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: api sidecars create bab/titogo: leftover replica check for bot.titogo.bab.sidecar.internal: list instances/bot.titogo.bab.sidecar.internal level 0: list secret-bucket: connection reset
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: api sidecars create bab/titogo: leftover replica check for bot.titogo.bab.sidecar.internal: list instances/bot.titogo.bab.sidecar.internal level 0: page secret-bucket: timeout
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: api sidecars create bab/titogo: leftover replica check for bot.titogo.bab.sidecar.internal: replica client for instances/bot.titogo.bab.sidecar.internal: resolve region for secret-bucket: no credentials
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:40 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:40 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:40 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:40 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: api instances create bab/titogo: refused: acme.go.tito.io still holds replica data from a deleted record (#199); purge it to free the host
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: api sidecars create bab/titogo: refused: bot.titogo.bab.sidecar.internal still holds replica data from a deleted record (#199); purge it to free the host
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:40 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:40 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:40 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:40 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:40 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: api instances create bab/titogo: read existing record for acme.go.tito.io: get secret-bucket: connection reset
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: api sidecars create bab/titogo: read existing record for bot.titogo.bab.sidecar.internal: get secret-bucket: connection reset
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:41 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:41 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/13 11:09:41 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/13 11:09:41 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: materialized account bac (Testco) from the bucket
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: materialized account bac (Testco) from the bucket
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: materialized account bac (Testco) from the bucket
2026/10/13 11:09:41 console: tombstone account bac: console: no deployment release store is configured on this box
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: trash marker bab/kass: release: malformed trash marker for bab/kass: invalid character 'n' looking for beginning of object key string
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: purge preflight bab/kass: release: bab/kass is flagged production — a trashed production app should be impossible; refusing to purge
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: purge preflight bab/kass: release: bab/kass is flagged production — a trashed production app should be impossible; refusing to purge
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:41 console: bab/kass has no trash marker and still has objects; restoring it here
2026/10/13 11:09:41 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:42 edgesfile: could not load box snapshots (bucket list refused) — edge set falls back to the configured list
2026/10/13 11:09:42 console: versions kass: bucket list refused
2026/10/13 11:09:42 console: tags kass: bucket list refused
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
2026/10/13 11:09:42 console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
2026/10/13 11:09:42 console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
2026/10/13 11:09:42 console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
2026/10/13 11:09:42 console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
2026/10/13 11:09:42 console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: deploy signer for bab/hello: key grant signature verification failed (not signed by the deployment's root release key)
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:42 console: deploy signer for bab/hello: mint key grant: invalid name "deploy.bad name!" (letters, digits, . _ - ; up to 64)
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: attach story.carlosframework.com: existing record is not this door's to adopt (read: provision: record bab/story/story.carlosframework.com: provision: invalid maintenance projection or protected fields)
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: attach story.carlosframework.com: existing record is not this door's to adopt (read: <nil>)
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: attach story.carlosframework.com: record write: opStore: timed out after the object landed
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: attach story.carlosframework.com: claim write: opStore: bucket unavailable
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: attach story.carlosframework.com: record write: opStore: bucket unavailable
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:43 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:09:44 console: could not notify paul@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:44 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: bill pass 2026-08: cost explorer: AccessDeniedException: user is not authorized
2026/10/13 11:09:45 console: bill pass 2026-07: cost explorer: AccessDeniedException: user is not authorized
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: bill pass 2026-08: cost explorer: ThrottlingException: rate exceeded
2026/10/13 11:09:45 console: bill pass 2026-07: cost explorer: ThrottlingException: rate exceeded
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:45 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:46 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: cost explorer: resolve aws credentials: failed to refresh cached credentials, no EC2 IMDS role found, operation error ec2imds: GetMetadata, exceeded maximum number of attempts, 3, request send failed, Get "http://169.254.169.254/latest/meta-data/iam/security-credentials/": dial tcp 169.254.169.254:80: connect: connection refused — bill pulls disabled for this process; manual bill entry only
2026/10/13 11:09:50 console: bill pass 2026-08: cost explorer: console: cost explorer disabled for this process
2026/10/13 11:09:50 console: bill pass 2026-07: cost explorer: console: cost explorer disabled for this process
2026/10/13 11:09:50 console: bill pass 2026-08: cost explorer: console: cost explorer disabled for this process
2026/10/13 11:09:50 console: bill pass 2026-07: cost explorer: console: cost explorer disabled for this process
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: storage pass: store bab/kass: endpoint down
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: storage pass: store record bab/kass: objstore: apps/bab/kass/store.json: invalid character 'n' looking for beginning of object key string
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: fold storage/census: storage day 2026-08-10: key "my-app/releases" has an invalid account segment "my-app"; attributing to bab
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:50 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: load economics: fleet meters unavailable: console: fleet meters: registry /tmp/TestLoadEconomicsDegradesWithoutRegistry1773553832/003/nonexistent-registry.db: stat /tmp/TestLoadEconomicsDegradesWithoutRegistry1773553832/003/nonexistent-registry.db: no such file or directory
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: edge proof: first signed request from the edge — X-Forwarded-For from loopback now needs a proof
2026/10/13 11:09:51 console: a loopback request carried X-Forwarded-For with no valid edge proof; counting it against the peer address. Expected now and then from a process on this box; on every request it means the edge no longer signs (rolled back?) and every client shares one rate limit
2026/10/13 11:09:51 console: a loopback request carried X-Forwarded-For with no valid edge proof; counting it against the peer address. Expected now and then from a process on this box; on every request it means the edge no longer signs (rolled back?) and every client shares one rate limit
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: expiry pass: trash bab/tmp-a: release: write trash marker for bab/tmp-a: hookStore: put refused
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: expiry pass: early purge bab/tmp-a: release: bab/tmp-a was trashed at 2026-10-13T10:09:51Z, not 2026-10-10T11:09:51Z: release: the trash marker is not the one the purge was decided for
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: expiry pass: early purge bab/tmp-a: release: purge apps/bab/tmp-a/releases/v1/site.tar.gz: hookStore: delete refused
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: expiry pass: bab/tmp-a is marked as the control plane; not purging it
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: expiry pass: bab/tmp-a has email estate; not purging it
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: the apps/ listing is empty but 1 trashed row(s) exist here — refusing to release their names; is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: the apps/ listing holds nothing but trash markers, or could not be read; expiring nothing and finalising nothing this pass. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: bab/tmp-due left the trash before its purge; settling it
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: the apps/ listing holds nothing but trash markers, or could not be read; expiring nothing and finalising nothing this pass. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: bab/tmp-due left the trash before its purge; settling it
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: the apps/ listing holds nothing but trash markers, or could not be read; expiring nothing and finalising nothing this pass. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: bab/tmp-due left the trash before its purge; settling it
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: the apps/ listing is empty but 1 trashed row(s) exist here — refusing to release their names; is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: the apps/ listing holds nothing but trash markers, or could not be read; expiring nothing and finalising nothing this pass. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: bab/tmp-due left the trash before its purge; settling it
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: the apps/ listing holds nothing but trash markers, or could not be read; expiring nothing and finalising nothing this pass. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: bab/tmp-due left the trash before its purge; settling it
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: the apps/ listing holds nothing but trash markers, or could not be read; expiring nothing and finalising nothing this pass. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: expiry pass: bab/tmp-due left the trash before its purge; settling it
2026/10/13 11:09:51 console: bab/tmp-due has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: bab/tmp-a is in the trash in the bucket; marking it trashed here
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: expiry pass: early purge bab/tmp-a: hookStore: delete refused
2026/10/13 11:09:51 console: expiry pass: the apps/ listing holds nothing but trash markers, or could not be read; expiring nothing and finalising nothing this pass. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:51 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: place bab/titogo: instance ghost.go.tito.io vanished mid-walk, skipping
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: fleet page bab/acme: load heartbeats: bucket list refused
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:52 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:53 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:53 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:53 console: geoip published ed972738 (GeoIP2-City, feed:test-feed)
2026/10/13 11:09:53 console: geoip published ed972738 (GeoIP2-City, feed:test-feed)
2026/10/13 11:09:53 console: geoip published ed972738 (GeoIP2-City, feed:test-feed)
2026/10/13 11:09:53 console: geoip feed test-feed: edition Tue, 06 Oct 2026 00:00:00 GMT rejected: checksum
2026/10/13 11:09:53 console: geoip feed test-feed: edition 2026-10 rejected: too large
2026/10/13 11:09:53 console: geoip feed test-feed: edition 2026-10 rejected: wrong type
2026/10/13 11:09:53 console: geoip feed test-feed: edition (none) rejected: download
2026/10/13 11:09:53 console: geoip feed status unreadable; this check's outcome was not recorded
2026/10/13 11:09:53 console: geoip feed status could not be cleared; retrying in 1ms
2026/10/13 11:09:53 console: geoip feed status could not be cleared; retrying in 2ms
2026/10/13 11:09:53 console: geoip published b3760190 (GeoIP2-Country, manual)
2026/10/13 11:09:53 console: geoip feed test-feed: edition (none) rejected: download
2026/10/13 11:09:53 console: geoip published ed972738 (GeoIP2-City, feed:test-feed)
2026/10/13 11:09:53 console: geoip database aaaaaaaa (GeoIP2-City) followed from this box's edge
2026/10/13 11:09:53 console: geoip database aaaaaaaa (GeoIP2-City) followed from this box's edge
2026/10/13 11:09:53 console: geoip database bbbbbbbb (GeoIP2-City) followed from this box's edge
2026/10/13 11:09:53 console: geoip database expired (GeoLite2, 30 days after build) and was closed
2026/10/13 11:09:53 console: geoip database cccccccc (GeoIP2-City) followed from this box's edge
2026/10/13 11:09:53 console: geoip local state unreadable; keeping the loaded database
2026/10/13 11:09:53 console: geoip database dddddddd (GeoIP2-City) followed from this box's edge
2026/10/13 11:09:53 console: geoip database expired (GeoLite2, 30 days after build) and was closed
2026/10/13 11:09:53 console: geoip local state unreadable; keeping the loaded database
2026/10/13 11:09:53 console: geoip database dddddddd (GeoIP2-City) followed from this box's edge
2026/10/13 11:09:53 console: geoip database expired (GeoLite2, 30 days after build) and was closed
2026/10/13 11:09:53 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:53 console: geoip published b3760190 (GeoIP2-Country, manual)
2026/10/13 11:09:53 console: geoip published b3760190 (GeoIP2-Country, manual)
2026/10/13 11:09:53 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:53 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:53 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:53 console: geoip published b3760190 (GeoIP2-Country, manual)
2026/10/13 11:09:53 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:54 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:54 console: geoip database bbbbbbbb expired (GeoLite2, 30 days after build) and was removed
2026/10/13 11:09:54 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:54 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:54 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:54 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:54 console: geoip published ed972738 (GeoIP2-City, feed:x)
2026/10/13 11:09:54 console: geoip published b3760190 (GeoIP2-Country, manual)
2026/10/13 11:09:54 console: geoip published ed972738 (GeoIP2-City, feed:x)
2026/10/13 11:09:54 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:54 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: infra pass: console: infra inventory not granted (disabled for this process): awsinv: every read was denied — this deployment has no inventory grant
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:57 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:57 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:58 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:58 console: could not notify alice@keymail.dev of a CLI token issue: Post "http://127.0.0.1:33635/api/app/send": dial tcp 127.0.0.1:33635: connect: connection refused
2026/10/13 11:09:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:58 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:58 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:58 console: promote kass v3 -> stable: promote kass v3 -> stable: stable is entered from beta only, and this build is on edge — use --hotfix to bypass the ladder
2026/10/13 11:09:58 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:58 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:58 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:58 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:58 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: backfilled account manifest for bab (ops)
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:09:59 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
--- FAIL: TestSystemDoorsRefuseAPreLayoutMoveWhileABoxIsNested (2.26s)
    layoutguard_test.go:119: rollback with every row flat = 200 map[channel:canary version:v0.25.0]
2026/10/13 11:10:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:01 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: audit system-update platform: sql: database is closed
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:04 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:05 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: mail push: suspended bab/jb-book — nothing accepted for 24h0m0s
2026/10/13 11:10:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:06 console: materialized account bbw (Blog) from the bucket
2026/10/13 11:10:06 console: materialized account mdbbndjqx (Kass) from the bucket
2026/10/13 11:10:06 console: materialized account bbw (Blog) from the bucket
2026/10/13 11:10:06 console: skipping accounts/bbx/account.json: sqid "bbx"/"elsewhere" is not Sqid(43)="bbx" — that is corruption, not a new account
2026/10/13 11:10:06 console: skipping accounts/broken/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/13 11:10:06 console: skipping accounts/empty/account.json: malformed account manifest: <nil>
2026/10/13 11:10:06 console: skipping accounts/wrong/account.json: sqid "wrong"/"wrong" is not Sqid(42)="bbw" — that is corruption, not a new account
2026/10/13 11:10:06 console: materialized account bac (Kass) from the bucket
2026/10/13 11:10:06 console: materialized account bbw (Kass) from the bucket
2026/10/13 11:10:06 console: materialized account bbw (Kass) from the bucket
2026/10/13 11:10:06 console: materialized account bac (Kass) from the bucket
2026/10/13 11:10:06 console: account bbw names owner "not-an-address", which is not a keymail address — nobody could sign in as it, so no membership was created. Fix it with: console member --add <address> bbw --role owner
2026/10/13 11:10:06 console: materialized account bbw (Kass) from the bucket
2026/10/13 11:10:06 console: accounts/bbw/account.json names owner "not-an-address", which is not a keymail address — materializing the account without it; give it one with `console member --add <address> bbw --role owner`
2026/10/13 11:10:06 console: materialized account bbw (Legacy) from the bucket
2026/10/13 11:10:06 console: materialized account bac (Testco) from the bucket
2026/10/13 11:10:06 console: reaped account bac (Testco) — its manifest is tombstoned
2026/10/13 11:10:06 console: materialized account bac (Testco) from the bucket
2026/10/13 11:10:06 console: reaped account bac (Testco) — its manifest is tombstoned
2026/10/13 11:10:06 console: materialized account bac (Testco) from the bucket
2026/10/13 11:10:06 console: bac/alpha is in the trash in the bucket — marking it trashed here
2026/10/13 11:10:06 console: bac/beta has no trash marker and still has objects — restoring it here
2026/10/13 11:10:06 console: bac/gamma is gone from the bucket — releasing the name here
2026/10/13 11:10:06 console: materialized account bac (Testco) from the bucket
2026/10/13 11:10:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:07 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:08 console: background metrics sweep panic, cache left at its last good sweep: simulated bucket panic
2026/10/13 11:10:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:08 console: background metrics sweep: list metrics/boxes/: bucket had a bad day
2026/10/13 11:10:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:08 console: background metrics sweep: list metrics/boxes/: bucket had a bad day
2026/10/13 11:10:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:08 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:09 console: moves: warning: acme.go.tito.io: the log of move mv_retired at done is held: the writer refuses it (hostops: identity mismatch); its entry is kept until its incarnation is purged
2026/10/13 11:10:09 console: moves: warning: acme.go.tito.io: the log of move mv_earlier at done is held: the writer refuses it (hostops: identity mismatch); its entry is kept until its incarnation is purged
2026/10/13 11:10:09 console: audit instance-delete titogo: hostops: pending
2026/10/13 11:10:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:18 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:18 console: moves: acme.go.tito.io: the start of move mv_s6z4e2d4x7jlpedhtkdiqvg2bi settled not-applied
2026/10/13 11:10:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:19 console: moves: acme.go.tito.io: move mv_oypdwogoqd462snjpuvuv7vhzq closed by the console (rolled-back-close); the release follows
2026/10/13 11:10:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:19 console: moves: acme.go.tito.io: move mv_fytsttgyrrz3acgumo7li5u4a4 closed by the console (close); the release follows
2026/10/13 11:10:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:19 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:20 console: moves: acme.go.tito.io: move mv_lhf64llzhj6z5viltbf34tijnm is still preparing after 6h0m0s; aborted
2026/10/13 11:10:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:20 console: moves: acme.go.tito.io: move mv_7xkalpt7h7ymtz2nrkhs4ckkg4 closed by the console (close); the release follows
2026/10/13 11:10:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:20 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:20 console: moves: acme.go.tito.io: move mv_th3amwxqvbpfcxhvw43k3xgdyy is still preparing after 6h0m0s; aborted
2026/10/13 11:10:21 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:21 console: moves: acme.go.tito.io: move mv_nudfsfsh6cd2dfg7rcrcqcdonu closed by the console (close); the release follows
2026/10/13 11:10:21 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:21 console: moves: acme.go.tito.io: move mv_amvo55tvj6jovbozvcekul3ooa closed by the console (close); the release follows
2026/10/13 11:10:21 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:21 console: moves: acme.go.tito.io: move mv_vngfm7sdbklzjeqwey4r42mwya closed by the console (close); the release follows
2026/10/13 11:10:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:22 console: moves: warning: kass.carlosapp.dev: the log of move mv_5zhggbexultjga7wli4mrkziey at elsewhere is held: the writer refuses it (hostops: identity mismatch); its entry is kept until its incarnation is purged
2026/10/13 11:10:22 console: moves: warning: acme.go.tito.io: the log of move mv_5zhggbexultjga7wli4mrkziey at stale is held: the writer refuses it (hostops: identity mismatch); its entry is kept until its incarnation is purged
2026/10/13 11:10:22 console: moves: warning: acme.go.tito.io: the log of move mv_forged at forged is held: the writer refuses it (hostops: identity mismatch); its entry is kept until its incarnation is purged
2026/10/13 11:10:22 console: moves: warning: acme.go.tito.io: the log of move mv_5zhggbexultjga7wli4mrkziey at retired is held: the writer refuses it (hostops: identity mismatch); its entry is kept until its incarnation is purged
2026/10/13 11:10:22 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:23 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:24 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:26 console: api instance move bab/titogo/acme.go.tito.io: declared loss refused: hostresolve: evidence or operation does not authorize resolution
2026/10/13 11:10:26 console: moves: warning: acme.go.tito.io: the log of move mv_dx4ckwwmteqsbubtfi62qfsbq4 at rolling_back-target-lost has been unwritten for over an hour: unconfirmed: no loss of the move's target has committed, and the move can still be declared lost
2026/10/13 11:10:26 console: moves: acme.go.tito.io: the log of move mv_dx4ckwwmteqsbubtfi62qfsbq4 at rolling_back-target-lost was never confirmed and the claim no longer holds the instance it was queued for; dropped
2026/10/13 11:10:26 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:27 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:28 console: api instance move bab/titogo/acme.go.tito.io: typed move write: moves: the declared loss cannot be queued in the move log: SQL logic error: no such table: move_log_outbox (1)
2026/10/13 11:10:28 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:29 console: claim request refused: moves: the declared loss cannot be queued in the move log: SQL logic error: no such table: move_log_outbox (1)
2026/10/13 11:10:29 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:31 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:32 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:33 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: confirm pending change: database is locked
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: could not notify paul@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: api promote widget abc1234 -> wip: promote widget abc1234 -> wip: "wip" is not one of this app's channels (edge, beta, production) — use --hotfix to point a channel outside the pipeline
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: execute promote cca14e250f312ccd4945d6a7048cb779: 1 of 2 confirmations counted (1 rows, quorum stored 2)
2026/10/13 11:10:34 console: execute promote 7ecf32f341341a535988f8406a3777b3: change belongs to 1/"kass", not 1/"widget"
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:34 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:35 console: api promote widget abc1234 -> production: promote widget abc1234 -> production: production is entered from beta only, and this build is on edge — use --hotfix to bypass the order
2026/10/13 11:10:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:35 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:35 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: execute promote widget v2 -> production: promote --retry renews a promotion: production names v3, not v2
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: app region bab/solo:  (default)
2026/10/13 11:10:36 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: app region bab/solocan:  (default)
2026/10/13 11:10:36 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: app region bab/soloflow:  (default)
2026/10/13 11:10:36 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: app region bab/multiflow:  (default)
2026/10/13 11:10:36 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: app region bab/bakeapp:  (default)
2026/10/13 11:10:36 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: app region bab/multi:  (default)
2026/10/13 11:10:36 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: app region bab/queue:  (default)
2026/10/13 11:10:36 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: app region bab/settle:  (default)
2026/10/13 11:10:36 console: backfilled account manifest for bab (ops)
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:36 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:37 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/13 11:10:38 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 7958d12cdc8a9fea, op 1)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation a831a7b02f3d0f82, op 1)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 789fa79274c1464b, op 1)
console: relay disabled bab/titogo by alice@keymail.dev (op 2)
console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 3ce37583b71cc076, op 3)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 78c222550dd70c90, op 1)
console: relay enabled bab/meet in eu-west-1 by alice@keymail.dev (incarnation 5b60de34967c9853, op 1)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 77aab670a467e572, op 1)
console: relay disabled bab/titogo by alice@keymail.dev (op 2)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: relay enabled bab/kass in eu-west-1 by paul@keymail.dev (incarnation 3a95b7303ff2d115, op 1)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 836bb700cf769818, op 1)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 7e1d4a011809fcc3, op 1)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 4e030c1125b33d88, op 1)
console: relay rotated eu-west-1 to kid k2, re-issued 1 app(s)
console: relay rotated eu-west-1 to kid k3, re-issued 1 app(s)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: relay enabled bab/titogo in eu-west-1 by alice@keymail.dev (incarnation 9a104053d6bcdc63, op 1)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: bab/tmp-a has no trash marker and still has objects; restoring it here
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: bab/kass is in the trash in the bucket; marking it trashed here
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: bab/kass is in the trash in the bucket; marking it trashed here
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: api restore row bab/kass: constraint failed: test: step 5 refused (1811)
console: bab/kass has no trash marker and still has objects; restoring it here
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: restore row bab/kass: constraint failed: test: step 5 refused (1811)
console: bab/kass has no trash marker and still has objects; restoring it here
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
status: fleet: skipping status/boxes/broken.json: corrupt snapshot: invalid character 'n' looking for beginning of object key string
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
status: fleet: skipping status/boxes/broken.json: corrupt snapshot: invalid character 'n' looking for beginning of object key string
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: api instances list bab/kass: 1 record(s) unreadable [pi-host.example.test]; every fleet counts toward the rollout join
status: fleet: skipping status/boxes/broken.json: corrupt snapshot: invalid character 'n' looking for beginning of object key string
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
status: fleet: skipping status/boxes/broken.json: corrupt snapshot: invalid character 'n' looking for beginning of object key string
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: scan pass: bab/aaa-broken: endpoint down
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: a clamd address is configured but object scanning is not enabled — run `carlos system antivirus enable`
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: serial bump: AccessDenied: s3://carlos-prod-secret-bucket/ledgers request id ABC123 (boxes fall back to the hourly pass)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry cyk: dirstore: invalid key "apps/cyk//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: app region bab/blog:  (default)
console: backfilled account manifest for bab (ops)
console: app region cyz/blog:  (default)
console: backfilled account manifest for cyz (Second)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: confirmation send to paul@keymail.dev: keymail: grant revoked or invalid
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: app region bab/zephyr:  (default)
console: backfilled account manifest for bab (ops)
console: app region bab/orphan:  (default)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: retire kass canary/x: check followers: unable to open database file (14)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: app region bab/zephyr:  (default)
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: steering hostname "*.oncarlos.com" is not a valid domain — custom-domain guidance keeps the A-record form
console: steering hostname "not a host" is not a valid domain — custom-domain guidance keeps the A-record form
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: fleet hosts: bucket list refused
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: app metrics kass: list metrics/boxes/: boom
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: ses events: refused topic "arn:aws:sns:eu-west-1:9:someone-else" — this deployment expects "arn:aws:sns:eu-west-1:1:carlos-mail"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: ses events: refused topic "arn:aws:sns:eu-west-1:9:someone-else" — this deployment expects "arn:aws:sns:eu-west-1:1:carlos-mail"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: ses events: refusing SubscribeURL: sns: SigningCertURL is not https
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: ses events: signature verification failed: fake: signature does not verify
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: bab/tmp-a is in the trash in the bucket; marking it trashed here
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: bab/kass is in the trash in the bucket; marking it trashed here
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: bab/tmp-a: a restore did not remove the trash marker; it stays in the trash
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: bab/tmp-a has no trash marker and still has objects; restoring it here
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: bab/tmp-a has no trash marker and still has objects; restoring it here
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: bab/tmp-a is gone from the bucket; releasing the name here
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: bab/tmp-a has no trash marker and no objects, but the apps/ listing holds nothing else either; leaving the row. Is CARLOS_DEPLOYMENT_BUCKET pointing at the right bucket?
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: materialized account bac (Testco) from the bucket
console: bac/perm is in the trash in the bucket — marking it trashed here
console: bac/tmp-a is in the trash in the bucket — marking it trashed here
console: materialized account bac (Testco) from the bucket
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: step-up refused: http://127.0.0.1:36843 does not advertise re-authentication
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: step-up capability check: Get "http://127.0.0.1:34701/.well-known/keymail": dial tcp 127.0.0.1:34701: connect: connection refused
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: step-up produced no usable auth_time (zero=true age=2562047h47m16.854775807s)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: step-up produced no usable auth_time (zero=false age=10m0.003535s)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: step-up address mismatch for session of paul@keymail.dev
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: remove member: console: paul@keymail.dev is the last owner of this account — transfer ownership first
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: storage pass: store record bab/kass in environment beta: objstore: apps/bab/kass/stores/beta.json: invalid character 'n' looking for beginning of object key string
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: store application bab: no keymail grant for missing@keymail.dev — not notified (they must sign in to the console once)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: store application bab: keymail to ops@keymail.dev: send failed
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: store decision bab: keymail to paul@keymail.dev: delivery failed
console: store application bab: keymail to paul@keymail.dev: delivery failed
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: store decision bab: no keymail grant for paul@keymail.dev — not notified (they must sign in to the console once)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: store decision bab: keymail to paul@keymail.dev: Post "http://127.0.0.1:46637/api/app/send": dial tcp 127.0.0.1:46637: connect: connection refused
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: render account_settings: write tcp 127.0.0.1:43511->127.0.0.1:52558: write: broken pipe
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: could not notify paul@keymail.dev of a CLI token issue: Post "http://127.0.0.1:42935/api/app/send": dial tcp 127.0.0.1:42935: connect: connection refused
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: app region bab/four:  (default)
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: app region bab/tmp-tz: uk (timezone)
console: backfilled account manifest for bab (ops)
console: app region bab/tmp-chosen: uk (chosen)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: app region bab/tmp-plain: ie (default)
console: backfilled account manifest for bab (ops)
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
status: fleet: skipping status/boxes/zz-1.json: corrupt snapshot: invalid character 'n' looking for beginning of object key string
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
console: api updates bab/km/a.example.com: enable refused, not every box applies update settings: the fleet registry could not be read (registry /tmp/TestEnableDoorsFailClosedOnAnUncheckedBoxregistry_missing2658963624/003/absent-registry.db: stat /tmp/TestEnableDoorsFailClosedOnAnUncheckedBoxregistry_missing2658963624/003/absent-registry.db: no such file or directory), so no fleet box was checked
console: api updates bab/km policy: enable refused, not every box applies update settings: the fleet registry could not be read (registry /tmp/TestEnableDoorsFailClosedOnAnUncheckedBoxregistry_missing2658963624/003/absent-registry.db: stat /tmp/TestEnableDoorsFailClosedOnAnUncheckedBoxregistry_missing2658963624/003/absent-registry.db: no such file or directory), so no fleet box was checked
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
console: api updates bab/km/a.example.com: enable refused, not every box applies update settings: fx/bx-1: no heartbeat
console: api updates bab/km policy: enable refused, not every box applies update settings: fx/bx-1: no heartbeat
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
console: api updates bab/km/a.example.com: enable refused, not every box applies update settings: fx/bx-1: runs a binary that does not apply update settings
console: api updates bab/km policy: enable refused, not every box applies update settings: fx/bx-1: runs a binary that does not apply update settings
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
console: api updates bab/km/a.example.com: enable refused, not every box applies update settings: fx/bx-1: no heartbeat since 2026-10-13T10:55:59Z
console: api updates bab/km policy: enable refused, not every box applies update settings: fx/bx-1: no heartbeat since 2026-10-13T10:55:59Z
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
status: fleet: skipping status/boxes/zz-1.json: corrupt snapshot: invalid character 'n' looking for beginning of object key string
console: api updates bab/km/a.example.com: enable refused, not every box applies update settings: the list of boxes could not be read in full
status: fleet: skipping status/boxes/zz-1.json: corrupt snapshot: invalid character 'n' looking for beginning of object key string
console: api updates bab/km policy: enable refused, not every box applies update settings: the list of boxes could not be read in full
status: fleet: skipping status/boxes/zz-1.json: corrupt snapshot: invalid character 'n' looking for beginning of object key string
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
console: api updates bab/km/a.example.com: enable refused, not every box applies update settings: the fleet registry could not be read (no registry path is configured), so no fleet box was checked
console: api updates bab/km policy: enable refused, not every box applies update settings: the fleet registry could not be read (no registry path is configured), so no fleet box was checked
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
FAIL
FAIL	github.com/carlosframework/platform/internal/console	369.733s
?   	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	6.099s
ok  	github.com/carlosframework/platform/internal/dbdoor/dbdoortest	0.009s
ok  	github.com/carlosframework/platform/internal/dbverify	0.004s
ok  	github.com/carlosframework/platform/internal/dnsrec	0.003s
ok  	github.com/carlosframework/platform/internal/docsite	0.005s
ok  	github.com/carlosframework/platform/internal/domains	2.181s
ok  	github.com/carlosframework/platform/internal/doorkey	0.006s
ok  	github.com/carlosframework/platform/internal/economics	0.004s
ok  	github.com/carlosframework/platform/internal/edge	26.279s
?   	github.com/carlosframework/platform/internal/edgeproof	[no test files]
ok  	github.com/carlosframework/platform/internal/edgesfile	0.008s
ok  	github.com/carlosframework/platform/internal/fleetapi	0.124s
ok  	github.com/carlosframework/platform/internal/gate	1.655s
ok  	github.com/carlosframework/platform/internal/genselect	0.015s
ok  	github.com/carlosframework/platform/internal/geo	0.016s
ok  	github.com/carlosframework/platform/internal/geoip	0.030s
ok  	github.com/carlosframework/platform/internal/host	87.341s
ok  	github.com/carlosframework/platform/internal/hostactors	0.294s
ok  	github.com/carlosframework/platform/internal/hostbox	2.174s
ok  	github.com/carlosframework/platform/internal/hostclaim	0.496s
ok  	github.com/carlosframework/platform/internal/hostevidence	0.006s
ok  	github.com/carlosframework/platform/internal/hostexec	0.546s
ok  	github.com/carlosframework/platform/internal/hostfence	0.036s
ok  	github.com/carlosframework/platform/internal/hostfiles	11.120s
ok  	github.com/carlosframework/platform/internal/hostfloor	0.012s
ok  	github.com/carlosframework/platform/internal/hostguard	0.382s
ok  	github.com/carlosframework/platform/internal/hostops	1.445s
?   	github.com/carlosframework/platform/internal/hostops/fencerelease	[no test files]
ok  	github.com/carlosframework/platform/internal/hostops/internal/fencerelease	0.002s
ok  	github.com/carlosframework/platform/internal/hostquarantine	0.002s
ok  	github.com/carlosframework/platform/internal/hostrelocate	0.454s
ok  	github.com/carlosframework/platform/internal/hostresolve	0.166s
ok  	github.com/carlosframework/platform/internal/hostwrite	0.001s
ok  	github.com/carlosframework/platform/internal/infraview	0.005s
ok  	github.com/carlosframework/platform/internal/instancectl	1.733s
ok  	github.com/carlosframework/platform/internal/instanceexec	2.822s
ok  	github.com/carlosframework/platform/internal/instancefs	0.019s
ok  	github.com/carlosframework/platform/internal/instancekey	0.016s
ok  	github.com/carlosframework/platform/internal/instanceupdates	0.023s
ok  	github.com/carlosframework/platform/internal/layout	1.421s
ok  	github.com/carlosframework/platform/internal/lease	9.475s
ok  	github.com/carlosframework/platform/internal/lease/leasetest	0.005s
ok  	github.com/carlosframework/platform/internal/ledger	0.011s
ok  	github.com/carlosframework/platform/internal/mail	0.173s
ok  	github.com/carlosframework/platform/internal/maintenance	0.088s
ok  	github.com/carlosframework/platform/internal/maintenanceexec	5.621s
ok  	github.com/carlosframework/platform/internal/maintenanceguard	0.092s
ok  	github.com/carlosframework/platform/internal/metrics	0.005s
ok  	github.com/carlosframework/platform/internal/moves	21.618s
ok  	github.com/carlosframework/platform/internal/moves/archive	0.783s
ok  	github.com/carlosframework/platform/internal/objstore	0.195s
ok  	github.com/carlosframework/platform/internal/ops	0.160s
ok  	github.com/carlosframework/platform/internal/park	0.234s
ok  	github.com/carlosframework/platform/internal/privatefile	0.004s
ok  	github.com/carlosframework/platform/internal/provision	30.914s
ok  	github.com/carlosframework/platform/internal/publicrelease	0.008s
?   	github.com/carlosframework/platform/internal/regionname	[no test files]
ok  	github.com/carlosframework/platform/internal/registry	4.317s
ok  	github.com/carlosframework/platform/internal/relay	7.248s
ok  	github.com/carlosframework/platform/internal/release	20.718s
ok  	github.com/carlosframework/platform/internal/rollout	3.775s
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.006s
ok  	github.com/carlosframework/platform/internal/rootstate	0.025s
ok  	github.com/carlosframework/platform/internal/s3compat	0.005s
ok  	github.com/carlosframework/platform/internal/safefile	0.004s
ok  	github.com/carlosframework/platform/internal/schedule	2.535s
ok  	github.com/carlosframework/platform/internal/sim/hostlife	11.670s
ok  	github.com/carlosframework/platform/internal/sim/litestreamfacts	4.051s
ok  	github.com/carlosframework/platform/internal/status	0.040s
ok  	github.com/carlosframework/platform/internal/steering	0.006s
ok  	github.com/carlosframework/platform/internal/stopevidence	0.186s
ok  	github.com/carlosframework/platform/internal/svcrole	0.002s
ok  	github.com/carlosframework/platform/internal/telemetry	0.004s
ok  	github.com/carlosframework/platform/internal/termfence	0.004s
ok  	github.com/carlosframework/platform/internal/tunnelclient	0.007s
ok  	github.com/carlosframework/platform/internal/unixdial	0.003s
ok  	github.com/carlosframework/platform/internal/updatewords	0.004s
ok  	github.com/carlosframework/platform/internal/usage	0.004s
ok  	github.com/carlosframework/platform/internal/version	0.002s
ok  	github.com/carlosframework/platform/internal/vet	1.570s
FAIL
make: *** [Makefile:18: test] Error 1

amadan: step gate failed: exit status 2

amadan: job failed at step gate — its output is above, not at the tail of this log
diff --git a/internal/host/claimassembly.go b/internal/host/claimassembly.go
index c43d3dabd..3df628bb4 100644
--- a/internal/host/claimassembly.go
+++ b/internal/host/claimassembly.go
@@ -354,7 +354,18 @@ func NewProductionRootClaimStop(ctx context.Context) (http.Handler, error) {
reconcile := *assembly.Reconcile
reconcile.Box, reconcile.Enrollment = actor.Box, actor.Enrollment
reconcile.Census = &hostbox.EmptyInstallationCensus{Inventory: assembly.Reconcile.Inventory, Registry: assembly.Reconcile.Registry, Launches: assembly.Launches, Box: actor.Box, Enrollment: actor.Enrollment, DirectoryRevision: fmt.Sprint(actor.Revision), Roots: assembly.ManagedRoots, SharedPaths: assembly.SharedPaths}
- return ClaimRootHTTP{InventoryActor: assembly.actorForRoot, Journals: assembly.Journals, RequireNewWork: func(ctx context.Context) error { _, err := assembly.Identity.Verify(ctx); return err }, Launches: assembly.Launches, Stop: stop, Reconcile: reconcile, Roots: assembly.ManagedRoots}, nil
+ root := ClaimRootHTTP{InventoryActor: assembly.actorForRoot, Journals: assembly.Journals, RequireNewWork: func(ctx context.Context) error { _, err := assembly.Identity.Verify(ctx); return err }, Launches: assembly.Launches, Stop: stop, Reconcile: reconcile, Roots: assembly.ManagedRoots}
+ state, err := openClaimExecutionAuthority()
+ if err != nil {
+ return nil, err
+ }
+ runtime, err := newClaimExecutionRuntime(root, state)
+ if err != nil {
+ state.Close()
+ return nil, err
+ }
+ root.Execution, root.executionRuntime = runtime.broker, runtime
+ return root, nil
}
func claimMoveLocalAuthorizer(check func(context.Context) error, owner func(context.Context, hostclaim.Observed, hostclaim.Obligation) error) ClaimLocalParkAuthorizer {
diff --git a/internal/host/claimlaunch_production.go b/internal/host/claimlaunch_production.go
index f7b9413ca..041037098 100644
--- a/internal/host/claimlaunch_production.go
+++ b/internal/host/claimlaunch_production.go
@@ -100,6 +100,9 @@ func claimLaunchFor(root ClaimRootHTTP, actor func(context.Context) (hostbox.Act
launch.Attempts = map[string]claimLaunchAttemptReader{hostclaim.KindRelocating: relocationAttemptReader{DataDir: roots["data"]}}
}
root.Stop.Coordinator.Kernel = claimUnitStopKernel{Inner: coordinator.Kernel, Journal: root.Launches, Units: units}
+ if root.executionRuntime != nil {
+ root.executionRuntime.root = &root
+ }
return ClaimRootWithLaunch{Root: root, Launch: launch}, nil
}
diff --git a/internal/host/claimparticipation.go b/internal/host/claimparticipation.go
index c7ddfc046..05d4cac97 100644
--- a/internal/host/claimparticipation.go
+++ b/internal/host/claimparticipation.go
@@ -22,14 +22,23 @@ import (
type claimParticipation struct {
Binding execlease.Binding
- Controller *execlease.Controller
+ Controller claimExecutionController
Ready chan struct{}
Err error
Config execlease.Config
Captured hostclaim.Observed
CleanupSucceeded bool
}
+type claimExecutionController interface {
+ Ready(context.Context) (execlease.State, error)
+ Close(context.Context) error
+}
+
type productionClaimLocal struct {
+ executionCall func(context.Context, execlease.ExecutionRequest) (execlease.ExecutionResponse, error)
+ serving map[string]execlease.ExecutionRequest
+ legacyParticipation bool // Only legacy-controller fixtures select this path.
+
executionRead func(context.Context, *hostclaim.Claim) (execlease.ExecutionRecord, error)
Resources ClaimRuntimeResources
Identity hostbox.IdentityProvider
@@ -98,7 +107,7 @@ func (p *productionClaimLocal) Prepare(ctx context.Context, o hostclaim.Observed
}
return p.prepareWith(ctx, actor, o)
}
-func (p *productionClaimLocal) prepareWith(ctx context.Context, actor hostbox.Actor, o hostclaim.Observed) error {
+func (p *productionClaimLocal) prepareLegacyWith(ctx context.Context, actor hostbox.Actor, o hostclaim.Observed) error {
var err error
c := o.Claim
p.mu.Lock()
@@ -250,7 +259,7 @@ func (p *productionClaimLocal) cleanup(ctx context.Context, o hostclaim.Observed
}
return a.Reconcile.Census.CheckLocal(ctx, o, hostbox.RecordSelection{Host: o.Host, Incarnation: o.Claim.Holder.Incarnation})
}
-func (p *productionClaimLocal) Check(ctx context.Context, a hostbox.Actor, c *hostclaim.Claim, s hostbox.Selection) error {
+func (p *productionClaimLocal) checkLegacy(ctx context.Context, a hostbox.Actor, c *hostclaim.Claim, s hostbox.Selection) error {
if ctx.Err() != nil {
return ctx.Err()
}
@@ -407,14 +416,14 @@ func (p *productionClaimLocal) participateHost(ctx context.Context, actor hostbo
if o.Absent || o.Claim == nil {
return nil
}
- p.mu.Lock()
- tracked := p.slots[host] != nil
- p.mu.Unlock()
- if !tracked && (o.Claim.Op.Kind == hostclaim.KindServing || !slices.Contains(o.Claim.Op.Participants, actor.Box)) {
- // Process memory is not the inventory. A previous agent may have left
- // active/lost state for a host that no longer selects work on this box.
- if _, err := execlease.InspectLocal(p.Resources.DataDir, host); errors.Is(err, os.ErrNotExist) {
- return nil
+ if p.legacyParticipation {
+ p.mu.Lock()
+ tracked := p.slots[host] != nil
+ p.mu.Unlock()
+ if !tracked && (o.Claim.Op.Kind == hostclaim.KindServing || !slices.Contains(o.Claim.Op.Participants, actor.Box)) {
+ if _, err := execlease.InspectLocal(p.Resources.DataDir, host); errors.Is(err, os.ErrNotExist) {
+ return nil
+ }
}
}
return p.prepareWith(ctx, actor, o)
diff --git a/internal/host/claimparticipation_relocation.go b/internal/host/claimparticipation_relocation.go
index 0a83a4bdd..f90e9bea4 100644
--- a/internal/host/claimparticipation_relocation.go
+++ b/internal/host/claimparticipation_relocation.go
@@ -83,6 +83,9 @@ func (p *productionClaimLocal) dischargeCompletedAs(ctx context.Context, actor h
if slot != nil {
return execlease.ErrInactive
}
+ if !p.legacyParticipation {
+ return nil
+ }
if _, err := execlease.InspectLocal(p.Resources.DataDir, o.Host); !errors.Is(err, os.ErrNotExist) {
return errors.Join(execlease.ErrInactive, err)
}
diff --git a/internal/host/claimparticipation_stale_test.go b/internal/host/claimparticipation_stale_test.go
index 452b1c16f..fffeb622a 100644
--- a/internal/host/claimparticipation_stale_test.go
+++ b/internal/host/claimparticipation_stale_test.go
@@ -87,7 +87,7 @@ func TestPlan9PreviousAgentRetiredParticipation(t *testing.T) {
}
t.Cleanup(func() { reg.Close() })
census := &hostbox.EmptyInstallationCensus{Inventory: inventory, Registry: reg, Launches: f.journal, Box: "box-1", Enrollment: "enrollment-1", DirectoryRevision: "7", Roots: map[string]string{"data": f.guard.DataDir, "opt": t.TempDir(), "units": t.TempDir()}, SharedPaths: map[string][]string{"data": {".hostexec", "hostguard"}}}
- p := &productionClaimLocal{Resources: ClaimRuntimeResources{Mode: "agent", DataDir: f.guard.DataDir}, lifetime: ctx, assembly: &ClaimAssembly{Wake: &ClaimWakeAssembly{}, Launches: f.journal, Reconcile: &hostbox.ReconcileAdapter{Census: census}}}
+ p := &productionClaimLocal{legacyParticipation: true, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: f.guard.DataDir}, lifetime: ctx, assembly: &ClaimAssembly{Wake: &ClaimWakeAssembly{}, Launches: f.journal, Reconcile: &hostbox.ReconcileAdapter{Census: census}}}
state := execlease.State{V: 1, Binding: execlease.Binding{Host: recoveryHost, Box: "box-1", Enrollment: "enrollment-1", Incarnation: inc, Op: "old-op", BootID: "old-boot", ControllerID: "old-controller"}, State: "lost", SafeUntil: 1, Expires: time.Now()}
dir := filepath.Join(f.guard.DataDir, ".hostexec")
if err = os.Mkdir(dir, 0700); err != nil {
diff --git a/internal/host/claimproduction_admintoken_test.go b/internal/host/claimproduction_admintoken_test.go
index 2f15eb1ed..9c5c8d555 100644
--- a/internal/host/claimproduction_admintoken_test.go
+++ b/internal/host/claimproduction_admintoken_test.go
@@ -72,7 +72,7 @@ func newAdminTokenFixture(t *testing.T, execBox string) *adminTokenFixture {
t.Cleanup(func() { reg.Close() })
f := &adminTokenFixture{t: t, claims: st, data: data, backend: &activator.ExecBackend{DataDir: data, OptDir: opt}, actor: hostbox.Actor{Box: "box-1", Region: "ie", Enrollment: "enr-1"}}
f.rt = registry.Route{Host: adminTokenHost, Socket: filepath.Join(root, "run", "app.sock"), DBPath: filepath.Join(data, adminTokenHost+".db")}
- local := &productionClaimLocal{Resources: ClaimRuntimeResources{Mode: "agent", DataDir: data}, slots: map[string]*claimParticipation{}}
+ local := &productionClaimLocal{legacyParticipation: true, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: data}, slots: map[string]*claimParticipation{}}
f.tokens = claimAdminTokens{
Guard: hostguard.Guard{DataDir: data, LockDir: t.TempDir(), Claims: hostguard.StoreReader{Store: st}},
Claims: st,
diff --git a/internal/host/claimretire_transport.go b/internal/host/claimretire_transport.go
index 7286c9728..7cec4edf0 100644
--- a/internal/host/claimretire_transport.go
+++ b/internal/host/claimretire_transport.go
@@ -22,14 +22,15 @@ import (
)
type ClaimRootHTTP struct {
- Execution *execlease.RootBroker
- InventoryActor func(context.Context) (hostbox.Actor, error)
- RequireNewWork func(context.Context) error
- Journals *hostbox.JournalService
- Launches *hostbox.LaunchJournal
- Stop ClaimStopHTTP
- Reconcile hostbox.ReconcileAdapter
- Roots map[string]string
+ executionRuntime *claimExecutionRuntime
+ Execution *execlease.RootBroker
+ InventoryActor func(context.Context) (hostbox.Actor, error)
+ RequireNewWork func(context.Context) error
+ Journals *hostbox.JournalService
+ Launches *hostbox.LaunchJournal
+ Stop ClaimStopHTTP
+ Reconcile hostbox.ReconcileAdapter
+ Roots map[string]string
}
func (h ClaimRootHTTP) RecoverPending(ctx context.Context) error {
@@ -50,7 +51,15 @@ func (h ClaimRootHTTP) RecoverPending(ctx context.Context) error {
return err
}
}
- return h.recoverRootInventory(ctx)
+ if err := h.recoverRootInventory(ctx); err != nil {
+ return err
+ }
+ if h.Execution != nil {
+ // Retained failures deny their host; recovery must not remove the
+ // socket needed to finish their existing stop protocol.
+ _ = h.Execution.Recover(ctx)
+ }
+ return ctx.Err()
}
func (h ClaimRootHTTP) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/claim/execution" && r.URL.Path != "/claim/recovery-rebind" && r.URL.Path != "/claim/retire" && r.URL.Path != "/claim/handover" && r.URL.Path != "/claim/journal" {
diff --git a/internal/host/claimstop_run.go b/internal/host/claimstop_run.go
index 95cc4d89f..3dd16f9ca 100644
--- a/internal/host/claimstop_run.go
+++ b/internal/host/claimstop_run.go
@@ -50,6 +50,14 @@ func RunInstanceControl(args []string) {
if err != nil {
log.Fatal(err)
}
+ execution := handler.(ClaimRootHTTP).executionRuntime
+ defer func() {
+ cleanup, cancel := context.WithTimeout(context.Background(), 30*time.Second)
+ defer cancel()
+ if err := execution.Close(cleanup); err != nil {
+ log.Printf("instance-control: host claims shutdown: %v", err)
+ }
+ }()
handler, err = WithProductionClaimLaunch(startup, handler)
if err != nil {
log.Fatal(err)
@@ -67,6 +75,7 @@ func RunInstanceControl(args []string) {
log.Fatal(err)
}
finishStartup()
+ execution.Start(ctx)
fenceDone := make(chan struct{})
go func() { defer close(fenceDone); runHostFencePass(ctx) }()
defer func() { cancel(); <-fenceDone }()
diff --git a/internal/host/guardparticipation_test.go b/internal/host/guardparticipation_test.go
index 58a66bb32..79175d84b 100644
--- a/internal/host/guardparticipation_test.go
+++ b/internal/host/guardparticipation_test.go
@@ -108,7 +108,7 @@ func TestSystemGuardUnpublishedKeepsRegionHAParticipation(t *testing.T) {
f, _ := applyHappy(t)
a := f.a
a.regionHA = true
- a.floor = &hostfloor.Disk{Dir: systemGuardDir(a.optDir), Bucket: "bucket", PublicKey: f.pub}
+ a.floor = &hostfloor.Disk{Dir: systemGuardDir(a.optDir), Bucket: "bucket", PublicKey: f.pub, Participation: a.participation}
if err := os.MkdirAll(a.floor.Dir, 0755); err != nil {
t.Fatal(err)
}
@@ -149,8 +149,8 @@ func TestSystemGuardUnpublishedKeepsRegionHAParticipation(t *testing.T) {
if err := a.Run(t.Context(), true); err == nil {
t.Fatal("malformed journal recovered")
}
- if _, err := os.Stat(a.stagingDir()); !os.IsNotExist(err) {
- t.Fatalf("unpublished cleanup differs from main: %v", err)
+ if _, err := os.Stat(a.stagingDir()); err != nil {
+ t.Fatalf("unresolved root recovery removed staging: %v", err)
}
if _, err := os.Stat(a.file("journal.json")); err != nil {
t.Fatalf("malformed journal discarded: %v", err)
diff --git a/internal/host/guardtransaction.go b/internal/host/guardtransaction.go
index 6090f3a55..57430230d 100644
--- a/internal/host/guardtransaction.go
+++ b/internal/host/guardtransaction.go
@@ -5,7 +5,6 @@ import (
"encoding/json"
"errors"
"github.com/carlosframework/platform/internal/hostactors"
- execlease "github.com/carlosframework/platform/internal/hostexec"
"github.com/carlosframework/platform/internal/hostfloor"
"github.com/carlosframework/platform/internal/release"
"os"
@@ -140,7 +139,7 @@ func (a *systemApplier) settleGuard(tx guardTransaction, beforeCompletion func()
if err := hostfloor.RemoveDurable(filepath.Join(a.floor.Dir, "update-begun.json")); err != nil {
return err
}
- return hostfloor.RemoveDurable(filepath.Join(a.floor.Dir, "activation.json"))
+ return a.floor.EndParticipation(context.Background(), tx.ID, func() error { return hostfloor.RemoveDurable(filepath.Join(a.floor.Dir, "activation.json")) })
}
if beforeCompletion != nil {
if err := beforeCompletion(); err != nil {
@@ -152,7 +151,7 @@ func (a *systemApplier) settleGuard(tx guardTransaction, beforeCompletion func()
if err = hostfloor.Durable(filepath.Join(a.floor.Dir, "completed.json"), []byte(tx.ID), 0644); err != nil {
return err
}
- return hostfloor.RemoveDurable(filepath.Join(a.floor.Dir, "update-begun.json"))
+ return a.floor.EndParticipation(context.Background(), tx.ID, func() error { return hostfloor.RemoveDurable(filepath.Join(a.floor.Dir, "update-begun.json")) })
}
func (a *systemApplier) guardTransaction() (guardTransaction, error) {
raw, err := os.ReadFile(filepath.Join(a.floor.Dir, "activation.json"))
@@ -223,12 +222,15 @@ func (a *systemApplier) beginGuard(ctx context.Context, target *release.SystemPo
// Both are terminal after the selected current image has been verified.
func (a *systemApplier) checkGuardRecovery() error {
if !a.guarded() {
- return nil
+ return a.checkUnarmedParticipationRecovery()
}
p, _, err := a.floor.Load()
- if err != nil || p.Mode == "unpublished" {
+ if err != nil {
return err
}
+ if p.Mode == "unpublished" {
+ return a.checkUnarmedParticipationRecovery()
+ }
j, err := readSystemJournal(a.optDir)
if err != nil {
return err
@@ -245,7 +247,7 @@ func (a *systemApplier) checkGuardRecovery() error {
}
completed, readErr := os.ReadFile(filepath.Join(a.floor.Dir, "completed.json"))
if readErr == nil && string(completed) == tx.ID {
- return nil
+ return a.floor.EndParticipation(context.Background(), tx.ID, nil)
}
if readErr != nil && !errors.Is(readErr, os.ErrNotExist) {
return readErr
@@ -296,9 +298,11 @@ func (a *systemApplier) endGuard() error {
return a.settleGuard(tx, nil)
}
-func (a *systemApplier) controllersIdle() error { return hostfloor.CheckControllersIdle(a.dataDir) }
+func (a *systemApplier) controllersIdle() error {
+ return a.participationDisk().ControllersIdle(context.Background(), a.dataDir)
+}
-var recoverPendingControllers = execlease.RecoverPending
+var recoverPendingControllers = recoverRootExecution
// controllersRecovered lets root recover a provably dead pending controller
// before refusing, whether or not a journal is open; a live or unreadable one
@@ -308,19 +312,26 @@ func (a *systemApplier) controllersRecovered() error {
if err == nil {
return nil
}
- if recoveryErr := recoverPendingControllers(context.Background(), a.dataDir, a.floor.Dir); recoveryErr != nil {
+ guardDir := systemGuardDir(a.optDir)
+ if a.floor != nil {
+ guardDir = a.floor.Dir
+ }
+ if recoveryErr := recoverPendingControllers(context.Background(), a.dataDir, guardDir); recoveryErr != nil {
return errors.Join(err, recoveryErr)
}
return a.controllersIdle()
}
func (a *systemApplier) closeGuardJournal() error {
- if !a.guarded() {
- a.removeJournal()
- return nil
+ active, err := a.activeFloor()
+ if err != nil {
+ return err
}
if err := hostfloor.RemoveDurable(a.file("journal.json")); err != nil {
return err
}
+ if !active {
+ return a.clearUpdateBegun()
+ }
return a.endGuard()
}
func (a *systemApplier) guardRun(ctx context.Context, wait time.Duration, name string, args ...string) (string, error) {
diff --git a/internal/host/guardtransaction_test.go b/internal/host/guardtransaction_test.go
index c6a801b5e..fcf5989bf 100644
--- a/internal/host/guardtransaction_test.go
+++ b/internal/host/guardtransaction_test.go
@@ -16,7 +16,7 @@ func TestFloorRefusalKeepsRecoveryJournalAndExecutesNothing(t *testing.T) {
for _, phase := range []string{systemPhaseBackingUp, systemPhaseInstalled, systemPhaseGated} {
t.Run(phase, func(t *testing.T) {
f := newApplyFixture(t, "stable", "old-build")
- f.a.floor = &hostfloor.Disk{Dir: t.TempDir(), Bucket: "bucket", PublicKey: f.pub}
+ f.a.floor = &hostfloor.Disk{Dir: t.TempDir(), Bucket: "bucket", PublicKey: f.pub, Participation: f.a.participation}
_ = os.MkdirAll(f.a.rootDir(), 0700)
if err := f.a.journal(systemJournal{Phase: phase, Target: "new-build", PrevBuild: "old-build", StartedAt: f.now}); err != nil {
t.Fatal(err)
@@ -36,7 +36,7 @@ func TestFloorRefusalKeepsRecoveryJournalAndExecutesNothing(t *testing.T) {
func TestUnpublishedCompletionAndRecovery(t *testing.T) {
f := newApplyFixture(t, "stable", "old-build")
- f.a.floor = &hostfloor.Disk{Dir: t.TempDir(), Bucket: "bucket", PublicKey: f.pub}
+ f.a.floor = &hostfloor.Disk{Dir: t.TempDir(), Bucket: "bucket", PublicKey: f.pub, Participation: f.a.participation}
raw, _ := json.Marshal(hostfloor.Policy{Schema: 1, DeploymentBucket: "bucket", Mode: "unpublished"})
if err := hostfloor.Durable(filepath.Join(f.a.floor.Dir, "policy.json"), raw, 0644); err != nil {
t.Fatal(err)
@@ -59,7 +59,7 @@ func guardRecoveryFixture(t *testing.T) (*applyFixture, string) {
t.Helper()
f := newApplyFixture(t, "stable", "old-build")
a := f.a
- a.floor = &hostfloor.Disk{Dir: t.TempDir(), Bucket: "bucket", PublicKey: f.pub}
+ a.floor = &hostfloor.Disk{Dir: t.TempDir(), Bucket: "bucket", PublicKey: f.pub, Participation: f.a.participation}
a.guardOpen = os.Open // Isolate the state machine from root-owned path checks.
sg := release.RootSigner(f.priv)
floor, _ := json.Marshal(hostfloor.Floor{Min: 1, MinRelease: "v1.2.3"})
diff --git a/internal/host/plan13_region_test.go b/internal/host/plan13_region_test.go
index 26db34b14..bb960d51d 100644
--- a/internal/host/plan13_region_test.go
+++ b/internal/host/plan13_region_test.go
@@ -59,7 +59,7 @@ func TestPlan13NamedBoxCannotAcknowledgeHomeDelete(t *testing.T) {
t.Fatal("missing CARLOS_REGION granted alias")
}
identity := handoverRecoveryIdentity(t, hostbox.Actor{Box: "ca-box", Enrollment: "enrolled", Region: "ca", FleetHomeRegion: "ie", Revision: 1})
- p := productionClaimRegional{Identity: identity, Local: &productionClaimLocal{Identity: identity, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: t.TempDir()}, assembly: &ClaimAssembly{}, lifetime: t.Context()}}
+ p := productionClaimRegional{Identity: identity, Local: &productionClaimLocal{legacyParticipation: true, Identity: identity, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: t.TempDir()}, assembly: &ClaimAssembly{}, lifetime: t.Context()}}
for _, kind := range []string{hostclaim.KindDeleting, hostclaim.KindParking, hostclaim.KindPurging} {
ob := hostclaim.Obligation{ID: "chore", Op: "delete", Kind: "park-replica", Owner: "region:ca", Region: "ca", Retirement: "retirement"}
o := hostclaim.Observed{Host: "test.example", Claim: &hostclaim.Claim{Holder: &hostclaim.Holder{}, Op: hostclaim.Op{ID: "delete", Kind: kind}, Obligations: []hostclaim.Obligation{ob}}}
diff --git a/internal/host/plan13_views_test.go b/internal/host/plan13_views_test.go
index 02129fc63..eca3fa747 100644
--- a/internal/host/plan13_views_test.go
+++ b/internal/host/plan13_views_test.go
@@ -18,7 +18,7 @@ func TestPlan13ProductionRemoteHomeView(t *testing.T) {
h := f.holder("src", "src@ie")
o := hostclaim.Observed{Host: vwHost, ETag: "tag", Claim: &hostclaim.Claim{Host: vwHost, Holder: h, Op: hostclaim.Op{ID: vwMove, Kind: hostclaim.KindLanding, Phase: "installing", Intent: map[string]string{"home_region": "ie"}}}}
identity := handoverRecoveryIdentity(t, hostbox.Actor{Box: "box", Enrollment: "enrolled", Region: "uk", FleetHomeRegion: "ie", ControlBucket: "control", Revision: 1})
- p := productionClaimRegional{Identity: identity, Local: &productionClaimLocal{Identity: identity, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: t.TempDir()}, assembly: &ClaimAssembly{}, lifetime: t.Context()}, Parks: &claimMoveParkSources{View: f.view("uk")}}
+ p := productionClaimRegional{Identity: identity, Local: &productionClaimLocal{legacyParticipation: true, Identity: identity, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: t.TempDir()}, assembly: &ClaimAssembly{}, lifetime: t.Context()}, Parks: &claimMoveParkSources{View: f.view("uk")}}
if _, err := p.View(t.Context(), hostclaim.Observed{}); err == nil {
t.Fatal("missing claim accepted")
}
diff --git a/internal/host/plan9_a_guard_test.go b/internal/host/plan9_a_guard_test.go
index 2841eb1e4..08f378207 100644
--- a/internal/host/plan9_a_guard_test.go
+++ b/internal/host/plan9_a_guard_test.go
@@ -293,16 +293,18 @@ func TestPlan9AGuardArmRefusesUpdateState(t *testing.T) {
}
}
-// M1-2: guard-arm creates the controller directory, owned by the service
-// account, so the armed update path can prove no controller is active.
+// M1-2: guard-arm creates the service-owned controller hint directory.
+// Root census and launch completeness independently authorize an update.
func TestPlan9AGuardArmCreatesControllerDir(t *testing.T) {
f, id := guardRecoveryFixture(t)
a := f.a
if err := os.RemoveAll(filepath.Join(a.dataDir, hostexecDir)); err != nil {
t.Fatal(err)
}
+ verify := a.floor.Participation.VerifyLaunches
+ a.floor.Participation.VerifyLaunches = nil
if err := a.floor.Begin(id, a.dataDir); err == nil {
- t.Fatal("precondition: armed update began without a controller directory")
+ t.Fatal("precondition: update began without root completeness")
}
me, err := user.Current()
if err != nil {
@@ -322,6 +324,10 @@ func TestPlan9AGuardArmCreatesControllerDir(t *testing.T) {
if err != nil || !fi.IsDir() || fi.Mode().Perm() != 0o770 {
t.Fatalf("controller dir = %v, %v", fi, err)
}
+ if err := a.floor.Begin(id, a.dataDir); err == nil {
+ t.Fatal("agent directory replaced root completeness")
+ }
+ a.floor.Participation.VerifyLaunches = verify
if err := a.floor.Begin(id, a.dataDir); err != nil {
t.Fatalf("armed update still refused: %v", err)
}
diff --git a/internal/host/plan9_production_test.go b/internal/host/plan9_production_test.go
index cec6ac601..42060ef85 100644
--- a/internal/host/plan9_production_test.go
+++ b/internal/host/plan9_production_test.go
@@ -78,7 +78,7 @@ func TestPlan9ProductionLocalServingDoesNotCreateLease(t *testing.T) {
if err := os.Mkdir(filepath.Join(dir, ".hostexec"), 0700); err != nil {
t.Fatal(err)
}
- p := productionClaimLocal{Resources: ClaimRuntimeResources{Mode: "agent", DataDir: dir}, slots: map[string]*claimParticipation{}}
+ p := productionClaimLocal{legacyParticipation: true, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: dir}, slots: map[string]*claimParticipation{}}
c := &hostclaim.Claim{Host: "x.example", Holder: &hostclaim.Holder{Incarnation: "inc"}, Op: hostclaim.Op{Kind: hostclaim.KindServing}}
actor := hostbox.Actor{Box: "box", Region: "ie"}
selection := hostbox.Selection{Box: "box", Region: "ie", Captured: hostguard.Captured{Incarnation: "inc"}}
@@ -118,7 +118,7 @@ func TestPlan9ParticipationCleanupDoesNotWaitForItsOpeningSlot(t *testing.T) {
o := controller.admit(t, f)
controller.assembly.Reconcile = &hostbox.ReconcileAdapter{Census: &hostbox.EmptyInstallationCensus{}}
pending := &claimParticipation{Ready: make(chan struct{})}
- p := &productionClaimLocal{assembly: &controller.assembly, slots: map[string]*claimParticipation{recoveryHost: pending}}
+ p := &productionClaimLocal{legacyParticipation: true, assembly: &controller.assembly, slots: map[string]*claimParticipation{recoveryHost: pending}}
ctx, cancel := context.WithTimeout(t.Context(), 2*time.Second)
defer cancel()
if err := p.cleanup(ctx, o, execlease.Binding{}); err != nil {
@@ -145,7 +145,7 @@ func TestPlan9ParticipationFailedOpenCanDischargeAfterPositiveCleanup(t *testing
close(ready)
slot := &claimParticipation{Ready: ready, Err: execlease.ErrLost, CleanupSucceeded: true, Captured: o,
Config: execlease.Config{Binding: execlease.Binding{Host: recoveryHost, Box: "box-1", Enrollment: "enrollment-1", Op: "old-op", Incarnation: o.Claim.Holder.Incarnation}, Guard: f.guard, LockDir: t.TempDir()}}
- p := &productionClaimLocal{Resources: ClaimRuntimeResources{Mode: "agent", DataDir: f.guard.DataDir}, Identity: identity, assembly: &ClaimAssembly{}, lifetime: t.Context(), slots: map[string]*claimParticipation{recoveryHost: slot}}
+ p := &productionClaimLocal{legacyParticipation: true, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: f.guard.DataDir}, Identity: identity, assembly: &ClaimAssembly{}, lifetime: t.Context(), slots: map[string]*claimParticipation{recoveryHost: slot}}
if err := p.Prepare(t.Context(), o); err != nil {
t.Fatal(err)
}
@@ -159,7 +159,7 @@ func TestPlan9ParticipationCleanupSurvivesRosterWithdrawal(t *testing.T) {
controller := f.controller("boot-1", "controller-1", 4101, "start-1")
o := controller.admit(t, f)
controller.assembly.Reconcile = &hostbox.ReconcileAdapter{Census: &hostbox.EmptyInstallationCensus{}}
- p := &productionClaimLocal{slots: map[string]*claimParticipation{}}
+ p := &productionClaimLocal{legacyParticipation: true, slots: map[string]*claimParticipation{}}
if err := p.bind(t.Context(), &controller.assembly); err != nil {
t.Fatal(err)
}
@@ -198,7 +198,7 @@ func TestPlan9RootAndAdoptLeaveStaleParticipationForAgent(t *testing.T) {
actor := hostbox.Actor{Box: "box-1", Enrollment: "enrollment-1", Revision: 1, Region: "ie"}
// No cleanup dependencies: a root observer must refuse before touching
// the journal, root socket or lifetime locks.
- p := productionClaimLocal{Resources: ClaimRuntimeResources{Mode: mode, DataDir: f.guard.DataDir}, assembly: &ClaimAssembly{}, lifetime: t.Context(), slots: map[string]*claimParticipation{}}
+ p := productionClaimLocal{legacyParticipation: true, Resources: ClaimRuntimeResources{Mode: mode, DataDir: f.guard.DataDir}, assembly: &ClaimAssembly{}, lifetime: t.Context(), slots: map[string]*claimParticipation{}}
if err = p.prepareWith(t.Context(), actor, o); err == nil {
t.Fatal("root admitted without root participation")
}
@@ -235,7 +235,7 @@ func TestPlan9ParticipationDoesNotSkipPreviousAgentState(t *testing.T) {
t.Fatal(err)
}
actor := hostbox.Actor{Box: "box-1", Enrollment: "enrollment-1", Revision: 1, Region: "ie"}
- p := productionClaimLocal{Resources: ClaimRuntimeResources{Mode: "agent", DataDir: f.guard.DataDir}, Identity: handoverRecoveryIdentity(t, actor), Store: f.claims, assembly: &ClaimAssembly{}, lifetime: t.Context(), slots: map[string]*claimParticipation{}}
+ p := productionClaimLocal{legacyParticipation: true, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: f.guard.DataDir}, Identity: handoverRecoveryIdentity(t, actor), Store: f.claims, assembly: &ClaimAssembly{}, lifetime: t.Context(), slots: map[string]*claimParticipation{}}
// Missing cleanup proof must surface. Success would mean the scan silently
// skipped a surviving prior controller just because no slot exists in RAM.
if err := p.participate(t.Context()); !errors.Is(err, hostwrite.ErrUnavailable) {
@@ -259,7 +259,7 @@ func TestPlan9ParticipationBoundsEachClaimReadIndependently(t *testing.T) {
f := newRecoveryFixture(t)
actor := hostbox.Actor{Box: "box-1", Enrollment: "enrollment-1", Revision: 1, Region: "ie"}
store := &plan9DeadlineStore{Store: f.claims}
- p := productionClaimLocal{Resources: ClaimRuntimeResources{Mode: "agent", DataDir: f.guard.DataDir}, Identity: handoverRecoveryIdentity(t, actor), Store: store, slots: map[string]*claimParticipation{}}
+ p := productionClaimLocal{legacyParticipation: true, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: f.guard.DataDir}, Identity: handoverRecoveryIdentity(t, actor), Store: store, slots: map[string]*claimParticipation{}}
before := time.Now()
if err := p.participate(t.Context()); err != nil {
t.Fatal(err)
diff --git a/internal/host/relocatepass_absence_test.go b/internal/host/relocatepass_absence_test.go
index 868c79efb..565ab59c7 100644
--- a/internal/host/relocatepass_absence_test.go
+++ b/internal/host/relocatepass_absence_test.go
@@ -67,7 +67,7 @@ func TestRelocationPassBuildsTheFullPassOnceItCan(t *testing.T) {
t.Fatal(err)
}
defer reg.Close()
- local := &productionClaimLocal{assembly: &ClaimAssembly{Claims: store, Guard: hostguard.Guard{DataDir: t.TempDir()}, stopLocal: func(context.Context) (claimStopLocal, error) {
+ local := &productionClaimLocal{legacyParticipation: true, assembly: &ClaimAssembly{Claims: store, Guard: hostguard.Guard{DataDir: t.TempDir()}, stopLocal: func(context.Context) (claimStopLocal, error) {
return claimStopLocal{Actor: hostbox.Actor{Box: "dst"}}, nil
}}}
buf := captureRacyLog(t)
diff --git a/internal/host/relocatepass_carries_test.go b/internal/host/relocatepass_carries_test.go
index a92c519a7..569e5c20a 100644
--- a/internal/host/relocatepass_carries_test.go
+++ b/internal/host/relocatepass_carries_test.go
@@ -275,7 +275,7 @@ func TestRelocationRuntimeBuildsTheFullPassWithTheOwnersBound(t *testing.T) {
data := t.TempDir()
a := &ClaimAssembly{Claims: w.store, Guard: hostguard.Guard{DataDir: data}, RetirementAuthority: &hostops.ProductionAuthority{Store: w.store, Directory: w.directory},
Wake: &ClaimWakeAssembly{Inputs: ClaimOwnerDispatch{Relocation: &ClaimKindOwners{}}}}
- local := &productionClaimLocal{assembly: a}
+ local := &productionClaimLocal{legacyParticipation: true, assembly: a}
env := map[string]string{"CARLOS_HOST_CLAIM": "1", "CARLOS_REGION_HA": "1", "CARLOS_HIBERNATE_BUCKET": "data-ie"}
getenv := func(k string) string { return env[k] }
pub, _, err := ed25519.GenerateKey(rand.Reader)
diff --git a/internal/host/relocatepass_round1_test.go b/internal/host/relocatepass_round1_test.go
index 2d76244c6..8094f69c0 100644
--- a/internal/host/relocatepass_round1_test.go
+++ b/internal/host/relocatepass_round1_test.go
@@ -74,7 +74,7 @@ func TestCompletionPassAsksNothingMoreWithNothingPending(t *testing.T) {
completeOn(t, store.Store, "b.example", "rel-b", "dst", true) // finished already
reg := passRegistry(t, "a.example", "b.example", "c.example")
identities := 0
- local := &productionClaimLocal{assembly: &ClaimAssembly{Claims: store, Guard: hostguard.Guard{DataDir: t.TempDir()}, stopLocal: func(context.Context) (claimStopLocal, error) {
+ local := &productionClaimLocal{legacyParticipation: true, assembly: &ClaimAssembly{Claims: store, Guard: hostguard.Guard{DataDir: t.TempDir()}, stopLocal: func(context.Context) (claimStopLocal, error) {
identities++
return claimStopLocal{Actor: hostbox.Actor{Box: "dst"}}, nil
}}}
@@ -127,7 +127,7 @@ func TestCompletionPassReadsTheHostsItsJournalsName(t *testing.T) {
t.Fatal(err)
}
reg := passRegistry(t, "row.example")
- local := &productionClaimLocal{assembly: &ClaimAssembly{Claims: store, Guard: hostguard.Guard{DataDir: data}, stopLocal: func(context.Context) (claimStopLocal, error) {
+ local := &productionClaimLocal{legacyParticipation: true, assembly: &ClaimAssembly{Claims: store, Guard: hostguard.Guard{DataDir: data}, stopLocal: func(context.Context) (claimStopLocal, error) {
return claimStopLocal{Actor: hostbox.Actor{Box: "dst"}}, nil
}}}
r, err := newCompletionRuntime(local, reg, &activator.Service{})
@@ -267,7 +267,7 @@ func TestLaunchRelocationPassReadsNothingTheLoopOwns(t *testing.T) {
store := release.NewDirStore(t.TempDir())
passClaim(t, store, "a.example", relocatingOp("rel-a"))
reg := passRegistry(t)
- local := &productionClaimLocal{assembly: &ClaimAssembly{Claims: store, Guard: hostguard.Guard{DataDir: t.TempDir()}, stopLocal: func(context.Context) (claimStopLocal, error) {
+ local := &productionClaimLocal{legacyParticipation: true, assembly: &ClaimAssembly{Claims: store, Guard: hostguard.Guard{DataDir: t.TempDir()}, stopLocal: func(context.Context) (claimStopLocal, error) {
return claimStopLocal{Actor: hostbox.Actor{Box: "dst"}}, nil
}}}
stepped := make(chan struct{})
diff --git a/internal/host/relocatepass_test.go b/internal/host/relocatepass_test.go
index 18862ffdd..62b81816b 100644
--- a/internal/host/relocatepass_test.go
+++ b/internal/host/relocatepass_test.go
@@ -87,7 +87,7 @@ func TestRelocationRuntimeFollowsTheFlags(t *testing.T) {
t.Fatal(err)
}
defer reg.Close()
- local := &productionClaimLocal{assembly: &ClaimAssembly{Guard: hostguard.Guard{DataDir: t.TempDir()}}}
+ local := &productionClaimLocal{legacyParticipation: true, assembly: &ClaimAssembly{Guard: hostguard.Guard{DataDir: t.TempDir()}}}
for _, tc := range []struct {
claim, ha string
completion bool
@@ -153,7 +153,7 @@ func TestCompletionPassChangesNothingWithoutACompletion(t *testing.T) {
t.Fatal(err)
}
data := t.TempDir()
- local := &productionClaimLocal{assembly: &ClaimAssembly{Claims: store, Guard: hostguard.Guard{DataDir: data}, stopLocal: func(context.Context) (claimStopLocal, error) {
+ local := &productionClaimLocal{legacyParticipation: true, assembly: &ClaimAssembly{Claims: store, Guard: hostguard.Guard{DataDir: data}, stopLocal: func(context.Context) (claimStopLocal, error) {
return claimStopLocal{Actor: hostbox.Actor{Box: "dst"}}, nil
}}}
claimOnly := func(k string) string {
@@ -510,7 +510,7 @@ func TestRelocationBindsWithARegisteredMovesSource(t *testing.T) {
t.Fatal(err)
}
defer reg.Close()
- local := &productionClaimLocal{assembly: &ClaimAssembly{Wake: &ClaimWakeAssembly{Inputs: ClaimOwnerDispatch{}}, Guard: hostguard.Guard{DataDir: t.TempDir()}}}
+ local := &productionClaimLocal{legacyParticipation: true, assembly: &ClaimAssembly{Wake: &ClaimWakeAssembly{Inputs: ClaimOwnerDispatch{}}, Guard: hostguard.Guard{DataDir: t.TempDir()}}}
r, err := NewRelocationRuntime(ctx, plan11Env("1", "1"), release.NewDirStore(t.TempDir()), local, ClaimProviders{}, reg, &activator.Service{}, relocationRuntimeInputs{})
if err != nil || r == nil || r.Worker != nil || r.Participant != nil || r.Finish == nil {
t.Fatalf("a runtime without the relocation owners: %+v %v", r, err)
diff --git a/internal/host/relocationdischarge_restart_unix_test.go b/internal/host/relocationdischarge_restart_unix_test.go
index 8d8349416..96c2d62e6 100644
--- a/internal/host/relocationdischarge_restart_unix_test.go
+++ b/internal/host/relocationdischarge_restart_unix_test.go
@@ -127,7 +127,7 @@ func TestRelocationRestartDischargeSurvivesAFailedClaimRead(t *testing.T) {
stops++
return StopResult{}, errors.New("a serving-shaped stop")
}}
- p := &productionClaimLocal{assembly: a, slots: map[string]*claimParticipation{}}
+ p := &productionClaimLocal{legacyParticipation: true, assembly: a, slots: map[string]*claimParticipation{}}
// The restart: clearUntracked hands cleanup the current serving
// observation and the persisted .hostexec binding.
binding := execlease.Binding{Box: box, Enrollment: "enr", Host: host, Incarnation: inc, Op: "rel-1", BootID: "boot-0"}
diff --git a/internal/host/relocationfinish_unix_test.go b/internal/host/relocationfinish_unix_test.go
index 0943ab79a..4047b0e7b 100644
--- a/internal/host/relocationfinish_unix_test.go
+++ b/internal/host/relocationfinish_unix_test.go
@@ -208,7 +208,7 @@ func TestRelocatePassFinishesACompletionFromItsRecord(t *testing.T) {
// (carry 6), its identity a verifying one for dst.
func (w *finishWorld) productionLocal() *productionClaimLocal {
identity := handoverRecoveryIdentity(w.t, hostbox.Actor{Box: "dst", Enrollment: "enr", Region: "ie", Revision: 1})
- return &productionClaimLocal{Resources: ClaimRuntimeResources{Mode: "agent", DataDir: w.dataDir}, Identity: identity, Store: w.store,
+ return &productionClaimLocal{legacyParticipation: true, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: w.dataDir}, Identity: identity, Store: w.store,
slots: map[string]*claimParticipation{}, assembly: w.assembly, lifetime: w.t.Context()}
}
diff --git a/internal/host/relocationfirstwake_unix_test.go b/internal/host/relocationfirstwake_unix_test.go
index ef675b09f..93f1bacb6 100644
--- a/internal/host/relocationfirstwake_unix_test.go
+++ b/internal/host/relocationfirstwake_unix_test.go
@@ -108,7 +108,7 @@ func TestCompletionPassThenFirstServingWakeWithRegionHAOff(t *testing.T) {
// mode alone, main's own participation owner and discharge.
identity := handoverRecoveryIdentity(t, local.Actor)
bound := &ClaimAssembly{Claims: f.claims, Guard: f.guard, stopLocal: func(context.Context) (claimStopLocal, error) { return local, nil }}
- owner := &productionClaimLocal{Resources: ClaimRuntimeResources{Mode: "agent", DataDir: f.guard.DataDir}, Identity: identity, Store: f.claims,
+ owner := &productionClaimLocal{legacyParticipation: true, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: f.guard.DataDir}, Identity: identity, Store: f.claims,
slots: map[string]*claimParticipation{}, assembly: bound, lifetime: ctx}
claimOnly := func(k string) string {
if k == "CARLOS_HOST_CLAIM" {
diff --git a/internal/host/relocationparticipation_linux_test.go b/internal/host/relocationparticipation_linux_test.go
index 6634e267d..92c49c07b 100644
--- a/internal/host/relocationparticipation_linux_test.go
+++ b/internal/host/relocationparticipation_linux_test.go
@@ -122,7 +122,7 @@ func newParticipationBox(t *testing.T) *participationBox {
b.stops++
return StopResult{}, errors.New("root: no stop in this fixture")
}}
- b.p = &productionClaimLocal{Resources: ClaimRuntimeResources{Mode: "agent", DataDir: b.data, OptDir: t.TempDir()}, Identity: handoverRecoveryIdentity(t, b.actor),
+ b.p = &productionClaimLocal{legacyParticipation: true, Resources: ClaimRuntimeResources{Mode: "agent", DataDir: b.data, OptDir: t.TempDir()}, Identity: handoverRecoveryIdentity(t, b.actor),
Directory: hostactors.Directory{Store: b.store, PublicKey: pub, Bucket: "bucket"}, Store: b.store, slots: map[string]*claimParticipation{},
assembly: a, lifetime: ctx, lockRoot: locks}
t.Cleanup(b.closeAll)
diff --git a/internal/host/rootexecution_authority.go b/internal/host/rootexecution_authority.go
index e65d1a9a6..66ea5eed9 100644
--- a/internal/host/rootexecution_authority.go
+++ b/internal/host/rootexecution_authority.go
@@ -51,6 +51,9 @@ func (h ClaimRootHTTP) executionAuthority(ctx context.Context, q execlease.Execu
out = execlease.ExecutionAuthority{Box: actor.Box, Enrollment: actor.Enrollment, Account: c.Holder.Account, App: c.Holder.App, ClaimRevision: obs.ETag, RecordRevision: etag, DirectoryRevision: strconv.FormatUint(actor.Revision, 10), Kind: c.Op.Kind, Phase: c.Op.Phase}
captured := hostguard.Captured{Incarnation: q.Incarnation, Stamp: q.Stamp}
view, err := h.Stop.Coordinator.Guard.Root.View(ctx, q.Host, captured)
+ if errors.Is(err, hostguard.ErrStampMismatch) {
+ return h.retainedExecutionSource(ctx, q, actor, c, out)
+ }
if errors.Is(err, hostguard.ErrFenced) {
in, raw, pendingErr := h.Stop.Coordinator.Guard.Root.PendingInstallation(ctx, q.Host)
if pendingErr != nil {
diff --git a/internal/host/rootexecution_client.go b/internal/host/rootexecution_client.go
new file mode 100644
index 000000000..e8e8f99a2
--- /dev/null
+++ b/internal/host/rootexecution_client.go
@@ -0,0 +1,205 @@
+package host
+
+import (
+ "context"
+ "slices"
+ "sync"
+
+ "github.com/carlosframework/platform/internal/controlsock"
+ "github.com/carlosframework/platform/internal/hostbox"
+ "github.com/carlosframework/platform/internal/hostclaim"
+ execlease "github.com/carlosframework/platform/internal/hostexec"
+ "github.com/carlosframework/platform/internal/hostwrite"
+)
+
+func executionExpectation(c *hostclaim.Claim) execlease.ExecutionRequest {
+ return execlease.ExecutionRequest{Schema: 1, Host: c.Host, Incarnation: c.Holder.Incarnation, Stamp: c.Holder.Stamp, Session: c.Holder.Session, Op: c.Op.ID}
+}
+
+func (p *productionClaimLocal) executionTransport() func(context.Context, execlease.ExecutionRequest) (execlease.ExecutionResponse, error) {
+ if p.executionCall != nil {
+ return p.executionCall
+ }
+ return rootExecutionClient(controlsock.Path)
+}
+
+func (p *productionClaimLocal) prepareWith(ctx context.Context, actor hostbox.Actor, o hostclaim.Observed) error {
+ if p.legacyParticipation {
+ return p.prepareLegacyWith(ctx, actor, o)
+ }
+ c := o.Claim
+ if c == nil {
+ return execlease.ErrState
+ }
+ p.mu.Lock()
+ old, lifetime, closed, assembly := p.slots[o.Host], p.lifetime, p.closed, p.assembly
+ delete(p.serving, o.Host)
+ p.mu.Unlock()
+ if closed || lifetime == nil || assembly == nil {
+ return hostwrite.ErrUnavailable
+ }
+ if p.Resources.Mode != "agent" {
+ return p.checkRootParticipation(ctx, actor, c)
+ }
+ if c.Free() || c.Op.Kind == hostclaim.KindServing || !slices.Contains(c.Op.Participants, actor.Box) {
+ if old != nil {
+ select {
+ case <-old.Ready:
+ case <-ctx.Done():
+ return ctx.Err()
+ }
+ if old.Controller == nil {
+ return execlease.ErrLost
+ }
+ if err := old.Controller.Close(ctx); err != nil {
+ return err
+ }
+ p.mu.Lock()
+ if p.slots[o.Host] == old {
+ delete(p.slots, o.Host)
+ }
+ p.mu.Unlock()
+ }
+ if c.Free() || c.Op.Kind != hostclaim.KindServing {
+ return nil
+ }
+ q := executionExpectation(c)
+ q.Operation, q.ID = "executionView", "serving-view"
+ out, err := p.executionTransport()(ctx, q)
+ if err != nil {
+ return err
+ }
+ boot, err := execlease.BootID()
+ if err != nil {
+ return err
+ }
+ if out.Schema != 1 || out.Status != "serving" || out.Host != q.Host || out.Incarnation != q.Incarnation || out.Stamp != q.Stamp || out.Session != q.Session || out.Op != q.Op || out.BootID != boot || out.Token != "" || out.SafeUntil != 0 || out.LeaseETag != "" || !out.Expires.IsZero() {
+ return execlease.ErrLost
+ }
+ if err := execlease.ClearRootClientMirror(p.Resources.DataDir, q.Host); err != nil {
+ return err
+ }
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ if p.closed || p.slots[o.Host] != nil {
+ return execlease.ErrLost
+ }
+ if p.serving == nil {
+ p.serving = make(map[string]execlease.ExecutionRequest)
+ }
+ p.serving[o.Host] = executionExpectation(c)
+ return nil
+ }
+ if c.Holder == nil {
+ return execlease.ErrState
+ }
+ if old != nil {
+ select {
+ case <-old.Ready:
+ case <-ctx.Done():
+ return ctx.Err()
+ }
+ if old.Err != nil {
+ return old.Err
+ }
+ client, ok := old.Controller.(*execlease.RootClient)
+ if !ok {
+ return execlease.ErrLost
+ }
+ return client.Refresh(ctx)
+ }
+ boot, err := execlease.BootID()
+ if err != nil {
+ return err
+ }
+ slot := &claimParticipation{Ready: make(chan struct{}), Captured: o}
+ binding := execlease.Binding{Box: actor.Box, Enrollment: actor.Enrollment, Host: o.Host, Incarnation: c.Holder.Incarnation, Op: c.Op.ID, BootID: boot}
+ p.mu.Lock()
+ if p.closed || p.slots[o.Host] != nil {
+ p.mu.Unlock()
+ return execlease.ErrControllerBusy
+ }
+ if p.slots == nil {
+ p.slots = make(map[string]*claimParticipation)
+ }
+ p.slots[o.Host] = slot
+ p.mu.Unlock()
+ var captureMu sync.Mutex
+ captured := o
+ slot.Controller, slot.Err = execlease.OpenRootClient(lifetime, execlease.RootClientConfig{
+ Binding: binding, Clock: execlease.SystemClock{}, Call: p.executionTransport(),
+ Project: func(s execlease.State) error { return execlease.ProjectRootClient(p.Resources.DataDir, s) },
+ Observe: func(ctx context.Context) (execlease.ExecutionRequest, error) {
+ fresh, err := hostclaim.Read(ctx, p.Store, o.Host)
+ if err != nil {
+ return execlease.ExecutionRequest{}, err
+ }
+ if fresh.Absent || fresh.Claim == nil || fresh.Claim.Holder == nil {
+ return execlease.ExecutionRequest{}, execlease.ErrLost
+ }
+ if fresh.Claim.Holder.Incarnation == binding.Incarnation && fresh.Claim.Op.ID == binding.Op {
+ captureMu.Lock()
+ captured = fresh
+ captureMu.Unlock()
+ }
+ return executionExpectation(fresh.Claim), nil
+ },
+ CloseAdmission: func() { p.cancelWork(o.Host) },
+ Cleanup: func(ctx context.Context) error {
+ captureMu.Lock()
+ current := captured
+ captureMu.Unlock()
+ return p.cleanup(ctx, current, binding)
+ },
+ })
+ if slot.Err == nil {
+ var state execlease.State
+ state, slot.Err = slot.Controller.Ready(ctx)
+ slot.Binding = state.Binding
+ }
+ close(slot.Ready)
+ return slot.Err
+}
+
+func (p *productionClaimLocal) Check(ctx context.Context, actor hostbox.Actor, c *hostclaim.Claim, selection hostbox.Selection) error {
+ if p.legacyParticipation {
+ return p.checkLegacy(ctx, actor, c, selection)
+ }
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
+ if c == nil || c.Holder == nil || actor.Box != selection.Box || actor.Region != selection.Region || c.Holder.Incarnation != selection.Captured.Incarnation || c.Holder.Stamp != selection.Captured.Stamp || slices.Contains(c.Lost, actor.Box) {
+ return hostbox.ErrChanged
+ }
+ p.mu.Lock()
+ slot, serving, closed := p.slots[c.Host], p.serving[c.Host], p.closed
+ p.mu.Unlock()
+ if closed {
+ return execlease.ErrLost
+ }
+ if p.Resources.Mode != "agent" {
+ return p.checkRootParticipation(ctx, actor, c)
+ }
+ if c.Op.Kind == hostclaim.KindServing {
+ if slot != nil || serving != executionExpectation(c) {
+ return execlease.ErrLost
+ }
+ return nil
+ }
+ if slot == nil {
+ return execlease.ErrInactive
+ }
+ select {
+ case <-slot.Ready:
+ default:
+ return execlease.ErrInactive
+ }
+ if slot.Err != nil {
+ return slot.Err
+ }
+ client, ok := slot.Controller.(*execlease.RootClient)
+ if !ok || slot.Binding.Box != actor.Box || slot.Binding.Enrollment != actor.Enrollment {
+ return execlease.ErrLost
+ }
+ return client.Check(ctx, executionExpectation(c))
+}
diff --git a/internal/host/rootexecution_migration_test.go b/internal/host/rootexecution_migration_test.go
index a9860e07d..a92318e92 100644
--- a/internal/host/rootexecution_migration_test.go
+++ b/internal/host/rootexecution_migration_test.go
@@ -3,11 +3,13 @@ package host
import (
"context"
"encoding/json"
+ "fmt"
"os"
"testing"
"github.com/carlosframework/platform/internal/hostclaim"
execlease "github.com/carlosframework/platform/internal/hostexec"
+ "github.com/carlosframework/platform/internal/hostguard"
"github.com/carlosframework/platform/internal/rootparticipation"
)
@@ -74,3 +76,218 @@ func TestPlan14ExecutionPreinstallationBindsMigration(t *testing.T) {
t.Fatal("authority read created participation", err)
}
}
+
+func TestPlan14ExecutionServingBeforeInstallation(t *testing.T) {
+ _, root, iq := plan14InstallRegistration(t, hostclaim.KindServing, "")
+ disk := &rollbackDisk{dir: t.TempDir()}
+ raw, _ := json.Marshal(rootparticipation.Census{Schema: 1, Box: "box-1", Enrollment: "en", Migration: 1, Revision: 1, LaunchRevision: 1, Complete: true})
+ if err := disk.Write("census.json", raw); err != nil {
+ t.Fatal(err)
+ }
+ boot, err := execlease.BootID()
+ if err != nil {
+ t.Fatal(err)
+ }
+ q := execlease.ExecutionRequest{Schema: 1, ID: "first-serving", Operation: "executionView", Host: iq.Target.Host, Incarnation: iq.Target.Incarnation, Stamp: iq.Target.Stamp, Session: iq.Target.Session}
+ peer := execlease.ControllerProcess{KernelBootID: boot, PID: os.Getpid(), Start: "fixture"}
+ broker, err := execlease.NewRootBroker(execlease.RootBrokerConfig{
+ State: disk, Remote: root.Stop.Coordinator.Evidence, Clock: execlease.SystemClock{}, BootID: boot, Identity: "broker",
+ Authority: func(ctx context.Context, q execlease.ExecutionRequest, p execlease.ControllerProcess) (execlease.ExecutionAuthority, error) {
+ return root.executionAuthorityWithMigration(ctx, disk, q, p)
+ },
+ Alive: func(context.Context, execlease.ControllerProcess) error { return nil },
+ Cleanup: func(context.Context, execlease.ExecutionRecord) error { t.Error("serving cleanup"); return nil },
+ Settle: func(context.Context, execlease.ExecutionRecord) error { t.Error("serving settlement"); return nil },
+ Exclude: func(context.Context, func() error) error {
+ t.Error("serving acquired lease")
+ return execlease.ErrState
+ },
+ })
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Cleanup(func() { _ = broker.Close(context.Background()) })
+ out, err := broker.Execute(t.Context(), peer, q)
+ if err != nil || out.Status != "serving" || out.Token != "" {
+ t.Fatalf("first serving participation: %+v %v", out, err)
+ }
+ if _, err := disk.Read(q.Host + ".json"); !os.IsNotExist(err) {
+ t.Fatal("serving created lease", err)
+ }
+}
+
+func TestPlan14ExecutionRetainedSourceParticipation(t *testing.T) {
+ for _, attack := range []string{"none", "source", "enrollment", "stamp"} {
+ t.Run(attack, func(t *testing.T) {
+ f, root, iq := plan14InstallRegistration(t, hostclaim.KindServing, "")
+ if _, err := root.commitRootInventory(t.Context(), iq); err != nil {
+ t.Fatal(err)
+ }
+ prior := f.read().Claim.Holder.Stamp
+ _, err := hostclaim.Update(t.Context(), f.claims, f.read(), func(c *hostclaim.Claim) error {
+ c.Holder.Stamp++
+ c.Op = hostclaim.Op{ID: "move", Kind: hostclaim.KindLanding, Phase: "checking", Exec: "box-2", Participants: []string{"box-1", "box-2"}, Intent: map[string]string{"source": "box-1", "source_enrollment": "en", "target": "box-2", "to": "ie"}, Journal: map[string]string{hostclaim.JournalSourceStamp: fmt.Sprint(prior)}}
+ switch attack {
+ case "source":
+ c.Op.Intent["source"] = "box-3"
+ case "enrollment":
+ c.Op.Intent["source_enrollment"] = "other"
+ case "stamp":
+ c.Op.Journal[hostclaim.JournalSourceStamp] = fmt.Sprint(prior + 1)
+ }
+ return nil
+ })
+ if err != nil {
+ t.Fatal(err)
+ }
+ q := executionExpectation(f.read().Claim)
+ q.ID, q.Operation = "source", "executionBegin"
+ a, err := root.executionAuthority(t.Context(), q, execlease.ControllerProcess{})
+ if attack != "none" {
+ if err == nil {
+ t.Fatal("foreign retained source admitted")
+ }
+ return
+ }
+ if err != nil || !a.ParticipationOnly || a.Installation == "" {
+ t.Fatalf("retained source: %+v %v", a, err)
+ }
+ })
+ }
+}
+
+func TestPlan14ExecutionInstalledWithoutLaunchCleanup(t *testing.T) {
+ for _, positive := range []bool{false, true} {
+ t.Run(fmt.Sprint(positive), func(t *testing.T) {
+ f, root, iq := plan14InstallRegistration(t, hostclaim.KindLanding, "checking")
+ if _, err := root.commitRootInventory(t.Context(), iq); err != nil {
+ t.Fatal(err)
+ }
+ q := executionExpectation(f.read().Claim)
+ a, err := root.executionAuthority(t.Context(), q, execlease.ControllerProcess{})
+ if err != nil {
+ t.Fatal(err)
+ }
+ calls := 0
+ root.Stop.Coordinator.Kernel = executionNoLaunchKernel{stopKernelFunc(func(context.Context, hostguard.FenceTarget, StopInventory, DrainAcknowledgement) (StopKernelEvidence, error) {
+ return StopKernelEvidence{}, ErrClaimStopInventory
+ }), func(_ context.Context, target hostguard.FenceTarget, inv StopInventory) (StopKernelEvidence, error) {
+ calls++
+ if target.Host != q.Host || target.Stamp != q.Stamp || target.Session != 0 || inv.InstallationStamp != q.Stamp {
+ t.Fatal("wrong empty installation")
+ }
+ if !positive {
+ return StopKernelEvidence{}, ErrClaimStopInventory
+ }
+ return StopKernelEvidence{}, nil
+ }}
+ err = root.cleanupExecution(t.Context(), execlease.ExecutionRecord{Request: q, Authority: a})
+ if calls != 1 || (err == nil) != positive {
+ t.Fatalf("kernel completeness calls=%d err=%v", calls, err)
+ }
+ })
+ }
+}
+
+type executionNoLaunchKernel struct {
+ stopKernelFunc
+ verify func(context.Context, hostguard.FenceTarget, StopInventory) (StopKernelEvidence, error)
+}
+
+func (k executionNoLaunchKernel) VerifyNoProcess(ctx context.Context, target hostguard.FenceTarget, inv StopInventory) (StopKernelEvidence, error) {
+ return k.verify(ctx, target, inv)
+}
+
+func TestPlan14ExecutionRecoveryStartsCanonicalFence(t *testing.T) {
+ for _, changed := range []bool{false, true} {
+ t.Run(fmt.Sprint(changed), func(t *testing.T) {
+ coordinator, req, _ := claimStopFixture(t)
+ root := ClaimRootHTTP{Stop: ClaimStopHTTP{Coordinator: coordinator}}
+ target := hostguard.FenceTarget{Host: req.Host, Incarnation: req.Incarnation, Stamp: req.InstallationStamp, Session: req.WriterSession, Box: req.Box, Enrollment: req.Enrollment, BootID: req.BootID, ControllerID: req.ControllerID, DirectoryRevision: req.ExpectedDirectoryRevision, ObligationID: req.ObligationID}
+ if changed {
+ target.Session++
+ }
+ got, err := root.beginExecutionRecoveryFence(t.Context(), target)
+ if changed {
+ if err == nil {
+ t.Fatal("fenced a different writer session")
+ }
+ return
+ }
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got.FenceID == "" || got.ClaimETag != req.ExpectedClaimETag || got.Op != req.OperationID || got.Phase != req.Phase {
+ t.Fatalf("unbound fence: %+v", got)
+ }
+ if err := coordinator.Guard.ResumeFence(t.Context(), got); err != nil {
+ t.Fatal(err)
+ }
+ })
+ }
+}
+
+func TestPlan14ExecutionFirstSessionTransition(t *testing.T) {
+ f, root, iq := plan14InstallRegistration(t, hostclaim.KindLanding, "checking")
+ q := executionExpectation(f.read().Claim)
+ before, err := root.executionAuthority(t.Context(), q, execlease.ControllerProcess{})
+ if err != nil {
+ t.Fatal(err)
+ }
+ if _, err := root.commitRootInventory(t.Context(), iq); err != nil {
+ t.Fatal(err)
+ }
+ if _, err := hostclaim.Update(t.Context(), f.claims, f.read(), func(c *hostclaim.Claim) error { c.Holder.Session++; return nil }); err != nil {
+ t.Fatal(err)
+ }
+ nextQ := executionExpectation(f.read().Claim)
+ after, err := root.executionAuthority(t.Context(), nextQ, execlease.ControllerProcess{})
+ if err != nil {
+ t.Fatal(err)
+ }
+ before.Migration = after.Migration
+ old := execlease.ExecutionRecord{Request: q, Authority: before}
+ if err := root.transitionExecution(t.Context(), old, nextQ, after); err != nil {
+ t.Fatal("first root-authorized session refused", err)
+ }
+ nextQ.Op = "other"
+ if err := root.transitionExecution(t.Context(), old, nextQ, after); err == nil {
+ t.Fatal("foreign operation admitted")
+ }
+}
+
+func TestPlan14ExecutionEstablishedSessionTransitionNeedsCleanup(t *testing.T) {
+ for _, clean := range []bool{false, true} {
+ t.Run(fmt.Sprint(clean), func(t *testing.T) {
+ f, root, iq := plan14InstallRegistration(t, hostclaim.KindLanding, "checking")
+ if _, err := root.commitRootInventory(t.Context(), iq); err != nil {
+ t.Fatal(err)
+ }
+ q := executionExpectation(f.read().Claim)
+ before, err := root.executionAuthority(t.Context(), q, execlease.ControllerProcess{})
+ if err != nil {
+ t.Fatal(err)
+ }
+ if _, err := hostclaim.Update(t.Context(), f.claims, f.read(), func(c *hostclaim.Claim) error { c.Holder.Session++; return nil }); err != nil {
+ t.Fatal(err)
+ }
+ nextQ := executionExpectation(f.read().Claim)
+ after, err := root.executionAuthority(t.Context(), nextQ, execlease.ControllerProcess{})
+ if err != nil {
+ t.Fatal(err)
+ }
+ calls := 0
+ root.Stop.Coordinator.Kernel = executionNoLaunchKernel{verify: func(context.Context, hostguard.FenceTarget, StopInventory) (StopKernelEvidence, error) {
+ calls++
+ if !clean {
+ return StopKernelEvidence{}, ErrClaimStopInventory
+ }
+ return StopKernelEvidence{}, nil
+ }}
+ err = root.transitionExecution(t.Context(), execlease.ExecutionRecord{Request: q, Authority: before}, nextQ, after)
+ if (err == nil) != clean || calls != 1 {
+ t.Fatalf("cleanup=%t calls=%d err=%v", clean, calls, err)
+ }
+ })
+ }
+}
diff --git a/internal/host/rootexecution_recovery.go b/internal/host/rootexecution_recovery.go
new file mode 100644
index 000000000..3c943733e
--- /dev/null
+++ b/internal/host/rootexecution_recovery.go
@@ -0,0 +1,69 @@
+package host
+
+import (
+ "context"
+ "errors"
+ "path/filepath"
+ "time"
+
+ "github.com/carlosframework/platform/internal/rootparticipation"
+)
+
+// Recovery constructs only root's local readers and settlement machinery.
+// It never starts the monitor, contacts instance-control, or calls Execute.
+func recoverRootExecution(ctx context.Context, dataDir, guardDir string) (result error) {
+ ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
+ defer cancel()
+ ledger, err := rootparticipation.Open()
+ if err != nil {
+ return err
+ }
+ census, err := ledger.RecoveryCensus()
+ ledger.State.Close()
+ if err != nil {
+ return err
+ }
+ if census.NeverEnrolled {
+ return nil
+ }
+ store, err := openDeployStore(ctx)
+ if err != nil {
+ return err
+ }
+ reg, err := openServiceRegistry(filepath.Join(dataDir, "registry.db"))
+ if err != nil {
+ return err
+ }
+ defer reg.Close()
+ ctx = context.WithValue(ctx, claimEntryKey{}, claimEntry{FlagRead: true, Enabled: true, Store: store})
+ ctx = withClaimRuntimeResources(ctx, ClaimRuntimeResources{Mode: "instance-control", Registry: reg, DataDir: dataDir, OptDir: filepath.Dir(filepath.Dir(guardDir)), UnitsDir: "/etc/systemd/system"})
+ ctx, err = ensureProductionClaimAssembly(ctx)
+ if err != nil {
+ return err
+ }
+ entry, _ := ctx.Value(claimEntryKey{}).(claimEntry)
+ defer func() {
+ cleanup, cancel := context.WithTimeout(context.Background(), 30*time.Second)
+ defer cancel()
+ result = errors.Join(result, entry.Assembly.Close(cleanup))
+ }()
+ handler, err := NewProductionRootClaimStop(ctx)
+ if err != nil {
+ return err
+ }
+ runtime := handler.(ClaimRootHTTP).executionRuntime
+ defer func() {
+ cleanup, cancel := context.WithTimeout(context.Background(), 30*time.Second)
+ defer cancel()
+ result = errors.Join(result, runtime.Close(cleanup))
+ }()
+ handler, err = WithProductionClaimLaunch(ctx, handler)
+ if err != nil {
+ return err
+ }
+ root := handler.(ClaimRootWithLaunch).Root
+ if err := root.RecoverPending(ctx); err != nil {
+ return err
+ }
+ return runtime.broker.Recover(ctx)
+}
diff --git a/internal/host/rootexecution_runtime.go b/internal/host/rootexecution_runtime.go
new file mode 100644
index 000000000..e48d79399
--- /dev/null
+++ b/internal/host/rootexecution_runtime.go
@@ -0,0 +1,96 @@
+package host
+
+import (
+ "context"
+ "crypto/rand"
+ "encoding/hex"
+ "errors"
+ "sync"
+
+ execlease "github.com/carlosframework/platform/internal/hostexec"
+ "github.com/carlosframework/platform/internal/rootparticipation"
+ "github.com/carlosframework/platform/internal/rootstate"
+)
+
+var openClaimExecutionAuthority = func() (rootstate.Store, error) {
+ return rootstate.Open(rootparticipation.Namespace, true, false)
+}
+
+type claimExecutionRuntime struct {
+ broker *execlease.RootBroker
+ state rootstate.Store
+ mu sync.Mutex
+ cancel context.CancelFunc
+ done chan struct{}
+ closed bool
+ root *ClaimRootHTTP
+}
+
+func newClaimExecutionRuntime(h ClaimRootHTTP, state rootstate.Store) (*claimExecutionRuntime, error) {
+ boot, err := execlease.BootID()
+ if err != nil {
+ return nil, err
+ }
+ var id [32]byte
+ if _, err = rand.Read(id[:]); err != nil {
+ return nil, err
+ }
+ ledger := rootparticipation.Ledger{State: state, VerifyLaunches: rootparticipation.VerifyLaunchCensus}
+ runtime := &claimExecutionRuntime{state: state, root: &h}
+ broker, err := execlease.NewRootBroker(execlease.RootBrokerConfig{
+ State: state, Remote: h.Stop.Coordinator.Evidence, Clock: execlease.SystemClock{}, BootID: boot, Identity: hex.EncodeToString(id[:]),
+ Authority: func(ctx context.Context, q execlease.ExecutionRequest, peer execlease.ControllerProcess) (execlease.ExecutionAuthority, error) {
+ return runtime.root.executionAuthorityWithMigration(ctx, state, q, peer)
+ },
+ Alive: execlease.ControllerAlive,
+ Cleanup: func(ctx context.Context, r execlease.ExecutionRecord) error {
+ return runtime.root.cleanupExecution(ctx, r)
+ },
+ Settle: func(ctx context.Context, r execlease.ExecutionRecord) error {
+ return runtime.root.settleExecution(ctx, r)
+ },
+ Transition: func(ctx context.Context, r execlease.ExecutionRecord, q execlease.ExecutionRequest, a execlease.ExecutionAuthority) error {
+ return runtime.root.transitionExecution(ctx, r, q, a)
+ },
+ Exclude: ledger.Acquire,
+ Recovered: ledger.RecoverAcquisition,
+ })
+ if err != nil {
+ return nil, err
+ }
+ runtime.broker = broker
+ return runtime, nil
+}
+
+func (r *claimExecutionRuntime) Start(ctx context.Context) {
+ r.mu.Lock()
+ defer r.mu.Unlock()
+ if r.closed || r.done != nil {
+ return
+ }
+ worker, cancel := context.WithCancel(ctx)
+ r.cancel, r.done = cancel, make(chan struct{})
+ go func() { defer close(r.done); r.broker.Run(worker) }()
+}
+
+func (r *claimExecutionRuntime) Close(ctx context.Context) error {
+ r.mu.Lock()
+ defer r.mu.Unlock()
+ if r.closed {
+ return nil
+ }
+ if r.cancel != nil {
+ r.cancel()
+ select {
+ case <-r.done:
+ case <-ctx.Done():
+ return ctx.Err()
+ }
+ }
+ err := r.broker.Close(ctx)
+ if ctx.Err() != nil {
+ return errors.Join(err, ctx.Err())
+ }
+ r.closed = true
+ return errors.Join(err, r.state.Close())
+}
diff --git a/internal/host/rootexecution_runtime_linux_test.go b/internal/host/rootexecution_runtime_linux_test.go
new file mode 100644
index 000000000..cf032f75c
--- /dev/null
+++ b/internal/host/rootexecution_runtime_linux_test.go
@@ -0,0 +1,167 @@
+//go:build linux
+
+package host
+
+import (
+ "context"
+ "encoding/json"
+ "errors"
+ "net"
+ "os"
+ "path/filepath"
+ "testing"
+
+ "github.com/carlosframework/platform/internal/hostbox"
+ "github.com/carlosframework/platform/internal/hostclaim"
+ execlease "github.com/carlosframework/platform/internal/hostexec"
+ "github.com/carlosframework/platform/internal/hostguard"
+ "github.com/carlosframework/platform/internal/rootparticipation"
+)
+
+func productionExecutionFixture(t *testing.T, kind string) (*recoveryFixture, ClaimRootHTTP, *launchParticipationDisk, *claimExecutionRuntime, *productionClaimLocal) {
+ t.Helper()
+ f, root, _ := plan14InstallRegistration(t, kind, "checking")
+ if err := os.Mkdir(filepath.Join(root.Roots["data"], ".hostexec"), 0700); err != nil {
+ t.Fatal(err)
+ }
+ root.Reconcile.Census.SharedPaths["data"] = append(root.Reconcile.Census.SharedPaths["data"], ".hostexec")
+ disk := &launchParticipationDisk{&rollbackDisk{dir: t.TempDir()}}
+ raw, _ := json.Marshal(rootparticipation.Census{Schema: 1, Box: "box-1", Enrollment: "en", Migration: 1, Revision: 1, LaunchRevision: 1, Complete: true})
+ if err := disk.Write("census.json", raw); err != nil {
+ t.Fatal(err)
+ }
+ boot, err := execlease.BootID()
+ if err != nil {
+ t.Fatal(err)
+ }
+ start, err := claimLaunchProcessStart("/proc", os.Getpid())
+ if err != nil {
+ t.Fatal(err)
+ }
+ root.Stop.Authenticate = func(context.Context, net.Conn) (StopPeer, error) {
+ return StopPeer{UID: 1001, PID: os.Getpid(), ProcessStart: start, BootID: boot, ControllerID: "agent"}, nil
+ }
+ root.Stop.Coordinator.Kernel = stopKernelFunc(func(context.Context, hostguard.FenceTarget, StopInventory, DrainAcknowledgement) (StopKernelEvidence, error) {
+ return StopKernelEvidence{}, ErrClaimStopInventory
+ })
+ runtime, err := newClaimExecutionRuntime(root, disk)
+ if err != nil {
+ t.Fatal(err)
+ }
+ root.Execution, root.executionRuntime = runtime.broker, runtime
+ t.Cleanup(func() { _ = runtime.Close(context.Background()) })
+ socket := serveClaimRoot(t, root)
+ p := &productionClaimLocal{Resources: ClaimRuntimeResources{Mode: "agent", DataDir: root.Roots["data"]}, Store: f.claims, lifetime: t.Context(),
+ assembly: &ClaimAssembly{Claims: f.claims, Guard: root.Stop.Coordinator.Guard, Wake: &ClaimWakeAssembly{}, Launches: root.Launches, Reconcile: &root.Reconcile},
+ executionCall: rootExecutionClient(socket), slots: make(map[string]*claimParticipation)}
+ t.Cleanup(func() { _ = p.Close(context.Background()) })
+ return f, root, disk, runtime, p
+}
+
+func TestPlan14ExecutionProductionClientSelection(t *testing.T) {
+ f, root, disk, runtime, local := productionExecutionFixture(t, hostclaim.KindLanding)
+ actor, _ := root.InventoryActor(t.Context())
+ o := f.read()
+ if err := local.prepareWith(t.Context(), actor, o); err != nil {
+ t.Fatal(err)
+ }
+ if _, ok := local.slots[o.Host].Controller.(*execlease.RootClient); !ok {
+ t.Fatal("agent selected a second lease owner")
+ }
+ raw, err := disk.Read(o.Host + ".json")
+ if err != nil {
+ t.Fatal(err)
+ }
+ var record execlease.ExecutionRecord
+ if err := rootparticipation.Decode(raw, &record); err != nil {
+ t.Fatal(err)
+ }
+ if record.Status != "active" || !record.Authority.ParticipationOnly || record.LeaseETag == "" {
+ t.Fatalf("root did not acquire participation: %+v", record)
+ }
+ selection := hostbox.Selection{Box: actor.Box, Region: actor.Region, Captured: hostguard.Captured{Incarnation: o.Claim.Holder.Incarnation, Stamp: o.Claim.Holder.Stamp}}
+ if err := local.Check(t.Context(), actor, o.Claim, selection); err != nil {
+ t.Fatal(err)
+ }
+ if err := local.prepareWith(t.Context(), actor, o); err != nil {
+ t.Fatal(err)
+ }
+ if _, err := execlease.ReadRoot(t.Context(), disk, execlease.SystemClock{}, record.Request, false); err == nil {
+ t.Fatal("preinstallation participation granted root effects")
+ }
+ if err := runtime.Close(t.Context()); err != nil {
+ t.Fatal(err)
+ }
+ if err := local.prepareWith(t.Context(), actor, o); err == nil {
+ t.Fatal("closed broker admission remained active")
+ }
+ if err := rootparticipation.Decode(mustExecutionRead(t, disk, o.Host), &record); err != nil || record.Status != "lost" {
+ t.Fatalf("shutdown discarded obligation: %+v %v", record, err)
+ }
+}
+
+func mustExecutionRead(t *testing.T, disk *launchParticipationDisk, host string) []byte {
+ t.Helper()
+ raw, err := disk.Read(host + ".json")
+ if err != nil {
+ t.Fatal(err)
+ }
+ return raw
+}
+
+func TestPlan14ExecutionProductionServingBeforeInstallation(t *testing.T) {
+ f, root, disk, _, local := productionExecutionFixture(t, hostclaim.KindServing)
+ actor, _ := root.InventoryActor(t.Context())
+ o := f.read()
+ selection := hostbox.Selection{Box: actor.Box, Region: actor.Region, Captured: hostguard.Captured{Incarnation: o.Claim.Holder.Incarnation, Stamp: o.Claim.Holder.Stamp}}
+ if err := local.Check(t.Context(), actor, o.Claim, selection); err == nil {
+ t.Fatal("serving had no root observation")
+ }
+ if err := local.prepareWith(t.Context(), actor, o); err != nil {
+ t.Fatal(err)
+ }
+ if err := local.Check(t.Context(), actor, o.Claim, selection); err != nil {
+ t.Fatal(err)
+ }
+ if _, err := disk.Read(o.Host + ".json"); !errors.Is(err, os.ErrNotExist) {
+ t.Fatal("serving acquired an operation lease", err)
+ }
+ if err := disk.Write("update.json", []byte(`{}`)); err != nil {
+ t.Fatal(err)
+ }
+ if err := local.prepareWith(t.Context(), actor, o); err == nil {
+ t.Fatal("update marker did not revoke preparation")
+ }
+ if err := local.Check(t.Context(), actor, o.Claim, selection); err == nil {
+ t.Fatal("failed preparation retained serving admission")
+ }
+}
+
+func TestPlan14ExecutionProductionSettlement(t *testing.T) {
+ f, root, disk, _, local := productionExecutionFixture(t, hostclaim.KindLanding)
+ actor, _ := root.InventoryActor(t.Context())
+ if err := local.prepareWith(t.Context(), actor, f.read()); err != nil {
+ t.Fatal(err)
+ }
+ c := local.slots[f.read().Host].Controller
+ if err := c.Close(t.Context()); err == nil {
+ t.Fatal("CC9 cleared participation while still a participant")
+ }
+ var r execlease.ExecutionRecord
+ if err := rootparticipation.Decode(mustExecutionRead(t, disk, f.read().Host), &r); err != nil || r.Status != "lost" {
+ t.Fatalf("CC9 failure lost denial: %+v %v", r, err)
+ }
+ _, err := hostclaim.Update(t.Context(), f.claims, f.read(), func(c *hostclaim.Claim) error {
+ c.Op = hostclaim.Op{Kind: hostclaim.KindServing, Exec: actor.Box}
+ return nil
+ })
+ if err != nil {
+ t.Fatal(err)
+ }
+ if err := local.prepareWith(t.Context(), actor, f.read()); err != nil {
+ t.Fatal(err)
+ }
+ if err := rootparticipation.Decode(mustExecutionRead(t, disk, f.read().Host), &r); err != nil || r.Status != "settled" {
+ t.Fatalf("CC9 failed to settle: %+v %v", r, err)
+ }
+}
diff --git a/internal/host/rootexecution_settle.go b/internal/host/rootexecution_settle.go
new file mode 100644
index 000000000..375b769aa
--- /dev/null
+++ b/internal/host/rootexecution_settle.go
@@ -0,0 +1,228 @@
+package host
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "slices"
+
+ "github.com/carlosframework/platform/internal/hostbox"
+ "github.com/carlosframework/platform/internal/hostclaim"
+ execlease "github.com/carlosframework/platform/internal/hostexec"
+ "github.com/carlosframework/platform/internal/hostguard"
+)
+
+func (h ClaimRootHTTP) settleExecution(ctx context.Context, r execlease.ExecutionRecord) error {
+ o, err := hostclaim.Read(ctx, h.Stop.Coordinator.Evidence, r.Request.Host)
+ if err != nil {
+ return err
+ }
+ if o.Absent || o.Claim == nil || o.Claim.Host != r.Request.Host || o.Claim.Validate() != nil {
+ return execlease.ErrState
+ }
+ c := o.Claim
+ if !c.Free() && c.Op.Kind != hostclaim.KindServing && slices.Contains(c.Op.Participants, r.Authority.Box) {
+ return execlease.ErrInactive
+ }
+ if !c.Free() && c.Holder.Incarnation != r.Request.Incarnation && !slices.Contains(c.RetiredIncarnations, r.Request.Incarnation) {
+ return execlease.ErrState
+ }
+ return nil
+}
+
+func (h ClaimRootHTTP) cleanupExecution(ctx context.Context, r execlease.ExecutionRecord) error {
+ q, a := r.Request, r.Authority
+ guard := h.Stop.Coordinator.Guard
+ if h.Launches == nil || guard.Root == nil || h.Reconcile.Census == nil || h.Stop.Coordinator.Kernel == nil {
+ return execlease.ErrState
+ }
+ all, err := h.Launches.HostLaunches(ctx, q.Host)
+ if err != nil {
+ return err
+ }
+ var launches []hostbox.LaunchInventory
+ captured := hostguard.Captured{Incarnation: q.Incarnation, Stamp: q.Stamp}
+ if a.ParticipationOnly && a.Installation != "" {
+ captured, err = guard.Capture(q.Host)
+ if err != nil {
+ return err
+ }
+ if captured.Incarnation != q.Incarnation || fmt.Sprintf("%s/%d/%s/%s", captured.Incarnation, captured.Stamp, a.Box, a.Enrollment) != a.Installation {
+ return execlease.ErrLost
+ }
+ }
+ for _, launch := range all {
+ target := launch.Target
+ if target.Incarnation == captured.Incarnation && target.Stamp == captured.Stamp && target.Box == a.Box && target.Enrollment == a.Enrollment {
+ launches = append(launches, launch)
+ }
+ }
+ if len(launches) == 0 {
+ if a.Installation != "" {
+ view, err := guard.Root.View(ctx, q.Host, captured)
+ if err != nil {
+ return err
+ }
+ in := view.Installation
+ if view.Barrier != nil || in.Box != a.Box || in.Enrollment != a.Enrollment || in.Account != a.Account || in.App != a.App || in.Migration != a.Migration || fmt.Sprintf("%s/%d/%s/%s", in.Incarnation, in.Stamp, in.Box, in.Enrollment) != a.Installation {
+ return ErrClaimStopInventory
+ }
+ inventory, revision, err := h.Journals.Inventory.Snapshot(ctx, q.Host, captured)
+ if err != nil {
+ return err
+ }
+ if !inventory.Complete || revision == 0 || revision != in.InventoryRevision {
+ return ErrClaimStopInventory
+ }
+ kernel, ok := h.Stop.Coordinator.Kernel.(stopNoProcessKernel)
+ if !ok {
+ return ErrClaimStopUnavailable
+ }
+ boot, err := execlease.BootID()
+ if err != nil {
+ return err
+ }
+ target := hostguard.FenceTarget{Host: q.Host, Incarnation: captured.Incarnation, Stamp: captured.Stamp, Box: a.Box, Enrollment: a.Enrollment, BootID: boot, DirectoryRevision: inventory.DirectoryRevision}
+ _, err = kernel.VerifyNoProcess(ctx, target, inventory)
+ return err
+ }
+ if !a.ParticipationOnly {
+ return ErrClaimStopInventory
+ }
+ if _, err := guard.Capture(q.Host); !errors.Is(err, hostguard.ErrNoRecord) {
+ return ErrClaimStopInventory
+ }
+ o, err := hostclaim.Read(ctx, h.Stop.Coordinator.Evidence, q.Host)
+ if err != nil {
+ return err
+ }
+ return h.Reconcile.Census.CheckLocal(ctx, o, hostbox.RecordSelection{Host: q.Host, Incarnation: q.Incarnation})
+ }
+ view, err := guard.Root.View(ctx, q.Host, captured)
+ if err != nil {
+ return err
+ }
+ for _, launch := range launches {
+ var receipt *hostguard.FenceReceipt
+ for i := range view.Receipts {
+ if hostbox.SameLaunchOwner(view.Receipts[i].Target, launch.Target) {
+ receipt = &view.Receipts[i]
+ break
+ }
+ }
+ if receipt == nil {
+ pending := view.Pending
+ if pending == nil || !hostbox.SameLaunchOwner(*pending, launch.Target) {
+ next, err := h.beginExecutionRecoveryFence(ctx, launch.Target)
+ if err != nil {
+ return err
+ }
+ pending = &next
+ }
+ if _, err := h.Stop.Coordinator.RecoverStopped(ctx, *pending); err != nil {
+ return err
+ }
+ durable, err := guard.FenceReceiptFor(ctx, *pending)
+ if err != nil {
+ return err
+ }
+ receipt = &durable
+ }
+ if err := verifyRetirementReceipt(ctx, *receipt); err != nil {
+ return err
+ }
+ reader, ok := h.Stop.Coordinator.Inventory.(exactStopInventory)
+ if !ok {
+ return ErrClaimStopInventory
+ }
+ inventory, err := reader.ReadExactStopInventory(ctx, receipt.Target)
+ if err != nil {
+ return err
+ }
+ launch, err = h.Launches.Read(ctx, receipt.Target)
+ if err != nil {
+ return err
+ }
+ ack := DrainClaimAcknowledgement(receipt.Target.FenceID, launch.Target.ControllerID, launch.ProcessStart, launch.ProducerIDs, launch.Completed)
+ if _, err := h.Stop.Coordinator.Kernel.VerifyStopped(ctx, receipt.Target, inventory, ack); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (h ClaimRootHTTP) transitionExecution(ctx context.Context, old execlease.ExecutionRecord, q execlease.ExecutionRequest, next execlease.ExecutionAuthority) error {
+ a := old.Authority
+ if old.Request.Host != q.Host || old.Request.Incarnation != q.Incarnation || old.Request.Op != q.Op || a.Box != next.Box || a.Enrollment != next.Enrollment || a.Account != next.Account || a.App != next.App || a.Migration != next.Migration {
+ return execlease.ErrLost
+ }
+ if old.Request.Stamp == q.Stamp && old.Request.Session == q.Session {
+ if a.Installation == next.Installation && a.ParticipationOnly == next.ParticipationOnly {
+ return nil
+ }
+ if a.ParticipationOnly && next.Installation != "" {
+ return nil
+ }
+ return execlease.ErrLost
+ }
+ if next.ParticipationOnly && a.Installation == next.Installation && q.Stamp >= old.Request.Stamp && q.Session >= old.Request.Session {
+ return nil
+ }
+ if next.ParticipationOnly || next.Installation == "" || q.Stamp < old.Request.Stamp || q.Session <= old.Request.Session {
+ return execlease.ErrLost
+ }
+ view, err := h.Stop.Coordinator.Guard.Root.View(ctx, q.Host, hostguard.Captured{Incarnation: q.Incarnation, Stamp: q.Stamp})
+ if err != nil {
+ return err
+ }
+ if view.Installation.Stamp != q.Stamp || view.Installation.Box != next.Box || view.Installation.Enrollment != next.Enrollment {
+ return execlease.ErrLost
+ }
+ if a.ParticipationOnly && (a.Installation == "" || a.Installation == next.Installation) {
+ return nil
+ }
+ if q.Stamp == old.Request.Stamp {
+ if a.Installation != next.Installation {
+ return execlease.ErrLost
+ }
+ return h.cleanupExecution(ctx, old)
+ }
+ if !slices.Contains(view.Retired, hostguard.Captured{Incarnation: q.Incarnation, Stamp: old.Request.Stamp}) {
+ return execlease.ErrLost
+ }
+ return nil
+}
+
+func (h ClaimRootHTTP) beginExecutionRecoveryFence(ctx context.Context, target hostguard.FenceTarget) (hostguard.FenceTarget, error) {
+ o, err := h.Stop.Coordinator.Claims.Read(ctx, target.Host)
+ if err != nil {
+ return hostguard.FenceTarget{}, err
+ }
+ if o.Absent || o.Claim == nil || o.Claim.Holder == nil || h.Stop.Coordinator.NewID == nil {
+ return hostguard.FenceTarget{}, ErrClaimStopInventory
+ }
+ c := o.Claim
+ target.ClaimETag, target.ClaimGen = o.ETag, c.Gen
+ target.Op, target.Phase = c.Op.ID, c.Op.Phase
+ if c.Op.Kind == hostclaim.KindServing {
+ target.ObligationID = ""
+ } else if target.ObligationID == "" {
+ var ok bool
+ switch c.Op.Kind {
+ case hostclaim.KindLanding:
+ target.ObligationID, ok = hostguard.LandingWriterStop(c, target.Box, target.Region)
+ case hostclaim.KindRelocating:
+ target.ObligationID, ok = hostguard.RelocationWriterStop(c, target.Box, target.Region)
+ case hostclaim.KindRestoring, hostclaim.KindReverting:
+ target.ObligationID, ok = hostguard.RecoveryWriterStop(c, target.Box, target.Region)
+ }
+ if !ok {
+ return hostguard.FenceTarget{}, ErrClaimStopInventory
+ }
+ }
+ if !hostguard.StopAuthorityMatches(c, target) || !stopOperationTuple(target.Op, target.Phase, target.ObligationID) {
+ return hostguard.FenceTarget{}, ErrClaimStopInventory
+ }
+ target.FenceID = h.Stop.Coordinator.NewID()
+ return h.Stop.Coordinator.Guard.BeginFence(ctx, target)
+}
diff --git a/internal/host/rootexecution_source.go b/internal/host/rootexecution_source.go
new file mode 100644
index 000000000..81e3bb1e4
--- /dev/null
+++ b/internal/host/rootexecution_source.go
@@ -0,0 +1,51 @@
+package host
+
+import (
+ "context"
+ "fmt"
+ "strconv"
+
+ "github.com/carlosframework/platform/internal/hostbox"
+ "github.com/carlosframework/platform/internal/hostclaim"
+ execlease "github.com/carlosframework/platform/internal/hostexec"
+)
+
+func (h ClaimRootHTTP) retainedExecutionSource(ctx context.Context, q execlease.ExecutionRequest, actor hostbox.Actor, c *hostclaim.Claim, a execlease.ExecutionAuthority) (execlease.ExecutionAuthority, error) {
+ source := c.Op.Intent["source"]
+ if c.Op.Kind == hostclaim.KindRelocating {
+ source = c.Op.Intent["source_box"]
+ }
+ if (!claimMovesKind(c.Op.Kind) && c.Op.Kind != hostclaim.KindRelocating) || source != actor.Box || c.Op.Intent["source_enrollment"] != actor.Enrollment {
+ return a, execlease.ErrLost
+ }
+ guard := h.Stop.Coordinator.Guard
+ prior, err := guard.Capture(q.Host)
+ if err != nil {
+ return a, err
+ }
+ if prior.Incarnation != q.Incarnation || prior.Stamp >= q.Stamp {
+ return a, execlease.ErrLost
+ }
+ if stamp := c.Op.Journal[hostclaim.JournalSourceStamp]; stamp != "" && stamp != strconv.FormatUint(prior.Stamp, 10) {
+ return a, execlease.ErrLost
+ }
+ view, err := guard.Root.View(ctx, q.Host, prior)
+ if err != nil {
+ return a, err
+ }
+ in := view.Installation
+ if view.Barrier != nil || in.Host != q.Host || in.Incarnation != q.Incarnation || in.Stamp != prior.Stamp || in.Account != a.Account || in.App != a.App || in.Record != c.Holder.Key || in.Box != actor.Box || in.Enrollment != actor.Enrollment || in.Migration == 0 || in.InventoryRevision == 0 {
+ return a, execlease.ErrLost
+ }
+ inventory, revision, err := h.Journals.Inventory.Snapshot(ctx, q.Host, prior)
+ if err != nil {
+ return a, err
+ }
+ if revision != in.InventoryRevision || !inventory.Complete || inventory.Box != actor.Box || inventory.Enrollment != actor.Enrollment {
+ return a, execlease.ErrLost
+ }
+ a.ParticipationOnly = true
+ a.Migration = in.Migration
+ a.Installation = fmt.Sprintf("%s/%d/%s/%s", in.Incarnation, in.Stamp, in.Box, in.Enrollment)
+ return a, nil
+}
diff --git a/internal/host/rootexecution_update_test.go b/internal/host/rootexecution_update_test.go
new file mode 100644
index 000000000..37d0fda7b
--- /dev/null
+++ b/internal/host/rootexecution_update_test.go
@@ -0,0 +1,122 @@
+package host
+
+import (
+ "context"
+ "encoding/json"
+ "github.com/carlosframework/platform/internal/rootparticipation"
+ "os"
+ "path/filepath"
+ "testing"
+)
+
+func updateParticipationFixture(t *testing.T) *rootparticipation.Ledger {
+ t.Helper()
+ disk := &rollbackDisk{dir: t.TempDir()}
+ raw, _ := json.Marshal(rootparticipation.Census{Schema: 1, Box: "box", Enrollment: "en", Migration: 1, Revision: 1, LaunchRevision: 1, Complete: true})
+ if err := disk.Write("census.json", raw); err != nil {
+ t.Fatal(err)
+ }
+ return &rootparticipation.Ledger{State: disk, VerifyLaunches: func(context.Context, uint64) error { return nil }}
+}
+
+func TestPlan14ExecutionSystemUpdateExclusion(t *testing.T) {
+ for _, pending := range []bool{false, true} {
+ t.Run(map[bool]string{true: "participating", false: "empty"}[pending], func(t *testing.T) {
+ f := newApplyFixture(t, "stable", "old")
+ f.a.regionHA = true
+ f.a.participation = updateParticipationFixture(t)
+ if pending {
+ if err := f.a.participation.State.Write("shop.example.json", []byte("{\"Schema\":1,\"Status\":\"pending\"}")); err != nil {
+ t.Fatal(err)
+ }
+ }
+ mirror := filepath.Join(f.a.dataDir, ".hostexec")
+ if err := os.MkdirAll(mirror, 0700); err != nil {
+ t.Fatal(err)
+ }
+ if err := os.Remove(mirror); err != nil {
+ t.Fatal(err)
+ }
+ err := f.a.beginExecutableChange("new", f.now)
+ if pending {
+ if err == nil {
+ t.Fatal("system update trusted deleted agent state")
+ }
+ return
+ }
+ if err != nil {
+ t.Fatal(err)
+ }
+ if err := f.a.participation.Acquire(t.Context(), func() error { return nil }); err == nil {
+ t.Fatal("acquisition crossed durable system update")
+ }
+ f.a.settleUpdateBegun()
+ if err := f.a.participation.Acquire(t.Context(), func() error { return nil }); err != nil {
+ t.Fatal("settled update still excludes", err)
+ }
+ })
+ }
+}
+
+func TestPlan14ExecutionRecoveryWithoutArmedFloor(t *testing.T) {
+ for _, recoverable := range []bool{false, true} {
+ t.Run(map[bool]string{false: "unresolved", true: "settled"}[recoverable], func(t *testing.T) {
+ f := newApplyFixture(t, "stable", "old")
+ if f.a.guarded() {
+ t.Fatal("fixture has an armed floor")
+ }
+ if err := f.a.beginExecutableChange("new", f.now); err != nil {
+ t.Fatal(err)
+ }
+ if err := f.a.participation.State.Write("shop.example.json", []byte(`{"Schema":1,"Status":"lost"}`)); err != nil {
+ t.Fatal(err)
+ }
+ old := recoverPendingControllers
+ t.Cleanup(func() { recoverPendingControllers = old })
+ calls := 0
+ recoverPendingControllers = func(_ context.Context, data, guard string) error {
+ calls++
+ if data != f.a.dataDir || guard != systemGuardDir(f.a.optDir) {
+ t.Fatal("wrong recovery scope")
+ }
+ if !recoverable {
+ return rootparticipation.ErrUnavailable
+ }
+ return f.a.participation.State.Remove("shop.example.json")
+ }
+ err := f.a.checkGuardRecovery()
+ if (err == nil) != recoverable || calls != 1 {
+ t.Fatalf("recovery=%t calls=%d err=%v", recoverable, calls, err)
+ }
+ if _, err := f.a.participation.UpdateID(); err != nil {
+ t.Fatal("recovery removed update exclusion", err)
+ }
+ })
+ }
+}
+
+func TestPlan14ExecutionLegacyJournalRecoversBeforeReservation(t *testing.T) {
+ f := newApplyFixture(t, "stable", "old")
+ if err := f.a.journal(systemJournal{Phase: systemPhaseInstalling, Target: "new"}); err != nil {
+ t.Fatal(err)
+ }
+ if err := f.a.participation.State.Write("shop.example.json", []byte(`{"Schema":1,"Status":"lost"}`)); err != nil {
+ t.Fatal(err)
+ }
+ old := recoverPendingControllers
+ t.Cleanup(func() { recoverPendingControllers = old })
+ calls := 0
+ recoverPendingControllers = func(context.Context, string, string) error {
+ calls++
+ return f.a.participation.State.Remove("shop.example.json")
+ }
+ if err := f.a.checkGuardRecovery(); err != nil {
+ t.Fatal(err)
+ }
+ if calls != 1 {
+ t.Fatalf("recovery calls=%d", calls)
+ }
+ if _, err := f.a.participation.UpdateID(); err != nil {
+ t.Fatal("legacy journal lacked root exclusion", err)
+ }
+}
diff --git a/internal/host/systemapply.go b/internal/host/systemapply.go
index 9825fb1b3..7e39c379c 100644
--- a/internal/host/systemapply.go
+++ b/internal/host/systemapply.go
@@ -29,6 +29,7 @@ import (
"github.com/carlosframework/platform/internal/provision"
"github.com/carlosframework/platform/internal/registry"
"github.com/carlosframework/platform/internal/release"
+ "github.com/carlosframework/platform/internal/rootparticipation"
"github.com/carlosframework/platform/internal/version"
)
@@ -207,7 +208,8 @@ func productionSysOps() sysOps {
}
type systemApplier struct {
- floor *hostfloor.Disk
+ participation *rootparticipation.Ledger
+ floor *hostfloor.Disk
// floorHook, when set, decides legacy or floor-guarded state once Run
// holds the apply lock, so a concurrent run's marker write is never read.
floorHook func(*systemApplier) error
diff --git a/internal/host/systemapply_test.go b/internal/host/systemapply_test.go
index c0ced543c..f01628c21 100644
--- a/internal/host/systemapply_test.go
+++ b/internal/host/systemapply_test.go
@@ -132,6 +132,7 @@ func newApplyFixture(t *testing.T, channel, build string) *applyFixture {
f.answer["version:"+systemBinaryPath(f.a.optDir)] = "carlos " + build + "\n"
f.answer["plan:"+systemBinaryPath(f.a.optDir)] = `{"enabled":["carlos-edge.service","carlos-adopt.timer","carlos-adopt.path","carlos-stage.path","carlos-restart.path","carlos-system-update.path","carlos-system-recover.service"],"inert":["carlos-restore-verify.timer"]}`
f.answer["units:"+systemBinaryPath(f.a.optDir)] = "carlos-edge.service carlos-adopt.timer carlos-adopt.path carlos-stage.path carlos-restart.path carlos-system-update.path carlos-system-update.service carlos-system-recover.service carlos-instance-control.service carlos-old-only.timer"
+ f.a.participation = updateParticipationFixture(t)
return f
}
diff --git a/internal/host/systemparticipation.go b/internal/host/systemparticipation.go
index c766f9071..ca1f9bca6 100644
--- a/internal/host/systemparticipation.go
+++ b/internal/host/systemparticipation.go
@@ -1,9 +1,11 @@
package host
import (
+ "context"
"encoding/json"
"errors"
"fmt"
+ "github.com/carlosframework/platform/internal/rootparticipation"
"os"
"path/filepath"
"time"
@@ -11,20 +13,9 @@ import (
"github.com/carlosframework/platform/internal/hostfloor"
)
-// Region HA spec 1 §5.10 (H14), root's half. A box that takes part in a
-// running claim operation never takes an executable update. Each side
-// records its own intent durably, then checks the other's, so of two that
-// race at least one sees the other:
-//
-// - root writes its update-begun marker, then scans <DataDir>/.hostexec/
-// and refuses the update while any controller record is there, in any
-// state, or while it cannot tell;
-// - a participant writes its .hostexec record (claim D6), then reads the
-// marker and refuses to acknowledge while one exists. That half waits
-// for the claim's D6 controller and is not built here.
-//
-// The marker stays until the update finishes or is recovered. Dormant
-// unless CARLOS_REGION_HA is on.
+// Executable updates and claim acquisition share root's transaction lock.
+// The root marker persists through the update journal's terminal state.
+// Agent files may add a refusal, but never establish an idle census.
const (
updateBegunFile = "update-begun.json"
@@ -44,14 +35,9 @@ type updateBegun struct {
At time.Time `json:"at"`
}
-// hostexecParticipation reports why this box may still be a participant
-// in a claim operation, or nil when it certainly is not. The directory
-// absent is the only "not". Anything in it, whatever its name or state,
-// and anything root cannot list or that is not a plain directory, is a
-// refusal (spec §5.10, B1-5). Only names are read: root never opens a
-// record here.
+// hostexecParticipation requires root participation and launch completeness.
func hostexecParticipation(dataDir string) error {
- return hostfloor.CheckParticipation(dataDir, false)
+ return hostfloor.CheckControllersIdle(dataDir)
}
// beginExecutableChange is §5.10's root side, run under the apply lock
@@ -63,9 +49,6 @@ func hostexecParticipation(dataDir string) error {
// update is refused and retried later). The agent's leg re-requests a
// deferred apply on its backoff ladder, at most every five minutes.
func (a *systemApplier) beginExecutableChange(target string, promotedAt time.Time) error {
- if !a.regionHA {
- return nil
- }
active, err := a.activeFloor()
if err != nil {
return err
@@ -87,37 +70,49 @@ func (a *systemApplier) beginExecutableChange(target string, promotedAt time.Tim
if json.Unmarshal(raw, &begun) != nil || begun.ID != tx.ID {
return hostfloor.ErrFloor
}
- if err := hostfloor.CheckControllersIdle(a.dataDir); err != nil {
+ if err := a.controllersIdle(); err != nil {
return fmt.Errorf("%w: %v", errSystemDeferred, err)
}
return nil
}
- if err := os.MkdirAll(systemGuardDir(a.optDir), 0o755); err != nil {
- return err
- }
- if err := writeJSONDurable(updateBegunPath(a.optDir), updateBegun{Target: target, PromotedAt: promotedAt, At: a.ops.now().UTC()}, 0o644); err != nil {
- return err
+ if !a.regionHA {
+ return a.participationDisk().WithParticipation(context.Background(), func(l rootparticipation.Ledger) error {
+ return l.BeginUpdate(context.Background(), "system-"+target)
+ })
}
- if reason := hostexecParticipation(a.dataDir); reason != nil {
- if err := a.clearUpdateBegun(); err != nil {
- a.ops.logf("system apply: %v", err)
+ err = a.participationDisk().BeginParticipation(context.Background(), "system-"+target, a.dataDir, func() error {
+ if err := os.MkdirAll(systemGuardDir(a.optDir), 0o755); err != nil {
+ return err
}
- return fmt.Errorf("%w: %v", errSystemDeferred, reason)
+ return writeJSONDurable(updateBegunPath(a.optDir), updateBegun{Target: target, PromotedAt: promotedAt, At: a.ops.now().UTC()}, 0o644)
+ })
+ if err != nil {
+ return fmt.Errorf("%w: %v", errSystemDeferred, err)
}
return nil
}
-// clearUpdateBegun removes the marker durably. A marker that is not there
-// is already cleared.
+// clearUpdateBegun removes both markers only after positive root settlement.
func (a *systemApplier) clearUpdateBegun() error {
- err := os.Remove(updateBegunPath(a.optDir))
- if errors.Is(err, os.ErrNotExist) {
- return nil
- }
- if err != nil {
- return fmt.Errorf("remove %s: %w", updateBegunPath(a.optDir), err)
- }
- return syncDir(systemGuardDir(a.optDir))
+ return a.participationDisk().WithParticipation(context.Background(), func(l rootparticipation.Ledger) error {
+ id, err := l.UpdateID()
+ if errors.Is(err, os.ErrNotExist) {
+ if _, e := os.Lstat(updateBegunPath(a.optDir)); errors.Is(e, os.ErrNotExist) {
+ return nil
+ }
+ id = "recover-legacy"
+ err = l.BeginUpdate(context.Background(), id)
+ }
+ if err != nil {
+ return err
+ }
+ return l.EndUpdateWith(context.Background(), id, func() error {
+ if _, e := os.Lstat(updateBegunPath(a.optDir)); errors.Is(e, os.ErrNotExist) {
+ return nil
+ }
+ return hostfloor.RemoveDurable(updateBegunPath(a.optDir))
+ })
+ })
}
// settleUpdateBegun clears the marker once no update is in progress: no
@@ -161,3 +156,43 @@ func (a *systemApplier) closeGuardRollback() error {
}
return a.closeGuardJournal()
}
+
+func (a *systemApplier) participationDisk() hostfloor.Disk {
+ if a.floor != nil {
+ return *a.floor
+ }
+ return hostfloor.Disk{Participation: a.participation}
+}
+
+func (a *systemApplier) checkUnarmedParticipationRecovery() error {
+ j, err := readSystemJournal(a.optDir)
+ if err != nil {
+ return err
+ }
+ recover, reserve := false, false
+ err = a.participationDisk().WithParticipation(context.Background(), func(l rootparticipation.Ledger) error {
+ _, err := l.UpdateID()
+ if errors.Is(err, os.ErrNotExist) {
+ if j == nil {
+ return nil
+ }
+ reserve = true
+ } else if err != nil {
+ return err
+ }
+ recover = true
+ return nil
+ })
+ if err != nil {
+ return err
+ }
+ if recover {
+ if err := a.controllersRecovered(); err != nil {
+ return err
+ }
+ }
+ if reserve {
+ return a.participationDisk().WithParticipation(context.Background(), func(l rootparticipation.Ledger) error { return l.BeginUpdate(context.Background(), "recover-system") })
+ }
+ return nil
+}
diff --git a/internal/hostexec/plan14_root_participation_test.go b/internal/hostexec/plan14_root_participation_test.go
index 838cda8e1..1cc280f7f 100644
--- a/internal/hostexec/plan14_root_participation_test.go
+++ b/internal/hostexec/plan14_root_participation_test.go
@@ -721,3 +721,17 @@ func TestPlan14ExecutionProcessCrashBeforeCommit(t *testing.T) {
t.Fatal("expired acquired obligation could not settle", err)
}
}
+
+func TestPlan14ExecutionRenewCannotCrossPriorCutoff(t *testing.T) {
+ b, _, remote, clock, q, peer := brokerFixture(t)
+ out, err := b.Execute(t.Context(), peer, q)
+ if err != nil {
+ t.Fatal(err)
+ }
+ clock.advance(80 * time.Second)
+ remote.onPut = func(int) { clock.advance(6 * time.Second) }
+ q.Operation, q.ID, q.Token = "executionRenew", "late-renew", out.Token
+ if out, err := b.Execute(t.Context(), peer, q); err == nil {
+ t.Fatalf("late renewal revived expired admission: %+v", out)
+ }
+}
diff --git a/internal/hostexec/rootbroker.go b/internal/hostexec/rootbroker.go
index 51f67dfed..7aaca4668 100644
--- a/internal/hostexec/rootbroker.go
+++ b/internal/hostexec/rootbroker.go
@@ -24,6 +24,7 @@ type ExecutionReplay = rootparticipation.ExecutionReplay
type ExecutionRecord = rootparticipation.ExecutionRecord
type RootBrokerConfig struct {
+ Recovered func(context.Context) error
Transition func(context.Context, ExecutionRecord, ExecutionRequest, ExecutionAuthority) error
State rootstate.Store
Remote release.Store
@@ -203,6 +204,11 @@ func (b *RootBroker) Execute(ctx context.Context, peer ControllerProcess, q Exec
return ExecutionResponse{}, enterErr
}
defer leave()
+ if q.Operation != "executionSettle" {
+ if err := b.cfg.Alive(ctx, peer); err != nil {
+ return ExecutionResponse{}, err
+ }
+ }
b.mu.Lock()
gate := b.calls[q.Host]
if gate == nil {
@@ -416,7 +422,7 @@ func (b *RootBroker) acquire(ctx context.Context, peer ControllerProcess, q Exec
return ExecutionResponse{}, b.deny(ctx, r, errors.Join(err, ErrLost))
}
_, now, err := b.cfg.Clock.Now()
- if err != nil || now >= r.SafeUntil || ctx.Err() != nil {
+ if err != nil || now >= r.SafeUntil || (!begin && r.PriorSafeUntil > 0 && now >= r.PriorSafeUntil) || ctx.Err() != nil {
return ExecutionResponse{}, b.deny(ctx, r, errors.Join(err, ErrLost))
}
if err = b.cfg.Alive(ctx, peer); err != nil {
@@ -527,6 +533,9 @@ func (b *RootBroker) Monitor(ctx context.Context) error {
errs = append(errs, b.deny(ctx, r, ErrLost))
}
}
+ if b.cfg.Recovered != nil {
+ errs = append(errs, b.cfg.Recovered(ctx))
+ }
return errors.Join(errs...)
}
@@ -631,6 +640,9 @@ func (b *RootBroker) Recover(ctx context.Context) error {
errs = append(errs, b.recoverSettlement(ctx, host))
}
}
+ if b.cfg.Recovered != nil {
+ errs = append(errs, b.cfg.Recovered(ctx))
+ }
return errors.Join(errs...)
}
diff --git a/internal/hostexec/rootbroker_serving_test.go b/internal/hostexec/rootbroker_serving_test.go
index 456fb02d0..89d0e219c 100644
--- a/internal/hostexec/rootbroker_serving_test.go
+++ b/internal/hostexec/rootbroker_serving_test.go
@@ -73,7 +73,7 @@ func TestPlan14ExecutionServingView(t *testing.T) {
q.Operation, q.ID, q.Token, q.Op = "executionView", "serving-view", "", ""
writes, acquisitions := disk.writes, remote.calls
out, err := b.Execute(t.Context(), peer, q)
- if scenario == "empty" || scenario == "settled" {
+ if scenario == "empty" || scenario == "settled" || scenario == "participation only" {
if err != nil || out.Status != "serving" || out.Host != q.Host || out.Stamp != q.Stamp || out.Session != q.Session || out.Token != "" || out.SafeUntil != 0 || out.LeaseETag != "" || !out.Expires.IsZero() {
t.Fatalf("serving view: %+v %v", out, err)
}
diff --git a/internal/hostexec/rootclient.go b/internal/hostexec/rootclient.go
index 565b6966c..cc2c3b2b2 100644
--- a/internal/hostexec/rootclient.go
+++ b/internal/hostexec/rootclient.go
@@ -10,6 +10,7 @@ import (
)
type RootClientConfig struct {
+ Project func(State) error
Binding Binding
Clock Clock
Observe func(context.Context) (ExecutionRequest, error)
@@ -165,16 +166,17 @@ func (c *RootClient) refresh(ctx context.Context, begin bool) error {
return err
}
_, now, clockErr := c.cfg.Clock.Now()
- if clockErr != nil || out.Schema != 1 || out.Host != q.Host || out.Incarnation != q.Incarnation || out.Stamp != q.Stamp || out.Session != q.Session || out.Op != q.Op || out.BootID != c.cfg.Binding.BootID || out.Token == "" || out.Status != "active" || out.SafeUntil <= now || out.LeaseETag == "" || out.Expires.IsZero() {
+ if clockErr != nil || (!begin && now >= prior.SafeUntil) || out.Schema != 1 || out.Host != q.Host || out.Incarnation != q.Incarnation || out.Stamp != q.Stamp || out.Session != q.Session || out.Op != q.Op || out.BootID != c.cfg.Binding.BootID || out.Token == "" || out.Status != "active" || out.SafeUntil <= now || out.LeaseETag == "" || out.Expires.IsZero() {
c.lose(ErrLost)
return ErrLost
}
binding := c.cfg.Binding
binding.ControllerID = out.Token
c.mu.Lock()
- defer c.mu.Unlock()
if c.err != nil {
- return c.err
+ err := c.err
+ c.mu.Unlock()
+ return err
}
c.state = State{V: 1, Binding: binding, State: out.Status, SafeUntil: out.SafeUntil, Expires: out.Expires, LeaseETag: out.LeaseETag}
c.request = q
@@ -182,6 +184,14 @@ func (c *RootClient) refresh(ctx context.Context, begin bool) error {
if q.Operation != "executionView" {
c.next = start + int64(Renewal)
}
+ state := c.state
+ c.mu.Unlock()
+ if c.cfg.Project != nil {
+ if err := c.cfg.Project(state); err != nil {
+ c.lose(err)
+ return err
+ }
+ }
return nil
}
@@ -203,6 +213,22 @@ func (c *RootClient) Ready(ctx context.Context) (State, error) {
return state, nil
}
+func (c *RootClient) Check(ctx context.Context, q ExecutionRequest) error {
+ if _, err := c.Ready(ctx); err != nil {
+ return err
+ }
+ c.mu.Lock()
+ defer c.mu.Unlock()
+ if c.err != nil {
+ return c.err
+ }
+ old := c.request
+ if c.uncertain || old.Host != q.Host || old.Incarnation != q.Incarnation || old.Stamp != q.Stamp || old.Session != q.Session || old.Op != q.Op {
+ return ErrLost
+ }
+ return nil
+}
+
func (c *RootClient) Close(ctx context.Context) error {
err := c.close(ctx)
select {
@@ -259,6 +285,7 @@ func (c *RootClient) close(ctx context.Context) error {
}
token = out.Token
c.mu.Lock()
+ c.state.Binding = c.cfg.Binding
c.state.ControllerID = token
c.uncertain = false
c.mu.Unlock()
@@ -282,6 +309,15 @@ func (c *RootClient) close(ctx context.Context) error {
if !executionReplyMatches(q, c.cfg.Binding.BootID, settle) || settle.Status != "settled" || settle.Token != token {
return ErrLost
}
+ if c.cfg.Project != nil {
+ c.mu.Lock()
+ state := c.state
+ c.mu.Unlock()
+ state.State = "settled"
+ if err := c.cfg.Project(state); err != nil {
+ return err
+ }
+ }
c.settled = true
return nil
}
diff --git a/internal/hostexec/rootlease_scopes_linux_test.go b/internal/hostexec/rootlease_scopes_linux_test.go
new file mode 100644
index 000000000..1893e1ef1
--- /dev/null
+++ b/internal/hostexec/rootlease_scopes_linux_test.go
@@ -0,0 +1,99 @@
+//go:build linux
+
+package hostexec
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "strings"
+ "testing"
+ "time"
+
+ "github.com/carlosframework/platform/internal/hostbox"
+ "github.com/carlosframework/platform/internal/moves"
+ "github.com/carlosframework/platform/internal/park"
+)
+
+type scopeLease struct {
+ bucket, scope string
+ releases, closes int
+}
+
+func (l *scopeLease) Check(context.Context) error { return nil }
+func (l *scopeLease) Release(context.Context) error { l.releases++; return nil }
+func (l *scopeLease) Close() { l.closes++ }
+func (l *scopeLease) LeaseScope() (string, string) { return l.bucket, l.scope }
+
+type scopePool struct{ acquired []string }
+
+func (p *scopePool) Acquire(_ context.Context, bucket, scope string) (park.HeldLease, error) {
+ p.acquired = append(p.acquired, bucket+":"+scope)
+ return &scopeLease{bucket: bucket, scope: scope}, nil
+}
+
+func TestPlan14ExecutionKeepsOtherLeaseScopes(t *testing.T) {
+ t.Run("staging", func(t *testing.T) {
+ b, _, remote, clock, q, peer := brokerFixture(t)
+ if moves.StagingLeaseTTL != 45*time.Minute {
+ t.Fatal("staging horizon changed")
+ }
+ wall, _, _ := clock.Now()
+ key := moves.StagingLeasePrefix("ie", q.Host) + "/lock.json"
+ raw, _ := json.Marshal(Record{Op: q.Op, Expires: wall.Add(moves.StagingLeaseTTL)})
+ tag, err := remote.Put(t.Context(), key, raw, "")
+ if err != nil {
+ t.Fatal(err)
+ }
+ permit, err := b.Execute(t.Context(), peer, q)
+ if err != nil {
+ t.Fatal(err)
+ }
+ q.Operation, q.ID, q.Token = "executionSettle", "settle", permit.Token
+ if _, err := b.Execute(t.Context(), peer, q); err != nil {
+ t.Fatal(err)
+ }
+ got, next, err := remote.Get(t.Context(), key)
+ if err != nil || next != tag || !bytes.Equal(got, raw) {
+ t.Fatal("execution settlement touched staging", err)
+ }
+ })
+ t.Run("borrowed", func(t *testing.T) {
+ own := &scopeLease{bucket: "data", scope: "moves/shop.example/op"}
+ pool := &scopePool{}
+ borrower, err := (hostbox.AggregateLeases{Leases: pool, Resolve: hostbox.ReplicaParkLeaseSet}).AcquireHeld(t.Context(), own.bucket, own.scope, own)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if err := borrower.Release(t.Context()); err != nil {
+ t.Fatal(err)
+ }
+ borrower.Close()
+ if own.releases != 0 || own.closes != 0 || len(pool.acquired) != 0 {
+ t.Fatal("borrower released or reacquired lender's lease")
+ }
+ if err := own.Release(t.Context()); err != nil {
+ t.Fatal(err)
+ }
+ own.Close()
+ if own.releases != 1 || own.closes != 1 {
+ t.Fatal("lender could not release")
+ }
+ })
+ t.Run("replica-data-bucket", func(t *testing.T) {
+ for _, scope := range []string{"moves/shop.example/op", "instances/shop.example", "instances/shop.example/" + strings.Repeat("a", 64)} {
+ pool := &scopePool{}
+ held, err := (hostbox.AggregateLeases{Leases: pool, Resolve: hostbox.ReplicaParkLeaseSet}).Acquire(t.Context(), "data", scope)
+ if err != nil {
+ t.Fatal(err)
+ }
+ held.Close()
+ if len(pool.acquired) != 1 || pool.acquired[0] != "data:"+scope {
+ t.Fatalf("broadened scope: %v", pool.acquired)
+ }
+ }
+ if _, err := hostbox.ReplicaParkLeaseSet(t.Context(), "data", moves.StagingLeasePrefix("ie", "shop.example")); err == nil {
+ t.Fatal("deployment staging became data-bucket scope")
+ }
+ })
+}
diff --git a/internal/hostexec/rootmirror.go b/internal/hostexec/rootmirror.go
new file mode 100644
index 000000000..775f4e170
--- /dev/null
+++ b/internal/hostexec/rootmirror.go
@@ -0,0 +1,49 @@
+package hostexec
+
+import (
+ "errors"
+ "os"
+)
+
+// ProjectRootClient keeps the agent's status and cleanup hint. It never
+// establishes a lifetime lock or participates in root admission.
+func ProjectRootClient(dataDir string, state State) error {
+ d, err := openLocal(dataDir)
+ if err != nil {
+ return err
+ }
+ defer d.close()
+ if state.State == "settled" {
+ old, err := d.read(state.Host)
+ if errors.Is(err, os.ErrNotExist) {
+ return nil
+ }
+ if err != nil {
+ return err
+ }
+ if old.Host != state.Host || old.Incarnation != state.Incarnation || old.Op != state.Op {
+ return ErrState
+ }
+ return d.remove(state.Host)
+ }
+ state.Process, err = currentControllerProcess()
+ if err != nil {
+ return err
+ }
+ return d.write(state)
+}
+
+// ClearRootClientMirror follows a successful tokenless root serving view.
+// Removing this status hint conveys no execution or update authority.
+func ClearRootClientMirror(dataDir, host string) error {
+ d, err := openLocal(dataDir)
+ if err != nil {
+ return err
+ }
+ defer d.close()
+ err = d.remove(host)
+ if errors.Is(err, os.ErrNotExist) {
+ return nil
+ }
+ return err
+}
diff --git a/internal/hostexec/rootserving.go b/internal/hostexec/rootserving.go
index ac3c6053d..ae1f16879 100644
--- a/internal/hostexec/rootserving.go
+++ b/internal/hostexec/rootserving.go
@@ -9,7 +9,7 @@ import (
)
func (b *RootBroker) servingView(ctx context.Context, peer ControllerProcess, q ExecutionRequest, authority ExecutionAuthority) (ExecutionResponse, error) {
- if authority.Kind != "serving" || authority.ParticipationOnly || authority.Installation == "" {
+ if authority.Kind != "serving" || (authority.Installation == "" && !authority.ParticipationOnly) {
return ExecutionResponse{}, ErrInactive
}
unlock, err := b.cfg.State.Lock(ctx, "transaction.lock")
diff --git a/internal/hostfloor/disk.go b/internal/hostfloor/disk.go
index f09c6e867..989306f84 100644
--- a/internal/hostfloor/disk.go
+++ b/internal/hostfloor/disk.go
@@ -1,18 +1,21 @@
package hostfloor
import (
+ "context"
"crypto/ed25519"
"encoding/json"
"errors"
"github.com/carlosframework/platform/internal/release"
+ "github.com/carlosframework/platform/internal/rootparticipation"
"io"
"os"
"path/filepath"
)
type Disk struct {
- Dir, Bucket string
- PublicKey ed25519.PublicKey
+ Participation *rootparticipation.Ledger
+ Dir, Bucket string
+ PublicKey ed25519.PublicKey
}
func (d Disk) Load() (Policy, Verified, error) {
@@ -146,21 +149,14 @@ func (d Disk) Begin(id, dataDir string) error {
raw, _ := json.Marshal(struct {
ID string `json:"id"`
}{id})
- if err := Durable(marker, raw, 0644); err != nil {
- return err
- }
- if err := CheckControllersIdle(dataDir); err != nil {
- removeErr := RemoveDurable(marker)
- return errors.Join(err, removeErr)
- }
- return nil
+ return d.BeginParticipation(context.Background(), id, dataDir, func() error { return Durable(marker, raw, 0644) })
}
// CheckControllersIdle refuses while any controller state is present. The
// directory must also be readable: a missing or unreadable directory cannot
// prove that no controller is active.
func CheckControllersIdle(dataDir string) error {
- return CheckParticipation(dataDir, true)
+ return (Disk{}).ControllersIdle(context.Background(), dataDir)
}
func RemoveDurable(path string) error {
@@ -184,3 +180,47 @@ func UpdateIdle(guardDir, journal string) error {
}
return nil
}
+
+func (d Disk) WithParticipation(ctx context.Context, fn func(rootparticipation.Ledger) error) error {
+ if d.Participation != nil {
+ return fn(*d.Participation)
+ }
+ l, err := rootparticipation.Open()
+ if err != nil {
+ return err
+ }
+ defer l.State.Close()
+ return fn(l)
+}
+
+func (d Disk) ControllersIdle(ctx context.Context, dataDir ...string) error {
+ return d.WithParticipation(ctx, func(l rootparticipation.Ledger) error {
+ if err := l.Idle(ctx); err != nil {
+ return err
+ }
+ if len(dataDir) == 1 {
+ return checkLegacyParticipationHint(dataDir[0])
+ }
+ return nil
+ })
+}
+
+func (d Disk) BeginParticipation(ctx context.Context, id, dataDir string, commit func() error) error {
+ if err := checkLegacyParticipationHint(dataDir); err != nil {
+ return err
+ }
+ return d.WithParticipation(ctx, func(l rootparticipation.Ledger) error { return l.BeginUpdateWith(ctx, id, commit) })
+}
+
+func (d Disk) EndParticipation(ctx context.Context, id string, commit func() error) error {
+ return d.WithParticipation(ctx, func(l rootparticipation.Ledger) error {
+ if _, err := l.UpdateID(); errors.Is(err, os.ErrNotExist) {
+ if err := l.BeginUpdate(ctx, id); err != nil {
+ return err
+ }
+ } else if err != nil {
+ return err
+ }
+ return l.EndUpdateWith(ctx, id, commit)
+ })
+}
diff --git a/internal/hostfloor/floor_test.go b/internal/hostfloor/floor_test.go
index 1e5ec19a7..ebd642437 100644
--- a/internal/hostfloor/floor_test.go
+++ b/internal/hostfloor/floor_test.go
@@ -53,7 +53,7 @@ func TestFloorPairAndPermanentArming(t *testing.T) {
func TestPendingAndLostControllersBlockUpdate(t *testing.T) {
for _, state := range []string{"pending", "active", "lost", "broken"} {
t.Run(state, func(t *testing.T) {
- d := Disk{Dir: t.TempDir()}
+ d := Disk{Dir: t.TempDir(), Participation: floorParticipationFixture(t)}
data := t.TempDir()
_ = os.Mkdir(filepath.Join(data, ".hostexec"), 0700)
_ = os.WriteFile(filepath.Join(data, ".hostexec", "host.json"), []byte(state), 0600)
@@ -65,7 +65,7 @@ func TestPendingAndLostControllersBlockUpdate(t *testing.T) {
}
})
}
- d := Disk{Dir: t.TempDir()}
+ d := Disk{Dir: t.TempDir(), Participation: floorParticipationFixture(t)}
data := t.TempDir()
_ = os.Mkdir(filepath.Join(data, ".hostexec"), 0700)
if err := d.Begin("update", data); err != nil {
diff --git a/internal/hostfloor/participation.go b/internal/hostfloor/participation.go
index 87a603294..4c7387539 100644
--- a/internal/hostfloor/participation.go
+++ b/internal/hostfloor/participation.go
@@ -1,6 +1,7 @@
package hostfloor
import (
+ "context"
"errors"
"fmt"
"os"
@@ -14,9 +15,13 @@ import (
// CheckParticipation reads only directory entries. Floor-armed boxes require
// the controller directory; legacy region HA boxes may not have one yet.
func CheckParticipation(dataDir string, requireDirectory bool) error {
+ return (Disk{}).ControllersIdle(context.Background(), dataDir)
+}
+
+func checkLegacyParticipationHint(dataDir string) error {
dir := filepath.Join(dataDir, ".hostexec")
f, err := safefile.OpenDir(dir)
- if errors.Is(err, os.ErrNotExist) && !requireDirectory {
+ if errors.Is(err, os.ErrNotExist) {
return nil
}
if err != nil {
diff --git a/internal/hostfloor/participation_test.go b/internal/hostfloor/participation_test.go
index a10d7eac6..2a2383b25 100644
--- a/internal/hostfloor/participation_test.go
+++ b/internal/hostfloor/participation_test.go
@@ -8,8 +8,8 @@ import (
func TestParticipationPreservesFloorAndLegacyDirectoryRules(t *testing.T) {
data := t.TempDir()
- if err := CheckParticipation(data, false); err != nil {
- t.Fatal("legacy directory absence refused", err)
+ if err := CheckParticipation(data, false); err == nil {
+ t.Fatal("legacy directory absence replaced root completeness")
}
if err := CheckControllersIdle(data); err == nil {
t.Fatal("floor accepted a missing controller directory")
diff --git a/internal/hostfloor/plan9_a_test.go b/internal/hostfloor/plan9_a_test.go
index 061ce74b7..67c60da9e 100644
--- a/internal/hostfloor/plan9_a_test.go
+++ b/internal/hostfloor/plan9_a_test.go
@@ -168,8 +168,8 @@ func TestPlan9AControllerDirCreatedWithoutFollowingLinks(t *testing.T) {
t.Fatal(err)
}
check(t, filepath.Join(data, ".hostexec"))
- if err := CheckControllersIdle(data); err != nil {
- t.Fatalf("armed path still refuses: %v", err)
+ if err := (Disk{Participation: floorParticipationFixture(t)}).ControllersIdle(t.Context(), data); err != nil {
+ t.Fatalf("complete root census refused: %v", err)
}
if err := EnsureControllerDir(data, uid, gid); err != nil {
t.Fatalf("second run: %v", err)
@@ -245,7 +245,7 @@ func TestPlan9AControllerDirCreatedWithoutFollowingLinks(t *testing.T) {
// so completion can tell a finished rollback from an update that never
// changed the box.
func TestPlan9AMarkerRecordsRollback(t *testing.T) {
- d := Disk{Dir: t.TempDir()}
+ d := Disk{Dir: t.TempDir(), Participation: floorParticipationFixture(t)}
data := t.TempDir()
if err := os.Mkdir(filepath.Join(data, ".hostexec"), 0o700); err != nil {
t.Fatal(err)
diff --git a/internal/hostfloor/rootparticipation_test.go b/internal/hostfloor/rootparticipation_test.go
new file mode 100644
index 000000000..6795aca10
--- /dev/null
+++ b/internal/hostfloor/rootparticipation_test.go
@@ -0,0 +1,125 @@
+package hostfloor
+
+import (
+ "context"
+ "encoding/json"
+ "os"
+ "path/filepath"
+ "sync"
+ "testing"
+
+ "github.com/carlosframework/platform/internal/rootparticipation"
+)
+
+type floorParticipationDisk struct {
+ dir string
+ mu sync.Mutex
+ beforeWrite func(string)
+}
+
+func (d *floorParticipationDisk) Read(n string) ([]byte, error) {
+ return os.ReadFile(filepath.Join(d.dir, n))
+}
+func (d *floorParticipationDisk) Write(n string, b []byte) error {
+ if d.beforeWrite != nil {
+ d.beforeWrite(n)
+ }
+ return Durable(filepath.Join(d.dir, n), b, 0600)
+}
+func (d *floorParticipationDisk) Remove(n string) error {
+ return RemoveDurable(filepath.Join(d.dir, n))
+}
+func (d *floorParticipationDisk) Names() ([]string, error) {
+ entries, err := os.ReadDir(d.dir)
+ var out []string
+ for _, e := range entries {
+ out = append(out, e.Name())
+ }
+ return out, err
+}
+func (d *floorParticipationDisk) Lock(context.Context, string) (func(), error) {
+ d.mu.Lock()
+ return d.mu.Unlock, nil
+}
+func (d *floorParticipationDisk) Close() error { return nil }
+func floorParticipationFixture(t *testing.T) *rootparticipation.Ledger {
+ t.Helper()
+ d := &floorParticipationDisk{dir: t.TempDir()}
+ raw, _ := json.Marshal(rootparticipation.Census{Schema: 1, Box: "box", Enrollment: "en", Migration: 1, Revision: 1, LaunchRevision: 1, Complete: true})
+ if err := d.Write("census.json", raw); err != nil {
+ t.Fatal(err)
+ }
+ return &rootparticipation.Ledger{State: d, VerifyLaunches: func(context.Context, uint64) error { return nil }}
+}
+
+func TestPlan14ExecutionFloorUsesRootCensus(t *testing.T) {
+ d := Disk{Dir: t.TempDir(), Participation: floorParticipationFixture(t)}
+ data := t.TempDir()
+ if err := d.Participation.State.Write("shop.example.json", []byte("{\"Schema\":1,\"Status\":\"lost\"}")); err != nil {
+ t.Fatal(err)
+ }
+ if err := d.Begin("update", data); err == nil {
+ t.Fatal("missing agent directory cleared root obligation")
+ }
+ if err := d.Participation.State.Remove("shop.example.json"); err != nil {
+ t.Fatal(err)
+ }
+ d.Participation.VerifyLaunches = nil
+ if err := d.Begin("update", data); err == nil {
+ t.Fatal("missing kernel completeness permitted update")
+ }
+ d.Participation.VerifyLaunches = func(context.Context, uint64) error { return nil }
+ if err := d.Begin("update", data); err != nil {
+ t.Fatal(err)
+ }
+ if err := d.Participation.Acquire(t.Context(), func() error { return nil }); err == nil {
+ t.Fatal("floor update admitted acquisition")
+ }
+}
+
+func TestPlan14ExecutionFloorUpdateRace(t *testing.T) {
+ for _, first := range []string{"acquisition", "update"} {
+ t.Run(first, func(t *testing.T) {
+ d := Disk{Dir: t.TempDir(), Participation: floorParticipationFixture(t)}
+ state := d.Participation.State.(*floorParticipationDisk)
+ entered, release := make(chan struct{}), make(chan struct{})
+ target := "census.json"
+ if first == "update" {
+ target = "update.json"
+ }
+ var once sync.Once
+ state.beforeWrite = func(name string) {
+ if name == target {
+ once.Do(func() { close(entered); <-release })
+ }
+ }
+ acquisition := func() error {
+ return d.Participation.Acquire(t.Context(), func() error { return state.Write("shop.example.json", []byte(`{"Schema":1,"Status":"pending"}`)) })
+ }
+ data := t.TempDir()
+ update := func() error { return d.Begin("update", data) }
+ a, b := acquisition, update
+ if first == "update" {
+ a, b = update, acquisition
+ }
+ one, two := make(chan error, 1), make(chan error, 1)
+ go func() { one <- a() }()
+ <-entered
+ go func() { two <- b() }()
+ mirror := filepath.Join(data, ".hostexec")
+ if err := os.Mkdir(mirror, 0700); err != nil {
+ t.Fatal(err)
+ }
+ if err := os.Remove(mirror); err != nil {
+ t.Fatal(err)
+ }
+ close(release)
+ if err := <-one; err != nil {
+ t.Fatal(err)
+ }
+ if err := <-two; err == nil {
+ t.Fatal("floor update and acquisition both admitted")
+ }
+ })
+ }
+}
diff --git a/internal/provision/plan9_b8_census_test.go b/internal/provision/plan9_b8_census_test.go
index cf1020b8d..27d9fecef 100644
--- a/internal/provision/plan9_b8_census_test.go
+++ b/internal/provision/plan9_b8_census_test.go
@@ -731,10 +731,10 @@ var plan9B8CensusInventory = []censusEntry{
{"internal/host/bootstrap.go", "const tmpfilesConf", "key-site", "lit:instances", "71d83f240cb1c3ab6f9dd2954b1f3e93b90133362ec12193746f60e75aeced7d"},
{"internal/host/bootstrap.go", "bootstrapWith", "key-site", "lit:instances", "36ff18685872be8adfbf02d05676990bf9097c0fcc9695d3cae2f905ec59665c"},
// Region HA stage B: installs root's relocating attempt reader behind CARLOS_REGION_HA; names the instances root for the launch, writes nothing.
- {"internal/host/claimlaunch_production.go", "claimLaunchFor", "key-site", "lit:instances", "76cfc428c7385d1278a5d3842396a6f7b343f03547fdbfc51088af262f3980ef"},
+ {"internal/host/claimlaunch_production.go", "claimLaunchFor", "key-site", "lit:instances", "a283c8ff26452e19323611ae1fbd4ad9a51265f186afdb1ff99de089619e6f9c"},
{"internal/host/claimretire_transport.go", "retirementAcknowledgement", "nonrecord", "sel:Put", "5c09795fbe9b952436d16bcd58e846ac27e9dbcf959fcf1cd6c432af0f3ee416"},
// D1 compares the retained registration's record key to the fresh claim; no record write.
- {"internal/host/rootexecution_authority.go", "ClaimRootHTTP.executionAuthority", "key-site", "key:RecordKey", "90b20d5af85ba9ef95bb8487797a715af7d43a1b3350058173079aece3bdea47"},
+ {"internal/host/rootexecution_authority.go", "ClaimRootHTTP.executionAuthority", "key-site", "key:RecordKey", "107989f561409fd8c11c2666d0672b8dbeb368842fe00ad6a7b84fece2150438"},
{"internal/host/errship.go", "errshipFlush", "nonrecord", "sel:Put", "82831c08563eab44de07c1c69752555eafe60c70dbf9521d9a4711bc5c104a6b"},
{"internal/host/fleetbind.go", "WriteFleetBinding", "nonrecord", "sel:Put", "44ab984c2c9b30abcc938132118f61a6922ccc0cd40ed2b6cb61c7654aa0a1c3"},
{"internal/host/logship.go", "logshipFlush", "nonrecord", "sel:Put", "a2fa594c1206028af170a2d0cbedef55ba00a2f1c698a6853e1214cc3b172dd9"},
@@ -795,7 +795,7 @@ var plan9B8CensusInventory = []censusEntry{
{"internal/hostevidence/signature.go", "immutable", "nonrecord", "sel:Put", "54fb2bdc230c2cb4193f3b808004b63bcfd092266846fc0c03e61617c3ad0ab5"},
{"internal/hostexec/controller.go", "Controller.run", "nonrecord", "sel:Put", "03df11b375761730700ce30c0db05c57f0828629eda0a5de126ea1a2f2f7501c"},
// D1: conditional execution lease write under control/hosts/<host>/exec/<box>.json; no deployment record key.
- {"internal/hostexec/rootbroker.go", "RootBroker.acquire", "nonrecord", "sel:Put", "8999554ba85afcbee18a0a4f6691208cefb3d56f9ea24961b6f3c74c0183551e"},
+ {"internal/hostexec/rootbroker.go", "RootBroker.acquire", "nonrecord", "sel:Put", "663f0d0ee6f49ebb2da2daef891f58c4645175702f4517494f50fe6ecc1f9db6"},
{"internal/hostfence/termination.go", "TerminationWorker.persist", "nonrecord", "sel:Put", "47758114adcc3c493a9d1ead0fa7087ad0d1e49595c891bab4dfb51c9058a8a1"},
{"internal/hostfiles/contract.go", "CopyManifest", "nonrecord", "sel:Put", "9754b113ca2cad5e267402a44ac25de778e332d0c87027767f9a7daa4937d9fd"},
{"internal/hostfiles/publisher.go", "Publisher.put", "nonrecord", "sel:Put", "4bf1d0c4ab995f4e5afa8d7675cbd00446da006a82a659764f8013c011f9efaa"},
diff --git a/internal/provision/testdata/plan14-root-reads-merge.tsv b/internal/provision/testdata/plan14-root-reads-merge.tsv
index fb43ac37a..9ee12c675 100644
--- a/internal/provision/testdata/plan14-root-reads-merge.tsv
+++ b/internal/provision/testdata/plan14-root-reads-merge.tsv
@@ -34,9 +34,8 @@ internal/host/claimfiles.go openClaimFilesManifest legacy accepted-legacy accept
internal/host/claimhandover_crossbox.go relocationAfter authority C Admission dispatch preserves landing handover and delegates relocating probing to its typed after-admission owner. file:Exec@393 7ea07d20e629340580413f691de629b9cde7742fa5716dbcbe7e3c777fb0ada7
internal/host/claimhandover_crossbox.go relocationBefore authority C Before-admission dispatch binds relocation executor and probe phase before typed handover. file:Exec@356 b5428a6feba965fd3880b3a6a1ddd0d0a048a2424ffe7882c79d02df71413fb6
internal/host/claimhandover_crossbox.go wireClaimAdmission authority C,D Admission constructor adds completed-relocation recovery owners while retaining typed root recovery rebind. c8a2f03e2937b72d3e38cea02aa5e49ebfe8a38638d97c64dc65db5ddc9955a0
-internal/host/claimlaunch_production.go claimLaunchFor authority C,D Root launch keeps canonical installation attribution and adds relocation attempt reader under region-HA switch. data-literal@414,file:CommandContext@605 76cfc428c7385d1278a5d3842396a6f7b343f03547fdbfc51088af262f3980ef
+internal/host/claimlaunch_production.go claimLaunchFor authority D Production root runtime receives the unit-aware kernel wrapper before startup recovery. data-literal@414,file:CommandContext@605 a283c8ff26452e19323611ae1fbd4ad9a51265f186afdb1ff99de089619e6f9c
internal/host/claimmoveparks.go openProductionClaimMoveWake authority C,G Moves owner construction wraps every bucket request in bound identity check and preserves wake refusal. file:Open@521 bff34938c41a8c054e98744c3262b182437231ac6dc361c1a5ba15a39b8b7505
-internal/host/claimparticipation.go productionClaimLocal.prepareWith authority D Root observers read root participation; agent controller remains legacy pending D1 production selection. TestPlan14ExecutionRootLocalIgnoresAgentAbsence. file:Open@3220,file:ReadFile@2110 e6d57a481beadde9ce567cc816007ee1e1ce0c5c43c654d65b84958bafbfa780
internal/host/claimparticipation_completed.go ClaimAssembly.completedRelocationDischarge authority C,D Completed-relocation discharge requires exact claim completion and verified retirement receipt; unread evidence refuses cleanup. file:Read@227 e061f95cf3d974fb253c59540cee70ca942a8d73042679aa7f071ada90f9b69d
internal/host/claimparticipation_relocation.go productionClaimLocal.Acknowledged authority D Relocation acknowledgement waits for bound controller readiness; participates in execution admission. file:Prepare@268 022a1bbe9f6479e37ad7afd4a9b9201915f729953742f3306cd3f01cd79cc1d5
internal/host/claimparticipation_stale.go productionClaimLocal.clearUntracked authority D Untracked participation cleanup now carries exact controller binding into retirement before stale-state clearing. file:Read@1004 067dcf7f62940af8030315834087853273a039a56e2095ae15c8b2f3342e8fb3
@@ -251,7 +250,7 @@ internal/sim/hostlife/mutate.sh external legacy accepted-legacy accepted-legacy;
@coverage internal/console 41714f3779b343460800cb25b31782dc7d5c1e83b2aacf7d8d0a28f39c47bf76
@coverage internal/console/templates 6492b7455fa3315105339cca03edb4372ac0d9bf746c018e13a308cf0b74cc05
@coverage internal/edgesfile 553af147ca4882b8425afddf1ed250ee40a6cac92361d667cb4a690393be5272
-@coverage internal/host 6212a55d3866480b2f7b24119e5e62c03991cfd377e2d011d1c316f568fea98b
+@coverage internal/host d387b30eb462bab6a344e07efee7ad3954cffca8dfa9fb0dbf888dd9c41dc361
@coverage internal/hostbox afb08c287eaccb43adde1c488bd122482711ce4e29ecb675c9428f27130c3d93
@coverage internal/hostclaim feaf701db4b49ce92733b9d6c1fa1c0ae8efc6e13439ce201fca1a9e24dcf927
@coverage internal/hostfiles 554285c123758375c13388b2fa42f654819392dac0b027816a713548ec17dcc6
@@ -268,25 +267,52 @@ internal/sim/hostlife/mutate.sh external legacy accepted-legacy accepted-legacy;
@coverage internal/sim/hostlife eaac101ea7970c74fee621e5cd7515ec7e4907bc5874c65eab86666af0f7dc61
@coverage internal/status d5ef42fe4dc2cb72d1ce5e133e2c95a3e85960a222eb424f00b259b961b8d976
@coverage internal/updatewords 93bb83474bad5d20281c34e72fadf56e2847e9a7eee2385a78f46a11fc39a3b6
-@coverage internal/hostexec 4727c69c222b0b35066fbd3df941c40d78b92e311dfa3a928ebc6d84bc9bee42
-@coverage internal/rootparticipation db8fb3a896a400cfe6396f436625732502a83af1618be7fc3df7b198a8c1bc32
-internal/host/rootexecution_authority.go ClaimRootHTTP.executionAuthority authority D D1 reads the fresh claim, deployment record and root inventory, including the serving writer box; candidate admission only. Production broker construction is pending. file:Read@553 90b20d5af85ba9ef95bb8487797a715af7d43a1b3350058173079aece3bdea47
+@coverage internal/hostexec 778261669d5e079b9f98d74807557fd5de5c4e0f663bd0f9d380cdad77ffbcf8
+@coverage internal/rootparticipation 99764b1531e32b6065716e7b92964de53e22448cc76644e4ac9acfab02fdcf07
+internal/host/rootexecution_authority.go ClaimRootHTTP.executionAuthority authority D Fresh claim, deployment binding and root installation authorize participation, including the retained source only. file:Read@553 107989f561409fd8c11c2666d0672b8dbeb368842fe00ad6a7b84fece2150438
internal/host/rootexecution_read.go rootExecutionRead authority D Production root observer selects the descriptor-checked participation reader. c70216cd8e62430b43669d6cea5bcb9101fcb31c04aea178a951a620c369b1e5
internal/hostexec/participation.go PreinstallationParticipant authority D D1 selects only the fresh claim executor or named target in its allowed phase; Exec is a claim field, not a process invocation. No installation authority. file:Exec@1035,file:Exec@1307,file:Exec@276 f14568ea08c9d439d7239ac9d5d596a134a17627e1eac878c074629ca2ba7304
-internal/hostexec/rootbroker.go RootBroker.Execute authority D D1/D2 register in-flight work before acquiring root lifetime locks, dispatch a tokenless serving view without acquisition, and retain conditional-write and replay evidence. file:Read@3101,file:Read@4519 10b222fb88be75fc062d1a45c86037580eaab725b1bffe5d4848b5881d538e30
+internal/hostexec/rootbroker.go RootBroker.Execute authority D Broker binds exact live kernel peer and request; renewal cannot cross the prior cutoff; recovery retains positive settlement requirements. file:Read@3231,file:Read@4649 b5ae9d292ed58cf8016ca69910bfb524b4bbefdacb7110152c90501d5b509c38
internal/hostexec/rootbroker.go RootBroker.deny authority D D2 compares the current root token before durable loss and live-lock revocation; cleanup is bounded independently of request cancellation. file:Read@117 e29e9132d0ceb540000a1836249fda71c4a75b4746d6037a42cbf6e2e2752b9d
internal/hostexec/rootbroker.go RootBroker.read authority D D1/D2 decode the retained root participation record; missing or malformed state grants nothing. file:Read@113 8a2fb0134e9c24bbe448efc35f193e60d01e909a3129b465aa16f682eb4114f1
internal/hostexec/rootread.go ReadRoot authority D Root census, update marker, tuple, kernel identity, deadline and live lock; final launch and serving-settlement witnesses exercise the production reader. file:Read@2013,file:Read@228,file:Read@490 0151eab12e55ebf3674f66c9a48d6f7f991a6b5dc529491a25adcbfa77e4101c
-internal/rootparticipation/ledger.go Ledger.Acquire authority D D3 excludes updates and persists the root acquisition census intent before the reservation callback. Production wiring is pending. file:Read@345 a0800db3005f69f6379e4483e596bd880c501077591a3c748ab2f52407af7d9c
-internal/rootparticipation/ledger.go Ledger.BeginUpdate authority D D3 serializes the root update marker and complete participation/launch census with acquisition. file:Read@289 01bee25b1e5271d2a3ebd64562e3b7246becf0be05072c87afc291c0800cdd78
-internal/rootparticipation/ledger.go Ledger.Census authority D D3 requires explicit root migration, enrollment and completeness; missing history is unavailable. file:Read@119 ff240c4ba7e395688a83c0ffc652ce0e337c1723519a4bd5bbbbd858a2edb005
-internal/rootparticipation/ledger.go Ledger.EndUpdate authority D D3 removes only the exact root update identity under transaction exclusion. file:Read@222 06d084eda5689aa6a85717cfcd715eb1b856e46824635236a91672f9dffd82f0
+internal/rootparticipation/ledger.go Ledger.Acquire authority D D3 excludes updates and persists the root acquisition census intent before the reservation callback. file:Read@345 a0800db3005f69f6379e4483e596bd880c501077591a3c748ab2f52407af7d9c
+internal/rootparticipation/ledger.go Ledger.BeginUpdate authority D Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness. 30693165b147fb2e3be15a9804c05e67338191b614c690920b1b567b446d16e6
+internal/rootparticipation/ledger.go Ledger.Census authority D Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness. ba4f2145b81958ee57b96788aed80b07280590bfc423f87fdbaa1b97a74d4671
+internal/rootparticipation/ledger.go Ledger.EndUpdate authority D Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness. a195c06a975c858be0d5826cdbd23eb7bbe410b4cef52361b8355c8e25c0e2dd
internal/rootparticipation/ledger.go Ledger.idle authority D D3 enumerates root records and requires settled obligations plus an independently supplied launch/kernel census. file:Read@429 b7b27590041bac6bec3de245b7fe20da7965cb2a9e52725c888f8a83313ff9f3
-internal/hostexec/rootclient.go requestIdentity authority D D1 supplies collision-resistant request correlation only; root authenticates peer and authority independently. Production client integration pending. file:Read@73 2acec351fdc4ab671e65b4a9bb5017aeb094fbf78fad8e34d713e48a2846c158
-internal/hostexec/rootserving.go RootBroker.servingView authority D D1 reads only completed root census and settled root participation under transaction exclusion, rechecks claim authority and peer identity, and returns no lease or token. Production client selection is pending. file:Read@441 9a57720834b3d7c661854196cf0ed1261c643673b5ba900c38987a162f5de0bb
+internal/hostexec/rootclient.go requestIdentity authority D D1 supplies collision-resistant request correlation only; root authenticates peer and authority independently. file:Read@73 2acec351fdc4ab671e65b4a9bb5017aeb094fbf78fad8e34d713e48a2846c158
+internal/hostexec/rootserving.go RootBroker.servingView authority D Tokenless serving needs completed migration and settled root state; preinstallation grants no privileged effect. file:Read@444 5b72b542a7f26a5f09ddb95d48e913a89cb76e08c99542a8c81d7fa9a2e298be
internal/host/claimlaunch_execpermit.go ClaimLaunchRoot.execPermit authority D Root participation bounds the executable permit; TestPlan14ExecutionFinalLaunchUsesRootParticipation covers initial and final checks. file:Read@157 795354a21d94cfe2eaf955dc913e88079426947e9547ebe83b79332bfdd7f3f1
internal/host/rootexecution_read.go readRootExecution authority D Descriptor-checked root opener shared by root Prepare/Check, initial launch authorization and final executable checks; no agent fallback. file:Open@291 2f70b4203a803b3fe0cd1e57c21106433a5af6a14dad8217e67bd24a28ad2b2f
internal/host/rootexecution_read.go productionClaimLocal.checkRootParticipation authority D Root observer binds participation to enrolled actor; TestPlan14ExecutionRootLocalIgnoresAgentAbsence. 9cb9f9b98b9f143c7ce9225dd8c6b7798ce17683ffa85dded31a9bf90bcaeab9
internal/host/claimlaunch_authority.go ClaimLaunchRoot.authorize authority D Both root launch authorizations read root participation and match authenticated peer; TestPlan14ExecutionFinalLaunchUsesRootParticipation. de7e7f2ffebfc7d7e26e0c72492b3d9fb4b8766cefcd2648931f3f0ac975cf45
-internal/host/rootexecution_migration.go ClaimRootHTTP.executionAuthorityWithMigration authority D Root participation census supplies migration generation; TestPlan14ExecutionMigrationIsIndependent and TestPlan14ExecutionPreinstallationBindsMigration. Production construction remains pending. 1c7f21b4296de5284a89ad4fa97b352cc6a59998156a22b07b6798291b778f7d
+internal/host/rootexecution_migration.go ClaimRootHTTP.executionAuthorityWithMigration authority D Root participation census supplies migration generation; TestPlan14ExecutionMigrationIsIndependent and TestPlan14ExecutionPreinstallationBindsMigration. 1c7f21b4296de5284a89ad4fa97b352cc6a59998156a22b07b6798291b778f7d
internal/hostexec/rootbroker.go RootBroker.recoverSettlement authority D Recovery serializes settlement with in-flight requests and requires cleanup, exact conditional release and CC9. TestPlan14ExecutionRecoverySettlesWithoutControllerToken and TestPlan14ExecutionRecoveryJoinsRemoteWrite. 88c7b2d1a863590e549a2477732badcb6e003289da8db46aee16a1d777a8f77d
+internal/host/claimparticipation.go productionClaimLocal.participateHost authority D Production selects the broker client; the old local controller path is selected only by explicit legacy test fixtures. file:Read@121 035931959f2b44012e10624314b90bad360ca77f8fdf3d8300e2a29ffd33c0fb
+internal/host/claimparticipation.go productionClaimLocal.prepareLegacyWith authority D Production selects the broker client; the old local controller path is selected only by explicit legacy test fixtures. file:Open@3226,file:ReadFile@2116 20a34982bf5184cba4e4691040ede402a2c93ccbc0571c9483ad28843a298673
+internal/host/guardtransaction.go systemApplier.checkGuardRecovery authority D Root participation exclusion persists through guard transaction completion and recovery. file:ReadFile@408,file:ReadFile@635 b1efe974172ec1e07bb27dc98e39b56af2eb459afd28335123451dc14fa21e40
+internal/host/rootexecution_client.go productionClaimLocal.prepareWith authority D Agent selects the single root lease owner over authenticated RPC; its mirror grants no root authority. file:Read@3239 269e72c57424e72d9fdbdd9191eac625877cca4ef1eff12e66d55299c727409b
+internal/host/rootexecution_recovery.go recoverRootExecution authority D Root recovery reads its complete census and reconstructs local cleanup without agent or broker RPC. file:Open@179 362b728a79c7542a5ec6ac980072e9ad2358ee09ee27f8f0b2dbd842581b9019
+internal/host/rootexecution_runtime.go newClaimExecutionRuntime authority D Instance-control owns broker, checked store, monitor and bounded cleanup lifetime. file:Read@205 89dd8159a5181d315a3febff26646919ec4135807ea2cd2b1f89847d9f512f47
+internal/host/rootexecution_runtime.go var openClaimExecutionAuthority authority D Instance-control owns broker, checked store, monitor and bounded cleanup lifetime. file:Open@76 dc9e1a3d2ccc63de2eec84fe1727d4c741372a227eb423d508749c4347731433
+internal/host/rootexecution_settle.go ClaimRootHTTP.beginExecutionRecoveryFence authority D Root cleanup checks exact retained installation, launch journal and kernel evidence; CC9 requires a fresh terminal or exclusion claim. file:Read@146 dfbfdf5ae974363678e8e395ef0be2a64ea8c81c3f97ba766eeadccbba9c2fe6
+internal/host/rootexecution_settle.go ClaimRootHTTP.cleanupExecution authority D Root cleanup checks exact retained installation, launch journal and kernel evidence; CC9 requires a fresh terminal or exclusion claim. file:Read@2438,file:Read@3761 9f715acdc31d97f33c1ab6efe227bd248a91a7a150498974c151426c943a9025
+internal/host/rootexecution_settle.go ClaimRootHTTP.settleExecution authority D Root cleanup checks exact retained installation, launch journal and kernel evidence; CC9 requires a fresh terminal or exclusion claim. file:Read@108 ecd07f9675915c9cc747246369f624bbdf9a6f45369f3efdc1b2b49a8bd0e69b
+internal/host/systemparticipation.go systemApplier.beginExecutableChange authority D Executable updates use the root census and durable shared exclusion even after flag disable; legacy markers cannot prove idle. file:ReadFile@397 f3f8d6c7c81d17987898f26d2d0d6cc2434a6d1ed416eebb93e0b5318c5efe5b
+internal/host/systemparticipation.go systemApplier.clearUpdateBegun authority D Executable updates use the root census and durable shared exclusion even after flag disable; legacy markers cannot prove idle. file:Lstat@240,file:Lstat@522 0bd119032eed23a907985286105fa86bce820a0e5fcb26ae5ac8317718395497
+internal/hostfloor/disk.go Disk.Begin authority D Floor begin and completion serialize with root acquisition through the same durable transaction marker. file:Stat@151 6fb7ebd46a718df5d2f42531b8d62d97183c938d46f89c0ce3abdb71533494a9
+internal/hostfloor/disk.go Disk.WithParticipation authority D Floor begin and completion serialize with root acquisition through the same durable transaction marker. file:Open@175 3c0aa824ccfac423f0682463fd948f168ea00ef2894a321f6abb9effbf157891
+internal/hostfloor/participation.go CheckParticipation authority D Service files add refusal hints only; missing service files never establish root completeness. 0052ae112cc3cbf4acac979df4f19cd5cacdc23269d05584bd6025b515c30b8d
+internal/hostfloor/participation.go checkLegacyParticipationHint hint D Service files add refusal hints only; missing service files never establish root completeness. file:ReadDir@299 05ccec45f7e0b231253d024640defdf0c93e71f40303761b0fdc0cf3acb5af79
+internal/rootparticipation/ledger.go Ledger.BeginUpdateWith authority D Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness. file:Read@314 70e9ee76d88fde902d99ed61b852bebdc5d40cc40fd10834c5be6f6095df193c
+internal/rootparticipation/ledger.go Ledger.EndUpdateWith authority D Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness. file:Read@247 9c7fbfb25b613c16742673c9785171394fc2a9206c3f996a2549e5d4c85a8911
+internal/rootparticipation/ledger.go Ledger.UpdateID authority D Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness. file:Read@110 41c1f1a6dd5baddadc384ef78f319fc3111f88e724ef0b39b3a3752a7057281d
+internal/rootparticipation/ledger.go Ledger.readCensus authority D Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness. file:Read@136 db268d0dbd24db646bbdab2b88ad17b1c43b7963a51ce473ee0a8895a1f951e6
+internal/rootparticipation/production.go Open authority D Production opens the fixed checked root namespace; missing E2 launch/kernel verifier refuses idle and update. file:Open@45,file:Open@5 82b11f7548ce7ace572a697f66b6ef22239fc3fdf2e85a7c5fde7b8720c4a75b
+@remove internal/host/claimparticipation.go productionClaimLocal.prepareWith
+@coverage internal/hostfloor 52f6b3ff07b4e632913bfff806e74eaeb9aac0b14c6353a0b02bb1caf119baa3
+internal/host/guardtransaction.go installFloorHook authority D Root update recovery requires positive participation and shared exclusion with or without an armed floor. file:Lstat@93,file:ReadDir@259 6956aea590b55d435ef0321a6e2b365f3df074bbe91d09acb6215f19e4de622c
+internal/host/guardtransaction.go legacyGuardEntries authority D Root update recovery requires positive participation and shared exclusion with or without an armed floor. file:ReadFile@265 2d73ba69020ae86926e29d9e82da581517da3dbc23e4364b4cad8f7746a2d278
+internal/host/guardtransaction.go systemApplier.beginGuard authority D Root update recovery requires positive participation and shared exclusion with or without an armed floor. file:Read@679,file:Read@903 d5056ac9aa4bff1fc5add3e8ae59ce8352d2285446290e03663466c5097aa54c
+internal/host/guardtransaction.go systemApplier.guardTransaction authority D Root update recovery requires positive participation and shared exclusion with or without an armed floor. file:ReadFile@84 6d364c272ca45684115c5d61eb13249a5e4b93b92cc17ce2c306c3a7f05fa302
diff --git a/internal/rootparticipation/ledger.go b/internal/rootparticipation/ledger.go
index 96783fa03..10bbb0e02 100644
--- a/internal/rootparticipation/ledger.go
+++ b/internal/rootparticipation/ledger.go
@@ -44,7 +44,11 @@ func Decode(raw []byte, v any) error {
}
return nil
}
-func (l Ledger) Census() (Census, error) {
+func (l Ledger) Census() (Census, error) { return l.readCensus(false) }
+
+func (l Ledger) RecoveryCensus() (Census, error) { return l.readCensus(true) }
+
+func (l Ledger) readCensus(recovery bool) (Census, error) {
var c Census
if l.State == nil {
return c, ErrUnavailable
@@ -53,7 +57,7 @@ func (l Ledger) Census() (Census, error) {
if e != nil {
return c, e
}
- if Decode(raw, &c) != nil || c.Schema != 1 || c.Revision == 0 || c.Box == "" || c.Enrollment == "" || !c.Complete || c.Pending != "" || (c.Migration == 0 && !c.NeverEnrolled) || c.LaunchRevision == 0 || (l.Box != "" && c.Box != l.Box) || (l.Enrollment != "" && c.Enrollment != l.Enrollment) {
+ if Decode(raw, &c) != nil || c.Schema != 1 || c.Revision == 0 || c.Box == "" || c.Enrollment == "" || !c.Complete || (c.Pending != "" && (!recovery || c.Pending != "acquisition")) || (c.Migration == 0 && !c.NeverEnrolled) || c.LaunchRevision == 0 || (l.Box != "" && c.Box != l.Box) || (l.Enrollment != "" && c.Enrollment != l.Enrollment) {
return c, ErrUnavailable
}
return c, nil
@@ -137,6 +141,10 @@ func (l Ledger) Idle(ctx context.Context) error {
return l.idle(ctx, c)
}
func (l Ledger) BeginUpdate(ctx context.Context, id string) error {
+ return l.BeginUpdateWith(ctx, id, nil)
+}
+
+func (l Ledger) BeginUpdateWith(ctx context.Context, id string, commit func() error) error {
if l.State == nil || !validID(id) {
return ErrUnavailable
}
@@ -163,9 +171,16 @@ func (l Ledger) BeginUpdate(ctx context.Context, id string) error {
if e = l.idle(ctx, c); e != nil {
return errors.Join(e, l.State.Remove("update.json"))
}
+ if commit != nil {
+ return commit()
+ }
return nil
}
func (l Ledger) EndUpdate(ctx context.Context, id string) error {
+ return l.EndUpdateWith(ctx, id, nil)
+}
+
+func (l Ledger) EndUpdateWith(ctx context.Context, id string, commit func() error) error {
if l.State == nil {
return ErrUnavailable
}
@@ -186,5 +201,62 @@ func (l Ledger) EndUpdate(ctx context.Context, id string) error {
if Decode(raw, &u) != nil || u.Schema != 1 || u.ID != id {
return ErrUnavailable
}
+ c, e := l.Census()
+ if e != nil {
+ return e
+ }
+ if c.Revision != u.Revision {
+ return ErrUnavailable
+ }
+ if e = l.idle(ctx, c); e != nil {
+ return e
+ }
+ if commit != nil {
+ if e = commit(); e != nil {
+ return e
+ }
+ }
return l.State.Remove("update.json")
}
+
+func (l Ledger) UpdateID() (string, error) {
+ if l.State == nil {
+ return "", ErrUnavailable
+ }
+ raw, err := l.State.Read("update.json")
+ if err != nil {
+ return "", err
+ }
+ var u struct {
+ Schema int
+ ID string
+ Revision uint64
+ }
+ if Decode(raw, &u) != nil || u.Schema != 1 || !validID(u.ID) || u.Revision == 0 {
+ return "", ErrUnavailable
+ }
+ return u.ID, nil
+}
+
+func (l Ledger) RecoverAcquisition(ctx context.Context) error {
+ if l.State == nil {
+ return ErrUnavailable
+ }
+ unlock, err := l.State.Lock(ctx, "transaction.lock")
+ if err != nil {
+ return err
+ }
+ defer unlock()
+ c, err := l.RecoveryCensus()
+ if err != nil {
+ return err
+ }
+ if c.Pending == "" {
+ return nil
+ }
+ if err := l.idle(ctx, c); err != nil {
+ return err
+ }
+ c.Pending = ""
+ return l.writeCensus(c)
+}
diff --git a/internal/rootparticipation/production.go b/internal/rootparticipation/production.go
new file mode 100644
index 000000000..5f4820fe0
--- /dev/null
+++ b/internal/rootparticipation/production.go
@@ -0,0 +1,46 @@
+package rootparticipation
+
+import (
+ "context"
+ "sync"
+
+ "github.com/carlosframework/platform/internal/rootstate"
+)
+
+var launchVerifier struct {
+ sync.RWMutex
+ verify func(context.Context, uint64) error
+}
+
+// RegisterLaunchVerifier binds E2's root reservation and kernel census reader.
+// It runs under participation exclusion and must not call the agent or broker.
+func RegisterLaunchVerifier(verify func(context.Context, uint64) error) error {
+ launchVerifier.Lock()
+ defer launchVerifier.Unlock()
+ if verify == nil || launchVerifier.verify != nil {
+ return ErrUnavailable
+ }
+ launchVerifier.verify = verify
+ return nil
+}
+
+func Open() (Ledger, error) {
+ state, err := rootstate.Open(Namespace, false, false)
+ if err != nil {
+ return Ledger{}, err
+ }
+ launchVerifier.RLock()
+ verify := launchVerifier.verify
+ launchVerifier.RUnlock()
+ return Ledger{State: state, VerifyLaunches: verify}, nil
+}
+
+func VerifyLaunchCensus(ctx context.Context, revision uint64) error {
+ launchVerifier.RLock()
+ verify := launchVerifier.verify
+ launchVerifier.RUnlock()
+ if verify == nil {
+ return ErrUnavailable
+ }
+ return verify(ctx, revision)
+}
diff --git a/internal/rootparticipation/recovery_linux_test.go b/internal/rootparticipation/recovery_linux_test.go
new file mode 100644
index 000000000..f9f98bdd4
--- /dev/null
+++ b/internal/rootparticipation/recovery_linux_test.go
@@ -0,0 +1,123 @@
+//go:build linux
+
+package rootparticipation
+
+import (
+ "context"
+ "errors"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "syscall"
+ "testing"
+ "time"
+)
+
+type recoveryDisk struct{ testDisk }
+
+func (d *recoveryDisk) Write(name string, raw []byte) error {
+ f, err := os.CreateTemp(d.dir, "write-")
+ if err != nil {
+ return err
+ }
+ tmp := f.Name()
+ defer os.Remove(tmp)
+ if _, err = f.Write(raw); err == nil {
+ err = f.Sync()
+ }
+ err = errors.Join(err, f.Close())
+ if err != nil {
+ return err
+ }
+ if err = os.Rename(tmp, filepath.Join(d.dir, name)); err != nil {
+ return err
+ }
+ dir, err := os.Open(d.dir)
+ if err != nil {
+ return err
+ }
+ defer dir.Close()
+ return dir.Sync()
+}
+func (d *recoveryDisk) Lock(ctx context.Context, name string) (func(), error) {
+ f, err := os.OpenFile(filepath.Join(d.dir, name), os.O_CREATE|os.O_RDWR, 0600)
+ if err != nil {
+ return nil, err
+ }
+ for {
+ err = syscall.Flock(int(f.Fd()), syscall.LOCK_EX|syscall.LOCK_NB)
+ if err == nil {
+ return func() { _ = syscall.Flock(int(f.Fd()), syscall.LOCK_UN); _ = f.Close() }, nil
+ }
+ if err != syscall.EWOULDBLOCK {
+ f.Close()
+ return nil, err
+ }
+ select {
+ case <-ctx.Done():
+ f.Close()
+ return nil, ctx.Err()
+ case <-time.After(time.Millisecond):
+ }
+ }
+}
+
+func TestPlan14ExecutionRecoveryAfterProcessCrash(t *testing.T) {
+ if dir := os.Getenv("PLAN14_EXEC_CRASH_DIR"); dir != "" {
+ d := &recoveryDisk{testDisk: testDisk{dir: dir}}
+ l := Ledger{State: d, VerifyLaunches: func(context.Context, uint64) error { return nil }}
+ crash := func() error { os.Exit(31); return nil }
+ var err error
+ if os.Getenv("PLAN14_EXEC_CRASH_AT") == "acquire" {
+ err = l.Acquire(t.Context(), crash)
+ } else {
+ err = l.BeginUpdateWith(t.Context(), "update", crash)
+ }
+ t.Fatal("did not reach crash", err)
+ }
+ for _, at := range []string{"acquire", "update"} {
+ t.Run(at, func(t *testing.T) {
+ l := censusFixture(t)
+ dir := l.State.(*testDisk).dir
+ l.State = &recoveryDisk{testDisk: testDisk{dir: dir}}
+ child := exec.Command(os.Args[0], "-test.run=^TestPlan14ExecutionRecoveryAfterProcessCrash$")
+ child.Env = append(os.Environ(), "PLAN14_EXEC_CRASH_DIR="+dir, "PLAN14_EXEC_CRASH_AT="+at)
+ child.Dir = dir
+ out, err := child.CombinedOutput()
+ var exit *exec.ExitError
+ if !errors.As(err, &exit) || exit.ExitCode() != 31 {
+ t.Fatalf("crash: %v %s", err, out)
+ }
+ if err := l.Acquire(t.Context(), func() error { t.Error("acquired across crash"); return nil }); err == nil {
+ t.Fatal("crash grant")
+ }
+ if at == "acquire" {
+ if _, err := l.Census(); err == nil {
+ t.Fatal("pending acquisition accepted")
+ }
+ l.VerifyLaunches = nil
+ if err := l.RecoverAcquisition(t.Context()); err == nil {
+ t.Fatal("absence replaced kernel completeness")
+ }
+ l.VerifyLaunches = func(context.Context, uint64) error { return nil }
+ if err := l.RecoverAcquisition(t.Context()); err != nil {
+ t.Fatal(err)
+ }
+ } else {
+ failed := errors.New("terminal write failed")
+ if err := l.EndUpdateWith(t.Context(), "update", func() error { return failed }); !errors.Is(err, failed) {
+ t.Fatal(err)
+ }
+ if _, err := l.UpdateID(); err != nil {
+ t.Fatal("terminal failure lost exclusion", err)
+ }
+ if err := l.EndUpdate(t.Context(), "update"); err != nil {
+ t.Fatal(err)
+ }
+ }
+ if err := l.Acquire(t.Context(), func() error { return nil }); err != nil {
+ t.Fatal("positive recovery did not reopen", err)
+ }
+ })
+ }
+}