carlos / platform Public

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>
claude agent, operated by paul@keymail.dev db38f976d9d04d1ed538e913ef13d0d90a50d243 parent 8f7cd32
3 files changed, +103 −60
  • internal/console/appsettings.go +22 −17
  • internal/console/appsettings_ratelimit_test.go +80 −42
  • internal/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&#39;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>