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>
6 files changed,
+335
−0
harness/RUNLOG.md+75 −0harness/checks/check8.sh+5 −0harness/console/console-setup.sh+93 −0harness/console/signin.sh+36 −0harness/console/system-update.sh+11 −0harness/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() |