console: rate limit page shows path rules in full, neutral test names (#358)
Path rules render with the CLI approved line and resolved numbers, so a rule setting only its rate cannot read like one setting only its burst. Adds the non-member refusal test the gate has. Test data uses shop and example.com.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3 files changed,
+103
−60
internal/console/appsettings.go+22 −17internal/console/appsettings_ratelimit_test.go+80 −42internal/console/templates/app_settings.html+1 −1
CI failed — run details
CI log
=== gate ===
.amadan/test-gate.sh
=== launchctx (1 s)
ok amadan.net/carlos/platform.git/launchctx 0.019s
? amadan.net/carlos/platform.git/launchctx/controlname [no test files]
? amadan.net/carlos/platform.git/launchctx/wireid [no test files]
=== vet (9 s)
=== gofmt (1 s)
gofmt -l .: clean
=== rest (161 s)
? github.com/carlosframework/platform/cmd/changelog [no test files]
ok github.com/carlosframework/platform/cmd/console 3.193s
ok github.com/carlosframework/platform/cmd/moveprobe 11.836s
ok github.com/carlosframework/platform/cmd/zddprobe 0.717s
ok github.com/carlosframework/platform/internal/activator 57.436s
ok github.com/carlosframework/platform/internal/agentsock 0.031s
ok github.com/carlosframework/platform/internal/alerting 0.004s
ok github.com/carlosframework/platform/internal/analytics 0.023s
ok github.com/carlosframework/platform/internal/appconfig 2.662s
ok github.com/carlosframework/platform/internal/apperr 0.086s
ok github.com/carlosframework/platform/internal/applog 0.165s
ok github.com/carlosframework/platform/internal/awsinv 0.006s
ok github.com/carlosframework/platform/internal/boxchoice 0.008s
ok github.com/carlosframework/platform/internal/boxid 0.843s
? 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.013s
ok github.com/carlosframework/platform/internal/caps 0.018s
ok github.com/carlosframework/platform/internal/certwarm 0.003s
ok github.com/carlosframework/platform/internal/cgroup 0.704s
ok github.com/carlosframework/platform/internal/changelog 0.361s
ok github.com/carlosframework/platform/internal/claimactivation 1.007s
ok github.com/carlosframework/platform/internal/clamd 0.055s
? github.com/carlosframework/platform/internal/cliflag [no test files]
? github.com/carlosframework/platform/internal/controlname [no test files]
? github.com/carlosframework/platform/internal/controlsock [no test files]
ok github.com/carlosframework/platform/internal/dbdoor 7.952s
ok github.com/carlosframework/platform/internal/dbdoor/dbdoortest 0.010s
ok github.com/carlosframework/platform/internal/dbquery 0.007s
ok github.com/carlosframework/platform/internal/dbreads 2.196s
? github.com/carlosframework/platform/internal/dbreads/dbreadstest [no test files]
ok github.com/carlosframework/platform/internal/dbverify 0.005s
ok github.com/carlosframework/platform/internal/dnsrec 0.003s
--- FAIL: TestFenceLanguagesAreDeclared (0.00s)
fences_test.go:32: cli.md:1196: fence declares no language
FAIL
FAIL github.com/carlosframework/platform/internal/docsite 0.011s
ok github.com/carlosframework/platform/internal/domains 2.545s
ok github.com/carlosframework/platform/internal/doorkey 0.007s
ok github.com/carlosframework/platform/internal/economics 0.004s
ok github.com/carlosframework/platform/internal/edge 45.792s
? github.com/carlosframework/platform/internal/edgeproof [no test files]
ok github.com/carlosframework/platform/internal/edgesfile 0.017s
ok github.com/carlosframework/platform/internal/fleetapi 0.144s
ok github.com/carlosframework/platform/internal/gate 1.690s
ok github.com/carlosframework/platform/internal/genselect 0.027s
ok github.com/carlosframework/platform/internal/geo 0.024s
ok github.com/carlosframework/platform/internal/geoip 0.046s
ok github.com/carlosframework/platform/internal/historyreadback 0.173s
ok github.com/carlosframework/platform/internal/host 141.269s
ok github.com/carlosframework/platform/internal/hostactors 6.689s
ok github.com/carlosframework/platform/internal/hostactors/awsmembership 0.013s
ok github.com/carlosframework/platform/internal/hostbox 2.939s
ok github.com/carlosframework/platform/internal/hostclaim 0.754s
ok github.com/carlosframework/platform/internal/hostenv 0.013s
ok github.com/carlosframework/platform/internal/hostevidence 0.014s
ok github.com/carlosframework/platform/internal/hostexec 5.408s
ok github.com/carlosframework/platform/internal/hostfence 0.034s
ok github.com/carlosframework/platform/internal/hostfiles 10.343s
ok github.com/carlosframework/platform/internal/hostfloor 0.021s
ok github.com/carlosframework/platform/internal/hostguard 1.032s
ok github.com/carlosframework/platform/internal/hostops 1.985s
? github.com/carlosframework/platform/internal/hostops/fencerelease [no test files]
ok github.com/carlosframework/platform/internal/hostops/internal/fencerelease 0.013s
ok github.com/carlosframework/platform/internal/hostquarantine 0.014s
ok github.com/carlosframework/platform/internal/hostrelocate 0.616s
ok github.com/carlosframework/platform/internal/hostresolve 0.175s
ok github.com/carlosframework/platform/internal/hostwrite 0.012s
ok github.com/carlosframework/platform/internal/infraview 0.012s
ok github.com/carlosframework/platform/internal/instancectl 5.235s
ok github.com/carlosframework/platform/internal/instanceexec 2.778s
ok github.com/carlosframework/platform/internal/instancefs 0.017s
ok github.com/carlosframework/platform/internal/instancekey 0.015s
ok github.com/carlosframework/platform/internal/instanceupdates 0.024s
ok github.com/carlosframework/platform/internal/layout 1.730s
ok github.com/carlosframework/platform/internal/lbhealth 0.018s
ok github.com/carlosframework/platform/internal/lease 10.145s
ok github.com/carlosframework/platform/internal/lease/leasetest 0.603s
ok github.com/carlosframework/platform/internal/ledger 0.024s
ok github.com/carlosframework/platform/internal/mail 0.235s
ok github.com/carlosframework/platform/internal/maintenance 0.101s
ok github.com/carlosframework/platform/internal/maintenanceexec 5.515s
ok github.com/carlosframework/platform/internal/maintenanceguard 0.089s
ok github.com/carlosframework/platform/internal/metrics 0.012s
ok github.com/carlosframework/platform/internal/moves 21.261s
ok github.com/carlosframework/platform/internal/moves/archive 0.993s
ok github.com/carlosframework/platform/internal/objstore 0.281s
ok github.com/carlosframework/platform/internal/ops 0.190s
ok github.com/carlosframework/platform/internal/park 0.251s
ok github.com/carlosframework/platform/internal/plans 0.009s
ok github.com/carlosframework/platform/internal/privatefile 0.004s
2026/10/24 22:43:03 provision: listing apps/bab/blog/instances/: list refused — its records are unseen this pass
2026/10/24 22:43:03 provision: listing apps/bab/: listdirs refused — its records are unseen this pass
2026/10/24 22:43:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:03 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:03 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/24 22:43:03 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/24 22:43:03 provision: skipping record apps/bac/tito/instances/one.example.com.json: unreadable: read refused
2026/10/24 22:43:03 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/24 22:43:03 provision: an app's records could not be listed: they are skipped
2026/10/24 22:43:03 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:04 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/24 22:43:04 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/24 22:43:04 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/24 22:43:04 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/24 22:43:04 provision: claim install acme.go.tito.io: provision: claim admission unavailable
2026/10/24 22:43:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/24 22:43:04 provision: claim install bot.eleven.bac.sidecar.internal: provision: claim admission unavailable
2026/10/24 22:43:04 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/24 22:43:04 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/24 22:43:04 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 22:43:04 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: no sealed config
2026/10/24 22:43:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 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 22:43:04 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/24 22:43:04 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/24 22:43:04 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 22:43:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 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 22:43:04 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/24 22:43:04 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/24 22:43:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/24 22:43:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/24 22:43:04 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 22:43:04 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/24 22:43:04 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/24 22:43:04 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/24 22:43:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 22:43:04 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 22:43:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:04 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:04 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:04 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 22:43:04 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:04 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:04 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route rk.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route rl.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route rf.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route rg.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route rh.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route ri.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route rj.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/24 22:43:04 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/24 22:43:04 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:04 provision: minted instance route x.appa.example (app "appa" acct "bac")
2026/10/24 22:43:04 provision: minted instance route x.appc.example (app "appc" acct "bac")
2026/10/24 22:43:04 provision: minted instance route x.appg.example (app "appg" acct "bac")
2026/10/24 22:43:04 provision: minted instance route x.apph.example (app "apph" acct "bac")
2026/10/24 22:43:04 provision: minted instance route x.appi.example (app "appi" acct "bac")
2026/10/24 22:43:04 provision: minted instance route x.appb.example (app "appb" acct "bac")
2026/10/24 22:43:04 provision: minted instance route x.appd.example (app "appd" acct "bac")
2026/10/24 22:43:04 provision: minted instance route x.appe.example (app "appe" acct "bac")
2026/10/24 22:43:04 provision: minted instance route x.appf.example (app "appf" acct "bac")
2026/10/24 22:43:04 provision: minted instance route x.appj.example (app "appj" acct "bac")
2026/10/24 22:43:04 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 22:43:05 provision: minted instance route r0013.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0022.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0054.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0118.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0015.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0074.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0009.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0029.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0066.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0000.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0018.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0025.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0049.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0120.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0051.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0052.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0061.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0090.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0101.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0122.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0083.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0007.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0021.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0026.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0035.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0036.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0104.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0105.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0011.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0043.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0045.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0063.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0077.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0078.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0091.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0092.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0102.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0060.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0081.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0117.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0127.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0058.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0113.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0124.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0041.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0057.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0094.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0103.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0112.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0129.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0028.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0055.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0071.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0072.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0106.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0108.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0034.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0046.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0096.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0114.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0006.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0065.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0014.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0020.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0031.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0037.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0115.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0038.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0076.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0107.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0068.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0095.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0121.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0128.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0012.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0042.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0069.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0097.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0032.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0039.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0079.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0086.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0098.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0126.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0064.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0119.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0005.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0002.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0053.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0044.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0003.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0004.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0027.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0100.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0016.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0019.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0048.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0099.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0017.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0067.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0084.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0089.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0082.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0085.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0033.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0080.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0087.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0001.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0062.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0070.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0075.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0024.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0030.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0047.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0116.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0125.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0023.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0110.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0111.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0008.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0059.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0073.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0109.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0123.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0088.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0093.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0010.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0040.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0050.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:05 provision: minted instance route r0056.go.tito.io (app "tito" acct "bac")
--- FAIL: TestPlan9B8RecordWriteCensus (0.76s)
plan9_b8_census_test.go:372: record-write census rejected 8 site(s); update the explicit inventory only after reviewing the source:
changed site internal/console/apiinstances.go:Server.handleAPIInstanceUpdate: source differs from the reviewed digest
changed site internal/console/authcli.go:Server.registerCLIRoutes: source differs from the reviewed digest
changed site internal/console/server.go:NewServer: source differs from the reviewed digest
changed site internal/provision/reconcile.go:Reconcile: source differs from the reviewed digest
changed site main.go:main: source differs from the reviewed digest
unlisted site apimode.go:apiSession.instanceRateLimit [lit:instances]: review it, classify it, and update its explicit inventory entry
unlisted site apimode.go:apiSession.instanceSetRateLimit [lit:instances]: review it, classify it, and update its explicit inventory entry
unlisted site internal/console/appsettings.go:Server.handleAppRateLimit [key:UpdateRecord]: review it, classify it, and update its explicit inventory entry
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 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 22:43:06 provision: minted instance route shop.example.com (app "shop" acct "bac")
2026/10/24 22:43:06 provision: minted instance route shop.example.com (app "shop" acct "bac")
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route console.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted service route svc.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route whole.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route shared.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: converged acme.go.tito.io channel stable -> edge
2026/10/24 22:43:06 provision: converged acme.go.tito.io channel edge -> canary/rehearsal
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: empty channel
2026/10/24 22:43:06 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: converged acme.go.tito.io environment "" -> "staging"
2026/10/24 22:43:06 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: converged acme.go.tito.io steering "" -> "latency"
2026/10/24 22:43:06 provision: converged acme.go.tito.io steering "latency" -> ""
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: converged acme.go.tito.io hibernate false -> true
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: converged acme.go.tito.io hibernate true -> false (replication "daily" cleared: only a hibernating route's rung is read)
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: converged acme.go.tito.io status-named false -> true
2026/10/24 22:43:06 provision: converged acme.go.tito.io status-named true -> false
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 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 22:43:06 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 22:43:06 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 22:43:06 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 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 22:43:06 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 22:43:06 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 22:43:06 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: skipping accounts/bac/account.json: malformed account manifest: invalid character 'o' in literal null (expecting 'u')
2026/10/24 22:43:06 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: manifest bac/tito: read failed: provision: manifest bac/tito: invalid character 'o' in literal null (expecting 'u')
2026/10/24 22:43:06 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 22:43:06 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 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 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 22:43:06 provision: not removing acme$evil.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 22:43:06 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 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 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 22:43:06 provision: not removing bad-service.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 22:43:06 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/24 22:43:06 provision: not removing no-channel.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:06 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/24 22:43:06 provision: removed retired instance route ghost.go.tito.io (record gone)
2026/10/24 22:43:06 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 22:43:06 provision: minted instance route dup.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 22:43:06 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 22:43:06 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/24 22:43:06 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:06 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 22:43:06 provision: removed retired static route site.go.tito.io (app in the trash)
2026/10/24 22:43:06 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 22:43:06 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 22:43:06 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/24 22:43:06 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 22:43:06 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 22:43:06 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 22:43:06 provision: converged acme.go.tito.io channel stable -> edge
2026/10/24 22:43:06 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 22:43:06 provision: converged acme.go.tito.io channel canary/rehearsal -> edge
2026/10/24 22:43:06 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/24 22:43:07 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/24 22:43:07 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 22:43:07 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 22:43:07 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 22:43:07 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 22:43:07 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 22:43:07 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 22:43:07 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 22:43:07 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/24 22:43:07 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 22:43:07 provision: dry-run: would converge adopt.go.tito.io channel stable -> edge
2026/10/24 22:43:07 provision: dry-run: would converge adopt.go.tito.io environment "" -> "staging"
2026/10/24 22:43:07 provision: dry-run: would converge owned.go.tito.io channel stable -> edge
2026/10/24 22:43:07 provision: dry-run: would converge owned.go.tito.io environment "" -> "staging"
2026/10/24 22:43:07 provision: dry-run: would converge owned.go.tito.io hibernate false -> true
2026/10/24 22:43:07 provision: dry-run: would converge owned.go.tito.io seed
2026/10/24 22:43:07 provision: dry-run: would mint instance route acme.go.tito.io (app "tito" acct "bac" channel "stable")
2026/10/24 22:43:07 provision: dry-run: would remove retired instance route gone.go.tito.io (record gone)
2026/10/24 22:43:07 provision: converged owned.go.tito.io channel stable -> edge
2026/10/24 22:43:07 provision: converged owned.go.tito.io environment "" -> "staging"
2026/10/24 22:43:07 provision: converged owned.go.tito.io hibernate false -> true
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: adopted existing route adopt.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 22:43:07 provision: converged adopt.go.tito.io channel stable -> edge
2026/10/24 22:43:07 provision: converged adopt.go.tito.io environment "" -> "staging"
2026/10/24 22:43:07 provision: removed retired instance route gone.go.tito.io (record gone)
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: adopted existing route story.carlosframework.com (app "story" acct "bad") — this record now owns its channel and environment
2026/10/24 22:43:07 provision: story.carlosframework.com exists but is not the route this record describes (kind "instance"/"static") — leaving it alone
2026/10/24 22:43:07 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted service route pub.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted service route pubs.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route exec.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted service route loop.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted service route named.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted service route priv.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route unit.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted static route pisite.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: removed retired static route site.go.tito.io (record gone)
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: converged acme.go.tito.io replicas "ie,uk" -> "uk"
2026/10/24 22:43:07 provision: converged acme.go.tito.io replicas "uk" -> ""
2026/10/24 22:43:07 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: converged acme-uk.go.tito.io replica mark true -> false
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 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 22:43:07 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:07 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/24 22:43:07 provision: router.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/24 22:43:07 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/24 22:43:07 provision: converged acme.go.tito.io channel stable -> edge
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/24 22:43:07 provision: not removing acme.go.tito.io (record gone): participant of a running operation
2026/10/24 22:43:07 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/24 22:43:07 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/24 22:43:07 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 22:43:07 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/24 22:43:07 provision: acme.go.tito.io: held restoring by rb_other, not by mv_acme; leaving it
2026/10/24 22:43:07 provision: acme.go.tito.io: the row is not this pass's (app "other" acct ""); not holding it for mv_acme
2026/10/24 22:43:07 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/24 22:43:07 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 22:43:07 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 22:43:07 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/24 22:43:07 provision: minted instance route acme.example.com (app "shop" acct "bac")
2026/10/24 22:43:07 provision: minted instance route plain.example.com (app "shop" acct "bac")
2026/10/24 22:43:07 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:07 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 22:43:07 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:07 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 22:43:07 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:07 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 22:43:07 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:07 provision: listing apps/bac/shop/instances/: list refused — its records are unseen this pass
2026/10/24 22:43:08 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:08 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/24 22:43:08 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:08 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/24 22:43:08 provision: minted sidecar route bot.shop.bac.sidecar.internal (app "shop" acct "bac" args ["run"])
2026/10/24 22:43:08 provision: removed retired sidecar route bot.shop.bac.sidecar.internal (record gone)
2026/10/24 22:43:08 provision: minted sidecar route bot.shop.bum.sidecar.internal (app "shop" acct "bum" args ["run"])
2026/10/24 22:43:08 provision: minted sidecar route bot.shop.bum.sidecar.internal (app "shop" acct "bum" args ["run"])
2026/10/24 22:43:08 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 22:43:08 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 22:43:08 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 22:43:08 provision: removed retired sidecar route bot.shop.bum.sidecar.internal (record gone)
2026/10/24 22:43:08 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 22:43:08 provision: removed retired sidecar route bot.shop.bum.sidecar.internal (record gone)
2026/10/24 22:43:09 provision: a.shop.example.com: swapped for import sd_nrbarotdhnf6bkfksbu362frmm (the original route is journaled)
2026/10/24 22:43:09 provision: a.shop.example.com: import sd_nrbarotdhnf6bkfksbu362frmm committed: its gate is cleared and its journal row dropped
2026/10/24 22:43:09 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 22:43:09 provision: a.shop.example.com: import sd_jv6seixc7pqu5woeqv62zvxunq rolled back to its original route
2026/10/24 22:43:09 provision: a.shop.example.com: import sd_jv6seixc7pqu5woeqv62zvxunq: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/24 22:43:09 provision: a.shop.example.com: import sd_jv6seixc7pqu5woeqv62zvxunq is cleaned up and its journal row retired
2026/10/24 22:43:09 provision: a.shop.example.com: import sd_lxlm5xls3ulkqp3uwjprfpayaa rolled back to its original route
2026/10/24 22:43:09 provision: a.shop.example.com: import sd_lxlm5xls3ulkqp3uwjprfpayaa: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/24 22:43:09 provision: a.shop.example.com: import sd_lxlm5xls3ulkqp3uwjprfpayaa is cleaned up and its journal row retired
2026/10/24 22:43:09 provision: dry-run: would redo a.shop.example.com's swap record CAS for import sd_23db5bbv57b26rejngitqcvdua
2026/10/24 22:43:09 provision: dry-run: would clear a.shop.example.com's import gate
2026/10/24 22:43:09 provision: dry-run: would converge a.shop.example.com seed source
2026/10/24 22:43:09 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 22:43:09 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 22:43:09 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 22:43:09 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 22:43:09 provision: a.shop.example.com: import sd_npjsctfyexoco7i4pl6zcmiu4q cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/24 22:43:09 provision: a.shop.example.com: import sd_v6ci7ozgpekiftv22w76oncnkq cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/24 22:43:09 provision: a.shop.example.com: import sd_gbtgf7wpwfkfdfrqwlq5diubqa is journaled, but this box cannot act on imports; its row is left alone
2026/10/24 22:43:09 provision: a.shop.example.com: import sd_atrcgpw75auktpjrhtfrb3eiom is journaled, but this box cannot act on imports; its row is left alone
2026/10/24 22:43:09 provision: a.shop.example.com: import sd_nfqc3tmoffxpva7c5l2jkgz6by is journaled, but this box cannot act on imports; its row is left alone
2026/10/24 22:43:09 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 22:43:09 provision: c.shop.example.com: import sd_fzgvqq4rzwx7i6ppawxoxda7y4 left alone this pass: the import journal could not be read
2026/10/24 22:43:09 provision: b.shop.example.com: import sd_gtvbx5oitvl5n5icsvvwd7qmle left alone this pass: the import journal could not be read
2026/10/24 22:43:09 provision: a.shop.example.com: import sd_5y5mltgwevfhvemo44xkcpx72q committed: its gate is cleared and its journal row dropped
2026/10/24 22:43:09 provision: a.shop.example.com: not converging import sd_4wx3scsyhngobltckahgzcs5s4: it is swapped but not committed, and the row on this box has no import gate
2026/10/24 22:43:09 provision: a.shop.example.com: not converging import sd_dqujy4orap7oalphlt7r7tuh7y: it is swapped but not committed, and the row on this box has no import gate
2026/10/24 22:43:09 provision: a.shop.example.com: not converging import sd_rvmupjhba7e7g2zwtgwungi3pa: it is placed but not committed, and the row on this box has no import gate
2026/10/24 22:43:09 provision: a.shop.example.com: not converging import sd_wwrfcnsfxhn2qu7kl3gc7a73ta: it is placed but not committed, and the row on this box has no import gate
2026/10/24 22:43:09 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 22:43:09 provision: converge seed source on a.shop.example.com: constraint failed: seed_source is read-only here (1811)
2026/10/24 22:43:09 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 22:43:09 provision: a.shop.example.com: import sd_54yr33ktsj5ptpfq4zztnlfk4m committed: its gate is cleared and its journal row dropped
2026/10/24 22:43:09 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 22:43:09 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:09 provision: acme.go.tito.io: row is on the nested layout (db "/data/instances/acme.go.tito.io/acme.go.tito.io.db" socket "/run/carlos/instances/acme.go.tito.io/app.sock"); the record's shared paths are not drift
2026/10/24 22:43:09 provision: acme.go.tito.io: not minting a seeded instance: this box does not mint nested (<nil>)
2026/10/24 22:43:09 provision: acme.go.tito.io: not minting a seeded instance: claim control is on for this box
2026/10/24 22:43:10 provision: acme.go.tito.io: aborted seed sd_jzyhlu6jvuv5q453hroolpxdou: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/24 22:43:10 provision: acme.go.tito.io: aborted seed sd_jzyhlu6jvuv5q453hroolpxdou rolled back (no box had swapped it)
2026/10/24 22:43:10 provision: acme.go.tito.io: not minting a seeded instance: its record does not describe a hibernating instance
2026/10/24 22:43:10 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:10 provision: removed instance route acme.go.tito.io (its seed sd_p7qsex2quhb2i54eedoibnhkti was aborted); the next pass rolls it back
2026/10/24 22:43:10 provision: acme.go.tito.io: aborted seed sd_p7qsex2quhb2i54eedoibnhkti: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/24 22:43:10 provision: acme.go.tito.io: aborted seed sd_p7qsex2quhb2i54eedoibnhkti rolled back (no box had swapped it)
2026/10/24 22:43:10 provision: acme.go.tito.io: aborted seed sd_kkccewbmlmk2vvhwcatkybn7ym has a row this pass may not remove; leaving the seed aborted
2026/10/24 22:43:10 provision: acme.go.tito.io: aborted seed sd_cjlb6ksahmdpd6uczczxmk4emq rolled back (no box had swapped it)
2026/10/24 22:43:10 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:10 provision: removed instance route acme.go.tito.io (its seed sd_uftzlmwomdd5k5mfxeeco4wfsq was aborted); the next pass rolls it back
2026/10/24 22:43:10 provision: acme.go.tito.io: aborted seed sd_uftzlmwomdd5k5mfxeeco4wfsq has no route on this box: its local data is removed
2026/10/24 22:43:10 provision: acme.go.tito.io: aborted seed sd_uftzlmwomdd5k5mfxeeco4wfsq rolled back (no box had swapped it)
2026/10/24 22:43:10 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_dl4ogiqqre53anwnkijto4akgy (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_dl4ogiqqre53anwnkijto4akgy rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_dl4ogiqqre53anwnkijto4akgy is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_jlsh4763wy5bhmejwp4wzvtxp4 (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_jlsh4763wy5bhmejwp4wzvtxp4 rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_jlsh4763wy5bhmejwp4wzvtxp4 is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_wmtcd4fex56zsu2ivpjfijdemi (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_wmtcd4fex56zsu2ivpjfijdemi rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_wmtcd4fex56zsu2ivpjfijdemi: the host's replica is left alone: its record no longer names this seed
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_wmtcd4fex56zsu2ivpjfijdemi is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_wtge2u5zmz2wjn23us63nt6hpe (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_wtge2u5zmz2wjn23us63nt6hpe rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_wtge2u5zmz2wjn23us63nt6hpe rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_wtge2u5zmz2wjn23us63nt6hpe is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_6avv72qlz5afmtq44rmijtzqqe (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_6avv72qlz5afmtq44rmijtzqqe rollback deferred: the host is not fenced and stopped yet (stop unproven)
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_yqhjdozc254zhgnuchtcqjdafu (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_yqhjdozc254zhgnuchtcqjdafu is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_wpgmjzljdcoxsqaxohpjvkjdt4 (the original route is journaled)
2026/10/24 22:43:10 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_wpgmjzljdcoxsqaxohpjvkjdt4 left alone this pass: its record could not be read
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_fg6sywbr7z4xxe2dypwu3rq4qy (the original route is journaled)
2026/10/24 22:43:10 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: read failed: connection reset
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_fg6sywbr7z4xxe2dypwu3rq4qy left alone this pass: its record could not be read
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_bquxjxv4mnuc6eay6gbrrjry6a (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_bquxjxv4mnuc6eay6gbrrjry6a: close the import gate: constraint failed: injected (1811)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_bquxjxv4mnuc6eay6gbrrjry6a rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_bquxjxv4mnuc6eay6gbrrjry6a is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_ijoa7llkn5lnin75bvo6g65u2a (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_ijoa7llkn5lnin75bvo6g65u2a: close the import gate: constraint failed: injected (1811)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_ijoa7llkn5lnin75bvo6g65u2a rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_ijoa7llkn5lnin75bvo6g65u2a is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_gvibmweqjhal67trhheva5i7oy (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_gvibmweqjhal67trhheva5i7oy rollback deferred: the host is not fenced and stopped yet (injected failure at fence)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_gvibmweqjhal67trhheva5i7oy rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_gvibmweqjhal67trhheva5i7oy is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_645avl5mc3fk6x6g2ceeaebc2y (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_645avl5mc3fk6x6g2ceeaebc2y rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_645avl5mc3fk6x6g2ceeaebc2y is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_pmhbjxjzxtqqrgmernnqfpiy2i (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_pmhbjxjzxtqqrgmernnqfpiy2i: retire its instance key: injected failure at retire-key
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_pmhbjxjzxtqqrgmernnqfpiy2i rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_pmhbjxjzxtqqrgmernnqfpiy2i is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_bswmvtzgkwmleahamnrkmebi74 (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_bswmvtzgkwmleahamnrkmebi74 rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_bswmvtzgkwmleahamnrkmebi74 is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_jbcmxzmd7kaeyiej7wgp2v63pu (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_jbcmxzmd7kaeyiej7wgp2v63pu: remove its local data: injected failure at remove-local
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_jbcmxzmd7kaeyiej7wgp2v63pu rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_jbcmxzmd7kaeyiej7wgp2v63pu is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_2g6dckrzjqxohlpfcpu7u55vfu (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_2g6dckrzjqxohlpfcpu7u55vfu rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_2g6dckrzjqxohlpfcpu7u55vfu is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_h23qf36m4kzdzmlxrq4uc2sg5a (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_h23qf36m4kzdzmlxrq4uc2sg5a: remove its local data: injected failure at remove-local-done
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_h23qf36m4kzdzmlxrq4uc2sg5a rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_h23qf36m4kzdzmlxrq4uc2sg5a is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_i4rlbxbt5d36axil6extoq32bu (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_i4rlbxbt5d36axil6extoq32bu rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_i4rlbxbt5d36axil6extoq32bu is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_tjfwhutfd66w7bd7mb2ncdbhta (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_tjfwhutfd66w7bd7mb2ncdbhta: restore the original route: constraint failed: injected (1811)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_tjfwhutfd66w7bd7mb2ncdbhta rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_tjfwhutfd66w7bd7mb2ncdbhta is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_2epdtvpnmw44v244xfknzb33ii (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_2epdtvpnmw44v244xfknzb33ii: restore the original route: constraint failed: injected (1811)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_2epdtvpnmw44v244xfknzb33ii rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_2epdtvpnmw44v244xfknzb33ii is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_m5odzh77qu7n5yrslgptapsymy (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_m5odzh77qu7n5yrslgptapsymy is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_5aqxac5gubvcr6o3zwwyz7nhqi (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_5aqxac5gubvcr6o3zwwyz7nhqi rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_5aqxac5gubvcr6o3zwwyz7nhqi: delete its snapshot: injected failure at delete-snapshot
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_5aqxac5gubvcr6o3zwwyz7nhqi is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_6pjjepmz4ayahybvqqep6l62tu (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_6pjjepmz4ayahybvqqep6l62tu rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_6pjjepmz4ayahybvqqep6l62tu is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_4zwbnbzulto4kem4oh3bivg5ui (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_4zwbnbzulto4kem4oh3bivg5ui rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_4zwbnbzulto4kem4oh3bivg5ui: delete the host's replica: injected failure at delete-replica
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_4zwbnbzulto4kem4oh3bivg5ui is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_736svtnlnkplck2tdkxxe4zivq (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_736svtnlnkplck2tdkxxe4zivq rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_736svtnlnkplck2tdkxxe4zivq is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_jaxc2xz43upkywnypmqu73xxru (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_jaxc2xz43upkywnypmqu73xxru rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_jaxc2xz43upkywnypmqu73xxru: retire its journal row: constraint failed: injected (1811)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_jaxc2xz43upkywnypmqu73xxru is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_cpobacxkopqf6qdbw45yu3dxce (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_cpobacxkopqf6qdbw45yu3dxce rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_cpobacxkopqf6qdbw45yu3dxce: retire its journal row: constraint failed: injected (1811)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_cpobacxkopqf6qdbw45yu3dxce is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_ipdhzcuswizqti2xxh535asfxu (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_ipdhzcuswizqti2xxh535asfxu rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_ipdhzcuswizqti2xxh535asfxu is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: mark import sd_ipdhzcuswizqti2xxh535asfxu rolled back: injected failure at cas
2026/10/24 22:43:10 provision: a.shop.example.com: aborted seed sd_ipdhzcuswizqti2xxh535asfxu rolled back (no box had swapped it)
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_tewtmdls45xosigspre247jbuq (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_tewtmdls45xosigspre247jbuq rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_tewtmdls45xosigspre247jbuq is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: aborted seed sd_tewtmdls45xosigspre247jbuq rolled back (no box had swapped it)
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_kkrhfg7k5nv7bqsyoagntwn4oe (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_kkrhfg7k5nv7bqsyoagntwn4oe rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_kkrhfg7k5nv7bqsyoagntwn4oe rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_kkrhfg7k5nv7bqsyoagntwn4oe rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_kkrhfg7k5nv7bqsyoagntwn4oe is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_le6sbwt3pakm3twr3njy5knawa (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_le6sbwt3pakm3twr3njy5knawa rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_le6sbwt3pakm3twr3njy5knawa is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_vwigg3pciq4k4p5abk3vwxu2ty (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_vwigg3pciq4k4p5abk3vwxu2ty rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_vwigg3pciq4k4p5abk3vwxu2ty is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_542o2wzmcir2g726wawozd7mym (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_542o2wzmcir2g726wawozd7mym rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_542o2wzmcir2g726wawozd7mym is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_mikym56egcaiwunltdpjrp3a4i (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_mikym56egcaiwunltdpjrp3a4i rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_mikym56egcaiwunltdpjrp3a4i is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_c5vjxksepfrxbzbtljvc335csy (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_c5vjxksepfrxbzbtljvc335csy rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_c5vjxksepfrxbzbtljvc335csy is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_wrjoly5e76lg7gyohkvmd7cocm (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_wrjoly5e76lg7gyohkvmd7cocm rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_wrjoly5e76lg7gyohkvmd7cocm is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/24 22:43:10 provision: a.shop.example.com: swapped for import sd_2gp2gy3mujgl7nntzllakyedxa (the original route is journaled)
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_2gp2gy3mujgl7nntzllakyedxa rolled back to its original route
2026/10/24 22:43:10 provision: a.shop.example.com: import sd_2gp2gy3mujgl7nntzllakyedxa is cleaned up and its journal row retired
2026/10/24 22:43:10 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_vvtcd55zdcmnkxfifonblh33ni (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_vvtcd55zdcmnkxfifonblh33ni has no route on this box: its local data is removed and no route is put back
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_vvtcd55zdcmnkxfifonblh33ni is cleaned up and its journal row retired
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_hden7tjyga7v2baqaaldcilbue (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_oidmr4m6ria2hsw36jctureq6q (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_h7xb27e34ilevqawicdr7sdsi4 (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_h7xb27e34ilevqawicdr7sdsi4 cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_lvoxy6xtgo3i4jmd4m7tthztl4 (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_lvoxy6xtgo3i4jmd4m7tthztl4 is not rolled back: the route changed under the fence, so nothing there is touched
2026/10/24 22:43:11 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 22:43:11 provision: a.shop.example.com: import ../not-a-seed is cleaned up and its journal row retired
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_wtouotqg3h2axwzaymc4hrcgaa (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_ok2g7ggd5s42zxn6oye6hanrkm (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_2n2h6q6eza3tcdsjjxj7ryr2x4 (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_bjjsywy3oo7unuaxvripejztsq (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_qo4cn7imxa33lvrirrp7rpm2te (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_qo4cn7imxa33lvrirrp7rpm2te rollback deferred: the host is not fenced and stopped yet (stop evidence unreadable)
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_hjljdpg5laikztdb47c5m6fl7q (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_hjljdpg5laikztdb47c5m6fl7q has no route on this box: its local data is removed and no route is put back
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_hjljdpg5laikztdb47c5m6fl7q is cleaned up and its journal row retired
2026/10/24 22:43:11 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_ykwn466aqasqacnbqrno34pila (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_ykwn466aqasqacnbqrno34pila: remove its local data: injected failure at remove-local
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_ykwn466aqasqacnbqrno34pila is not rolled back: the route at the host is not the import's, so nothing there is touched
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_6yunnbyhknrn242budwgws4n5e (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_6yunnbyhknrn242budwgws4n5e: a route appeared at the host, so its local database is left and the rollback waits
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_omuoqvlldr657hzh5lcgmubkku (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_omuoqvlldr657hzh5lcgmubkku rollback deferred: no fence generation: registry busy
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_b6dxe2f2dxfpofshiu2y7vu6fu (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_b6dxe2f2dxfpofshiu2y7vu6fu rollback deferred: no fence generation: the generation source answered 0
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_z6maclfnmdx2z3o546yrvwje7q (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_skma7xtiavnf6z4kjbk7wpvxny (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_2kleb3hy646j7wjiwad5ph4paa (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import deferred: this box cannot read the instance's env file
2026/10/24 22:43:11 provision: a.shop.example.com: import deferred: the instance's env file could not be read: a symlink
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_iqlaqww2a6jlg7h3ls7qmzrimy (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_iqlaqww2a6jlg7h3ls7qmzrimy rolled back to its original route
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_iqlaqww2a6jlg7h3ls7qmzrimy is cleaned up and its journal row retired
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_6q4eaq2clngxa65qnvvj3ryahy (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_6q4eaq2clngxa65qnvvj3ryahy rolled back to its original route
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_6q4eaq2clngxa65qnvvj3ryahy is cleaned up and its journal row retired
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_tdewoyuner4docx4yahchgrg2e (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_tdewoyuner4docx4yahchgrg2e rolled back to its original route
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_tdewoyuner4docx4yahchgrg2e is cleaned up and its journal row retired
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_sa4mg45lhzohwiatnj6y5vshra (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_sa4mg45lhzohwiatnj6y5vshra: retire its instance key: the env file is a symlink
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_sa4mg45lhzohwiatnj6y5vshra rolled back to its original route
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_sa4mg45lhzohwiatnj6y5vshra is cleaned up and its journal row retired
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_ffivlk4fzbycsammjbs5rwcy5a (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_ukpmmfk74s4yyp3rh4wq6gwqji (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_oichd3z2jaartdzh7jjj2r2oja refused: there is no route at a.shop.example.com to replace
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_j3iok6v7yifsl3ffhgsbuqsiby refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_fnnl6gygxfdag6dfbx6zbvpdqu 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 22:43:11 provision: a.shop.example.com: import sd_qrl6hxss76m5r2x7k43fksxezm refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_om742by27xpz3jry6dbbyf4l24 refused: the route belongs to app other
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_672atkv6bgea3cvgjw2hn7tupy refused: the route is filed under another account
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_23iy4bwhxhcdkfffhaufj4rcp4 refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_7abtpkg7oksfhidpyoahy7ezfa refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_dl572rm53nlu3mqissgwsq3pte refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_lmxh2yseicpijstxwmanjwspta refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_32mkocorlbgoixmwjax3hqedc4 refused: the route is not an address route this import can take over (socket)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_6x2vxwss7xzefglc3vgyrknqxa refused: the route is not an address route this import can take over (no address)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_pmkwd354araphzsdrfcai4hs6q refused: the route is not an address route this import can take over (provisioned)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_2jnikbuwz6rh4udq2r2il7w2eu refused: the route is not an address route this import can take over (kind static)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_ts4exym2ppbmrpeufsy54cgfdm refused: the route is not an address route this import can take over (backing)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_6xpgzo5qo4aakozt5qevqtikoe refused: the route is not an address route this import can take over (tunnel)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_km4q4aju4fbx7hygcmc2ihxbve refused: the route is not an address route this import can take over (caps)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_r7yb7l2m4ktce3wcjtjc5wec4u refused: the route is not an address route this import can take over (platform)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_64kk7qyj4edrxgdx7xkcl5d22m refused: the route is not an address route this import can take over (canary)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_4oadyuhxpkhbrxi6kjnkvsybiu refused: the route is not an address route this import can take over (kind sidecar)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_vtuhi7xmlzizwc5rtabuxihnuy refused: the route is not an address route this import can take over (region)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_bpvh7fbbiy7hnbysyeyswemive refused: the route is not an address route this import can take over (fleet_box)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_72gutwqp536tst4tjl3hel44x4 refused: the route is not an address route this import can take over (hibernate)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_4qnfssbsaiy444svosshle5vza refused: the route is not an address route this import can take over (claim_owner)
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_jhhpwa37fweugt6mur3xu2ckn4 refused: this box does not run instances nested
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_e6hchfxah74i7in26hd5santzy refused: this box does not run instances nested
2026/10/24 22:43:11 provision: a.shop.example.com: import sd_gbkh2qwt74gwbehijshgulfnzy refused: claim control is on for this box
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_axuatdoc44llqxmnqmm7d3yzda (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: swapped for import sd_tnvs3nxm26mgwxk7uzikpspygy (the original route is journaled)
2026/10/24 22:43:11 provision: a.shop.example.com: import deferred: this box cannot read the legacy route assignments
2026/10/24 22:43:11 provision: a.shop.example.com: import deferred: the legacy route assignments could not be read: store down
2026/10/24 22:43:11 provision: a.shop.example.com: not swapping for import sd_wjwcri5h2ihuqmpsilwfajr6vi: its verify hash is not a sha256
2026/10/24 22:43:11 provision: a.shop.example.com: not swapping for import sd_hdot3q3wdwwr66skd3pmnmhh3e: its verify hash is not a sha256
2026/10/24 22:43:11 provision: a.shop.example.com: not swapping for import sd_ptt7zlpyexo4x67l2yxd5cqbrm: its verify hash is not a sha256
2026/10/24 22:43:11 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 22:43:12 provision: A.shop.example.com/..: not swapping for import sd_u2vd6tocg4ssbq6kvrtcq7siyu: its host or seed id is malformed (seeds: not a host)
2026/10/24 22:43:12 provision: a.shop.example.com: not swapping for import sd_rpw3uquazxqpp2urdmyn3t5g7e: its record does not describe a nested, hibernating instance
2026/10/24 22:43:12 provision: a.shop.example.com: not swapping for import sd_3kj4nx7ahhgqzptcg24szousie: its record does not describe a nested, hibernating instance
2026/10/24 22:43:12 provision: a.shop.example.com: not swapping for import sd_pftspej7bg7svi4huk2iso524u: its record does not describe a nested, hibernating instance
2026/10/24 22:43:12 provision: a.shop.example.com: not swapping for import sd_53nhmosuf36f2zy7tezzahozpi: its record does not describe a nested, hibernating instance
2026/10/24 22:43:12 provision: a.shop.example.com: import deferred: the box's layout intent could not be read: store down
2026/10/24 22:43:12 provision: a.shop.example.com: swapped for import sd_o7p7fjvqsdq3lmdjlp7ijrxnka (the original route is journaled)
2026/10/24 22:43:12 provision: a.shop.example.com: import deferred: the box's nested probe did not answer: ready probe timed out
2026/10/24 22:43:12 provision: a.shop.example.com: swapped for import sd_pem4vpoh5rgyuocbew2rrp7o7u (the original route is journaled)
2026/10/24 22:43:12 provision: a.shop.example.com: swapped for import sd_rwn6ooycwprf7yqklt42bae4e4 (the original route is journaled)
2026/10/24 22:43:12 provision: a.shop.example.com: import deferred: the route is held by operation op_1
2026/10/24 22:43:12 provision: dry-run: would consider swapping a.shop.example.com for import sd_d2sovnkcqv44cgzfln72sibree
2026/10/24 22:43:12 provision: a.shop.example.com: import sd_krfpzq35w5fe7fpts7am3dvfp4 rolled back to its original route
2026/10/24 22:43:12 provision: a.shop.example.com: import sd_krfpzq35w5fe7fpts7am3dvfp4: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/24 22:43:12 provision: a.shop.example.com: import sd_krfpzq35w5fe7fpts7am3dvfp4 is cleaned up and its journal row retired
2026/10/24 22:43:12 provision: a.shop.example.com: import sd_gxyc7hcd4pliinfqfsyixmhv3y left alone: the import journal holds seed sd_tlzkuein4nlenwi4xhpqvqggfi at swapped
2026/10/24 22:43:12 provision: a.shop.example.com: not minting import sd_iisidnmo7i23evazzarldia2gq: it is swapped but not committed, and only its swap makes its row
2026/10/24 22:43:12 provision: a.shop.example.com: not minting import sd_qtfpkjp5agbngzfw64mtkrmmku: it is placed but not committed, and only its swap makes its row
2026/10/24 22:43:12 provision: a.shop.example.com: swapped for import sd_khhevodzp6p3ccahpagbeqoccy (the original route is journaled)
2026/10/24 22:43:12 provision: a.shop.example.com: not minting import sd_khhevodzp6p3ccahpagbeqoccy: it is swapped but not committed, and only its swap makes its row
2026/10/24 22:43:12 provision: a.shop.example.com: not minting import sd_khhevodzp6p3ccahpagbeqoccy: it is placed but not committed, and only its swap makes its row
2026/10/24 22:43:12 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/24 22:43:12 provision: removed retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/24 22:43:12 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:12 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:12 provision: converged sidecar bot.eleven.bac.sidecar.internal args ["sidecar","run"] -> ["worker","run"]
2026/10/24 22:43:12 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:12 provision: converged sidecar bot.eleven.bac.sidecar.internal ceilings 300/3600 -> 60/120
2026/10/24 22:43:12 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:12 provision: converged sidecar bot.eleven.bac.sidecar.internal channel stable -> canary/eleven
2026/10/24 22:43:12 provision: converged sidecar bot.eleven.bac.sidecar.internal environment "other" -> "relay"
2026/10/24 22:43:12 provision: converged sidecar bot.eleven.bac.sidecar.internal hibernate true -> false
2026/10/24 22:43:12 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: read failed: failStore: reads disabled under apps/bac/eleven/sidecars/
2026/10/24 22:43:12 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: malformed: invalid character 'n' looking for beginning of object key string
2026/10/24 22:43:12 provision: not removing sidecar bot.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/24 22:43:12 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: empty channel
2026/10/24 22:43:12 provision: skipping sidecar record apps/bac/eleven/sidecars/held.json: empty channel
2026/10/24 22:43:12 provision: not removing sidecar held.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/24 22:43:12 provision: removed retired sidecar route old.eleven.bac.sidecar.internal (record gone)
2026/10/24 22:43:12 provision: bac/eleven has sidecar records but no sidecars manifest — not minting
2026/10/24 22:43:12 provision: bac/eleven is in the trash — not minting sidecar routes for it
2026/10/24 22:43:12 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 22:43:12 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 22:43:12 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:12 provision: minted sidecar route hub.relay.bac.sidecar.internal (app "relay" acct "bac" args ["relay"])
2026/10/24 22:43:12 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 22:43:12 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:12 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 22:43:12 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:12 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:12 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 22:43:12 provision: removed retired sidecar route bot.eleven.bac.sidecar.internal (record gone)
2026/10/24 22:43:12 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:12 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 22:43:12 provision: skipping sidecar record apps/bac/relay/sidecars/hub.json: read failed: failStore: reads disabled under apps/bac/relay/sidecars/
2026/10/24 22:43:12 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 22:43:12 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/24 22:43:12 provision: dry-run: would mint sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" channel "stable" args ["sidecar","run"])
2026/10/24 22:43:12 provision: dry-run: would remove retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/24 22:43:12 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 22:43:12 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:12 provision: converged acme.go.tito.io update settings "{\"updates\":\"manual\",\"channel\":\"stable\"}" -> ""
2026/10/24 22:43:12 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:12 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:12 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/24 22:43:12 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/24 22:43:12 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/24 22:43:12 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/24 22:43:12 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/24 22:43:12 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/24 22:43:12 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/24 22:43:12 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 22:43:12 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/24 22:43:12 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/24 22:43:12 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: listing apps/bqd/: listdirs refused — its records are unseen this pass
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: record view: change index unusable (release: change index malformed: invalid character 'n' looking for beginning of object key string): walking
2026/10/24 22:43:12 provision: record view: change index unusable (get refused): walking
2026/10/24 22:43:12 provision: record view: re-reading apps/bqc/shop failed: retrying on the next refresh
2026/10/24 22:43:12 provision: record view: re-reading apps/bqc/shop failed: retrying on the next refresh
2026/10/24 22:43:12 provision: listing apps/bqc/shop/instances/: list refused — its records are unseen this pass
2026/10/24 22:43:12 provision: listing apps/bqc/shop/instances/: context canceled — its records are unseen this pass
2026/10/24 22:43:12 provision: listing apps/bqc/shop/instances/: list refused — its records are unseen this pass
2026/10/24 22:43:12 provision: an app's records could not be listed: they are skipped
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/24 22:43:12 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/24 22:43:12 provision: skipping accounts/bqd/account.json: malformed account manifest: invalid character 'n' looking for beginning of object key string
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: record view: re-reading accounts/bqd failed: retrying on the next refresh
2026/10/24 22:43:12 provision: skipping accounts/bqd/account.json: read failed: list refused
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/24 22:43:12 provision: skipping record apps/bum/shop/instances/one.example.com.json: empty channel
2026/10/24 22:43:12 provision: not removing one.example.com: its record exists but could not be read cleanly this pass
2026/10/24 22:43:12 provision: skipping record apps/bum/shop/instances/one.example.com.json: empty channel
2026/10/24 22:43:12 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/24 22:43:12 provision: not removing one.example.com: its record exists but could not be read cleanly this pass
2026/10/24 22:43:12 provision: minted instance route one.example.com (app "shop" acct "bum")
2026/10/24 22:43:12 provision: removed retired instance route one.example.com (record gone)
2026/10/24 22:43:12 provision: removed retired instance route one.example.com (record gone)
2026/10/24 22:43:12 provision: record view: change index unusable (context deadline exceeded): walking
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/24 22:43:12 provision: record view: change index unusable (context deadline exceeded): the walk records no generations
2026/10/24 22:43:12 provision: skipping record apps/bqe/store/instances/bad.store.example.com.json: malformed: provision: invalid maintenance projection or protected fields
--- FAIL: TestPlan14RootReadCensus (8.53s)
plan14_root_reads_test.go:600: root read census: 40 discrepancies
changed registry schema
changed root read internal/console/server.go:NewServer; review class, task, sites and digest
changed root read internal/console/templates/app_settings.html:external; review class, task, sites and digest
changed root read internal/edge/edge.go:Edge.Reload; review class, task, sites and digest
changed root read internal/edge/edge.go:Edge.ServeHTTP; review class, task, sites and digest
changed root read internal/host/agent.go:runAgent; review class, task, sites and digest
changed root read internal/provision/reconcile.go:Reconcile; review class, task, sites and digest
changed root read internal/provision/reconcile.go:RouteFor; review class, task, sites and digest
changed root read internal/registry/registry.go:Registry.Fingerprint; review class, task, sites and digest
changed root read internal/registry/registry.go:Registry.Upsert; review class, task, sites and digest
changed root read internal/registry/registry.go:Registry.migrate; review class, task, sites and digest
changed root read internal/registry/registry.go:routeArgs; review class, task, sites and digest
changed root read internal/registry/registry.go:scanRoute; review class, task, sites and digest
changed root read internal/registry/remote_dispatch.go:Registry.dispatchRemote; review class, task, sites and digest
changed root source envelope .
changed root source envelope internal/console
changed root source envelope internal/console/templates
changed root source envelope internal/edge
changed root source envelope internal/host
changed root source envelope internal/plans
changed root source envelope internal/provision
changed root source envelope internal/ratelimit
changed root source envelope internal/registry
changed root source envelope internal/usage
unclassified root read internal/edge/ratelimit.go:Edge.noteRateLimited registry:Host@505,registry:Host@597,whole:Route@166
unclassified root read internal/edge/ratelimit.go:Edge.parseRateSettings registry:Host@271,registry:Host@367,registry:RateLimit@158,registry:RateLimit@77
unclassified root read internal/edge/ratelimit.go:Edge.rateAdmit registry:Host@834,registry:Kind@150,whole:Route@153,whole:Route@561,whole:Route@837,whole:Route@943
unclassified root read internal/edge/usagemeter.go:UsageMeter.RecordRateLimited registry:App@206,registry:Host@146,registry:Host@294,whole:Route@191
unclassified root read internal/host/plans_pass.go:planRateCeilingFor whole:Route@108
unclassified root read internal/registry/registry.go:Registry.SetRateLimit file:Exec@225,registry:remote@68,registry:remote@98,registry:sql@225,whole:remoteClient@100,whole:remoteClient@70
changed legacy declaration internal/console/server.go:NewServer
changed legacy declaration internal/console/templates/app_settings.html:external
changed legacy declaration internal/edge/edge.go:Edge.Reload
changed legacy declaration internal/edge/edge.go:Edge.ServeHTTP
changed legacy declaration internal/provision/reconcile.go:Reconcile
changed legacy declaration internal/registry/registry.go:Registry.Fingerprint
changed legacy declaration internal/registry/registry.go:Registry.migrate
changed legacy declaration internal/registry/registry.go:scanRoute
changed reclassified declaration internal/registry/registry.go:Registry.Upsert
changed reclassified declaration internal/registry/remote_dispatch.go:Registry.dispatchRemote
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 17.312s
ok github.com/carlosframework/platform/internal/publicrelease 0.011s
ok github.com/carlosframework/platform/internal/ratelimit 0.104s
? github.com/carlosframework/platform/internal/regionname [no test files]
ok github.com/carlosframework/platform/internal/registry 5.708s
ok github.com/carlosframework/platform/internal/relay 7.232s
ok github.com/carlosframework/platform/internal/release 25.454s
ok github.com/carlosframework/platform/internal/rollout 3.857s
ok github.com/carlosframework/platform/internal/rolloutwords 0.005s
ok github.com/carlosframework/platform/internal/rootaws 0.009s
ok github.com/carlosframework/platform/internal/rootparticipation 0.072s
ok github.com/carlosframework/platform/internal/rootstate 0.026s
ok github.com/carlosframework/platform/internal/runs 0.612s
ok github.com/carlosframework/platform/internal/s3compat 0.007s
ok github.com/carlosframework/platform/internal/safefile 0.006s
ok github.com/carlosframework/platform/internal/schedule 2.707s
ok github.com/carlosframework/platform/internal/seeds 0.012s
ok github.com/carlosframework/platform/internal/sim/engines 2.606s
ok github.com/carlosframework/platform/internal/sim/hostlife 10.392s
ok github.com/carlosframework/platform/internal/sim/litestreamfacts 4.157s
ok github.com/carlosframework/platform/internal/status 0.077s
ok github.com/carlosframework/platform/internal/steering 0.006s
ok github.com/carlosframework/platform/internal/stopevidence 0.239s
ok github.com/carlosframework/platform/internal/svcrole 0.003s
ok github.com/carlosframework/platform/internal/telemetry 0.005s
ok github.com/carlosframework/platform/internal/termfence 0.004s
ok github.com/carlosframework/platform/internal/tunnelclient 0.006s
ok github.com/carlosframework/platform/internal/unixdial 0.006s
ok github.com/carlosframework/platform/internal/updatewords 0.004s
ok github.com/carlosframework/platform/internal/usage 0.006s
ok github.com/carlosframework/platform/internal/version 0.002s
ok github.com/carlosframework/platform/internal/vet 1.664s
FAIL
=== internal_console@0 (82 s)
ok github.com/carlosframework/platform/internal/console 80.940s
=== internal_console@1 (40 s)
ok github.com/carlosframework/platform/internal/console 38.793s
=== internal_console@2 (39 s)
ok github.com/carlosframework/platform/internal/console 37.490s
=== internal_console@3 (43 s)
ok github.com/carlosframework/platform/internal/console 42.138s
=== internal_console@4 (43 s)
ok github.com/carlosframework/platform/internal/console 41.862s
=== internal_console@5 (42 s)
ok github.com/carlosframework/platform/internal/console 40.406s
=== internal_console@6 (40 s)
ok github.com/carlosframework/platform/internal/console 38.623s
=== internal_console@7 (43 s)
ok github.com/carlosframework/platform/internal/console 41.364s
=== root@0 (109 s)
ok github.com/carlosframework/platform 107.432s
=== root@1 (84 s)
ok github.com/carlosframework/platform 82.877s
=== root@2 (92 s)
ok github.com/carlosframework/platform 90.276s
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/console/appsettings.go b/internal/console/appsettings.go| index 05f5a6ed6..40556867c 100644 |
| --- a/internal/console/appsettings.go |
| +++ b/internal/console/appsettings.go |
| @@ -186,16 +186,10 @@ type GateRow struct { |
| // The rate-limit section's view of the same record. The four numbers |
| // are the owner's own settings as text, "" when unset, so an input's |
| // value is empty and its placeholder shows the default. Paths are the |
| - // record's path rules, read-only here: the CLI edits them. |
| + // record's path rules, read-only here (the CLI edits them), each as one |
| + // line of the CLI's own approved wording with every number resolved. |
| BusyAt, Share, Rate, Burst string |
| - Paths []RateLimitPathRow |
| -} |
| - |
| -// RateLimitPathRow is one path rule on the rate-limit section: its prefix |
| -// and the numbers it sets, in share, rate, burst order, unset ones left out. |
| -type RateLimitPathRow struct { |
| - Prefix string |
| - Numbers string |
| + Paths []string |
| } |
| // rateLimitField is a setting as an input's value: "" for unset. |
| @@ -417,20 +411,27 @@ func (s *Server) settingsGates(ctx context.Context, acct *Account, app string) ( |
| log.Printf("console: settings gates %s/%s: %v", acct.Sqid, app, err) |
| return nil, "Instance records could not be read just now." |
| } |
| + // The path lines show what the edge applies, so a rule that sets only |
| + // its rate still reads with its share and burst. No plan catalog, or a |
| + // failed lookup, means no ceiling to clamp to. |
| + var ceiling ratelimit.Ceiling |
| + if l, err := s.EffectiveLimits(acct); err != nil { |
| + log.Printf("console: settings rate limit ceiling %s/%s: %v", acct.Sqid, app, err) |
| + } else if l != nil { |
| + ceiling = l.RateCeiling() |
| + } |
| rows := make([]GateRow, 0, len(recs)) |
| for _, rec := range recs { |
| row := GateRow{Host: rec.Host, Gated: rec.Gate != ""} |
| if rl := rec.RateLimit; rl != nil { |
| row.BusyAt, row.Share = rateLimitField(rl.BusyAt), rateLimitField(rl.ClientShare) |
| row.Rate, row.Burst = rateLimitField(rl.Rate), rateLimitField(rl.Burst) |
| - for _, p := range rl.Paths { |
| - var nums []string |
| - for _, n := range []int{p.ClientShare, p.Rate, p.Burst} { |
| - if n != 0 { |
| - nums = append(nums, strconv.Itoa(n)) |
| - } |
| - } |
| - row.Paths = append(row.Paths, RateLimitPathRow{Prefix: p.Prefix, Numbers: strings.Join(nums, " ")}) |
| + for _, p := range ratelimit.Resolve(*rl, ceiling).Paths { |
| + row.Paths = append(row.Paths, strings.NewReplacer( |
| + "{prefix}", p.Prefix, |
| + "{share}", strconv.Itoa(p.ClientShare), |
| + "{rate}", strconv.Itoa(p.Rate), |
| + "{burst}", strconv.Itoa(p.Burst)).Replace(rateLimitPathCopy)) |
| } |
| } |
| rows = append(rows, row) |
| @@ -1050,6 +1051,10 @@ const ( |
| rateLimitSavedCopy = "Rate limit saved on {host}." |
| rateLimitClearedCopy = "Rate limit back to defaults on {host}." |
| rateLimitFailedCopy = "Could not save the rate limit. Try again." |
| + |
| + // rateLimitPathCopy is the CLI's path line, cli.ratelimit.show.path, |
| + // reused unedited for the page's read-only path rules. |
| + rateLimitPathCopy = "{prefix} {share} in flight per address when busy, backstop {rate} a second, bursts of {burst}" |
| ) |
| // handleAppRateLimit is the Settings page's rate-limit form: set the four |
diff --git a/internal/console/appsettings_ratelimit_test.go b/internal/console/appsettings_ratelimit_test.go| index d6fc09bee..25a1f1dbe 100644 |
| --- a/internal/console/appsettings_ratelimit_test.go |
| +++ b/internal/console/appsettings_ratelimit_test.go |
| @@ -12,17 +12,13 @@ import ( |
| "github.com/carlosframework/platform/internal/ratelimit" |
| ) |
| -// rlSettingsFixture is the gate test's fixture with one instance, a signed-up |
| -// browser and its CSRF token. |
| +// rlSettingsFixture is the API tests' rate-limit fixture (app shop, one |
| +// instance at rlHost, member alice) with a signed-up browser for alice and |
| +// its CSRF token. |
| func rlSettingsFixture(t *testing.T, code string) (*consoleFixture, *http.Client, string) { |
| t.Helper() |
| - fx, token := instanceFixture(t, code) |
| - letStateUpstreams(t, fx, "alice@keymail.dev") |
| - enableInstances(t, fx, "titogo", sharedPoolManifest()) |
| - if status, _, out := rawReq(t, http.MethodPost, instancesURL(fx, "bab", "titogo"), token, |
| - `{"host":"rl.go.tito.io","region":"ie","addrs":["127.0.0.1:7001"]}`); status != http.StatusCreated { |
| - t.Fatalf("create = %d %s", status, out) |
| - } |
| + fx, _ := rateLimitFixture(t, code) |
| + fx.setUser("alice@example.com") |
| c := newBrowser(t) |
| signUp(t, fx, c, code+"-browser") |
| return fx, c, sessionToken(t, fx, c) |
| @@ -30,15 +26,11 @@ func rlSettingsFixture(t *testing.T, code string) (*consoleFixture, *http.Client |
| func rlSettingsRecord(t *testing.T, fx *consoleFixture) *provision.Record { |
| t.Helper() |
| - rec, err := provision.GetRecord(context.Background(), fx.rel, "bab", "titogo", "rl.go.tito.io") |
| - if err != nil { |
| - t.Fatal(err) |
| - } |
| - return rec |
| + return rlRecord(t, fx) |
| } |
| func rlForm(csrf, action string, kv ...string) url.Values { |
| - v := url.Values{"csrf": {csrf}, "host": {"rl.go.tito.io"}, "action": {action}} |
| + v := url.Values{"csrf": {csrf}, "host": {rlHost}, "action": {action}} |
| for i := 0; i+1 < len(kv); i += 2 { |
| v.Set(kv[i], kv[i+1]) |
| } |
| @@ -47,7 +39,7 @@ func rlForm(csrf, action string, kv ...string) url.Values { |
| func TestAppSettingsRateLimitForm(t *testing.T) { |
| fx, c, csrf := rlSettingsFixture(t, "code-settings-rl") |
| - page := fx.u("/apps/titogo/settings/domains") |
| + page := fx.u("/apps/shop/settings/domains") |
| _, _, body := get(t, c, page) |
| for _, want := range []string{ |
| "<h2>Rate limit</h2>", |
| @@ -64,9 +56,9 @@ func TestAppSettingsRateLimitForm(t *testing.T) { |
| } |
| } |
| - status, loc, _ := postForm(t, c, fx.u("/apps/titogo/ratelimit"), |
| + status, loc, _ := postForm(t, c, fx.u("/apps/shop/ratelimit"), |
| rlForm(csrf, "set", "busy_at", "", "client_share", "", "rate", "500", "burst", "")) |
| - if status != http.StatusSeeOther || loc != fx.path("/apps/titogo/settings/domains") { |
| + if status != http.StatusSeeOther || loc != fx.path("/apps/shop/settings/domains") { |
| t.Fatalf("set = %d -> %q", status, loc) |
| } |
| rec := rlSettingsRecord(t, fx) |
| @@ -74,13 +66,13 @@ func TestAppSettingsRateLimitForm(t *testing.T) { |
| t.Fatalf("stored rate limit = %+v, want rate 500 only", rec.RateLimit) |
| } |
| _, _, body = get(t, c, page) |
| - if !strings.Contains(body, "Rate limit saved on rl.go.tito.io.") || !strings.Contains(body, `value="500"`) { |
| + if !strings.Contains(body, "Rate limit saved on a.shop.example.com.") || !strings.Contains(body, `value="500"`) { |
| t.Fatalf("after set: %s", body) |
| } |
| - events, _ := fx.st.Events(OpsAccountID, "titogo", 20) |
| + events, _ := fx.st.Events(OpsAccountID, "shop", 20) |
| var sawSet bool |
| for _, e := range events { |
| - if e.Detail == "rate limit set on rl.go.tito.io (console)" { |
| + if e.Detail == "rate limit set on a.shop.example.com (console)" { |
| sawSet = true |
| } |
| } |
| @@ -89,14 +81,14 @@ func TestAppSettingsRateLimitForm(t *testing.T) { |
| } |
| // All four fields filled in. |
| - postForm(t, c, fx.u("/apps/titogo/ratelimit"), |
| + postForm(t, c, fx.u("/apps/shop/ratelimit"), |
| rlForm(csrf, "set", "busy_at", "32", "client_share", "4", "rate", "100", "burst", "200")) |
| want := ratelimit.Settings{BusyAt: 32, Rule: ratelimit.Rule{ClientShare: 4, Rate: 100, Burst: 200}} |
| if rec := rlSettingsRecord(t, fx); rec.RateLimit == nil || !reflect.DeepEqual(*rec.RateLimit, want) { |
| t.Fatalf("stored rate limit = %+v, want %+v", rec.RateLimit, want) |
| } |
| - status, _, _ = postForm(t, c, fx.u("/apps/titogo/ratelimit"), rlForm(csrf, "clear")) |
| + status, _, _ = postForm(t, c, fx.u("/apps/shop/ratelimit"), rlForm(csrf, "clear")) |
| if status != http.StatusSeeOther { |
| t.Fatalf("clear = %d", status) |
| } |
| @@ -104,13 +96,13 @@ func TestAppSettingsRateLimitForm(t *testing.T) { |
| t.Fatalf("rate limit after clear = %+v, want nil", rec.RateLimit) |
| } |
| _, _, body = get(t, c, page) |
| - if !strings.Contains(body, "Rate limit back to defaults on rl.go.tito.io.") { |
| + if !strings.Contains(body, "Rate limit back to defaults on a.shop.example.com.") { |
| t.Fatalf("after clear: %s", body) |
| } |
| - events, _ = fx.st.Events(OpsAccountID, "titogo", 20) |
| + events, _ = fx.st.Events(OpsAccountID, "shop", 20) |
| var sawClear bool |
| for _, e := range events { |
| - if e.Detail == "rate limit cleared on rl.go.tito.io (console)" { |
| + if e.Detail == "rate limit cleared on a.shop.example.com (console)" { |
| sawClear = true |
| } |
| } |
| @@ -124,36 +116,55 @@ func TestAppSettingsRateLimitForm(t *testing.T) { |
| func TestAppSettingsRateLimitKeepsPaths(t *testing.T) { |
| fx, c, csrf := rlSettingsFixture(t, "code-settings-rl-paths") |
| rec := rlSettingsRecord(t, fx) |
| - rec.RateLimit = &ratelimit.Settings{BusyAt: 10, Paths: []ratelimit.PathRule{{Prefix: "/api/", Rule: ratelimit.Rule{Rate: 77}}}} |
| - _, etag, err := provision.GetRecordETag(context.Background(), fx.rel, "bab", "titogo", rec.Host) |
| + rec.RateLimit = &ratelimit.Settings{BusyAt: 10, Paths: []ratelimit.PathRule{ |
| + {Prefix: "/api/", Rule: ratelimit.Rule{Rate: 77}}, |
| + {Prefix: "/static/", Rule: ratelimit.Rule{Burst: 77}}, |
| + }} |
| + _, etag, err := provision.GetRecordETag(context.Background(), fx.rel, "bab", "shop", rec.Host) |
| if err != nil { |
| t.Fatal(err) |
| } |
| if err := provision.UpdateRecord(context.Background(), fx.rel, *rec, etag); err != nil { |
| t.Fatal(err) |
| } |
| - _, _, body := get(t, c, fx.u("/apps/titogo/settings/domains")) |
| - if !strings.Contains(body, "/api/") || !strings.Contains(body, "77") { |
| - t.Fatalf("page does not list the path rule: %s", body) |
| + // Each rule reads in full with its resolved numbers (the defaults fill |
| + // what it leaves out), so a rule that sets only its rate cannot look like |
| + // one that sets only its burst. |
| + _, _, body := get(t, c, fx.u("/apps/shop/settings/domains")) |
| + for _, line := range []string{ |
| + "/api/ 16 in flight per address when busy, backstop 77 a second, bursts of 1000", |
| + "/static/ 16 in flight per address when busy, backstop 300 a second, bursts of 77", |
| + } { |
| + if !strings.Contains(body, "<li>"+line+"</li>") { |
| + t.Fatalf("page lacks the path line %q: %s", line, body) |
| + } |
| + } |
| + |
| + // Under a plan the lines show what the edge applies: clamped. |
| + fx.srv.cfg.PlanCatalog = rlCatalog(t) |
| + _, _, body = get(t, c, fx.u("/apps/shop/settings/domains")) |
| + if want := "<li>/api/ 8 in flight per address when busy, backstop 77 a second, bursts of 1000</li>"; !strings.Contains(body, want) { |
| + t.Fatalf("page lacks the clamped line %q: %s", want, body) |
| } |
| + fx.srv.cfg.PlanCatalog = nil |
| - postForm(t, c, fx.u("/apps/titogo/ratelimit"), |
| + paths := rec.RateLimit.Paths |
| + postForm(t, c, fx.u("/apps/shop/ratelimit"), |
| rlForm(csrf, "set", "busy_at", "", "client_share", "", "rate", "300", "burst", "")) |
| - want := ratelimit.Settings{Rule: ratelimit.Rule{Rate: 300}, |
| - Paths: []ratelimit.PathRule{{Prefix: "/api/", Rule: ratelimit.Rule{Rate: 77}}}} |
| + want := ratelimit.Settings{Rule: ratelimit.Rule{Rate: 300}, Paths: paths} |
| if got := rlSettingsRecord(t, fx); got.RateLimit == nil || !reflect.DeepEqual(*got.RateLimit, want) { |
| t.Fatalf("stored = %+v, want %+v", got.RateLimit, want) |
| } |
| // Every field empty keeps the path rules too. |
| - postForm(t, c, fx.u("/apps/titogo/ratelimit"), |
| + postForm(t, c, fx.u("/apps/shop/ratelimit"), |
| rlForm(csrf, "set", "busy_at", "", "client_share", "", "rate", "", "burst", "")) |
| - want = ratelimit.Settings{Paths: want.Paths} |
| + want = ratelimit.Settings{Paths: paths} |
| if got := rlSettingsRecord(t, fx); got.RateLimit == nil || !reflect.DeepEqual(*got.RateLimit, want) { |
| t.Fatalf("stored = %+v, want %+v", got.RateLimit, want) |
| } |
| - postForm(t, c, fx.u("/apps/titogo/ratelimit"), rlForm(csrf, "clear")) |
| + postForm(t, c, fx.u("/apps/shop/ratelimit"), rlForm(csrf, "clear")) |
| if got := rlSettingsRecord(t, fx); got.RateLimit != nil { |
| t.Fatalf("clear left %+v", got.RateLimit) |
| } |
| @@ -163,12 +174,12 @@ func TestAppSettingsRateLimitOverCeiling(t *testing.T) { |
| fx, c, csrf := rlSettingsFixture(t, "code-settings-rl-ceiling") |
| fx.srv.cfg.PlanCatalog = rlCatalog(t) |
| - status, loc, _ := postForm(t, c, fx.u("/apps/titogo/ratelimit"), |
| + status, loc, _ := postForm(t, c, fx.u("/apps/shop/ratelimit"), |
| rlForm(csrf, "set", "busy_at", "", "client_share", "", "rate", "500", "burst", "")) |
| - if status != http.StatusSeeOther || loc != fx.path("/apps/titogo/settings/domains") { |
| + if status != http.StatusSeeOther || loc != fx.path("/apps/shop/settings/domains") { |
| t.Fatalf("over-ceiling set = %d -> %q", status, loc) |
| } |
| - _, _, body := get(t, c, fx.u("/apps/titogo/settings/domains")) |
| + _, _, body := get(t, c, fx.u("/apps/shop/settings/domains")) |
| if !strings.Contains(body, "The backstop rate can be at most 400 on this account's plan.") { |
| t.Fatalf("page lacks the ceiling sentence: %s", body) |
| } |
| @@ -177,7 +188,7 @@ func TestAppSettingsRateLimitOverCeiling(t *testing.T) { |
| } |
| // At the ceiling is fine. |
| - postForm(t, c, fx.u("/apps/titogo/ratelimit"), |
| + postForm(t, c, fx.u("/apps/shop/ratelimit"), |
| rlForm(csrf, "set", "busy_at", "", "client_share", "", "rate", "400", "burst", "")) |
| if rec := rlSettingsRecord(t, fx); rec.RateLimit == nil || rec.RateLimit.Rate != 400 { |
| t.Fatalf("stored = %+v, want rate 400", rec.RateLimit) |
| @@ -186,7 +197,7 @@ func TestAppSettingsRateLimitOverCeiling(t *testing.T) { |
| func TestAppSettingsRateLimitNeedsCSRF(t *testing.T) { |
| fx, c, _ := rlSettingsFixture(t, "code-settings-rl-csrf") |
| - status, _, body := postForm(t, c, fx.u("/apps/titogo/ratelimit"), |
| + status, _, body := postForm(t, c, fx.u("/apps/shop/ratelimit"), |
| rlForm("not-the-token", "set", "rate", "500")) |
| if status != http.StatusForbidden || !strings.Contains(body, "Cross-site request blocked.") { |
| t.Fatalf("got %d %s", status, body) |
| @@ -195,3 +206,30 @@ func TestAppSettingsRateLimitNeedsCSRF(t *testing.T) { |
| t.Fatalf("a refused post stored %+v", rec.RateLimit) |
| } |
| } |
| + |
| +// The rate-limit door is not an oracle either: a signed-in browser that |
| +// belongs to no account here gets the account family's 404, byte for byte what |
| +// a nonexistent account answers, and the record is untouched. |
| +func TestAppSettingsRateLimitIsNotAnOracle(t *testing.T) { |
| + fx, _ := rateLimitFixture(t, "code-settings-rl-stranger") |
| + stranger := newBrowser(t) |
| + fx.setUser("eve@example.com") // signs up into an account of her own |
| + signUp(t, fx, stranger, "code-settings-rl-stranger-browser") |
| + csrf := sessionToken(t, fx, stranger) |
| + |
| + form := rlForm(csrf, "set", "rate", "500") |
| + ghost, _, missing := postForm(t, stranger, fx.ts.URL+"/a/zzzzz/apps/shop/ratelimit", form) |
| + if ghost != http.StatusNotFound { |
| + t.Fatalf("the yardstick is not a 404: nonexistent account = %d", ghost) |
| + } |
| + status, loc, body := postForm(t, stranger, fx.u("/apps/shop/ratelimit"), form) |
| + if status != http.StatusNotFound { |
| + t.Fatalf("rate limit POST as a non-member = %d -> %q, want 404", status, loc) |
| + } |
| + if body != missing { |
| + t.Fatalf("a non-member's 404 differs from a nonexistent account's:\n%q\nvs\n%q", body, missing) |
| + } |
| + if rec := rlSettingsRecord(t, fx); rec.RateLimit != nil { |
| + t.Fatalf("a stranger set a rate limit: %+v", rec.RateLimit) |
| + } |
| +} |
diff --git a/internal/console/templates/app_settings.html b/internal/console/templates/app_settings.html| index ae0b0539b..e2f3a8321 100644 |
| --- a/internal/console/templates/app_settings.html |
| +++ b/internal/console/templates/app_settings.html |
| @@ -167,7 +167,7 @@ page asking for it and stay signed in for a week. It is set per instance.</p> |
| </form> |
| {{if $g.Paths}} |
| <p class="small">Path rules, such as different numbers for /api/, are set with carlos ratelimit.</p> |
| - <ul class="small">{{range $g.Paths}}<li><code>{{.Prefix}}</code> {{.Numbers}}</li>{{end}}</ul> |
| + <ul class="small">{{range $g.Paths}}<li>{{.}}</li>{{end}}</ul> |
| {{end}} |
| </td> |
| </tr> |