edge: request records from the observer defer; activator marks the waking request
The observer defer in ServeHTTP now files one reqrec.Response per response after observeAnalytics, skipping tunnel-delivered requests (the hub records them). recordMatch builds a reference code sealed with the current mesh key (unsealed without one), files a Match, and returns the code even when recording is off; Plan 2 calls it from its block and watch paths. The activator's begin takes the request being served and calls edge.MarkWoke on the one that starts a wake, so its record says it woke the app; requests that join the same wake are not marked.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8 files changed,
+293
−5
internal/activator/activator.go+9 −3internal/activator/activator_test.go+44 −0internal/activator/cmd.go+1 −1internal/activator/startup_test.go+1 −1internal/edge/answered.go+22 −0internal/edge/edge.go+7 −0internal/edge/reqrecords.go+98 −0internal/edge/reqrecords_test.go+111 −0
CI failed — run details
CI log
=== gate ===
.amadan/test-gate.sh
go: downloading golang.org/x/net v0.60.0
go: downloading golang.org/x/crypto v0.57.0
go: downloading golang.org/x/sys v0.48.0
go: downloading github.com/pion/stun/v3 v3.1.5
go: downloading golang.org/x/sync v0.23.0
go: downloading github.com/pion/transport/v4 v4.0.2
go: downloading github.com/pion/dtls/v3 v3.1.4
go: downloading github.com/pion/dtls/v3 v3.1.4
go: downloading golang.org/x/text v0.42.0
go: downloading golang.org/x/text v0.42.0
=== launchctx (1 s)
ok amadan.net/carlos/platform.git/launchctx 0.012s
? amadan.net/carlos/platform.git/launchctx/controlname [no test files]
? amadan.net/carlos/platform.git/launchctx/wireid [no test files]
=== vet (25 s)
go: downloading golang.org/x/tools v0.49.0
go: downloading github.com/pion/dtls/v3 v3.1.4
go: downloading golang.org/x/text v0.42.0
go: downloading golang.org/x/mod v0.41.0
=== gofmt (1 s)
gofmt -l .: clean
=== rest (180 s)
? github.com/carlosframework/platform/cmd/changelog [no test files]
ok github.com/carlosframework/platform/cmd/console 3.742s
ok github.com/carlosframework/platform/cmd/moveprobe 11.966s
ok github.com/carlosframework/platform/cmd/zddprobe 0.715s
ok github.com/carlosframework/platform/internal/activator 58.622s
ok github.com/carlosframework/platform/internal/agentsock 0.028s
ok github.com/carlosframework/platform/internal/alerting 0.012s
ok github.com/carlosframework/platform/internal/analytics 0.066s
ok github.com/carlosframework/platform/internal/appconfig 3.146s
ok github.com/carlosframework/platform/internal/apperr 0.140s
ok github.com/carlosframework/platform/internal/applog 0.269s
ok github.com/carlosframework/platform/internal/awsinv 0.006s
ok github.com/carlosframework/platform/internal/boxchoice 0.006s
ok github.com/carlosframework/platform/internal/boxid 1.432s
? 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.010s
ok github.com/carlosframework/platform/internal/caps 0.013s
ok github.com/carlosframework/platform/internal/certwarm 0.005s
ok github.com/carlosframework/platform/internal/cgroup 0.836s
ok github.com/carlosframework/platform/internal/changelog 0.528s
ok github.com/carlosframework/platform/internal/claimactivation 1.303s
ok github.com/carlosframework/platform/internal/clamd 0.067s
? 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 7.808s
ok github.com/carlosframework/platform/internal/dbdoor/dbdoortest 0.016s
ok github.com/carlosframework/platform/internal/dbquery 0.013s
ok github.com/carlosframework/platform/internal/dbreads 2.189s
? github.com/carlosframework/platform/internal/dbreads/dbreadstest [no test files]
ok github.com/carlosframework/platform/internal/dbverify 0.008s
ok github.com/carlosframework/platform/internal/dnsrec 0.006s
ok github.com/carlosframework/platform/internal/docsite 0.020s
ok github.com/carlosframework/platform/internal/domains 2.858s
ok github.com/carlosframework/platform/internal/doorkey 0.010s
ok github.com/carlosframework/platform/internal/economics 0.006s
ok github.com/carlosframework/platform/internal/edge 45.772s
? github.com/carlosframework/platform/internal/edgeproof [no test files]
ok github.com/carlosframework/platform/internal/edgesfile 0.008s
ok github.com/carlosframework/platform/internal/fleetapi 0.137s
ok github.com/carlosframework/platform/internal/gate 1.660s
ok github.com/carlosframework/platform/internal/genselect 0.018s
ok github.com/carlosframework/platform/internal/geo 0.015s
ok github.com/carlosframework/platform/internal/geoip 0.029s
ok github.com/carlosframework/platform/internal/historyreadback 0.158s
ok github.com/carlosframework/platform/internal/host 144.855s
ok github.com/carlosframework/platform/internal/hostactors 5.339s
ok github.com/carlosframework/platform/internal/hostactors/awsmembership 0.006s
ok github.com/carlosframework/platform/internal/hostbox 3.005s
ok github.com/carlosframework/platform/internal/hostclaim 0.794s
ok github.com/carlosframework/platform/internal/hostenv 0.017s
ok github.com/carlosframework/platform/internal/hostevidence 0.021s
ok github.com/carlosframework/platform/internal/hostexec 5.276s
ok github.com/carlosframework/platform/internal/hostfence 0.040s
ok github.com/carlosframework/platform/internal/hostfiles 10.388s
ok github.com/carlosframework/platform/internal/hostfloor 0.021s
ok github.com/carlosframework/platform/internal/hostguard 1.026s
ok github.com/carlosframework/platform/internal/hostops 1.936s
? github.com/carlosframework/platform/internal/hostops/fencerelease [no test files]
ok github.com/carlosframework/platform/internal/hostops/internal/fencerelease 0.017s
ok github.com/carlosframework/platform/internal/hostquarantine 0.017s
ok github.com/carlosframework/platform/internal/hostrelocate 0.650s
ok github.com/carlosframework/platform/internal/hostresolve 0.231s
ok github.com/carlosframework/platform/internal/hostwrite 0.017s
ok github.com/carlosframework/platform/internal/infraview 0.021s
ok github.com/carlosframework/platform/internal/instancectl 5.234s
ok github.com/carlosframework/platform/internal/instanceexec 2.792s
ok github.com/carlosframework/platform/internal/instancefs 0.021s
ok github.com/carlosframework/platform/internal/instancekey 0.017s
ok github.com/carlosframework/platform/internal/instanceupdates 0.025s
ok github.com/carlosframework/platform/internal/layout 1.771s
ok github.com/carlosframework/platform/internal/lbhealth 0.023s
ok github.com/carlosframework/platform/internal/lease 10.315s
ok github.com/carlosframework/platform/internal/lease/leasetest 0.568s
ok github.com/carlosframework/platform/internal/ledger 0.034s
ok github.com/carlosframework/platform/internal/mail 0.200s
ok github.com/carlosframework/platform/internal/maintenance 0.093s
ok github.com/carlosframework/platform/internal/maintenanceexec 5.599s
ok github.com/carlosframework/platform/internal/maintenanceguard 0.074s
ok github.com/carlosframework/platform/internal/metrics 0.012s
ok github.com/carlosframework/platform/internal/moves 22.163s
ok github.com/carlosframework/platform/internal/moves/archive 0.993s
ok github.com/carlosframework/platform/internal/objstore 0.299s
ok github.com/carlosframework/platform/internal/ops 0.223s
ok github.com/carlosframework/platform/internal/park 0.286s
ok github.com/carlosframework/platform/internal/plans 0.005s
ok github.com/carlosframework/platform/internal/privatefile 0.004s
2026/10/24 23:40:17 provision: listing apps/bab/blog/instances/: list refused — its records are unseen this pass
2026/10/24 23:40:17 provision: listing apps/bab/: listdirs refused — its records are unseen this pass
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/24 23:40:17 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/24 23:40:17 provision: skipping record apps/bac/tito/instances/one.example.com.json: unreadable: read refused
2026/10/24 23:40:17 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/24 23:40:17 provision: an app's records could not be listed: they are skipped
2026/10/24 23:40:17 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:17 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/24 23:40:17 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/24 23:40:17 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/24 23:40:17 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/24 23:40:17 provision: claim install acme.go.tito.io: provision: claim admission unavailable
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/24 23:40:17 provision: claim install bot.eleven.bac.sidecar.internal: provision: claim admission unavailable
2026/10/24 23:40:17 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/24 23:40:17 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/24 23:40:17 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/24 23:40:17 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: no sealed config
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 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/24 23:40:17 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/24 23:40:17 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/24 23:40:17 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/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 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/24 23:40:17 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/24 23:40:17 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/24 23:40:17 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/24 23:40:17 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/24 23:40:17 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/24 23:40:17 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 23:40:17 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/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:17 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:17 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:17 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:17 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 23:40:17 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:17 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:18 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rf.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rh.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rl.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rg.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route ri.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rj.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rk.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/24 23:40:18 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/24 23:40:18 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route x.apph.example (app "apph" acct "bac")
2026/10/24 23:40:18 provision: minted instance route x.appi.example (app "appi" acct "bac")
2026/10/24 23:40:18 provision: minted instance route x.appj.example (app "appj" acct "bac")
2026/10/24 23:40:18 provision: minted instance route x.appb.example (app "appb" acct "bac")
2026/10/24 23:40:18 provision: minted instance route x.appc.example (app "appc" acct "bac")
2026/10/24 23:40:18 provision: minted instance route x.appe.example (app "appe" acct "bac")
2026/10/24 23:40:18 provision: minted instance route x.appa.example (app "appa" acct "bac")
2026/10/24 23:40:18 provision: minted instance route x.appd.example (app "appd" acct "bac")
2026/10/24 23:40:18 provision: minted instance route x.appf.example (app "appf" acct "bac")
2026/10/24 23:40:18 provision: minted instance route x.appg.example (app "appg" acct "bac")
2026/10/24 23:40:18 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 23:40:18 provision: minted instance route r0001.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0043.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0044.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0072.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0084.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0093.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0095.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0008.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0015.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0011.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0017.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0054.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0003.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0037.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0082.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0120.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0128.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0129.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0046.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0113.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0123.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0068.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0103.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0022.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0087.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0027.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0096.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0127.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0026.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0074.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0075.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0121.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0122.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0012.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0024.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0091.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0109.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0111.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0009.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0038.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0042.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0048.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0058.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0119.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0126.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0006.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0007.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0020.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0031.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0104.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0016.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0030.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0070.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0092.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0101.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0000.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0032.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0060.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0097.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0034.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0041.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0047.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0094.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0105.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0002.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0057.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0118.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0013.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0025.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0059.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0073.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0112.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0116.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0028.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0062.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0069.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0077.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0078.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0090.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0079.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0100.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0108.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0124.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0125.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0081.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0050.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0086.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0117.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0056.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0071.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0115.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0005.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0014.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0051.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0055.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0063.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0076.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0089.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0019.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0021.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0088.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0106.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0045.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0102.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0107.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0114.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0010.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0023.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0029.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0036.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0039.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0083.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0018.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0035.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0049.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0061.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0064.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0065.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0099.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0033.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0040.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0066.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0085.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0052.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0053.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0067.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0080.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0110.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0004.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:18 provision: minted instance route r0098.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 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/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route console.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted service route svc.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route whole.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route shared.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: converged acme.go.tito.io channel stable -> edge
2026/10/24 23:40:19 provision: converged acme.go.tito.io channel edge -> canary/rehearsal
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: empty channel
2026/10/24 23:40:19 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: converged acme.go.tito.io environment "" -> "staging"
2026/10/24 23:40:19 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: converged acme.go.tito.io steering "" -> "latency"
2026/10/24 23:40:19 provision: converged acme.go.tito.io steering "latency" -> ""
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: converged acme.go.tito.io hibernate false -> true
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: converged acme.go.tito.io hibernate true -> false (replication "daily" cleared: only a hibernating route's rung is read)
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: converged acme.go.tito.io status-named false -> true
2026/10/24 23:40:19 provision: converged acme.go.tito.io status-named true -> false
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 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/24 23:40:19 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/24 23:40:19 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/24 23:40:19 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 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/24 23:40:19 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/24 23:40:19 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/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/24 23:40:19 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:19 provision: skipping accounts/bac/account.json: malformed account manifest: invalid character 'o' in literal null (expecting 'u')
2026/10/24 23:40:19 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: manifest bac/tito: read failed: provision: manifest bac/tito: invalid character 'o' in literal null (expecting 'u')
2026/10/24 23:40:20 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/24 23:40:20 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/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 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/24 23:40:20 provision: not removing acme$evil.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 23:40:20 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/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 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/24 23:40:20 provision: not removing bad-service.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 23:40:20 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/24 23:40:20 provision: not removing no-channel.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:20 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 23:40:20 provision: removed retired instance route ghost.go.tito.io (record gone)
2026/10/24 23:40:20 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/24 23:40:20 provision: minted instance route dup.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 23:40:20 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/24 23:40:20 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 23:40:20 provision: removed retired static route site.go.tito.io (app in the trash)
2026/10/24 23:40:20 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/24 23:40:20 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 23:40:20 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/24 23:40:20 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 23:40:20 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/24 23:40:20 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 23:40:20 provision: converged acme.go.tito.io channel stable -> edge
2026/10/24 23:40:20 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 23:40:20 provision: converged acme.go.tito.io channel canary/rehearsal -> edge
2026/10/24 23:40:20 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/24 23:40:20 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/24 23:40:20 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/24 23:40:20 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/24 23:40:20 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/24 23:40:20 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/24 23:40:20 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/24 23:40:20 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/24 23:40:20 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 23:40:20 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/24 23:40:20 provision: dry-run: would mint instance route acme.go.tito.io (app "tito" acct "bac" channel "stable")
2026/10/24 23:40:20 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/24 23:40:20 provision: dry-run: would converge adopt.go.tito.io channel stable -> edge
2026/10/24 23:40:20 provision: dry-run: would converge adopt.go.tito.io environment "" -> "staging"
2026/10/24 23:40:20 provision: dry-run: would converge owned.go.tito.io channel stable -> edge
2026/10/24 23:40:20 provision: dry-run: would converge owned.go.tito.io environment "" -> "staging"
2026/10/24 23:40:20 provision: dry-run: would converge owned.go.tito.io hibernate false -> true
2026/10/24 23:40:20 provision: dry-run: would converge owned.go.tito.io seed
2026/10/24 23:40:20 provision: dry-run: would remove retired instance route gone.go.tito.io (record gone)
2026/10/24 23:40:20 provision: adopted existing route adopt.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 23:40:20 provision: converged adopt.go.tito.io channel stable -> edge
2026/10/24 23:40:20 provision: converged adopt.go.tito.io environment "" -> "staging"
2026/10/24 23:40:20 provision: converged owned.go.tito.io channel stable -> edge
2026/10/24 23:40:20 provision: converged owned.go.tito.io environment "" -> "staging"
2026/10/24 23:40:20 provision: converged owned.go.tito.io hibernate false -> true
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: removed retired instance route gone.go.tito.io (record gone)
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: adopted existing route story.carlosframework.com (app "story" acct "bad") — this record now owns its channel and environment
2026/10/24 23:40:20 provision: story.carlosframework.com exists but is not the route this record describes (kind "instance"/"static") — leaving it alone
2026/10/24 23:40:20 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted service route pub.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted service route pubs.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted service route loop.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted service route named.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted service route priv.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route unit.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route exec.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted static route pisite.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: removed retired static route site.go.tito.io (record gone)
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: converged acme.go.tito.io replicas "ie,uk" -> "uk"
2026/10/24 23:40:20 provision: converged acme.go.tito.io replicas "uk" -> ""
2026/10/24 23:40:20 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: converged acme-uk.go.tito.io replica mark true -> false
2026/10/24 23:40:20 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 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/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:20 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/24 23:40:20 provision: router.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/24 23:40:20 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 23:40:20 provision: converged acme.go.tito.io channel stable -> edge
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/24 23:40:20 provision: not removing acme.go.tito.io (record gone): participant of a running operation
2026/10/24 23:40:20 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/24 23:40:20 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/24 23:40:20 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/24 23:40:20 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/24 23:40:20 provision: acme.go.tito.io: held restoring by rb_other, not by mv_acme; leaving it
2026/10/24 23:40:20 provision: acme.go.tito.io: the row is not this pass's (app "other" acct ""); not holding it for mv_acme
2026/10/24 23:40:20 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/24 23:40:20 provision: dry-run: would mint instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac" channel "stable")
2026/10/24 23:40:20 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/24 23:40:21 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/24 23:40:21 provision: minted instance route acme.example.com (app "shop" acct "bac")
2026/10/24 23:40:21 provision: minted instance route plain.example.com (app "shop" acct "bac")
2026/10/24 23:40:21 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:21 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/24 23:40:21 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:21 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/24 23:40:21 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:21 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/24 23:40:21 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:21 provision: listing apps/bac/shop/instances/: list refused — its records are unseen this pass
2026/10/24 23:40:21 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:21 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:21 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/24 23:40:21 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:21 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 23:40:21 provision: minted sidecar route bot.shop.bac.sidecar.internal (app "shop" acct "bac" args ["run"])
2026/10/24 23:40:21 provision: removed retired sidecar route bot.shop.bac.sidecar.internal (record gone)
2026/10/24 23:40:21 provision: minted sidecar route bot.shop.bum.sidecar.internal (app "shop" acct "bum" args ["run"])
2026/10/24 23:40:21 provision: minted sidecar route bot.shop.bum.sidecar.internal (app "shop" acct "bum" args ["run"])
2026/10/24 23:40:21 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/24 23:40:21 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/24 23:40:21 provision: removed retired sidecar route bot.shop.bum.sidecar.internal (record gone)
2026/10/24 23:40:21 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/24 23:40:21 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/24 23:40:21 provision: removed retired sidecar route bot.shop.bum.sidecar.internal (record gone)
2026/10/24 23:40:22 provision: a.shop.example.com: swapped for import sd_vhjkf2zle5ktrcafptfljpeuse (the original route is journaled)
2026/10/24 23:40:22 provision: a.shop.example.com: import sd_vhjkf2zle5ktrcafptfljpeuse committed: its gate is cleared and its journal row dropped
2026/10/24 23:40: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/24 23:40:22 provision: a.shop.example.com: import sd_ph3k4lwnn2aalmhfatitgp6p7i rolled back to its original route
2026/10/24 23:40:22 provision: a.shop.example.com: import sd_ph3k4lwnn2aalmhfatitgp6p7i: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/24 23:40:22 provision: a.shop.example.com: import sd_ph3k4lwnn2aalmhfatitgp6p7i is cleaned up and its journal row retired
2026/10/24 23:40:22 provision: a.shop.example.com: import sd_woaqgemweqrcdngpa3oa7rszo4 rolled back to its original route
2026/10/24 23:40:22 provision: a.shop.example.com: import sd_woaqgemweqrcdngpa3oa7rszo4: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/24 23:40:22 provision: a.shop.example.com: import sd_woaqgemweqrcdngpa3oa7rszo4 is cleaned up and its journal row retired
2026/10/24 23:40:22 provision: dry-run: would redo a.shop.example.com's swap record CAS for import sd_naaoiq2j2333wiy55cj4ani3t4
2026/10/24 23:40:22 provision: dry-run: would clear a.shop.example.com's import gate
2026/10/24 23:40:22 provision: dry-run: would converge a.shop.example.com seed source
2026/10/24 23:40: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/24 23:40:22 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/24 23:40:22 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/24 23:40:22 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/24 23:40:22 provision: a.shop.example.com: import sd_2axj5cfoia6hqgwfuhan7vlz24 cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/24 23:40:22 provision: a.shop.example.com: import sd_pucwutyuvs24yh6zz5hk2l4qeq cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/24 23:40:22 provision: a.shop.example.com: import sd_stsaikwrgiq3cnu4oliiqwjhsa is journaled, but this box cannot act on imports; its row is left alone
2026/10/24 23:40:22 provision: a.shop.example.com: import sd_jpdnbey3rgsahuceyahwoxxtju is journaled, but this box cannot act on imports; its row is left alone
2026/10/24 23:40:22 provision: a.shop.example.com: import sd_qmaowd76houq6qkh7kw22uly5a is journaled, but this box cannot act on imports; its row is left alone
2026/10/24 23:40:22 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/24 23:40:22 provision: c.shop.example.com: import sd_k3vmzpqrvubwwm5tbblxeziy4a left alone this pass: the import journal could not be read
2026/10/24 23:40:22 provision: b.shop.example.com: import sd_dxm4namnlc7phl32cchk4euxum left alone this pass: the import journal could not be read
2026/10/24 23:40:22 provision: a.shop.example.com: import sd_4lsfhjifzybqdyht6dnx47dhvm committed: its gate is cleared and its journal row dropped
2026/10/24 23:40:22 provision: a.shop.example.com: not converging import sd_6ip2t65tua74l4nl7g3c4i63ra: it is swapped but not committed, and the row on this box has no import gate
2026/10/24 23:40:22 provision: a.shop.example.com: not converging import sd_nxtu5bp7uuseqjxr5zqtgawm3q: it is swapped but not committed, and the row on this box has no import gate
2026/10/24 23:40:22 provision: a.shop.example.com: not converging import sd_k6v2za7wgrgqcsyry6urwykvk4: it is placed but not committed, and the row on this box has no import gate
2026/10/24 23:40:22 provision: a.shop.example.com: not converging import sd_nyivp2l6t62ncwxgc5swt2tnzi: it is placed but not committed, and the row on this box has no import gate
2026/10/24 23:40: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/24 23:40:22 provision: converge seed source on a.shop.example.com: constraint failed: seed_source is read-only here (1811)
2026/10/24 23:40: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/24 23:40:23 provision: a.shop.example.com: import sd_jgzpsuitop7vwwweita5haroc4 committed: its gate is cleared and its journal row dropped
2026/10/24 23:40: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/24 23:40:23 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:23 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/24 23:40:23 provision: acme.go.tito.io: not minting a seeded instance: this box does not mint nested (<nil>)
2026/10/24 23:40:23 provision: acme.go.tito.io: not minting a seeded instance: claim control is on for this box
2026/10/24 23:40:23 provision: acme.go.tito.io: aborted seed sd_7mtky2pkw4s6jwdq5z473ysmli: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/24 23:40:23 provision: acme.go.tito.io: aborted seed sd_7mtky2pkw4s6jwdq5z473ysmli rolled back (no box had swapped it)
2026/10/24 23:40:23 provision: acme.go.tito.io: not minting a seeded instance: its record does not describe a hibernating instance
2026/10/24 23:40:23 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:23 provision: removed instance route acme.go.tito.io (its seed sd_iy6z7xzsluz2l5paezrvcrzhja was aborted); the next pass rolls it back
2026/10/24 23:40:23 provision: acme.go.tito.io: aborted seed sd_iy6z7xzsluz2l5paezrvcrzhja: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/24 23:40:23 provision: acme.go.tito.io: aborted seed sd_iy6z7xzsluz2l5paezrvcrzhja rolled back (no box had swapped it)
2026/10/24 23:40:23 provision: acme.go.tito.io: aborted seed sd_komrud5r77b2p44iec47rjv47y has a row this pass may not remove; leaving the seed aborted
2026/10/24 23:40:23 provision: acme.go.tito.io: aborted seed sd_47ykauvbz5id3fwnrhbblygemu rolled back (no box had swapped it)
2026/10/24 23:40:23 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:23 provision: removed instance route acme.go.tito.io (its seed sd_qci7in6vibtf57xrmh35bbhwcm was aborted); the next pass rolls it back
2026/10/24 23:40:23 provision: acme.go.tito.io: aborted seed sd_qci7in6vibtf57xrmh35bbhwcm has no route on this box: its local data is removed
2026/10/24 23:40:23 provision: acme.go.tito.io: aborted seed sd_qci7in6vibtf57xrmh35bbhwcm rolled back (no box had swapped it)
2026/10/24 23:40:23 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_67bagrti5phxrkuhya2waz4yki (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_67bagrti5phxrkuhya2waz4yki rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_67bagrti5phxrkuhya2waz4yki is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_pcso27674khz6fj2knbpkffkca (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_pcso27674khz6fj2knbpkffkca rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_pcso27674khz6fj2knbpkffkca is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_3nygjvsvnr3bqnsbdoy6kacbmi (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_3nygjvsvnr3bqnsbdoy6kacbmi rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_3nygjvsvnr3bqnsbdoy6kacbmi: the host's replica is left alone: its record no longer names this seed
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_3nygjvsvnr3bqnsbdoy6kacbmi is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_rs7w7fe7hplereacnx7hvxdaiu (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_rs7w7fe7hplereacnx7hvxdaiu rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_rs7w7fe7hplereacnx7hvxdaiu rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_rs7w7fe7hplereacnx7hvxdaiu is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_7qkvq3ohdnkqn3mc6gtji6klne (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_7qkvq3ohdnkqn3mc6gtji6klne rollback deferred: the host is not fenced and stopped yet (stop unproven)
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_bdkkybe4k4a3o5xf5rey25sniy (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_bdkkybe4k4a3o5xf5rey25sniy is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_buunt6i2tfe2vzi3gnrsqky6ey (the original route is journaled)
2026/10/24 23:40:23 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_buunt6i2tfe2vzi3gnrsqky6ey left alone this pass: its record could not be read
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_tlc4nax6ydc6emd3egk2ayvgjy (the original route is journaled)
2026/10/24 23:40:23 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: read failed: connection reset
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_tlc4nax6ydc6emd3egk2ayvgjy left alone this pass: its record could not be read
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_t5oobk6tuydlt6mqxkdtcy25n4 (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_t5oobk6tuydlt6mqxkdtcy25n4: close the import gate: constraint failed: injected (1811)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_t5oobk6tuydlt6mqxkdtcy25n4 rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_t5oobk6tuydlt6mqxkdtcy25n4 is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_4qgsu6opffhuldaukopcyprwni (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_4qgsu6opffhuldaukopcyprwni: close the import gate: constraint failed: injected (1811)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_4qgsu6opffhuldaukopcyprwni rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_4qgsu6opffhuldaukopcyprwni is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_5mcus5jafzbopjln5kmp26orei (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_5mcus5jafzbopjln5kmp26orei rollback deferred: the host is not fenced and stopped yet (injected failure at fence)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_5mcus5jafzbopjln5kmp26orei rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_5mcus5jafzbopjln5kmp26orei is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_44t22x4kohrmmazmpoh3bh6qxi (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_44t22x4kohrmmazmpoh3bh6qxi rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_44t22x4kohrmmazmpoh3bh6qxi is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_svqd6m77oxddxabzkdphwhg3eu (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_svqd6m77oxddxabzkdphwhg3eu: retire its instance key: injected failure at retire-key
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_svqd6m77oxddxabzkdphwhg3eu rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_svqd6m77oxddxabzkdphwhg3eu is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_ncfbjpdxr5avseuuodzq2snmvu (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_ncfbjpdxr5avseuuodzq2snmvu rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_ncfbjpdxr5avseuuodzq2snmvu is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_uvvlvurvpfbfekhbqhx7bqxjxu (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_uvvlvurvpfbfekhbqhx7bqxjxu: remove its local data: injected failure at remove-local
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_uvvlvurvpfbfekhbqhx7bqxjxu rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_uvvlvurvpfbfekhbqhx7bqxjxu is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_d5p632nhmec6xlzpltmslbtvgy (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_d5p632nhmec6xlzpltmslbtvgy rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_d5p632nhmec6xlzpltmslbtvgy is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_y2k3fjdmrskw2en2pjkdxg7ahy (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_y2k3fjdmrskw2en2pjkdxg7ahy: remove its local data: injected failure at remove-local-done
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_y2k3fjdmrskw2en2pjkdxg7ahy rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_y2k3fjdmrskw2en2pjkdxg7ahy is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_gacjhvwnaytkes72pv6ddnxn4m (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_gacjhvwnaytkes72pv6ddnxn4m rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_gacjhvwnaytkes72pv6ddnxn4m is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_hmi7spwyrm7ggb5wzkhudx6he4 (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_hmi7spwyrm7ggb5wzkhudx6he4: restore the original route: constraint failed: injected (1811)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_hmi7spwyrm7ggb5wzkhudx6he4 rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_hmi7spwyrm7ggb5wzkhudx6he4 is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_aqnqs67rshgptpd3pwhh72dzea (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_aqnqs67rshgptpd3pwhh72dzea: restore the original route: constraint failed: injected (1811)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_aqnqs67rshgptpd3pwhh72dzea rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_aqnqs67rshgptpd3pwhh72dzea is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_va5nui2m4iskn25tksxyn6vl2e (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_va5nui2m4iskn25tksxyn6vl2e is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_p26lros6kjdhgfcrnx6qykqyee (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_p26lros6kjdhgfcrnx6qykqyee rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_p26lros6kjdhgfcrnx6qykqyee: delete its snapshot: injected failure at delete-snapshot
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_p26lros6kjdhgfcrnx6qykqyee is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_vp4bbahw72nwusnd7nq2gqetza (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_vp4bbahw72nwusnd7nq2gqetza rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_vp4bbahw72nwusnd7nq2gqetza is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_f5y3uoh4oibcxouni5v27pvz5u (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_f5y3uoh4oibcxouni5v27pvz5u rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_f5y3uoh4oibcxouni5v27pvz5u: delete the host's replica: injected failure at delete-replica
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_f5y3uoh4oibcxouni5v27pvz5u is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_226frpe3wk5ik2gudhyjzj7nlu (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_226frpe3wk5ik2gudhyjzj7nlu rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_226frpe3wk5ik2gudhyjzj7nlu is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_kec6pdxwlqbtt5wevk364itxm4 (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_kec6pdxwlqbtt5wevk364itxm4 rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_kec6pdxwlqbtt5wevk364itxm4: retire its journal row: constraint failed: injected (1811)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_kec6pdxwlqbtt5wevk364itxm4 is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_ps3dyscuasu4hd732gkzqvlwda (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_ps3dyscuasu4hd732gkzqvlwda rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_ps3dyscuasu4hd732gkzqvlwda: retire its journal row: constraint failed: injected (1811)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_ps3dyscuasu4hd732gkzqvlwda is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_geepxd6tmrp6z6mhhos7ghunly (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_geepxd6tmrp6z6mhhos7ghunly rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_geepxd6tmrp6z6mhhos7ghunly is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: mark import sd_geepxd6tmrp6z6mhhos7ghunly rolled back: injected failure at cas
2026/10/24 23:40:23 provision: a.shop.example.com: aborted seed sd_geepxd6tmrp6z6mhhos7ghunly rolled back (no box had swapped it)
2026/10/24 23:40:23 provision: a.shop.example.com: swapped for import sd_ojy7rthrxhrvg7dib35xcpsg2y (the original route is journaled)
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_ojy7rthrxhrvg7dib35xcpsg2y rolled back to its original route
2026/10/24 23:40:23 provision: a.shop.example.com: import sd_ojy7rthrxhrvg7dib35xcpsg2y is cleaned up and its journal row retired
2026/10/24 23:40:23 provision: a.shop.example.com: aborted seed sd_ojy7rthrxhrvg7dib35xcpsg2y rolled back (no box had swapped it)
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_jaqzactynw4h6a6ipxgidhjzma (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_jaqzactynw4h6a6ipxgidhjzma rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_jaqzactynw4h6a6ipxgidhjzma rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_jaqzactynw4h6a6ipxgidhjzma rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_jaqzactynw4h6a6ipxgidhjzma is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_b2jvpufa3fgoapxvaphkh4cnym (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_b2jvpufa3fgoapxvaphkh4cnym rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_b2jvpufa3fgoapxvaphkh4cnym is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_gbinjjqjcnuryy2ehusurnvag4 (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_gbinjjqjcnuryy2ehusurnvag4 rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_gbinjjqjcnuryy2ehusurnvag4 is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_fmu2bpldrs4xjxxa4krxcvf5xm (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_fmu2bpldrs4xjxxa4krxcvf5xm rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_fmu2bpldrs4xjxxa4krxcvf5xm is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_afs4hfwcgbrkswi26rtwnbwnre (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_afs4hfwcgbrkswi26rtwnbwnre rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_afs4hfwcgbrkswi26rtwnbwnre is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_ca7x27dtykva7ftilorqhyu6mi (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_ca7x27dtykva7ftilorqhyu6mi rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_ca7x27dtykva7ftilorqhyu6mi is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_4aghtjjygexkdm3hzzr4cinrvy (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_4aghtjjygexkdm3hzzr4cinrvy rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_4aghtjjygexkdm3hzzr4cinrvy is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_zafoy6ubuaennqqezqtzpt4aja (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_zafoy6ubuaennqqezqtzpt4aja rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_zafoy6ubuaennqqezqtzpt4aja is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_4w3dsjqiztbqhjwubur774f3k4 (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_4w3dsjqiztbqhjwubur774f3k4 has no route on this box: its local data is removed and no route is put back
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_4w3dsjqiztbqhjwubur774f3k4 is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_3zkk2cw6ncegw22o26f2dj7flu (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_q3weg5lkw3j3mivxgizdjd3rpq (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_ywviei3s2cnv62u3wmhy6nlutq (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_ywviei3s2cnv62u3wmhy6nlutq cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_fppqfjf5mupoyzj5w3kisgifgy (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_fppqfjf5mupoyzj5w3kisgifgy is not rolled back: the route changed under the fence, so nothing there is touched
2026/10/24 23:40:24 provision: a.shop.example.com: import "../not-a-seed" names no snapshot and no replica; only its journal row is cleaned up
2026/10/24 23:40:24 provision: a.shop.example.com: import ../not-a-seed is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_fp2tikk4jwzitefh2tzbenntvy (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_j4sbjqbffjmbxcadfniny46l34 (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_3zkxt6ksbcixli4odh6c27o3c4 (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_j6s3h7orbrta73sguxhkbc2yru (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_sbihqdhygowjvl7mw2nk5c5uda (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_sbihqdhygowjvl7mw2nk5c5uda rollback deferred: the host is not fenced and stopped yet (stop evidence unreadable)
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_vpsew2puoavgezjslcm7tqxzqu (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_vpsew2puoavgezjslcm7tqxzqu has no route on this box: its local data is removed and no route is put back
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_vpsew2puoavgezjslcm7tqxzqu is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_o4h56x4jx5tezy33p5bs2ck22i (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_o4h56x4jx5tezy33p5bs2ck22i: remove its local data: injected failure at remove-local
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_o4h56x4jx5tezy33p5bs2ck22i is not rolled back: the route at the host is not the import's, so nothing there is touched
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_47duznp4hgnvpruf2rh7p6uq6m (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_47duznp4hgnvpruf2rh7p6uq6m: a route appeared at the host, so its local database is left and the rollback waits
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_p7wubsome7v63cz37553xaom6a (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_p7wubsome7v63cz37553xaom6a rollback deferred: no fence generation: registry busy
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_u3z2ubdnohgiirug74cp652zci (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_u3z2ubdnohgiirug74cp652zci rollback deferred: no fence generation: the generation source answered 0
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_s2c4ypkdzc7wpceuwxjt7zwvfa (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_mmiktlmqyhnn6oqur2wie4lbla (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_qaego6v7eslt6vw2gxtlamjykq (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import deferred: this box cannot read the instance's env file
2026/10/24 23:40:24 provision: a.shop.example.com: import deferred: the instance's env file could not be read: a symlink
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_llcoiofxgwpmamjuxxuogsvf6e (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_llcoiofxgwpmamjuxxuogsvf6e rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_llcoiofxgwpmamjuxxuogsvf6e is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_lnw264gvlrqz4grc4rfaergysm (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_lnw264gvlrqz4grc4rfaergysm rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_lnw264gvlrqz4grc4rfaergysm is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_kpnjlbedjbr5noitfmhypqvae4 (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_kpnjlbedjbr5noitfmhypqvae4 rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_kpnjlbedjbr5noitfmhypqvae4 is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_ggjnjo553zf5kcgsrtug7xhg6i (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_ggjnjo553zf5kcgsrtug7xhg6i: retire its instance key: the env file is a symlink
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_ggjnjo553zf5kcgsrtug7xhg6i rolled back to its original route
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_ggjnjo553zf5kcgsrtug7xhg6i is cleaned up and its journal row retired
2026/10/24 23:40:24 provision: a.shop.example.com: swapped for import sd_e2idtv7ihkicgxwpdqdajfscou (the original route is journaled)
2026/10/24 23:40:24 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/24 23:40:24 provision: a.shop.example.com: swapped for import sd_s5tve4pp43cpdsnn2tmqohexru (the original route is journaled)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_ecmfyrljk4o2obvv4lvf7gyl3e refused: there is no route at a.shop.example.com to replace
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_gdsdzwu2igqxnyxpn5z6dixcvm refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_qyw5tn6dgzk3itxxjzk6szcnhu refused: the route's address is 127.0.0.1:8401,127.0.0.1:8402, not 127.0.0.1:8401
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_23v2vrj7hgkp6xvpbdeil6xaey refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_sjcmqcrxa5nwywrlpclt3jmi5y refused: the route belongs to app other
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_3gwggyolfm6m7unbjln6xthviy refused: the route is filed under another account
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_vtpbeimski5ot3bnzfggohd7i4 refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_cqyxmypkwwbldq3syt5qmyoza4 refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_axfn7j6q3b3wof455ozvjbeo3i refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_f6zs4wnaty7t5b4tfpcdty4h2i refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_rgwig77ebpufdcnfofqco2bcpu refused: the route is not an address route this import can take over (socket)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_l263em3ctixzvkdg4snagvrrcm refused: the route is not an address route this import can take over (no address)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_ql7nrn76ww3noqzdznmc7ollxm refused: the route is not an address route this import can take over (provisioned)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_4tmggi5a2y6jicwmauwtgahu6e refused: the route is not an address route this import can take over (kind static)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_bmltksktilf4qrvzjioqkqjoii refused: the route is not an address route this import can take over (backing)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_z3kbajtxvzoiqlxh47aw3gezui refused: the route is not an address route this import can take over (tunnel)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_qfnneou3d6v3ayuhvexhrqimem refused: the route is not an address route this import can take over (caps)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_52bo67gv444mcltqnu6i7dfwma refused: the route is not an address route this import can take over (platform)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_zeflvtgtpjbpp7i3jc5ia6i4zy refused: the route is not an address route this import can take over (canary)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_o5tniq4i3c2wiwbcq5gxlb4xmq refused: the route is not an address route this import can take over (kind sidecar)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_plzpiuipm4dqbgptzfpzlzjnp4 refused: the route is not an address route this import can take over (region)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_byhb4buhbtfuikaal3qfiviary refused: the route is not an address route this import can take over (fleet_box)
2026/10/24 23:40:24 provision: a.shop.example.com: import sd_4sq47yzzlfoedi2k65n3xnddam refused: the route is not an address route this import can take over (hibernate)
2026/10/24 23:40:25 provision: a.shop.example.com: import sd_rtl4emhscwzqjami4vb5o5zxvm refused: the route is not an address route this import can take over (claim_owner)
2026/10/24 23:40:25 provision: a.shop.example.com: import sd_rdcwjogcatvsbqxtyubkkaaofa refused: this box does not run instances nested
2026/10/24 23:40:25 provision: a.shop.example.com: import sd_j2zijxgexupamt5y7ols4wk6me refused: this box does not run instances nested
2026/10/24 23:40:25 provision: a.shop.example.com: import sd_gn3poewtnq5x76lnj3opiytt7m refused: claim control is on for this box
2026/10/24 23:40:25 provision: a.shop.example.com: swapped for import sd_uuuw4ihkglbzg2r2rvhymkhzjm (the original route is journaled)
2026/10/24 23:40:25 provision: a.shop.example.com: swapped for import sd_knwc6bvoirzsrrxjfuajlb5hoq (the original route is journaled)
2026/10/24 23:40:25 provision: a.shop.example.com: import deferred: this box cannot read the legacy route assignments
2026/10/24 23:40:25 provision: a.shop.example.com: import deferred: the legacy route assignments could not be read: store down
2026/10/24 23:40:25 provision: a.shop.example.com: not swapping for import sd_fctqtlct4yls4ylmt43uhxmyqa: its verify hash is not a sha256
2026/10/24 23:40:25 provision: a.shop.example.com: not swapping for import sd_mjbary6ahqy7onkpnwpcjbe3me: its verify hash is not a sha256
2026/10/24 23:40:25 provision: a.shop.example.com: not swapping for import sd_gywdqhqiziqsclie5dwge34obm: its verify hash is not a sha256
2026/10/24 23:40:25 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/24 23:40:25 provision: A.shop.example.com/..: not swapping for import sd_bgbseuv7hnlelvc666uyqnrgpq: its host or seed id is malformed (seeds: not a host)
2026/10/24 23:40:25 provision: a.shop.example.com: not swapping for import sd_ssixeugbqx5xa75mlth34ihf7i: its record does not describe a nested, hibernating instance
2026/10/24 23:40:25 provision: a.shop.example.com: not swapping for import sd_czvlfosil5mq4loj4r6atyar4e: its record does not describe a nested, hibernating instance
2026/10/24 23:40:25 provision: a.shop.example.com: not swapping for import sd_kkwc7weulp25lesfpwppfoleni: its record does not describe a nested, hibernating instance
2026/10/24 23:40:25 provision: a.shop.example.com: not swapping for import sd_i3iyehdnqgoy7nnbkk2vgc6swi: its record does not describe a nested, hibernating instance
2026/10/24 23:40:25 provision: a.shop.example.com: import deferred: the box's layout intent could not be read: store down
2026/10/24 23:40:25 provision: a.shop.example.com: swapped for import sd_6swnmebdefje5pvfil77l6zj5u (the original route is journaled)
2026/10/24 23:40:25 provision: a.shop.example.com: import deferred: the box's nested probe did not answer: ready probe timed out
2026/10/24 23:40:25 provision: a.shop.example.com: swapped for import sd_kgu62wqpnp3zfmdnyb2l42u5gm (the original route is journaled)
2026/10/24 23:40:25 provision: a.shop.example.com: swapped for import sd_pmyqhiiwsf7qvwblsik5gsksbu (the original route is journaled)
2026/10/24 23:40:25 provision: a.shop.example.com: import deferred: the route is held by operation op_1
2026/10/24 23:40:25 provision: dry-run: would consider swapping a.shop.example.com for import sd_xwfx5uhyqdsn7bx556gauecwui
2026/10/24 23:40:25 provision: a.shop.example.com: import sd_p4aegxqqp7lvbpku4enqgqwxti rolled back to its original route
2026/10/24 23:40:25 provision: a.shop.example.com: import sd_p4aegxqqp7lvbpku4enqgqwxti: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/24 23:40:25 provision: a.shop.example.com: import sd_p4aegxqqp7lvbpku4enqgqwxti is cleaned up and its journal row retired
2026/10/24 23:40:25 provision: a.shop.example.com: import sd_wwb6wo7ymbf6hyraldkn7xswcy left alone: the import journal holds seed sd_p7kcb3sri7sgwo6yewydofl5ye at swapped
2026/10/24 23:40:25 provision: a.shop.example.com: not minting import sd_rgnqvw5h6g5kr7jbhhd44lxyrm: it is swapped but not committed, and only its swap makes its row
2026/10/24 23:40:25 provision: a.shop.example.com: not minting import sd_ggn4bbjylxyq26l22nbkbp4sda: it is placed but not committed, and only its swap makes its row
2026/10/24 23:40:25 provision: a.shop.example.com: swapped for import sd_eusbrdkm6ljhiyejm2p6c3roke (the original route is journaled)
2026/10/24 23:40:25 provision: a.shop.example.com: not minting import sd_eusbrdkm6ljhiyejm2p6c3roke: it is swapped but not committed, and only its swap makes its row
2026/10/24 23:40:25 provision: a.shop.example.com: not minting import sd_eusbrdkm6ljhiyejm2p6c3roke: it is placed but not committed, and only its swap makes its row
2026/10/24 23:40:25 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/24 23:40:25 provision: removed retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/24 23:40:25 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:25 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:25 provision: converged sidecar bot.eleven.bac.sidecar.internal args ["sidecar","run"] -> ["worker","run"]
2026/10/24 23:40:25 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:25 provision: converged sidecar bot.eleven.bac.sidecar.internal ceilings 300/3600 -> 60/120
2026/10/24 23:40:25 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:25 provision: converged sidecar bot.eleven.bac.sidecar.internal channel stable -> canary/eleven
2026/10/24 23:40:25 provision: converged sidecar bot.eleven.bac.sidecar.internal environment "other" -> "relay"
2026/10/24 23:40:25 provision: converged sidecar bot.eleven.bac.sidecar.internal hibernate true -> false
2026/10/24 23:40:25 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: read failed: failStore: reads disabled under apps/bac/eleven/sidecars/
2026/10/24 23:40:25 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: malformed: invalid character 'n' looking for beginning of object key string
2026/10/24 23:40:25 provision: not removing sidecar bot.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/24 23:40:25 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: empty channel
2026/10/24 23:40:25 provision: skipping sidecar record apps/bac/eleven/sidecars/held.json: empty channel
2026/10/24 23:40:25 provision: not removing sidecar held.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/24 23:40:25 provision: removed retired sidecar route old.eleven.bac.sidecar.internal (record gone)
2026/10/24 23:40:25 provision: bac/eleven has sidecar records but no sidecars manifest — not minting
2026/10/24 23:40:25 provision: bac/eleven is in the trash — not minting sidecar routes for it
2026/10/24 23:40:25 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/24 23:40:25 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/24 23:40:25 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:25 provision: minted sidecar route hub.relay.bac.sidecar.internal (app "relay" acct "bac" args ["relay"])
2026/10/24 23:40:25 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/24 23:40:25 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:25 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/24 23:40:25 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:25 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:25 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/24 23:40:25 provision: removed retired sidecar route bot.eleven.bac.sidecar.internal (record gone)
2026/10/24 23:40:25 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:25 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/24 23:40:25 provision: skipping sidecar record apps/bac/relay/sidecars/hub.json: read failed: failStore: reads disabled under apps/bac/relay/sidecars/
2026/10/24 23:40:25 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/24 23:40:25 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 23:40:25 provision: dry-run: would mint sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" channel "stable" args ["sidecar","run"])
2026/10/24 23:40:25 provision: dry-run: would remove retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/24 23:40:25 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/24 23:40:25 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:25 provision: converged acme.go.tito.io update settings "{\"updates\":\"manual\",\"channel\":\"stable\"}" -> ""
2026/10/24 23:40:25 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:25 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:25 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/24 23:40:25 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/24 23:40:25 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/24 23:40:25 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 23:40:25 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/24 23:40:25 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/24 23:40:25 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/24 23:40:25 provision: record view: change index unusable (release: change index unreadable: store has no conditional read: unsupported operation): the walk records no generations
2026/10/24 23:40:25 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/24 23:40:25 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/24 23:40:25 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/24 23:40:25 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/24 23:40:25 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: record view: re-reading apps/bqc/shop failed: retrying on the next refresh
2026/10/24 23:40:25 provision: listing apps/bqc/shop/instances/: list refused — its records are unseen this pass
2026/10/24 23:40:25 provision: listing apps/bqc/shop/instances/: list refused — its records are unseen this pass
2026/10/24 23:40:25 provision: an app's records could not be listed: they are skipped
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: record view: change index unusable (get refused): walking
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: record view: re-reading apps/bqc/shop failed: retrying on the next refresh
2026/10/24 23:40:25 provision: listing apps/bqc/shop/instances/: context canceled — its records are unseen this pass
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: record view: change index unusable (release: change index malformed: invalid character 'n' looking for beginning of object key string): walking
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/24 23:40:25 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/24 23:40:25 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/24 23:40:25 provision: record view: re-reading accounts/bqd failed: retrying on the next refresh
2026/10/24 23:40:25 provision: skipping accounts/bqd/account.json: read failed: list refused
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/24 23:40:25 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/24 23:40:25 provision: removed retired instance route one.example.com (record gone)
2026/10/24 23:40:25 provision: skipping record apps/bum/shop/instances/one.example.com.json: empty channel
2026/10/24 23:40:25 provision: not removing one.example.com: its record exists but could not be read cleanly this pass
2026/10/24 23:40:25 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/24 23:40:25 provision: skipping record apps/bum/shop/instances/one.example.com.json: empty channel
2026/10/24 23:40:25 provision: not removing one.example.com: its record exists but could not be read cleanly this pass
2026/10/24 23:40:25 provision: removed retired instance route one.example.com (record gone)
2026/10/24 23:40:25 provision: record view: change index unusable (context deadline exceeded): walking
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 23:40:25 provision: record view: change index unusable (context deadline exceeded): the walk records no generations
2026/10/24 23:40:25 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
--- FAIL: TestPlan14RootReadCensus (21.88s)
plan14_root_reads_test.go:600: root read census: 18 discrepancies
changed root read internal/activator/activator.go:Service.begin; review class, task, sites and digest
changed root read internal/activator/activator.go:Service.beginRequest; review class, task, sites and digest
changed root read internal/activator/activator.go:Service.serve; review class, task, sites and digest
changed root read internal/activator/cmd.go:Service.RunCmd; review class, task, sites and digest
changed root read internal/edge/edge.go:Edge.ServeHTTP; review class, task, sites and digest
changed root source envelope internal/activator
changed root source envelope internal/applog
changed root source envelope internal/edge
changed root source envelope internal/reqrec
unclassified root read internal/edge/reqrecords.go:Edge.observeRecords whole:Route@491
unclassified root read internal/edge/reqrecords.go:Edge.recordMatch whole:Route@327
unclassified root read internal/edge/reqrecords.go:requestResponse registry:App@192,registry:Host@206,whole:Route@182
unclassified root read internal/reqrec/ref.go:NewRef file:Read@484
changed legacy declaration internal/activator/activator.go:Service.begin
changed legacy declaration internal/activator/activator.go:Service.beginRequest
changed legacy declaration internal/activator/activator.go:Service.serve
changed legacy declaration internal/activator/cmd.go:Service.RunCmd
changed legacy declaration internal/edge/edge.go:Edge.ServeHTTP
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 30.559s
ok github.com/carlosframework/platform/internal/publicrelease 0.008s
? github.com/carlosframework/platform/internal/regionname [no test files]
ok github.com/carlosframework/platform/internal/registry 5.675s
ok github.com/carlosframework/platform/internal/relay 4.236s
ok github.com/carlosframework/platform/internal/release 26.251s
ok github.com/carlosframework/platform/internal/reqrec 0.010s
ok github.com/carlosframework/platform/internal/rollout 3.799s
ok github.com/carlosframework/platform/internal/rolloutwords 0.004s
ok github.com/carlosframework/platform/internal/rootaws 0.009s
ok github.com/carlosframework/platform/internal/rootparticipation 0.059s
ok github.com/carlosframework/platform/internal/rootstate 0.026s
ok github.com/carlosframework/platform/internal/runs 0.564s
ok github.com/carlosframework/platform/internal/s3compat 0.006s
ok github.com/carlosframework/platform/internal/safefile 0.004s
ok github.com/carlosframework/platform/internal/schedule 2.610s
ok github.com/carlosframework/platform/internal/seeds 0.015s
ok github.com/carlosframework/platform/internal/sim/engines 2.604s
ok github.com/carlosframework/platform/internal/sim/hostlife 10.855s
ok github.com/carlosframework/platform/internal/sim/litestreamfacts 3.993s
ok github.com/carlosframework/platform/internal/status 0.070s
ok github.com/carlosframework/platform/internal/steering 0.008s
ok github.com/carlosframework/platform/internal/stopevidence 0.299s
ok github.com/carlosframework/platform/internal/svcrole 0.002s
ok github.com/carlosframework/platform/internal/telemetry 0.005s
ok github.com/carlosframework/platform/internal/termfence 0.005s
ok github.com/carlosframework/platform/internal/tunnelclient 0.004s
ok github.com/carlosframework/platform/internal/unixdial 0.003s
ok github.com/carlosframework/platform/internal/updatewords 0.004s
ok github.com/carlosframework/platform/internal/usage 0.007s
ok github.com/carlosframework/platform/internal/version 0.002s
ok github.com/carlosframework/platform/internal/vet 1.703s
FAIL
=== internal_console@0 (86 s)
ok github.com/carlosframework/platform/internal/console 84.223s
=== internal_console@1 (45 s)
ok github.com/carlosframework/platform/internal/console 42.875s
=== internal_console@2 (41 s)
ok github.com/carlosframework/platform/internal/console 39.097s
=== internal_console@3 (42 s)
ok github.com/carlosframework/platform/internal/console 40.171s
=== internal_console@4 (44 s)
ok github.com/carlosframework/platform/internal/console 41.959s
=== internal_console@5 (42 s)
ok github.com/carlosframework/platform/internal/console 40.126s
=== internal_console@6 (38 s)
ok github.com/carlosframework/platform/internal/console 35.926s
=== internal_console@7 (47 s)
ok github.com/carlosframework/platform/internal/console 45.239s
=== root@0 (110 s)
ok github.com/carlosframework/platform 108.187s
=== root@1 (84 s)
ok github.com/carlosframework/platform 82.714s
=== root@2 (92 s)
ok github.com/carlosframework/platform 90.146s
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/activator/activator.go b/internal/activator/activator.go| index 8aa16e0f5..3c6870a57 100644 |
| --- a/internal/activator/activator.go |
| +++ b/internal/activator/activator.go |
| @@ -1468,7 +1468,12 @@ func (a *Service) awaitStartup(ctx context.Context, deadline <-chan time.Time) e |
| // scheduled tick that stamped would reset the idle window on every fire, so |
| // any schedule tighter than that window would pin its instance awake forever |
| // for however little work the handler does. |
| -func (a *Service) begin(ctx context.Context, rt registry.Route, stamp bool) (release func(), err error) { |
| +// |
| +// req is the member request being served, nil for a caller with none (a |
| +// carlos run, beginRequest). Only the edge's request records read it: the |
| +// request that starts a wake is marked (edge.MarkWoke) so its record can say |
| +// it woke the app. |
| +func (a *Service) begin(ctx context.Context, rt registry.Route, stamp bool, req *http.Request) (release func(), err error) { |
| deadline := time.NewTimer(wakeWaitBound) |
| defer deadline.Stop() |
| arrival := time.Now() |
| @@ -1510,6 +1515,7 @@ func (a *Service) begin(ctx context.Context, rt registry.Route, stamp bool) (rel |
| e = &actEntry{host: rt.Host, route: rt, state: actWaking, ready: make(chan struct{})} |
| a.entries[rt.Host] = e |
| go a.wake(e) |
| + edge.MarkWoke(req) |
| } |
| // A held recovery probe serves nothing until the source opens. |
| if e.probeHeld { |
| @@ -1573,7 +1579,7 @@ func (a *Service) begin(ctx context.Context, rt registry.Route, stamp bool) (rel |
| // beginRequest is begin for member traffic: activity counts. |
| func (a *Service) beginRequest(ctx context.Context, rt registry.Route) (release func(), err error) { |
| - return a.begin(ctx, rt, true) |
| + return a.begin(ctx, rt, true, nil) |
| } |
| // awaitWake is a waiter's wait on one wake: begin's and WakeWorker's. It |
| @@ -5426,7 +5432,7 @@ func (a *Service) serve(w http.ResponseWriter, r *http.Request, rt registry.Rout |
| // entry stayed local — placement converges at the next sleep boundary, |
| // since its state is already in S3. Single-box v1 always wakes locally. |
| - release, err := a.begin(r.Context(), rt, stamp) |
| + release, err := a.begin(r.Context(), rt, stamp, r) |
| if err != nil { |
| return a.serveWakeError(w, r, rt, err) |
| } |
diff --git a/internal/activator/activator_test.go b/internal/activator/activator_test.go| index b8c04587f..96e3d8c52 100644 |
| --- a/internal/activator/activator_test.go |
| +++ b/internal/activator/activator_test.go |
| @@ -1146,6 +1146,50 @@ func TestActivatorWakeCoalesces(t *testing.T) { |
| } |
| } |
| +// The request that starts a wake is marked as the one that woke the app |
| +// (edge.MarkWoke, read back by the edge's request records); a request that |
| +// queues behind the same wake is not, though it waited just as long. |
| +func TestActivatorMarksOnlyTheWakingRequestWoke(t *testing.T) { |
| + t.Parallel() |
| + a, b, _, _ := testActivator(t, time.Minute) |
| + b.startGate = make(chan struct{}) |
| + rt := testRoute("woke.example.com") |
| + proxy := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) }) |
| + |
| + serve := func(req *http.Request) <-chan int { |
| + done := make(chan int, 1) |
| + go func() { |
| + out := httptest.NewRecorder() |
| + if !a.ServeHTTP(out, req, rt, proxy) { |
| + t.Error("activator did not handle a hibernating route") |
| + } |
| + done <- out.Code |
| + }() |
| + return done |
| + } |
| + first, _ := edge.WithAnswerFlag(httptest.NewRequest("GET", "https://woke.example.com/", nil)) |
| + firstDone := serve(first) |
| + // The first request holds the gated wake before the second arrives, so |
| + // the second can only join it. |
| + waitFor(t, "the wake to begin", func() bool { _, _, s := b.counts(); return s == 1 }) |
| + second, _ := edge.WithAnswerFlag(httptest.NewRequest("GET", "https://woke.example.com/", nil)) |
| + secondDone := serve(second) |
| + time.Sleep(50 * time.Millisecond) |
| + close(b.startGate) |
| + if c1, c2 := <-firstDone, <-secondDone; c1 != http.StatusOK || c2 != http.StatusOK { |
| + t.Fatalf("statuses %d, %d; want 200, 200", c1, c2) |
| + } |
| + if !edge.Woke(first) { |
| + t.Fatal("the request that started the wake is not marked woke") |
| + } |
| + if edge.Woke(second) { |
| + t.Fatal("a request that joined the wake is marked woke") |
| + } |
| + if _, _, starts := b.counts(); starts != 1 { |
| + t.Fatalf("starts = %d, want one wake", starts) |
| + } |
| +} |
| + |
| // OnWake (customer-fleets plan, Task 6: a fleet box's binding publish) must |
| // fire after a successful wake, named with the right host, and — the whole |
| // point of running it via `go a.OnWake(host)` rather than calling it inline — |
diff --git a/internal/activator/cmd.go b/internal/activator/cmd.go| index 4027fa0fd..b1a82a5f5 100644 |
| --- a/internal/activator/cmd.go |
| +++ b/internal/activator/cmd.go |
| @@ -466,7 +466,7 @@ func (a *Service) RunCmd(ctx context.Context, rt registry.Route, spec CmdSpec) ( |
| defer cancel() |
| var release func() |
| for { |
| - r, err := a.begin(wctx, rt, true) |
| + r, err := a.begin(wctx, rt, true, nil) |
| if err == nil { |
| release = r |
| break |
diff --git a/internal/activator/startup_test.go b/internal/activator/startup_test.go| index 8a06481f2..d1c29e03b 100644 |
| --- a/internal/activator/startup_test.go |
| +++ b/internal/activator/startup_test.go |
| @@ -45,7 +45,7 @@ func TestStartupBlocksWorkerAndSidecarAdmission(t *testing.T) { |
| } |
| ctx, cancel := context.WithCancel(t.Context()) |
| cancel() |
| - if _, err := a.begin(ctx, rt, true); !errors.Is(err, context.Canceled) { |
| + if _, err := a.begin(ctx, rt, true, nil); !errors.Is(err, context.Canceled) { |
| t.Fatalf("cancelled request: %v", err) |
| } |
| if a.Owns(rt.Host) { |
diff --git a/internal/edge/answered.go b/internal/edge/answered.go| index 9699a7a13..e92d52977 100644 |
| --- a/internal/edge/answered.go |
| +++ b/internal/edge/answered.go |
| @@ -35,6 +35,10 @@ type outcome struct { |
| // generations on. The cache tags what it stores with them (spec §7.2). |
| genHost string |
| gen uint64 |
| + // woke is set by the activator on the one request that started a wake |
| + // (MarkWoke), so a request record can say which request woke the app. |
| + // Requests that queued behind the same wake are not marked. |
| + woke bool |
| } |
| // causeClientGone is the cause noted when a proxy fails because the CLIENT |
| @@ -72,6 +76,24 @@ func MarkAnswered(r *http.Request) { |
| } |
| } |
| +// MarkWoke records that r started a wake of its instance; a no-op when r is |
| +// nil or carries no outcome, like MarkAnswered, so the activator can call it |
| +// for its platform callers (a carlos run, a test) that have no request. |
| +func MarkWoke(r *http.Request) { |
| + if r == nil { |
| + return |
| + } |
| + if o, ok := r.Context().Value(answeredKey{}).(*outcome); ok { |
| + o.woke = true |
| + } |
| +} |
| + |
| +// Woke reports whether MarkWoke was called for r. |
| +func Woke(r *http.Request) bool { |
| + o, ok := r.Context().Value(answeredKey{}).(*outcome) |
| + return ok && o.woke |
| +} |
| + |
| // waited reports how long r has been served for, when the edge attached an |
| // outcome; zero otherwise. |
| func waited(r *http.Request) time.Duration { |
diff --git a/internal/edge/edge.go b/internal/edge/edge.go| index a23121947..4427c05cb 100644 |
| --- a/internal/edge/edge.go |
| +++ b/internal/edge/edge.go |
| @@ -178,6 +178,12 @@ type Edge struct { |
| // every app nobody has switched on. |
| analyticsMeter atomic.Pointer[analyticsMeterRef] |
| analyticsOn atomic.Pointer[map[string]bool] |
| + // requestRecords, when set, receives every response the observer defer |
| + // sees and every protection-rule match (reqrecords.go). Atomic like |
| + // analyticsMeter, so it can be wired after construction while serving |
| + // is underway. Nil = no request records, which is every box until it is |
| + // wired. |
| + requestRecords atomic.Pointer[requestRecorderRef] |
| // geo is the GeoIP reader every request's lookup goes through (geoip |
| // spec §5.4); never nil after New, empty until a database is installed. |
| // geoLookup is what decideGeo calls: geo.Lookup in production, a spy in |
| @@ -1682,6 +1688,7 @@ func (e *Edge) ServeHTTP(w http.ResponseWriter, r *http.Request) { |
| e.emitEdgeError(up.route, up.viaTunnel, r, ob.status, out.cause) |
| } |
| e.observeAnalytics(up.route, r, ob, bytes) |
| + e.observeRecords(up.route, up.viaTunnel, r, ob, out) |
| }() |
| } |
diff --git a/internal/edge/reqrecords.go b/internal/edge/reqrecords.go| new file mode 100644 |
| index 000000000..bb9d4387d |
| --- /dev/null |
| +++ b/internal/edge/reqrecords.go |
| @@ -0,0 +1,98 @@ |
| +package edge |
| + |
| +import ( |
| + "net/http" |
| + "time" |
| + |
| + "github.com/carlosframework/platform/internal/registry" |
| + "github.com/carlosframework/platform/internal/release" |
| + "github.com/carlosframework/platform/internal/reqrec" |
| +) |
| + |
| +// RequestRecorder is where the edge files request records: one Response per |
| +// response the observer defer sees, and one Match per request a protection |
| +// rule blocked or watched. reqrec.Recorder satisfies it; the interface keeps |
| +// the edge's dependency on the contract, as AnalyticsMeter does. |
| +type RequestRecorder interface { |
| + Response(reqrec.Response) |
| + Match(reqrec.Match) |
| +} |
| + |
| +type requestRecorderRef struct{ RequestRecorder } |
| + |
| +// EnableRequestRecords wires the recorder in; nil turns recording off. A nil |
| +// interface is stored as no pointer at all, so the serving path's one Load |
| +// is the whole cost of recording being off. |
| +func (e *Edge) EnableRequestRecords(rec RequestRecorder) { |
| + if rec == nil { |
| + e.requestRecords.Store(nil) |
| + return |
| + } |
| + e.requestRecords.Store(&requestRecorderRef{rec}) |
| +} |
| + |
| +// requestResponse is the Response for r on rt, shared by the observer defer |
| +// and recordMatch so a match and a plain response describe a request the |
| +// same way. Woke is left for the caller: only the defer knows it. |
| +func requestResponse(rt registry.Route, r *http.Request, status int) reqrec.Response { |
| + geoAns, _ := geoAnswerFrom(r.Context()) |
| + return reqrec.Response{ |
| + Acct: release.RouteAccount(rt), App: rt.App, Host: rt.Host, |
| + Method: r.Method, Path: r.URL.Path, RawQuery: r.URL.RawQuery, |
| + UA: r.Header.Get("User-Agent"), ClientIP: clientIP(r), Country: geoAns.Country, |
| + Status: status, When: time.Now(), |
| + } |
| +} |
| + |
| +// observeRecords files one Response for a completed response. It runs inside |
| +// the observer defer in ServeHTTP, after observeAnalytics, and like it only |
| +// reads what the response already settled. |
| +// |
| +// viaTunnel means this box handed the request to another box over a reverse |
| +// channel. Any wake happened there, out of this box's sight, so the record |
| +// says whether the request woke the app only when the wake was this box's |
| +// to see (WokeKnown). |
| +func (e *Edge) observeRecords(rt registry.Route, viaTunnel bool, r *http.Request, ob *countingWriter, out *outcome) { |
| + ref := e.requestRecords.Load() |
| + if ref == nil { |
| + return |
| + } |
| + // One record per served response, observeAnalytics's rule: the hub that |
| + // forwarded this over the tunnel records it from its own defer. |
| + if fromTunnel(r.Context()) { |
| + return |
| + } |
| + status := ob.status |
| + if status == 0 { |
| + status = http.StatusOK // nothing written: net/http answers 200 |
| + } |
| + x := requestResponse(rt, r, status) |
| + x.WokeKnown = !viaTunnel |
| + x.Woke = out != nil && out.woke |
| + ref.Response(x) |
| +} |
| + |
| +// recordMatch files a Match for a request a protection rule blocked (kind |
| +// KindBlock) or only watched (KindWatch), and returns the reference code the |
| +// block page shows. The code is sealed with the current mesh key when this |
| +// box has one, and unsealed otherwise, so a box outside the mesh can still |
| +// show one. It is returned even when recording is off: the visitor's page |
| +// does not depend on whether anything was written. |
| +// |
| +// frag must already have passed through reqrec.Fragment. |
| +func (e *Edge) recordMatch(rt registry.Route, r *http.Request, kind reqrec.Kind, tier reqrec.Tier, ruleID, frag string, status int) string { |
| + key, _ := e.homes.Load().meshKeys() |
| + code := reqrec.NewRef(time.Now(), tier, ruleID, e.box, key) |
| + ref := e.requestRecords.Load() |
| + if ref == nil { |
| + return code |
| + } |
| + x := requestResponse(rt, r, status) |
| + // A blocked request never reaches the activator, so it woke nothing, and |
| + // that is known on whichever box answers it. A watched one is forwarded |
| + // and may wake the app, which nothing passed in here says, so its record |
| + // leaves woke out rather than claim it did not. |
| + x.WokeKnown = kind == reqrec.KindBlock |
| + ref.Match(reqrec.Match{Response: x, Kind: kind, Tier: tier, RuleID: ruleID, Fragment: frag, Ref: code}) |
| + return code |
| +} |
diff --git a/internal/edge/reqrecords_test.go b/internal/edge/reqrecords_test.go| new file mode 100644 |
| index 000000000..ffe4745a5 |
| --- /dev/null |
| +++ b/internal/edge/reqrecords_test.go |
| @@ -0,0 +1,111 @@ |
| +package edge |
| + |
| +import ( |
| + "net/http" |
| + "net/http/httptest" |
| + "testing" |
| + |
| + "github.com/carlosframework/platform/internal/registry" |
| + "github.com/carlosframework/platform/internal/reqrec" |
| + "github.com/carlosframework/platform/internal/tunnelclient" |
| +) |
| + |
| +type memRecorder struct { |
| + resp []reqrec.Response |
| + match []reqrec.Match |
| +} |
| + |
| +func (m *memRecorder) Response(x reqrec.Response) { m.resp = append(m.resp, x) } |
| +func (m *memRecorder) Match(x reqrec.Match) { m.match = append(m.match, x) } |
| + |
| +// A 404 the app itself answered reaches the recorder from the observer |
| +// defer, with the path and raw query split as the request carried them. |
| +func TestRecordsSeeAppNotFound(t *testing.T) { |
| + e := edgeWithBackend(t, http.NotFoundHandler()) |
| + rec := &memRecorder{} |
| + e.EnableRequestRecords(rec) |
| + req := httptest.NewRequest("GET", "http://app.test/wp-login.php?x=1", nil) |
| + e.ServeHTTP(httptest.NewRecorder(), req) |
| + if len(rec.resp) != 1 || rec.resp[0].Status != 404 || rec.resp[0].Path != "/wp-login.php" || rec.resp[0].RawQuery != "x=1" || !rec.resp[0].WokeKnown { |
| + t.Fatalf("got %+v", rec.resp) |
| + } |
| +} |
| + |
| +// The hub that forwarded a request over the tunnel records it; the box it |
| +// was delivered to must not record it a second time. |
| +func TestRecordsSkipTunnelDelivered(t *testing.T) { |
| + e := edgeWithBackend(t, http.NotFoundHandler()) |
| + rec := &memRecorder{} |
| + e.EnableRequestRecords(rec) |
| + h := tunnelclient.Mark(e) |
| + h.ServeHTTP(httptest.NewRecorder(), httptest.NewRequest("GET", "http://app.test/x", nil)) |
| + if len(rec.resp) != 0 { |
| + t.Fatalf("tunnel-delivered request recorded %d times", len(rec.resp)) |
| + } |
| +} |
| + |
| +// recordMatch seals its reference code with the mesh key, so the code it |
| +// hands back verifies against that key and is the one the match carries. |
| +func TestRecordMatchReturnsSealedCode(t *testing.T) { |
| + e, _, key := proofEdge(t, true) |
| + rec := &memRecorder{} |
| + e.EnableRequestRecords(rec) |
| + rt := registry.Route{Host: "app.test", App: "shop"} |
| + code := e.recordMatch(rt, httptest.NewRequest("GET", "http://app.test/.env", nil), reqrec.KindBlock, reqrec.TierHard, "dotenv", "", 404) |
| + r, err := reqrec.ParseRef(code, key) |
| + if err != nil || !r.Verified || len(rec.match) != 1 || rec.match[0].Ref != code { |
| + t.Fatalf("code %q: %+v %v; matches %d", code, r, err, len(rec.match)) |
| + } |
| +} |
| + |
| +// With recording off, recordMatch still hands back a code: the block page |
| +// shows it whether or not anything was written. With no home map there is no |
| +// mesh key, so the code is unsealed rather than missing. |
| +func TestRecordMatchCodeWithoutRecorder(t *testing.T) { |
| + e, _, _ := proofEdge(t, false) |
| + rt := registry.Route{Host: "app.test", App: "shop"} |
| + code := e.recordMatch(rt, httptest.NewRequest("GET", "http://app.test/.env", nil), reqrec.KindBlock, reqrec.TierHard, "dotenv", "", 404) |
| + if r, err := reqrec.ParseRef(code); err != nil || r.Sealed || r.Tier != reqrec.TierHard { |
| + t.Fatalf("code %q: %+v %v", code, r, err) |
| + } |
| +} |
| + |
| +// wakingActivator answers every request as an activator that woke the |
| +// instance for it would: MarkWoke, the call internal/activator's begin makes |
| +// for the request that starts a wake, then the app's answer. |
| +type wakingActivator struct{} |
| + |
| +func (wakingActivator) ServeHTTP(w http.ResponseWriter, r *http.Request, rt registry.Route, proxy http.Handler) bool { |
| + MarkWoke(r) |
| + w.WriteHeader(http.StatusOK) |
| + return true |
| +} |
| +func (wakingActivator) RetireExcept(map[string]bool) {} |
| + |
| +// What the activator marks on the request reaches that request's record. |
| +func TestRecordsCarryTheWake(t *testing.T) { |
| + reg := openReg(t) |
| + rt := registry.Route{Host: "sleepy.example.com", Kind: "instance", Socket: t.TempDir() + "/x.sock", Status: "ready", Hibernate: true, App: "web"} |
| + if err := reg.Upsert(rt); err != nil { |
| + t.Fatal(err) |
| + } |
| + e, err := New(reg, wakingActivator{}) |
| + if err != nil { |
| + t.Fatal(err) |
| + } |
| + rec := &memRecorder{} |
| + e.EnableRequestRecords(rec) |
| + e.ServeHTTP(httptest.NewRecorder(), httptest.NewRequest("GET", "http://sleepy.example.com/", nil)) |
| + if len(rec.resp) != 1 || !rec.resp[0].Woke || !rec.resp[0].WokeKnown || rec.resp[0].Status != 200 || rec.resp[0].App != "web" { |
| + t.Fatalf("got %+v", rec.resp) |
| + } |
| +} |
| + |
| +func TestEnableRequestRecordsNil(t *testing.T) { |
| + e := edgeWithBackend(t, http.NotFoundHandler()) |
| + var typed *reqrec.Recorder |
| + e.EnableRequestRecords(typed) // typed nil must not panic on the serving path |
| + e.ServeHTTP(httptest.NewRecorder(), httptest.NewRequest("GET", "http://app.test/x", nil)) |
| + e.EnableRequestRecords(nil) |
| + e.ServeHTTP(httptest.NewRecorder(), httptest.NewRequest("GET", "http://app.test/x", nil)) |
| +} |