registry: Route.Runtime column (rootfs apps plan 2, task 2; contract deviation 1)
runtime TEXT NOT NULL DEFAULT '', RuntimeRootfsV1, ValidRuntime. Fixed at insert: a conflict keeps the stored value except on a re-tenanted host (preflight 2.2). No setter. In snapshotWhenSetCols so SnapshotFingerprint does not move at upgrade (preflight 2.3). Migration appended after import_gate.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3 files changed,
+255
−10
internal/registry/registry.go+38 −10internal/registry/registry_test.go+203 −0internal/registry/testdata/routes-before-runtime.sql+14 −0
CI failed — run details
CI log
=== gate ===
.amadan/test-gate.sh
=== launchctx (1 s)
ok amadan.net/carlos/platform.git/launchctx 0.013s
? amadan.net/carlos/platform.git/launchctx/controlname [no test files]
? amadan.net/carlos/platform.git/launchctx/wireid [no test files]
=== vet (18 s)
=== gofmt (1 s)
gofmt -l .: clean
=== rest (72 s)
? github.com/carlosframework/platform/cmd/changelog [no test files]
ok github.com/carlosframework/platform/cmd/console 3.906s
ok github.com/carlosframework/platform/cmd/moveprobe 11.981s
ok github.com/carlosframework/platform/cmd/zddprobe 0.792s
ok github.com/carlosframework/platform/internal/activator 59.315s
ok github.com/carlosframework/platform/internal/agentsock 0.029s
ok github.com/carlosframework/platform/internal/alerting 0.013s
ok github.com/carlosframework/platform/internal/analytics 0.048s
ok github.com/carlosframework/platform/internal/appconfig 3.164s
ok github.com/carlosframework/platform/internal/apperr 0.156s
ok github.com/carlosframework/platform/internal/applog 0.320s
ok github.com/carlosframework/platform/internal/assetcache 0.168s
ok github.com/carlosframework/platform/internal/awsinv 0.007s
ok github.com/carlosframework/platform/internal/boxchoice 0.006s
ok github.com/carlosframework/platform/internal/boxid 1.016s
? 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.011s
ok github.com/carlosframework/platform/internal/caps 0.021s
ok github.com/carlosframework/platform/internal/certwarm 0.005s
ok github.com/carlosframework/platform/internal/cgroup 0.848s
ok github.com/carlosframework/platform/internal/changelog 0.616s
ok github.com/carlosframework/platform/internal/claimactivation 1.460s
ok github.com/carlosframework/platform/internal/clamd 0.058s
? github.com/carlosframework/platform/internal/cliflag [no test files]
? github.com/carlosframework/platform/internal/controlname [no test files]
? github.com/carlosframework/platform/internal/controlsock [no test files]
ok github.com/carlosframework/platform/internal/dbdoor 8.289s
ok github.com/carlosframework/platform/internal/dbdoor/dbdoortest 0.018s
ok github.com/carlosframework/platform/internal/dbquery 0.015s
ok github.com/carlosframework/platform/internal/dbreads 2.116s
? github.com/carlosframework/platform/internal/dbreads/dbreadstest [no test files]
ok github.com/carlosframework/platform/internal/dbverify 0.012s
ok github.com/carlosframework/platform/internal/dnsrec 0.006s
ok github.com/carlosframework/platform/internal/docsite 0.012s
ok github.com/carlosframework/platform/internal/domains 3.131s
ok github.com/carlosframework/platform/internal/doorkey 0.006s
ok github.com/carlosframework/platform/internal/economics 0.008s
ok github.com/carlosframework/platform/internal/edge 45.494s
? github.com/carlosframework/platform/internal/edgeproof [no test files]
ok github.com/carlosframework/platform/internal/edgesfile 0.016s
ok github.com/carlosframework/platform/internal/fleetapi 0.170s
ok github.com/carlosframework/platform/internal/gate 1.707s
ok github.com/carlosframework/platform/internal/genselect 0.017s
ok github.com/carlosframework/platform/internal/geo 0.018s
ok github.com/carlosframework/platform/internal/geoip 0.035s
ok github.com/carlosframework/platform/internal/historyreadback 0.243s
ok github.com/carlosframework/platform/internal/hostactors 6.142s
ok github.com/carlosframework/platform/internal/hostactors/awsmembership 0.017s
ok github.com/carlosframework/platform/internal/hostbox 2.808s
ok github.com/carlosframework/platform/internal/hostclaim 0.622s
ok github.com/carlosframework/platform/internal/hostenv 0.016s
ok github.com/carlosframework/platform/internal/hostevidence 0.017s
ok github.com/carlosframework/platform/internal/hostexec 5.112s
ok github.com/carlosframework/platform/internal/hostfence 0.032s
ok github.com/carlosframework/platform/internal/hostfiles 10.488s
ok github.com/carlosframework/platform/internal/hostfloor 0.038s
ok github.com/carlosframework/platform/internal/hostguard 1.052s
ok github.com/carlosframework/platform/internal/hostops 1.769s
? github.com/carlosframework/platform/internal/hostops/fencerelease [no test files]
ok github.com/carlosframework/platform/internal/hostops/internal/fencerelease 0.017s
ok github.com/carlosframework/platform/internal/hostquarantine 0.004s
ok github.com/carlosframework/platform/internal/hostrelocate 0.513s
ok github.com/carlosframework/platform/internal/hostresolve 0.146s
ok github.com/carlosframework/platform/internal/hostwrite 0.018s
ok github.com/carlosframework/platform/internal/infraview 0.019s
ok github.com/carlosframework/platform/internal/instancectl 5.240s
ok github.com/carlosframework/platform/internal/instanceexec 2.810s
ok github.com/carlosframework/platform/internal/instancefs 0.005s
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.624s
ok github.com/carlosframework/platform/internal/lbhealth 0.006s
ok github.com/carlosframework/platform/internal/lease 10.086s
ok github.com/carlosframework/platform/internal/lease/leasetest 0.435s
ok github.com/carlosframework/platform/internal/ledger 0.016s
ok github.com/carlosframework/platform/internal/mail 0.213s
ok github.com/carlosframework/platform/internal/maintenance 0.085s
ok github.com/carlosframework/platform/internal/maintenanceexec 5.554s
ok github.com/carlosframework/platform/internal/maintenanceguard 0.090s
ok github.com/carlosframework/platform/internal/metrics 0.008s
ok github.com/carlosframework/platform/internal/moves 22.868s
ok github.com/carlosframework/platform/internal/moves/archive 0.857s
ok github.com/carlosframework/platform/internal/objstore 0.258s
ok github.com/carlosframework/platform/internal/ops 0.215s
ok github.com/carlosframework/platform/internal/park 0.232s
ok github.com/carlosframework/platform/internal/plans 0.006s
ok github.com/carlosframework/platform/internal/privatefile 0.005s
2026/10/25 10:49:57 provision: listing apps/bab/blog/instances/: list refused — its records are unseen this pass
2026/10/25 10:49:57 provision: listing apps/bab/: listdirs refused — its records are unseen this pass
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/25 10:49:57 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/25 10:49:57 provision: skipping record apps/bac/tito/instances/one.example.com.json: unreadable: read refused
2026/10/25 10:49:57 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/25 10:49:57 provision: an app's records could not be listed: they are skipped
2026/10/25 10:49:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:49:57 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/25 10:49:57 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/25 10:49:57 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/25 10:49:57 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/25 10:49:57 provision: claim install acme.go.tito.io: provision: claim admission unavailable
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/25 10:49:57 provision: claim install bot.eleven.bac.sidecar.internal: provision: claim admission unavailable
2026/10/25 10:49:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/25 10:49:57 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/25 10:49: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/25 10:49:57 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: no sealed config
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49: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/25 10:49:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/25 10:49:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/25 10:49: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/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49: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/25 10:49:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/25 10:49:57 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/25 10:49: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/25 10:49:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/25 10:49:57 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/25 10:49:57 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 10:49: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/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:49:57 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:57 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:49:57 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:49:57 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 10:49:57 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:49:57 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:49:58 provision: minted instance route rf.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route rg.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route ri.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route rk.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route rl.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route rh.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route rj.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/25 10:49:58 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/25 10:49:58 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route x.appi.example (app "appi" acct "bac")
2026/10/25 10:49:58 provision: minted instance route x.appj.example (app "appj" acct "bac")
2026/10/25 10:49:58 provision: minted instance route x.appa.example (app "appa" acct "bac")
2026/10/25 10:49:58 provision: minted instance route x.appe.example (app "appe" acct "bac")
2026/10/25 10:49:58 provision: minted instance route x.appf.example (app "appf" acct "bac")
2026/10/25 10:49:58 provision: minted instance route x.appg.example (app "appg" acct "bac")
2026/10/25 10:49:58 provision: minted instance route x.apph.example (app "apph" acct "bac")
2026/10/25 10:49:58 provision: minted instance route x.appb.example (app "appb" acct "bac")
2026/10/25 10:49:58 provision: minted instance route x.appc.example (app "appc" acct "bac")
2026/10/25 10:49:58 provision: minted instance route x.appd.example (app "appd" acct "bac")
2026/10/25 10:49:58 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 10:49:58 provision: minted instance route r0013.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0042.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0068.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0109.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0085.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0044.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0104.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0123.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0010.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0025.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0056.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0036.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0014.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0021.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0066.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0076.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0049.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0093.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0028.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0097.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0107.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0016.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0029.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0038.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0084.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0054.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0022.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0048.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0113.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0124.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0055.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0015.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0057.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0086.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0088.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0027.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0030.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0073.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0035.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0090.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0105.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0005.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0047.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0067.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0069.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0077.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0091.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0103.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0111.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0043.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0065.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0079.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0108.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0026.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0009.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0050.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0096.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0116.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0071.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0075.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0126.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0129.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0053.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0002.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0023.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0024.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0045.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0112.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0121.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0040.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0095.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0098.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0006.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0011.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0020.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0041.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0063.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0094.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0127.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0000.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0018.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0037.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0046.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0083.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0110.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0115.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0008.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0059.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0062.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0072.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0082.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0101.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0122.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0128.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0004.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0017.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0064.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0087.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0092.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0100.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0118.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0119.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0061.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0120.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0125.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0102.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0019.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0039.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0051.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0058.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0070.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0031.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0032.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0033.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0078.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0080.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0052.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0001.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0074.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0081.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0034.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0060.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0106.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0089.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0114.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0117.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0003.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0007.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0012.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:58 provision: minted instance route r0099.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 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/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route console.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted service route svc.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route whole.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route shared.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: converged acme.go.tito.io channel stable -> edge
2026/10/25 10:49:59 provision: converged acme.go.tito.io channel edge -> canary/rehearsal
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: empty channel
2026/10/25 10:49:59 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: converged acme.go.tito.io environment "" -> "staging"
2026/10/25 10:49:59 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: converged acme.go.tito.io steering "" -> "latency"
2026/10/25 10:49:59 provision: converged acme.go.tito.io steering "latency" -> ""
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: converged acme.go.tito.io hibernate false -> true
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: converged acme.go.tito.io hibernate true -> false (replication "daily" cleared: only a hibernating route's rung is read)
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: converged acme.go.tito.io status-named false -> true
2026/10/25 10:49:59 provision: converged acme.go.tito.io status-named true -> false
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 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/25 10:49:59 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/25 10:49:59 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/25 10:49:59 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 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/25 10:49:59 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/25 10:49:59 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/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: skipping accounts/bac/account.json: malformed account manifest: invalid character 'o' in literal null (expecting 'u')
2026/10/25 10:49:59 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 provision: manifest bac/tito: read failed: provision: manifest bac/tito: invalid character 'o' in literal null (expecting 'u')
2026/10/25 10:49:59 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/25 10:49:59 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/25 10:49:59 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:49:59 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/25 10:49:59 provision: not removing acme$evil.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 10:50:00 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/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 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/25 10:50:00 provision: not removing bad-service.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 10:50:00 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/25 10:50:00 provision: not removing no-channel.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:00 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 10:50:00 provision: removed retired instance route ghost.go.tito.io (record gone)
2026/10/25 10:50:00 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/25 10:50:00 provision: minted instance route dup.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 10:50:00 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/25 10:50:00 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 10:50:00 provision: removed retired static route site.go.tito.io (app in the trash)
2026/10/25 10:50:00 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/25 10:50:00 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 10:50:00 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/25 10:50:00 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 10:50:00 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/25 10:50:00 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 10:50:00 provision: converged acme.go.tito.io channel stable -> edge
2026/10/25 10:50:00 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 10:50:00 provision: converged acme.go.tito.io channel canary/rehearsal -> edge
2026/10/25 10:50:00 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/25 10:50:00 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/25 10:50:00 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/25 10:50:00 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/25 10:50:00 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/25 10:50:00 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/25 10:50:00 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/25 10:50:00 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/25 10:50:00 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 10:50:00 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/25 10:50:00 provision: dry-run: would mint instance route acme.go.tito.io (app "tito" acct "bac" channel "stable")
2026/10/25 10:50:00 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/25 10:50:00 provision: dry-run: would converge adopt.go.tito.io channel stable -> edge
2026/10/25 10:50:00 provision: dry-run: would converge adopt.go.tito.io environment "" -> "staging"
2026/10/25 10:50:00 provision: dry-run: would converge owned.go.tito.io channel stable -> edge
2026/10/25 10:50:00 provision: dry-run: would converge owned.go.tito.io environment "" -> "staging"
2026/10/25 10:50:00 provision: dry-run: would converge owned.go.tito.io hibernate false -> true
2026/10/25 10:50:00 provision: dry-run: would converge owned.go.tito.io seed
2026/10/25 10:50:00 provision: dry-run: would remove retired instance route gone.go.tito.io (record gone)
2026/10/25 10:50:00 provision: converged owned.go.tito.io channel stable -> edge
2026/10/25 10:50:00 provision: converged owned.go.tito.io environment "" -> "staging"
2026/10/25 10:50:00 provision: converged owned.go.tito.io hibernate false -> true
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: adopted existing route adopt.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 10:50:00 provision: converged adopt.go.tito.io channel stable -> edge
2026/10/25 10:50:00 provision: converged adopt.go.tito.io environment "" -> "staging"
2026/10/25 10:50:00 provision: removed retired instance route gone.go.tito.io (record gone)
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: adopted existing route story.carlosframework.com (app "story" acct "bad") — this record now owns its channel and environment
2026/10/25 10:50:00 provision: story.carlosframework.com exists but is not the route this record describes (kind "instance"/"static") — leaving it alone
2026/10/25 10:50:00 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted service route pub.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted service route pubs.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route exec.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted service route loop.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted service route named.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted service route priv.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route unit.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted static route pisite.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: removed retired static route site.go.tito.io (record gone)
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: converged acme.go.tito.io replicas "ie,uk" -> "uk"
2026/10/25 10:50:00 provision: converged acme.go.tito.io replicas "uk" -> ""
2026/10/25 10:50:00 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: converged acme-uk.go.tito.io replica mark true -> false
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 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/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:00 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/25 10:50:00 provision: router.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/25 10:50:00 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 10:50:00 provision: converged acme.go.tito.io channel stable -> edge
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/25 10:50:00 provision: not removing acme.go.tito.io (record gone): participant of a running operation
2026/10/25 10:50:00 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/25 10:50:00 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/25 10:50:00 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/25 10:50:00 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/25 10:50:00 provision: acme.go.tito.io: held restoring by rb_other, not by mv_acme; leaving it
2026/10/25 10:50:00 provision: acme.go.tito.io: the row is not this pass's (app "other" acct ""); not holding it for mv_acme
2026/10/25 10:50:00 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/25 10:50:00 provision: dry-run: would mint instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac" channel "stable")
2026/10/25 10:50:01 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/25 10:50:01 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/25 10:50:01 provision: minted instance route acme.example.com (app "shop" acct "bac")
2026/10/25 10:50:01 provision: minted instance route plain.example.com (app "shop" acct "bac")
2026/10/25 10:50:01 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:01 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/25 10:50:01 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:01 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/25 10:50:01 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:01 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/25 10:50:01 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:01 provision: listing apps/bac/shop/instances/: list refused — its records are unseen this pass
2026/10/25 10:50:01 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:01 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:01 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/25 10:50:01 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:01 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 10:50:02 provision: minted sidecar route bot.shop.bac.sidecar.internal (app "shop" acct "bac" args ["run"])
2026/10/25 10:50:02 provision: removed retired sidecar route bot.shop.bac.sidecar.internal (record gone)
2026/10/25 10:50:02 provision: minted sidecar route bot.shop.bum.sidecar.internal (app "shop" acct "bum" args ["run"])
2026/10/25 10:50:02 provision: sidecar bot.shop.bum.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/25 10:50:02 provision: minted sidecar route bot.shop.bum.sidecar.internal (app "shop" acct "bum" args ["run"])
2026/10/25 10:50:02 provision: sidecar bot.shop.bum.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/25 10:50:02 provision: removed retired sidecar route bot.shop.bum.sidecar.internal (record gone)
2026/10/25 10:50:02 provision: sidecar bot.shop.bum.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/25 10:50:02 provision: sidecar bot.shop.bum.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/25 10:50:02 provision: removed retired sidecar route bot.shop.bum.sidecar.internal (record gone)
2026/10/25 10:50:02 provision: a.shop.example.com: swapped for import sd_gnhod36vzkdj2xmlrlpxkum44q (the original route is journaled)
2026/10/25 10:50:02 provision: a.shop.example.com: import sd_gnhod36vzkdj2xmlrlpxkum44q committed: its gate is cleared and its journal row dropped
2026/10/25 10:50:02 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/25 10:50:02 provision: a.shop.example.com: import sd_tzujq7b26osbqisetgw2qp2ude rolled back to its original route
2026/10/25 10:50:02 provision: a.shop.example.com: import sd_tzujq7b26osbqisetgw2qp2ude: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/25 10:50:02 provision: a.shop.example.com: import sd_tzujq7b26osbqisetgw2qp2ude is cleaned up and its journal row retired
2026/10/25 10:50:02 provision: a.shop.example.com: import sd_sg3cud27jqis5soyrohkzo43gq rolled back to its original route
2026/10/25 10:50:02 provision: a.shop.example.com: import sd_sg3cud27jqis5soyrohkzo43gq: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/25 10:50:02 provision: a.shop.example.com: import sd_sg3cud27jqis5soyrohkzo43gq is cleaned up and its journal row retired
2026/10/25 10:50:02 provision: dry-run: would redo a.shop.example.com's swap record CAS for import sd_ei44xhy533wji53sxfdrrrnruq
2026/10/25 10:50:02 provision: dry-run: would clear a.shop.example.com's import gate
2026/10/25 10:50:02 provision: dry-run: would converge a.shop.example.com seed source
2026/10/25 10:50:02 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/25 10:50:02 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/25 10:50:02 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/25 10:50:02 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/25 10:50:02 provision: a.shop.example.com: import sd_ntpipogytfjm36o5gzplkez43u cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/25 10:50:02 provision: a.shop.example.com: import sd_ync5rm4xgkubva5gng4o4cjy2q cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/25 10:50:02 provision: a.shop.example.com: import sd_uwbv7xmp7rek6yhvnkqum2fwyy is journaled, but this box cannot act on imports; its row is left alone
2026/10/25 10:50:02 provision: a.shop.example.com: import sd_r7ugbwhbyr7h2bcszvfto2itwq is journaled, but this box cannot act on imports; its row is left alone
2026/10/25 10:50:02 provision: a.shop.example.com: import sd_i3qfxnlqp33rekntlcl35xlmvy is journaled, but this box cannot act on imports; its row is left alone
2026/10/25 10:50:02 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/25 10:50:02 provision: b.shop.example.com: import sd_k6p6nuxieaq4edymcspcjpvbmu left alone this pass: the import journal could not be read
2026/10/25 10:50:02 provision: c.shop.example.com: import sd_fznuuudawwhgbgagq45i2ndo4m left alone this pass: the import journal could not be read
2026/10/25 10:50:02 provision: a.shop.example.com: import sd_nok7evwqpvbthnpobhpncr4e2e committed: its gate is cleared and its journal row dropped
2026/10/25 10:50:02 provision: a.shop.example.com: not converging import sd_bemaz4zymuf6cvegmioccofzs4: it is swapped but not committed, and the row on this box has no import gate
2026/10/25 10:50:03 provision: a.shop.example.com: not converging import sd_v7owv3lmrivaenxryzjpemga3e: it is swapped but not committed, and the row on this box has no import gate
2026/10/25 10:50:03 provision: a.shop.example.com: not converging import sd_m3clvztixal66kz3gntevwlsi4: it is placed but not committed, and the row on this box has no import gate
2026/10/25 10:50:03 provision: a.shop.example.com: not converging import sd_zwhppoy36ntti3qawskhpxpm34: it is placed but not committed, and the row on this box has no import gate
2026/10/25 10:50:03 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/25 10:50:03 provision: converge seed source on a.shop.example.com: constraint failed: seed_source is read-only here (1811)
2026/10/25 10:50:03 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/25 10:50:03 provision: a.shop.example.com: import sd_uvj6bwcwiy5rk7tww3o2byuuhu committed: its gate is cleared and its journal row dropped
2026/10/25 10:50:03 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/25 10:50:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:03 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/25 10:50:03 provision: acme.go.tito.io: not minting a seeded instance: this box does not mint nested (<nil>)
2026/10/25 10:50:03 provision: acme.go.tito.io: not minting a seeded instance: claim control is on for this box
2026/10/25 10:50:03 provision: acme.go.tito.io: aborted seed sd_3abuy3pcbbhjfqxgcrbojrysvu: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/25 10:50:03 provision: acme.go.tito.io: aborted seed sd_3abuy3pcbbhjfqxgcrbojrysvu rolled back (no box had swapped it)
2026/10/25 10:50:03 provision: acme.go.tito.io: not minting a seeded instance: its record does not describe a hibernating instance
2026/10/25 10:50:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:03 provision: removed instance route acme.go.tito.io (its seed sd_plyxivh6i4uwtoav2x4f562epi was aborted); the next pass rolls it back
2026/10/25 10:50:03 provision: acme.go.tito.io: aborted seed sd_plyxivh6i4uwtoav2x4f562epi: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/25 10:50:03 provision: acme.go.tito.io: aborted seed sd_plyxivh6i4uwtoav2x4f562epi rolled back (no box had swapped it)
2026/10/25 10:50:03 provision: acme.go.tito.io: aborted seed sd_nlpglixpje4sy77snci6mvhvra has a row this pass may not remove; leaving the seed aborted
2026/10/25 10:50:03 provision: acme.go.tito.io: aborted seed sd_b2c55oxjxexqr6w6cxwrfg63cy rolled back (no box had swapped it)
2026/10/25 10:50:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:03 provision: removed instance route acme.go.tito.io (its seed sd_k3433dawisdyvraplovzdumare was aborted); the next pass rolls it back
2026/10/25 10:50:03 provision: acme.go.tito.io: aborted seed sd_k3433dawisdyvraplovzdumare has no route on this box: its local data is removed
2026/10/25 10:50:03 provision: acme.go.tito.io: aborted seed sd_k3433dawisdyvraplovzdumare rolled back (no box had swapped it)
2026/10/25 10:50:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_6wzqn74q7w5cmemqxauaq4lvt4 (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_6wzqn74q7w5cmemqxauaq4lvt4 rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_6wzqn74q7w5cmemqxauaq4lvt4 is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_pf5czkp52ulgntr7qymui4sybe (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_pf5czkp52ulgntr7qymui4sybe rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_pf5czkp52ulgntr7qymui4sybe is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_2pv33svr7zytayxvqatvyuxoeq (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_2pv33svr7zytayxvqatvyuxoeq rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_2pv33svr7zytayxvqatvyuxoeq: the host's replica is left alone: its record no longer names this seed
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_2pv33svr7zytayxvqatvyuxoeq is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_gk4cysr533vma7zgkjja77yehu (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_gk4cysr533vma7zgkjja77yehu rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_gk4cysr533vma7zgkjja77yehu rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_gk4cysr533vma7zgkjja77yehu is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_eut2uci2xcydl5rbtnqteqftii (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_eut2uci2xcydl5rbtnqteqftii rollback deferred: the host is not fenced and stopped yet (stop unproven)
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_tc3genp6jv2uhtip5zyub7bwum (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_tc3genp6jv2uhtip5zyub7bwum is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_soicg6xlwgepchs6rhw5m54gw4 (the original route is journaled)
2026/10/25 10:50:03 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_soicg6xlwgepchs6rhw5m54gw4 left alone this pass: its record could not be read
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_grohwnr2hfgvlcauzyid5qs5ri (the original route is journaled)
2026/10/25 10:50:03 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: read failed: connection reset
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_grohwnr2hfgvlcauzyid5qs5ri left alone this pass: its record could not be read
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_iiyeof6cj76gc4uk6kjuvi6jcu (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_iiyeof6cj76gc4uk6kjuvi6jcu: close the import gate: constraint failed: injected (1811)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_iiyeof6cj76gc4uk6kjuvi6jcu rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_iiyeof6cj76gc4uk6kjuvi6jcu is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_a5avlelolcwxw4llfmwlcbquii (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_a5avlelolcwxw4llfmwlcbquii: close the import gate: constraint failed: injected (1811)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_a5avlelolcwxw4llfmwlcbquii rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_a5avlelolcwxw4llfmwlcbquii is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_32bojwztxd2ikdqgcbxzo4kqle (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_32bojwztxd2ikdqgcbxzo4kqle rollback deferred: the host is not fenced and stopped yet (injected failure at fence)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_32bojwztxd2ikdqgcbxzo4kqle rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_32bojwztxd2ikdqgcbxzo4kqle is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_x4rsamvkfg7jsrymhpyv2tnqdm (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_x4rsamvkfg7jsrymhpyv2tnqdm rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_x4rsamvkfg7jsrymhpyv2tnqdm is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_sqnkgetx73jgbg3nejotmufdia (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_sqnkgetx73jgbg3nejotmufdia: retire its instance key: injected failure at retire-key
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_sqnkgetx73jgbg3nejotmufdia rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_sqnkgetx73jgbg3nejotmufdia is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_so7ipme42t3pj5nqztc5iwf3ae (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_so7ipme42t3pj5nqztc5iwf3ae rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_so7ipme42t3pj5nqztc5iwf3ae is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_xtulbxfzqs6qb3uz526wkddffi (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_xtulbxfzqs6qb3uz526wkddffi: remove its local data: injected failure at remove-local
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_xtulbxfzqs6qb3uz526wkddffi rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_xtulbxfzqs6qb3uz526wkddffi is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_2cot5l7uajkrprzsk74k7nfcdy (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_2cot5l7uajkrprzsk74k7nfcdy rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_2cot5l7uajkrprzsk74k7nfcdy is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_qpsi7jk6a7uxr3por52mgzmv4e (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_qpsi7jk6a7uxr3por52mgzmv4e: remove its local data: injected failure at remove-local-done
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_qpsi7jk6a7uxr3por52mgzmv4e rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_qpsi7jk6a7uxr3por52mgzmv4e is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_brx5a6skskhktfjw47takdft6u (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_brx5a6skskhktfjw47takdft6u rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_brx5a6skskhktfjw47takdft6u is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_wkh7zrn5w3zusbwgoaox233k3m (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_wkh7zrn5w3zusbwgoaox233k3m: restore the original route: constraint failed: injected (1811)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_wkh7zrn5w3zusbwgoaox233k3m rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_wkh7zrn5w3zusbwgoaox233k3m is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_secf7lkh3asaetf5cs4sj2fzpe (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_secf7lkh3asaetf5cs4sj2fzpe: restore the original route: constraint failed: injected (1811)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_secf7lkh3asaetf5cs4sj2fzpe rolled back to its original route
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_secf7lkh3asaetf5cs4sj2fzpe is cleaned up and its journal row retired
2026/10/25 10:50:03 provision: a.shop.example.com: swapped for import sd_o5ikkpgafq45k77c3yntuebzqq (the original route is journaled)
2026/10/25 10:50:03 provision: a.shop.example.com: import sd_o5ikkpgafq45k77c3yntuebzqq is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_ijyzfzuutpzercngw24gzxaw6i (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_ijyzfzuutpzercngw24gzxaw6i rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_ijyzfzuutpzercngw24gzxaw6i: delete its snapshot: injected failure at delete-snapshot
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_ijyzfzuutpzercngw24gzxaw6i is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_72oiotteky3wwtb573y2ufzso4 (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_72oiotteky3wwtb573y2ufzso4 rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_72oiotteky3wwtb573y2ufzso4 is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_awik3oiy5h7rnrv4vqbzgojuh4 (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_awik3oiy5h7rnrv4vqbzgojuh4 rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_awik3oiy5h7rnrv4vqbzgojuh4: delete the host's replica: injected failure at delete-replica
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_awik3oiy5h7rnrv4vqbzgojuh4 is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_gok6zbtxgkn26ue63shfcjitbu (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_gok6zbtxgkn26ue63shfcjitbu rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_gok6zbtxgkn26ue63shfcjitbu is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_jpwerzq53ljq7eenleirwf6jyq (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_jpwerzq53ljq7eenleirwf6jyq rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_jpwerzq53ljq7eenleirwf6jyq: retire its journal row: constraint failed: injected (1811)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_jpwerzq53ljq7eenleirwf6jyq is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_ho6h4u7idmkpgxcjdbm3bgtuae (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_ho6h4u7idmkpgxcjdbm3bgtuae rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_ho6h4u7idmkpgxcjdbm3bgtuae: retire its journal row: constraint failed: injected (1811)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_ho6h4u7idmkpgxcjdbm3bgtuae is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_fm6vjjvqk7rvyfytqabms3vyge (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_fm6vjjvqk7rvyfytqabms3vyge rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_fm6vjjvqk7rvyfytqabms3vyge is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: mark import sd_fm6vjjvqk7rvyfytqabms3vyge rolled back: injected failure at cas
2026/10/25 10:50:04 provision: a.shop.example.com: aborted seed sd_fm6vjjvqk7rvyfytqabms3vyge rolled back (no box had swapped it)
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_jit6ermkcigntooialpjlwzrl4 (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_jit6ermkcigntooialpjlwzrl4 rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_jit6ermkcigntooialpjlwzrl4 is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: aborted seed sd_jit6ermkcigntooialpjlwzrl4 rolled back (no box had swapped it)
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_jnthwutb47u472vhrzthohyc6a (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_jnthwutb47u472vhrzthohyc6a rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_jnthwutb47u472vhrzthohyc6a rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_jnthwutb47u472vhrzthohyc6a rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_jnthwutb47u472vhrzthohyc6a is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_f6vou3pfw2lqyaud53mxloikxu (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_f6vou3pfw2lqyaud53mxloikxu rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_f6vou3pfw2lqyaud53mxloikxu is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_agiuxbpt5m2wx4sbtefamjvidq (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_agiuxbpt5m2wx4sbtefamjvidq rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_agiuxbpt5m2wx4sbtefamjvidq is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_oft4xlx3jxrohuvkfe27phhzty (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_oft4xlx3jxrohuvkfe27phhzty rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_oft4xlx3jxrohuvkfe27phhzty is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_2slzsnhkvqlmdqaas3nyswtwg4 (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_2slzsnhkvqlmdqaas3nyswtwg4 rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_2slzsnhkvqlmdqaas3nyswtwg4 is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_igczpxnyrogfg6epvxwuuv4bve (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_igczpxnyrogfg6epvxwuuv4bve rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_igczpxnyrogfg6epvxwuuv4bve is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_kjjxsdytelje3cyfnkmdmz47tu (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_kjjxsdytelje3cyfnkmdmz47tu rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_kjjxsdytelje3cyfnkmdmz47tu is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_px4rvtsi7g6ogcfssi7zqg6eyu (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_px4rvtsi7g6ogcfssi7zqg6eyu rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_px4rvtsi7g6ogcfssi7zqg6eyu is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_n5v3mxp6rzko4hmdz5g275vqme (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_n5v3mxp6rzko4hmdz5g275vqme has no route on this box: its local data is removed and no route is put back
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_n5v3mxp6rzko4hmdz5g275vqme is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_yko7dvdo5hqqqe6nb66qyxn5hm (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_rt5zcd4n5qjehextkkabjgkxz4 (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_h3zkmiklseelmbvfezonkg2gx4 (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_h3zkmiklseelmbvfezonkg2gx4 cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_tpihwmqhqta7scknjdizthyfbm (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_tpihwmqhqta7scknjdizthyfbm is not rolled back: the route changed under the fence, so nothing there is touched
2026/10/25 10:50:04 provision: a.shop.example.com: import "../not-a-seed" names no snapshot and no replica; only its journal row is cleaned up
2026/10/25 10:50:04 provision: a.shop.example.com: import ../not-a-seed is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_vxbndo6jg4qz2b7btfwvjdrsfa (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_eppaexvy53eaid5sjwjgi2awhm (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_oazbrfwfdylvetegm5qfxmlhvy (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_c3y72jxejq4xxgjaghr45hsfcu (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_l4zjp3vrrwuqi7t22uyc4s32ha (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_l4zjp3vrrwuqi7t22uyc4s32ha rollback deferred: the host is not fenced and stopped yet (stop evidence unreadable)
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_l7led7g2xzqqrm3pq5jeopkfmu (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_l7led7g2xzqqrm3pq5jeopkfmu has no route on this box: its local data is removed and no route is put back
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_l7led7g2xzqqrm3pq5jeopkfmu is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_f5gqf37nl4wqw25bju2ghbkyu4 (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_f5gqf37nl4wqw25bju2ghbkyu4: remove its local data: injected failure at remove-local
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_f5gqf37nl4wqw25bju2ghbkyu4 is not rolled back: the route at the host is not the import's, so nothing there is touched
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_o4cd77r72m2eoguihiuctdjthe (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_o4cd77r72m2eoguihiuctdjthe: a route appeared at the host, so its local database is left and the rollback waits
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_i4337xzgpu6d53v5q7rc4emaru (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_i4337xzgpu6d53v5q7rc4emaru rollback deferred: no fence generation: registry busy
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_uiy2gek2d3ei7mjtvxkuyn6eoi (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_uiy2gek2d3ei7mjtvxkuyn6eoi rollback deferred: no fence generation: the generation source answered 0
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_tkbvoeiyevikbcl4emkxwl5imm (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_f646wp2abnn5waplii5vbrjsvq (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_okqcuadhytg37l73m5ad4mnrdm (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import deferred: this box cannot read the instance's env file
2026/10/25 10:50:04 provision: a.shop.example.com: import deferred: the instance's env file could not be read: a symlink
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_72nu34niwz4q6qmb6jvph454jq (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_72nu34niwz4q6qmb6jvph454jq rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_72nu34niwz4q6qmb6jvph454jq is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_3i624nxkzkvqptrng7ikq3qmou (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_3i624nxkzkvqptrng7ikq3qmou rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_3i624nxkzkvqptrng7ikq3qmou is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_bpglrm4ulgkfoxeoy4yzgzhwsm (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_bpglrm4ulgkfoxeoy4yzgzhwsm rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_bpglrm4ulgkfoxeoy4yzgzhwsm is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_ep34hk7uniduku26yzij4pt4dm (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_ep34hk7uniduku26yzij4pt4dm: retire its instance key: the env file is a symlink
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_ep34hk7uniduku26yzij4pt4dm rolled back to its original route
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_ep34hk7uniduku26yzij4pt4dm is cleaned up and its journal row retired
2026/10/25 10:50:04 provision: a.shop.example.com: swapped for import sd_moyydp6n3tywtx2y3t3nofcfhq (the original route is journaled)
2026/10/25 10:50:04 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/25 10:50:04 provision: a.shop.example.com: swapped for import sd_o2jr5sve47q2v7yionmweo6lci (the original route is journaled)
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_it6ogls7q64x2eiaguqr7rfvva refused: there is no route at a.shop.example.com to replace
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_khabkgbqyue33qlw5cby3qht64 refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_b2juakwwdqa76msknfbuwrci2a refused: the route's address is 127.0.0.1:8401,127.0.0.1:8402, not 127.0.0.1:8401
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_byo2ayirv3rs46cc2qgotyew7a refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_c26th3d2budfxsqf5px4quthiy refused: the route belongs to app other
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_qq2orskrh5cpocbvq6bfq6ejyy refused: the route is filed under another account
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_j32652w6sts54cgzde4iran6fq refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_igrm2v3yq5g5etsrz6hypx53lu refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_xsynijewqyrydiwlt4p5wswac4 refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/25 10:50:04 provision: a.shop.example.com: import sd_vrwowi25i75akrpswdow5zh7uy refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_w44bz2jupsxapnpasl5ftoxkmy refused: the route is not an address route this import can take over (socket)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_uq2cldsjhfrgcophex2utvr54a refused: the route is not an address route this import can take over (no address)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_kade2f5q6povdy4dz4kch3flra refused: the route is not an address route this import can take over (provisioned)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_g7rsaq5zmipns747noykrz7s7i refused: the route is not an address route this import can take over (kind static)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_cjotzmqvizivf5h6d23mgegtpu refused: the route is not an address route this import can take over (backing)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_xkktuhv3gcjs47dfun43545lqq refused: the route is not an address route this import can take over (tunnel)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_5mrdfvsuz3vkmvjvej6yodswcy refused: the route is not an address route this import can take over (caps)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_truxdslsz6frnyb6bl6blbqmwi refused: the route is not an address route this import can take over (platform)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_crx4vfg27welur36avnp5y4o44 refused: the route is not an address route this import can take over (canary)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_ulj2jjqou2w7es7tlutri6sb2y refused: the route is not an address route this import can take over (kind sidecar)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_w257eherg6cx2vmgx75fiuaprq refused: the route is not an address route this import can take over (region)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_wlhylhxjafc6i7e6pnze6mnjkq refused: the route is not an address route this import can take over (fleet_box)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_2pok54j3poufxdtks6r2wolxou refused: the route is not an address route this import can take over (hibernate)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_wcn5phnd72y4k53thbkgmyqc4e refused: the route is not an address route this import can take over (claim_owner)
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_vv35oxrcooxhro3s3xi6vwvvkq refused: this box does not run instances nested
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_2hypoy6ukgocexpnb6a7lqymx4 refused: this box does not run instances nested
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_73w5nsjtbic7sjzfsy7sp7bvvm refused: claim control is on for this box
2026/10/25 10:50:05 provision: a.shop.example.com: swapped for import sd_aynyl2jkl6u4hw2j3u3vdjsmim (the original route is journaled)
2026/10/25 10:50:05 provision: a.shop.example.com: swapped for import sd_dcnh5hvxldz6kw5ft54lmyni2i (the original route is journaled)
2026/10/25 10:50:05 provision: a.shop.example.com: import deferred: this box cannot read the legacy route assignments
2026/10/25 10:50:05 provision: a.shop.example.com: import deferred: the legacy route assignments could not be read: store down
2026/10/25 10:50:05 provision: a.shop.example.com: not swapping for import sd_rprx24ip6djbf2vkcguivdr7ge: its verify hash is not a sha256
2026/10/25 10:50:05 provision: a.shop.example.com: not swapping for import sd_uol3poujms3mvlgogrkvgxsscu: its verify hash is not a sha256
2026/10/25 10:50:05 provision: a.shop.example.com: not swapping for import sd_bauubpjonr5umjl4wwmzeue3sm: its verify hash is not a sha256
2026/10/25 10:50:05 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/25 10:50:05 provision: A.shop.example.com/..: not swapping for import sd_zdrv2yqfz7ml5ppncfybngm6vy: its host or seed id is malformed (seeds: not a host)
2026/10/25 10:50:05 provision: a.shop.example.com: not swapping for import sd_stnsyvkh2tuew2yrplz6kfilqu: its record does not describe a nested, hibernating instance
2026/10/25 10:50:05 provision: a.shop.example.com: not swapping for import sd_suefra3etfxmdx5m7pdocti6v4: its record does not describe a nested, hibernating instance
2026/10/25 10:50:05 provision: a.shop.example.com: not swapping for import sd_stqtnwkya5pm4lsjbxrpcw4buq: its record does not describe a nested, hibernating instance
2026/10/25 10:50:05 provision: a.shop.example.com: not swapping for import sd_dvdfptwptvosywjzlloajskia4: its record does not describe a nested, hibernating instance
2026/10/25 10:50:05 provision: a.shop.example.com: import deferred: the box's layout intent could not be read: store down
2026/10/25 10:50:05 provision: a.shop.example.com: swapped for import sd_mca4yc7ubx6nxzysuyswtcbdca (the original route is journaled)
2026/10/25 10:50:05 provision: a.shop.example.com: import deferred: the box's nested probe did not answer: ready probe timed out
2026/10/25 10:50:05 provision: a.shop.example.com: swapped for import sd_vybi53phead5qzcw3dipuflr2q (the original route is journaled)
2026/10/25 10:50:05 provision: a.shop.example.com: swapped for import sd_ts5n43kxkt2z4docboenc6ocse (the original route is journaled)
2026/10/25 10:50:05 provision: a.shop.example.com: import deferred: the route is held by operation op_1
2026/10/25 10:50:05 provision: dry-run: would consider swapping a.shop.example.com for import sd_afkcet2rhzmufklharqjmh5il4
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_whtgn3yeg3hswmwfrqtdaxojgy rolled back to its original route
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_whtgn3yeg3hswmwfrqtdaxojgy: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_whtgn3yeg3hswmwfrqtdaxojgy is cleaned up and its journal row retired
2026/10/25 10:50:05 provision: a.shop.example.com: import sd_i67fcurj4to6eda6hkzeuarhd4 left alone: the import journal holds seed sd_rbndvagq67e42sqy645m5mn5om at swapped
2026/10/25 10:50:05 provision: a.shop.example.com: not minting import sd_afkdfanas7e43curigttjc7nze: it is swapped but not committed, and only its swap makes its row
2026/10/25 10:50:05 provision: a.shop.example.com: not minting import sd_s34344aa7jryzyf5losf5yqu44: it is placed but not committed, and only its swap makes its row
2026/10/25 10:50:05 provision: a.shop.example.com: swapped for import sd_ucdjwyq4hvuc5qubkbah3ljs4y (the original route is journaled)
2026/10/25 10:50:05 provision: a.shop.example.com: not minting import sd_ucdjwyq4hvuc5qubkbah3ljs4y: it is swapped but not committed, and only its swap makes its row
2026/10/25 10:50:05 provision: a.shop.example.com: not minting import sd_ucdjwyq4hvuc5qubkbah3ljs4y: it is placed but not committed, and only its swap makes its row
2026/10/25 10:50:05 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/25 10:50:05 provision: removed retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/25 10:50:05 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:50:05 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:50:05 provision: converged sidecar bot.eleven.bac.sidecar.internal args ["sidecar","run"] -> ["worker","run"]
2026/10/25 10:50:05 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:50:05 provision: converged sidecar bot.eleven.bac.sidecar.internal ceilings 300/3600 -> 60/120
2026/10/25 10:50:05 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:50:05 provision: converged sidecar bot.eleven.bac.sidecar.internal channel stable -> canary/eleven
2026/10/25 10:50:05 provision: converged sidecar bot.eleven.bac.sidecar.internal environment "other" -> "relay"
2026/10/25 10:50:05 provision: converged sidecar bot.eleven.bac.sidecar.internal hibernate true -> false
2026/10/25 10:50:05 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: read failed: failStore: reads disabled under apps/bac/eleven/sidecars/
2026/10/25 10:50:05 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: malformed: invalid character 'n' looking for beginning of object key string
2026/10/25 10:50:05 provision: not removing sidecar bot.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/25 10:50:05 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: empty channel
2026/10/25 10:50:05 provision: skipping sidecar record apps/bac/eleven/sidecars/held.json: empty channel
2026/10/25 10:50:05 provision: not removing sidecar held.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/25 10:50:05 provision: removed retired sidecar route old.eleven.bac.sidecar.internal (record gone)
2026/10/25 10:50:05 provision: bac/eleven has sidecar records but no sidecars manifest — not minting
2026/10/25 10:50:05 provision: bac/eleven is in the trash — not minting sidecar routes for it
2026/10/25 10:50:05 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/25 10:50:05 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/25 10:50:05 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:50:05 provision: minted sidecar route hub.relay.bac.sidecar.internal (app "relay" acct "bac" args ["relay"])
2026/10/25 10:50:05 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/25 10:50:05 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:50:05 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/25 10:50:05 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:50:05 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:50:05 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/25 10:50:05 provision: removed retired sidecar route bot.eleven.bac.sidecar.internal (record gone)
2026/10/25 10:50:05 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:50:05 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/25 10:50:05 provision: skipping sidecar record apps/bac/relay/sidecars/hub.json: read failed: failStore: reads disabled under apps/bac/relay/sidecars/
2026/10/25 10:50:05 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/25 10:50:05 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 10:50:05 provision: dry-run: would mint sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" channel "stable" args ["sidecar","run"])
2026/10/25 10:50:05 provision: dry-run: would remove retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/25 10:50:05 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/25 10:50:05 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:05 provision: converged acme.go.tito.io update settings "{\"updates\":\"manual\",\"channel\":\"stable\"}" -> ""
2026/10/25 10:50:05 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:05 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:05 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/25 10:50:05 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/25 10:50:05 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/25 10:50:05 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 10:50:06 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/25 10:50:06 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/25 10:50:06 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/25 10:50:06 provision: record view: change index unusable (release: change index unreadable: store has no conditional read: unsupported operation): the walk records no generations
2026/10/25 10:50:06 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/25 10:50:06 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/25 10:50:06 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/25 10:50:06 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: record view: change index unusable (release: change index malformed: invalid character 'n' looking for beginning of object key string): walking
2026/10/25 10:50:06 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/25 10:50:06 provision: record view: change index unusable (get refused): walking
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: record view: re-reading apps/bqc/shop failed: retrying on the next refresh
2026/10/25 10:50:06 provision: listing apps/bqc/shop/instances/: context canceled — its records are unseen this pass
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: record view: re-reading apps/bqc/shop failed: retrying on the next refresh
2026/10/25 10:50:06 provision: listing apps/bqc/shop/instances/: list refused — its records are unseen this pass
2026/10/25 10:50:06 provision: listing apps/bqc/shop/instances/: list refused — its records are unseen this pass
2026/10/25 10:50:06 provision: an app's records could not be listed: they are skipped
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/25 10:50:06 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/25 10:50:06 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/25 10:50:06 provision: record view: re-reading accounts/bqd failed: retrying on the next refresh
2026/10/25 10:50:06 provision: skipping accounts/bqd/account.json: read failed: list refused
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/25 10:50:06 provision: removed retired instance route one.example.com (record gone)
2026/10/25 10:50:06 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/25 10:50:06 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/25 10:50:06 provision: removed retired instance route one.example.com (record gone)
2026/10/25 10:50:06 provision: skipping record apps/bum/shop/instances/one.example.com.json: empty channel
2026/10/25 10:50:06 provision: not removing one.example.com: its record exists but could not be read cleanly this pass
2026/10/25 10:50:06 provision: skipping record apps/bum/shop/instances/one.example.com.json: empty channel
2026/10/25 10:50:06 provision: not removing one.example.com: its record exists but could not be read cleanly this pass
2026/10/25 10:50:06 provision: record view: change index unusable (context deadline exceeded): walking
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 10:50:06 provision: record view: change index unusable (context deadline exceeded): the walk records no generations
2026/10/25 10:50:06 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
--- FAIL: TestPlan14RootReadCensus (16.79s)
plan14_root_reads_test.go:600: root read census: 10 discrepancies
changed registry schema
changed root read internal/registry/registry.go:Registry.Upsert; review class, task, sites and digest
changed root read internal/registry/registry.go:Registry.migrate; review class, task, sites and digest
changed root read internal/registry/registry.go:routeArgs; review class, task, sites and digest
changed root read internal/registry/registry.go:scanRoute; review class, task, sites and digest
changed root source envelope internal/instancectl
changed root source envelope internal/registry
changed legacy declaration internal/registry/registry.go:Registry.migrate
changed legacy declaration internal/registry/registry.go:scanRoute
changed reclassified declaration internal/registry/registry.go:Registry.Upsert
make census-card shows what changed; make census-propose NAME=<branch> CLAIMS=<file> writes the overlay and its approval card (AGENTS.md, The census)
FAIL
FAIL github.com/carlosframework/platform/internal/provision 25.474s
ok github.com/carlosframework/platform/internal/publicrelease 0.008s
? github.com/carlosframework/platform/internal/regionname [no test files]
ok github.com/carlosframework/platform/internal/registry 5.732s
ok github.com/carlosframework/platform/internal/relay 7.223s
ok github.com/carlosframework/platform/internal/release 27.051s
ok github.com/carlosframework/platform/internal/rollout 3.752s
ok github.com/carlosframework/platform/internal/rolloutwords 0.003s
ok github.com/carlosframework/platform/internal/rootaws 0.010s
ok github.com/carlosframework/platform/internal/rootfsimage 0.163s
ok github.com/carlosframework/platform/internal/rootparticipation 0.060s
ok github.com/carlosframework/platform/internal/rootstate 0.027s
ok github.com/carlosframework/platform/internal/runs 0.584s
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.613s
ok github.com/carlosframework/platform/internal/seeds 0.011s
ok github.com/carlosframework/platform/internal/sim/engines 2.059s
ok github.com/carlosframework/platform/internal/sim/hostlife 9.301s
ok github.com/carlosframework/platform/internal/sim/litestreamfacts 4.362s
ok github.com/carlosframework/platform/internal/status 0.061s
ok github.com/carlosframework/platform/internal/steering 0.005s
ok github.com/carlosframework/platform/internal/stopevidence 0.085s
ok github.com/carlosframework/platform/internal/svcrole 0.002s
ok github.com/carlosframework/platform/internal/telemetry 0.005s
ok github.com/carlosframework/platform/internal/termfence 0.004s
ok github.com/carlosframework/platform/internal/tunnelclient 0.004s
ok github.com/carlosframework/platform/internal/unixdial 0.002s
ok github.com/carlosframework/platform/internal/updatewords 0.004s
ok github.com/carlosframework/platform/internal/usage 0.005s
ok github.com/carlosframework/platform/internal/version 0.001s
ok github.com/carlosframework/platform/internal/vet 1.579s
FAIL
=== internal_console@0 (74 s)
ok github.com/carlosframework/platform/internal/console 72.346s
=== internal_console@1 (46 s)
ok github.com/carlosframework/platform/internal/console 44.421s
=== internal_console@2 (43 s)
ok github.com/carlosframework/platform/internal/console 41.750s
=== internal_console@3 (44 s)
ok github.com/carlosframework/platform/internal/console 42.327s
=== internal_console@4 (45 s)
ok github.com/carlosframework/platform/internal/console 43.086s
=== internal_console@5 (45 s)
ok github.com/carlosframework/platform/internal/console 43.475s
=== internal_console@6 (47 s)
ok github.com/carlosframework/platform/internal/console 45.480s
=== internal_console@7 (52 s)
ok github.com/carlosframework/platform/internal/console 50.817s
=== internal_host@0 (64 s)
ok github.com/carlosframework/platform/internal/host 62.396s
=== internal_host@1 (31 s)
ok github.com/carlosframework/platform/internal/host 29.448s
=== internal_host@2 (30 s)
ok github.com/carlosframework/platform/internal/host 28.110s
=== internal_host@3 (31 s)
ok github.com/carlosframework/platform/internal/host 29.606s
=== root@0 (71 s)
ok github.com/carlosframework/platform 69.286s
=== root@1 (49 s)
ok github.com/carlosframework/platform 47.460s
=== root@2 (62 s)
ok github.com/carlosframework/platform 60.271s
=== root@3 (53 s)
ok github.com/carlosframework/platform 51.230s
=== root@4 (57 s)
ok github.com/carlosframework/platform 55.943s
Failure summary:
--- rest
--- FAIL: TestPlan14RootReadCensus (16.79s)
plan14_root_reads_test.go:600: root read census: 10 discrepancies
FAIL github.com/carlosframework/platform/internal/provision 25.474s
FAILED: rest
make: *** [Makefile:19: test] Error 1
amadan: step gate failed: exit status 2
amadan: job failed at step gate — its output is above, not at the tail of this log
diff --git a/internal/registry/registry.go b/internal/registry/registry.go| index 4447cc982..e346e123a 100644 |
| --- a/internal/registry/registry.go |
| +++ b/internal/registry/registry.go |
| @@ -171,6 +171,17 @@ type Route struct { |
| Caps string |
| Hibernate bool |
| + // Runtime is how the row's process is launched: "" is a binary (the |
| + // existing launch), RuntimeRootfsV1 is a rootfs image under a mount |
| + // namespace. Materialized from the record at mint, read by the |
| + // activator and the control service. Fixed for the row's life: Upsert |
| + // inserts it and a conflict keeps the stored value, except on a |
| + // re-tenanted host (another account or app now owns it), which is a new |
| + // life and takes the incoming value. There is no setter. A rootfs row is |
| + // an ordinary exec instance row; nothing treats Runtime != "" as |
| + // non-nested or non-instance. Not in Fingerprint (it never changes on a |
| + // row, and an insert already moves the fingerprint). |
| + Runtime string |
| // Gate is the bcrypt hash of the host's shared password ("" = open), |
| // converged from provision.Record.Gate by SetGate and read by the edge |
| // on every request to the host (internal/gate). Validated at the |
| @@ -482,6 +493,16 @@ func ValidReplication(class string) bool { |
| return false |
| } |
| +// RuntimeRootfsV1 is the one non-empty Route.Runtime this release knows. |
| +// "" is a binary. |
| +const RuntimeRootfsV1 = "rootfs-v1" |
| + |
| +// ValidRuntime reports whether s is a value Route.Runtime may hold: "" or |
| +// RuntimeRootfsV1. |
| +func ValidRuntime(s string) bool { |
| + return s == "" || s == RuntimeRootfsV1 |
| +} |
| + |
| // registryPragmas run on every connection the pool opens, not once on the |
| // first. busy_timeout FIRST: two processes open this DB concurrently (the |
| // edge starting while `carlos add` runs), and journal_mode=WAL takes a lock — |
| @@ -609,6 +630,7 @@ CREATE TABLE IF NOT EXISTS routes ( |
| `ALTER TABLE routes ADD COLUMN build_state TEXT NOT NULL DEFAULT ''`, |
| `ALTER TABLE routes ADD COLUMN seed_source TEXT NOT NULL DEFAULT ''`, |
| `ALTER TABLE routes ADD COLUMN import_gate TEXT NOT NULL DEFAULT ''`, |
| + `ALTER TABLE routes ADD COLUMN runtime TEXT NOT NULL DEFAULT ''`, |
| } { |
| if _, err := r.sql.Exec(stmt); err != nil && !strings.Contains(err.Error(), "duplicate column") { |
| return err |
| @@ -897,10 +919,10 @@ dns_checked_at, cert_expires_at, account, environment, caps, tunnel, |
| provisioned, seed, unit, fleet_box, addrs, health, steering, gate, created_at, |
| args, idle_seconds, max_run_seconds, replicas, replica, claim_incarnation, claim_stamp, claim_owner, claim_row_id, hold_op, |
| good_version, good_digest, good_demand, serving_version, update_settings, build_state, |
| -seed_source, import_gate` |
| +seed_source, import_gate, runtime` |
| // routeColCount is the number of names in routeCols. |
| -const routeColCount = 55 |
| +const routeColCount = 56 |
| // placeholders is n comma-joined bind parameters. |
| func placeholders(n int) string { |
| @@ -918,7 +940,7 @@ func scanRoute(scan func(...any) error) (Route, error) { |
| &t.Addrs, &t.Health, &t.Steering, &t.Gate, &t.CreatedAt, |
| &t.Args, &t.IdleSeconds, &t.MaxRunSeconds, &t.Replicas, &rep, &t.ClaimIncarnation, &t.ClaimStamp, &t.ClaimOwner, &t.ClaimRowID, &t.HoldOp, |
| &t.GoodVersion, &t.GoodDigest, &t.GoodDemand, &t.ServingVersion, &t.UpdateSettings, &t.BuildState, |
| - &t.SeedSource, &t.ImportGate) |
| + &t.SeedSource, &t.ImportGate, &t.Runtime) |
| t.Hibernate = hib != 0 |
| t.Canary = can != 0 |
| t.StatusNamed = sn != 0 |
| @@ -1118,6 +1140,9 @@ func (r *Registry) Delete(host string) error { |
| // steering housekeeper duty (Task 6) is armed would silently clear a route's |
| // Route53 latency records — a real incident this repo caught in review before |
| // it shipped, not a hypothetical. |
| +// `runtime` is fixed for the row's life and follows the same tenant rule: a |
| +// conflict keeps the stored runtime, a re-tenanted host takes the incoming one |
| +// (a new life), and nothing else ever changes it. |
| // `update_settings` and `build_state` keep an existing value only while the |
| // row's tenant (effective account, app) stays the same. An Upsert that moves |
| // the hostname to another tenant takes the incoming values, empty included: |
| @@ -1208,7 +1233,8 @@ ON CONFLICT(host) DO UPDATE SET |
| WHEN excluded.update_settings = '' THEN routes.update_settings ELSE excluded.update_settings END, |
| build_state=CASE WHEN `+tenantChangedSQL+` THEN excluded.build_state |
| WHEN excluded.build_state = '' THEN routes.build_state ELSE excluded.build_state END, |
| - seed_source=CASE WHEN excluded.seed_source = '' THEN routes.seed_source ELSE excluded.seed_source END |
| + seed_source=CASE WHEN excluded.seed_source = '' THEN routes.seed_source ELSE excluded.seed_source END, |
| + runtime=CASE WHEN `+tenantChangedSQL+` THEN excluded.runtime ELSE routes.runtime END |
| WHERE routes.claim_incarnation=excluded.claim_incarnation AND routes.claim_stamp=excluded.claim_stamp |
| AND routes.claim_owner=excluded.claim_owner AND routes.claim_row_id=excluded.claim_row_id`, |
| routeArgs(normalizeRoute(t))...) |
| @@ -1269,7 +1295,7 @@ func routeArgs(t Route) []any { |
| t.Steering, t.Gate, t.CreatedAt, t.Args, t.IdleSeconds, t.MaxRunSeconds, |
| t.Replicas, b2iDB(t.Replica), t.ClaimIncarnation, t.ClaimStamp, t.ClaimOwner, t.ClaimRowID, t.HoldOp, |
| t.GoodVersion, t.GoodDigest, t.GoodDemand, t.ServingVersion, t.UpdateSettings, t.BuildState, |
| - t.SeedSource, t.ImportGate, |
| + t.SeedSource, t.ImportGate, t.Runtime, |
| } |
| } |
| @@ -3298,17 +3324,19 @@ var snapshotClaimCols = map[string]bool{ |
| "claim_row_id": true, |
| } |
| -// snapshotWhenSetCols are the good-build columns (zero-downtime spec §8.5) |
| -// and the update-settings column. A restore has to reproduce them, so they |
| -// are hashed, but only when set and tagged, on the hold_op rule: a registry |
| -// that has never recorded a good build or set update settings digests exactly |
| -// as it did before the columns existed, so upgrading does not force a snapshot |
| +// snapshotWhenSetCols are the good-build columns (zero-downtime spec §8.5), |
| +// the update-settings column and the runtime column. A restore has to |
| +// reproduce them, so they are hashed, but only when set and tagged, on the |
| +// hold_op rule: a registry that has never recorded a good build, set update |
| +// settings or minted a rootfs row digests exactly as it did before the |
| +// columns existed, so upgrading does not force a snapshot |
| // on every box. |
| var snapshotWhenSetCols = map[string]bool{ |
| "good_version": true, |
| "good_digest": true, |
| "good_demand": true, |
| "update_settings": true, |
| + "runtime": true, |
| } |
| func (r *Registry) SnapshotFingerprint() (string, error) { |
diff --git a/internal/registry/registry_test.go b/internal/registry/registry_test.go| index ab3b7b1fd..43a4ea088 100644 |
| --- a/internal/registry/registry_test.go |
| +++ b/internal/registry/registry_test.go |
| @@ -87,6 +87,7 @@ func TestUpsertRoundTripsAllColumns(t *testing.T) { |
| BuildState: `{"known":true,"state":{"schema":1,"last_executed":"bs345"}}`, |
| SeedSource: `{"id":"sd_aaaaaaaaaaaaaaaaaaaaaaaaaa","kind":"replica","state":"ready"}`, |
| ImportGate: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", |
| + Runtime: RuntimeRootfsV1, |
| } |
| if err := reg.Upsert(want); err != nil { |
| t.Fatal(err) |
| @@ -2949,3 +2950,205 @@ func TestGoodBuildMovesTheSnapshotFingerprint(t *testing.T) { |
| t.Fatal("a new good build did not move the snapshot fingerprint") |
| } |
| } |
| + |
| +func TestUpsertNeverChangesRuntime(t *testing.T) { |
| + reg, err := Open(filepath.Join(t.TempDir(), "registry.db")) |
| + if err != nil { |
| + t.Fatal(err) |
| + } |
| + rt := Route{Host: "shop.example.com", Kind: "instance", Socket: "/run/carlos/instances/shop.example.com/app.sock", Hibernate: true, Runtime: RuntimeRootfsV1} |
| + if err := reg.Upsert(rt); err != nil { |
| + t.Fatal(err) |
| + } |
| + rt.Runtime = "" |
| + if err := reg.Upsert(rt); err != nil { |
| + t.Fatal(err) |
| + } |
| + got, err := reg.Get("shop.example.com") |
| + if err != nil || got == nil || got.Runtime != RuntimeRootfsV1 { |
| + t.Fatalf("Get after an empty Upsert = %+v, %v", got, err) // never got.Runtime here: got may be nil |
| + } |
| + // And the other direction: a binary row never becomes rootfs by Upsert. |
| + bin := Route{Host: "blog.example.com", Kind: "instance", Socket: "/run/carlos/instances/blog.example.com/app.sock", Hibernate: true} |
| + if err := reg.Upsert(bin); err != nil { |
| + t.Fatal(err) |
| + } |
| + bin.Runtime = RuntimeRootfsV1 |
| + if err := reg.Upsert(bin); err != nil { |
| + t.Fatal(err) |
| + } |
| + if got, err := reg.Get("blog.example.com"); err != nil || got == nil || got.Runtime != "" { |
| + t.Fatalf("a binary row after a rootfs Upsert = %+v, %v", got, err) |
| + } |
| +} |
| + |
| +// Preflight 2.2: a host re-tenanted to another account or app is a new row |
| +// life (tenantChangedSQL: the effective account or the app differs), so it |
| +// takes the incoming runtime, as update_settings and build_state do in the |
| +// same arm. |
| +func TestUpsertTakesTheRuntimeOfARetenantedHost(t *testing.T) { |
| + reg, err := Open(filepath.Join(t.TempDir(), "registry.db")) |
| + if err != nil { |
| + t.Fatal(err) |
| + } |
| + const host = "shop.example.com" |
| + runtimeIs := func(step, want string) { |
| + t.Helper() |
| + got, err := reg.Get(host) |
| + if err != nil || got == nil { |
| + t.Fatalf("%s: Get = %+v, %v", step, got, err) |
| + } |
| + if got.Runtime != want { |
| + t.Errorf("%s: Runtime = %q, want %q", step, got.Runtime, want) |
| + } |
| + } |
| + up := func(account, app, runtime string) { |
| + t.Helper() |
| + if err := reg.Upsert(Route{Host: host, Kind: "instance", Account: account, App: app, Runtime: runtime}); err != nil { |
| + t.Fatal(err) |
| + } |
| + } |
| + up("acctone", "shop", "") |
| + runtimeIs("first mint", "") |
| + up("accttwo", "shop", RuntimeRootfsV1) |
| + runtimeIs("another account takes the host", RuntimeRootfsV1) |
| + up("accttwo", "shop", "") |
| + runtimeIs("same tenant, empty runtime (fixed for this life)", RuntimeRootfsV1) |
| + up("accttwo", "blog", "") |
| + runtimeIs("another app takes the host (a new life)", "") |
| +} |
| + |
| +// A registry file created with the pre-column schema opens, lists its rows |
| +// with Runtime "", and accepts a rootfs Upsert. |
| +func TestMigrateAddsRuntimeToAnOldRegistry(t *testing.T) { |
| + path := filepath.Join(t.TempDir(), "registry.db") |
| + ddl, err := os.ReadFile(filepath.Join("testdata", "routes-before-runtime.sql")) |
| + if err != nil { |
| + t.Fatal(err) |
| + } |
| + old, err := sql.Open("sqlite", path) |
| + if err != nil { |
| + t.Fatal(err) |
| + } |
| + if _, err := old.Exec(string(ddl)); err != nil { |
| + t.Fatalf("build the old schema: %v", err) |
| + } |
| + if _, err := old.Exec(`INSERT INTO routes (host, kind, created_at) VALUES ('shop.example.com', 'instance', 1)`); err != nil { |
| + t.Fatal(err) |
| + } |
| + if err := old.Close(); err != nil { |
| + t.Fatal(err) |
| + } |
| + |
| + reg, err := Open(path) |
| + if err != nil { |
| + t.Fatalf("Open on the old schema: %v", err) |
| + } |
| + got, err := reg.Get("shop.example.com") |
| + if err != nil || got == nil { |
| + t.Fatalf("Get on the old row = %+v, %v", got, err) |
| + } |
| + if got.Runtime != "" { |
| + t.Errorf("an old row's Runtime = %q, want empty", got.Runtime) |
| + } |
| + if !routesHasColumn(t, reg, "runtime") { |
| + t.Errorf("PRAGMA table_info(routes) has no runtime column after Open") |
| + } |
| + if err := reg.Upsert(Route{Host: "blog.example.com", Kind: "instance", Runtime: RuntimeRootfsV1}); err != nil { |
| + t.Fatal(err) |
| + } |
| + if got, err := reg.Get("blog.example.com"); err != nil || got == nil || got.Runtime != RuntimeRootfsV1 { |
| + t.Errorf("a rootfs Upsert on a migrated registry reads back %+v, %v", got, err) |
| + } |
| + if err := reg.Close(); err != nil { |
| + t.Fatal(err) |
| + } |
| + reg, err = Open(path) |
| + if err != nil { |
| + t.Errorf("a second Open of the migrated file: %v", err) |
| + return |
| + } |
| + defer reg.Close() |
| + if got, err := reg.Get("blog.example.com"); err != nil || got == nil || got.Runtime != RuntimeRootfsV1 { |
| + t.Errorf("after the second Open, blog = %+v, %v", got, err) |
| + } |
| +} |
| + |
| +// The registry the previous release left: every column but runtime. It is |
| +// the shape a real box upgrades from, so the ALTER must also add the column |
| +// to a table that already has the rest and keep the rows in it. |
| +func TestMigrateAddsRuntimeToTheImmediatelyPreviousSchema(t *testing.T) { |
| + path := filepath.Join(t.TempDir(), "registry.db") |
| + reg, err := Open(path) |
| + if err != nil { |
| + t.Fatal(err) |
| + } |
| + if err := reg.Upsert(Route{Host: "shop.example.com", Kind: "instance", App: "shop"}); err != nil { |
| + t.Fatal(err) |
| + } |
| + if err := reg.Close(); err != nil { |
| + t.Fatal(err) |
| + } |
| + old, err := sql.Open("sqlite", path) |
| + if err != nil { |
| + t.Fatal(err) |
| + } |
| + if _, err := old.Exec(`ALTER TABLE routes DROP COLUMN runtime`); err != nil { |
| + t.Fatalf("simulate a pre-runtime registry: %v", err) |
| + } |
| + if err := old.Close(); err != nil { |
| + t.Fatal(err) |
| + } |
| + reg, err = Open(path) |
| + if err != nil { |
| + t.Fatalf("Open on the previous schema: %v", err) |
| + } |
| + defer reg.Close() |
| + got, err := reg.Get("shop.example.com") |
| + if err != nil || got == nil || got.Runtime != "" || got.App != "shop" { |
| + t.Errorf("the old row after migration = %+v, %v", got, err) |
| + } |
| + if !routesHasColumn(t, reg, "runtime") { |
| + t.Errorf("no runtime column after Open") |
| + } |
| +} |
| + |
| +func routesHasColumn(t *testing.T, reg *Registry, name string) bool { |
| + t.Helper() |
| + rows, err := reg.sql.Query(`PRAGMA table_info(routes)`) |
| + if err != nil { |
| + t.Fatal(err) |
| + } |
| + defer rows.Close() |
| + for rows.Next() { |
| + var cid, notnull, pk int |
| + var col, typ string |
| + var dflt sql.NullString |
| + if err := rows.Scan(&cid, &col, &typ, ¬null, &dflt, &pk); err != nil { |
| + t.Fatal(err) |
| + } |
| + if col == name { |
| + return true |
| + } |
| + } |
| + if err := rows.Err(); err != nil { |
| + t.Fatal(err) |
| + } |
| + return false |
| +} |
| + |
| +// Preflight 2.3: runtime is set once at insert, so a snapshot fingerprint |
| +// taken before the column must not move when the column arrives empty. |
| +func TestRuntimeIsASnapshotWhenSetColumn(t *testing.T) { |
| + if !snapshotWhenSetCols["runtime"] { |
| + t.Fatal("runtime is not in snapshotWhenSetCols; every box's SnapshotFingerprint moves at upgrade") |
| + } |
| +} |
| + |
| +func TestValidRuntime(t *testing.T) { |
| + for s, want := range map[string]bool{"": true, RuntimeRootfsV1: true, "rootfs": false, "rootfs-v2": false, "binary": false} { |
| + if got := ValidRuntime(s); got != want { |
| + t.Errorf("ValidRuntime(%q) = %v", s, got) |
| + } |
| + } |
| +} |
diff --git a/internal/registry/testdata/routes-before-runtime.sql b/internal/registry/testdata/routes-before-runtime.sql| new file mode 100644 |
| index 000000000..3121e5e81 |
| --- /dev/null |
| +++ b/internal/registry/testdata/routes-before-runtime.sql |
| @@ -0,0 +1,14 @@ |
| +-- The routes table as the first registry release created it: nine columns. |
| +-- Every later column, runtime included, arrived through migrate's ALTER |
| +-- list. Copied from git show 15a85ddf:internal/registry/registry.go. |
| +CREATE TABLE IF NOT EXISTS routes ( |
| + host TEXT PRIMARY KEY, |
| + kind TEXT NOT NULL, |
| + socket TEXT NOT NULL DEFAULT '', |
| + status TEXT NOT NULL DEFAULT 'ready', |
| + last_error TEXT NOT NULL DEFAULT '', |
| + db_path TEXT NOT NULL DEFAULT '', |
| + version TEXT NOT NULL DEFAULT '', |
| + prev_version TEXT NOT NULL DEFAULT '', |
| + created_at INTEGER NOT NULL |
| +); |