release, host: a held wake offers only a retained copy of the row's kind; image siblings and downloads bounded (rootfs apps plan 2, task 3 fix 1)
buildStates.retained drops a retained copy whose manifest is the other kind than the row runs (release.RuntimeMatches), so a binary row's held wake never records or runs a sibling rootfs row's image, nor a rootfs row a binary. RetainedStagedOn(platform, ...) is RetainedStaged for a given box platform. stageFrom's rootfs reuse path makes the sibling exactly the image's manifest (syncSibling, bound or not) and then requires its rootfs artifact digest to match; the staged download reads at most the manifest's size plus one byte (and MaxRootfsBytes for an image), so an oversized object fails its hash without filling the version store. A sizeless legacy binary manifest reads unbounded, as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 files changed,
+286
−11
internal/host/buildstate.go+18 −4internal/host/buildstate_rootfs_test.go+107 −0internal/release/adopt.go+38 −6internal/release/adopt_rootfs_test.go+115 −0internal/release/staged.go+8 −1
CI failed — run details
CI log
=== gate ===
.amadan/test-gate.sh
=== launchctx (1 s)
ok amadan.net/carlos/platform.git/launchctx 0.011s
? amadan.net/carlos/platform.git/launchctx/controlname [no test files]
? amadan.net/carlos/platform.git/launchctx/wireid [no test files]
=== vet (20 s)
=== gofmt (1 s)
gofmt -l .: clean
=== rest (75 s)
? github.com/carlosframework/platform/cmd/changelog [no test files]
ok github.com/carlosframework/platform/cmd/console 3.746s
ok github.com/carlosframework/platform/cmd/moveprobe 11.601s
ok github.com/carlosframework/platform/cmd/zddprobe 0.725s
ok github.com/carlosframework/platform/internal/activator 59.846s
ok github.com/carlosframework/platform/internal/agentsock 0.019s
ok github.com/carlosframework/platform/internal/alerting 0.004s
ok github.com/carlosframework/platform/internal/analytics 0.023s
ok github.com/carlosframework/platform/internal/appconfig 3.080s
ok github.com/carlosframework/platform/internal/apperr 0.089s
ok github.com/carlosframework/platform/internal/applog 0.149s
ok github.com/carlosframework/platform/internal/assetcache 0.075s
ok github.com/carlosframework/platform/internal/awsinv 0.004s
ok github.com/carlosframework/platform/internal/boxchoice 0.006s
ok github.com/carlosframework/platform/internal/boxid 0.794s
? 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.015s
ok github.com/carlosframework/platform/internal/caps 0.018s
ok github.com/carlosframework/platform/internal/certwarm 0.002s
ok github.com/carlosframework/platform/internal/cgroup 0.761s
ok github.com/carlosframework/platform/internal/changelog 0.362s
ok github.com/carlosframework/platform/internal/claimactivation 0.997s
ok github.com/carlosframework/platform/internal/clamd 0.055s
? 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.582s
ok github.com/carlosframework/platform/internal/dbdoor/dbdoortest 0.009s
ok github.com/carlosframework/platform/internal/dbquery 0.006s
ok github.com/carlosframework/platform/internal/dbreads 2.109s
? github.com/carlosframework/platform/internal/dbreads/dbreadstest [no test files]
ok github.com/carlosframework/platform/internal/dbverify 0.004s
ok github.com/carlosframework/platform/internal/dnsrec 0.004s
ok github.com/carlosframework/platform/internal/docsite 0.007s
ok github.com/carlosframework/platform/internal/domains 2.928s
ok github.com/carlosframework/platform/internal/doorkey 0.007s
ok github.com/carlosframework/platform/internal/economics 0.007s
ok github.com/carlosframework/platform/internal/edge 45.556s
? github.com/carlosframework/platform/internal/edgeproof [no test files]
ok github.com/carlosframework/platform/internal/edgesfile 0.011s
ok github.com/carlosframework/platform/internal/fleetapi 0.222s
ok github.com/carlosframework/platform/internal/gate 1.967s
ok github.com/carlosframework/platform/internal/genselect 0.028s
ok github.com/carlosframework/platform/internal/geo 0.018s
ok github.com/carlosframework/platform/internal/geoip 0.054s
ok github.com/carlosframework/platform/internal/historyreadback 0.340s
ok github.com/carlosframework/platform/internal/hostactors 6.376s
ok github.com/carlosframework/platform/internal/hostactors/awsmembership 0.006s
ok github.com/carlosframework/platform/internal/hostbox 3.142s
ok github.com/carlosframework/platform/internal/hostclaim 0.897s
ok github.com/carlosframework/platform/internal/hostenv 0.007s
ok github.com/carlosframework/platform/internal/hostevidence 0.009s
ok github.com/carlosframework/platform/internal/hostexec 5.518s
ok github.com/carlosframework/platform/internal/hostfence 0.061s
ok github.com/carlosframework/platform/internal/hostfiles 10.154s
ok github.com/carlosframework/platform/internal/hostfloor 0.030s
ok github.com/carlosframework/platform/internal/hostguard 1.085s
ok github.com/carlosframework/platform/internal/hostops 2.212s
? github.com/carlosframework/platform/internal/hostops/fencerelease [no test files]
ok github.com/carlosframework/platform/internal/hostops/internal/fencerelease 0.004s
ok github.com/carlosframework/platform/internal/hostquarantine 0.002s
ok github.com/carlosframework/platform/internal/hostrelocate 0.794s
ok github.com/carlosframework/platform/internal/hostresolve 0.251s
ok github.com/carlosframework/platform/internal/hostwrite 0.004s
ok github.com/carlosframework/platform/internal/infraview 0.004s
ok github.com/carlosframework/platform/internal/instancectl 5.276s
ok github.com/carlosframework/platform/internal/instanceexec 2.987s
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.011s
ok github.com/carlosframework/platform/internal/layout 1.911s
ok github.com/carlosframework/platform/internal/lbhealth 0.008s
ok github.com/carlosframework/platform/internal/lease 10.155s
ok github.com/carlosframework/platform/internal/lease/leasetest 0.548s
ok github.com/carlosframework/platform/internal/ledger 0.022s
ok github.com/carlosframework/platform/internal/mail 0.318s
ok github.com/carlosframework/platform/internal/maintenance 0.120s
ok github.com/carlosframework/platform/internal/maintenanceexec 5.700s
ok github.com/carlosframework/platform/internal/maintenanceguard 0.171s
ok github.com/carlosframework/platform/internal/metrics 0.022s
ok github.com/carlosframework/platform/internal/moves 23.166s
ok github.com/carlosframework/platform/internal/moves/archive 1.258s
ok github.com/carlosframework/platform/internal/objstore 0.340s
ok github.com/carlosframework/platform/internal/ops 0.279s
ok github.com/carlosframework/platform/internal/park 0.377s
ok github.com/carlosframework/platform/internal/plans 0.009s
ok github.com/carlosframework/platform/internal/privatefile 0.007s
2026/10/25 11:30:15 provision: listing apps/bab/blog/instances/: list refused — its records are unseen this pass
2026/10/25 11:30:15 provision: listing apps/bab/: listdirs refused — its records are unseen this pass
2026/10/25 11:30:15 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:15 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:15 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:15 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/25 11:30:15 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/25 11:30:15 provision: skipping record apps/bac/tito/instances/one.example.com.json: unreadable: read refused
2026/10/25 11:30:15 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/25 11:30:15 provision: an app's records could not be listed: they are skipped
2026/10/25 11:30:15 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:15 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/25 11:30:15 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/25 11:30:15 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/25 11:30:15 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/25 11:30:15 provision: claim install acme.go.tito.io: provision: claim admission unavailable
2026/10/25 11:30:15 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:15 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/25 11:30:15 provision: claim install bot.eleven.bac.sidecar.internal: provision: claim admission unavailable
2026/10/25 11:30:15 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/25 11:30:15 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/25 11:30:16 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 11:30:16 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: no sealed config
2026/10/25 11:30:16 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 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 11:30:16 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/25 11:30:16 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/25 11:30:16 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 11:30:16 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 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 11:30:16 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/25 11:30:16 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/25 11:30:16 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/25 11:30:16 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/25 11:30:16 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 11:30:16 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/25 11:30:16 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/25 11:30:16 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/25 11:30:16 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 11:30:16 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 11:30:16 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:16 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:16 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:16 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 11:30:16 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:16 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:16 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rf.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rh.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route ri.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rk.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rl.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rg.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rj.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:16 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/25 11:30:16 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/25 11:30:16 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route x.appb.example (app "appb" acct "bac")
2026/10/25 11:30:17 provision: minted instance route x.appc.example (app "appc" acct "bac")
2026/10/25 11:30:17 provision: minted instance route x.appe.example (app "appe" acct "bac")
2026/10/25 11:30:17 provision: minted instance route x.appg.example (app "appg" acct "bac")
2026/10/25 11:30:17 provision: minted instance route x.appi.example (app "appi" acct "bac")
2026/10/25 11:30:17 provision: minted instance route x.appa.example (app "appa" acct "bac")
2026/10/25 11:30:17 provision: minted instance route x.appd.example (app "appd" acct "bac")
2026/10/25 11:30:17 provision: minted instance route x.appf.example (app "appf" acct "bac")
2026/10/25 11:30:17 provision: minted instance route x.apph.example (app "apph" acct "bac")
2026/10/25 11:30:17 provision: minted instance route x.appj.example (app "appj" acct "bac")
2026/10/25 11:30:17 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 11:30:17 provision: minted instance route r0033.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0065.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0072.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0013.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0001.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0081.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0100.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0117.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0067.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0082.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0090.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0097.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0012.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0016.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0025.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0028.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0053.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0083.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0104.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0098.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0038.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0042.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0056.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0113.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0124.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0129.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0021.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0035.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0060.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0061.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0007.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0018.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0026.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0070.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0079.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0091.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0094.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0107.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0102.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0114.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0121.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0051.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0095.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0120.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0122.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0003.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0004.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0086.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0127.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0014.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0087.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0073.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0088.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0092.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0006.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0010.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0076.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0116.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0044.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0047.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0055.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0058.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0077.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0096.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0009.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0036.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0008.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0039.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0093.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0024.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0106.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0040.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0074.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0089.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0125.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0126.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0011.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0027.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0064.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0078.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0084.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0045.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0071.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0080.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0110.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0000.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0023.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0048.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0068.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0015.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0017.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0057.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0123.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0022.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0029.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0037.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0103.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0108.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0063.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0128.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0005.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0109.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0050.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0066.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0069.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0075.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0115.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0002.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0020.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0032.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0043.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0052.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0085.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0111.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0112.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0049.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0062.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0099.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0101.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0118.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0041.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0046.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0059.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0119.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0030.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0034.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0054.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0105.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0031.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:17 provision: minted instance route r0019.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 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 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted service route svc.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route whole.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route console.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route shared.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: converged acme.go.tito.io channel stable -> edge
2026/10/25 11:30:18 provision: converged acme.go.tito.io channel edge -> canary/rehearsal
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: empty channel
2026/10/25 11:30:18 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: converged acme.go.tito.io environment "" -> "staging"
2026/10/25 11:30:18 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: converged acme.go.tito.io steering "" -> "latency"
2026/10/25 11:30:18 provision: converged acme.go.tito.io steering "latency" -> ""
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: converged acme.go.tito.io hibernate false -> true
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: converged acme.go.tito.io hibernate true -> false (replication "daily" cleared: only a hibernating route's rung is read)
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: converged acme.go.tito.io status-named false -> true
2026/10/25 11:30:18 provision: converged acme.go.tito.io status-named true -> false
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 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 11:30:18 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 11:30:18 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 11:30:18 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 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 11:30:18 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 11:30:18 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 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: skipping accounts/bac/account.json: malformed account manifest: invalid character 'o' in literal null (expecting 'u')
2026/10/25 11:30:18 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: manifest bac/tito: read failed: provision: manifest bac/tito: invalid character 'o' in literal null (expecting 'u')
2026/10/25 11:30:18 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 11:30:18 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 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 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 11:30:18 provision: not removing acme$evil.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 11:30:18 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 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 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 11:30:18 provision: not removing bad-service.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 11:30:18 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/25 11:30:18 provision: not removing no-channel.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:18 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/25 11:30:18 provision: removed retired instance route ghost.go.tito.io (record gone)
2026/10/25 11:30:18 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 11:30:18 provision: minted instance route dup.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 11:30:18 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 11:30:18 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/25 11:30:18 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:18 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 11:30:18 provision: removed retired static route site.go.tito.io (app in the trash)
2026/10/25 11:30:18 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 11:30:18 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 11:30:18 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/25 11:30:18 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 11:30:18 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 11:30:18 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 11:30:18 provision: converged acme.go.tito.io channel stable -> edge
2026/10/25 11:30:18 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 11:30:18 provision: converged acme.go.tito.io channel canary/rehearsal -> edge
2026/10/25 11:30:18 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/25 11:30:18 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/25 11:30:18 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 11:30:18 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 11:30:18 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 11:30:18 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 11:30:19 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 11:30:19 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 11:30:19 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 11:30:19 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/25 11:30:19 provision: dry-run: would mint instance route acme.go.tito.io (app "tito" acct "bac" channel "stable")
2026/10/25 11:30:19 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 11:30:19 provision: dry-run: would converge adopt.go.tito.io channel stable -> edge
2026/10/25 11:30:19 provision: dry-run: would converge adopt.go.tito.io environment "" -> "staging"
2026/10/25 11:30:19 provision: dry-run: would converge owned.go.tito.io channel stable -> edge
2026/10/25 11:30:19 provision: dry-run: would converge owned.go.tito.io environment "" -> "staging"
2026/10/25 11:30:19 provision: dry-run: would converge owned.go.tito.io hibernate false -> true
2026/10/25 11:30:19 provision: dry-run: would converge owned.go.tito.io seed
2026/10/25 11:30:19 provision: dry-run: would remove retired instance route gone.go.tito.io (record gone)
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: adopted existing route adopt.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 11:30:19 provision: converged adopt.go.tito.io channel stable -> edge
2026/10/25 11:30:19 provision: converged adopt.go.tito.io environment "" -> "staging"
2026/10/25 11:30:19 provision: converged owned.go.tito.io channel stable -> edge
2026/10/25 11:30:19 provision: converged owned.go.tito.io environment "" -> "staging"
2026/10/25 11:30:19 provision: converged owned.go.tito.io hibernate false -> true
2026/10/25 11:30:19 provision: removed retired instance route gone.go.tito.io (record gone)
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: adopted existing route story.carlosframework.com (app "story" acct "bad") — this record now owns its channel and environment
2026/10/25 11:30:19 provision: story.carlosframework.com exists but is not the route this record describes (kind "instance"/"static") — leaving it alone
2026/10/25 11:30:19 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted service route pub.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted service route pubs.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route exec.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted service route loop.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted service route named.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted service route priv.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route unit.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted static route pisite.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: removed retired static route site.go.tito.io (record gone)
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: converged acme.go.tito.io replicas "ie,uk" -> "uk"
2026/10/25 11:30:19 provision: converged acme.go.tito.io replicas "uk" -> ""
2026/10/25 11:30:19 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: converged acme-uk.go.tito.io replica mark true -> false
2026/10/25 11:30:19 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 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 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:19 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/25 11:30:19 provision: router.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/25 11:30:19 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/25 11:30:19 provision: converged acme.go.tito.io channel stable -> edge
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/25 11:30:19 provision: not removing acme.go.tito.io (record gone): participant of a running operation
2026/10/25 11:30:19 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/25 11:30:19 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/25 11:30:19 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 11:30:19 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/25 11:30:19 provision: acme.go.tito.io: held restoring by rb_other, not by mv_acme; leaving it
2026/10/25 11:30:19 provision: acme.go.tito.io: the row is not this pass's (app "other" acct ""); not holding it for mv_acme
2026/10/25 11:30:19 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/25 11:30:19 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 11:30:19 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 11:30:19 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/25 11:30:19 provision: minted instance route acme.example.com (app "shop" acct "bac")
2026/10/25 11:30:19 provision: minted instance route plain.example.com (app "shop" acct "bac")
2026/10/25 11:30:19 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:19 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 11:30:19 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:19 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 11:30:19 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:19 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 11:30:19 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:19 provision: listing apps/bac/shop/instances/: list refused — its records are unseen this pass
2026/10/25 11:30:20 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:20 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/25 11:30:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:20 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/25 11:30:20 provision: minted sidecar route bot.shop.bac.sidecar.internal (app "shop" acct "bac" args ["run"])
2026/10/25 11:30:20 provision: removed retired sidecar route bot.shop.bac.sidecar.internal (record gone)
2026/10/25 11:30:20 provision: minted sidecar route bot.shop.bum.sidecar.internal (app "shop" acct "bum" args ["run"])
2026/10/25 11:30:20 provision: minted sidecar route bot.shop.bum.sidecar.internal (app "shop" acct "bum" args ["run"])
2026/10/25 11:30:20 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 11:30:20 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 11:30:20 provision: removed retired sidecar route bot.shop.bum.sidecar.internal (record gone)
2026/10/25 11:30:20 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 11:30:20 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 11:30:20 provision: removed retired sidecar route bot.shop.bum.sidecar.internal (record gone)
2026/10/25 11:30:21 provision: a.shop.example.com: swapped for import sd_k2762somyc6p2flhjcudluesrq (the original route is journaled)
2026/10/25 11:30:21 provision: a.shop.example.com: import sd_k2762somyc6p2flhjcudluesrq committed: its gate is cleared and its journal row dropped
2026/10/25 11:30:21 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 11:30:21 provision: a.shop.example.com: import sd_4iibmn5zfbhc5s5nq2s4z6zawy rolled back to its original route
2026/10/25 11:30:21 provision: a.shop.example.com: import sd_4iibmn5zfbhc5s5nq2s4z6zawy: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/25 11:30:21 provision: a.shop.example.com: import sd_4iibmn5zfbhc5s5nq2s4z6zawy is cleaned up and its journal row retired
2026/10/25 11:30:21 provision: a.shop.example.com: import sd_bfsyvzcpdxsvnuhxropooone3q rolled back to its original route
2026/10/25 11:30:21 provision: a.shop.example.com: import sd_bfsyvzcpdxsvnuhxropooone3q: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/25 11:30:21 provision: a.shop.example.com: import sd_bfsyvzcpdxsvnuhxropooone3q is cleaned up and its journal row retired
2026/10/25 11:30:21 provision: dry-run: would redo a.shop.example.com's swap record CAS for import sd_gf34yrapmofmafqorndx6ygiui
2026/10/25 11:30:21 provision: dry-run: would clear a.shop.example.com's import gate
2026/10/25 11:30:21 provision: dry-run: would converge a.shop.example.com seed source
2026/10/25 11:30:21 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 11:30:21 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 11:30:21 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 11:30:21 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 11:30:21 provision: a.shop.example.com: import sd_3wvzq74htrxiqv5ki4245ivks4 cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/25 11:30:21 provision: a.shop.example.com: import sd_rhpyinfhkiadrqim7nh53z4ulu cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/25 11:30:21 provision: a.shop.example.com: import sd_l26jiwnk5jqcvelprt4bq7bvku is journaled, but this box cannot act on imports; its row is left alone
2026/10/25 11:30:21 provision: a.shop.example.com: import sd_peq3gvhj56llw4we57bgjojywy is journaled, but this box cannot act on imports; its row is left alone
2026/10/25 11:30:21 provision: a.shop.example.com: import sd_gd7e5t5zmax4gtf46au3wuymtm is journaled, but this box cannot act on imports; its row is left alone
2026/10/25 11:30:21 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 11:30:21 provision: b.shop.example.com: import sd_qqzsfunse6iivew6ubn4xblkse left alone this pass: the import journal could not be read
2026/10/25 11:30:21 provision: c.shop.example.com: import sd_x4jvcaba3d6if6zmhz4l23wwuy left alone this pass: the import journal could not be read
2026/10/25 11:30:21 provision: a.shop.example.com: import sd_vg6mhwv4tjeyu4n5bwkyhghawi committed: its gate is cleared and its journal row dropped
2026/10/25 11:30:21 provision: a.shop.example.com: not converging import sd_xoux24tpnkfed2yec7lgncd5qy: it is swapped but not committed, and the row on this box has no import gate
2026/10/25 11:30:21 provision: a.shop.example.com: not converging import sd_fkjdf4pu5ls24mqedoaf6hq54m: it is swapped but not committed, and the row on this box has no import gate
2026/10/25 11:30:21 provision: a.shop.example.com: not converging import sd_3b3ml3jzebx7ji5w3rn7eppb2i: it is placed but not committed, and the row on this box has no import gate
2026/10/25 11:30:21 provision: a.shop.example.com: not converging import sd_5ivtiub5rggidmt5zw6xbclp2u: it is placed but not committed, and the row on this box has no import gate
2026/10/25 11:30:21 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 11:30:21 provision: converge seed source on a.shop.example.com: constraint failed: seed_source is read-only here (1811)
2026/10/25 11:30:21 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 11:30:22 provision: a.shop.example.com: import sd_g7uegrkmx4yil5a3mspxocl4zi committed: its gate is cleared and its journal row dropped
2026/10/25 11:30:22 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 11:30:22 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:22 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 11:30:22 provision: acme.go.tito.io: not minting a seeded instance: this box does not mint nested (<nil>)
2026/10/25 11:30:22 provision: acme.go.tito.io: not minting a seeded instance: claim control is on for this box
2026/10/25 11:30:22 provision: acme.go.tito.io: aborted seed sd_k7sthg5tugwziqaanygvm5ilve: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/25 11:30:22 provision: acme.go.tito.io: aborted seed sd_k7sthg5tugwziqaanygvm5ilve rolled back (no box had swapped it)
2026/10/25 11:30:22 provision: acme.go.tito.io: not minting a seeded instance: its record does not describe a hibernating instance
2026/10/25 11:30:22 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:22 provision: removed instance route acme.go.tito.io (its seed sd_nujfcf4bhcfsb3onlztuc7x56e was aborted); the next pass rolls it back
2026/10/25 11:30:22 provision: acme.go.tito.io: aborted seed sd_nujfcf4bhcfsb3onlztuc7x56e: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/25 11:30:22 provision: acme.go.tito.io: aborted seed sd_nujfcf4bhcfsb3onlztuc7x56e rolled back (no box had swapped it)
2026/10/25 11:30:22 provision: acme.go.tito.io: aborted seed sd_2wgbfilnxdmotolgs2w2cgd3mi has a row this pass may not remove; leaving the seed aborted
2026/10/25 11:30:22 provision: acme.go.tito.io: aborted seed sd_6vcsun3qvkeydjiq7nszel6xaq rolled back (no box had swapped it)
2026/10/25 11:30:22 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:22 provision: removed instance route acme.go.tito.io (its seed sd_6l232l2yy5b2itlz26ph3ictoe was aborted); the next pass rolls it back
2026/10/25 11:30:22 provision: acme.go.tito.io: aborted seed sd_6l232l2yy5b2itlz26ph3ictoe has no route on this box: its local data is removed
2026/10/25 11:30:22 provision: acme.go.tito.io: aborted seed sd_6l232l2yy5b2itlz26ph3ictoe rolled back (no box had swapped it)
2026/10/25 11:30:22 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_o6kgpbzj43vs6rmydghd3f4fja (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_o6kgpbzj43vs6rmydghd3f4fja rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_o6kgpbzj43vs6rmydghd3f4fja is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_jrniti3q6d5zqdycvnk2lmhkwi (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_jrniti3q6d5zqdycvnk2lmhkwi rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_jrniti3q6d5zqdycvnk2lmhkwi is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_5ljrysmirrlrvc45kpnlucsiyu (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_5ljrysmirrlrvc45kpnlucsiyu rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_5ljrysmirrlrvc45kpnlucsiyu: the host's replica is left alone: its record no longer names this seed
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_5ljrysmirrlrvc45kpnlucsiyu is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_grspgvywfesbabq45rwer567am (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_grspgvywfesbabq45rwer567am rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_grspgvywfesbabq45rwer567am rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_grspgvywfesbabq45rwer567am is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_4veues2fa4ty7adjwflgavobia (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_4veues2fa4ty7adjwflgavobia rollback deferred: the host is not fenced and stopped yet (stop unproven)
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_7kggpgfm5hdmvnwrhizi2c6zce (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_7kggpgfm5hdmvnwrhizi2c6zce is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_zgc3u4zhfuf5xn6yh323wic2ai (the original route is journaled)
2026/10/25 11:30:22 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_zgc3u4zhfuf5xn6yh323wic2ai left alone this pass: its record could not be read
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_ubn4pzs3ulalngawg4kamwlkfa (the original route is journaled)
2026/10/25 11:30:22 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: read failed: connection reset
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_ubn4pzs3ulalngawg4kamwlkfa left alone this pass: its record could not be read
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_grms5x6wl6qdn7dtmowxeu2hv4 (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_grms5x6wl6qdn7dtmowxeu2hv4: close the import gate: constraint failed: injected (1811)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_grms5x6wl6qdn7dtmowxeu2hv4 rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_grms5x6wl6qdn7dtmowxeu2hv4 is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_dpfu6opa7jc3vo7ijnsskgorii (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_dpfu6opa7jc3vo7ijnsskgorii: close the import gate: constraint failed: injected (1811)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_dpfu6opa7jc3vo7ijnsskgorii rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_dpfu6opa7jc3vo7ijnsskgorii is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_plsaj6vwiuesxmgzpyqb4mc4lm (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_plsaj6vwiuesxmgzpyqb4mc4lm rollback deferred: the host is not fenced and stopped yet (injected failure at fence)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_plsaj6vwiuesxmgzpyqb4mc4lm rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_plsaj6vwiuesxmgzpyqb4mc4lm is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_io5iq4qttqru6sdm7euplxdfcm (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_io5iq4qttqru6sdm7euplxdfcm rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_io5iq4qttqru6sdm7euplxdfcm is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_6qmgppw6clfbft6n5l7mmx32ha (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_6qmgppw6clfbft6n5l7mmx32ha: retire its instance key: injected failure at retire-key
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_6qmgppw6clfbft6n5l7mmx32ha rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_6qmgppw6clfbft6n5l7mmx32ha is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_mgouqkijkxka22n4oszp3twwe4 (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_mgouqkijkxka22n4oszp3twwe4 rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_mgouqkijkxka22n4oszp3twwe4 is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_qnyni4n7hofchw63srdeirsd34 (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_qnyni4n7hofchw63srdeirsd34: remove its local data: injected failure at remove-local
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_qnyni4n7hofchw63srdeirsd34 rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_qnyni4n7hofchw63srdeirsd34 is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_rp3jmxvntqd5viebfzhf3qznwa (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_rp3jmxvntqd5viebfzhf3qznwa rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_rp3jmxvntqd5viebfzhf3qznwa is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_2dhw37qbz63w4wc32cgmk2sfzy (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_2dhw37qbz63w4wc32cgmk2sfzy: remove its local data: injected failure at remove-local-done
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_2dhw37qbz63w4wc32cgmk2sfzy rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_2dhw37qbz63w4wc32cgmk2sfzy is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_3udhjuyeb2vifykyrgzj7m46qa (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_3udhjuyeb2vifykyrgzj7m46qa rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_3udhjuyeb2vifykyrgzj7m46qa is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_rhmk2nkng42q2taznhqyz5f3zu (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_rhmk2nkng42q2taznhqyz5f3zu: restore the original route: constraint failed: injected (1811)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_rhmk2nkng42q2taznhqyz5f3zu rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_rhmk2nkng42q2taznhqyz5f3zu is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_pzfra5b2ebla52hzqbfzb3ppqm (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_pzfra5b2ebla52hzqbfzb3ppqm: restore the original route: constraint failed: injected (1811)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_pzfra5b2ebla52hzqbfzb3ppqm rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_pzfra5b2ebla52hzqbfzb3ppqm is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_4kzyk4vl7f3iip55kgrpwfxssu (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_4kzyk4vl7f3iip55kgrpwfxssu is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_34k4lh75343i2n7e3ytpgqktte (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_34k4lh75343i2n7e3ytpgqktte rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_34k4lh75343i2n7e3ytpgqktte: delete its snapshot: injected failure at delete-snapshot
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_34k4lh75343i2n7e3ytpgqktte is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_v6ium2odghbjgmrl2jn3fc6yea (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_v6ium2odghbjgmrl2jn3fc6yea rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_v6ium2odghbjgmrl2jn3fc6yea is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_fblh65d775pshtaueqro3xjpiu (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_fblh65d775pshtaueqro3xjpiu rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_fblh65d775pshtaueqro3xjpiu: delete the host's replica: injected failure at delete-replica
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_fblh65d775pshtaueqro3xjpiu is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_rueozlzrjzlhgokbus5ybmmxzi (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_rueozlzrjzlhgokbus5ybmmxzi rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_rueozlzrjzlhgokbus5ybmmxzi is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_yxgojuv5kz6pcoyapbtvlfyhym (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_yxgojuv5kz6pcoyapbtvlfyhym rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_yxgojuv5kz6pcoyapbtvlfyhym: retire its journal row: constraint failed: injected (1811)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_yxgojuv5kz6pcoyapbtvlfyhym is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_bzegpvdwkwzne7ulevwg7zbr3q (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_bzegpvdwkwzne7ulevwg7zbr3q rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_bzegpvdwkwzne7ulevwg7zbr3q: retire its journal row: constraint failed: injected (1811)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_bzegpvdwkwzne7ulevwg7zbr3q is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_hcfq23v5q3lj6yqgg3ihvmv4iu (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_hcfq23v5q3lj6yqgg3ihvmv4iu rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_hcfq23v5q3lj6yqgg3ihvmv4iu is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: mark import sd_hcfq23v5q3lj6yqgg3ihvmv4iu rolled back: injected failure at cas
2026/10/25 11:30:22 provision: a.shop.example.com: aborted seed sd_hcfq23v5q3lj6yqgg3ihvmv4iu rolled back (no box had swapped it)
2026/10/25 11:30:22 provision: a.shop.example.com: swapped for import sd_7efowxmdl2n2jswvflwtxajesm (the original route is journaled)
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_7efowxmdl2n2jswvflwtxajesm rolled back to its original route
2026/10/25 11:30:22 provision: a.shop.example.com: import sd_7efowxmdl2n2jswvflwtxajesm is cleaned up and its journal row retired
2026/10/25 11:30:22 provision: a.shop.example.com: aborted seed sd_7efowxmdl2n2jswvflwtxajesm rolled back (no box had swapped it)
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_jzm3clt3s3i4xsddvkt4kbzu7q (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_jzm3clt3s3i4xsddvkt4kbzu7q rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_jzm3clt3s3i4xsddvkt4kbzu7q rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_jzm3clt3s3i4xsddvkt4kbzu7q rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_jzm3clt3s3i4xsddvkt4kbzu7q is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_oeuygzhbxanzzeo3j52yc5wktq (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_oeuygzhbxanzzeo3j52yc5wktq rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_oeuygzhbxanzzeo3j52yc5wktq is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_vfi6hoqrehuusdewbjglh3n3j4 (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_vfi6hoqrehuusdewbjglh3n3j4 rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_vfi6hoqrehuusdewbjglh3n3j4 is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_glexmevwvetxdmjibpptdpoque (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_glexmevwvetxdmjibpptdpoque rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_glexmevwvetxdmjibpptdpoque is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_kkkuaqakafdlkxjmiuks2zeixi (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_kkkuaqakafdlkxjmiuks2zeixi rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_kkkuaqakafdlkxjmiuks2zeixi is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_zm6ryo5w4w4qpwdr3jmxx375aq (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_zm6ryo5w4w4qpwdr3jmxx375aq rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_zm6ryo5w4w4qpwdr3jmxx375aq is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_yjvnulzfttlfrr4kpgxmihqcea (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_yjvnulzfttlfrr4kpgxmihqcea rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_yjvnulzfttlfrr4kpgxmihqcea is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_756lze3526fthen6gyfg6bbfgy (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_756lze3526fthen6gyfg6bbfgy rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_756lze3526fthen6gyfg6bbfgy is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_rdtruvk3qhfhv5xe73zbnx65fa (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_rdtruvk3qhfhv5xe73zbnx65fa has no route on this box: its local data is removed and no route is put back
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_rdtruvk3qhfhv5xe73zbnx65fa is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_y6su52g35lpism45l5cgx3layu (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_nmtr575sg42c3ehye7r5fbct6u (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_nxbax6lebl43tn7pcgm6udwezi (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_nxbax6lebl43tn7pcgm6udwezi cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_x63cqiyihtyp3ioftkzplubm74 (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_x63cqiyihtyp3ioftkzplubm74 is not rolled back: the route changed under the fence, so nothing there is touched
2026/10/25 11:30:23 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 11:30:23 provision: a.shop.example.com: import ../not-a-seed is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_ttjeegeg3owhha7lhssuziphfy (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_x54ej6zi2l63ejbn2v46laziae (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_rbres2jtjesph2o6oveq2sgn4e (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_nljzqp6dtjghxzq4nt5uut6kz4 (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_4gw5n4bv7bzwdcrqbyrjrzvzum (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_4gw5n4bv7bzwdcrqbyrjrzvzum rollback deferred: the host is not fenced and stopped yet (stop evidence unreadable)
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_5x4a6eq6gnky2lhpv4hpx453l4 (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_5x4a6eq6gnky2lhpv4hpx453l4 has no route on this box: its local data is removed and no route is put back
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_5x4a6eq6gnky2lhpv4hpx453l4 is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_ojdqzts3ca45lem5n6hfwqbxyq (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_ojdqzts3ca45lem5n6hfwqbxyq: remove its local data: injected failure at remove-local
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_ojdqzts3ca45lem5n6hfwqbxyq is not rolled back: the route at the host is not the import's, so nothing there is touched
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_lni5rwlezk3twp47r2rbptwuae (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_lni5rwlezk3twp47r2rbptwuae: a route appeared at the host, so its local database is left and the rollback waits
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_i7lwef2bhsmoyvc7l3v75o6dqa (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_i7lwef2bhsmoyvc7l3v75o6dqa rollback deferred: no fence generation: registry busy
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_vi4padjsrd3yu3kixjydsh4xfu (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_vi4padjsrd3yu3kixjydsh4xfu rollback deferred: no fence generation: the generation source answered 0
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_chvtokvp2mrcwyomdcq5hjwskm (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_alhwiiagx7bbn6g5kosjhc3yme (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_a63friyv7w2tvm5rbagugqxckm (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import deferred: this box cannot read the instance's env file
2026/10/25 11:30:23 provision: a.shop.example.com: import deferred: the instance's env file could not be read: a symlink
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_fugxicfz6gij32hea5yw3tmn5m (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_fugxicfz6gij32hea5yw3tmn5m rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_fugxicfz6gij32hea5yw3tmn5m is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_6kxpa2k2oshkirt27sxnj3lmua (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_6kxpa2k2oshkirt27sxnj3lmua rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_6kxpa2k2oshkirt27sxnj3lmua is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_nromtqxok5yyj3l5p4mucmplem (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_nromtqxok5yyj3l5p4mucmplem rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_nromtqxok5yyj3l5p4mucmplem is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_gujnu6rrbxooc3nalw6ahdyfui (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_gujnu6rrbxooc3nalw6ahdyfui: retire its instance key: the env file is a symlink
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_gujnu6rrbxooc3nalw6ahdyfui rolled back to its original route
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_gujnu6rrbxooc3nalw6ahdyfui is cleaned up and its journal row retired
2026/10/25 11:30:23 provision: a.shop.example.com: swapped for import sd_jdh5yjv2hqkytcsji4dldtzmja (the original route is journaled)
2026/10/25 11:30:23 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 11:30:23 provision: a.shop.example.com: swapped for import sd_hun7dg6pexbeuu4mlaotc4xtnq (the original route is journaled)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_p7m5sg6uuiyt2mbndu4cusj35i refused: there is no route at a.shop.example.com to replace
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_knoulxl4mtonffpge35mlyx7nq refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_6lwvssqeoi2u7t67tqduxxpz6a 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 11:30:23 provision: a.shop.example.com: import sd_jfocolcisemsmjz44r2kro2loq refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_nx5stlnnpp3efpxmzdzo2az7aq refused: the route belongs to app other
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_267tf27lmdszuxs5zfrhwmsbsy refused: the route is filed under another account
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_ofszukrjssjmexn56x7ukk2b3a refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_roeg53vjjtf7v5jvwsnb6tyeaa refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_ib6lpaqvyo5ufm2g4pbumrowz4 refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_nm3tkwajld7esyx54panhbkr7i refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_miodj2ukz5n5ogz67hl4xcjsq4 refused: the route is not an address route this import can take over (socket)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_kbm2c7yhb2ehkyyka5je4vpjce refused: the route is not an address route this import can take over (no address)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_mnmgkd7ggnbdpmlhzlr7dv6dxq refused: the route is not an address route this import can take over (provisioned)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_dfx6far6beq4475amt6tvuliuy refused: the route is not an address route this import can take over (kind static)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_vpcui434t5to6ij6jqrzlbqyri refused: the route is not an address route this import can take over (backing)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_k5hqusfpnvkskqylvgnslqhvua refused: the route is not an address route this import can take over (tunnel)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_5ftyydkarw6qtacoyyggq37664 refused: the route is not an address route this import can take over (caps)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_lgsrtpiiauqsxghstmg6frkuoy refused: the route is not an address route this import can take over (platform)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_uuhspf4zf353xq2gz427cqn2y4 refused: the route is not an address route this import can take over (canary)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_pgvn4eq2dytf4h47pnqfrjs7ze refused: the route is not an address route this import can take over (kind sidecar)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_cgmbjn2uyd66zzzmiqr5qqxngm refused: the route is not an address route this import can take over (region)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_ecxfz6svc3vbipgkuko4rub4d4 refused: the route is not an address route this import can take over (fleet_box)
2026/10/25 11:30:23 provision: a.shop.example.com: import sd_tbkpj3y3mljjcji6sixyoolfqe refused: the route is not an address route this import can take over (hibernate)
2026/10/25 11:30:24 provision: a.shop.example.com: import sd_gbrhyqgt65ae7mkttgmcyjexya refused: the route is not an address route this import can take over (claim_owner)
2026/10/25 11:30:24 provision: a.shop.example.com: import sd_lmmeumadm7tycz5wxcdkmclhrm refused: this box does not run instances nested
2026/10/25 11:30:24 provision: a.shop.example.com: import sd_gpkuhbqlqbfsve7cciua7scde4 refused: this box does not run instances nested
2026/10/25 11:30:24 provision: a.shop.example.com: import sd_mt3iajwduqqqd5ozgr4mtpcudi refused: claim control is on for this box
2026/10/25 11:30:24 provision: a.shop.example.com: swapped for import sd_jmewdhgsloygby4au2ykekpgg4 (the original route is journaled)
2026/10/25 11:30:24 provision: a.shop.example.com: swapped for import sd_uxx6mk4fmnfs4737c4dkj4c3fq (the original route is journaled)
2026/10/25 11:30:24 provision: a.shop.example.com: import deferred: this box cannot read the legacy route assignments
2026/10/25 11:30:24 provision: a.shop.example.com: import deferred: the legacy route assignments could not be read: store down
2026/10/25 11:30:24 provision: a.shop.example.com: not swapping for import sd_bv436kfkunmobqkcwr75y6gnsm: its verify hash is not a sha256
2026/10/25 11:30:24 provision: a.shop.example.com: not swapping for import sd_5bf2eonwoqvpork57e6bxl2cn4: its verify hash is not a sha256
2026/10/25 11:30:24 provision: a.shop.example.com: not swapping for import sd_oq4ylvdjx7tspl4o723lxcf4qe: its verify hash is not a sha256
2026/10/25 11:30:24 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 11:30:24 provision: A.shop.example.com/..: not swapping for import sd_4swnaqacndx7bqunxegdcf7gge: its host or seed id is malformed (seeds: not a host)
2026/10/25 11:30:24 provision: a.shop.example.com: not swapping for import sd_djq37uffdfzg6p76v736o5gdji: its record does not describe a nested, hibernating instance
2026/10/25 11:30:24 provision: a.shop.example.com: not swapping for import sd_lcfqylzpbifj7qo6wyypoxmc6u: its record does not describe a nested, hibernating instance
2026/10/25 11:30:24 provision: a.shop.example.com: not swapping for import sd_t2jxuyoau665pr6rfwp6eqoh6q: its record does not describe a nested, hibernating instance
2026/10/25 11:30:24 provision: a.shop.example.com: not swapping for import sd_6cue6wscxuggbb3evdz4wa7tve: its record does not describe a nested, hibernating instance
2026/10/25 11:30:24 provision: a.shop.example.com: import deferred: the box's layout intent could not be read: store down
2026/10/25 11:30:24 provision: a.shop.example.com: swapped for import sd_hjocukdctdy7rghuonkelep6we (the original route is journaled)
2026/10/25 11:30:24 provision: a.shop.example.com: import deferred: the box's nested probe did not answer: ready probe timed out
2026/10/25 11:30:24 provision: a.shop.example.com: swapped for import sd_zvpd7khe4bw2adu6h4ci7wnw54 (the original route is journaled)
2026/10/25 11:30:24 provision: a.shop.example.com: swapped for import sd_qqwv2noxyfhccacarykvweu7ie (the original route is journaled)
2026/10/25 11:30:24 provision: a.shop.example.com: import deferred: the route is held by operation op_1
2026/10/25 11:30:24 provision: dry-run: would consider swapping a.shop.example.com for import sd_dvtffnodrnteofwcml2tnefd7q
2026/10/25 11:30:24 provision: a.shop.example.com: import sd_p5brx4ifmsmbyeb6dbzj22jhym rolled back to its original route
2026/10/25 11:30:24 provision: a.shop.example.com: import sd_p5brx4ifmsmbyeb6dbzj22jhym: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/25 11:30:24 provision: a.shop.example.com: import sd_p5brx4ifmsmbyeb6dbzj22jhym is cleaned up and its journal row retired
2026/10/25 11:30:24 provision: a.shop.example.com: import sd_i5eu2y3z5wszgy52k7lxpmj4p4 left alone: the import journal holds seed sd_wk5zfd7fl6z3opdk32kns6wofi at swapped
2026/10/25 11:30:24 provision: a.shop.example.com: not minting import sd_kqfstkiqhmo4rfonetbu2xqnae: it is swapped but not committed, and only its swap makes its row
2026/10/25 11:30:24 provision: a.shop.example.com: not minting import sd_rtei2qcy7jwypexelisbgpajyq: it is placed but not committed, and only its swap makes its row
2026/10/25 11:30:24 provision: a.shop.example.com: swapped for import sd_r35y6fhblx5ymicmsngh63qqxq (the original route is journaled)
2026/10/25 11:30:24 provision: a.shop.example.com: not minting import sd_r35y6fhblx5ymicmsngh63qqxq: it is swapped but not committed, and only its swap makes its row
2026/10/25 11:30:24 provision: a.shop.example.com: not minting import sd_r35y6fhblx5ymicmsngh63qqxq: it is placed but not committed, and only its swap makes its row
2026/10/25 11:30:24 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/25 11:30:24 provision: removed retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/25 11:30:24 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:24 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:24 provision: converged sidecar bot.eleven.bac.sidecar.internal args ["sidecar","run"] -> ["worker","run"]
2026/10/25 11:30:24 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:24 provision: converged sidecar bot.eleven.bac.sidecar.internal ceilings 300/3600 -> 60/120
2026/10/25 11:30:24 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:24 provision: converged sidecar bot.eleven.bac.sidecar.internal channel stable -> canary/eleven
2026/10/25 11:30:24 provision: converged sidecar bot.eleven.bac.sidecar.internal environment "other" -> "relay"
2026/10/25 11:30:24 provision: converged sidecar bot.eleven.bac.sidecar.internal hibernate true -> false
2026/10/25 11:30:24 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: read failed: failStore: reads disabled under apps/bac/eleven/sidecars/
2026/10/25 11:30:24 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: malformed: invalid character 'n' looking for beginning of object key string
2026/10/25 11:30:24 provision: not removing sidecar bot.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/25 11:30:24 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: empty channel
2026/10/25 11:30:24 provision: skipping sidecar record apps/bac/eleven/sidecars/held.json: empty channel
2026/10/25 11:30:24 provision: not removing sidecar held.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/25 11:30:24 provision: removed retired sidecar route old.eleven.bac.sidecar.internal (record gone)
2026/10/25 11:30:24 provision: bac/eleven has sidecar records but no sidecars manifest — not minting
2026/10/25 11:30:24 provision: bac/eleven is in the trash — not minting sidecar routes for it
2026/10/25 11:30:24 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 11:30:24 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 11:30:24 provision: minted sidecar route hub.relay.bac.sidecar.internal (app "relay" acct "bac" args ["relay"])
2026/10/25 11:30:24 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:24 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 11:30:24 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:24 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 11:30:24 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:24 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:24 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 11:30:24 provision: removed retired sidecar route bot.eleven.bac.sidecar.internal (record gone)
2026/10/25 11:30:24 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:24 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 11:30:24 provision: skipping sidecar record apps/bac/relay/sidecars/hub.json: read failed: failStore: reads disabled under apps/bac/relay/sidecars/
2026/10/25 11:30:24 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 11:30:24 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/25 11:30:24 provision: dry-run: would mint sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" channel "stable" args ["sidecar","run"])
2026/10/25 11:30:24 provision: dry-run: would remove retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/25 11:30:24 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 11:30:24 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:24 provision: converged acme.go.tito.io update settings "{\"updates\":\"manual\",\"channel\":\"stable\"}" -> ""
2026/10/25 11:30:24 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:24 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:24 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/25 11:30:24 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/25 11:30:24 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/25 11:30:24 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/25 11:30:24 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/25 11:30:24 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/25 11:30:24 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/25 11:30:24 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 11:30:24 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/25 11:30:24 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/25 11:30:24 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/25 11:30:24 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: record view: change index unusable (get refused): walking
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: record view: re-reading apps/bqc/shop failed: retrying on the next refresh
2026/10/25 11:30:24 provision: listing apps/bqc/shop/instances/: list refused — its records are unseen this pass
2026/10/25 11:30:24 provision: listing apps/bqc/shop/instances/: list refused — its records are unseen this pass
2026/10/25 11:30:24 provision: an app's records could not be listed: they are skipped
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: record view: re-reading apps/bqc/shop failed: retrying on the next refresh
2026/10/25 11:30:24 provision: record view: change index unusable (release: change index malformed: invalid character 'n' looking for beginning of object key string): walking
2026/10/25 11:30:24 provision: listing apps/bqc/shop/instances/: context canceled — its records are unseen this pass
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/25 11:30:24 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/25 11:30:24 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/25 11:30:24 provision: record view: re-reading accounts/bqd failed: retrying on the next refresh
2026/10/25 11:30:24 provision: skipping accounts/bqd/account.json: read failed: list refused
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/25 11:30:24 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/25 11:30:24 provision: skipping record apps/bum/shop/instances/one.example.com.json: empty channel
2026/10/25 11:30:24 provision: not removing one.example.com: its record exists but could not be read cleanly this pass
2026/10/25 11:30:24 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/25 11:30:24 provision: skipping record apps/bum/shop/instances/one.example.com.json: empty channel
2026/10/25 11:30:24 provision: removed retired instance route one.example.com (record gone)
2026/10/25 11:30:24 provision: not removing one.example.com: its record exists but could not be read cleanly this pass
2026/10/25 11:30:24 provision: removed retired instance route one.example.com (record gone)
2026/10/25 11:30:24 provision: record view: change index unusable (context deadline exceeded): walking
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/25 11:30:24 provision: record view: change index unusable (context deadline exceeded): the walk records no generations
2026/10/25 11:30:24 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
--- FAIL: TestPlan14RootReadCensus (16.38s)
plan14_root_reads_test.go:600: root read census: 16 discrepancies
changed registry schema
changed root read internal/host/buildstate.go:buildStates.retained; review class, task, sites and digest
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 read internal/release/adopt.go:adoptHost; review class, task, sites and digest
changed root source envelope internal/host
changed root source envelope internal/instancectl
changed root source envelope internal/registry
changed root source envelope internal/release
stale root read internal/release/adopt.go:stageFrom
stale root read internal/release/adopt.go:type stageCheck
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.427s
ok github.com/carlosframework/platform/internal/publicrelease 0.020s
? github.com/carlosframework/platform/internal/regionname [no test files]
ok github.com/carlosframework/platform/internal/registry 5.994s
ok github.com/carlosframework/platform/internal/relay 7.195s
ok github.com/carlosframework/platform/internal/release 26.604s
ok github.com/carlosframework/platform/internal/rollout 3.723s
ok github.com/carlosframework/platform/internal/rolloutwords 0.014s
ok github.com/carlosframework/platform/internal/rootaws 0.015s
ok github.com/carlosframework/platform/internal/rootfsimage 0.354s
ok github.com/carlosframework/platform/internal/rootparticipation 0.069s
ok github.com/carlosframework/platform/internal/rootstate 0.051s
ok github.com/carlosframework/platform/internal/runs 0.637s
ok github.com/carlosframework/platform/internal/s3compat 0.015s
ok github.com/carlosframework/platform/internal/safefile 0.011s
ok github.com/carlosframework/platform/internal/schedule 2.716s
ok github.com/carlosframework/platform/internal/seeds 0.017s
ok github.com/carlosframework/platform/internal/sim/engines 2.334s
ok github.com/carlosframework/platform/internal/sim/hostlife 9.335s
ok github.com/carlosframework/platform/internal/sim/litestreamfacts 3.976s
ok github.com/carlosframework/platform/internal/status 0.123s
ok github.com/carlosframework/platform/internal/steering 0.014s
ok github.com/carlosframework/platform/internal/stopevidence 0.259s
ok github.com/carlosframework/platform/internal/svcrole 0.006s
ok github.com/carlosframework/platform/internal/telemetry 0.006s
ok github.com/carlosframework/platform/internal/termfence 0.004s
ok github.com/carlosframework/platform/internal/tunnelclient 0.007s
ok github.com/carlosframework/platform/internal/unixdial 0.005s
ok github.com/carlosframework/platform/internal/updatewords 0.004s
ok github.com/carlosframework/platform/internal/usage 0.008s
ok github.com/carlosframework/platform/internal/version 0.002s
ok github.com/carlosframework/platform/internal/vet 1.577s
FAIL
=== internal_console@0 (75 s)
ok github.com/carlosframework/platform/internal/console 73.217s
=== internal_console@1 (46 s)
ok github.com/carlosframework/platform/internal/console 44.142s
=== internal_console@2 (43 s)
ok github.com/carlosframework/platform/internal/console 41.165s
=== internal_console@3 (44 s)
ok github.com/carlosframework/platform/internal/console 42.029s
=== internal_console@4 (46 s)
ok github.com/carlosframework/platform/internal/console 44.313s
=== internal_console@5 (46 s)
ok github.com/carlosframework/platform/internal/console 43.711s
=== internal_console@6 (47 s)
ok github.com/carlosframework/platform/internal/console 45.167s
=== internal_console@7 (52 s)
ok github.com/carlosframework/platform/internal/console 50.442s
=== internal_host@0 (33 s)
ok github.com/carlosframework/platform/internal/host 30.650s
=== internal_host@1 (31 s)
ok github.com/carlosframework/platform/internal/host 29.105s
=== internal_host@2 (60 s)
ok github.com/carlosframework/platform/internal/host 58.036s
=== internal_host@3 (32 s)
ok github.com/carlosframework/platform/internal/host 30.498s
=== root@0 (71 s)
ok github.com/carlosframework/platform 69.304s
=== root@1 (49 s)
ok github.com/carlosframework/platform 47.811s
=== root@2 (62 s)
ok github.com/carlosframework/platform 60.541s
=== root@3 (53 s)
ok github.com/carlosframework/platform 52.075s
=== root@4 (58 s)
ok github.com/carlosframework/platform 56.735s
Failure summary:
--- rest
--- FAIL: TestPlan14RootReadCensus (16.38s)
plan14_root_reads_test.go:600: root read census: 16 discrepancies
FAIL github.com/carlosframework/platform/internal/provision 25.427s
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/host/buildstate.go b/internal/host/buildstate.go| index a6676123f..caf1daa28 100644 |
| --- a/internal/host/buildstate.go |
| +++ b/internal/host/buildstate.go |
| @@ -53,6 +53,9 @@ type buildStates struct { |
| // beforePut, when set (tests only), runs in update between its read and |
| // its conditional Put. |
| beforePut func(ctx context.Context, store release.Store, key string) |
| + // platform, when set (tests only), is the box platform retained looks a |
| + // staged copy up for; "" is release.BoxPlatform(). |
| + platform string |
| mu sync.Mutex |
| hosts map[string]*sync.Mutex // per-host: a read or update and its column write are one step |
| @@ -786,11 +789,22 @@ func (b *buildStates) heldWakeInput(rt registry.Route, state *release.BuildState |
| // never makes. |
| func settingsApply(rt registry.Route) bool { return rt.Kind == "instance" && rt.Unit == "" } |
| -// retained is v's staged executable on this box when its bytes match its |
| -// staged manifest's sha256 for this platform (release.RetainedStaged, the |
| -// check stageAuthorized's recovery uses), else nil (Astra I3 #5). |
| +// retained is v's staged build on this box when its bytes match its staged |
| +// manifest's sha256 for this platform (release.RetainedStaged, the check |
| +// stageAuthorized's recovery uses), else nil (Astra I3 #5). A copy of the |
| +// other kind than rt runs is nil too: the wake would record it as the |
| +// row's build and exec it, a 0644 squashfs as a binary row's executable or |
| +// a binary as a rootfs row's image (release.RuntimeMatches, the rule |
| +// staging applies). |
| func (b *buildStates) retained(rt registry.Route, v string) *release.StagedIdentity { |
| - id, _ := release.RetainedStaged(b.optDir, release.RouteAccount(rt), rt.App, v) |
| + platform := b.platform |
| + if platform == "" { |
| + platform = release.BoxPlatform() |
| + } |
| + id, m := release.RetainedStagedOn(platform, b.optDir, release.RouteAccount(rt), rt.App, v) |
| + if id == nil || release.RuntimeMatches(m, rt.Runtime) != nil { |
| + return nil |
| + } |
| return id |
| } |
diff --git a/internal/host/buildstate_rootfs_test.go b/internal/host/buildstate_rootfs_test.go| new file mode 100644 |
| index 000000000..cd396340f |
| --- /dev/null |
| +++ b/internal/host/buildstate_rootfs_test.go |
| @@ -0,0 +1,107 @@ |
| +package host |
| + |
| +import ( |
| + "crypto/sha256" |
| + "encoding/hex" |
| + "encoding/json" |
| + "testing" |
| + |
| + "github.com/carlosframework/platform/internal/registry" |
| + "github.com/carlosframework/platform/internal/release" |
| +) |
| + |
| +// stageImageWithManifest stages body as a rootfs image of acct/app at ver, |
| +// with a rootfs manifest sibling naming its sha256, as root's staging |
| +// leaves a verified image. |
| +func stageImageWithManifest(t *testing.T, optDir, acct, app, ver string, body []byte) { |
| + t.Helper() |
| + if err := release.StageArtifact(optDir, acct, ver, app, body); err != nil { |
| + t.Fatal(err) |
| + } |
| + sum := sha256.Sum256(body) |
| + m := release.Manifest{Schema: 1, App: app, Version: ver, Kind: release.KindRootfs, |
| + Artifacts: map[string]release.Artifact{release.RootfsArtifactKey: {File: release.RootfsArtifactFile, SHA256: hex.EncodeToString(sum[:]), Size: int64(len(body))}}, |
| + Processes: map[string]release.Process{release.ProcessWeb: {Command: []string{"/app/serve"}}}} |
| + raw, err := json.Marshal(m) |
| + if err != nil { |
| + t.Fatal(err) |
| + } |
| + if err := release.StageManifest(optDir, acct, ver, app, raw); err != nil { |
| + t.Fatal(err) |
| + } |
| +} |
| + |
| +// heldOnV2 makes a.example.com a held route whose decided target is v2, |
| +// re-inserted with runtime first (Runtime is fixed at insert). |
| +func heldOnV2(t *testing.T, b *buildStates, reg *registry.Registry, runtime string) { |
| + t.Helper() |
| + rt, err := reg.Get("a.example.com") |
| + if err != nil || rt == nil { |
| + t.Fatalf("route: %v", err) |
| + } |
| + if err := reg.Delete("a.example.com"); err != nil { |
| + t.Fatal(err) |
| + } |
| + rt.Runtime = runtime |
| + if err := reg.Upsert(*rt); err != nil { |
| + t.Fatal(err) |
| + } |
| + setSettings(t, reg, release.UpdateSettings{Updates: release.UpdatesManual, Channel: "stable"}) |
| + setCopy(t, reg, release.BuildStateCopy{Known: true, Replica: true, State: &release.BuildState{LastExecuted: "v2"}}) |
| + decided(t, b, release.Consumed{Reason: string(release.ReasonManual), Desired: "v2"}) |
| +} |
| + |
| +// C2 at the held wake: the retained copy a held wake offers (and the |
| +// direct wake path records and runs, activator wakecheck) is only ever one |
| +// of the kind the row runs. A rootfs image a sibling rootfs row staged |
| +// under the same version is never a binary row's build, and a binary is |
| +// never a rootfs row's image. The box platform is linux-arm64 (b.platform) |
| +// so the image's key is this box's whatever the test machine is. |
| +func TestARetainedCopyOfTheOtherKindIsNotOffered(t *testing.T) { |
| + t.Parallel() |
| + for _, c := range []struct { |
| + name, runtime string |
| + image, want bool |
| + }{ |
| + {"binary row, rootfs image staged", "", true, false}, |
| + {"rootfs row, binary staged", registry.RuntimeRootfsV1, false, false}, |
| + {"rootfs row, rootfs image staged", registry.RuntimeRootfsV1, true, true}, |
| + {"binary row, binary staged", "", false, true}, |
| + } { |
| + t.Run(c.name, func(t *testing.T) { |
| + t.Parallel() |
| + b, _, reg := testBuildStates(t) |
| + b.platform = "linux-arm64" |
| + heldOnV2(t, b, reg, c.runtime) |
| + if c.image { |
| + stageImageWithManifest(t, b.optDir, "bab", "km", "v2", []byte("an image")) |
| + } else { |
| + m := release.Manifest{Schema: 1, App: "km", Version: "v2", Kind: "binary", |
| + Artifacts: map[string]release.Artifact{"linux-arm64": {File: "km", SHA256: fileSHAOf([]byte("a binary")), Size: 8}}} |
| + raw, _ := json.Marshal(m) |
| + if err := release.StageArtifact(b.optDir, "bab", "v2", "km", []byte("a binary")); err != nil { |
| + t.Fatal(err) |
| + } |
| + if err := release.StageManifest(b.optDir, "bab", "v2", "km", raw); err != nil { |
| + t.Fatal(err) |
| + } |
| + } |
| + // The copy itself verifies: only its kind can keep it from the wake. |
| + if id, _ := release.RetainedStagedOn("linux-arm64", b.optDir, "bab", "km", "v2"); id == nil { |
| + t.Fatal("fixture: the staged copy does not verify") |
| + } |
| + h := b.heldTarget("a.example.com") |
| + if !h.Held || h.Target != "v2" { |
| + t.Fatalf("heldTarget = %+v; want held on v2", h) |
| + } |
| + if got := h.Staged != nil; got != c.want { |
| + t.Fatalf("Staged = %+v; want offered = %v", h.Staged, c.want) |
| + } |
| + }) |
| + } |
| +} |
| + |
| +func fileSHAOf(body []byte) string { |
| + sum := sha256.Sum256(body) |
| + return hex.EncodeToString(sum[:]) |
| +} |
diff --git a/internal/release/adopt.go b/internal/release/adopt.go| index 049ff3561..6eb2a9b21 100644 |
| --- a/internal/release/adopt.go |
| +++ b/internal/release/adopt.go |
| @@ -2246,6 +2246,12 @@ type stageCheck struct { |
| runtime string |
| } |
| +// RuntimeMatches is runtimeMatches for callers outside this package that |
| +// hold a manifest and a row: the held wake's retained copy |
| +// (host.buildStates.retained) must refuse an image for a binary row, and a |
| +// binary for a rootfs row, exactly as staging does. |
| +func RuntimeMatches(m *Manifest, runtime string) error { return runtimeMatches(m, runtime) } |
| + |
| // errRuntimeMismatch is a release of one kind meeting a row that runs the |
| // other: a rootfs image for a binary row, or a binary for a rootfs row. |
| var errRuntimeMismatch = errors.New("release: the release's kind does not match the row's runtime") |
| @@ -2377,15 +2383,20 @@ func stageFrom(ctx context.Context, s Store, optDir, acct, app, ver, host string |
| if bound { |
| sibling = syncSibling |
| } |
| + art, hasBuild := m.BoxArtifact(adoptPlatform) |
| // A rootfs start is validated against the staged sibling (root refuses |
| - // one without it), so for a rootfs release a sibling that is not there |
| - // fails the stage and nothing is pointed live; a binary's stays |
| - // best-effort (preflight 1.6). |
| + // one without it), so for a rootfs release a sibling that is not there, |
| + // or is not this image's manifest, fails the stage and nothing is |
| + // pointed live; a binary's stays best-effort (preflight 1.6). An image's |
| + // sibling is always made exactly raw (syncSibling), bound or not: an |
| + // older same-name sibling naming another digest is replaced, never kept |
| + // beside bytes it does not describe. |
| reused := func() (*Manifest, error) { |
| - sibling(optDir, acct, app, ver, host, raw, chk) |
| if !m.IsRootfs() { |
| + sibling(optDir, acct, app, ver, host, raw, chk) |
| return m, nil |
| } |
| + syncSibling(optDir, acct, app, ver, host, raw, chk) |
| sib, err := ReadStagedManifest(optDir, acct, ver, app) |
| switch { |
| case err != nil: |
| @@ -2393,13 +2404,16 @@ func stageFrom(ctx context.Context, s Store, optDir, acct, app, ver, host string |
| err = os.ErrNotExist |
| case !sib.IsRootfs(): |
| err = errRuntimeMismatch |
| + default: |
| + if a, ok := sib.BoxArtifact(adoptPlatform); !ok || !strings.EqualFold(a.SHA256, art.SHA256) { |
| + err = errArtifactMismatch |
| + } |
| } |
| if err != nil { |
| return nil, fmt.Errorf("%s/%s: stage manifest sibling: %w", app, ver, err) |
| } |
| return m, nil |
| } |
| - art, hasBuild := m.BoxArtifact(adoptPlatform) |
| if staged { |
| if v := chk.verified[path]; v != "" && (!bound || hasBuild && strings.EqualFold(v, art.SHA256)) { |
| return reused() |
| @@ -2458,9 +2472,21 @@ func stageFrom(ctx context.Context, s Store, optDir, acct, app, ver, host string |
| if m.IsRootfs() { |
| mode = 0o644 // an image is mounted, never executed |
| } |
| + // The stream is bounded by the size the manifest names (one byte over, |
| + // so an oversized object fails its hash after at most that much is |
| + // written, never after filling the version store). An image is bounded |
| + // by MaxRootfsBytes too. A binary manifest from before sizes were |
| + // filled in (size 0) is read unbounded, as before. |
| + limit := art.Size |
| + if m.IsRootfs() { |
| + limit = min(limit, MaxRootfsBytes) |
| + } |
| err := stageArtifactFrom(optDir, acct, ver, app, art.SHA256, mode, func() (io.ReadCloser, error) { |
| rc, _, err := OpenQualified(ctx, s, ArtifactKey(acct, app, ver, art.File)) |
| - return rc, err |
| + if err != nil || (limit <= 0 && !m.IsRootfs()) { |
| + return rc, err |
| + } |
| + return limitedReadCloser{io.LimitReader(rc, limit+1), rc}, nil |
| }) |
| if err != nil { |
| return nil, err |
| @@ -2482,6 +2508,12 @@ func stageFrom(ctx context.Context, s Store, optDir, acct, app, ver, host string |
| return m, nil |
| } |
| +// limitedReadCloser is a bounded reader that closes what it bounds. |
| +type limitedReadCloser struct { |
| + io.Reader |
| + io.Closer |
| +} |
| + |
| // ensureStagedDigest is adoptHost's staging entry: ensureStagedChecked bound |
| // to the digest the authorizing pointer entry signs for ver (#253, spec |
| // §4.6). want "" is ensureStagedChecked exactly: a pointer from before |
diff --git a/internal/release/adopt_rootfs_test.go b/internal/release/adopt_rootfs_test.go| index 3cd12807e..1e686d5ac 100644 |
| --- a/internal/release/adopt_rootfs_test.go |
| +++ b/internal/release/adopt_rootfs_test.go |
| @@ -512,3 +512,118 @@ func TestFleetOwnerKey(t *testing.T) { |
| t.Errorf("FleetOwnerKey = %q", got) |
| } |
| } |
| + |
| +// An image's sibling is what root validates its start against, so a staged |
| +// image reused under an older same-name sibling naming another digest gets |
| +// its own manifest written over it; when that write cannot happen, the |
| +// stage fails rather than leave the image beside a manifest that does not |
| +// describe it. |
| +func TestStageFromReplacesAStaleRootfsSibling(t *testing.T) { |
| + onArm64(t) |
| + if os.Geteuid() == 0 { |
| + t.Skip("root ignores the read-only version dir this test relies on") |
| + } |
| + image := []byte("the image") |
| + m := stagedRootfsManifest(t, image) |
| + raw, _ := json.Marshal(m) |
| + older, _ := json.Marshal(stagedRootfsManifest(t, []byte("an older image under the same name"))) |
| + optDir := t.TempDir() |
| + s := NewDirStore(t.TempDir()) |
| + putArtifact(t, s, "bab", "shop", "v1", RootfsArtifactFile, image) |
| + if err := StageArtifact(optDir, "bab", "v1", "shop", image); err != nil { |
| + t.Fatal(err) |
| + } |
| + stale := func() { |
| + t.Helper() |
| + if err := StageManifest(optDir, "bab", "v1", "shop", older); err != nil { |
| + t.Fatal(err) |
| + } |
| + } |
| + stage := func() error { |
| + var err error |
| + var out bytes.Buffer |
| + withCapturedStdout(t, &out, func() { |
| + _, err = stageFrom(context.Background(), s, optDir, "bab", "shop", "v1", "shop.example.com", stageCheck{runtime: registry.RuntimeRootfsV1}, true, m, raw, false) |
| + }) |
| + return err |
| + } |
| + |
| + stale() |
| + if err := stage(); err != nil { |
| + t.Fatalf("stageFrom over a stale sibling: %v", err) |
| + } |
| + sib, err := ReadStagedManifest(optDir, "bab", "v1", "shop") |
| + if err != nil || sib == nil || sib.Artifacts[RootfsArtifactKey].SHA256 != m.Artifacts[RootfsArtifactKey].SHA256 { |
| + t.Fatalf("sibling after the stage = %+v, %v; want the image's own manifest", sib, err) |
| + } |
| + |
| + stale() |
| + dir := filepath.Dir(VersionPath(optDir, "bab", "v1", "shop")) |
| + if err := os.Chmod(dir, 0o555); err != nil { |
| + t.Fatal(err) |
| + } |
| + t.Cleanup(func() { _ = os.Chmod(dir, 0o755) }) |
| + if err := stage(); err == nil || !errors.Is(err, errArtifactMismatch) || !strings.Contains(err.Error(), "sibling") { |
| + t.Fatalf("stale sibling that cannot be replaced: err = %v, want a sibling error wrapping errArtifactMismatch", err) |
| + } |
| +} |
| + |
| +// byteCountingStore counts the bytes read from every streamed object. |
| +type byteCountingStore struct { |
| + Store |
| + n atomic.Int64 |
| +} |
| + |
| +type countedReader struct { |
| + io.ReadCloser |
| + n *atomic.Int64 |
| +} |
| + |
| +func (r countedReader) Read(p []byte) (int, error) { |
| + n, err := r.ReadCloser.Read(p) |
| + r.n.Add(int64(n)) |
| + return n, err |
| +} |
| + |
| +func (c *byteCountingStore) Open(ctx context.Context, key string) (io.ReadCloser, string, error) { |
| + rc, etag, err := OpenObject(ctx, c.Store, key) |
| + if err != nil { |
| + return nil, "", err |
| + } |
| + return countedReader{rc, &c.n}, etag, nil |
| +} |
| + |
| +// A store serving more bytes than the manifest names is read for at most |
| +// one byte past that size, and the stage fails on the hash, so an oversized |
| +// object never fills the version store. |
| +func TestStageFromBoundsTheDownloadByTheManifestSize(t *testing.T) { |
| + onArm64(t) |
| + body := []byte("the bytes the manifest names") |
| + oversized := append(append([]byte{}, body...), bytes.Repeat([]byte{'x'}, 1<<20)...) |
| + sum := sha256.Sum256(body) |
| + rfs := stagedRootfsManifest(t, body) |
| + bin := &Manifest{Schema: 1, App: "shop", Version: "v1", Kind: "binary", |
| + Artifacts: map[string]Artifact{"linux-arm64": {File: "linux-arm64", SHA256: hex.EncodeToString(sum[:]), Size: int64(len(body))}}} |
| + for _, c := range []struct { |
| + name, file, runtime string |
| + m *Manifest |
| + }{ |
| + {"rootfs", RootfsArtifactFile, registry.RuntimeRootfsV1, rfs}, |
| + {"binary", "linux-arm64", "", bin}, |
| + } { |
| + optDir := t.TempDir() |
| + s := &byteCountingStore{Store: NewDirStore(t.TempDir())} |
| + putArtifact(t, s, "bab", "shop", "v1", c.file, oversized) |
| + raw, _ := json.Marshal(c.m) |
| + _, err := stageFrom(context.Background(), s, optDir, "bab", "shop", "v1", "shop.example.com", stageCheck{runtime: c.runtime}, false, c.m, raw, false) |
| + if !errors.Is(err, errArtifactMismatch) { |
| + t.Errorf("%s: err = %v, want errArtifactMismatch", c.name, err) |
| + } |
| + if got, max := s.n.Load(), int64(len(body))+1; got > max { |
| + t.Errorf("%s: read %d bytes of the stream, want at most %d", c.name, got, max) |
| + } |
| + if _, err := os.Lstat(VersionPath(optDir, "bab", "v1", "shop")); err == nil { |
| + t.Errorf("%s: the oversized object was staged", c.name) |
| + } |
| + } |
| +} |
diff --git a/internal/release/staged.go b/internal/release/staged.go| index cf0ddc256..c2ea04e9a 100644 |
| --- a/internal/release/staged.go |
| +++ b/internal/release/staged.go |
| @@ -150,11 +150,18 @@ func ResolveLiveLink(optDir, host string) (StagedIdentity, error) { |
| // check against the row (adoptHost's runtimeMatches). Demand is left |
| // empty, as ResolveLive leaves it: only CanonicalDemand can vouch for it. |
| func RetainedStaged(optDir, acct, app, ver string) (*StagedIdentity, *Manifest) { |
| + return RetainedStagedOn(adoptPlatform, optDir, acct, app, ver) |
| +} |
| + |
| +// RetainedStagedOn is RetainedStaged for a box of platform: the seam a |
| +// caller outside this package tests a rootfs image through on a box of |
| +// another platform (the image's key names linux-arm64 only). |
| +func RetainedStagedOn(platform, optDir, acct, app, ver string) (*StagedIdentity, *Manifest) { |
| m, err := ReadStagedManifest(optDir, acct, ver, app) |
| if err != nil || m == nil { |
| return nil, nil |
| } |
| - a, ok := m.BoxArtifact(adoptPlatform) |
| + a, ok := m.BoxArtifact(platform) |
| if !ok { |
| return nil, nil |
| } |