carlos / platform Public

harness: console on sophie, Keymail stand-in with step-up, auth login, system update (step 8)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev 052cc5314ee56bdac7f218a24271e9d5b416d41d parent 60eef8d
6 files changed, +335 −0
  • harness/RUNLOG.md +75 −0
  • harness/checks/check8.sh +5 −0
  • harness/console/console-setup.sh +93 −0
  • harness/console/signin.sh +36 −0
  • harness/console/system-update.sh +11 −0
  • harness/stand-ins/keymail.py +115 −0

CI failed — run details

CI log
=== gate ===
cd launchctx && go vet ./... && go test ./... -count=1
ok  	amadan.net/carlos/platform.git/launchctx	0.011s
?   	amadan.net/carlos/platform.git/launchctx/controlname	[no test files]
?   	amadan.net/carlos/platform.git/launchctx/wireid	[no test files]
go vet ./...
gofmt -l .: clean
go test ./... -count=1 -timeout 30m
ok  	github.com/carlosframework/platform	309.741s
?   	github.com/carlosframework/platform/cmd/changelog	[no test files]
ok  	github.com/carlosframework/platform/cmd/console	3.044s
ok  	github.com/carlosframework/platform/cmd/moveprobe	93.300s
ok  	github.com/carlosframework/platform/cmd/zddprobe	0.720s
ok  	github.com/carlosframework/platform/internal/activator	250.583s
ok  	github.com/carlosframework/platform/internal/agentsock	0.024s
ok  	github.com/carlosframework/platform/internal/alerting	0.004s
ok  	github.com/carlosframework/platform/internal/analytics	0.021s
ok  	github.com/carlosframework/platform/internal/appconfig	2.544s
ok  	github.com/carlosframework/platform/internal/apperr	0.090s
ok  	github.com/carlosframework/platform/internal/applog	0.174s
ok  	github.com/carlosframework/platform/internal/awsinv	0.003s
ok  	github.com/carlosframework/platform/internal/boxchoice	0.006s
ok  	github.com/carlosframework/platform/internal/boxid	0.599s
?   	github.com/carlosframework/platform/internal/boxid/boxidtest	[no test files]
?   	github.com/carlosframework/platform/internal/boxid/internal/signtest	[no test files]
ok  	github.com/carlosframework/platform/internal/boxvolumes	0.009s
ok  	github.com/carlosframework/platform/internal/caps	0.012s
ok  	github.com/carlosframework/platform/internal/certwarm	0.004s
ok  	github.com/carlosframework/platform/internal/cgroup	0.724s
ok  	github.com/carlosframework/platform/internal/changelog	0.337s
ok  	github.com/carlosframework/platform/internal/claimactivation	0.878s
ok  	github.com/carlosframework/platform/internal/clamd	0.055s
?   	github.com/carlosframework/platform/internal/cliflag	[no test files]
ok  	github.com/carlosframework/platform/internal/console	402.595s
?   	github.com/carlosframework/platform/internal/controlname	[no test files]
?   	github.com/carlosframework/platform/internal/controlsock	[no test files]
ok  	github.com/carlosframework/platform/internal/dbdoor	6.246s
ok  	github.com/carlosframework/platform/internal/dbdoor/dbdoortest	0.012s
ok  	github.com/carlosframework/platform/internal/dbverify	0.005s
ok  	github.com/carlosframework/platform/internal/dnsrec	0.004s
ok  	github.com/carlosframework/platform/internal/docsite	0.008s
ok  	github.com/carlosframework/platform/internal/domains	2.442s
ok  	github.com/carlosframework/platform/internal/doorkey	0.006s
ok  	github.com/carlosframework/platform/internal/economics	0.004s
ok  	github.com/carlosframework/platform/internal/edge	44.752s
?   	github.com/carlosframework/platform/internal/edgeproof	[no test files]
ok  	github.com/carlosframework/platform/internal/edgesfile	0.015s
ok  	github.com/carlosframework/platform/internal/fleetapi	0.150s
ok  	github.com/carlosframework/platform/internal/gate	1.668s
ok  	github.com/carlosframework/platform/internal/genselect	0.021s
ok  	github.com/carlosframework/platform/internal/geo	0.010s
ok  	github.com/carlosframework/platform/internal/geoip	0.034s
ok  	github.com/carlosframework/platform/internal/historyreadback	0.167s
ok  	github.com/carlosframework/platform/internal/host	180.387s
ok  	github.com/carlosframework/platform/internal/hostactors	6.063s
ok  	github.com/carlosframework/platform/internal/hostactors/awsmembership	0.007s
ok  	github.com/carlosframework/platform/internal/hostbox	2.671s
ok  	github.com/carlosframework/platform/internal/hostclaim	0.551s
ok  	github.com/carlosframework/platform/internal/hostenv	0.005s
ok  	github.com/carlosframework/platform/internal/hostevidence	0.005s
ok  	github.com/carlosframework/platform/internal/hostexec	4.798s
ok  	github.com/carlosframework/platform/internal/hostfence	0.037s
ok  	github.com/carlosframework/platform/internal/hostfiles	10.409s
ok  	github.com/carlosframework/platform/internal/hostfloor	0.014s
ok  	github.com/carlosframework/platform/internal/hostguard	1.039s
ok  	github.com/carlosframework/platform/internal/hostops	1.665s
?   	github.com/carlosframework/platform/internal/hostops/fencerelease	[no test files]
ok  	github.com/carlosframework/platform/internal/hostops/internal/fencerelease	0.002s
ok  	github.com/carlosframework/platform/internal/hostquarantine	0.002s
ok  	github.com/carlosframework/platform/internal/hostrelocate	0.467s
ok  	github.com/carlosframework/platform/internal/hostresolve	0.131s
ok  	github.com/carlosframework/platform/internal/hostwrite	0.002s
ok  	github.com/carlosframework/platform/internal/infraview	0.002s
ok  	github.com/carlosframework/platform/internal/instancectl	5.217s
ok  	github.com/carlosframework/platform/internal/instanceexec	2.721s
ok  	github.com/carlosframework/platform/internal/instancefs	0.004s
ok  	github.com/carlosframework/platform/internal/instancekey	0.003s
ok  	github.com/carlosframework/platform/internal/instanceupdates	0.008s
ok  	github.com/carlosframework/platform/internal/layout	1.547s
ok  	github.com/carlosframework/platform/internal/lbhealth	0.002s
ok  	github.com/carlosframework/platform/internal/lease	9.793s
ok  	github.com/carlosframework/platform/internal/lease/leasetest	0.006s
ok  	github.com/carlosframework/platform/internal/ledger	0.022s
ok  	github.com/carlosframework/platform/internal/mail	0.170s
ok  	github.com/carlosframework/platform/internal/maintenance	0.079s
ok  	github.com/carlosframework/platform/internal/maintenanceexec	5.524s
ok  	github.com/carlosframework/platform/internal/maintenanceguard	0.078s
ok  	github.com/carlosframework/platform/internal/metrics	0.005s
ok  	github.com/carlosframework/platform/internal/moves	20.921s
ok  	github.com/carlosframework/platform/internal/moves/archive	0.831s
ok  	github.com/carlosframework/platform/internal/objstore	0.159s
ok  	github.com/carlosframework/platform/internal/ops	0.171s
ok  	github.com/carlosframework/platform/internal/park	0.196s
ok  	github.com/carlosframework/platform/internal/privatefile	0.003s
2026/10/20 01:28:56 provision: listing apps/bab/blog/instances/: list refused — its records are unseen this pass
2026/10/20 01:28:56 provision: listing apps/bab/: listdirs refused — its records are unseen this pass
2026/10/20 01:28:56 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:56 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:56 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:56 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/20 01:28:56 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/20 01:28:56 provision: skipping record apps/bac/tito/instances/one.example.com.json: unreadable: read refused
2026/10/20 01:28:56 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/20 01:28:56 provision: an app's records could not be listed: they are skipped
2026/10/20 01:28:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:28:57 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/20 01:28:57 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/20 01:28:57 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/20 01:28:57 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/20 01:28:57 provision: claim install acme.go.tito.io: provision: claim admission unavailable
2026/10/20 01:28:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/20 01:28:57 provision: claim install bot.eleven.bac.sidecar.internal: provision: claim admission unavailable
2026/10/20 01:28:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/20 01:28:57 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/20 01:28:57 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/20 01:28:57 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: no sealed config
2026/10/20 01:28:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 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/20 01:28:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/20 01:28:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/20 01:28:57 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/20 01:28:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 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/20 01:28:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/20 01:28:57 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/20 01:28:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/20 01:28:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/20 01:28:57 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/20 01:28:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/20 01:28:57 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/20 01:28:57 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/20 01:28:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:28:57 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/20 01:28:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:28:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:28:57 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:28:57 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:28:57 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:28:57 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:28:57 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route rh.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route ri.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route rk.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route rf.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route rg.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route rj.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route rl.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/20 01:28:57 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/20 01:28:57 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route x.appf.example (app "appf" acct "bac")
2026/10/20 01:28:57 provision: minted instance route x.appi.example (app "appi" acct "bac")
2026/10/20 01:28:57 provision: minted instance route x.appj.example (app "appj" acct "bac")
2026/10/20 01:28:57 provision: minted instance route x.appa.example (app "appa" acct "bac")
2026/10/20 01:28:57 provision: minted instance route x.appe.example (app "appe" acct "bac")
2026/10/20 01:28:57 provision: minted instance route x.appg.example (app "appg" acct "bac")
2026/10/20 01:28:57 provision: minted instance route x.apph.example (app "apph" acct "bac")
2026/10/20 01:28:57 provision: minted instance route x.appb.example (app "appb" acct "bac")
2026/10/20 01:28:57 provision: minted instance route x.appc.example (app "appc" acct "bac")
2026/10/20 01:28:57 provision: minted instance route x.appd.example (app "appd" acct "bac")
2026/10/20 01:28:57 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:28:57 provision: minted instance route r0028.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0111.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0124.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0000.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0030.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0035.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0043.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0052.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0112.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0123.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0012.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0025.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0031.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0101.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0113.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0041.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0064.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0090.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0100.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0019.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0027.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0115.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0080.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0086.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0007.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0014.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0032.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0070.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0095.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0129.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0057.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0082.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0089.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0036.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0055.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0116.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0018.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0049.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0098.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0109.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0110.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0033.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0087.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0117.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0059.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0066.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0091.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0093.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0063.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0068.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0069.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0071.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0009.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0046.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0062.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0075.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0103.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0054.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0045.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0079.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0099.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0002.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0003.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0016.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0078.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0120.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0088.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0107.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0125.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0128.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0048.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0067.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0074.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0105.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0106.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0017.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0039.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0047.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0118.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0122.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0029.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0037.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0040.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0127.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0024.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0038.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0044.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0104.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0119.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0005.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0011.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0051.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0042.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0021.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0022.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0006.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0015.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0065.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0073.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0061.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0077.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0092.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0097.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0121.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0076.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0083.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0085.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0094.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0026.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0050.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0056.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0060.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0081.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0008.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0020.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0004.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0023.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0072.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0096.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0108.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0001.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0010.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0058.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0084.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0114.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0053.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0013.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0102.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0034.go.tito.io (app "tito" acct "bac")
2026/10/20 01:28:57 provision: minted instance route r0126.go.tito.io (app "tito" acct "bac")
--- FAIL: TestPlan14RootReadCensus (4.54s)
    plan14_root_reads_test.go:940: root read census: 47 discrepancies
        changed root read internal/hostfence/writer.go:OpenRootFenceStore; review class, task, sites and digest
        changed root source envelope harness
        changed root source envelope harness/boxes
        changed root source envelope harness/boxes/shims
        changed root source envelope harness/checks
        changed root source envelope harness/console
        changed root source envelope harness/infra
        changed root source envelope harness/infra-copies/747f699/dev
        changed root source envelope harness/infra-copies/a0b3f5a/dev
        changed root source envelope harness/infra-copies/a0b3f5a/scripts
        changed root source envelope harness/operator
        changed root source envelope harness/release
        changed root source envelope internal/host
        changed root source envelope internal/hostfence
        changed root source envelope internal/publicrelease
        changed root source envelope internal/s3compat
        unclassified root read harness/boxes/boxes-up.sh:external file:external@0
        unclassified root read harness/boxes/layout-probe.sh:external file:external@0
        unclassified root read harness/boxes/shims/systemd-zram-setup@.service:external file:external@0
        unclassified root read harness/checks/check2.sh:external file:external@0
        unclassified root read harness/checks/check5.sh:external file:external@0
        unclassified root read harness/checks/check6.sh:external file:external@0
        unclassified root read harness/checks/check6b.sh:external file:external@0
        unclassified root read harness/checks/check7.sh:external file:external@0
        unclassified root read harness/checks/check8.sh:external file:external@0
        unclassified root read harness/checks/fix5.sh:external file:external@0
        unclassified root read harness/checks/run6b.sh:external file:external@0
        unclassified root read harness/checks/snap-base.sh:external file:external@0
        unclassified root read harness/checks/snap-boot.sh:external file:external@0
        unclassified root read harness/checks/ssmsmoke.sh:external file:external@0
        unclassified root read harness/console/console-setup.sh:external file:external@0
        unclassified root read harness/console/signin.sh:external file:external@0
        unclassified root read harness/console/system-update.sh:external file:external@0
        unclassified root read harness/donor-user-data.sh:external file:external@0
        unclassified root read harness/host-setup.sh:external file:external@0
        unclassified root read harness/host-user-data.sh:external file:external@0
        unclassified root read harness/infra-copies/747f699/dev/host-init.sh:external file:external@0
        unclassified root read harness/infra-copies/a0b3f5a/dev/host-init.sh:external file:external@0
        unclassified root read harness/infra-copies/a0b3f5a/scripts/bootstrap-box.sh:external file:external@0
        unclassified root read harness/infra-copies/a0b3f5a/scripts/ship-app.sh:external file:external@0
        unclassified root read harness/infra-copies/a0b3f5a/scripts/update-platform-binary.sh:external file:external@0
        unclassified root read harness/infra/infra-setup.sh:external file:external@0
        unclassified root read harness/operator/operator-setup.sh:external file:external@0
        unclassified root read harness/release/release-setup.sh:external file:external@0
        unclassified root read harness/release/step7-operator.sh:external file:external@0
        unclassified root read internal/s3compat/harness.go:readHarnessFile file:ReadFile@189,file:Stat@55
        changed reclassified declaration internal/hostfence/writer.go:OpenRootFenceStore
2026/10/20 01:29:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 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/20 01:29:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: minted service route svc.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: minted instance route whole.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: minted instance route console.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: minted instance route shared.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: converged acme.go.tito.io channel stable -> edge
2026/10/20 01:29:08 provision: converged acme.go.tito.io channel edge -> canary/rehearsal
2026/10/20 01:29:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: empty channel
2026/10/20 01:29:08 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:29:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: converged acme.go.tito.io environment "" -> "staging"
2026/10/20 01:29:08 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/20 01:29:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:08 provision: converged acme.go.tito.io steering "" -> "latency"
2026/10/20 01:29:08 provision: converged acme.go.tito.io steering "latency" -> ""
2026/10/20 01:29:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: converged acme.go.tito.io hibernate false -> true
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: converged acme.go.tito.io hibernate true -> false (replication "daily" cleared: only a hibernating route's rung is read)
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: converged acme.go.tito.io status-named false -> true
2026/10/20 01:29:09 provision: converged acme.go.tito.io status-named true -> false
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 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/20 01:29:09 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/20 01:29:09 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/20 01:29:09 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 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/20 01:29:09 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/20 01:29:09 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/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: skipping accounts/bac/account.json: malformed account manifest: invalid character 'o' in literal null (expecting 'u')
2026/10/20 01:29:09 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: manifest bac/tito: read failed: provision: manifest bac/tito: invalid character 'o' in literal null (expecting 'u')
2026/10/20 01:29:09 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/20 01:29:09 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/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 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/20 01:29:09 provision: not removing acme$evil.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:29:09 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/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 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/20 01:29:09 provision: not removing bad-service.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:29:09 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/20 01:29:09 provision: not removing no-channel.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:29:09 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:29:09 provision: removed retired instance route ghost.go.tito.io (record gone)
2026/10/20 01:29:09 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/20 01:29:09 provision: minted instance route dup.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:29:09 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/20 01:29:09 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:29:09 provision: removed retired static route site.go.tito.io (app in the trash)
2026/10/20 01:29:09 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/20 01:29:09 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:29:09 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/20 01:29:09 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:29:09 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/20 01:29:09 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:29:09 provision: converged acme.go.tito.io channel stable -> edge
2026/10/20 01:29:09 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:29:09 provision: converged acme.go.tito.io channel canary/rehearsal -> edge
2026/10/20 01:29:09 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/20 01:29:09 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/20 01:29:09 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/20 01:29:09 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/20 01:29:09 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/20 01:29:09 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/20 01:29:09 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/20 01:29:09 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/20 01:29:09 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:29:09 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/20 01:29:09 provision: dry-run: would mint instance route acme.go.tito.io (app "tito" acct "bac" channel "stable")
2026/10/20 01:29:09 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/20 01:29:09 provision: dry-run: would converge adopt.go.tito.io channel stable -> edge
2026/10/20 01:29:09 provision: dry-run: would converge adopt.go.tito.io environment "" -> "staging"
2026/10/20 01:29:09 provision: dry-run: would converge owned.go.tito.io channel stable -> edge
2026/10/20 01:29:09 provision: dry-run: would converge owned.go.tito.io environment "" -> "staging"
2026/10/20 01:29:09 provision: dry-run: would converge owned.go.tito.io hibernate false -> true
2026/10/20 01:29:09 provision: dry-run: would converge owned.go.tito.io seed
2026/10/20 01:29:09 provision: dry-run: would remove retired instance route gone.go.tito.io (record gone)
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: adopted existing route adopt.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:29:09 provision: converged adopt.go.tito.io channel stable -> edge
2026/10/20 01:29:09 provision: converged adopt.go.tito.io environment "" -> "staging"
2026/10/20 01:29:09 provision: converged owned.go.tito.io channel stable -> edge
2026/10/20 01:29:09 provision: converged owned.go.tito.io environment "" -> "staging"
2026/10/20 01:29:09 provision: converged owned.go.tito.io hibernate false -> true
2026/10/20 01:29:09 provision: removed retired instance route gone.go.tito.io (record gone)
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: adopted existing route story.carlosframework.com (app "story" acct "bad") — this record now owns its channel and environment
2026/10/20 01:29:09 provision: story.carlosframework.com exists but is not the route this record describes (kind "instance"/"static") — leaving it alone
2026/10/20 01:29:09 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted service route pub.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted service route pubs.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted service route named.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted service route priv.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route unit.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route exec.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted service route loop.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted static route pisite.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: removed retired static route site.go.tito.io (record gone)
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: converged acme.go.tito.io replicas "ie,uk" -> "uk"
2026/10/20 01:29:09 provision: converged acme.go.tito.io replicas "uk" -> ""
2026/10/20 01:29:09 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: converged acme-uk.go.tito.io replica mark true -> false
2026/10/20 01:29:09 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 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/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:09 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/20 01:29:09 provision: router.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/20 01:29:09 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:29:09 provision: converged acme.go.tito.io channel stable -> edge
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/20 01:29:09 provision: not removing acme.go.tito.io (record gone): participant of a running operation
2026/10/20 01:29:09 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/20 01:29:09 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/20 01:29:10 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/20 01:29:10 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/20 01:29:10 provision: acme.go.tito.io: held restoring by rb_other, not by mv_acme; leaving it
2026/10/20 01:29:10 provision: acme.go.tito.io: the row is not this pass's (app "other" acct ""); not holding it for mv_acme
2026/10/20 01:29:10 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/20 01:29:10 provision: dry-run: would mint instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac" channel "stable")
2026/10/20 01:29:10 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/20 01:29:10 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/20 01:29:10 provision: minted instance route acme.example.com (app "shop" acct "bac")
2026/10/20 01:29:10 provision: minted instance route plain.example.com (app "shop" acct "bac")
2026/10/20 01:29:10 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:29:10 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/20 01:29:10 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:29:10 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/20 01:29:10 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:29:10 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/20 01:29:10 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:29:10 provision: listing apps/bac/shop/instances/: list refused — its records are unseen this pass
2026/10/20 01:29:10 provision: a.shop.example.com: swapped for import sd_oqmzgq5isk7sadjhs4yqfcbwwm (the original route is journaled)
2026/10/20 01:29:10 provision: a.shop.example.com: import sd_oqmzgq5isk7sadjhs4yqfcbwwm committed: its gate is cleared and its journal row dropped
2026/10/20 01:29:10 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/20 01:29:10 provision: a.shop.example.com: import sd_l6beu74nmjg3o4wnp4hsvn2ogi rolled back to its original route
2026/10/20 01:29:10 provision: a.shop.example.com: import sd_l6beu74nmjg3o4wnp4hsvn2ogi: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/20 01:29:10 provision: a.shop.example.com: import sd_l6beu74nmjg3o4wnp4hsvn2ogi is cleaned up and its journal row retired
2026/10/20 01:29:10 provision: a.shop.example.com: import sd_3cwu6ua7laqvlkdjsxgowhvedi rolled back to its original route
2026/10/20 01:29:10 provision: a.shop.example.com: import sd_3cwu6ua7laqvlkdjsxgowhvedi: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/20 01:29:10 provision: a.shop.example.com: import sd_3cwu6ua7laqvlkdjsxgowhvedi is cleaned up and its journal row retired
2026/10/20 01:29:10 provision: dry-run: would redo a.shop.example.com's swap record CAS for import sd_spej42ewyjo5r4h6ui26awqzxa
2026/10/20 01:29:10 provision: dry-run: would clear a.shop.example.com's import gate
2026/10/20 01:29:10 provision: dry-run: would converge a.shop.example.com seed source
2026/10/20 01:29:10 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/20 01:29:10 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/20 01:29:10 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/20 01:29:10 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/20 01:29:10 provision: a.shop.example.com: import sd_5ny66vwyrros4i4p4ormfkz4qy cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/20 01:29:10 provision: a.shop.example.com: import sd_mlfh5ayvpt6yopwf5jdupzrq7y cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_joptpqycf6btg6ebk2ecmjseqq is journaled, but this box cannot act on imports; its row is left alone
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_xtd656yed2jjnfhje2uwntk6qm is journaled, but this box cannot act on imports; its row is left alone
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_xjaj4mm7bykkrv3kiw6re5wkzi is journaled, but this box cannot act on imports; its row is left alone
2026/10/20 01:29:11 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/20 01:29:11 provision: b.shop.example.com: import sd_dst75zajuuqfxembsalcp4c5nm left alone this pass: the import journal could not be read
2026/10/20 01:29:11 provision: c.shop.example.com: import sd_k2hpoyp6o3i66na65jxnoxddoe left alone this pass: the import journal could not be read
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_6vxzrzmr3yxlr7gwtbefqkh4da committed: its gate is cleared and its journal row dropped
2026/10/20 01:29:11 provision: a.shop.example.com: not converging import sd_xwn3tjg2jezv4gjswc4obxeyym: it is swapped but not committed, and the row on this box has no import gate
2026/10/20 01:29:11 provision: a.shop.example.com: not converging import sd_thxdttfzx6ol3cpgxkunc6qcqy: it is swapped but not committed, and the row on this box has no import gate
2026/10/20 01:29:11 provision: a.shop.example.com: not converging import sd_gjur6ae4bme7r4n2veaxtghy7y: it is placed but not committed, and the row on this box has no import gate
2026/10/20 01:29:11 provision: a.shop.example.com: not converging import sd_fbl5mb5memr75kqvbnkyywzwzu: it is placed but not committed, and the row on this box has no import gate
2026/10/20 01:29:11 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/20 01:29:11 provision: converge seed source on a.shop.example.com: constraint failed: seed_source is read-only here (1811)
2026/10/20 01:29:11 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/20 01:29:11 provision: a.shop.example.com: import sd_22n2uaxwhn66iugtrx2wh2m3x4 committed: its gate is cleared and its journal row dropped
2026/10/20 01:29:11 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/20 01:29:11 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:11 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/20 01:29:11 provision: acme.go.tito.io: not minting a seeded instance: this box does not mint nested (<nil>)
2026/10/20 01:29:11 provision: acme.go.tito.io: not minting a seeded instance: claim control is on for this box
2026/10/20 01:29:11 provision: acme.go.tito.io: aborted seed sd_g3t3hmwlp5qo4n2wcnpzbknvsi: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/20 01:29:11 provision: acme.go.tito.io: aborted seed sd_g3t3hmwlp5qo4n2wcnpzbknvsi rolled back (no box had swapped it)
2026/10/20 01:29:11 provision: acme.go.tito.io: not minting a seeded instance: its record does not describe a hibernating instance
2026/10/20 01:29:11 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:11 provision: removed instance route acme.go.tito.io (its seed sd_dorbhrynje6fgajem4sm7d5bcq was aborted); the next pass rolls it back
2026/10/20 01:29:11 provision: acme.go.tito.io: aborted seed sd_dorbhrynje6fgajem4sm7d5bcq: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/20 01:29:11 provision: acme.go.tito.io: aborted seed sd_dorbhrynje6fgajem4sm7d5bcq rolled back (no box had swapped it)
2026/10/20 01:29:11 provision: acme.go.tito.io: aborted seed sd_wbpe7uujii5r4ucv7asjlmj664 has a row this pass may not remove; leaving the seed aborted
2026/10/20 01:29:11 provision: acme.go.tito.io: aborted seed sd_2hahbjvddmd3zdpth66oxngoje rolled back (no box had swapped it)
2026/10/20 01:29:11 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:11 provision: removed instance route acme.go.tito.io (its seed sd_fsysg3lllprb4ln6u466652rt4 was aborted); the next pass rolls it back
2026/10/20 01:29:11 provision: acme.go.tito.io: aborted seed sd_fsysg3lllprb4ln6u466652rt4 has no route on this box: its local data is removed
2026/10/20 01:29:11 provision: acme.go.tito.io: aborted seed sd_fsysg3lllprb4ln6u466652rt4 rolled back (no box had swapped it)
2026/10/20 01:29:11 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_nhplchejatfe2g76clc73lbedy (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_nhplchejatfe2g76clc73lbedy rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_nhplchejatfe2g76clc73lbedy is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_2gwlw4tunm6bnk4yqgoimqk3re (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_2gwlw4tunm6bnk4yqgoimqk3re rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_2gwlw4tunm6bnk4yqgoimqk3re is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_neq4qn2kz6lf4qt3ufp3ngueqy (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_neq4qn2kz6lf4qt3ufp3ngueqy rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_neq4qn2kz6lf4qt3ufp3ngueqy: the host's replica is left alone: its record no longer names this seed
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_neq4qn2kz6lf4qt3ufp3ngueqy is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_px4owst43z6vodh5wsrvnxhisu (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_px4owst43z6vodh5wsrvnxhisu rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_px4owst43z6vodh5wsrvnxhisu rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_px4owst43z6vodh5wsrvnxhisu is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_tlhsc2hryw5vacwooroh2abfye (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_tlhsc2hryw5vacwooroh2abfye rollback deferred: the host is not fenced and stopped yet (stop unproven)
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_sh7oa5le5qrkus2rb3vru5uly4 (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_sh7oa5le5qrkus2rb3vru5uly4 is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_rt7qpdrbpte4zasou25rtywehm (the original route is journaled)
2026/10/20 01:29:11 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_rt7qpdrbpte4zasou25rtywehm left alone this pass: its record could not be read
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_tamj2qql67mioyltnjl6pvwxr4 (the original route is journaled)
2026/10/20 01:29:11 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: read failed: connection reset
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_tamj2qql67mioyltnjl6pvwxr4 left alone this pass: its record could not be read
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_f2guen2n4dhdt4aqjydrunr7le (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_f2guen2n4dhdt4aqjydrunr7le: close the import gate: constraint failed: injected (1811)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_f2guen2n4dhdt4aqjydrunr7le rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_f2guen2n4dhdt4aqjydrunr7le is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_7h2wcsd6lrar4fda6po2a2clwe (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_7h2wcsd6lrar4fda6po2a2clwe: close the import gate: constraint failed: injected (1811)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_7h2wcsd6lrar4fda6po2a2clwe rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_7h2wcsd6lrar4fda6po2a2clwe is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_tvfhjhcygfu3gehhhrl4pw3kyq (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_tvfhjhcygfu3gehhhrl4pw3kyq rollback deferred: the host is not fenced and stopped yet (injected failure at fence)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_tvfhjhcygfu3gehhhrl4pw3kyq rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_tvfhjhcygfu3gehhhrl4pw3kyq is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_gcv6tsbaczodc3hmpo6gbmzwhe (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_gcv6tsbaczodc3hmpo6gbmzwhe rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_gcv6tsbaczodc3hmpo6gbmzwhe is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_2pygz4y56eaqtzfweit2u3d7da (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_2pygz4y56eaqtzfweit2u3d7da: retire its instance key: injected failure at retire-key
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_2pygz4y56eaqtzfweit2u3d7da rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_2pygz4y56eaqtzfweit2u3d7da is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_f3nhi45wgmevqxu2ksd4kkprr4 (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_f3nhi45wgmevqxu2ksd4kkprr4 rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_f3nhi45wgmevqxu2ksd4kkprr4 is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_i6qupgb7k5b5qp5khm3gomfnyy (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_i6qupgb7k5b5qp5khm3gomfnyy: remove its local data: injected failure at remove-local
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_i6qupgb7k5b5qp5khm3gomfnyy rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_i6qupgb7k5b5qp5khm3gomfnyy is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_7gku3txnosrhewxaizmoo2zfoi (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_7gku3txnosrhewxaizmoo2zfoi rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_7gku3txnosrhewxaizmoo2zfoi is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_6xyvbvphvnignnjh4yihyaqtbe (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_6xyvbvphvnignnjh4yihyaqtbe: remove its local data: injected failure at remove-local-done
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_6xyvbvphvnignnjh4yihyaqtbe rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_6xyvbvphvnignnjh4yihyaqtbe is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_ffacdmxbcduby735fxk47zf3ra (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_ffacdmxbcduby735fxk47zf3ra rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_ffacdmxbcduby735fxk47zf3ra is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_tctfzrtft4s3obw2iin4hjlpnq (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_tctfzrtft4s3obw2iin4hjlpnq: restore the original route: constraint failed: injected (1811)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_tctfzrtft4s3obw2iin4hjlpnq rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_tctfzrtft4s3obw2iin4hjlpnq is cleaned up and its journal row retired
2026/10/20 01:29:11 provision: a.shop.example.com: swapped for import sd_6didjltdvg7x7abek3mijrl6qu (the original route is journaled)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_6didjltdvg7x7abek3mijrl6qu: restore the original route: constraint failed: injected (1811)
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_6didjltdvg7x7abek3mijrl6qu rolled back to its original route
2026/10/20 01:29:11 provision: a.shop.example.com: import sd_6didjltdvg7x7abek3mijrl6qu is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_u6dddpyvlwr62p6nqrkqinzrgy (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_u6dddpyvlwr62p6nqrkqinzrgy is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_67tetsb753x7nzpze3mw5nt2pi (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_67tetsb753x7nzpze3mw5nt2pi rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_67tetsb753x7nzpze3mw5nt2pi: delete its snapshot: injected failure at delete-snapshot
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_67tetsb753x7nzpze3mw5nt2pi is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_nyrjawpunatera2hftmegqy324 (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_nyrjawpunatera2hftmegqy324 rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_nyrjawpunatera2hftmegqy324 is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_tgmwci6gujqqq4lvlo4r3vmn4a (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_tgmwci6gujqqq4lvlo4r3vmn4a rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_tgmwci6gujqqq4lvlo4r3vmn4a: delete the host's replica: injected failure at delete-replica
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_tgmwci6gujqqq4lvlo4r3vmn4a is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_lzez4sxhft25wj37rnqrngv7ya (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_lzez4sxhft25wj37rnqrngv7ya rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_lzez4sxhft25wj37rnqrngv7ya is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_ovutkbxvgns343vkua3l5uvjqi (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_ovutkbxvgns343vkua3l5uvjqi rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_ovutkbxvgns343vkua3l5uvjqi: retire its journal row: constraint failed: injected (1811)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_ovutkbxvgns343vkua3l5uvjqi is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_nzdtm76wc6lcjli5vnqngiezze (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_nzdtm76wc6lcjli5vnqngiezze rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_nzdtm76wc6lcjli5vnqngiezze: retire its journal row: constraint failed: injected (1811)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_nzdtm76wc6lcjli5vnqngiezze is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_d3x2kzzl77tnlfsqt2rf5znqlu (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_d3x2kzzl77tnlfsqt2rf5znqlu rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_d3x2kzzl77tnlfsqt2rf5znqlu is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: mark import sd_d3x2kzzl77tnlfsqt2rf5znqlu rolled back: injected failure at cas
2026/10/20 01:29:12 provision: a.shop.example.com: aborted seed sd_d3x2kzzl77tnlfsqt2rf5znqlu rolled back (no box had swapped it)
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_e3rivxqphc5b5ykwznmbl4wbmu (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_e3rivxqphc5b5ykwznmbl4wbmu rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_e3rivxqphc5b5ykwznmbl4wbmu is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: aborted seed sd_e3rivxqphc5b5ykwznmbl4wbmu rolled back (no box had swapped it)
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_hqeurs2u4pt6pig6o7irlccype (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_hqeurs2u4pt6pig6o7irlccype rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_hqeurs2u4pt6pig6o7irlccype rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_hqeurs2u4pt6pig6o7irlccype rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_hqeurs2u4pt6pig6o7irlccype is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_3swefbjxtramkdfq57pttay2ga (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_3swefbjxtramkdfq57pttay2ga rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_3swefbjxtramkdfq57pttay2ga is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_ehtg2wihgvo7nqvdksyew5zwyi (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_ehtg2wihgvo7nqvdksyew5zwyi rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_ehtg2wihgvo7nqvdksyew5zwyi is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_pzepu6voytcz7x33bqidbsn6ti (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_pzepu6voytcz7x33bqidbsn6ti rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_pzepu6voytcz7x33bqidbsn6ti is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_lnyq5u5sbj5omkb3bfuswpdpsi (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_lnyq5u5sbj5omkb3bfuswpdpsi rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_lnyq5u5sbj5omkb3bfuswpdpsi is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_xvks5mwzmko2nyyci5g2diyllu (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_xvks5mwzmko2nyyci5g2diyllu rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_xvks5mwzmko2nyyci5g2diyllu is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_gwxpzu5z7qpaez2onie76kfnhm (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_gwxpzu5z7qpaez2onie76kfnhm rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_gwxpzu5z7qpaez2onie76kfnhm is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_6m3mrpxsb6rcn2h2mlmerxfgxy (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_6m3mrpxsb6rcn2h2mlmerxfgxy rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_6m3mrpxsb6rcn2h2mlmerxfgxy is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_z6j7mlodhx2ug5widdqqprhvuu (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_z6j7mlodhx2ug5widdqqprhvuu has no route on this box: its local data is removed and no route is put back
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_z6j7mlodhx2ug5widdqqprhvuu is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_bd23rkcflnpjxuk3z6cgonmbbe (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_khnjjatzv3cyu6fwkpxo76v5ou (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_dmwwvmdxfuhc6dw5ih2niguaoq (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_dmwwvmdxfuhc6dw5ih2niguaoq cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_gobttmyqjgmpisyirwypzbq7ma (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_gobttmyqjgmpisyirwypzbq7ma is not rolled back: the route changed under the fence, so nothing there is touched
2026/10/20 01:29:12 provision: a.shop.example.com: import "../not-a-seed" names no snapshot and no replica; only its journal row is cleaned up
2026/10/20 01:29:12 provision: a.shop.example.com: import ../not-a-seed is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_nyyscbhl6ssnnrhdzay7gjqhci (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_iv4gag3o4vyvvdimwvcdqib424 (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_jtmz23g6ftm5rkbcfxbdvetskm (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_t2lch3ntk5ygvvfjrtgxah2qqu (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_2kbxhr6xls7uzeysmbya2q3o7u (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_2kbxhr6xls7uzeysmbya2q3o7u rollback deferred: the host is not fenced and stopped yet (stop evidence unreadable)
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_ai4d3m2xlty3xceelbtpgqqkti (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_ai4d3m2xlty3xceelbtpgqqkti has no route on this box: its local data is removed and no route is put back
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_ai4d3m2xlty3xceelbtpgqqkti is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_rsmwvain76ccuezuw22y2kf7s4 (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_rsmwvain76ccuezuw22y2kf7s4: remove its local data: injected failure at remove-local
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_rsmwvain76ccuezuw22y2kf7s4 is not rolled back: the route at the host is not the import's, so nothing there is touched
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_qo7ih4b7w4ljx2shiooyeshbg4 (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_qo7ih4b7w4ljx2shiooyeshbg4: a route appeared at the host, so its local database is left and the rollback waits
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_g2n7jtc5p5q3qlqwldl5etbrnm (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_g2n7jtc5p5q3qlqwldl5etbrnm rollback deferred: no fence generation: registry busy
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_3gr62pxxacqqosdbcxbwh5mriq (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_3gr62pxxacqqosdbcxbwh5mriq rollback deferred: no fence generation: the generation source answered 0
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_6l5thhuubunkg5kkfd7k7eddea (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_oowtiigohu4doqygn5ayaavdoy (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_j52exexiee43bw7xsjuvktjnuy (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import deferred: this box cannot read the instance's env file
2026/10/20 01:29:12 provision: a.shop.example.com: import deferred: the instance's env file could not be read: a symlink
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_g6ig2dw7hizy4zkboxexm2s3cy (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_g6ig2dw7hizy4zkboxexm2s3cy rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_g6ig2dw7hizy4zkboxexm2s3cy is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_6up73mdxnbhbzj77iuok3i45uu (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_6up73mdxnbhbzj77iuok3i45uu rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_6up73mdxnbhbzj77iuok3i45uu is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_kqotibjlvtyag5bszn4mezsohq (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_kqotibjlvtyag5bszn4mezsohq rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_kqotibjlvtyag5bszn4mezsohq is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_6sbpozmm3mbhfhzsdtvfjhrtny (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_6sbpozmm3mbhfhzsdtvfjhrtny: retire its instance key: the env file is a symlink
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_6sbpozmm3mbhfhzsdtvfjhrtny rolled back to its original route
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_6sbpozmm3mbhfhzsdtvfjhrtny is cleaned up and its journal row retired
2026/10/20 01:29:12 provision: a.shop.example.com: swapped for import sd_ogk6hxyjawbig52oxityjcb6vi (the original route is journaled)
2026/10/20 01:29:12 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/20 01:29:12 provision: a.shop.example.com: swapped for import sd_ojqodf7wks64xx7ndc3rhlwz2m (the original route is journaled)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_52bzvaatg6mf6anrmmy2pmnloi refused: there is no route at a.shop.example.com to replace
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_3q2maoqheeyzqifz6i5y6y3vn4 refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_lhu34ruto6khlr7axxrshrgb54 refused: the route's address is 127.0.0.1:8401,127.0.0.1:8402, not 127.0.0.1:8401
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_wzvb3j7qjm6qwwtk6hvunhs36m refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_vbz66xc47ljfpnjhpep2sw5rja refused: the route belongs to app other
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_dwhwhemkckjxuyhmhax4t3zpc4 refused: the route is filed under another account
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_2zrkncwu4kqz2ojwcjezc32rea refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_ndltrakpbpbjssll3askn3nmaq refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_rjps77b4i2ypoynrb2mztvymy4 refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_hsiwpgtgrrqul6doiqpjqcxhqy refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_wg623m555dytco6wykcozzwl6a refused: the route is not an address route this import can take over (socket)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_qffl3si7cmj5fwxojtfdntkqsm refused: the route is not an address route this import can take over (no address)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_gb5cechckhsakjtz2phqzb22fq refused: the route is not an address route this import can take over (provisioned)
2026/10/20 01:29:12 provision: a.shop.example.com: import sd_aqgk6pvl6j4kramgoturzwgasq refused: the route is not an address route this import can take over (kind static)
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_d5nlfr2eakycticl4qm6iophw4 refused: the route is not an address route this import can take over (backing)
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_o43cmjj66t77ph3rcitlrw3mue refused: the route is not an address route this import can take over (tunnel)
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_2tv7cmq6xcgfny4iqefjueagpm refused: the route is not an address route this import can take over (caps)
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_k5q4qmosac4naiyp4cnwnq75ee refused: the route is not an address route this import can take over (platform)
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_gd7ltly2wfam4bfmbfyb56fc4y refused: the route is not an address route this import can take over (canary)
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_dbqyrrtkx4ykqfsip3sux5vap4 refused: the route is not an address route this import can take over (kind sidecar)
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_2l32b5ca7ct4lqkep67yihwaui refused: the route is not an address route this import can take over (region)
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_n34x6zivzc3x55krv3ylfl34ca refused: the route is not an address route this import can take over (fleet_box)
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_yi73b6kggj4hx2di3cqk3y22za refused: the route is not an address route this import can take over (hibernate)
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_2wcwpp4pcgfgzfvs7mpfsg42jq refused: the route is not an address route this import can take over (claim_owner)
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_r6ihq4e7gd4xlnwrkdzzxwsfjq refused: this box does not run instances nested
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_2plkia6mcyunplnkqg7acu5fpm refused: this box does not run instances nested
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_ubck2srio2oz5p4f7grwel2kny refused: claim control is on for this box
2026/10/20 01:29:13 provision: a.shop.example.com: swapped for import sd_v77frbzx4nn5r625ttmxsgwhwq (the original route is journaled)
2026/10/20 01:29:13 provision: a.shop.example.com: swapped for import sd_hl42m7s5ujqrg5wllqbqvvmkzu (the original route is journaled)
2026/10/20 01:29:13 provision: a.shop.example.com: import deferred: this box cannot read the legacy route assignments
2026/10/20 01:29:13 provision: a.shop.example.com: import deferred: the legacy route assignments could not be read: store down
2026/10/20 01:29:13 provision: a.shop.example.com: not swapping for import sd_dpnrhyo42igu75trvxl7dvzhve: its verify hash is not a sha256
2026/10/20 01:29:13 provision: a.shop.example.com: not swapping for import sd_6qw3ygcczoljxgljkfhwnct4ty: its verify hash is not a sha256
2026/10/20 01:29:13 provision: a.shop.example.com: not swapping for import sd_pedr7zd4hfh6jjv4wlkkvwmipe: its verify hash is not a sha256
2026/10/20 01:29:13 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/20 01:29:13 provision: A.shop.example.com/..: not swapping for import sd_6g3s3mzxhtse6l256wyu2xpica: its host or seed id is malformed (seeds: not a host)
2026/10/20 01:29:13 provision: a.shop.example.com: not swapping for import sd_wep7mmm5f3tprp6achumsyzzxq: its record does not describe a nested, hibernating instance
2026/10/20 01:29:13 provision: a.shop.example.com: not swapping for import sd_nixx3yfzj5y7r6x6qqa5phv3xu: its record does not describe a nested, hibernating instance
2026/10/20 01:29:13 provision: a.shop.example.com: not swapping for import sd_mtrubruqp7huwdn2ntstf6wnzy: its record does not describe a nested, hibernating instance
2026/10/20 01:29:13 provision: a.shop.example.com: not swapping for import sd_tgi2bx4zotp6bnygubjd4vro4m: its record does not describe a nested, hibernating instance
2026/10/20 01:29:13 provision: a.shop.example.com: import deferred: the box's layout intent could not be read: store down
2026/10/20 01:29:13 provision: a.shop.example.com: swapped for import sd_flu7g3qbrsyp4rugbux37mccli (the original route is journaled)
2026/10/20 01:29:13 provision: a.shop.example.com: import deferred: the box's nested probe did not answer: ready probe timed out
2026/10/20 01:29:13 provision: a.shop.example.com: swapped for import sd_yinjhoyxnwx3yvhv5g62mll7ee (the original route is journaled)
2026/10/20 01:29:13 provision: a.shop.example.com: swapped for import sd_v7d2ww5xxdmknqclxfojiha3om (the original route is journaled)
2026/10/20 01:29:13 provision: a.shop.example.com: import deferred: the route is held by operation op_1
2026/10/20 01:29:13 provision: dry-run: would consider swapping a.shop.example.com for import sd_n25pqcktw3qinqeaih62nciqc4
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_biorj2ptpio6bgmfydfp36r2j4 rolled back to its original route
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_biorj2ptpio6bgmfydfp36r2j4: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_biorj2ptpio6bgmfydfp36r2j4 is cleaned up and its journal row retired
2026/10/20 01:29:13 provision: a.shop.example.com: import sd_ek2mfl5q2mht2epjvduv5rvvhm left alone: the import journal holds seed sd_pm5k5fn4q4yntdsxiw5i5oqusm at swapped
2026/10/20 01:29:13 provision: a.shop.example.com: not minting import sd_47xnvu4bda7npyj7orsnxmpt4m: it is swapped but not committed, and only its swap makes its row
2026/10/20 01:29:13 provision: a.shop.example.com: not minting import sd_6yf6u24kpbyehxzse3js2r2iwi: it is placed but not committed, and only its swap makes its row
2026/10/20 01:29:13 provision: a.shop.example.com: swapped for import sd_cchwssgx6jmwzl63ib3r2l5fiy (the original route is journaled)
2026/10/20 01:29:13 provision: a.shop.example.com: not minting import sd_cchwssgx6jmwzl63ib3r2l5fiy: it is swapped but not committed, and only its swap makes its row
2026/10/20 01:29:13 provision: a.shop.example.com: not minting import sd_cchwssgx6jmwzl63ib3r2l5fiy: it is placed but not committed, and only its swap makes its row
2026/10/20 01:29:13 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/20 01:29:13 provision: removed retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/20 01:29:13 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:29:13 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:29:13 provision: converged sidecar bot.eleven.bac.sidecar.internal args ["sidecar","run"] -> ["worker","run"]
2026/10/20 01:29:13 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:29:13 provision: converged sidecar bot.eleven.bac.sidecar.internal ceilings 300/3600 -> 60/120
2026/10/20 01:29:13 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:29:13 provision: converged sidecar bot.eleven.bac.sidecar.internal channel stable -> canary/eleven
2026/10/20 01:29:13 provision: converged sidecar bot.eleven.bac.sidecar.internal environment "other" -> "relay"
2026/10/20 01:29:13 provision: converged sidecar bot.eleven.bac.sidecar.internal hibernate true -> false
2026/10/20 01:29:13 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: read failed: failStore: reads disabled under apps/bac/eleven/sidecars/
2026/10/20 01:29:13 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: malformed: invalid character 'n' looking for beginning of object key string
2026/10/20 01:29:13 provision: not removing sidecar bot.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/20 01:29:13 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: empty channel
2026/10/20 01:29:13 provision: skipping sidecar record apps/bac/eleven/sidecars/held.json: empty channel
2026/10/20 01:29:13 provision: not removing sidecar held.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/20 01:29:13 provision: removed retired sidecar route old.eleven.bac.sidecar.internal (record gone)
2026/10/20 01:29:13 provision: bac/eleven has sidecar records but no sidecars manifest — not minting
2026/10/20 01:29:13 provision: bac/eleven is in the trash — not minting sidecar routes for it
2026/10/20 01:29:13 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/20 01:29:13 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/20 01:29:13 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:29:13 provision: minted sidecar route hub.relay.bac.sidecar.internal (app "relay" acct "bac" args ["relay"])
2026/10/20 01:29:13 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/20 01:29:13 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:29:13 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/20 01:29:13 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:29:13 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:29:13 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/20 01:29:13 provision: removed retired sidecar route bot.eleven.bac.sidecar.internal (record gone)
2026/10/20 01:29:13 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:29:13 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/20 01:29:13 provision: skipping sidecar record apps/bac/relay/sidecars/hub.json: read failed: failStore: reads disabled under apps/bac/relay/sidecars/
2026/10/20 01:29:13 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/20 01:29:13 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:29:13 provision: dry-run: would mint sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" channel "stable" args ["sidecar","run"])
2026/10/20 01:29:13 provision: dry-run: would remove retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/20 01:29:13 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/20 01:29:13 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:13 provision: converged acme.go.tito.io update settings "{\"updates\":\"manual\",\"channel\":\"stable\"}" -> ""
2026/10/20 01:29:13 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:13 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:13 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/20 01:29:13 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/20 01:29:13 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/20 01:29:13 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:29:13 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/20 01:29:13 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/20 01:29:13 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
FAIL
FAIL	github.com/carlosframework/platform/internal/provision	17.026s
ok  	github.com/carlosframework/platform/internal/publicrelease	0.010s
?   	github.com/carlosframework/platform/internal/regionname	[no test files]
ok  	github.com/carlosframework/platform/internal/registry	5.410s
ok  	github.com/carlosframework/platform/internal/relay	7.219s
ok  	github.com/carlosframework/platform/internal/release	23.993s
ok  	github.com/carlosframework/platform/internal/rollout	3.637s
ok  	github.com/carlosframework/platform/internal/rolloutwords	0.005s
ok  	github.com/carlosframework/platform/internal/rootaws	0.007s
ok  	github.com/carlosframework/platform/internal/rootparticipation	0.057s
ok  	github.com/carlosframework/platform/internal/rootstate	0.026s
ok  	github.com/carlosframework/platform/internal/runs	0.573s
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.473s
ok  	github.com/carlosframework/platform/internal/seeds	0.010s
ok  	github.com/carlosframework/platform/internal/sim/hostlife	8.557s
ok  	github.com/carlosframework/platform/internal/sim/litestreamfacts	4.269s
ok  	github.com/carlosframework/platform/internal/status	0.062s
ok  	github.com/carlosframework/platform/internal/steering	0.006s
ok  	github.com/carlosframework/platform/internal/stopevidence	0.196s
ok  	github.com/carlosframework/platform/internal/svcrole	0.002s
ok  	github.com/carlosframework/platform/internal/telemetry	0.004s
ok  	github.com/carlosframework/platform/internal/termfence	0.004s
ok  	github.com/carlosframework/platform/internal/tunnelclient	0.003s
ok  	github.com/carlosframework/platform/internal/unixdial	0.002s
ok  	github.com/carlosframework/platform/internal/updatewords	0.004s
ok  	github.com/carlosframework/platform/internal/usage	0.004s
ok  	github.com/carlosframework/platform/internal/version	0.001s
ok  	github.com/carlosframework/platform/internal/vet	1.543s
FAIL
make: *** [Makefile:18: test] Error 1

amadan: step gate failed: exit status 2

amadan: job failed at step gate — its output is above, not at the tail of this log
diff --git a/harness/RUNLOG.md b/harness/RUNLOG.md
index 6bb0b6c85..3a776d1f9 100644
--- a/harness/RUNLOG.md
+++ b/harness/RUNLOG.md
@@ -414,3 +414,78 @@ manifest: console 1b635e61 binary github.com/carlosframework/platform/cmd/consol
Check (`harness/checks/check7.sh`): under the test release public key the pointer verifies
(`canary/console 1b635e61 ... yes`); under a freshly minted other key the same read prints
`ERROR: channel pointer signature verification failed`. **Step 7: GREEN** (2026-10-20T01:14Z).
+
+## Step 8: the console on sophie, the Keymail stand-in, `auth login`, `system update`
+
+`harness/console/console-setup.sh` (on host, root, 01:16-01:21Z):
+- **Keymail stand-in** (`harness/stand-ins/keymail.py`) in infra on 203.0.113.10:8443, unit
+ `harness-keymail` (DynamicUser). Auto-approves `operator@keymail.dev`, checks PKCE, and
+ **advertises `reauth: true`** and returns `auth_time` for `prompt=login`. **Deviation from the
+ review**, which proposed `{"reauth":false}`: approving `carlos auth login` requires a step-up
+ (`stepup.go requireFreshAuth`), and `reauth:false` refuses it.
+- **console.service on sophie: reconstruction (H6, unverified)**, from the operator note
+ `dev-console-unit` and the code's needs: `User=carlos`, `EnvironmentFile=/etc/carlos/host.env`,
+ `ProtectSystem=strict`, `ReadWritePaths=/data`, `ExecStart=/opt/carlos/live/console.dev.harness.test serve`,
+ drop-in `release-key.conf` -> `/etc/carlos/release.env` (root 0600, the test release key).
+ `apps-domain.conf` (`PLATFORM_APPS_DOMAIN`) is left out. **H7**: `CONSOLE_ORIGIN=http://127.0.0.1:8090`,
+ `CONSOLE_ADDR=127.0.0.1:8090`, `CONSOLE_KEYMAIL=http://203.0.113.10:8443`, `CARLOS_CONSOLE_ID=dev-console`,
+ `CARLOS_SYSTEM_OPERATORS=operator@keymail.dev`, `CONSOLE_DB=/data/console/console.db`.
+- **H8 (seeded dev state)**: `CARLOS_SYSTEM_CHANNEL=canary` appended to sophie's host.env (dev's sophie
+ follows canary; the runbook assumes it); edge restarted.
+- The operator reaches the console through an incus proxy device on the host's loopback
+ (`listen=tcp:127.0.0.1:8090 -> sophie 127.0.0.1:8090, bind=host`): the CLI accepts `http://` only
+ for a loopback console (`auth.go normalizeConsole`).
+- The console route, as a box owns a named-unit console: `carlos add --app console --account-id bab
+ --addr 127.0.0.1:8090 --channel canary/console --unit console.service console.dev.harness.test`
+ (as carlos, `systemd-run -p EnvironmentFile=host.env`). First try used `--kind service`, which
+ `release.Adoptable` ignores (kind must be `instance`): removed and re-added.
+- Adoption: the agent staged 1b635e61 within 6 s, but its `try-restart console.service` as `carlos`
+ was refused by polkit ("Interactive authentication required") and it rolled the link back; the
+ unit's own `Restart=always` then started the console on the staged link, and root's
+ `carlos-adopt.service` pass recorded it (`1 staged, 1 pinned (1 live)`). **Observation for the
+ console unit question**: on dev something must let the agent restart `console.service`
+ (a polkit rule or a root path) that is in no repository either.
+- `console grant -operator operator@keymail.dev` (the console's admin verb), then a console restart,
+ because the ops-owner backfill runs at start: the upload door is owner-only.
+
+`harness/console/signin.sh` (operator): curl as the browser.
+
+```
+landed http://127.0.0.1:8090/a/bac/ 200 after 3 redirects <- /auth/signin -> stand-in -> /auth/callback
+carlos auth login (background), code DFXD-VF9A
+approve -> /auth/stepup/callback?code=...&state=... 200 after 2 redirects <- step-up through the stand-in
+auth login exit=0: Logged in to http://127.0.0.1:8090 as operator@keymail.dev. Token stored ... (mode 0600)
+```
+
+`harness/console/system-update.sh` (operator): runbook step 1 item 2 with one change, `--file`
+(the console's feed is the vendor's GitHub feed, `publicrelease.Default()`, not configurable from
+its environment, and the harness has no route to it):
+
+```
+carlos system update --console http://127.0.0.1:8090 --channel stable --version v0.28.5 --file ~/release-v0.28.5/carlos-linux-arm64 --platform linux-arm64 --yes
+ using uploaded v0.28.5 for linux-arm64 / mirrored bootstrap/router/v0.28.5/carlos-linux-arm64 / pointed router/stable at v0.28.5 (spread 5m0s)
+(same for canary)
+canary v0.28.5 promoted 2026-10-20T01:22:57Z spread 5m0s file
+stable v0.28.5 promoted 2026-10-20T01:22:56Z spread 5m0s file
+```
+
+Pointers carry source `file`, where dev's carry `release:v0.28.4`; `install-channel --identity`
+compares artefact sha256s, not the source.
+
+Check (01:27:41Z, `harness/checks/check8.sh`):
+
+```
+ada-letterpress linux-arm64 canary v0.28.5 current (sophie)
+kathleen-juggling linux-arm64 stable v0.28.5 current (leo)
+noor-marquetry linux-arm64 stable v0.28.5 current (dennis)
+leo/sophie/dennis: carlos v0.28.5, .prev carlos harness-f434a425 (the release before), sha256 111a317c... = SHA256SUMS
+console pid 928 exe /opt/carlos/versions/1b635e61/console sha256 b2b431f3... (= the v0.28.5-stamped build) active
+listener / -> 200, /healthz -> 200
+```
+
+Two parts of the review's check read differently here: `x-carlos-version` is stamped by the
+**edge**, not the console's listener, so with TLS cut tonight the version is proven by the running
+executable's sha256 (whose build stamp is `v0.28.5`, `go version -m`); and
+`status/consoles/dev-console.json` cannot exist before 5.1 (the console's census report needs
+`control/host-actors.json`: journal `host census report: ... control/host-actors.json: file does
+not exist`). It is checked after 5.1 (step 9). H10 was not needed. **Step 8: GREEN** (01:28Z).
diff --git a/harness/checks/check8.sh b/harness/checks/check8.sh
new file mode 100644
index 000000000..fea0011c2
--- /dev/null
+++ b/harness/checks/check8.sh
@@ -0,0 +1,5 @@
+incus exec sophie -- sh -c 'P=$(systemctl show -p MainPID --value console.service); echo "console pid $P exe $(readlink /proc/$P/exe) sha256 $(sha256sum /proc/$P/exe | cut -c1-16) $(systemctl is-active console.service)"'
+curl -s -o /dev/null -w 'listener / -> %{http_code}\n' http://127.0.0.1:8090/
+curl -s -o /dev/null -w 'listener /healthz -> %{http_code}\n' http://127.0.0.1:8090/healthz
+runuser -l operator -c 'aws s3 ls s3://harness-deployment/status/consoles/ 2>&1; aws s3 ls s3://harness-deployment/control/system/ --recursive 2>&1 | head'
+incus exec sophie -- journalctl -u console --no-pager --since -10min -o cat | grep -iE "host census|report|error" | tail -4 | cut -c1-200
diff --git a/harness/console/console-setup.sh b/harness/console/console-setup.sh
new file mode 100755
index 000000000..8ab4120ff
--- /dev/null
+++ b/harness/console/console-setup.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+# Step 8 (host side, root): the Keymail stand-in in infra; the console on sophie.
+# H6: dev's console.service is hand-written on sophie and in no repository, so
+# this is a reconstruction (memory note dev-console-unit; the console's own
+# env reads; console-report's unit checks), marked UNVERIFIED.
+# H7: the console's environment names harness hosts: origin http://127.0.0.1:8090
+# (the operator reaches it through an incus proxy on the host's loopback,
+# because the CLI accepts http:// only for a loopback console), Keymail the
+# stand-in, operator@keymail.dev on CARLOS_SYSTEM_OPERATORS.
+set -euo pipefail
+ROUTE=console.dev.harness.test
+ADDR=operator@keymail.dev
+T=$(mktemp -d); trap 'rm -rf "$T"' EXIT
+put() { cat > "$T/f"; incus file push "$T/f" "$1$2" --uid 0 --gid 0 --mode "$3" -q; }
+
+# Keymail stand-in, infra 203.0.113.10:8443.
+incus file push /opt/harness/keymail.py infra/usr/local/bin/keymail-standin --mode 0755 -q
+put infra /etc/systemd/system/harness-keymail.service 0644 <<U
+[Unit]
+Description=harness: Keymail stand-in (203.0.113.10:8443)
+After=network-online.target
+[Service]
+DynamicUser=yes
+LogsDirectory=harness-keymail
+Environment=KEYMAIL_ADDRESS=$ADDR KEYMAIL_LOG=/var/log/harness-keymail/keymail.jsonl
+ExecStart=/usr/bin/python3 /usr/local/bin/keymail-standin
+Restart=always
+[Install]
+WantedBy=multi-user.target
+U
+incus exec infra -- sh -c 'systemctl daemon-reload && systemctl enable --now harness-keymail >/dev/null 2>&1; systemctl is-active harness-keymail'
+
+# sophie: the reconstructed unit and its two drop-ins.
+put sophie /etc/systemd/system/console.service 0644 <<U
+# HARNESS RECONSTRUCTION (H6, unverified): dev's console.service is hand-written
+# on sophie-knitting and in no repository.
+[Unit]
+Description=CARLOS platform console
+After=network-online.target carlos-edge.service
+Wants=network-online.target
+
+[Service]
+User=carlos
+Group=carlos
+EnvironmentFile=/etc/carlos/host.env
+Environment=CONSOLE_ORIGIN=http://127.0.0.1:8090
+Environment=CONSOLE_ADDR=127.0.0.1:8090
+Environment=CONSOLE_DB=/data/console/console.db
+Environment=CONSOLE_KEYMAIL=http://203.0.113.10:8443
+Environment=CARLOS_CONSOLE_ID=dev-console
+Environment=CARLOS_SYSTEM_OPERATORS=$ADDR
+ExecStart=/opt/carlos/live/$ROUTE serve
+Restart=always
+RestartSec=2
+NoNewPrivileges=yes
+ProtectSystem=strict
+ReadWritePaths=/data
+PrivateTmp=yes
+
+[Install]
+WantedBy=multi-user.target
+U
+incus exec sophie -- install -d -m 0755 /etc/systemd/system/console.service.d
+put sophie /etc/systemd/system/console.service.d/release-key.conf 0644 <<'U'
+[Service]
+EnvironmentFile=-/etc/carlos/release.env
+U
+# release.env: the test release key, root:root 0600 (README "The dev console needs its release key first").
+(umask 077; grep '^CARLOS_RELEASE_KEY=' /run/harness/keys/release.env > $T/release.env)
+incus file push $T/release.env sophie/etc/carlos/release.env --uid 0 --gid 0 --mode 0600 -q
+rm -f $T/release.env
+# Dev state the runbook assumes (P3/6.1a): sophie follows the canary system channel. (H8, seeded)
+incus exec sophie -- sh -c 'grep -q "^CARLOS_SYSTEM_CHANNEL=" /etc/carlos/host.env || echo CARLOS_SYSTEM_CHANNEL=canary >> /etc/carlos/host.env'
+incus exec sophie -- sh -c 'install -d -o carlos -g carlos -m 0750 /data/console && systemctl daemon-reload && systemctl enable console.service 2>&1 | tail -1'
+incus exec sophie -- systemctl restart carlos-edge # the edge rereads host.env (system channel)
+
+# The operator's door to the console: host 127.0.0.1:8090 -> sophie's loopback.
+incus config device show sophie | grep -q '^console-door:' || \
+ incus config device add sophie console-door proxy listen=tcp:127.0.0.1:8090 connect=tcp:127.0.0.1:8090 bind=host >/dev/null
+
+# The console route, the way a box owns a named-unit console: sophie's agent
+# stages, adopts and restarts console.service from canary/console.
+incus exec sophie -- systemd-run --quiet --wait --pipe -p EnvironmentFile=/etc/carlos/host.env -p User=carlos \
+ /opt/carlos/carlos add --app console --account-id bab --addr 127.0.0.1:8090 \
+ --channel canary/console --unit console.service $ROUTE
+for i in $(seq 1 90); do incus exec sophie -- test -e /opt/carlos/live/$ROUTE && break; sleep 2; done
+echo "live link: $(incus exec sophie -- readlink /opt/carlos/live/$ROUTE)"
+incus exec sophie -- systemctl start console.service
+for i in $(seq 1 30); do incus exec sophie -- test -e /data/console/console.db && curl -sf -o /dev/null http://127.0.0.1:8090/healthz && break; sleep 1; done
+# The operator address owns the ops account (console's own admin verb).
+incus exec sophie -- runuser -u carlos -- env CONSOLE_DB=/data/console/console.db /opt/carlos/live/$ROUTE grant -operator $ADDR
+echo "console: $(incus exec sophie -- systemctl is-active console.service) exe=$(incus exec sophie -- sh -c 'readlink /proc/$(systemctl show -p MainPID --value console.service)/exe')"
+curl -s -o /dev/null -D - http://127.0.0.1:8090/ | grep -iE '^HTTP|x-carlos-version'
diff --git a/harness/console/signin.sh b/harness/console/signin.sh
new file mode 100644
index 000000000..eaba28266
--- /dev/null
+++ b/harness/console/signin.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+# Step 8 (operator shell): sign in to the console as the harness operator
+# through the Keymail stand-in, with curl as the browser, then approve
+# `carlos auth login`'s code. The approval asks for a step-up (a fresh
+# Keymail ceremony, prompt=login), which the stand-in answers with auth_time.
+# Run as `operator` on the host. Prints no token: only cookie and token presence.
+set -euo pipefail
+C=http://127.0.0.1:8090
+W=$(mktemp -d); trap 'rm -rf "$W"' EXIT
+J=$W/jar
+cj() { curl -s -c "$J" -b "$J" "$@"; }
+
+echo "== browser sign-in"
+cj -L -o "$W/landing.html" -w 'landed %{url_effective} %{http_code} after %{num_redirects} redirects\n' "$C/auth/signin"
+SESSION=$(awk '$6=="carlos_console_session"{print $7}' "$J")
+[ -n "$SESSION" ] && echo "session cookie: present" || { echo "no session cookie"; exit 1; }
+
+echo "== carlos auth login (background)"
+carlos auth login --console "$C" > "$W/login.out" 2>&1 &
+LP=$!
+for i in $(seq 1 20); do grep -q "type this code" "$W/login.out" 2>/dev/null && break; sleep 0.5; done
+CODE=$(sed -n '/type this code/{n;n;p}' "$W/login.out" | tr -d ' \033' | sed 's/\[[0-9;]*m//g')
+echo "code: $CODE"
+
+echo "== approve (first POST meets the step-up; the ceremony runs through the stand-in)"
+cj -L -o "$W/approve1.html" -w 'approve -> %{url_effective} %{http_code} after %{num_redirects} redirects\n' \
+ --data-urlencode "code=$CODE" --data-urlencode "action=approve" --data-urlencode "csrf=$SESSION" "$C/auth/cli/approve"
+for i in $(seq 1 10); do kill -0 $LP 2>/dev/null || break; sleep 1; done
+if kill -0 $LP 2>/dev/null; then
+ echo "== approve again (step-up now fresh)"
+ cj -L -o "$W/approve2.html" -w 'approve -> %{url_effective} %{http_code}\n' \
+ --data-urlencode "code=$CODE" --data-urlencode "action=approve" --data-urlencode "csrf=$SESSION" "$C/auth/cli/approve"
+fi
+wait $LP; echo "auth login exit=$?"
+sed 's/\x1b\[[0-9;]*m//g' "$W/login.out" | grep -v '^\s*$' | tail -3
+carlos auth whoami --console "$C" 2>&1 | tail -2 || true
diff --git a/harness/console/system-update.sh b/harness/console/system-update.sh
new file mode 100755
index 000000000..6c1b79261
--- /dev/null
+++ b/harness/console/system-update.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+# Step 8 (operator shell): runbook step 1 item 2, the "new road", with the
+# harness's one change: --file (the console has no route to the public
+# release feed, and its feed is not configurable from its environment).
+set -euo pipefail
+C=http://127.0.0.1:8090
+F=~/release-v0.28.5/carlos-linux-arm64
+carlos system status --console $C
+carlos system update --console $C --channel stable --version v0.28.5 --file $F --platform linux-arm64 --yes
+carlos system update --console $C --channel canary --version v0.28.5 --file $F --platform linux-arm64 --yes
+carlos system status --console $C
diff --git a/harness/stand-ins/keymail.py b/harness/stand-ins/keymail.py
new file mode 100644
index 000000000..432715ba3
--- /dev/null
+++ b/harness/stand-ins/keymail.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python3
+"""Keymail stand-in (spec §3.10). Python 3 standard library only.
+
+Runs in the infra container on 203.0.113.10:8443 (plain http; the console
+calls it server-to-server, the operator's browser-less curl follows its
+redirects). It signs in ONE address, auto-approving, and nothing else:
+
+ GET /.well-known/keymail {"reauth": true}: step-up is offered, because
+ approving `carlos auth login` requires it
+ (console stepup.go requireFreshAuth)
+ GET /oauth/authorize 302 to redirect_uri?code=&state= at once; the
+ code remembers client_id, redirect_uri, the
+ S256 challenge, and whether prompt=login asked
+ for a fresh gesture
+ POST /api/oauth/token checks code, client_id, redirect_uri and the
+ PKCE verifier; returns access_token,
+ token_type bearer, address, and auth_time (now)
+ for a prompt=login code
+ POST /api/oauth/revoke 200, always
+ POST /api/app/send 503 (console mail is off, runbook P9)
+
+Every request is logged as one JSON line (path, client, status; never a token)
+to /var/log/harness/keymail.jsonl.
+"""
+import base64, hashlib, http.server, json, os, secrets, sys, threading, time, urllib.parse
+
+ADDRESS = os.environ.get("KEYMAIL_ADDRESS", "operator@keymail.dev")
+BIND = (os.environ.get("KEYMAIL_ADDR", "203.0.113.10"), int(os.environ.get("KEYMAIL_PORT", "8443")))
+LOG = os.environ.get("KEYMAIL_LOG", "/var/log/harness/keymail.jsonl")
+codes, lock = {}, threading.Lock()
+
+
+def log(rec):
+ rec["t"] = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
+ try:
+ with open(LOG, "a") as f:
+ f.write(json.dumps(rec) + "\n")
+ except OSError:
+ pass
+
+
+class H(http.server.BaseHTTPRequestHandler):
+ protocol_version = "HTTP/1.1"
+
+ def out(self, status, obj=None, headers=None):
+ body = b"" if obj is None else json.dumps(obj).encode()
+ self.send_response(status)
+ for k, v in (headers or {}).items():
+ self.send_header(k, v)
+ if obj is not None:
+ self.send_header("Content-Type", "application/json")
+ self.send_header("Content-Length", str(len(body)))
+ self.end_headers()
+ self.wfile.write(body)
+ log({"method": self.command, "path": self.path.split("?")[0], "status": status})
+
+ def body(self):
+ n = int(self.headers.get("Content-Length") or 0)
+ raw = self.rfile.read(n) if n else b""
+ ctype = self.headers.get("Content-Type", "")
+ if "json" in ctype:
+ return json.loads(raw or b"{}")
+ return {k: v[0] for k, v in urllib.parse.parse_qs(raw.decode()).items()}
+
+ def do_GET(self):
+ u = urllib.parse.urlsplit(self.path)
+ if u.path == "/.well-known/keymail":
+ return self.out(200, {"reauth": True})
+ if u.path == "/oauth/authorize":
+ q = {k: v[0] for k, v in urllib.parse.parse_qs(u.query).items()}
+ if q.get("code_challenge_method") != "S256" or not q.get("redirect_uri") or not q.get("state"):
+ return self.out(400, {"error": "invalid_request"})
+ code = secrets.token_urlsafe(24)
+ with lock:
+ codes[code] = {"client_id": q.get("client_id", ""), "redirect_uri": q["redirect_uri"],
+ "challenge": q.get("code_challenge", ""), "fresh": q.get("prompt") == "login",
+ "exp": time.time() + 120}
+ sep = "&" if "?" in q["redirect_uri"] else "?"
+ loc = q["redirect_uri"] + sep + urllib.parse.urlencode({"code": code, "state": q["state"]})
+ return self.out(302, None, {"Location": loc})
+ return self.out(404, {"error": "not_found"})
+
+ def do_POST(self):
+ u = urllib.parse.urlsplit(self.path)
+ try:
+ req = self.body()
+ except ValueError:
+ return self.out(400, {"error": "invalid_request"})
+ if u.path == "/api/oauth/token":
+ with lock:
+ c = codes.pop(req.get("code", ""), None)
+ if not c or c["exp"] < time.time() or c["client_id"] != req.get("client_id") or c["redirect_uri"] != req.get("redirect_uri"):
+ return self.out(400, {"error": "invalid_grant"})
+ want = base64.urlsafe_b64encode(hashlib.sha256(req.get("code_verifier", "").encode()).digest()).rstrip(b"=").decode()
+ if want != c["challenge"]:
+ return self.out(400, {"error": "invalid_grant", "error_description": "pkce"})
+ out = {"access_token": secrets.token_urlsafe(32), "token_type": "bearer", "scope": "",
+ "address": ADDRESS}
+ if c["fresh"]:
+ out["auth_time"] = int(time.time())
+ return self.out(200, out)
+ if u.path == "/api/oauth/revoke":
+ return self.out(200, {})
+ if u.path == "/api/app/send":
+ return self.out(503, {"error": "console mail is off in the harness"})
+ return self.out(404, {"error": "not_found"})
+
+ def log_message(self, *a):
+ pass
+
+
+if __name__ == "__main__":
+ os.makedirs(os.path.dirname(LOG), exist_ok=True)
+ print(f"keymail stand-in on {BIND[0]}:{BIND[1]} for {ADDRESS}", flush=True)
+ http.server.ThreadingHTTPServer(BIND, H).serve_forever()