carlos / platform Public

provision: a failed walk or refresh never leaves a stale snapshot Complete; ListDirs after a write keeps the bucket shape (#336)

A walk that fails at the top republishes the previous snapshot with the
walk's error cached, so List("accounts/") and ListDirs("apps/") over it
fail and the unchanged readers fail as they would on the bucket; a refresh
or walk whose ctx ends mid-read publishes with the dead reads cached as
failures. The snapshot store asks live for ListDirs after a write only when
live is bucket-shaped; otherwise it answers from the snapshot plus the
directories its writes imply, so a fleet-door-shaped live cannot make the
walk see no records.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev 46b920fa226bb5def3b97b3fd738b2e6bcf021aa parent 1b265b1
3 files changed, +155 −26
  • internal/provision/recordview.go +27 −14
  • internal/provision/recordview_store.go +40 −6
  • internal/provision/recordview_test.go +88 −6

CI failed — run details

CI log
=== gate ===
.amadan/test-gate.sh
=== launchctx (0 s)
ok  	amadan.net/carlos/platform.git/launchctx	0.012s
?   	amadan.net/carlos/platform.git/launchctx/controlname	[no test files]
?   	amadan.net/carlos/platform.git/launchctx/wireid	[no test files]
=== vet (17 s)
=== gofmt (0 s)
gofmt -l .: clean
=== rest (149 s)
?   	github.com/carlosframework/platform/cmd/changelog	[no test files]
ok  	github.com/carlosframework/platform/cmd/console	3.771s
ok  	github.com/carlosframework/platform/cmd/moveprobe	12.062s
ok  	github.com/carlosframework/platform/cmd/zddprobe	0.806s
ok  	github.com/carlosframework/platform/internal/activator	64.651s
ok  	github.com/carlosframework/platform/internal/agentsock	0.027s
ok  	github.com/carlosframework/platform/internal/alerting	0.004s
ok  	github.com/carlosframework/platform/internal/analytics	0.038s
ok  	github.com/carlosframework/platform/internal/appconfig	3.060s
ok  	github.com/carlosframework/platform/internal/apperr	0.154s
ok  	github.com/carlosframework/platform/internal/applog	0.245s
ok  	github.com/carlosframework/platform/internal/awsinv	0.007s
ok  	github.com/carlosframework/platform/internal/boxchoice	0.012s
ok  	github.com/carlosframework/platform/internal/boxid	0.583s
?   	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.029s
ok  	github.com/carlosframework/platform/internal/caps	0.018s
ok  	github.com/carlosframework/platform/internal/certwarm	0.003s
ok  	github.com/carlosframework/platform/internal/cgroup	0.860s
ok  	github.com/carlosframework/platform/internal/changelog	0.600s
ok  	github.com/carlosframework/platform/internal/claimactivation	1.281s
ok  	github.com/carlosframework/platform/internal/clamd	0.060s
?   	github.com/carlosframework/platform/internal/cliflag	[no test files]
?   	github.com/carlosframework/platform/internal/controlname	[no test files]
?   	github.com/carlosframework/platform/internal/controlsock	[no test files]
ok  	github.com/carlosframework/platform/internal/dbdoor	5.806s
ok  	github.com/carlosframework/platform/internal/dbdoor/dbdoortest	0.015s
ok  	github.com/carlosframework/platform/internal/dbverify	0.011s
ok  	github.com/carlosframework/platform/internal/dnsrec	0.008s
ok  	github.com/carlosframework/platform/internal/docsite	0.013s
ok  	github.com/carlosframework/platform/internal/domains	3.055s
ok  	github.com/carlosframework/platform/internal/doorkey	0.012s
ok  	github.com/carlosframework/platform/internal/economics	0.013s
ok  	github.com/carlosframework/platform/internal/edge	45.188s
?   	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.135s
ok  	github.com/carlosframework/platform/internal/gate	1.654s
ok  	github.com/carlosframework/platform/internal/genselect	0.015s
ok  	github.com/carlosframework/platform/internal/geo	0.015s
ok  	github.com/carlosframework/platform/internal/geoip	0.029s
ok  	github.com/carlosframework/platform/internal/historyreadback	0.155s
ok  	github.com/carlosframework/platform/internal/host	122.018s
ok  	github.com/carlosframework/platform/internal/hostactors	6.375s
ok  	github.com/carlosframework/platform/internal/hostactors/awsmembership	0.009s
ok  	github.com/carlosframework/platform/internal/hostbox	2.853s
ok  	github.com/carlosframework/platform/internal/hostclaim	0.807s
ok  	github.com/carlosframework/platform/internal/hostenv	0.010s
ok  	github.com/carlosframework/platform/internal/hostevidence	0.007s
ok  	github.com/carlosframework/platform/internal/hostexec	5.199s
ok  	github.com/carlosframework/platform/internal/hostfence	0.037s
ok  	github.com/carlosframework/platform/internal/hostfiles	10.338s
ok  	github.com/carlosframework/platform/internal/hostfloor	0.016s
ok  	github.com/carlosframework/platform/internal/hostguard	1.013s
ok  	github.com/carlosframework/platform/internal/hostops	1.876s
?   	github.com/carlosframework/platform/internal/hostops/fencerelease	[no test files]
ok  	github.com/carlosframework/platform/internal/hostops/internal/fencerelease	0.003s
ok  	github.com/carlosframework/platform/internal/hostquarantine	0.005s
ok  	github.com/carlosframework/platform/internal/hostrelocate	0.633s
ok  	github.com/carlosframework/platform/internal/hostresolve	0.216s
ok  	github.com/carlosframework/platform/internal/hostwrite	0.004s
ok  	github.com/carlosframework/platform/internal/infraview	0.004s
ok  	github.com/carlosframework/platform/internal/instancectl	5.250s
ok  	github.com/carlosframework/platform/internal/instanceexec	2.829s
ok  	github.com/carlosframework/platform/internal/instancefs	0.007s
ok  	github.com/carlosframework/platform/internal/instancekey	0.005s
ok  	github.com/carlosframework/platform/internal/instanceupdates	0.013s
ok  	github.com/carlosframework/platform/internal/layout	1.735s
ok  	github.com/carlosframework/platform/internal/lbhealth	0.007s
ok  	github.com/carlosframework/platform/internal/lease	10.245s
ok  	github.com/carlosframework/platform/internal/lease/leasetest	0.516s
ok  	github.com/carlosframework/platform/internal/ledger	0.017s
ok  	github.com/carlosframework/platform/internal/mail	0.216s
ok  	github.com/carlosframework/platform/internal/maintenance	0.105s
ok  	github.com/carlosframework/platform/internal/maintenanceexec	5.585s
ok  	github.com/carlosframework/platform/internal/maintenanceguard	0.097s
ok  	github.com/carlosframework/platform/internal/metrics	0.007s
ok  	github.com/carlosframework/platform/internal/moves	23.116s
ok  	github.com/carlosframework/platform/internal/moves/archive	1.019s
ok  	github.com/carlosframework/platform/internal/objstore	0.345s
ok  	github.com/carlosframework/platform/internal/ops	0.310s
ok  	github.com/carlosframework/platform/internal/park	0.253s
ok  	github.com/carlosframework/platform/internal/plans	0.005s
ok  	github.com/carlosframework/platform/internal/privatefile	0.004s
2026/10/22 08:29:01 provision: listing apps/bab/blog/instances/: list refused — its records are unseen this pass
2026/10/22 08:29:01 provision: listing apps/bab/: listdirs refused — its records are unseen this pass
2026/10/22 08:29:01 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:01 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:01 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:01 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/22 08:29:01 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/22 08:29:01 provision: skipping record apps/bac/tito/instances/one.example.com.json: unreadable: read refused
2026/10/22 08:29:01 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/22 08:29:01 provision: an app's records could not be listed: they are skipped
2026/10/22 08:29:01 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:01 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/22 08:29:01 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/22 08:29:01 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/22 08:29:01 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/22 08:29:01 provision: claim install acme.go.tito.io: provision: claim admission unavailable
2026/10/22 08:29:01 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:01 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/22 08:29:01 provision: claim install bot.eleven.bac.sidecar.internal: provision: claim admission unavailable
2026/10/22 08:29:01 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/22 08:29:01 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/22 08:29:01 provision: refusing to mint route acme.go.tito.io (app "tito" acct "bac"): this box declares CARLOS_INBOUND=none (no-inbound) and cannot serve routed instance traffic
2026/10/22 08:29:01 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: no sealed config
2026/10/22 08:29:01 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:01 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:01 provision: REFUSING to mint sidecar bot.eleven.bac.sidecar.internal: bot.eleven.bac.sidecar.internal-sidecar.env is staged on this box — the legacy file co-spawn and a native sidecar row are two mechanisms for one host; remove the file to migrate this host onto sidecar records
2026/10/22 08:29:01 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/22 08:29:01 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/22 08:29:01 provision: refusing to mint route acme.go.tito.io (app "tito" acct "bac"): this box declares CARLOS_INBOUND=none (no-inbound) and cannot serve routed instance traffic
2026/10/22 08:29:01 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:01 provision: REFUSING to mint sidecar bot.eleven.bac.sidecar.internal: bot.eleven.bac.sidecar.internal-sidecar.env is staged on this box — the legacy file co-spawn and a native sidecar row are two mechanisms for one host; remove the file to migrate this host onto sidecar records
2026/10/22 08:29:01 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/22 08:29:01 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/22 08:29:01 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:01 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/22 08:29:01 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:01 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/22 08:29:01 provision: bot.eleven.bac.sidecar.internal exists but is not a sidecar row this pass owns (kind "sidecar" provisioned false app "eleven" acct "bac") — leaving it alone
2026/10/22 08:29:01 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/22 08:29:01 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/22 08:29:01 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/22 08:29:02 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/22 08:29:02 provision: bot.eleven.bac.sidecar.internal exists but is not a sidecar row this pass owns (kind "sidecar" provisioned false app "eleven" acct "bac") — leaving it alone
2026/10/22 08:29:02 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:02 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:02 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:02 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/22 08:29:02 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:02 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:02 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route rf.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route rh.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route rk.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route rg.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route ri.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route rj.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route rl.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/22 08:29:02 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/22 08:29:02 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route x.appc.example (app "appc" acct "bac")
2026/10/22 08:29:02 provision: minted instance route x.appd.example (app "appd" acct "bac")
2026/10/22 08:29:02 provision: minted instance route x.appe.example (app "appe" acct "bac")
2026/10/22 08:29:02 provision: minted instance route x.appf.example (app "appf" acct "bac")
2026/10/22 08:29:02 provision: minted instance route x.apph.example (app "apph" acct "bac")
2026/10/22 08:29:02 provision: minted instance route x.appi.example (app "appi" acct "bac")
2026/10/22 08:29:02 provision: minted instance route x.appa.example (app "appa" acct "bac")
2026/10/22 08:29:02 provision: minted instance route x.appb.example (app "appb" acct "bac")
2026/10/22 08:29:02 provision: minted instance route x.appg.example (app "appg" acct "bac")
2026/10/22 08:29:02 provision: minted instance route x.appj.example (app "appj" acct "bac")
2026/10/22 08:29:02 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/22 08:29:02 provision: minted instance route r0024.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0032.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0101.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0014.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0089.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0126.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0061.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0073.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0082.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0098.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0027.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0096.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0008.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0019.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0031.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0081.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0097.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0100.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0116.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0016.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0094.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0000.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0015.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0085.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0129.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0001.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0033.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0063.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0064.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0043.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0056.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0057.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0109.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0115.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0107.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0002.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0029.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0071.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0087.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0092.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0093.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0125.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0042.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0086.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0106.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0003.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0021.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0035.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0054.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0065.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0119.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0123.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0011.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0012.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0034.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0059.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0122.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0052.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0053.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0039.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0044.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0088.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0091.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0127.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0020.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0022.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0045.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0074.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0080.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0037.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0113.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0062.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0070.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0077.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0121.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0083.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0103.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0117.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0120.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0090.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0124.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0006.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0038.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0048.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0055.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0112.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0099.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0105.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0111.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0047.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0051.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0004.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0028.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0046.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0067.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0005.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0018.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0036.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0075.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0095.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0079.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0110.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0023.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0050.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0084.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0026.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0066.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0069.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0072.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0114.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0017.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0041.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0102.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0009.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0068.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0128.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0013.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0030.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0058.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0076.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0104.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0108.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0118.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0007.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0049.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0010.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0025.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0040.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0060.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:02 provision: minted instance route r0078.go.tito.io (app "tito" acct "bac")
--- FAIL: TestPlan9B8RecordWriteCensus (0.70s)
    plan9_b8_census_test.go:372: record-write census rejected 13 site(s); update the explicit inventory only after reviewing the source:
          changed site internal/release/store.go:DirStore.Put: source differs from the reviewed digest
          changed site internal/release/store.go:DirStore.PutFrom: source differs from the reviewed digest
          changed site internal/release/store.go:S3Store.Put: source differs from the reviewed digest
          changed site internal/release/store.go:S3Store.PutFrom: source differs from the reviewed digest
          unlisted site internal/provision/recordview.go:RecordView.readApp [key:SidecarManifestKey]: review it, classify it, and update its explicit inventory entry
          unlisted site internal/provision/recordview.go:RecordView.readScope [lit:instances,lit:sidecars]: review it, classify it, and update its explicit inventory entry
          unlisted site internal/provision/recordview.go:RecordView.walk [lit:instances,lit:sidecars]: review it, classify it, and update its explicit inventory entry
          unlisted site internal/provision/recordview.go:walkComplete [lit:instances,lit:sidecars]: review it, classify it, and update its explicit inventory entry
          unlisted site internal/provision/recordview_store.go:ViewSnapshot.list [lit:instances,lit:sidecars]: review it, classify it, and update its explicit inventory entry
          unlisted site internal/provision/recordview_store.go:ViewSnapshot.lookup [lit:instances,lit:sidecars]: review it, classify it, and update its explicit inventory entry
          unlisted site internal/provision/recordview_store.go:snapStore.Put [def:Put,sel:Put]: review it, classify it, and update its explicit inventory entry
          unlisted site internal/provision/recordview_store.go:snapStore.PutFrom [def:PutFrom,sel:PutObjectFrom]: review it, classify it, and update its explicit inventory entry
          unlisted site internal/provision/recordview_store.go:uncachedStore.Put [def:Put]: review it, classify it, and update its explicit inventory entry
2026/10/22 08:29:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: refusing to mint route acme.go.tito.io (app "tito" acct "bac"): this box declares CARLOS_INBOUND=none (no-inbound) and cannot serve routed instance traffic
2026/10/22 08:29:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: minted instance route console.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: minted service route svc.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: minted instance route whole.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: minted instance route shared.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: converged acme.go.tito.io channel stable -> edge
2026/10/22 08:29:03 provision: converged acme.go.tito.io channel edge -> canary/rehearsal
2026/10/22 08:29:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: empty channel
2026/10/22 08:29:03 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/22 08:29:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: converged acme.go.tito.io environment "" -> "staging"
2026/10/22 08:29:03 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/22 08:29:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:03 provision: converged acme.go.tito.io steering "" -> "latency"
2026/10/22 08:29:03 provision: converged acme.go.tito.io steering "latency" -> ""
2026/10/22 08:29:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: converged acme.go.tito.io hibernate false -> true
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: converged acme.go.tito.io hibernate true -> false (replication "daily" cleared: only a hibernating route's rung is read)
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: converged acme.go.tito.io status-named false -> true
2026/10/22 08:29:04 provision: converged acme.go.tito.io status-named true -> false
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: converged ha.go.tito.io upstreams addr "" -> "", addrs "127.0.0.1:7001,127.0.0.1:7002" -> "127.0.0.1:7001,127.0.0.1:7003" (probe "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}" -> "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}")
2026/10/22 08:29:04 provision: converged ha.go.tito.io upstreams addr "" -> "", addrs "127.0.0.1:7001,127.0.0.1:7003" -> "127.0.0.1:7003,127.0.0.1:7001" (probe "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}" -> "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}")
2026/10/22 08:29:04 provision: converged ha.go.tito.io upstreams addr "" -> "", addrs "127.0.0.1:7003,127.0.0.1:7001" -> "127.0.0.1:7003,127.0.0.1:7001" (probe "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}" -> "{\"path\":\"/healthz\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}")
2026/10/22 08:29:04 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: converged whole.go.tito.io upstreams addr "127.0.0.1:9443" -> "", addrs "" -> "127.0.0.1:9443,127.0.0.1:9444" (probe "" -> "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}")
2026/10/22 08:29:04 provision: converged whole.go.tito.io upstreams addr "" -> "", addrs "127.0.0.1:9443,127.0.0.1:9444" -> "" (probe "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}" -> "")
2026/10/22 08:29:04 provision: whole.go.tito.io: record describes a different route SHAPE than the row (kind "instance"/"service" unit ""/"" socket "/run/carlos/whole.go.tito.io.sock"/"" db "/data/whole.go.tito.io.db"/"") — not converged in place; `carlos remove whole.go.tito.io` purges this route's capability grants (registry.Delete's contract, not a bug) before the next pass re-mints it, so treat that as a last resort, not a routine fix
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: skipping accounts/bac/account.json: malformed account manifest: invalid character 'o' in literal null (expecting 'u')
2026/10/22 08:29:04 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: manifest bac/tito: read failed: provision: manifest bac/tito: invalid character 'o' in literal null (expecting 'u')
2026/10/22 08:29:04 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: disagrees with its own path (host="wrong-host.go.tito.io" account="bac" app="tito")
2026/10/22 08:29:04 provision: skipping record apps/bac/tito/instances/acme$evil.go.tito.io.json: host "acme$evil.go.tito.io" is not a hostname
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: skipping record apps/bac/tito/instances/acme$evil.go.tito.io.json: host "acme$evil.go.tito.io" is not a hostname
2026/10/22 08:29:04 provision: not removing acme$evil.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/22 08:29:04 provision: skipping record apps/bac/tito/instances/bad-service.go.tito.io.json: invalid shape: kind service with no addr: the platform only proxies to a service, so the record must name the upstream it proxies to
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: skipping record apps/bac/tito/instances/bad-service.go.tito.io.json: invalid shape: kind service with no addr: the platform only proxies to a service, so the record must name the upstream it proxies to
2026/10/22 08:29:04 provision: not removing bad-service.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/22 08:29:04 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/22 08:29:04 provision: not removing no-channel.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:04 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/22 08:29:04 provision: removed retired instance route ghost.go.tito.io (record gone)
2026/10/22 08:29:04 provision: duplicate host dup.go.tito.io: keeping apps/bac/tito/instances/dup.go.tito.io.json, skipping apps/bad/tito/instances/dup.go.tito.io.json
2026/10/22 08:29:04 provision: minted instance route dup.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/22 08:29:04 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/22 08:29:04 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/22 08:29:04 provision: removed retired static route site.go.tito.io (app in the trash)
2026/10/22 08:29:04 provision: trash marker for bac/tito unreadable: release: malformed trash marker for bac/tito: invalid character 'n' looking for beginning of object key string — not minting for this app
2026/10/22 08:29:04 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/22 08:29:04 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/22 08:29:04 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/22 08:29:04 provision: trash marker for bac/tito unreadable: release: malformed trash marker for bac/tito: invalid character 'n' looking for beginning of object key string — not minting for this app
2026/10/22 08:29:04 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/22 08:29:04 provision: converged acme.go.tito.io channel stable -> edge
2026/10/22 08:29:04 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/22 08:29:04 provision: converged acme.go.tito.io channel canary/rehearsal -> edge
2026/10/22 08:29:04 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/22 08:29:04 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/22 08:29:04 provision: acme.go.tito.io exists but is not the route this record describes (backing "unit" (box-scoped, not expressible in a record)) — leaving it alone
2026/10/22 08:29:04 provision: acme.go.tito.io exists but is not the route this record describes (tunnel "pi-fleet" (box-scoped, not expressible in a record)) — leaving it alone
2026/10/22 08:29:04 provision: acme.go.tito.io exists but is not the route this record describes (caps "port:25" (box-scoped, not expressible in a record)) — leaving it alone
2026/10/22 08:29:04 provision: acme.go.tito.io exists but is not the route this record describes (platform (owned by the domains reconcile pass)) — leaving it alone
2026/10/22 08:29:04 provision: acme.go.tito.io exists but is not the route this record describes (canary (owned by the domains reconcile pass)) — leaving it alone
2026/10/22 08:29:04 provision: acme.go.tito.io exists but is not the route this record describes (db "/data/other.db"/"/data/acme.go.tito.io.db") — leaving it alone
2026/10/22 08:29:04 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/22 08:29:04 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/22 08:29:04 provision: dry-run: would mint instance route acme.go.tito.io (app "tito" acct "bac" channel "stable")
2026/10/22 08:29:04 provision: dry-run: would adopt existing route adopt.go.tito.io (app "tito" acct "bac") — this record would own its channel and environment
2026/10/22 08:29:04 provision: dry-run: would converge adopt.go.tito.io channel stable -> edge
2026/10/22 08:29:04 provision: dry-run: would converge adopt.go.tito.io environment "" -> "staging"
2026/10/22 08:29:04 provision: dry-run: would converge owned.go.tito.io channel stable -> edge
2026/10/22 08:29:04 provision: dry-run: would converge owned.go.tito.io environment "" -> "staging"
2026/10/22 08:29:04 provision: dry-run: would converge owned.go.tito.io hibernate false -> true
2026/10/22 08:29:04 provision: dry-run: would converge owned.go.tito.io seed
2026/10/22 08:29:04 provision: dry-run: would remove retired instance route gone.go.tito.io (record gone)
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: adopted existing route adopt.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/22 08:29:04 provision: converged adopt.go.tito.io channel stable -> edge
2026/10/22 08:29:04 provision: converged adopt.go.tito.io environment "" -> "staging"
2026/10/22 08:29:04 provision: converged owned.go.tito.io channel stable -> edge
2026/10/22 08:29:04 provision: converged owned.go.tito.io environment "" -> "staging"
2026/10/22 08:29:04 provision: converged owned.go.tito.io hibernate false -> true
2026/10/22 08:29:04 provision: removed retired instance route gone.go.tito.io (record gone)
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: adopted existing route story.carlosframework.com (app "story" acct "bad") — this record now owns its channel and environment
2026/10/22 08:29:04 provision: story.carlosframework.com exists but is not the route this record describes (kind "instance"/"static") — leaving it alone
2026/10/22 08:29:04 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted service route pub.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted service route pubs.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route exec.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted service route loop.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted service route named.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted service route priv.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route unit.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted static route pisite.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: removed retired static route site.go.tito.io (record gone)
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: converged acme.go.tito.io replicas "ie,uk" -> "uk"
2026/10/22 08:29:04 provision: converged acme.go.tito.io replicas "uk" -> ""
2026/10/22 08:29:04 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: converged acme-uk.go.tito.io replica mark true -> false
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: acme.go.tito.io: row is on the nested layout (db "/data/instances/acme.go.tito.io/acme.go.tito.io.db" socket "/run/carlos/instances/acme.go.tito.io/app.sock"); the record's shared paths are not drift
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:04 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/22 08:29:04 provision: router.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/22 08:29:04 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/22 08:29:04 provision: converged acme.go.tito.io channel stable -> edge
2026/10/22 08:29:05 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/22 08:29:05 provision: not removing acme.go.tito.io (record gone): participant of a running operation
2026/10/22 08:29:05 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/22 08:29:05 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/22 08:29:05 provision: refusing to mint held route acme.go.tito.io (app "tito" acct "bac"): this box declares CARLOS_INBOUND=none (no-inbound) and cannot serve routed instance traffic
2026/10/22 08:29:05 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/22 08:29:05 provision: acme.go.tito.io: held restoring by rb_other, not by mv_acme; leaving it
2026/10/22 08:29:05 provision: acme.go.tito.io: the row is not this pass's (app "other" acct ""); not holding it for mv_acme
2026/10/22 08:29:05 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/22 08:29:05 provision: dry-run: would mint instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac" channel "stable")
2026/10/22 08:29:05 provision: acme.go.tito.io: not held landing by mv_acme: the row's hold changed under this pass; the next pass judges it afresh
2026/10/22 08:29:05 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/22 08:29:05 provision: minted instance route plain.example.com (app "shop" acct "bac")
2026/10/22 08:29:05 provision: minted instance route acme.example.com (app "shop" acct "bac")
2026/10/22 08:29:05 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:05 provision: skipping record apps/bac/shop/instances/liar.shop.example.com.json: disagrees with its own path (host="other.shop.example.com" account="bac" app="shop")
2026/10/22 08:29:05 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:05 provision: skipping record apps/bac/shop/instances/liar.shop.example.com.json: disagrees with its own path (host="other.shop.example.com" account="bac" app="shop")
2026/10/22 08:29:05 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:05 provision: skipping record apps/bac/shop/instances/liar.shop.example.com.json: disagrees with its own path (host="other.shop.example.com" account="bac" app="shop")
2026/10/22 08:29:05 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:05 provision: listing apps/bac/shop/instances/: list refused — its records are unseen this pass
2026/10/22 08:29:05 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:05 provision: a.shop.example.com: swapped for import sd_yyxtqtjg25qlzyg5a2eppfrr3m (the original route is journaled)
2026/10/22 08:29:05 provision: a.shop.example.com: import sd_yyxtqtjg25qlzyg5a2eppfrr3m committed: its gate is cleared and its journal row dropped
2026/10/22 08:29:05 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_2y3qsyp3egh6mcim7hbrte5tji rolled back to its original route
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_2y3qsyp3egh6mcim7hbrte5tji: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_2y3qsyp3egh6mcim7hbrte5tji is cleaned up and its journal row retired
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_3agi2frpieefuy3nq64qtgf2ja rolled back to its original route
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_3agi2frpieefuy3nq64qtgf2ja: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_3agi2frpieefuy3nq64qtgf2ja is cleaned up and its journal row retired
2026/10/22 08:29:06 provision: dry-run: would redo a.shop.example.com's swap record CAS for import sd_zu4aqoqh6q6slii3clyh6mlvbm
2026/10/22 08:29:06 provision: dry-run: would clear a.shop.example.com's import gate
2026/10/22 08:29:06 provision: dry-run: would converge a.shop.example.com seed source
2026/10/22 08:29:06 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/22 08:29:06 provision: a.shop.example.com: the import's record apps/bac/shop/instances/a.shop.example.com.json is not one this pass can use (connection reset)
2026/10/22 08:29:06 provision: a.shop.example.com: the import's record apps/bac/shop/instances/a.shop.example.com.json is not one this pass can use (provision: invalid maintenance projection or protected fields)
2026/10/22 08:29:06 provision: a.shop.example.com: the import's record apps/bac/shop/instances/a.shop.example.com.json is not one this pass can use (the record under apps/bac/shop/instances/a.shop.example.com.json is apps/bac/shop/instances/b.shop.example.com.json's)
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_awphl36v5ommwuliqddlszktqi cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_n2czjjete5uht5sc6xiiqmpgum cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_mhpznkwk73wy7rq3hpdf6podha is journaled, but this box cannot act on imports; its row is left alone
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_342a4inxhjr4nuaq65bjoqrl5m is journaled, but this box cannot act on imports; its row is left alone
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_kkpxyiveedec2qw3co6ani3cqm is journaled, but this box cannot act on imports; its row is left alone
2026/10/22 08:29:06 provision: the import journal could not be read: registry: import journal a.shop.example.com: original row: unexpected end of JSON input (no import is acted on and no route is removed this pass)
2026/10/22 08:29:06 provision: b.shop.example.com: import sd_meqbtuqcgkhmurwzczp3326exi left alone this pass: the import journal could not be read
2026/10/22 08:29:06 provision: c.shop.example.com: import sd_huqfffxd3m2tc23jrfdloxunbm left alone this pass: the import journal could not be read
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_qqhchuzabupres3gs2oqcqyzki committed: its gate is cleared and its journal row dropped
2026/10/22 08:29:06 provision: a.shop.example.com: not converging import sd_fudazjy4m2h7s4fbvybdv5vltu: it is swapped but not committed, and the row on this box has no import gate
2026/10/22 08:29:06 provision: a.shop.example.com: not converging import sd_fsiaa4xgig6wshipwg22e244jq: it is swapped but not committed, and the row on this box has no import gate
2026/10/22 08:29:06 provision: a.shop.example.com: not converging import sd_eixxyromvguwbv2kqkj6dkigjm: it is placed but not committed, and the row on this box has no import gate
2026/10/22 08:29:06 provision: a.shop.example.com: not converging import sd_lkmbg5vbpzyt4qja2j5o4h3hbm: it is placed but not committed, and the row on this box has no import gate
2026/10/22 08:29:06 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/22 08:29:06 provision: converge seed source on a.shop.example.com: constraint failed: seed_source is read-only here (1811)
2026/10/22 08:29:06 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_kwdseqftzenkici7bckerjftb4 committed: its gate is cleared and its journal row dropped
2026/10/22 08:29:06 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/22 08:29:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:06 provision: acme.go.tito.io: row is on the nested layout (db "/data/instances/acme.go.tito.io/acme.go.tito.io.db" socket "/run/carlos/instances/acme.go.tito.io/app.sock"); the record's shared paths are not drift
2026/10/22 08:29:06 provision: acme.go.tito.io: not minting a seeded instance: this box does not mint nested (<nil>)
2026/10/22 08:29:06 provision: acme.go.tito.io: not minting a seeded instance: claim control is on for this box
2026/10/22 08:29:06 provision: acme.go.tito.io: aborted seed sd_gylrb6pqaworaucmqx6ev7bqie: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/22 08:29:06 provision: acme.go.tito.io: aborted seed sd_gylrb6pqaworaucmqx6ev7bqie rolled back (no box had swapped it)
2026/10/22 08:29:06 provision: acme.go.tito.io: not minting a seeded instance: its record does not describe a hibernating instance
2026/10/22 08:29:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:06 provision: removed instance route acme.go.tito.io (its seed sd_v73loqpi2pm2erz35r7hwdb4ga was aborted); the next pass rolls it back
2026/10/22 08:29:06 provision: acme.go.tito.io: aborted seed sd_v73loqpi2pm2erz35r7hwdb4ga: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/22 08:29:06 provision: acme.go.tito.io: aborted seed sd_v73loqpi2pm2erz35r7hwdb4ga rolled back (no box had swapped it)
2026/10/22 08:29:06 provision: acme.go.tito.io: aborted seed sd_6yeas4a7wdz77tppgo2khmarhi has a row this pass may not remove; leaving the seed aborted
2026/10/22 08:29:06 provision: acme.go.tito.io: aborted seed sd_yvctoxg5efhukjod77yxpcx7ze rolled back (no box had swapped it)
2026/10/22 08:29:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:06 provision: removed instance route acme.go.tito.io (its seed sd_lyf5itiedxv2urgul7pgrjyh3e was aborted); the next pass rolls it back
2026/10/22 08:29:06 provision: acme.go.tito.io: aborted seed sd_lyf5itiedxv2urgul7pgrjyh3e has no route on this box: its local data is removed
2026/10/22 08:29:06 provision: acme.go.tito.io: aborted seed sd_lyf5itiedxv2urgul7pgrjyh3e rolled back (no box had swapped it)
2026/10/22 08:29:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:06 provision: a.shop.example.com: swapped for import sd_gs7cj5azs5lc55sxyjixex3cf4 (the original route is journaled)
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_gs7cj5azs5lc55sxyjixex3cf4 rolled back to its original route
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_gs7cj5azs5lc55sxyjixex3cf4 is cleaned up and its journal row retired
2026/10/22 08:29:06 provision: a.shop.example.com: swapped for import sd_mlrjnnx5qnz5waa6ybiam6rdrq (the original route is journaled)
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_mlrjnnx5qnz5waa6ybiam6rdrq rolled back to its original route
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_mlrjnnx5qnz5waa6ybiam6rdrq is cleaned up and its journal row retired
2026/10/22 08:29:06 provision: a.shop.example.com: swapped for import sd_ih2gsmyucfrsrjbxm7mjwocw2i (the original route is journaled)
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_ih2gsmyucfrsrjbxm7mjwocw2i rolled back to its original route
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_ih2gsmyucfrsrjbxm7mjwocw2i: the host's replica is left alone: its record no longer names this seed
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_ih2gsmyucfrsrjbxm7mjwocw2i is cleaned up and its journal row retired
2026/10/22 08:29:06 provision: a.shop.example.com: swapped for import sd_jhmqeh6ievbozo426kx6etny74 (the original route is journaled)
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_jhmqeh6ievbozo426kx6etny74 rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_jhmqeh6ievbozo426kx6etny74 rolled back to its original route
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_jhmqeh6ievbozo426kx6etny74 is cleaned up and its journal row retired
2026/10/22 08:29:06 provision: a.shop.example.com: swapped for import sd_b4cutjqgsdz4coopspdqwkuwme (the original route is journaled)
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_b4cutjqgsdz4coopspdqwkuwme rollback deferred: the host is not fenced and stopped yet (stop unproven)
2026/10/22 08:29:06 provision: a.shop.example.com: swapped for import sd_kwizyicvw3a3ix73ndlvuw6rzi (the original route is journaled)
2026/10/22 08:29:06 provision: a.shop.example.com: import sd_kwizyicvw3a3ix73ndlvuw6rzi is cleaned up and its journal row retired
2026/10/22 08:29:06 provision: a.shop.example.com: swapped for import sd_73j2lmynglopscx3hi3ratk7aq (the original route is journaled)
2026/10/22 08:29:06 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_73j2lmynglopscx3hi3ratk7aq left alone this pass: its record could not be read
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_a4fuf4lcetk4pitkzkcgnric4q (the original route is journaled)
2026/10/22 08:29:07 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: read failed: connection reset
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_a4fuf4lcetk4pitkzkcgnric4q left alone this pass: its record could not be read
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_djjbiiuzkkuyo26onc5ocpedx4 (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_djjbiiuzkkuyo26onc5ocpedx4: close the import gate: constraint failed: injected (1811)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_djjbiiuzkkuyo26onc5ocpedx4 rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_djjbiiuzkkuyo26onc5ocpedx4 is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_pjt3lbslwagmtlswgnt34ddkwe (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_pjt3lbslwagmtlswgnt34ddkwe: close the import gate: constraint failed: injected (1811)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_pjt3lbslwagmtlswgnt34ddkwe rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_pjt3lbslwagmtlswgnt34ddkwe is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_474xcbz7qugo7xpigju5rxsifm (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_474xcbz7qugo7xpigju5rxsifm rollback deferred: the host is not fenced and stopped yet (injected failure at fence)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_474xcbz7qugo7xpigju5rxsifm rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_474xcbz7qugo7xpigju5rxsifm is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_2gzvrh7eoavcnjdrqf5oe7tf6a (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_2gzvrh7eoavcnjdrqf5oe7tf6a rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_2gzvrh7eoavcnjdrqf5oe7tf6a is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_f7g432url4bcafu632dgdec4rq (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_f7g432url4bcafu632dgdec4rq: retire its instance key: injected failure at retire-key
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_f7g432url4bcafu632dgdec4rq rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_f7g432url4bcafu632dgdec4rq is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_zzsay7qugjh3hw6pf6okgn7cay (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_zzsay7qugjh3hw6pf6okgn7cay rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_zzsay7qugjh3hw6pf6okgn7cay is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_6dwbbwyunfbq353mmzlfwwcfkq (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_6dwbbwyunfbq353mmzlfwwcfkq: remove its local data: injected failure at remove-local
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_6dwbbwyunfbq353mmzlfwwcfkq rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_6dwbbwyunfbq353mmzlfwwcfkq is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_62vndnf54dodhxykw36rbnv4ty (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_62vndnf54dodhxykw36rbnv4ty rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_62vndnf54dodhxykw36rbnv4ty is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_3wilcxc7p4vo4k4je3df7xp444 (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_3wilcxc7p4vo4k4je3df7xp444: remove its local data: injected failure at remove-local-done
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_3wilcxc7p4vo4k4je3df7xp444 rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_3wilcxc7p4vo4k4je3df7xp444 is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_rj75l2ufshs2v4ylqjphartwde (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_rj75l2ufshs2v4ylqjphartwde rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_rj75l2ufshs2v4ylqjphartwde is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_x7etzcpksvbpqrywcqmecr6cci (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_x7etzcpksvbpqrywcqmecr6cci: restore the original route: constraint failed: injected (1811)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_x7etzcpksvbpqrywcqmecr6cci rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_x7etzcpksvbpqrywcqmecr6cci is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_zsw3e3avbdi7boy4cypfpkxxpm (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_zsw3e3avbdi7boy4cypfpkxxpm: restore the original route: constraint failed: injected (1811)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_zsw3e3avbdi7boy4cypfpkxxpm rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_zsw3e3avbdi7boy4cypfpkxxpm is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_tb3ozklzrhdnk573zecqbn6s44 (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_tb3ozklzrhdnk573zecqbn6s44 is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_ijezkby77sylacz5kg2tg3l76a (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_ijezkby77sylacz5kg2tg3l76a rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_ijezkby77sylacz5kg2tg3l76a: delete its snapshot: injected failure at delete-snapshot
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_ijezkby77sylacz5kg2tg3l76a is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_5bg44li2nuefbrgvnlu4lojjc4 (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_5bg44li2nuefbrgvnlu4lojjc4 rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_5bg44li2nuefbrgvnlu4lojjc4 is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_bssgiljykjttjf6ci6gnckn5rq (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_bssgiljykjttjf6ci6gnckn5rq rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_bssgiljykjttjf6ci6gnckn5rq: delete the host's replica: injected failure at delete-replica
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_bssgiljykjttjf6ci6gnckn5rq is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_gshnccoknbwxh7pt3k3ctioeym (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_gshnccoknbwxh7pt3k3ctioeym rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_gshnccoknbwxh7pt3k3ctioeym is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_gar32jkol3zldgd3hyx74dp2i4 (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_gar32jkol3zldgd3hyx74dp2i4 rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_gar32jkol3zldgd3hyx74dp2i4: retire its journal row: constraint failed: injected (1811)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_gar32jkol3zldgd3hyx74dp2i4 is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_lik5vculab4ulo6gmtcfmxtw5i (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_lik5vculab4ulo6gmtcfmxtw5i rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_lik5vculab4ulo6gmtcfmxtw5i: retire its journal row: constraint failed: injected (1811)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_lik5vculab4ulo6gmtcfmxtw5i is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_njcx6shainxs4eyc7d4igmxar4 (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_njcx6shainxs4eyc7d4igmxar4 rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_njcx6shainxs4eyc7d4igmxar4 is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: mark import sd_njcx6shainxs4eyc7d4igmxar4 rolled back: injected failure at cas
2026/10/22 08:29:07 provision: a.shop.example.com: aborted seed sd_njcx6shainxs4eyc7d4igmxar4 rolled back (no box had swapped it)
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_c4zsxmgvm3ssoom6dlbwud3b3q (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_c4zsxmgvm3ssoom6dlbwud3b3q rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_c4zsxmgvm3ssoom6dlbwud3b3q is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: aborted seed sd_c4zsxmgvm3ssoom6dlbwud3b3q rolled back (no box had swapped it)
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_cqfegmorbjep6lj4deo5dmwjxu (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_cqfegmorbjep6lj4deo5dmwjxu rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_cqfegmorbjep6lj4deo5dmwjxu rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_cqfegmorbjep6lj4deo5dmwjxu rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_cqfegmorbjep6lj4deo5dmwjxu is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_7qzizaryefld57rn3madkp7hqu (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_7qzizaryefld57rn3madkp7hqu rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_7qzizaryefld57rn3madkp7hqu is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_yqlwun2exkhhyam5tmjlfbipsm (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_yqlwun2exkhhyam5tmjlfbipsm rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_yqlwun2exkhhyam5tmjlfbipsm is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_ooo4tfqoyhpwy2rp2tqzxybezi (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_ooo4tfqoyhpwy2rp2tqzxybezi rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_ooo4tfqoyhpwy2rp2tqzxybezi is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_xh6qkjfluqaxh3fstecax443di (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_xh6qkjfluqaxh3fstecax443di rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_xh6qkjfluqaxh3fstecax443di is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_nfbwqudxmtkwmj43fsb7shkmue (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_nfbwqudxmtkwmj43fsb7shkmue rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_nfbwqudxmtkwmj43fsb7shkmue is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_el4a5rix2pgqsbqqxr3iznkkoe (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_el4a5rix2pgqsbqqxr3iznkkoe rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_el4a5rix2pgqsbqqxr3iznkkoe is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_su7n2ko5fjqtpa75xful2rxuky (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_su7n2ko5fjqtpa75xful2rxuky rolled back to its original route
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_su7n2ko5fjqtpa75xful2rxuky is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_b3fsq3gg3ofhdqgmshpus4ggfe (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_b3fsq3gg3ofhdqgmshpus4ggfe has no route on this box: its local data is removed and no route is put back
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_b3fsq3gg3ofhdqgmshpus4ggfe is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_q6avxt3k2g5vxh52erdn722ag4 (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_6yzkga2xs3lfypmkhan4qn226e (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_gkquvtyz7dqfbze6sgowa254qu (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_gkquvtyz7dqfbze6sgowa254qu cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_ryrr32i25sv5q6dibiplj2pwdq (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_ryrr32i25sv5q6dibiplj2pwdq is not rolled back: the route changed under the fence, so nothing there is touched
2026/10/22 08:29:07 provision: a.shop.example.com: import "../not-a-seed" names no snapshot and no replica; only its journal row is cleaned up
2026/10/22 08:29:07 provision: a.shop.example.com: import ../not-a-seed is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_bultx6ozp3whkh3u5bp7xfqdhm (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_kblmfvebvneqssgfdwq4x2myva (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_ydin7vtr44ffcz6jbaqgutm5xy (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_d7sryr5tp4a5ez2dwunkdrxe3a (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_724ympoj3i565axr3znfwjrfia (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_724ympoj3i565axr3znfwjrfia rollback deferred: the host is not fenced and stopped yet (stop evidence unreadable)
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_vx7i4ralkat55wkugkhauvcfku (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_vx7i4ralkat55wkugkhauvcfku has no route on this box: its local data is removed and no route is put back
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_vx7i4ralkat55wkugkhauvcfku is cleaned up and its journal row retired
2026/10/22 08:29:07 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_gxxwi6jms7eubyh3np7fgg2tpy (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_gxxwi6jms7eubyh3np7fgg2tpy: remove its local data: injected failure at remove-local
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_gxxwi6jms7eubyh3np7fgg2tpy is not rolled back: the route at the host is not the import's, so nothing there is touched
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_7ei5hp7kezj4i6b54asyexqt6m (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_7ei5hp7kezj4i6b54asyexqt6m: a route appeared at the host, so its local database is left and the rollback waits
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_clet63o546vwhivv7fa4y5mnfi (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_clet63o546vwhivv7fa4y5mnfi rollback deferred: no fence generation: registry busy
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_jofacxwwazojkyad6stsx6xt3m (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import sd_jofacxwwazojkyad6stsx6xt3m rollback deferred: no fence generation: the generation source answered 0
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_cdzfe7ltrvzzcjbyuwjjuli2d4 (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_rhar6emsylaplonfssdnb3jwza (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: swapped for import sd_ulsjtaeenbxm4kfppc5slb7nee (the original route is journaled)
2026/10/22 08:29:07 provision: a.shop.example.com: import deferred: this box cannot read the instance's env file
2026/10/22 08:29:08 provision: a.shop.example.com: import deferred: the instance's env file could not be read: a symlink
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_mpabrlgqznixd2aogybwyx6xfq (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_mpabrlgqznixd2aogybwyx6xfq rolled back to its original route
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_mpabrlgqznixd2aogybwyx6xfq is cleaned up and its journal row retired
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_27eimn62vz3tbfrz2tgjg47dry (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_27eimn62vz3tbfrz2tgjg47dry rolled back to its original route
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_27eimn62vz3tbfrz2tgjg47dry is cleaned up and its journal row retired
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_db3q5l6d4ouydztnfwzt7g2vwe (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_db3q5l6d4ouydztnfwzt7g2vwe rolled back to its original route
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_db3q5l6d4ouydztnfwzt7g2vwe is cleaned up and its journal row retired
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_3hmklgqck3aoswufsjvywayxyu (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_3hmklgqck3aoswufsjvywayxyu: retire its instance key: the env file is a symlink
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_3hmklgqck3aoswufsjvywayxyu rolled back to its original route
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_3hmklgqck3aoswufsjvywayxyu is cleaned up and its journal row retired
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_oufvxg7rrkx4hq2tccob2laeyu (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_5rriuojxmofnzczhkw6odv2y2i (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_j6pd7abiae3lk5vrvvselpcizm refused: there is no route at a.shop.example.com to replace
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_va3jysem4cin6aa5pylk27sukq refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_pganvtr6kh3ztphbvsokjuoela refused: the route's address is 127.0.0.1:8401,127.0.0.1:8402, not 127.0.0.1:8401
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_rm4onpqqc5rizjy4cz5ev2bnly refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_dxz2zpqk7r3wxp2jxfhownuzvi refused: the route belongs to app other
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_ejdhj6jv5yo7tlileohriidgvq refused: the route is filed under another account
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_ffyrxtfam2iorplhs5fw5wz2ge refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_7o7gck7zcibobkrm6jfoigrblm refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_i6atpyzz2fnmedotmhk2m5cqni refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_cqhd7ookoo75l7ojwomeba5nwq refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_iueqjp4rnzj6htmgrv4s3w3m5a refused: the route is not an address route this import can take over (socket)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_4r4raqx7qdax5ft66slzghtusy refused: the route is not an address route this import can take over (no address)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_3v32vjfqhcmp7mmxlxhe7spqky refused: the route is not an address route this import can take over (provisioned)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_urdzsms4kwh3oe7qxybadaiafi refused: the route is not an address route this import can take over (kind static)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_htnbllcl53qiryl3m7r7iibfm4 refused: the route is not an address route this import can take over (backing)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_g5kvej5n6o7uwhyizpsonq5zh4 refused: the route is not an address route this import can take over (tunnel)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_sr5a42wlr4recggfzbyyx2r4ca refused: the route is not an address route this import can take over (caps)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_krsn5m6llxoekmdbmg4fnerf2y refused: the route is not an address route this import can take over (platform)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_zol5tgqij5enp6slbrn3rgchna refused: the route is not an address route this import can take over (canary)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_lbxewlyaggc2sl6t563k3wnca4 refused: the route is not an address route this import can take over (kind sidecar)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_g5vqltboj7vkworawuhaxihmnu refused: the route is not an address route this import can take over (region)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_w76icxqvbealf2fv3caw5ma6qe refused: the route is not an address route this import can take over (fleet_box)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_2whwoekqsgrid3z6mr5hm5mymm refused: the route is not an address route this import can take over (hibernate)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_nthzkexvhzpresszqcx2snoeuq refused: the route is not an address route this import can take over (claim_owner)
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_rgp3cqucobd5z6dvbg3k7calvm refused: this box does not run instances nested
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_3f7fduxedrys7zfmt657x2hcji refused: this box does not run instances nested
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_hjkovzp6srkeib36upcw5xtzda refused: claim control is on for this box
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_2iy5edztbauwpzafxj6exe6u4m (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_qdcw6xwcjjdob7sr3hmatz45fu (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: import deferred: this box cannot read the legacy route assignments
2026/10/22 08:29:08 provision: a.shop.example.com: import deferred: the legacy route assignments could not be read: store down
2026/10/22 08:29:08 provision: a.shop.example.com: not swapping for import sd_amr5m2hpxsp7ev2f7lqu3g4qki: its verify hash is not a sha256
2026/10/22 08:29:08 provision: a.shop.example.com: not swapping for import sd_t637hd4azvhbjlcb2tywkgk2oe: its verify hash is not a sha256
2026/10/22 08:29:08 provision: a.shop.example.com: not swapping for import sd_7trw6f5hgsjcytymmgrwjxe2eq: its verify hash is not a sha256
2026/10/22 08:29:08 provision: a.shop.example.com: not swapping for import sd_../../x: its host or seed id is malformed (seeds: not a seed id)
2026/10/22 08:29:08 provision: A.shop.example.com/..: not swapping for import sd_clxlefc4bepfkk6ace26747ig4: its host or seed id is malformed (seeds: not a host)
2026/10/22 08:29:08 provision: a.shop.example.com: not swapping for import sd_ek6cyflev5xy3rugzmuwqcxhd4: its record does not describe a nested, hibernating instance
2026/10/22 08:29:08 provision: a.shop.example.com: not swapping for import sd_5ita3um7gwc5onqsnl3f4yvs5u: its record does not describe a nested, hibernating instance
2026/10/22 08:29:08 provision: a.shop.example.com: not swapping for import sd_7oa5fh2hsiscfy7efz64tm2ou4: its record does not describe a nested, hibernating instance
2026/10/22 08:29:08 provision: a.shop.example.com: not swapping for import sd_d3pb47xnrotqur3fzxdwtmssty: its record does not describe a nested, hibernating instance
2026/10/22 08:29:08 provision: a.shop.example.com: import deferred: the box's layout intent could not be read: store down
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_c3m26bhy7z7scfj2ee4mg67ike (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: import deferred: the box's nested probe did not answer: ready probe timed out
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_cxjfqbhi5hr4pvh2q54rklzhoq (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_upnjt44c2e3blhwvwoey5fzqfa (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: import deferred: the route is held by operation op_1
2026/10/22 08:29:08 provision: dry-run: would consider swapping a.shop.example.com for import sd_nfo2po6eqwa5e6gboxk77cvcia
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_j6rrleorev5byqwqhayol4qz5q rolled back to its original route
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_j6rrleorev5byqwqhayol4qz5q: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_j6rrleorev5byqwqhayol4qz5q is cleaned up and its journal row retired
2026/10/22 08:29:08 provision: a.shop.example.com: import sd_byuh6hrk5zwlrpfq5dymbcwctm left alone: the import journal holds seed sd_4i4xlbrxdt6cktop2s4xwsxh4u at swapped
2026/10/22 08:29:08 provision: a.shop.example.com: not minting import sd_yk2wvspddgozzy6czymic575xe: it is swapped but not committed, and only its swap makes its row
2026/10/22 08:29:08 provision: a.shop.example.com: not minting import sd_ud32exwh4ff4qcpem6ausg3e7a: it is placed but not committed, and only its swap makes its row
2026/10/22 08:29:08 provision: a.shop.example.com: swapped for import sd_kaw65w747hygf4vyzagx4kkyby (the original route is journaled)
2026/10/22 08:29:08 provision: a.shop.example.com: not minting import sd_kaw65w747hygf4vyzagx4kkyby: it is swapped but not committed, and only its swap makes its row
2026/10/22 08:29:08 provision: a.shop.example.com: not minting import sd_kaw65w747hygf4vyzagx4kkyby: it is placed but not committed, and only its swap makes its row
2026/10/22 08:29:08 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/22 08:29:08 provision: removed retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/22 08:29:08 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:08 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:08 provision: converged sidecar bot.eleven.bac.sidecar.internal args ["sidecar","run"] -> ["worker","run"]
2026/10/22 08:29:08 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:08 provision: converged sidecar bot.eleven.bac.sidecar.internal ceilings 300/3600 -> 60/120
2026/10/22 08:29:09 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:09 provision: converged sidecar bot.eleven.bac.sidecar.internal channel stable -> canary/eleven
2026/10/22 08:29:09 provision: converged sidecar bot.eleven.bac.sidecar.internal environment "other" -> "relay"
2026/10/22 08:29:09 provision: converged sidecar bot.eleven.bac.sidecar.internal hibernate true -> false
2026/10/22 08:29:09 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: read failed: failStore: reads disabled under apps/bac/eleven/sidecars/
2026/10/22 08:29:09 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: malformed: invalid character 'n' looking for beginning of object key string
2026/10/22 08:29:09 provision: not removing sidecar bot.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/22 08:29:09 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: empty channel
2026/10/22 08:29:09 provision: skipping sidecar record apps/bac/eleven/sidecars/held.json: empty channel
2026/10/22 08:29:09 provision: not removing sidecar held.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/22 08:29:09 provision: removed retired sidecar route old.eleven.bac.sidecar.internal (record gone)
2026/10/22 08:29:09 provision: bac/eleven has sidecar records but no sidecars manifest — not minting
2026/10/22 08:29:09 provision: bac/eleven is in the trash — not minting sidecar routes for it
2026/10/22 08:29:09 provision: sidecar bot.eleven.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/22 08:29:09 provision: sidecar hub.relay.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/22 08:29:09 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:09 provision: minted sidecar route hub.relay.bac.sidecar.internal (app "relay" acct "bac" args ["relay"])
2026/10/22 08:29:09 provision: sidecar bot.eleven.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/22 08:29:09 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:09 provision: sidecar bot.eleven.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/22 08:29:09 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:09 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:09 provision: sidecar bot.eleven.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/22 08:29:09 provision: removed retired sidecar route bot.eleven.bac.sidecar.internal (record gone)
2026/10/22 08:29:09 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:09 provision: sidecar bot.eleven.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/22 08:29:09 provision: skipping sidecar record apps/bac/relay/sidecars/hub.json: read failed: failStore: reads disabled under apps/bac/relay/sidecars/
2026/10/22 08:29:09 provision: REFUSING to mint sidecar bot.eleven.bac.sidecar.internal: bot.eleven.bac.sidecar.internal-sidecar.env is staged on this box — the legacy file co-spawn and a native sidecar row are two mechanisms for one host; remove the file to migrate this host onto sidecar records
2026/10/22 08:29:09 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/22 08:29:09 provision: dry-run: would mint sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" channel "stable" args ["sidecar","run"])
2026/10/22 08:29:09 provision: dry-run: would remove retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/22 08:29:09 provision: bot.eleven.bac.sidecar.internal exists but is not a sidecar row this pass owns (kind "sidecar" provisioned false app "eleven" acct "bac") — leaving it alone
2026/10/22 08:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:09 provision: converged acme.go.tito.io update settings "{\"updates\":\"manual\",\"channel\":\"stable\"}" -> ""
2026/10/22 08:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:09 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/22 08:29:09 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/22 08:29:09 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/22 08:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/22 08:29:09 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/22 08:29:09 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/22 08:29:09 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/22 08:29:09 provision: record view: change index unusable (release: change index unreadable: store has no conditional read: unsupported operation): the walk records no generations
2026/10/22 08:29:09 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/22 08:29:09 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/22 08:29:09 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: record view: re-reading apps/bqc/shop failed: retrying on the next refresh
2026/10/22 08:29:09 provision: listing apps/bqc/shop/instances/: list refused — its records are unseen this pass
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: listing apps/bqc/shop/instances/: list refused — its records are unseen this pass
2026/10/22 08:29:09 provision: an app's records could not be listed: they are skipped
2026/10/22 08:29:09 provision: record view: change index unusable (release: change index malformed: invalid character 'n' looking for beginning of object key string): walking
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: record view: change index unusable (release: change index malformed: invalid character 'n' looking for beginning of object key string): the walk records no generations
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: record view: change index unusable (get refused): walking
2026/10/22 08:29:09 provision: record view: change index unusable (get refused): the walk records no generations
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: record view: re-reading apps/bqc/shop failed: retrying on the next refresh
2026/10/22 08:29:09 provision: listing apps/bqc/shop/instances/: context canceled — its records are unseen this pass
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/22 08:29:09 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/22 08:29:09 provision: record view: re-reading accounts/bqd failed: retrying on the next refresh
2026/10/22 08:29:09 provision: skipping accounts/bqd/account.json: read failed: list refused
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/22 08:29:09 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
--- FAIL: TestPlan14RootReadCensus (15.22s)
    plan14_root_reads_test.go:1124: root read census: 22 discrepancies
        changed root read internal/host/activation_command_linux.go:runSystemClaims; review class, task, sites and digest
        changed root source envelope .
        changed root source envelope cmd/console
        changed root source envelope internal/edge
        changed root source envelope internal/host
        changed root source envelope internal/hostops
        changed root source envelope internal/ops
        changed root source envelope internal/provision
        changed root source envelope internal/release
        changed root source envelope internal/vet
        stale root read internal/release/conditional_delete.go:DirStore.DeleteIfMatch
        stale root read internal/release/store.go:DirStore.Put
        stale root read internal/release/store.go:DirStore.PutFrom
        unclassified root read internal/provision/recordview_store.go:snapStore.Open file:Open@20
        unclassified root read internal/release/conditional_delete.go:DirStore.deleteIfMatchRaw file:ReadFile@244
        unclassified root read internal/release/store.go:DirStore.ListETags file:WalkDir@145
        unclassified root read internal/release/store.go:DirStore.putFromRaw file:Stat@462
        unclassified root read internal/release/store.go:DirStore.putRaw file:Stat@443
        unclassified root read internal/release/store.go:S3Store.GetIfChanged file:ReadAll@511
        changed legacy declaration internal/release/conditional_delete.go:DirStore.DeleteIfMatch
        changed legacy declaration internal/release/store.go:DirStore.Put
        changed legacy declaration internal/release/store.go:DirStore.PutFrom
FAIL
FAIL	github.com/carlosframework/platform/internal/provision	23.077s
ok  	github.com/carlosframework/platform/internal/publicrelease	0.009s
?   	github.com/carlosframework/platform/internal/regionname	[no test files]
ok  	github.com/carlosframework/platform/internal/registry	5.526s
ok  	github.com/carlosframework/platform/internal/relay	7.238s
ok  	github.com/carlosframework/platform/internal/release	26.797s
ok  	github.com/carlosframework/platform/internal/rollout	3.765s
ok  	github.com/carlosframework/platform/internal/rolloutwords	0.010s
ok  	github.com/carlosframework/platform/internal/rootaws	0.007s
ok  	github.com/carlosframework/platform/internal/rootparticipation	0.059s
ok  	github.com/carlosframework/platform/internal/rootstate	0.029s
ok  	github.com/carlosframework/platform/internal/runs	0.583s
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.681s
ok  	github.com/carlosframework/platform/internal/seeds	0.015s
ok  	github.com/carlosframework/platform/internal/sim/hostlife	11.665s
ok  	github.com/carlosframework/platform/internal/sim/litestreamfacts	3.743s
ok  	github.com/carlosframework/platform/internal/status	0.076s
ok  	github.com/carlosframework/platform/internal/steering	0.006s
ok  	github.com/carlosframework/platform/internal/stopevidence	0.275s
ok  	github.com/carlosframework/platform/internal/svcrole	0.003s
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.005s
ok  	github.com/carlosframework/platform/internal/unixdial	0.006s
ok  	github.com/carlosframework/platform/internal/updatewords	0.007s
ok  	github.com/carlosframework/platform/internal/usage	0.005s
ok  	github.com/carlosframework/platform/internal/version	0.002s
ok  	github.com/carlosframework/platform/internal/vet	1.662s
FAIL
=== internal_console@0 (82 s)
2026/10/22 08:28:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:53 console: backfilled account manifest for bab (ops)
2026/10/22 08:28:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:53 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/22 08:28:53 console: could not notify paul@keymail.dev of a CLI token issue: Post "http://127.0.0.1:42003/api/app/send": dial tcp 127.0.0.1:42003: connect: connection refused
2026/10/22 08:28:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:53 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: api instance move bab/titogo/acme.go.tito.io: storage binding: read timeout
2026/10/22 08:28:54 console: api instance move bab/titogo/acme.go.tito.io: manifest: read timeout
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:54 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: api system status: canary pointer: system pointer does not verify: system pointer router/canary: signature does not verify
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: app region bab/tmp-docs:  (default)
2026/10/22 08:28:55 console: backfilled account manifest for bab (ops)
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/22 08:28:55 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/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/22 08:28:55 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/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: backfilled account manifest for bab (ops)
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: backfilled account manifest for bab (ops)
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: store destroy bab/kass: objstore: empty bucket carlos-bab-kass: backend unreachable
2026/10/22 08:28:55 console: backfilled account manifest for bab (ops)
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 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/22 08:28:55 console: materialized account bac (Typo) from the bucket
2026/10/22 08:28:55 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/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:55 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:56 console: refused: no eligible box in uk
2026/10/22 08:28:56 console: claim request refused: no eligible box in uk: hostops: region has no box that can take this
2026/10/22 08:28:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:56 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:28:56 console: backfilled account manifest for bab (ops)
2026/10/22 08:28:57 console: api relay enable: hostops: pending
2026/10/22 08:28:57 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation b54d5c62e72df399, op 1)
2026/10/22 08:28:58 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation 3312a5a6f5840c2f, op 1)
2026/10/22 08:28:58 console: api relay adopted: hostops: pending
2026/10/22 08:28:59 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation bf90934bf5e30afc, op 1)
2026/10/22 08:28:59 console: api relay disable: hostops: pending
2026/10/22 08:28:59 console: relay disabled bab/titogo by paul@keymail.dev (op 2)
2026/10/22 08:28:59 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation 2939a55ea01d8a38, op 1)
2026/10/22 08:29:00 console: relay rotate eu-west-1: bab/titogo: hostops: pending
2026/10/22 08:29:00 console: relay rotated eu-west-1 to kid k2, re-issued 0 app(s)
2026/10/22 08:29:00 console: audit relay-rotate platform: sql: no rows in result set
2026/10/22 08:29:00 console: relay rotated eu-west-1 to kid k3, re-issued 1 app(s)
2026/10/22 08:29:00 console: audit relay-rotate platform: sql: no rows in result set
2026/10/22 08:29:01 console: mail push: bab/titogo: hostops: pending
2026/10/22 08:29:07 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation 3fb822443bea376f, op 1)
2026/10/22 08:29:07 console: relay writer lease acquired (holder 4e1cefa8b1af1cf3)
2026/10/22 08:29:07 console: relay reconcile bab/titogo: hostops: pending
2026/10/22 08:29:11 console: relay writer lease acquired (holder 4e1cefa8b1af1cf3)
2026/10/22 08:29:14 console: app region bab/tmp-claim-expiry:  (default)
2026/10/22 08:29:14 console: backfilled account manifest for bab (ops)
2026/10/22 08:29:15 console: api version-target set bab/titogo: hostops: pending
2026/10/22 08:29:15 console: door keys re-sign bab/titogo: hostops: pending
2026/10/22 08:29:15 console: expiry pass: trash bab/tmp-claim-expiry: hostops: pending
2026/10/22 08:29:15 console: scan pass: bab/titogo: hostops: pending
2026/10/22 08:29:15 console: scan drain: bab/titogo: hostops: pending
2026/10/22 08:29:15 console: api updates policy bab/titogo: hostops: pending
2026/10/22 08:29:16 console: api telemetry bab/titogo: hostops: pending
2026/10/22 08:29:16 console: api swap bab/titogo: hostops: pending
2026/10/22 08:29:16 console: api sidecars enable bab/titogo: hostops: pending
2026/10/22 08:29:16 console: api pipeline put bab/titogo: set: hostops: pending
2026/10/22 08:29:17 console: api updates bab/titogo/acme.go.tito.io: hostops: pending
2026/10/22 08:29:17 console: api instances enable bab/titogo: hostops: pending
2026/10/22 08:29:18 console: api email push key bab/titogo: hostops: pending
2026/10/22 08:29:18 console: claim restore bab/titogo: recovered (restored)
2026/10/22 08:29:18 console: api domains paths bab/titogo ti.to: hostops: pending
2026/10/22 08:29:18 console: api config apply bab/titogo (default): hostops: pending
2026/10/22 08:29:18 console: cli token revoke paul@keymail.dev: hostops: pending
2026/10/22 08:29:19 console: ses events: logging Delivery for bab/titogo: hostops: pending
2026/10/22 08:29:19 console: ses events: recording Delivery for bab/titogo: hostops: pending
2026/10/22 08:29:20 console: service rotate bab/svc-a: hostops: pending
2026/10/22 08:29:20 console: service revoke bab: hostops: pending
2026/10/22 08:29:20 console: service create bab/svc-cli: hostops: pending
2026/10/22 08:29:21 console: app region bab/tmp-claim-ttl:  (default)
2026/10/22 08:29:21 console: backfilled account manifest for bab (ops)
2026/10/22 08:29:21 console: lifecycle tmp-claim-ttl: hostops: pending
2026/10/22 08:29:21 console: api scan sweep bab/titogo: hostops: pending
2026/10/22 08:29:22 console: api scan revoke bab/titogo: hostops: pending
2026/10/22 08:29:22 console: api scan grant bab/titogo: enable: hostops: pending
2026/10/22 08:29:22 console: api scan enqueue bab/titogo "claim-fixture.txt": hostops: pending
2026/10/22 08:29:22 console: api scan callback rotate bab/titogo: deliver: hostops: pending
2026/10/22 08:29:22 console: api scan enforce bab/titogo: hostops: pending
2026/10/22 08:29:22 console: api scan request bab/titogo: hostops: pending
2026/10/22 08:29:22 console: api store rotate finish bab/titogo: hostops: pending
2026/10/22 08:29:22 console: api store rotate bab/titogo: hostops: pending
2026/10/22 08:29:22 console: api store provision bab/titogo: hostops: pending
2026/10/22 08:29:23 console: api store grant bab/titogo (bucket ""): hostops: pending
2026/10/22 08:29:23 console: api store create bab/titogo: hostops: pending
2026/10/22 08:29:23 console: claim request refused: hostops: pending
2026/10/22 08:29:23 console: api sidecars wake bab/titogo/bot: hostops: pending
2026/10/22 08:29:23 console: api schedule run bab/titogo sync: hostops: pending
2026/10/22 08:29:23 console: api schedule rm bab/titogo sync: hostops: pending
2026/10/22 08:29:23 console: api schedule set bab/titogo sync: hostops: pending
2026/10/22 08:29:23 console: api rollback kass canary/x: hostops: pending
2026/10/22 08:29:24 console: api retention set bab/titogo: hostops: pending
2026/10/22 08:29:24 console: api restore bab/titogo: hostops: pending
2026/10/22 08:29:24 console: api restart scope bab/kass (host kass.carlosapp.dev): hostops: pending
2026/10/22 08:29:24 console: api restart bab/titogo: hostops: pending
2026/10/22 08:29:24 console: api authorize bab/kass v1: hostops: pending
2026/10/22 08:29:24 console: api ship titogo abc1234: hostops: pending
2026/10/22 08:29:24 console: api promote kass v1 -> canary/claim: hostops: pending
2026/10/22 08:29:24 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:29:24 console: app region bab/tmp-claim-keep:  (default)
2026/10/22 08:29:24 console: backfilled account manifest for bab (ops)
2026/10/22 08:29:24 console: ledger blob bab/titogo/prompts: hostops: pending
2026/10/22 08:29:24 console: ledger append bab/titogo/carbon: hostops: pending
2026/10/22 08:29:25 console: ledger publish bab/titogo: hostops: pending
2026/10/22 08:29:25 console: lifecycle tmp-claim-keep: hostops: pending
2026/10/22 08:29:25 console: api updates install bab/titogo/acme.go.tito.io: hostops: pending
2026/10/22 08:29:25 console: api instance retry bab/titogo/web.go.tito.io: hostops: pending
2026/10/22 08:29:26 console: browser restart bab/kass/: hostops: pending
2026/10/22 08:29:27 console: api instance channel bab/titogo/web.go.tito.io: hostops: pending
2026/10/22 08:29:27 console: claim request refused: hostops: pending
2026/10/22 08:29:27 console: api instance token bab/titogo: hostops: pending
2026/10/22 08:29:27 console: api features set bab/titogo: hostops: pending
2026/10/22 08:29:27 console: api email rotate bab/titogo: mail: lifecycle resource operation pending
hostops: pending
2026/10/22 08:29:27 console: api email pause bab/titogo: mail: lifecycle resource operation pending
hostops: pending
2026/10/22 08:29:28 console: api email domain verify bab/titogo.bab.oncarlos.com: mail: lifecycle resource operation pending
hostops: pending
2026/10/22 08:29:28 console: api email enable bab/titogo: apply grant: mail: lifecycle resource operation pending
hostops: pending
2026/10/22 08:29:28 console: api email domain ensure bab/titogo (titogo.bab.oncarlos.com): mail: lifecycle resource operation pending
hostops: pending
2026/10/22 08:29:28 console: api email credentials create bab/titogo: mail: lifecycle resource operation pending
hostops: pending
2026/10/22 08:29:28 console: api email declare bab/titogo: mail: lifecycle resource operation pending
hostops: pending
2026/10/22 08:29:28 console: door key revoke bab/titogo 4a28639c09c4e02b: hostops: pending
2026/10/22 08:29:28 console: door key mint bab/titogo: hostops: pending
2026/10/22 08:29:28 console: api trash bab/titogo: hostops: pending
2026/10/22 08:29:28 console: api config sync bab/titogo: hostops: pending
2026/10/22 08:29:29 console: api resign bab/kass canary/x: hostops: pending
2026/10/22 08:29:29 console: app region bab/tmp-claim-cli:  (default)
2026/10/22 08:29:29 console: backfilled account manifest for bab (ops)
2026/10/22 08:29:29 console: restore bab/titogo: hostops: pending
2026/10/22 08:29:29 console: app region bab/claim-cli-new:  (default)
2026/10/22 08:29:29 console: backfilled account manifest for bab (ops)
2026/10/22 08:29:29 console: claim request refused: hostops: pending
2026/10/22 08:29:29 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:29:29 console: service rotate bab/svc-a: hostops: pending
2026/10/22 08:29:29 console: service revoke bab: hostops: pending
2026/10/22 08:29:29 console: service create bab/svc-web: hostops: pending
2026/10/22 08:29:30 console: swap policy bab/kass: hostops: pending
2026/10/22 08:29:30 console: store destroy bab/titogo: hostops: pending
2026/10/22 08:29:30 console: rollback kass canary/x: hostops: pending
2026/10/22 08:29:30 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:29:30 console: promote kass v1 -> canary/x: hostops: pending
2026/10/22 08:29:30 console: production kass -> true: hostops: pending
2026/10/22 08:29:31 console: backfilled account manifest for bab (ops)
2026/10/22 08:29:31 console: pipeline settings save bab/titogo: set: hostops: pending
2026/10/22 08:29:31 console: reject pending change 1cae0e718be2abeabcb42b9a947025d4: hostops: pending
2026/10/22 08:29:31 console: confirm pending change: hostops: pending
2026/10/22 08:29:31 console: app region bab/tmp-claim-keep:  (default)
2026/10/22 08:29:31 console: backfilled account manifest for bab (ops)
2026/10/22 08:29:31 console: keep bab/tmp-claim-keep: hostops: pending
2026/10/22 08:29:31 console: api updates install bab/titogo/acme.go.tito.io: hostops: pending
2026/10/22 08:29:31 console: api updates bab/titogo/acme.go.tito.io: hostops: pending
2026/10/22 08:29:31 console: browser retry bab/titogo/web.go.tito.io: hostops: pending
2026/10/22 08:29:31 console: browser restart bab/kass/kass.carlosapp.dev: hostops: pending
2026/10/22 08:29:32 console: gate write bab/titogo/acme.go.tito.io: hostops: pending
2026/10/22 08:29:32 console: fast-track kass stable: hostops: pending
2026/10/22 08:29:32 console: errors level bab/kass: hostops: pending
2026/10/22 08:29:32 console: control-plane clear bab/titogo: hostops: pending
2026/10/22 08:29:32 console: trash bab/titogo: hostops: pending
2026/10/22 08:29:32 console: control-plane set bab/titogo: hostops: pending
2026/10/22 08:29:32 console: control-plane clear bab/titogo: hostops: pending
2026/10/22 08:29:33 console: canary kass v1 -> canary/rc: hostops: pending
2026/10/22 08:29:33 console: retire kass canary/rc: hostops: pending
2026/10/22 08:29:33 console: analytics setting bab/kass: hostops: pending
2026/10/22 08:29:33 console: api instances update bab/titogo/ha.go.tito.io: hostops: pending
2026/10/22 08:29:33 console: app region bab/claim-web-new:  (default)
2026/10/22 08:29:33 console: backfilled account manifest for bab (ops)
2026/10/22 08:29:34 console: audit db-read titogo: hostops: pending
2026/10/22 08:29:34 console: audit sidecar-delete titogo: hostops: pending
2026/10/22 08:29:34 console: api email push off bab/titogo: hostops: pending
2026/10/22 08:29:34 console: api email domain remove bab/titogo (titogo.bab.oncarlos.com): mail: lifecycle resource operation pending
hostops: pending
2026/10/22 08:29:34 console: api email credentials revoke bab/titogo (laptop): mail: lifecycle resource operation pending
hostops: pending
2026/10/22 08:29:34 console: audit instance-delete titogo: hostops: pending
2026/10/22 08:29:45 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/22 08:29:45 console: audit geoip off platform: sql: no rows in result set
2026/10/22 08:29:45 console: relay enabled bab/titogo in eu-west-1 by paul@keymail.dev (incarnation 51e340634ebb5497, op 1)
2026/10/22 08:29:46 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/22 08:29:47 console: geoip published ed972738 (GeoIP2-City, manual)
2026/10/22 08:29:47 console: audit geoip publish platform: sql: no rows in result set
2026/10/22 08:29:54 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:29:54 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/22 08:29:54 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/22 08:29:54 console: audit fleet-detach-box pi: sql: no rows in result set
2026/10/22 08:29:54 console: audit seeds-floor-publish platform: sql: no rows in result set
2026/10/22 08:29:55 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/22 08:29:55 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:29:55 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/22 08:29:55 console: audit store-approve : constraint failed: claim: app write not permitted (1811)
2026/10/22 08:29:55 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/22 08:29:55 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:29:55 console: audit store-decline : constraint failed: claim: app write not permitted (1811)
2026/10/22 08:29:55 console: audit analytics-setting account: sql: no rows in result set
2026/10/22 08:29:56 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/22 08:29:56 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/22 08:29:56 console: object scanning enabled deployment-wide by paul@keymail.dev
2026/10/22 08:29:56 console: audit store-decline : constraint failed: claim: app write not permitted (1811)
2026/10/22 08:29:56 console: audit pointer-digests-on platform: sql: no rows in result set
2026/10/22 08:29:57 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:29:57 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/22 08:29:57 console: audit system-update platform: sql: no rows in result set
2026/10/22 08:29:57 console: audit system-update platform: sql: no rows in result set
2026/10/22 08:29:57 console: audit system-layout platform: sql: no rows in result set
2026/10/22 08:29:57 console: audit fleet-tag-box pi: sql: no rows in result set
2026/10/22 08:29:57 console: audit system-rollback platform: sql: no rows in result set
2026/10/22 08:29:58 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
2026/10/22 08:29:59 console: backfilled account manifest for bab (ops)
2026/10/22 08:29:59 console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
2026/10/22 08:30:00 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:30:02 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:30:03 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:03 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:30:03 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:30:03 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/22 08:30:03 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:03 console: audit fleet-rotate-box pi: sql: no rows in result set
2026/10/22 08:30:04 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:30:04 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/22 08:30:04 console: audit fleet-detach-box pi: sql: no rows in result set
2026/10/22 08:30:04 console: audit errors-level account: sql: no rows in result set
2026/10/22 08:30:05 console: audit system-update platform: sql: no rows in result set
2026/10/22 08:30:05 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:06 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:06 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:06 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:06 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:07 console: audit system-update platform: sql: no rows in result set
2026/10/22 08:30:07 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:07 console: audit system-update platform: sql: no rows in result set
2026/10/22 08:30:07 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:07 console: audit system-activation-cancel platform: sql: no rows in result set
2026/10/22 08:30:07 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:30:07 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/22 08:30:08 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:08 console: audit fleet-tag-box pi: sql: no rows in result set
2026/10/22 08:30:08 console: audit system-update platform: sql: no rows in result set
2026/10/22 08:30:08 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:08 console: audit fleet-create pi: sql: no rows in result set
2026/10/22 08:30:08 console: audit fleet-add-box pi: sql: no rows in result set
2026/10/22 08:30:08 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:08 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:08 console: audit fleet-rotate-box pi: sql: no rows in result set
2026/10/22 08:30:08 console: audit store-apply : constraint failed: claim: app write not permitted (1811)
--- FAIL: TestClaimConsoleMutationInvariant (73.17s)
    claim_invariant_test.go:360: app-scoped writer bucket/GetIfChanged is reached by no door's open run and has no reason in claimWriterReasons
    claim_invariant_test.go:360: app-scoped writer bucket/ListETags is reached by no door's open run and has no reason in claimWriterReasons
2026/10/22 08:30:09 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:09 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:10 console: could not notify alice@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/22 08:30:10 console: could not notify paul@keymail.dev of a CLI token issue: keymail: grant revoked or invalid
2026/10/22 08:30:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:10 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:10 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:11 console: materialized account bbw (Blog) from the bucket
2026/10/22 08:30:11 console: materialized account mdbbndjqx (Kass) from the bucket
2026/10/22 08:30:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:11 console: moves: acme.go.tito.io: move mv_kkaqpimf77jq62gyiflixkjlea is still preparing after 6h0m0s; aborted
2026/10/22 08:30:11 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:12 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:12 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:12 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:12 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:12 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:12 console: app region bab/solo:  (default)
2026/10/22 08:30:12 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:12 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:12 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:12 console: ALERT [carlos] SQL effect old on bab/demo needs the restore break-glass path
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 provision: skipping record apps/bab/shop/instances/other.example.com.json: unreadable: slow down
2026/10/22 08:30:13 console: run sweep: some records could not be read; their runs wait for a later pass, and no orphan run is deleted on this one
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: scan queue rebuild: acct-bad: transient listing failure
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: scan queue rebuild: acct-bad/shop: transient listing failure
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000000 txid.db=0000000000000001
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000001 maxTXID=0000000000000001 size=720
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000001
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000001 txid.db=0000000000000002
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000002 maxTXID=0000000000000002 size=370
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000002
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000002 txid.db=0000000000000003
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000003 maxTXID=0000000000000003 size=454
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000003 txid.db=0000000000000003
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000003 txid.db=0000000000000004
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000004 maxTXID=0000000000000004 size=537
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000004 txid.db=0000000000000004
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000004 txid.db=0000000000000005
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000005 maxTXID=0000000000000005 size=621
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000005 txid.db=0000000000000005
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000005 txid.db=0000000000000006
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000006 maxTXID=0000000000000006 size=704
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000006 txid.db=0000000000000006
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000006 txid.db=0000000000000007
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000007 maxTXID=0000000000000007 size=788
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000007 txid.db=0000000000000007
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000007 txid.db=0000000000000008
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000008 maxTXID=0000000000000008 size=871
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000008 txid.db=0000000000000008
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000008 txid.db=0000000000000009
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000009 maxTXID=0000000000000009 size=955
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000009 txid.db=0000000000000009
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000009 txid.db=000000000000000a
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=000000000000000a maxTXID=000000000000000a size=1038
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000a txid.db=000000000000000a
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000a txid.db=000000000000000b
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=000000000000000b maxTXID=000000000000000b size=1124
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000b txid.db=000000000000000b
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000b txid.db=000000000000000c
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=000000000000000c maxTXID=000000000000000c size=1208
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000c txid.db=000000000000000c
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000c txid.db=000000000000000d
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=000000000000000d maxTXID=000000000000000d size=1294
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000d txid.db=000000000000000d
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000d txid.db=000000000000000e
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=000000000000000e maxTXID=000000000000000e size=1387
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000e txid.db=000000000000000e
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000e txid.db=000000000000000f
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=000000000000000f maxTXID=000000000000000f size=1481
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000f txid.db=000000000000000f
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=000000000000000f txid.db=0000000000000010
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000010 maxTXID=0000000000000010 size=1569
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000010 txid.db=0000000000000010
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000010 txid.db=0000000000000011
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000011 maxTXID=0000000000000011 size=1661
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000011 txid.db=0000000000000011
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000011 txid.db=0000000000000012
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000012 maxTXID=0000000000000012 size=1755
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000012 txid.db=0000000000000012
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000012 txid.db=0000000000000013
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000013 maxTXID=0000000000000013 size=1843
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000013 txid.db=0000000000000013
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000013 txid.db=0000000000000014
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000014 maxTXID=0000000000000014 size=1935
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000014 txid.db=0000000000000014
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000014 txid.db=0000000000000015
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000015 maxTXID=0000000000000015 size=2031
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000015 txid.db=0000000000000015
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000015 txid.db=0000000000000016
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000016 maxTXID=0000000000000016 size=2119
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000016 txid.db=0000000000000016
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000016 txid.db=0000000000000017
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000017 maxTXID=0000000000000017 size=2216
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000017 txid.db=0000000000000017
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000017 txid.db=0000000000000018
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000018 maxTXID=0000000000000018 size=2309
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000018 txid.db=0000000000000018
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000018 txid.db=0000000000000019
2026/10/22 08:30:13 INFO ltx file uploaded system=store db=source.db replica=file level=0 minTXID=0000000000000019 maxTXID=0000000000000019 size=2403
2026/10/22 08:30:13 INFO replica sync system=store db=source.db replica=file txid.replica=0000000000000019 txid.db=0000000000000019
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 edges: box "kass-2" 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/22 08:30:13 console: seeds readiness: box "kass-2" in region "the home region" is unconfirmed: stale heartbeat, generated 2026-10-22T07:30:13Z
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: place bab/shop: read instances: records that do not read: [broken.example.com]
2026/10/22 08:30:13 console: place bab/shop: read instances: provision: read record apps/bab/shop/instances/plain.example.com.json: injected read failure
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:13 console: seeds pass: abandoned seed sd_6b2jxixycb2pgubog3uoqph6zm of bab/shop/canary.shop.example.com (reserving since 2026-10-22T08:20:13Z)
2026/10/22 08:30:13 console: seeds pass: deleted seeds/canary.shop.example.com/sd_6b2jxixycb2pgubog3uoqph6zm/snapshot.db
2026/10/22 08:30:13 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 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"
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: materialized account bac (Testco) from the bucket
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: store decision bab: no keymail grant for paul@keymail.dev — not notified (they must sign in to the console once)
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: account telemetry bab: dirstore: invalid key "apps/bab//telemetry.json"
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 console: app region bab/tmp-plain: ie (default)
2026/10/22 08:30:14 console: backfilled account manifest for bab (ops)
2026/10/22 08:30:14 console: CARLOS_SECRETS_PUBKEY is unset, so no region outside the home can be chosen automatically
2026/10/22 08:30:14 status: fleet: skipping status/boxes/zz-1.json: corrupt snapshot: invalid character 'n' looking for beginning of object key string
FAIL
FAIL	github.com/carlosframework/platform/internal/console	81.369s
FAIL
=== internal_console@1 (36 s)
ok  	github.com/carlosframework/platform/internal/console	35.004s
=== internal_console@2 (43 s)
ok  	github.com/carlosframework/platform/internal/console	41.648s
=== internal_console@3 (38 s)
ok  	github.com/carlosframework/platform/internal/console	36.659s
=== internal_console@4 (37 s)
ok  	github.com/carlosframework/platform/internal/console	35.671s
=== internal_console@5 (35 s)
ok  	github.com/carlosframework/platform/internal/console	33.413s
=== internal_console@6 (37 s)
ok  	github.com/carlosframework/platform/internal/console	36.021s
=== internal_console@7 (42 s)
ok  	github.com/carlosframework/platform/internal/console	41.033s
=== root@0 (30 s)
ok  	github.com/carlosframework/platform	29.182s
=== root@1 (42 s)
ok  	github.com/carlosframework/platform	41.358s
=== root@2 (45 s)
ok  	github.com/carlosframework/platform	43.458s

FAILED: rest internal_console@0
make: *** [Makefile:19: 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/provision/recordview.go b/internal/provision/recordview.go
index 65b0c403c..52e5c6f0e 100644
--- a/internal/provision/recordview.go
+++ b/internal/provision/recordview.go
@@ -104,8 +104,12 @@ func viewScope(scope string) bool {
// A scope that fails to re-read keeps its applied generation, is retried on
// the next Refresh even when the index answers 304, and is published with the
// failure cached, so the snapshot is not Complete and a strict reader over it
-// fails as it would on the bucket. The error is only for a refresh that could
-// publish nothing (a failed walk, or ctx ending mid-read).
+// fails as it would on the bucket. A refresh whose ctx ends mid-read still
+// publishes, with the reads that died cached as failures, and returns the
+// ctx error. A refresh that walks and fails publishes the walk's failure
+// (see Rebuild). Either way, no snapshot stays published as Complete once the
+// view knows it is behind: consumers decide on Complete, and a strict reader
+// over the snapshot fails where it would fail on the bucket.
func (v *RecordView) Refresh(ctx context.Context) error {
v.mu.Lock()
defer v.mu.Unlock()
@@ -145,9 +149,6 @@ func (v *RecordView) Refresh(ctx context.Context) error {
results[scope] = r
mu.Unlock()
})
- if err := ctx.Err(); err != nil {
- return err // reads that died with the caller are not the bucket's answer
- }
next := prev.clone()
for _, scope := range due {
r := results[scope]
@@ -164,8 +165,10 @@ func (v *RecordView) Refresh(ctx context.Context) error {
v.pending[scope] = true
}
}
+ // Reads that died with the caller are cached as failures and the scopes
+ // stay pending: the published snapshot is incomplete, never stale-complete.
v.publish(next)
- return nil
+ return ctx.Err()
}
// Rebuild is the backstop (§4.4): under mu it polls the index, takes the
@@ -174,8 +177,12 @@ func (v *RecordView) Refresh(ctx context.Context) error {
// during the walk is re-read by the next Refresh, never skipped. Unchanged
// bodies already in the view are kept by ETag rather than read again.
//
-// A walk whose top-level listing fails publishes nothing and returns the
-// error; the previous snapshot stands and the next Refresh walks again.
+// A walk whose top-level listing fails (accounts/, or apps/ on a bucket-shaped
+// store) returns the error and publishes the previous snapshot again with that
+// error cached: List("accounts/") and ListDirs("apps/") over it answer the
+// walk's failure, so knownAccounts, Reconcile and the strict readers fail over
+// it exactly as they fail on the bucket, and it is not Complete. The next
+// Refresh walks again. A view that never published stays unpublished.
func (v *RecordView) Rebuild(ctx context.Context) error {
v.mu.Lock()
defer v.mu.Unlock()
@@ -187,13 +194,17 @@ func (v *RecordView) rebuildLocked(ctx context.Context) error {
log.Printf("provision: record view: change index unusable (%v): the walk records no generations", err)
}
obs, usable := v.watch.Observed()
- sn, failed, err := v.walk(ctx, v.snap.Load())
- if err == nil {
- err = ctx.Err()
- }
+ prev := v.snap.Load()
+ sn, failed, err := v.walk(ctx, prev)
if err != nil {
v.rebuildDue = true
- return fmt.Errorf("provision: record view: walk: %w", err)
+ err = fmt.Errorf("provision: record view: walk: %w", err)
+ if prev != nil {
+ failedSn := prev.clone()
+ failedSn.walkErr = err
+ v.publish(failedSn)
+ }
+ return err
}
if hook := recordViewRebuildHook; hook != nil {
hook()
@@ -212,8 +223,10 @@ func (v *RecordView) rebuildLocked(ctx context.Context) error {
}
v.pending = failed
v.rebuildDue = len(sn.dirErrs) > 0
+ // A walk whose ctx ended mid-way has its dead reads cached as failures:
+ // published incomplete, retried by the next Refresh.
v.publish(sn)
- return nil
+ return ctx.Err()
}
// publish stamps sn with the next epoch and its completeness and swaps it in.
diff --git a/internal/provision/recordview_store.go b/internal/provision/recordview_store.go
index 939d87ad8..26c59d710 100644
--- a/internal/provision/recordview_store.go
+++ b/internal/provision/recordview_store.go
@@ -29,6 +29,7 @@ type ViewSnapshot struct {
strays []string // keys under accounts/ outside every account scope, from the last walk
apps map[string]map[string]*appEntry // acct -> app -> apps/<acct>/<app>/
dirErrs map[string]error // acct -> why the last walk could not list apps/<acct>/
+ walkErr error // the last walk failed at the top: accounts/ and apps/ answer it
}
// acctEntry is one account scope: its complete key listing and account.json,
@@ -122,6 +123,7 @@ func (sn *ViewSnapshot) clone() *ViewSnapshot {
strays: sn.strays,
apps: make(map[string]map[string]*appEntry, len(sn.apps)),
dirErrs: sn.dirErrs,
+ walkErr: sn.walkErr,
}
for a, inner := range sn.apps {
out.apps[a] = maps.Clone(inner)
@@ -210,6 +212,9 @@ func (e *appEntry) listErr(inst bool) error {
// list answers List of a cached family, sorted as the stores list.
func (sn *ViewSnapshot) list(prefix string) (keys []string, handled bool, err error) {
if prefix == "accounts/" {
+ if sn.walkErr != nil {
+ return nil, true, sn.walkErr
+ }
out := slices.Clone(sn.strays)
for a, e := range sn.accounts {
if e.listErr != nil {
@@ -253,6 +258,9 @@ func (sn *ViewSnapshot) list(prefix string) (keys []string, handled bool, err er
// apps the last walk could not list is listed, and listing it fails, as it did.
func (sn *ViewSnapshot) listDirs(prefix string) (dirs []string, handled bool, err error) {
if prefix == "apps/" {
+ if sn.walkErr != nil {
+ return nil, true, sn.walkErr
+ }
var out []string
for a := range sn.apps {
out = append(out, "apps/"+a+"/")
@@ -335,8 +343,10 @@ func (s *snapStore) wroteUnder(prefix string, exact bool) bool {
return false
}
-// BucketShapedListDirs: the snapshot answers ListDirs in the bucket's shape,
-// so the record walk lists per app instead of the whole of apps/.
+// BucketShapedListDirs: the snapshot answers ListDirs("apps/") and
+// ListDirs("apps/<a>/") in the bucket's shape whatever live's shape is (after
+// a write it asks live only when live is bucket-shaped too), so the record
+// walk lists per app instead of the whole of apps/.
func (s *snapStore) BucketShapedListDirs() bool { return true }
func (s *snapStore) Get(ctx context.Context, key string) ([]byte, string, error) {
@@ -362,12 +372,36 @@ func (s *snapStore) ListDirs(ctx context.Context, prefix string) ([]string, erro
if norm != "" && !strings.HasSuffix(norm, "/") {
norm += "/"
}
- if !s.wroteUnder(norm, false) {
- if dirs, ok, err := s.sn.listDirs(norm); ok {
- return dirs, err
+ dirs, ok, err := s.sn.listDirs(norm)
+ if !ok {
+ return s.live.ListDirs(ctx, prefix)
+ }
+ if err != nil || !s.wroteUnder(norm, false) {
+ return dirs, err
+ }
+ // A write under prefix: live knows the directories it made, but only a
+ // bucket-shaped live answers in the shape this store promises. The fleet
+ // door's ListDirs("apps/") is its account's apps, and walking that as
+ // accounts found no records at all (listAppSubtree). Otherwise the
+ // snapshot's directories plus those the writes imply.
+ if release.HasBucketListDirs(s.live) {
+ return s.live.ListDirs(ctx, prefix)
+ }
+ s.mu.Lock()
+ for _, k := range s.wrote {
+ rest, ok := strings.CutPrefix(k, norm)
+ if !ok {
+ continue
+ }
+ if child, _, ok := strings.Cut(rest, "/"); ok && child != "" {
+ if d := norm + child + "/"; !slices.Contains(dirs, d) {
+ dirs = append(dirs, d)
+ }
}
}
- return s.live.ListDirs(ctx, prefix)
+ s.mu.Unlock()
+ slices.Sort(dirs)
+ return dirs, nil
}
func (s *snapStore) Put(ctx context.Context, key string, body []byte, ifMatch string) (string, error) {
diff --git a/internal/provision/recordview_test.go b/internal/provision/recordview_test.go
index adf6dc2be..110a33e6b 100644
--- a/internal/provision/recordview_test.go
+++ b/internal/provision/recordview_test.go
@@ -90,6 +90,9 @@ func (s *viewCountingStore) GetIfChanged(ctx context.Context, key, etag string)
func (s *viewCountingStore) List(ctx context.Context, prefix string) ([]string, error) {
s.note("List", prefix)
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
if s.listFails(prefix) {
return nil, errors.New("list refused")
}
@@ -103,6 +106,9 @@ func (s *viewCountingStore) ListETags(ctx context.Context, prefix string) ([]rel
s.cancel()
}
s.mu.Unlock()
+ if err := ctx.Err(); err != nil {
+ return nil, err
+ }
if s.listFails(prefix) {
return nil, errors.New("list refused")
}
@@ -415,9 +421,10 @@ func TestViewCompleteMirrorsTheWalk(t *testing.T) {
assertMatchesWalk(t, f, sn)
}
-// A refresh whose caller goes away mid-read publishes nothing: reads that
-// died with the caller are not the bucket's answer.
-func TestViewCancelledRefreshPublishesNothing(t *testing.T) {
+// A refresh whose caller goes away mid-read publishes what it read, with the
+// reads that died cached as failures: the view knows it is behind, so it must
+// not leave the previous snapshot standing as Complete.
+func TestViewCancelledRefreshFailsClosed(t *testing.T) {
t.Parallel()
f := newViewFixture(t, true, true)
v := f.view()
@@ -432,17 +439,92 @@ func TestViewCancelledRefreshPublishesNothing(t *testing.T) {
if err := v.Refresh(cctx); err == nil {
t.Fatal("a refresh cancelled mid-read reported success")
}
- if v.Snapshot() != before {
- t.Fatal("a refresh cancelled mid-read published")
+ sn := v.Snapshot()
+ if sn == before || sn.Complete {
+ t.Fatalf("after a cancelled refresh: same snapshot %v, complete %v; want a new, incomplete one", sn == before, sn.Complete)
+ }
+ if _, _, err := ListAllRecordsStrict(ctx, sn.Store(f.live)); err == nil {
+ t.Fatal("a strict reader over a refresh that died mid-read did not fail")
}
f.live.mu.Lock()
f.live.cancelOn = ""
f.live.mu.Unlock()
- if hosts := viewHosts(t, mustRefresh(t, v).Store(f.live)); !slices.Contains(hosts, "three.shop.example.com") {
+ sn = mustRefresh(t, v)
+ if !sn.Complete {
+ t.Fatal("still incomplete after the next refresh")
+ }
+ if hosts := viewHosts(t, sn.Store(f.live)); !slices.Contains(hosts, "three.shop.example.com") {
t.Fatalf("records after the next refresh = %v", hosts)
}
}
+// A walk that fails at the top (the index unusable, then accounts/ will not
+// list) must not leave the last good snapshot standing as Complete: the
+// unchanged readers over it fail as they fail on the bucket.
+func TestViewFailedWalkFailsClosed(t *testing.T) {
+ t.Parallel()
+ f := newViewFixture(t, true, true)
+ v := f.view()
+ good := mustRebuild(t, v)
+ f.record(t, f.live.DirStore, f.acct[0], "shop", "three")
+ f.live.setFailGet(release.ChangeIndexKey)
+ f.live.setFailList("accounts/")
+ if err := v.Refresh(ctx); err == nil {
+ t.Fatal("a refresh whose walk failed reported success")
+ }
+ sn := v.Snapshot()
+ if sn == nil || sn.Epoch <= good.Epoch || sn.Complete {
+ t.Fatalf("after a failed walk: %+v; want a newer, incomplete snapshot", sn)
+ }
+ st := sn.Store(f.live)
+ if _, _, err := ListAllRecordsStrict(ctx, st); err == nil {
+ t.Fatal("a strict reader over a failed walk did not fail")
+ }
+ if _, _, err := knownAccounts(ctx, st); err == nil {
+ t.Fatal("knownAccounts over a failed walk did not fail")
+ }
+ if _, err := st.ListDirs(ctx, "apps/"); err == nil {
+ t.Fatal("ListDirs(apps/) over a failed walk did not fail")
+ }
+ f.live.setFailGet("")
+ f.live.setFailList("")
+ sn = mustRefresh(t, v)
+ if !sn.Complete {
+ t.Fatal("still incomplete after the walk recovered")
+ }
+ if hosts := viewHosts(t, sn.Store(f.live)); !slices.Contains(hosts, "three.shop.example.com") {
+ t.Fatalf("records after the recovered walk = %v", hosts)
+ }
+}
+
+// Over a live store whose ListDirs is not bucket-shaped (the fleet door's
+// ListDirs("apps/") is its own account's apps), a write through the snapshot
+// store must not send the walk's ListDirs to live: walked as accounts, those
+// app directories hold no records, and reconcile would retire every route.
+func TestSnapshotStoreWriteOverNonBucketLive(t *testing.T) {
+ t.Parallel()
+ f := newViewFixture(t, false, true)
+ a := f.acct[0]
+ live := fleetShaped{Store: f.live, acct: a}
+ v := NewRecordView(live, release.NewChangeWatch(live))
+ sn := mustRefresh(t, v)
+ st := sn.Store(live)
+ rec := viewRecord(a, "fresh", "one")
+ if err := CreateRecord(ctx, st, rec); err != nil {
+ t.Fatal(err)
+ }
+ want := viewHosts(t, f.live)
+ if !slices.Contains(want, rec.Host) || len(want) != 6 {
+ t.Fatalf("fixture: the bucket holds %v", want)
+ }
+ if got := viewHosts(t, st); !reflect.DeepEqual(got, want) {
+ t.Fatalf("records over the snapshot store after a write = %v, want %v", got, want)
+ }
+ if dirs, err := st.ListDirs(ctx, "apps/"+a+"/"); err != nil || !slices.Contains(dirs, "apps/"+a+"/fresh/") {
+ t.Fatalf("ListDirs after the write = %v, %v; want the new app", dirs, err)
+ }
+}
+
func TestViewRefreshRereadsOnlyMovedApp(t *testing.T) {
t.Parallel()
f := newViewFixture(t, true, true)