carlos / platform Public

harness: runbook blocks 5.0 to 6.2; guard-arm refuses on main's host-init, passes after #47's remediation (step 9)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev 094fdeda60ef6fbd5ab1e7d904e5ed479655121a parent 052cc53
21 files changed, +461 −0
  • harness/RUNLOG.md +93 −0
  • harness/infra-copies/pr47/PROVENANCE.md +7 −0
  • harness/infra-copies/pr47/probe.sh +4 −0
  • harness/infra-copies/pr47/remediation.sh +13 −0
  • harness/scenarios/cohort1/blocks/50-publish-record.sh +20 −0
  • harness/scenarios/cohort1/blocks/51-open-signer.sh +39 −0
  • harness/scenarios/cohort1/blocks/51-roster-resume.sh +28 −0
  • harness/scenarios/cohort1/blocks/51-roster.sh +54 −0
  • harness/scenarios/cohort1/blocks/61-sign.sh +38 −0
  • harness/scenarios/cohort1/blocks/61a-install-channel.box.sh +13 −0
  • harness/scenarios/cohort1/blocks/62-guard-arm.box.sh +10 −0
  • harness/scenarios/cohort1/box-helpers.sh +42 −0
  • harness/scenarios/cohort1/inputs/console-id +1 −0
  • harness/scenarios/cohort1/inputs/console.json +6 −0
  • harness/scenarios/cohort1/inputs/floor.json +1 −0
  • harness/scenarios/cohort1/inputs/leo.json +10 −0
  • harness/scenarios/cohort1/inputs/regions.json +10 −0
  • harness/scenarios/cohort1/inputs/sophie.json +10 −0
  • harness/scenarios/cohort1/signer-helpers.sh +37 −0
  • harness/scenarios/cohort1/ssm.sh +13 −0
  • harness/scenarios/cohort1/values.env +12 −0

CI failed — run details

CI log
=== gate ===
cd launchctx && go vet ./... && go test ./... -count=1
ok  	amadan.net/carlos/platform.git/launchctx	0.011s
?   	amadan.net/carlos/platform.git/launchctx/controlname	[no test files]
?   	amadan.net/carlos/platform.git/launchctx/wireid	[no test files]
go vet ./...
gofmt -l .: clean
go test ./... -count=1 -timeout 30m
ok  	github.com/carlosframework/platform	314.712s
?   	github.com/carlosframework/platform/cmd/changelog	[no test files]
ok  	github.com/carlosframework/platform/cmd/console	2.974s
ok  	github.com/carlosframework/platform/cmd/moveprobe	92.323s
ok  	github.com/carlosframework/platform/cmd/zddprobe	0.732s
ok  	github.com/carlosframework/platform/internal/activator	252.015s
ok  	github.com/carlosframework/platform/internal/agentsock	0.026s
ok  	github.com/carlosframework/platform/internal/alerting	0.006s
ok  	github.com/carlosframework/platform/internal/analytics	0.027s
ok  	github.com/carlosframework/platform/internal/appconfig	2.537s
ok  	github.com/carlosframework/platform/internal/apperr	0.088s
ok  	github.com/carlosframework/platform/internal/applog	0.197s
ok  	github.com/carlosframework/platform/internal/awsinv	0.007s
ok  	github.com/carlosframework/platform/internal/boxchoice	0.004s
ok  	github.com/carlosframework/platform/internal/boxid	0.836s
?   	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.016s
ok  	github.com/carlosframework/platform/internal/caps	0.013s
ok  	github.com/carlosframework/platform/internal/certwarm	0.006s
ok  	github.com/carlosframework/platform/internal/cgroup	0.706s
ok  	github.com/carlosframework/platform/internal/changelog	0.338s
ok  	github.com/carlosframework/platform/internal/claimactivation	0.876s
ok  	github.com/carlosframework/platform/internal/clamd	0.061s
?   	github.com/carlosframework/platform/internal/cliflag	[no test files]
ok  	github.com/carlosframework/platform/internal/console	407.999s
?   	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	6.221s
ok  	github.com/carlosframework/platform/internal/dbdoor/dbdoortest	0.010s
ok  	github.com/carlosframework/platform/internal/dbverify	0.007s
ok  	github.com/carlosframework/platform/internal/dnsrec	0.006s
ok  	github.com/carlosframework/platform/internal/docsite	0.005s
ok  	github.com/carlosframework/platform/internal/domains	2.428s
ok  	github.com/carlosframework/platform/internal/doorkey	0.007s
ok  	github.com/carlosframework/platform/internal/economics	0.005s
ok  	github.com/carlosframework/platform/internal/edge	44.984s
?   	github.com/carlosframework/platform/internal/edgeproof	[no test files]
ok  	github.com/carlosframework/platform/internal/edgesfile	0.011s
ok  	github.com/carlosframework/platform/internal/fleetapi	0.142s
ok  	github.com/carlosframework/platform/internal/gate	1.682s
ok  	github.com/carlosframework/platform/internal/genselect	0.028s
ok  	github.com/carlosframework/platform/internal/geo	0.038s
ok  	github.com/carlosframework/platform/internal/geoip	0.045s
ok  	github.com/carlosframework/platform/internal/historyreadback	0.170s
ok  	github.com/carlosframework/platform/internal/host	183.268s
ok  	github.com/carlosframework/platform/internal/hostactors	5.502s
ok  	github.com/carlosframework/platform/internal/hostactors/awsmembership	0.005s
ok  	github.com/carlosframework/platform/internal/hostbox	2.678s
ok  	github.com/carlosframework/platform/internal/hostclaim	0.581s
ok  	github.com/carlosframework/platform/internal/hostenv	0.004s
ok  	github.com/carlosframework/platform/internal/hostevidence	0.005s
ok  	github.com/carlosframework/platform/internal/hostexec	4.823s
ok  	github.com/carlosframework/platform/internal/hostfence	0.031s
ok  	github.com/carlosframework/platform/internal/hostfiles	10.374s
ok  	github.com/carlosframework/platform/internal/hostfloor	0.014s
ok  	github.com/carlosframework/platform/internal/hostguard	1.044s
ok  	github.com/carlosframework/platform/internal/hostops	1.674s
?   	github.com/carlosframework/platform/internal/hostops/fencerelease	[no test files]
ok  	github.com/carlosframework/platform/internal/hostops/internal/fencerelease	0.003s
ok  	github.com/carlosframework/platform/internal/hostquarantine	0.002s
ok  	github.com/carlosframework/platform/internal/hostrelocate	0.472s
ok  	github.com/carlosframework/platform/internal/hostresolve	0.133s
ok  	github.com/carlosframework/platform/internal/hostwrite	0.002s
ok  	github.com/carlosframework/platform/internal/infraview	0.008s
ok  	github.com/carlosframework/platform/internal/instancectl	5.211s
ok  	github.com/carlosframework/platform/internal/instanceexec	2.726s
ok  	github.com/carlosframework/platform/internal/instancefs	0.005s
ok  	github.com/carlosframework/platform/internal/instancekey	0.002s
ok  	github.com/carlosframework/platform/internal/instanceupdates	0.007s
ok  	github.com/carlosframework/platform/internal/layout	1.551s
ok  	github.com/carlosframework/platform/internal/lbhealth	0.005s
ok  	github.com/carlosframework/platform/internal/lease	9.797s
ok  	github.com/carlosframework/platform/internal/lease/leasetest	0.005s
ok  	github.com/carlosframework/platform/internal/ledger	0.013s
ok  	github.com/carlosframework/platform/internal/mail	0.173s
ok  	github.com/carlosframework/platform/internal/maintenance	0.076s
ok  	github.com/carlosframework/platform/internal/maintenanceexec	5.533s
ok  	github.com/carlosframework/platform/internal/maintenanceguard	0.069s
ok  	github.com/carlosframework/platform/internal/metrics	0.005s
ok  	github.com/carlosframework/platform/internal/moves	20.893s
ok  	github.com/carlosframework/platform/internal/moves/archive	0.805s
ok  	github.com/carlosframework/platform/internal/objstore	0.190s
ok  	github.com/carlosframework/platform/internal/ops	0.166s
ok  	github.com/carlosframework/platform/internal/park	0.212s
ok  	github.com/carlosframework/platform/internal/privatefile	0.004s
2026/10/20 01:36:29 provision: listing apps/bab/blog/instances/: list refused — its records are unseen this pass
2026/10/20 01:36:29 provision: listing apps/bab/: listdirs refused — its records are unseen this pass
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/20 01:36:29 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/20 01:36:29 provision: skipping record apps/bac/tito/instances/one.example.com.json: unreadable: read refused
2026/10/20 01:36:29 provision: listing apps/bac/tito/instances/: list refused — its records are unseen this pass
2026/10/20 01:36:29 provision: an app's records could not be listed: they are skipped
2026/10/20 01:36:29 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:29 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/20 01:36:29 provision: remove retired instance route shop.example: provision: claim admission unavailable
2026/10/20 01:36:29 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/20 01:36:29 provision: remove retired sidecar route worker.sidecar.internal: provision: claim admission unavailable
2026/10/20 01:36:29 provision: claim install acme.go.tito.io: provision: claim admission unavailable
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/20 01:36:29 provision: claim install bot.eleven.bac.sidecar.internal: provision: claim admission unavailable
2026/10/20 01:36:29 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/20 01:36:29 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/20 01:36:29 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/20 01:36:29 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: no sealed config
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 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/20 01:36:29 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/20 01:36:29 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/20 01:36:29 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/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 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/20 01:36:29 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/20 01:36:29 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: claim install acme.go.tito.io: registry: claim row ownership changed or unknown
2026/10/20 01:36:29 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/20 01:36:29 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["run"])
2026/10/20 01:36:29 provision: claim install bot.eleven.bac.sidecar.internal: registry: claim row ownership changed or unknown
2026/10/20 01:36:29 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:36:29 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/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:29 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:36:29 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:36:29 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:36:29 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:36:29 provision: skipping record apps/bac/tito/instances/new.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:36:29 provision: minted instance route rk.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route rf.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route ri.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route rl.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route rg.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route rh.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route rj.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route rb.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route rc.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route rd.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route ra.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/20 01:36:29 provision: skipping record apps/bac/tito/instances/rb.go.tito.io.json: read failed: read refused
2026/10/20 01:36:29 provision: minted instance route re.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route x.appb.example (app "appb" acct "bac")
2026/10/20 01:36:29 provision: minted instance route x.appc.example (app "appc" acct "bac")
2026/10/20 01:36:29 provision: minted instance route x.appd.example (app "appd" acct "bac")
2026/10/20 01:36:29 provision: minted instance route x.apph.example (app "apph" acct "bac")
2026/10/20 01:36:29 provision: minted instance route x.appj.example (app "appj" acct "bac")
2026/10/20 01:36:29 provision: minted instance route x.appa.example (app "appa" acct "bac")
2026/10/20 01:36:29 provision: minted instance route x.appe.example (app "appe" acct "bac")
2026/10/20 01:36:29 provision: minted instance route x.appf.example (app "appf" acct "bac")
2026/10/20 01:36:29 provision: minted instance route x.appg.example (app "appg" acct "bac")
2026/10/20 01:36:29 provision: minted instance route x.appi.example (app "appi" acct "bac")
2026/10/20 01:36:29 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:36:29 provision: minted instance route r0027.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0028.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0101.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0112.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0113.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0004.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0088.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0104.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0049.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0123.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0053.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0096.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0102.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0109.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0121.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0126.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0011.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0057.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0084.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0124.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0010.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0071.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0083.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0021.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0086.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0032.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0042.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0079.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0039.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0077.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0091.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0100.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0055.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0005.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0006.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0017.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0035.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0026.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0037.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0046.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0050.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0070.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0076.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0105.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0066.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0067.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0108.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0007.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0073.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0003.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0014.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0062.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0080.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0085.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0092.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0012.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0043.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0122.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0129.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0036.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0048.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0090.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0024.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0107.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0114.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0052.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0009.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0038.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0060.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0013.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0016.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0030.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0051.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0022.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0047.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0058.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0059.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0061.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0098.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0031.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0040.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0087.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0095.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0103.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0025.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0029.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0034.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0045.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0054.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0072.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0074.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0075.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0015.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0033.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0068.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0089.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0093.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0106.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0094.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0099.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0041.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0056.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0064.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0110.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0019.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0065.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0069.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0116.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0119.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0001.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0097.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0023.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0044.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0117.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0128.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0081.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0082.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0118.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0127.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0002.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0008.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0111.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0120.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0125.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0018.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0020.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0000.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0063.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0078.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:29 provision: minted instance route r0115.go.tito.io (app "tito" acct "bac")
--- FAIL: TestPlan14RootReadCensus (4.67s)
    plan14_root_reads_test.go:940: root read census: 62 discrepancies
        changed root read internal/hostfence/writer.go:OpenRootFenceStore; review class, task, sites and digest
        changed root source envelope harness
        changed root source envelope harness/boxes
        changed root source envelope harness/boxes/shims
        changed root source envelope harness/checks
        changed root source envelope harness/console
        changed root source envelope harness/infra
        changed root source envelope harness/infra-copies/747f699/dev
        changed root source envelope harness/infra-copies/a0b3f5a/dev
        changed root source envelope harness/infra-copies/a0b3f5a/scripts
        changed root source envelope harness/infra-copies/pr47
        changed root source envelope harness/operator
        changed root source envelope harness/release
        changed root source envelope harness/scenarios/cohort1
        changed root source envelope harness/scenarios/cohort1/blocks
        changed root source envelope internal/host
        changed root source envelope internal/hostfence
        changed root source envelope internal/publicrelease
        changed root source envelope internal/s3compat
        unclassified root read harness/boxes/boxes-up.sh:external file:external@0
        unclassified root read harness/boxes/layout-probe.sh:external file:external@0
        unclassified root read harness/boxes/shims/systemd-zram-setup@.service:external file:external@0
        unclassified root read harness/checks/check2.sh:external file:external@0
        unclassified root read harness/checks/check5.sh:external file:external@0
        unclassified root read harness/checks/check6.sh:external file:external@0
        unclassified root read harness/checks/check6b.sh:external file:external@0
        unclassified root read harness/checks/check7.sh:external file:external@0
        unclassified root read harness/checks/check8.sh:external file:external@0
        unclassified root read harness/checks/fix5.sh:external file:external@0
        unclassified root read harness/checks/run6b.sh:external file:external@0
        unclassified root read harness/checks/snap-base.sh:external file:external@0
        unclassified root read harness/checks/snap-boot.sh:external file:external@0
        unclassified root read harness/checks/ssmsmoke.sh:external file:external@0
        unclassified root read harness/console/console-setup.sh:external file:external@0
        unclassified root read harness/console/signin.sh:external file:external@0
        unclassified root read harness/console/system-update.sh:external file:external@0
        unclassified root read harness/donor-user-data.sh:external file:external@0
        unclassified root read harness/host-setup.sh:external file:external@0
        unclassified root read harness/host-user-data.sh:external file:external@0
        unclassified root read harness/infra-copies/747f699/dev/host-init.sh:external file:external@0
        unclassified root read harness/infra-copies/a0b3f5a/dev/host-init.sh:external file:external@0
        unclassified root read harness/infra-copies/a0b3f5a/scripts/bootstrap-box.sh:external file:external@0
        unclassified root read harness/infra-copies/a0b3f5a/scripts/ship-app.sh:external file:external@0
        unclassified root read harness/infra-copies/a0b3f5a/scripts/update-platform-binary.sh:external file:external@0
        unclassified root read harness/infra-copies/pr47/probe.sh:external file:external@0
        unclassified root read harness/infra-copies/pr47/remediation.sh:external file:external@0
        unclassified root read harness/infra/infra-setup.sh:external file:external@0
        unclassified root read harness/operator/operator-setup.sh:external file:external@0
        unclassified root read harness/release/release-setup.sh:external file:external@0
        unclassified root read harness/release/step7-operator.sh:external file:external@0
        unclassified root read harness/scenarios/cohort1/blocks/50-publish-record.sh:external file:external@0
        unclassified root read harness/scenarios/cohort1/blocks/51-open-signer.sh:external file:external@0
        unclassified root read harness/scenarios/cohort1/blocks/51-roster-resume.sh:external file:external@0
        unclassified root read harness/scenarios/cohort1/blocks/51-roster.sh:external file:external@0
        unclassified root read harness/scenarios/cohort1/blocks/61-sign.sh:external file:external@0
        unclassified root read harness/scenarios/cohort1/blocks/61a-install-channel.box.sh:external file:external@0
        unclassified root read harness/scenarios/cohort1/blocks/62-guard-arm.box.sh:external file:external@0
        unclassified root read harness/scenarios/cohort1/box-helpers.sh:external file:external@0
        unclassified root read harness/scenarios/cohort1/signer-helpers.sh:external file:external@0
        unclassified root read harness/scenarios/cohort1/ssm.sh:external file:external@0
        unclassified root read internal/s3compat/harness.go:readHarnessFile file:ReadFile@189,file:Stat@55
        changed reclassified declaration internal/hostfence/writer.go:OpenRootFenceStore
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 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/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route console.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted service route svc.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route whole.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route shared.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: converged acme.go.tito.io channel stable -> edge
2026/10/20 01:36:41 provision: converged acme.go.tito.io channel edge -> canary/rehearsal
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: empty channel
2026/10/20 01:36:41 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: converged acme.go.tito.io environment "" -> "staging"
2026/10/20 01:36:41 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: converged acme.go.tito.io steering "" -> "latency"
2026/10/20 01:36:41 provision: converged acme.go.tito.io steering "latency" -> ""
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: converged acme.go.tito.io hibernate false -> true
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: converged acme.go.tito.io hibernate true -> false (replication "daily" cleared: only a hibernating route's rung is read)
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: converged acme.go.tito.io status-named false -> true
2026/10/20 01:36:41 provision: converged acme.go.tito.io status-named true -> false
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 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/20 01:36:41 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/20 01:36:41 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/20 01:36:41 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 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/20 01:36:41 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/20 01:36:41 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/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: skipping accounts/bac/account.json: malformed account manifest: invalid character 'o' in literal null (expecting 'u')
2026/10/20 01:36:41 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: manifest bac/tito: read failed: provision: manifest bac/tito: invalid character 'o' in literal null (expecting 'u')
2026/10/20 01:36:41 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/20 01:36:41 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/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 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/20 01:36:41 provision: not removing acme$evil.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:36:41 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/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 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/20 01:36:41 provision: not removing bad-service.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:36:41 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/20 01:36:41 provision: not removing no-channel.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:36:41 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/20 01:36:41 provision: removed retired instance route ghost.go.tito.io (record gone)
2026/10/20 01:36:41 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/20 01:36:41 provision: minted instance route dup.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:36:41 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:36:41 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/20 01:36:41 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:41 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:36:41 provision: removed retired static route site.go.tito.io (app in the trash)
2026/10/20 01:36:41 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/20 01:36:41 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:36:41 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/20 01:36:41 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/20 01:36:41 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/20 01:36:41 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:36:41 provision: converged acme.go.tito.io channel stable -> edge
2026/10/20 01:36:41 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:36:41 provision: converged acme.go.tito.io channel canary/rehearsal -> edge
2026/10/20 01:36:41 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/20 01:36:41 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/20 01:36:41 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/20 01:36:41 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/20 01:36:41 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/20 01:36:41 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/20 01:36:42 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/20 01:36:42 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/20 01:36:42 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:36:42 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/20 01:36:42 provision: dry-run: would mint instance route acme.go.tito.io (app "tito" acct "bac" channel "stable")
2026/10/20 01:36:42 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/20 01:36:42 provision: dry-run: would converge adopt.go.tito.io channel stable -> edge
2026/10/20 01:36:42 provision: dry-run: would converge adopt.go.tito.io environment "" -> "staging"
2026/10/20 01:36:42 provision: dry-run: would converge owned.go.tito.io channel stable -> edge
2026/10/20 01:36:42 provision: dry-run: would converge owned.go.tito.io environment "" -> "staging"
2026/10/20 01:36:42 provision: dry-run: would converge owned.go.tito.io hibernate false -> true
2026/10/20 01:36:42 provision: dry-run: would converge owned.go.tito.io seed
2026/10/20 01:36:42 provision: dry-run: would remove retired instance route gone.go.tito.io (record gone)
2026/10/20 01:36:42 provision: adopted existing route adopt.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:36:42 provision: converged adopt.go.tito.io channel stable -> edge
2026/10/20 01:36:42 provision: converged adopt.go.tito.io environment "" -> "staging"
2026/10/20 01:36:42 provision: converged owned.go.tito.io channel stable -> edge
2026/10/20 01:36:42 provision: converged owned.go.tito.io environment "" -> "staging"
2026/10/20 01:36:42 provision: converged owned.go.tito.io hibernate false -> true
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: removed retired instance route gone.go.tito.io (record gone)
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: adopted existing route story.carlosframework.com (app "story" acct "bad") — this record now owns its channel and environment
2026/10/20 01:36:42 provision: story.carlosframework.com exists but is not the route this record describes (kind "instance"/"static") — leaving it alone
2026/10/20 01:36:42 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted service route pub.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted service route pubs.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route exec.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted service route loop.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted service route named.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted service route priv.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route unit.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted static route pisite.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: removed retired static route site.go.tito.io (record gone)
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: converged acme.go.tito.io replicas "ie,uk" -> "uk"
2026/10/20 01:36:42 provision: converged acme.go.tito.io replicas "uk" -> ""
2026/10/20 01:36:42 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: converged acme-uk.go.tito.io replica mark true -> false
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 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/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:42 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/20 01:36:42 provision: router.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/20 01:36:42 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/20 01:36:42 provision: converged acme.go.tito.io channel stable -> edge
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/20 01:36:42 provision: not removing acme.go.tito.io (record gone): participant of a running operation
2026/10/20 01:36:42 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/20 01:36:42 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/20 01:36:42 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/20 01:36:42 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/20 01:36:42 provision: acme.go.tito.io: held restoring by rb_other, not by mv_acme; leaving it
2026/10/20 01:36:42 provision: acme.go.tito.io: the row is not this pass's (app "other" acct ""); not holding it for mv_acme
2026/10/20 01:36:42 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/20 01:36:42 provision: dry-run: would mint instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac" channel "stable")
2026/10/20 01:36:42 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/20 01:36:42 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/20 01:36:42 provision: minted instance route acme.example.com (app "shop" acct "bac")
2026/10/20 01:36:42 provision: minted instance route plain.example.com (app "shop" acct "bac")
2026/10/20 01:36:42 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:36:42 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/20 01:36:42 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:36:42 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/20 01:36:42 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:36:42 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/20 01:36:42 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:36:42 provision: listing apps/bac/shop/instances/: list refused — its records are unseen this pass
2026/10/20 01:36:43 provision: a.shop.example.com: swapped for import sd_scz2gltgkic6224fhdhxalh3k4 (the original route is journaled)
2026/10/20 01:36:43 provision: a.shop.example.com: import sd_scz2gltgkic6224fhdhxalh3k4 committed: its gate is cleared and its journal row dropped
2026/10/20 01:36:43 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/20 01:36:43 provision: a.shop.example.com: import sd_rjekru6celspb5435tneplnf5y rolled back to its original route
2026/10/20 01:36:43 provision: a.shop.example.com: import sd_rjekru6celspb5435tneplnf5y: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/20 01:36:43 provision: a.shop.example.com: import sd_rjekru6celspb5435tneplnf5y is cleaned up and its journal row retired
2026/10/20 01:36:43 provision: a.shop.example.com: import sd_jepvdc2h7jxkgqjqyes6mhbr2a rolled back to its original route
2026/10/20 01:36:43 provision: a.shop.example.com: import sd_jepvdc2h7jxkgqjqyes6mhbr2a: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/20 01:36:43 provision: a.shop.example.com: import sd_jepvdc2h7jxkgqjqyes6mhbr2a is cleaned up and its journal row retired
2026/10/20 01:36:43 provision: dry-run: would redo a.shop.example.com's swap record CAS for import sd_olnqln747j7r3johjuuthc5sbm
2026/10/20 01:36:43 provision: dry-run: would clear a.shop.example.com's import gate
2026/10/20 01:36:43 provision: dry-run: would converge a.shop.example.com seed source
2026/10/20 01:36:43 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/20 01:36:43 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/20 01:36:43 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/20 01:36:43 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/20 01:36:43 provision: a.shop.example.com: import sd_uqhf7vbhrhtjdzneqijvdxxes4 cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/20 01:36:43 provision: a.shop.example.com: import sd_a7kipmj7d4dt2svq5w5vbc4dcu cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/20 01:36:43 provision: a.shop.example.com: import sd_f2kmivmihujxx2is6gf6jdgwr4 is journaled, but this box cannot act on imports; its row is left alone
2026/10/20 01:36:43 provision: a.shop.example.com: import sd_klnnjz2vjtpawyk4jsn72de42a is journaled, but this box cannot act on imports; its row is left alone
2026/10/20 01:36:43 provision: a.shop.example.com: import sd_wiz4dzrgoyewvoxekgubmjcyhm is journaled, but this box cannot act on imports; its row is left alone
2026/10/20 01:36:43 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/20 01:36:43 provision: b.shop.example.com: import sd_v5cjwgq542gkblvhvcihqdtkai left alone this pass: the import journal could not be read
2026/10/20 01:36:43 provision: c.shop.example.com: import sd_np74ejde3b3z2efmllct546uqe left alone this pass: the import journal could not be read
2026/10/20 01:36:43 provision: a.shop.example.com: import sd_o67skgvdlk7xcua52quustd4ja committed: its gate is cleared and its journal row dropped
2026/10/20 01:36:43 provision: a.shop.example.com: not converging import sd_66h2mjrdutduwwxdxlf3wcm3zm: it is swapped but not committed, and the row on this box has no import gate
2026/10/20 01:36:43 provision: a.shop.example.com: not converging import sd_tk6rumvwbwyi4xjkzlv6o4abui: it is swapped but not committed, and the row on this box has no import gate
2026/10/20 01:36:43 provision: a.shop.example.com: not converging import sd_ls6m2f7lenkuzig3p4bh2c4c64: it is placed but not committed, and the row on this box has no import gate
2026/10/20 01:36:43 provision: a.shop.example.com: not converging import sd_z54xthco6vmo3jxkhn57ttlw5y: it is placed but not committed, and the row on this box has no import gate
2026/10/20 01:36:43 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/20 01:36:43 provision: converge seed source on a.shop.example.com: constraint failed: seed_source is read-only here (1811)
2026/10/20 01:36:43 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/20 01:36:43 provision: a.shop.example.com: import sd_4p2f44bbyyzi4jzfy4px5q4gvi committed: its gate is cleared and its journal row dropped
2026/10/20 01:36:43 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/20 01:36:43 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:43 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/20 01:36:43 provision: acme.go.tito.io: not minting a seeded instance: this box does not mint nested (<nil>)
2026/10/20 01:36:43 provision: acme.go.tito.io: not minting a seeded instance: claim control is on for this box
2026/10/20 01:36:43 provision: acme.go.tito.io: aborted seed sd_v5jjhlptdjicahiqfycwz3cozu: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/20 01:36:43 provision: acme.go.tito.io: aborted seed sd_v5jjhlptdjicahiqfycwz3cozu rolled back (no box had swapped it)
2026/10/20 01:36:43 provision: acme.go.tito.io: not minting a seeded instance: its record does not describe a hibernating instance
2026/10/20 01:36:43 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:43 provision: removed instance route acme.go.tito.io (its seed sd_rc77t6hc5qwfwwmh5cb5xv5xby was aborted); the next pass rolls it back
2026/10/20 01:36:43 provision: acme.go.tito.io: aborted seed sd_rc77t6hc5qwfwwmh5cb5xv5xby: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/20 01:36:43 provision: acme.go.tito.io: aborted seed sd_rc77t6hc5qwfwwmh5cb5xv5xby rolled back (no box had swapped it)
2026/10/20 01:36:43 provision: acme.go.tito.io: aborted seed sd_y3en2p5fkmgah6i7flqqbdwqjm has a row this pass may not remove; leaving the seed aborted
2026/10/20 01:36:44 provision: acme.go.tito.io: aborted seed sd_qvjpposib35vaq4v3dl6k7hr7e rolled back (no box had swapped it)
2026/10/20 01:36:44 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:44 provision: removed instance route acme.go.tito.io (its seed sd_eywi4c4iudiokni4a2kt3bzp3i was aborted); the next pass rolls it back
2026/10/20 01:36:44 provision: acme.go.tito.io: aborted seed sd_eywi4c4iudiokni4a2kt3bzp3i has no route on this box: its local data is removed
2026/10/20 01:36:44 provision: acme.go.tito.io: aborted seed sd_eywi4c4iudiokni4a2kt3bzp3i rolled back (no box had swapped it)
2026/10/20 01:36:44 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_53ryeqcpwvhzsjf43cp4edwlgq (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_53ryeqcpwvhzsjf43cp4edwlgq rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_53ryeqcpwvhzsjf43cp4edwlgq is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_cgk6q34a3ngp4yp445qnoenhxq (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_cgk6q34a3ngp4yp445qnoenhxq rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_cgk6q34a3ngp4yp445qnoenhxq is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_rvcaykcau35qw6rrm4sihcmu2y (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_rvcaykcau35qw6rrm4sihcmu2y rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_rvcaykcau35qw6rrm4sihcmu2y: the host's replica is left alone: its record no longer names this seed
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_rvcaykcau35qw6rrm4sihcmu2y is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_ezcfmxzhxbuztpiny2esf27q6u (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_ezcfmxzhxbuztpiny2esf27q6u rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_ezcfmxzhxbuztpiny2esf27q6u rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_ezcfmxzhxbuztpiny2esf27q6u is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_ene6xg2xdliao4jxgvrzpbcm5a (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_ene6xg2xdliao4jxgvrzpbcm5a rollback deferred: the host is not fenced and stopped yet (stop unproven)
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_2z5k7rhhe34set3wudcupb23mu (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_2z5k7rhhe34set3wudcupb23mu is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_qat6o33drhbisynafmk3yev7fu (the original route is journaled)
2026/10/20 01:36:44 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_qat6o33drhbisynafmk3yev7fu left alone this pass: its record could not be read
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_3qzfc2ywbteadz4737mamg4e34 (the original route is journaled)
2026/10/20 01:36:44 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: read failed: connection reset
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_3qzfc2ywbteadz4737mamg4e34 left alone this pass: its record could not be read
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_7glznekudsmfiqqhjadfjq57ga (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_7glznekudsmfiqqhjadfjq57ga: close the import gate: constraint failed: injected (1811)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_7glznekudsmfiqqhjadfjq57ga rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_7glznekudsmfiqqhjadfjq57ga is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_2s4loi5xr22y44olhwjdzxz4ua (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_2s4loi5xr22y44olhwjdzxz4ua: close the import gate: constraint failed: injected (1811)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_2s4loi5xr22y44olhwjdzxz4ua rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_2s4loi5xr22y44olhwjdzxz4ua is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_6pmv7mu3lvs3gjalovbbuc22ru (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_6pmv7mu3lvs3gjalovbbuc22ru rollback deferred: the host is not fenced and stopped yet (injected failure at fence)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_6pmv7mu3lvs3gjalovbbuc22ru rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_6pmv7mu3lvs3gjalovbbuc22ru is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_3ugu6fqq3bmv4mctjtpyomcdaa (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_3ugu6fqq3bmv4mctjtpyomcdaa rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_3ugu6fqq3bmv4mctjtpyomcdaa is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_4izenqezzs54zdpuq6llzxggma (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_4izenqezzs54zdpuq6llzxggma: retire its instance key: injected failure at retire-key
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_4izenqezzs54zdpuq6llzxggma rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_4izenqezzs54zdpuq6llzxggma is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_k6isbaa45shvrnkc57q2hk2xb4 (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_k6isbaa45shvrnkc57q2hk2xb4 rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_k6isbaa45shvrnkc57q2hk2xb4 is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_xx4ylfwatlj66ksjqqwf4jusqa (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_xx4ylfwatlj66ksjqqwf4jusqa: remove its local data: injected failure at remove-local
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_xx4ylfwatlj66ksjqqwf4jusqa rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_xx4ylfwatlj66ksjqqwf4jusqa is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_2srzfsap4y4ot34o6x7eqmskmy (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_2srzfsap4y4ot34o6x7eqmskmy rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_2srzfsap4y4ot34o6x7eqmskmy is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_5ral7aug42ehgtq4qa64fon2l4 (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_5ral7aug42ehgtq4qa64fon2l4: remove its local data: injected failure at remove-local-done
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_5ral7aug42ehgtq4qa64fon2l4 rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_5ral7aug42ehgtq4qa64fon2l4 is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_araegm6vq56firlpjvbxxzwj7m (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_araegm6vq56firlpjvbxxzwj7m rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_araegm6vq56firlpjvbxxzwj7m is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_gagmw3thop76e7xxqo326ufj7y (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_gagmw3thop76e7xxqo326ufj7y: restore the original route: constraint failed: injected (1811)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_gagmw3thop76e7xxqo326ufj7y rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_gagmw3thop76e7xxqo326ufj7y is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_dcmvxytcvqchswzmjxihjmdini (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_dcmvxytcvqchswzmjxihjmdini: restore the original route: constraint failed: injected (1811)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_dcmvxytcvqchswzmjxihjmdini rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_dcmvxytcvqchswzmjxihjmdini is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_goasxq2kucnoupps6i4bbg7oxi (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_goasxq2kucnoupps6i4bbg7oxi is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_ajhjd5ilqt7m75yqz2yjb6j5dq (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_ajhjd5ilqt7m75yqz2yjb6j5dq rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_ajhjd5ilqt7m75yqz2yjb6j5dq: delete its snapshot: injected failure at delete-snapshot
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_ajhjd5ilqt7m75yqz2yjb6j5dq is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_5ii74cmwbmyvytkt4ak2pxi26e (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_5ii74cmwbmyvytkt4ak2pxi26e rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_5ii74cmwbmyvytkt4ak2pxi26e is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_wrtpc2qvheyjtaiymzrmkcjyh4 (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_wrtpc2qvheyjtaiymzrmkcjyh4 rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_wrtpc2qvheyjtaiymzrmkcjyh4: delete the host's replica: injected failure at delete-replica
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_wrtpc2qvheyjtaiymzrmkcjyh4 is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_ith5wrybuiklxvledndtakwrgi (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_ith5wrybuiklxvledndtakwrgi rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_ith5wrybuiklxvledndtakwrgi is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_pegqalcmvs3smnnzficfkcpas4 (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_pegqalcmvs3smnnzficfkcpas4 rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_pegqalcmvs3smnnzficfkcpas4: retire its journal row: constraint failed: injected (1811)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_pegqalcmvs3smnnzficfkcpas4 is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_y3e4ofjzhb25qthhboh3v7ndkq (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_y3e4ofjzhb25qthhboh3v7ndkq rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_y3e4ofjzhb25qthhboh3v7ndkq: retire its journal row: constraint failed: injected (1811)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_y3e4ofjzhb25qthhboh3v7ndkq is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_f6jxz7kkc62x5afmysdaxe3jay (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_f6jxz7kkc62x5afmysdaxe3jay rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_f6jxz7kkc62x5afmysdaxe3jay is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: mark import sd_f6jxz7kkc62x5afmysdaxe3jay rolled back: injected failure at cas
2026/10/20 01:36:44 provision: a.shop.example.com: aborted seed sd_f6jxz7kkc62x5afmysdaxe3jay rolled back (no box had swapped it)
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_xo2liy3z2zk3lvifoa6o5vatt4 (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_xo2liy3z2zk3lvifoa6o5vatt4 rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_xo2liy3z2zk3lvifoa6o5vatt4 is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: aborted seed sd_xo2liy3z2zk3lvifoa6o5vatt4 rolled back (no box had swapped it)
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_s2rnprghd4ufly2xgqequrctlm (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_s2rnprghd4ufly2xgqequrctlm rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_s2rnprghd4ufly2xgqequrctlm rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_s2rnprghd4ufly2xgqequrctlm rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_s2rnprghd4ufly2xgqequrctlm is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_tlimdwfpy4avazyw7umyotejji (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_tlimdwfpy4avazyw7umyotejji rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_tlimdwfpy4avazyw7umyotejji is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_irix4xvieqgr6fkn2nxiqtdswq (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_irix4xvieqgr6fkn2nxiqtdswq rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_irix4xvieqgr6fkn2nxiqtdswq is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_jtukmpa74ca4opqlpsd42ojn4a (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_jtukmpa74ca4opqlpsd42ojn4a rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_jtukmpa74ca4opqlpsd42ojn4a is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_4lly3bbvq6o73qfkmgcohrwazm (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_4lly3bbvq6o73qfkmgcohrwazm rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_4lly3bbvq6o73qfkmgcohrwazm is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_mkuoo4ea3smldhy7n5fwpk4oma (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_mkuoo4ea3smldhy7n5fwpk4oma rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_mkuoo4ea3smldhy7n5fwpk4oma is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_pzpezdn3lflow57vhc4jtbiiji (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_pzpezdn3lflow57vhc4jtbiiji rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_pzpezdn3lflow57vhc4jtbiiji is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_rbvam7u2d5hsn6bciipmxy24l4 (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_rbvam7u2d5hsn6bciipmxy24l4 rolled back to its original route
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_rbvam7u2d5hsn6bciipmxy24l4 is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_g7dyz2ned63brg4wx2wfnec5vi (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_g7dyz2ned63brg4wx2wfnec5vi has no route on this box: its local data is removed and no route is put back
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_g7dyz2ned63brg4wx2wfnec5vi is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_rrqyr5uqwmkbn5advvh2q63byu (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_sqx3jxjqrn2nqxglvnnxqewxau (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_lsaebs23d2b5pszvja3cxtlfju (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_lsaebs23d2b5pszvja3cxtlfju cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_b43paumnsfahilnywygrzuiqyi (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: import sd_b43paumnsfahilnywygrzuiqyi is not rolled back: the route changed under the fence, so nothing there is touched
2026/10/20 01:36:44 provision: a.shop.example.com: import "../not-a-seed" names no snapshot and no replica; only its journal row is cleaned up
2026/10/20 01:36:44 provision: a.shop.example.com: import ../not-a-seed is cleaned up and its journal row retired
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_rmtz3pp2ugamaqxk2zvy7z33fq (the original route is journaled)
2026/10/20 01:36:44 provision: a.shop.example.com: swapped for import sd_enh5r5zhvtcfd7f4itfta2eskq (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_xviebc5cjijuewbd3ogxyyotva (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_wp45n6jzn5gfxtqqrprikdnicm (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_vxanj7w74dpmzmdxzfuggkeoha (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_vxanj7w74dpmzmdxzfuggkeoha rollback deferred: the host is not fenced and stopped yet (stop evidence unreadable)
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_tssyq4sr5l5vliqvkipwntk3fy (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_tssyq4sr5l5vliqvkipwntk3fy has no route on this box: its local data is removed and no route is put back
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_tssyq4sr5l5vliqvkipwntk3fy is cleaned up and its journal row retired
2026/10/20 01:36:45 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_65omn4ykyy54qolg5pjmhk7yce (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_65omn4ykyy54qolg5pjmhk7yce: remove its local data: injected failure at remove-local
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_65omn4ykyy54qolg5pjmhk7yce is not rolled back: the route at the host is not the import's, so nothing there is touched
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_fl2oedroz5ky253x54uzgo4hwy (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_fl2oedroz5ky253x54uzgo4hwy: a route appeared at the host, so its local database is left and the rollback waits
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_errpz6eb5pdtmkoozgib23ucpy (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_errpz6eb5pdtmkoozgib23ucpy rollback deferred: no fence generation: registry busy
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_f6n4tjzal2hvspcy3sywvhl5rq (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_f6n4tjzal2hvspcy3sywvhl5rq rollback deferred: no fence generation: the generation source answered 0
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_nmvkp423i6eqgf4ck4nzzwhtoq (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_j56gviyplnuppho3ziw7h5ui24 (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_32nkh2p25flmablkmjo7ga3dgq (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import deferred: this box cannot read the instance's env file
2026/10/20 01:36:45 provision: a.shop.example.com: import deferred: the instance's env file could not be read: a symlink
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_selowu3n3x7yoxxkfsp4owf6qu (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_selowu3n3x7yoxxkfsp4owf6qu rolled back to its original route
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_selowu3n3x7yoxxkfsp4owf6qu is cleaned up and its journal row retired
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_7meh26q3rqlqs3obfsmx6yhpai (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_7meh26q3rqlqs3obfsmx6yhpai rolled back to its original route
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_7meh26q3rqlqs3obfsmx6yhpai is cleaned up and its journal row retired
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_do7yyrpbvraz4fqtjle6layxxa (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_do7yyrpbvraz4fqtjle6layxxa rolled back to its original route
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_do7yyrpbvraz4fqtjle6layxxa is cleaned up and its journal row retired
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_z3hxfufvqojmr3l7wjylpv5exe (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_z3hxfufvqojmr3l7wjylpv5exe: retire its instance key: the env file is a symlink
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_z3hxfufvqojmr3l7wjylpv5exe rolled back to its original route
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_z3hxfufvqojmr3l7wjylpv5exe is cleaned up and its journal row retired
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_zxsgwzencbtxsb2gb3vpqmdrmm (the original route is journaled)
2026/10/20 01:36:45 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/20 01:36:45 provision: a.shop.example.com: swapped for import sd_uvpqspbfsv4e7k6tiiiy6rtgbe (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_leonpwf66wmj2hi3ny75popb3a refused: there is no route at a.shop.example.com to replace
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_lunmheqpjtj5r5p6obps4gv6ya refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_xcd5vdc4mxrzoscjjejfjtutg4 refused: the route's address is 127.0.0.1:8401,127.0.0.1:8402, not 127.0.0.1:8401
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_frcf5oivtfaonsvoaqyhnuafd4 refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_lpp4mohrvs3vezd4o5aqf3isnu refused: the route belongs to app other
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_7suuwlanwa766ofn7mlp3fehvi refused: the route is filed under another account
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_6nmdkvd4j2e3fode2omfngnfhi refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_3ldtg7xplduudc7hnhv3eje2om refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_d4bkjppwh3ooks57lmuug7yweu refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_a5ggrjs6twtm4rxfw7drj6wz3i refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_z2fpzbkqukui6cyaar3lxdyu6u refused: the route is not an address route this import can take over (socket)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_3oqxqjfxjl3g5rqrmy2y3p5jly refused: the route is not an address route this import can take over (no address)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_t3zptjxftnakzlv3suvdwsakla refused: the route is not an address route this import can take over (provisioned)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_bkv6r7jrxcvk5vxlety3cde52u refused: the route is not an address route this import can take over (kind static)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_du2o7lqlyoeyavbaues4pohm4i refused: the route is not an address route this import can take over (backing)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_bptgykpsct4ofoj5t3y43dfvhu refused: the route is not an address route this import can take over (tunnel)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_v2smgsjaqpo3bw7kidr5dvr4re refused: the route is not an address route this import can take over (caps)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_3nzubwftjhx2mzr7xmc3bef2ri refused: the route is not an address route this import can take over (platform)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_vufq7tlqtbm3qfacdooi56vzby refused: the route is not an address route this import can take over (canary)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_arqnbra6cfo546t7h5sy6fo4pa refused: the route is not an address route this import can take over (kind sidecar)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_sxqgbiqjfrbl7ryfgzszvclpdy refused: the route is not an address route this import can take over (region)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_dfrpopkkliugvy5qajhypibdvq refused: the route is not an address route this import can take over (fleet_box)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_35l45wyt2wflpclqvqqezw6bzm refused: the route is not an address route this import can take over (hibernate)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_5mu3oawe7uppq3lp2ijg6zwj6i refused: the route is not an address route this import can take over (claim_owner)
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_plvs4iuyeuxqb4pky6gh2dpq4q refused: this box does not run instances nested
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_hans6yjgxt33dgn5bjbhjg5fsa refused: this box does not run instances nested
2026/10/20 01:36:45 provision: a.shop.example.com: import sd_ddplf75mpyvonun3cuulni7oea refused: claim control is on for this box
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_gq22w3cch4mzlrchpv6cwvpgra (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_fkmmohlccaiayqrjgfjyerl3lm (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import deferred: this box cannot read the legacy route assignments
2026/10/20 01:36:45 provision: a.shop.example.com: import deferred: the legacy route assignments could not be read: store down
2026/10/20 01:36:45 provision: a.shop.example.com: not swapping for import sd_hduscjcoytf5ngn4y2enp5ngey: its verify hash is not a sha256
2026/10/20 01:36:45 provision: a.shop.example.com: not swapping for import sd_amufda5ykgncxdq5fo3vndhfc4: its verify hash is not a sha256
2026/10/20 01:36:45 provision: a.shop.example.com: not swapping for import sd_k4sssk4ngoagrgykpgqkn76zwi: its verify hash is not a sha256
2026/10/20 01:36:45 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/20 01:36:45 provision: A.shop.example.com/..: not swapping for import sd_4qovbsbz5jqsnzujwdogzmqzfy: its host or seed id is malformed (seeds: not a host)
2026/10/20 01:36:45 provision: a.shop.example.com: not swapping for import sd_nxwtkrlkufaqaqnh2xurhceiu4: its record does not describe a nested, hibernating instance
2026/10/20 01:36:45 provision: a.shop.example.com: not swapping for import sd_sfxhgfnziwy2nkhwlg4fkdvtsm: its record does not describe a nested, hibernating instance
2026/10/20 01:36:45 provision: a.shop.example.com: not swapping for import sd_r4a65zdrvxl7mrjdx36jab74ie: its record does not describe a nested, hibernating instance
2026/10/20 01:36:45 provision: a.shop.example.com: not swapping for import sd_ifpyuz7wgn3pxjwcnhivvt3qau: its record does not describe a nested, hibernating instance
2026/10/20 01:36:45 provision: a.shop.example.com: import deferred: the box's layout intent could not be read: store down
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_hm3dsqimhfaih4j5sszbolzlge (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import deferred: the box's nested probe did not answer: ready probe timed out
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_yuk7jz3bx4hdpcwkhq2x53npaa (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: swapped for import sd_6vrr7cjppk57ng6ktlki2brlmq (the original route is journaled)
2026/10/20 01:36:45 provision: a.shop.example.com: import deferred: the route is held by operation op_1
2026/10/20 01:36:45 provision: dry-run: would consider swapping a.shop.example.com for import sd_f4c3vjfbhqhikveu42qvzwmice
2026/10/20 01:36:46 provision: a.shop.example.com: import sd_3xxryjaqldhsz73yuoeobgajty rolled back to its original route
2026/10/20 01:36:46 provision: a.shop.example.com: import sd_3xxryjaqldhsz73yuoeobgajty: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/20 01:36:46 provision: a.shop.example.com: import sd_3xxryjaqldhsz73yuoeobgajty is cleaned up and its journal row retired
2026/10/20 01:36:46 provision: a.shop.example.com: import sd_2mo5bnakowsy2zjswqjssjkfgu left alone: the import journal holds seed sd_kdoqzfnsyjqyc6ikbyg2gwkwgm at swapped
2026/10/20 01:36:46 provision: a.shop.example.com: not minting import sd_cqgc77hsuxdl4ujrmgsb477bkm: it is swapped but not committed, and only its swap makes its row
2026/10/20 01:36:46 provision: a.shop.example.com: not minting import sd_gqabysi5tlslrw4dy7uyvnvc7y: it is placed but not committed, and only its swap makes its row
2026/10/20 01:36:46 provision: a.shop.example.com: swapped for import sd_qmvh3x2gzp2ez6vj25azk2piui (the original route is journaled)
2026/10/20 01:36:46 provision: a.shop.example.com: not minting import sd_qmvh3x2gzp2ez6vj25azk2piui: it is swapped but not committed, and only its swap makes its row
2026/10/20 01:36:46 provision: a.shop.example.com: not minting import sd_qmvh3x2gzp2ez6vj25azk2piui: it is placed but not committed, and only its swap makes its row
2026/10/20 01:36:46 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/20 01:36:46 provision: removed retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/20 01:36:46 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:46 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:46 provision: converged sidecar bot.eleven.bac.sidecar.internal args ["sidecar","run"] -> ["worker","run"]
2026/10/20 01:36:46 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:46 provision: converged sidecar bot.eleven.bac.sidecar.internal ceilings 300/3600 -> 60/120
2026/10/20 01:36:46 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:46 provision: converged sidecar bot.eleven.bac.sidecar.internal channel stable -> canary/eleven
2026/10/20 01:36:46 provision: converged sidecar bot.eleven.bac.sidecar.internal environment "other" -> "relay"
2026/10/20 01:36:46 provision: converged sidecar bot.eleven.bac.sidecar.internal hibernate true -> false
2026/10/20 01:36:46 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: read failed: failStore: reads disabled under apps/bac/eleven/sidecars/
2026/10/20 01:36:46 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: malformed: invalid character 'n' looking for beginning of object key string
2026/10/20 01:36:46 provision: not removing sidecar bot.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/20 01:36:46 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: empty channel
2026/10/20 01:36:46 provision: skipping sidecar record apps/bac/eleven/sidecars/held.json: empty channel
2026/10/20 01:36:46 provision: not removing sidecar held.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/20 01:36:46 provision: removed retired sidecar route old.eleven.bac.sidecar.internal (record gone)
2026/10/20 01:36:46 provision: bac/eleven has sidecar records but no sidecars manifest — not minting
2026/10/20 01:36:46 provision: bac/eleven is in the trash — not minting sidecar routes for it
2026/10/20 01:36:46 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/20 01:36:46 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/20 01:36:46 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:46 provision: minted sidecar route hub.relay.bac.sidecar.internal (app "relay" acct "bac" args ["relay"])
2026/10/20 01:36:46 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/20 01:36:46 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:46 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/20 01:36:46 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:46 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:46 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/20 01:36:46 provision: removed retired sidecar route bot.eleven.bac.sidecar.internal (record gone)
2026/10/20 01:36:46 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:46 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/20 01:36:46 provision: skipping sidecar record apps/bac/relay/sidecars/hub.json: read failed: failStore: reads disabled under apps/bac/relay/sidecars/
2026/10/20 01:36:46 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/20 01:36:46 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/20 01:36:46 provision: dry-run: would mint sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" channel "stable" args ["sidecar","run"])
2026/10/20 01:36:46 provision: dry-run: would remove retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/20 01:36:46 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/20 01:36:46 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:46 provision: converged acme.go.tito.io update settings "{\"updates\":\"manual\",\"channel\":\"stable\"}" -> ""
2026/10/20 01:36:46 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:46 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:46 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/20 01:36:46 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/20 01:36:46 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/20 01:36:46 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/20 01:36:46 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/20 01:36:46 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/20 01:36:46 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
FAIL
FAIL	github.com/carlosframework/platform/internal/provision	17.480s
ok  	github.com/carlosframework/platform/internal/publicrelease	0.007s
?   	github.com/carlosframework/platform/internal/regionname	[no test files]
ok  	github.com/carlosframework/platform/internal/registry	5.447s
ok  	github.com/carlosframework/platform/internal/relay	7.220s
ok  	github.com/carlosframework/platform/internal/release	23.867s
ok  	github.com/carlosframework/platform/internal/rollout	3.654s
ok  	github.com/carlosframework/platform/internal/rolloutwords	0.004s
ok  	github.com/carlosframework/platform/internal/rootaws	0.007s
ok  	github.com/carlosframework/platform/internal/rootparticipation	0.058s
ok  	github.com/carlosframework/platform/internal/rootstate	0.026s
ok  	github.com/carlosframework/platform/internal/runs	0.570s
ok  	github.com/carlosframework/platform/internal/s3compat	0.005s
ok  	github.com/carlosframework/platform/internal/safefile	0.004s
ok  	github.com/carlosframework/platform/internal/schedule	2.487s
ok  	github.com/carlosframework/platform/internal/seeds	0.011s
ok  	github.com/carlosframework/platform/internal/sim/hostlife	8.704s
ok  	github.com/carlosframework/platform/internal/sim/litestreamfacts	4.069s
ok  	github.com/carlosframework/platform/internal/status	0.059s
ok  	github.com/carlosframework/platform/internal/steering	0.005s
ok  	github.com/carlosframework/platform/internal/stopevidence	0.165s
ok  	github.com/carlosframework/platform/internal/svcrole	0.003s
ok  	github.com/carlosframework/platform/internal/telemetry	0.004s
ok  	github.com/carlosframework/platform/internal/termfence	0.004s
ok  	github.com/carlosframework/platform/internal/tunnelclient	0.004s
ok  	github.com/carlosframework/platform/internal/unixdial	0.002s
ok  	github.com/carlosframework/platform/internal/updatewords	0.004s
ok  	github.com/carlosframework/platform/internal/usage	0.004s
ok  	github.com/carlosframework/platform/internal/version	0.001s
ok  	github.com/carlosframework/platform/internal/vet	1.549s
FAIL
make: *** [Makefile:18: 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/harness/RUNLOG.md b/harness/RUNLOG.md
index 3a776d1f9..d25b59146 100644
--- a/harness/RUNLOG.md
+++ b/harness/RUNLOG.md
@@ -489,3 +489,96 @@ executable's sha256 (whose build stamp is `v0.28.5`, `go version -m`); and
`status/consoles/dev-console.json` cannot exist before 5.1 (the console's census report needs
`control/host-actors.json`: journal `host census report: ... control/host-actors.json: file does
not exist`). It is checked after 5.1 (step 9). H10 was not needed. **Step 8: GREEN** (01:28Z).
+
+## Step 9: runbook blocks 5.0, 5.0a, 5.1, 6.1, 6.1a, 6.2
+
+Source: runbook `docs/superpowers/plans/2026-10-16-claim-activation-dev-cohort1.md` on
+`claim-dev-cohort1-runbook` @ `a06f17ea`, and its inputs under
+`docs/superpowers/notes/claim-trial-inputs/` (incl. `signing-host.md`). Transcribed into
+`harness/scenarios/cohort1/`: `values.env` (every literal the harness changes), `inputs/`,
+`ssm.sh`, `box-helpers.sh` and `signer-helpers.sh` (the runbook's helpers, verbatim but for values),
+and `blocks/`. The operator shell (on the host) plays DOCS-T1; the signer container plays the
+trusted signing host; every box and signer block goes through the SSM stand-in.
+
+### Command changes for the harness (complete list for blocks 5.0 to 6.2)
+
+| Where | Runbook | Harness | Why |
+|---|---|---|---|
+| everywhere | `--profile kass`, `AWS_PROFILE=kass` | `harness` | the operator's MinIO keys; no AWS |
+| everywhere | bucket `carlos-dev-640012953448` | `harness-deployment` | harness MinIO bucket (H1) |
+| instance ids | leo `i-046c7fe4...`, sophie `i-05498ead...` | `i-0d917521...` (donor-1), `i-01917703...` (donor-2) | the donors whose signed documents the boxes serve (H3) |
+| box names | `leo-climbing`, `sophie-knitting` (incl. `jq '.roster.boxes["sophie-knitting"]'`, the `for box in leo-climbing sophie-knitting` loop, `leo-climbing-enrollment.json`) | `kathleen-juggling`, `ada-letterpress` | box labels come from `/etc/machine-id` |
+| tag, files | `v0.28.4`, `policy.v0.28.4.json`, `identity.v0.28.4.json`, `CV=f3bf1214`, floor `min_release v0.28.4` | `v0.28.5`, `...v0.28.5.json`, `CV=1b635e61`, `v0.28.5` | the harness release (step 7) |
+| `leo.json`/`sophie.json` | `operator: paul@keymail.dev` | `operator@keymail.dev` | the harness operator |
+| `console.json` | `deployment_bucket` dev's | `harness-deployment`; token drawn on the signer (`od -N16`) as the first session did | |
+| signer | EC2 instance + role + SG (`signing-host.md` "Create") | the signer container; its MinIO user stands for `carlos-claim-signer` | H2; no AWS resource |
+| signer tools | jq-1.7.1 GitHub binary | Debian 13's packaged jq (`jq-1.7`, `/usr/bin/jq`) | no egress after `base` |
+| exchange | `s3://carlos-dev-.../claim-signer/<run-id>/` | `s3://harness-deployment/claim-signer/cohort1-20261020T013207Z/` | |
+| 5.0 | read the invocation once | polled until it finishes | scripted |
+| 5.1 block | one attended run | run as one SSM block; a fault in **my** wrapper (`REV` read outside a subshell) stopped it after the last phase; resumed with `refresh` only (`51-roster-resume.sh`), no phase re-run | runbook's own resume rule |
+| 6.2 retry | (dev: hand `chown` on 2026-10-19) | platform-infrastructure#47's "Probe and remediation" blocks, verbatim (`harness/infra-copies/pr47/`) | the coordinator's choice: apply #47's way |
+
+### Results
+
+**5.0** (`blocks/50-publish-record.sh`, 01:31:51Z), verbatim command parameter:
+```
+Success published the identity record for kathleen-juggling (instance i-0d9175215cfcf63b8) to control/boxes/kathleen-juggling.json
+Success the record at control/boxes/kathleen-juggling.json is valid AWS-signed evidence for kathleen-juggling (instance i-0d9175215cfcf63b8), so nothing was written. enrollment still makes its own checks before it accepts the box
+Success published the identity record for ada-letterpress (instance i-019177034b088459f) to control/boxes/ada-letterpress.json
+Success the record at control/boxes/ada-letterpress.json is valid AWS-signed evidence for ada-letterpress (instance i-019177034b088459f), so nothing was written. ...
+control/boxes/: kathleen-juggling.json 924 bytes, ada-letterpress.json 922 bytes
+```
+**5.0a**: ran as step 7 (digests on for `bab`, console `1b635e61` shipped and promoted to `canary/console`).
+
+**Session open** (`blocks/51-open-signer.sh`, 01:32:07Z): run-id `cohort1-20261020T013207Z`;
+`/usr/local/bin/carlos: OK`, `carlos v0.28.5`; sums, sig, helpers.sh, release.pub `OK`; no swap;
+`/run` tmpfs; `claims help` equal to the runbook's quoted v0.28.2 text with its three changes;
+`session-start 2026-10-20T01:32:24Z`; key `root 600 1 45` (`signing-host.md` "Getting the key there",
+verbatim). Release-key reads in the SSM stand-in's log: this one, plus one re-fetch after `pre62`
+(a snapshot restart clears the signer's tmpfs).
+
+**5.1** (`blocks/51-roster.sh` + `51-roster-resume.sh`, 01:32-01:33Z): initialize -> 1, configure -> 2,
+invite/enroll kathleen-juggling -> 3, invite/enroll ada-letterpress -> 4, invite/enroll-console -> 5,
+every dry run then apply. `refresh`: revision 5, home null, `ada-letterpress` pool `console`
+`i-019177034b088459f` active, `kathleen-juggling` pool `cohort1` `i-0d9175215cfcf63b8` active,
+`dev-console` compute `ada-letterpress` namespaces `platform`, holds `{}`, activations `{}`.
+Console token: 32 hex, sha256 prefix `e204a3a2`, never printed. Staging: `ok` x2, `staged` x5.
+
+**6.1** (`blocks/61-sign.sh`, 01:33:42Z):
+```
+sign-policy writes: []
+floor_sha256: 53d81bb7b0823bf983e44fa96618e3f3331e181ea04c15b9b535d959463a0c55 (= sha256 of compact {"min":1,"min_release":"v0.28.5"})
+publish-identity writes: one create-only put (before_etag "") of control/system/router/releases/v0.28.5.json
+release: version/release_tag v0.28.5, moves_protocol 1, source release:v0.28.5, released_at 0001-01-01, channel stable, spread 0s,
+ artifacts.linux-arm64 bootstrap/router/v0.28.5/carlos-linux-arm64 111a317c...5c31 (= the signed sums' carlos-linux-arm64)
+ console_artifacts.linux-arm64 bootstrap/console/v0.28.5/carlos-linux-arm64 b2b431f3...17e0 (= canary/console's signed manifest)
+policy.v0.28.5.json 6e519545..., identity.v0.28.5.json 5905d631...; identity file = published object
+staging: absent x2, staged x4
+```
+**6.1a** (`blocks/61a-install-channel.box.sh`, 01:34:13Z leo, 01:34:19Z sophie): exactly the expected lines:
+```
+carlos v0.28.5 / carlos harness-f434a425
+replaced the rollback copy carlos.prev with v0.28.5 (v0.28.5) from the stable channel, the release carlos already runs. the release carlos.prev held before is no longer on this box
+carlos v0.28.5 / carlos v0.28.5
+v0.28.5 (v0.28.5) from the stable channel is already installed
+identity-equal (sophie: the same with "canary")
+```
+Snapshot **`pre62`** (all five stopped, 01:34:4xZ), so the 6.2 witness can be replayed.
+
+**6.2 on main's host-init** (`blocks/62-guard-arm.box.sh`, 01:34:55Z): **REFUSED, defect 1 reproduced**
+```
+Failed hostfloor: authenticated floor required
+#47 probe: /opt/carlos carlos:carlos 755, versions carlos:carlos, live carlos:carlos, /etc/carlos/host.env carlos:carlos 600
+ (/opt/carlos/carlos root:root: install-channel/system update installed it as root)
+```
+**#47's remediation** (verbatim, on leo and sophie, 01:35:15Z): every carlos-owned path under
+`/opt/carlos` (on sophie also the agent-staged console files and the live link) -> `root:root`,
+host.env -> `root:root 600`; its verification tests passed.
+**6.2 again** (01:35:19Z): **PASS**: `755 root:root` twice, `sudo -u carlos test -x` passed; then
+`/etc/carlos/host-actor.json`, `carlos-edge.service.d/90-host-floor.conf` and
+`/opt/carlos/system/guard/policy.json` exist, `carlos-edge` active.
+
+The rebuilt-box route of #47 (host-init and bootstrap-box.sh from `747f699`) was not run tonight;
+its host-init is in `harness/infra-copies/747f699/` for a `base-opt` build.
+
+**Step 9: GREEN** (defect 1: refused on main's host-init, passes after #47's remediation), 01:35Z.
diff --git a/harness/infra-copies/pr47/PROVENANCE.md b/harness/infra-copies/pr47/PROVENANCE.md
new file mode 100644
index 000000000..ee8a4be18
--- /dev/null
+++ b/harness/infra-copies/pr47/PROVENANCE.md
@@ -0,0 +1,7 @@
+# platform-infrastructure#47 ("dev host setup: /opt/carlos, its binaries and host.env are root's")
+
+OPEN, head `747f699d8e48e14fd012a4ccd2f7ea830701dcee` (branch `host-root-owned-opt`), read with
+`gh pr view 47 -R carlosframework/platform-infrastructure` on 2026-10-20T01:29:39Z.
+`probe.sh` and `remediation.sh` are the PR body's "Probe and remediation" blocks, byte for byte
+(the first and second ```sh fences). The PR's host-init change is `../747f699/dev/host-init.sh`.
+sha256: probe.sh 7eb543e68202227b..., remediation.sh 945d47e5a4c8d378...
diff --git a/harness/infra-copies/pr47/probe.sh b/harness/infra-copies/pr47/probe.sh
new file mode 100644
index 000000000..dec2481eb
--- /dev/null
+++ b/harness/infra-copies/pr47/probe.sh
@@ -0,0 +1,4 @@
+stat -c '%U:%G %a %n' /opt /opt/carlos /opt/carlos/versions /opt/carlos/live /opt/carlos/carlos /etc/carlos/host.env
+find /opt/carlos -xdev \( ! -user root -o ! -group root \) -printf '%u:%g %m %y %p\n'
+find /opt/carlos ! -type l -perm /022
+ls -l /etc/carlos/host.env*
diff --git a/harness/infra-copies/pr47/remediation.sh b/harness/infra-copies/pr47/remediation.sh
new file mode 100644
index 000000000..8be9ec70c
--- /dev/null
+++ b/harness/infra-copies/pr47/remediation.sh
@@ -0,0 +1,13 @@
+set -eu
+# What will change
+find /opt/carlos -xdev \( ! -user root -o ! -group root \) -printf '%u:%g %m %y %p\n'
+# Hand them to root. -h changes a symlink itself, never its target; find does not follow links.
+find /opt/carlos -xdev \( ! -user root -o ! -group root \) -exec chown -h root:root {} +
+# host.env and its backups: systemd reads them as root; the platform writes host.env root 0600
+chown root:root /etc/carlos/host.env
+for f in /etc/carlos/host.env.bak-*; do [ -f "$f" ] && chown root:root "$f"; done
+# Verify
+stat -c '%U:%G %a %n' /opt /opt/carlos /opt/carlos/versions /opt/carlos/live /opt/carlos/system /opt/carlos/carlos /opt/carlos/carlos.prev /etc/carlos/host.env
+test "$(find /opt/carlos \( ! -user root -o ! -group root \) | wc -l)" -eq 0
+test "$(find /opt/carlos ! -type l -perm /022 | wc -l)" -eq 0
+test "$(find /opt/carlos -perm /6000 | wc -l)" -eq 0
diff --git a/harness/scenarios/cohort1/blocks/50-publish-record.sh b/harness/scenarios/cohort1/blocks/50-publish-record.sh
new file mode 100755
index 000000000..2f62997b7
--- /dev/null
+++ b/harness/scenarios/cohort1/blocks/50-publish-record.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+# Runbook 5.0 (operator shell): publish-record on leo, then sophie, then the same
+# command again on each (the verify run). Command parameter verbatim.
+# HARNESS: profile kass -> harness; instance ids; the runbook reads the invocation once,
+# here it is polled until it finishes.
+set -euo pipefail
+. ~/cohort1/values.env
+for inst in "$LEO" "$SOPHIE"; do
+ for pass in publish verify; do
+ id=$(aws --profile harness --region eu-west-1 ssm send-command --instance-ids "$inst" \
+ --document-name AWS-RunShellScript --comment "cohort1 step 5.0: publish-record ($pass)" \
+ --parameters '{"commands":["systemd-run --wait --pipe -p EnvironmentFile=/etc/carlos/host.env -p User=carlos /opt/carlos/carlos system box publish-record"]}' \
+ --query Command.CommandId --output text)
+ until s=$(aws --profile harness --region eu-west-1 ssm get-command-invocation --command-id "$id" --instance-id "$inst" --query Status --output text 2>/dev/null) && [ "$s" != InProgress ] && [ "$s" != Pending ]; do sleep 2; done
+ echo "== $inst $pass"
+ aws --profile harness --region eu-west-1 ssm get-command-invocation --command-id "$id" \
+ --instance-id "$inst" --query '[Status,StandardOutputContent,StandardErrorContent]' --output text
+ done
+done
+aws s3 ls s3://harness-deployment/control/boxes/
diff --git a/harness/scenarios/cohort1/blocks/51-open-signer.sh b/harness/scenarios/cohort1/blocks/51-open-signer.sh
new file mode 100755
index 000000000..c2427d62e
--- /dev/null
+++ b/harness/scenarios/cohort1/blocks/51-open-signer.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+# The session's opening (runbook "Order of work" 1; signing-host.md "Getting jq and the
+# carlos CLI there" and "Getting the key there"), from the operator shell.
+# HARNESS: the signer is the signer container (no EC2 instance, role or SG is created: its
+# MinIO user stands for carlos-claim-signer); the exchange is s3://harness-deployment/claim-signer/<run-id>/;
+# jq is Debian 13's packaged jq (installed at base), not the jq-1.7.1 GitHub binary.
+set -euo pipefail
+. ~/cohort1/values.env
+cd ~/cohort1
+RUN=cohort1-$(date -u +%Y%m%dT%H%M%SZ); echo "$RUN" > run-id; echo "run-id $RUN"
+X=s3://harness-deployment/claim-signer/$RUN
+for f in ~/release.pub ~/release-v0.28.5/SHA256SUMS.txt ~/release-v0.28.5/SHA256SUMS.txt.sig ~/release-v0.28.5/carlos-linux-arm64 \
+ inputs/floor.json inputs/regions.json inputs/leo.json inputs/sophie.json inputs/console.json signer-helpers.sh; do
+ aws s3 cp --quiet "$f" "$X/$(basename "$f")"
+done
+aws s3 ls "$X/"
+SUMS=$(cd ~/release-v0.28.5 && sha256sum carlos-linux-arm64 SHA256SUMS.txt SHA256SUMS.txt.sig | awk '{print $1}' | paste -sd' ')
+H=$(sha256sum signer-helpers.sh | cut -d' ' -f1); P=$(sha256sum ~/release.pub | cut -d' ' -f1)
+./ssm.sh eu-west-1 "$SIGNER" "
+set -euo pipefail
+set -- $SUMS
+aws s3 cp --quiet $X/carlos-linux-arm64 /usr/local/bin/carlos
+printf '%s %s\n' \$1 /usr/local/bin/carlos | sha256sum -c
+chmod 0755 /usr/local/bin/carlos
+/usr/local/bin/carlos version
+jq --version; command -v jq
+install -d -m 0700 -o root -g root /root/claim-trial
+cd /root/claim-trial
+for f in release.pub SHA256SUMS.txt SHA256SUMS.txt.sig floor.json regions.json leo.json sophie.json console.json signer-helpers.sh; do aws s3 cp --quiet $X/\$f \$f; done
+mv signer-helpers.sh helpers.sh; chmod 0600 *
+printf '%s %s\n' \$2 SHA256SUMS.txt \$3 SHA256SUMS.txt.sig $H helpers.sh $P release.pub | sha256sum -c
+swapon --show | wc -l | sed 's/^/swap devices: /'; findmnt -no FSTYPE --target /run | sed 's/^/\/run: /'
+/usr/local/bin/carlos system claims help 2>&1 | sed 's/^/help| /'
+echo session-start \$(date -u +%FT%TZ)
+install -d -m 0700 -o root -g root /run/claim-signer
+aws --region eu-west-1 ssm get-parameter --name /carlos/release-key --with-decryption \
+ --query Parameter.Value --output text | install -m 0600 -o root -g root /dev/stdin /run/claim-signer/release.key
+stat -c '%U %a %h %s' /run/claim-signer/release.key
+"
diff --git a/harness/scenarios/cohort1/blocks/51-roster-resume.sh b/harness/scenarios/cohort1/blocks/51-roster-resume.sh
new file mode 100755
index 000000000..99a44f910
--- /dev/null
+++ b/harness/scenarios/cohort1/blocks/51-roster-resume.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+# Runbook 5.1, RESUMED after a harness-script fault (REV read outside the subshell):
+# refresh and inspect the actual state, never re-run a phase. Original header:
+# Runbook 5.1 "For a new roster only", on the signer, then the staging from the operator.
+# HARNESS: box names leo-climbing/sophie-knitting -> kathleen-juggling/ada-letterpress
+# (the harness boxes' own labels, from their machine-ids); bucket; the console enrollment
+# token is drawn on the signer as the first session did (od -N16 /dev/urandom) and never printed.
+set -euo pipefail
+. ~/cohort1/values.env
+cd ~/cohort1
+RUN=$(cat run-id); X=s3://harness-deployment/claim-signer/$RUN
+./ssm.sh eu-west-1 "$SIGNER" "
+. /root/claim-trial/helpers.sh
+refresh
+echo REV=\$REV
+jq '{revision:.roster.revision, home:.roster.home_region, boxes:(.roster.boxes|map_values({pool,instance:.cloud.instance_id,state})), consoles:(.roster.consoles|map_values({compute:.compute.box,namespaces})), holds:.roster.holds, activations:.roster.activations}' inspect.json
+for f in inspect.json roster.json kathleen-juggling-enrollment.json ada-letterpress-enrollment.json; do aws s3 cp --quiet \$f $X/out/\$f; sha256sum \$f | cut -c1-8 | sed \"s|^|\$f |\"; done
+"
+mkdir -p out && for f in inspect.json roster.json kathleen-juggling-enrollment.json ada-letterpress-enrollment.json; do aws s3 cp --quiet "$X/out/$f" "out/$f"; done
+(cd out && sha256sum * | cut -c1-8,65-)
+echo "== staging (runbook 5.1, from the operator)"
+. ./box-helpers.sh
+cp ~/release.pub out/release.pub; cp inputs/console-id out/console-id
+cd out
+ssm_run "$LEO" "install -d -o root -g root -m 0700 /root/claim-trial && echo ok"
+ssm_run "$SOPHIE" "install -d -o root -g root -m 0700 /root/claim-trial && echo ok"
+for f in release.pub kathleen-juggling-enrollment.json; do box_put "$LEO" "$f" "/root/claim-trial/$f"; done
+for f in release.pub ada-letterpress-enrollment.json console-id; do box_put "$SOPHIE" "$f" "/root/claim-trial/$f"; done
diff --git a/harness/scenarios/cohort1/blocks/51-roster.sh b/harness/scenarios/cohort1/blocks/51-roster.sh
new file mode 100755
index 000000000..456253acf
--- /dev/null
+++ b/harness/scenarios/cohort1/blocks/51-roster.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+# Runbook 5.1 "For a new roster only", on the signer, then the staging from the operator.
+# HARNESS: box names leo-climbing/sophie-knitting -> kathleen-juggling/ada-letterpress
+# (the harness boxes' own labels, from their machine-ids); bucket; the console enrollment
+# token is drawn on the signer as the first session did (od -N16 /dev/urandom) and never printed.
+set -euo pipefail
+. ~/cohort1/values.env
+cd ~/cohort1
+RUN=$(cat run-id); X=s3://harness-deployment/claim-signer/$RUN
+./ssm.sh eu-west-1 "$SIGNER" "
+. /root/claim-trial/helpers.sh
+TOKEN=\$(od -An -N16 -tx1 /dev/urandom | tr -d ' \n'); echo \"\$TOKEN\" | grep -Eq '^[0-9a-f]{32}\$' && echo 'console token: ok, sha256 prefix '\$(printf %s \"\$TOKEN\" | sha256sum | cut -c1-8)
+jq --arg e \"\$TOKEN\" '.enrollment=\$e' console.json > console.json.new && mv console.json.new console.json; unset TOKEN
+trap 'sed -E \"s/\\\"enrollment\\\": *\\\"[0-9a-f]{32}\\\"/\\\"enrollment\\\": \\\"<redacted>\\\"/g\" 51.out | tail -40' EXIT
+(
+exec > 51.out 2>&1
+jq -n --arg b \"\$B\" '{phase:\"initialize\",bucket:\$b,expected_revision:0}' > plan.json
+apply_plan
+jq -n --slurpfile x regions.json '{regions:\$x[0]}' > configure.json
+phase configure configure.json
+for box in leo sophie; do
+ jq -n --slurpfile x \"\$box.json\" '{box:\$x[0]}' > box-phase.json
+ phase invite-box box-phase.json
+ phase enroll-box box-phase.json
+ done
+refresh
+jq --arg bucket \"\$B\" --arg e \"\$(jq -er '.roster.boxes[\"ada-letterpress\"].enrollment' inspect.json)\" \\
+ '.deployment_bucket=\$bucket | .compute={box:\"ada-letterpress\",enrollment:\$e}' console.json > console-bound.json
+jq -n --slurpfile x console-bound.json '{console:\$x[0]}' > console-phase.json
+phase invite-console console-phase.json
+phase enroll-console console-phase.json
+refresh
+for box in kathleen-juggling ada-letterpress; do
+ jq --arg box \"\$box\" '{box:\$box,enrollment:.roster.boxes[\$box].enrollment,instance_id:.roster.boxes[\$box].cloud.instance_id}' \\
+ inspect.json > \"\$box-enrollment.json\"
+done
+)
+trap - EXIT
+refresh
+sed -E 's/\"enrollment\": *\"[0-9a-f]{32}\"/\"enrollment\": \"<redacted>\"/g' 51.out | grep -E '\"phase\"|\"revision\"|\"key\"|refus|error' | head -60
+echo REV=\$REV
+jq '{revision:.roster.revision, home:.roster.home_region, boxes:(.roster.boxes|map_values({pool,instance:.cloud.instance_id,state})), consoles:(.roster.consoles|map_values({compute:.compute.box,namespaces})), holds:.roster.holds, activations:.roster.activations}' inspect.json
+for f in inspect.json roster.json kathleen-juggling-enrollment.json ada-letterpress-enrollment.json; do aws s3 cp --quiet \$f $X/out/\$f; sha256sum \$f | cut -c1-8 | sed \"s|^|\$f |\"; done
+"
+mkdir -p out && for f in inspect.json roster.json kathleen-juggling-enrollment.json ada-letterpress-enrollment.json; do aws s3 cp --quiet "$X/out/$f" "out/$f"; done
+(cd out && sha256sum * | cut -c1-8,65-)
+echo "== staging (runbook 5.1, from the operator)"
+. ./box-helpers.sh
+cp ~/release.pub out/release.pub; cp inputs/console-id out/console-id
+cd out
+ssm_run "$LEO" "install -d -o root -g root -m 0700 /root/claim-trial && echo ok"
+ssm_run "$SOPHIE" "install -d -o root -g root -m 0700 /root/claim-trial && echo ok"
+for f in release.pub kathleen-juggling-enrollment.json; do box_put "$LEO" "$f" "/root/claim-trial/$f"; done
+for f in release.pub ada-letterpress-enrollment.json console-id; do box_put "$SOPHIE" "$f" "/root/claim-trial/$f"; done
diff --git a/harness/scenarios/cohort1/blocks/61-sign.sh b/harness/scenarios/cohort1/blocks/61-sign.sh
new file mode 100644
index 000000000..adceae38c
--- /dev/null
+++ b/harness/scenarios/cohort1/blocks/61-sign.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+# Runbook 6.1 on the signer (floor and identity), then the copy back and the staging.
+# HARNESS: v0.28.4 -> v0.28.5 in tag and file names; CV f3bf1214 -> 1b635e61; bucket.
+set -euo pipefail
+. ~/cohort1/values.env
+cd ~/cohort1
+RUN=$(cat run-id); X=s3://harness-deployment/claim-signer/$RUN
+./ssm.sh eu-west-1 "$SIGNER" "
+. /root/claim-trial/helpers.sh
+jq -n --slurpfile x floor.json '{floor:\$x[0]}' > floor-phase.json
+trap 'tail -20 sign-policy.log' EXIT
+phase_out sign-policy floor-phase.json /root/claim-trial/policy.v0.28.5.json sign-policy-result.json > sign-policy.log 2>&1
+trap - EXIT
+echo \"sign-policy writes: \$(jq -c .writes sign-policy-result.json)\"
+echo \"floor_sha256: \$(jq -er .floor_sha256 sign-policy-result.json)\"
+echo \"compact floor sha256: \$(printf %s '{\"min\":1,\"min_release\":\"v0.28.5\"}' | sha256sum | cut -d' ' -f1)\"
+CV=1b635e61
+jq -n --rawfile sums SHA256SUMS.txt --rawfile sig SHA256SUMS.txt.sig --arg cv \"\$CV\" \\
+ '{identity:{release_tag:\"v0.28.5\",moves_protocol:1,sha256sums:\$sums,sha256sums_sig:\$sig,
+ console:{account:\"bab\",app:\"console\",channel:\"canary/console\",version:\$cv}}}' > identity-phase.json
+trap 'tail -20 publish-identity.log' EXIT
+phase_out publish-identity identity-phase.json /root/claim-trial/identity.v0.28.5.json publish-identity-result.json > publish-identity.log 2>&1
+trap - EXIT
+echo \"publish-identity writes: \$(jq -c .writes publish-identity-result.json)\"
+jq '{identity_key, release}' publish-identity-result.json
+for f in policy.v0.28.5.json identity.v0.28.5.json; do aws s3 cp --quiet \$f $X/out/\$f; sha256sum \$f | cut -c1-16 | sed \"s|^|\$f |\"; done
+"
+for f in policy.v0.28.5.json identity.v0.28.5.json; do aws s3 cp --quiet "$X/out/$f" "out/$f"; done
+(cd out && sha256sum policy.v0.28.5.json identity.v0.28.5.json | cut -c1-16,65-)
+aws s3 cp --quiet s3://harness-deployment/control/system/router/releases/v0.28.5.json - | cmp - out/identity.v0.28.5.json && echo "identity file = published object"
+echo "== staging (runbook 6.1)"
+. ./box-helpers.sh
+cd out
+for box in "$LEO" "$SOPHIE"; do
+ ssm_run "$box" "test ! -e /root/claim-trial/policy.v0.28.5.json && test ! -e /root/claim-trial/identity.v0.28.5.json && echo absent"
+done
+for f in policy.v0.28.5.json identity.v0.28.5.json; do box_put "$LEO" "$f" "/root/claim-trial/$f"; done
+for f in policy.v0.28.5.json identity.v0.28.5.json; do box_put "$SOPHIE" "$f" "/root/claim-trial/$f"; done
diff --git a/harness/scenarios/cohort1/blocks/61a-install-channel.box.sh b/harness/scenarios/cohort1/blocks/61a-install-channel.box.sh
new file mode 100644
index 000000000..19d8ef96f
--- /dev/null
+++ b/harness/scenarios/cohort1/blocks/61a-install-channel.box.sh
@@ -0,0 +1,13 @@
+# Runbook 6.1a, on leo, then the same block on sophie (verbatim; HARNESS: v0.28.4 -> v0.28.5 file names).
+set -euo pipefail
+cd /root/claim-trial
+set -a
+. /etc/carlos/host.env
+set +a
+/opt/carlos/carlos version
+/opt/carlos/carlos.prev version
+/opt/carlos/carlos system install-channel --policy /root/claim-trial/policy.v0.28.5.json --identity /root/claim-trial/identity.v0.28.5.json
+/opt/carlos/carlos version
+/opt/carlos/carlos.prev version
+/opt/carlos/carlos system install-channel --policy /root/claim-trial/policy.v0.28.5.json --identity /root/claim-trial/identity.v0.28.5.json
+cmp /opt/carlos/system/router/channel-identity.json /root/claim-trial/identity.v0.28.5.json && echo identity-equal
diff --git a/harness/scenarios/cohort1/blocks/62-guard-arm.box.sh b/harness/scenarios/cohort1/blocks/62-guard-arm.box.sh
new file mode 100644
index 000000000..f16d12c0c
--- /dev/null
+++ b/harness/scenarios/cohort1/blocks/62-guard-arm.box.sh
@@ -0,0 +1,10 @@
+# Runbook 6.2, on leo (verbatim; HARNESS: v0.28.5 file names, enrollment file kathleen-juggling-enrollment.json).
+set -euo pipefail
+cd /root/claim-trial
+set -a
+. /etc/carlos/host.env
+set +a
+/opt/carlos/carlos system guard-arm --policy /root/claim-trial/policy.v0.28.5.json \
+ --identity /root/claim-trial/identity.v0.28.5.json --enrollment /root/claim-trial/kathleen-juggling-enrollment.json
+stat -c '%a %U:%G' /opt/carlos/system/guard /opt/carlos/system/guard/identities
+sudo -u carlos test -x /opt/carlos/system/guard/carlos
diff --git a/harness/scenarios/cohort1/box-helpers.sh b/harness/scenarios/cohort1/box-helpers.sh
new file mode 100644
index 000000000..f4b6960ff
--- /dev/null
+++ b/harness/scenarios/cohort1/box-helpers.sh
@@ -0,0 +1,42 @@
+# The runbook's 5.1 SSM transfer helpers (second block), run in the operator shell
+# (the runbook runs them on DOCS-T1). HARNESS changes: LEO/SOPHIE ids; box_inspect's
+# bucket carlos-dev-640012953448 -> harness-deployment. R is set here (the runbook
+# sets it in the first block). jq runs in the operator shell (the runbook: on the
+# trusted host / DOCS-T1).
+R=eu-west-1
+LEO=i-0d9175215cfcf63b8
+SOPHIE=i-019177034b088459f
+# ssm_run <instance> <command>: run as root on the box; print stdout; fail unless the command succeeded.
+ssm_run() {
+ local id s
+ id=$(aws --region "$R" ssm send-command --instance-ids "$1" --document-name AWS-RunShellScript \
+ --parameters "$(python3 -c 'import json,sys;print(json.dumps({"commands":[sys.argv[1]]}))' "$2")" \
+ --query Command.CommandId --output text)
+ while s=$(aws --region "$R" ssm get-command-invocation --command-id "$id" --instance-id "$1" \
+ --query Status --output text 2>/dev/null); [ -z "$s" ] || [ "$s" = Pending ] || [ "$s" = InProgress ]; do sleep 2; done
+ test "$s" = Success
+ aws --region "$R" ssm get-command-invocation --command-id "$id" --instance-id "$1" \
+ --query StandardOutputContent --output text
+}
+# box_get <instance> <path on box> <local path>: copy a box file here, checked by sha256.
+box_get() {
+ ssm_run "$1" "gzip -c '$2' | base64 -w0; echo; sha256sum '$2' | cut -d' ' -f1" > get.out
+ sed -n 1p get.out | base64 -d | gunzip > "$3"
+ test "$(sha256sum "$3" | cut -d' ' -f1)" = "$(sed -n 2p get.out)"
+}
+# box_put <instance> <local path> <path on box>: stage a local file on the box (mode 0600), checked by sha256.
+box_put() {
+ local b h
+ b=$(gzip -c "$2" | base64 -w0)
+ h=$(sha256sum "$2" | cut -d' ' -f1)
+ ssm_run "$1" "umask 077; echo '$b' | base64 -d | gunzip > '$3' && test \"\$(sha256sum '$3' | cut -d' ' -f1)\" = $h && echo staged"
+}
+# box_inspect <instance>: the box reads the roster with its own credentials; parse it here; stage roster.json and rev on the box.
+box_inspect() {
+ ssm_run "$1" "cd /root/claim-trial && /opt/carlos/carlos system claims inspect --bucket harness-deployment --aws-region eu-west-1 --public-key \"\$(cat release.pub)\" > inspect.json" > /dev/null
+ box_get "$1" /root/claim-trial/inspect.json box-inspect.json
+ jq '.signed_roster' box-inspect.json > box-roster.json
+ jq -er '.roster.revision' box-inspect.json > box-rev
+ box_put "$1" box-roster.json /root/claim-trial/roster.json
+ box_put "$1" box-rev /root/claim-trial/rev
+}
diff --git a/harness/scenarios/cohort1/inputs/console-id b/harness/scenarios/cohort1/inputs/console-id
new file mode 100644
index 000000000..a71caa6f5
--- /dev/null
+++ b/harness/scenarios/cohort1/inputs/console-id
@@ -0,0 +1 @@
+dev-console
diff --git a/harness/scenarios/cohort1/inputs/console.json b/harness/scenarios/cohort1/inputs/console.json
new file mode 100644
index 000000000..eb2a25755
--- /dev/null
+++ b/harness/scenarios/cohort1/inputs/console.json
@@ -0,0 +1,6 @@
+{
+ "enrollment": "TO-CONFIRM: 32 lowercase hex characters, chosen once at approval and kept",
+ "instance_id": "dev-console",
+ "namespaces": ["platform"],
+ "deployment_bucket": "harness-deployment"
+}
diff --git a/harness/scenarios/cohort1/inputs/floor.json b/harness/scenarios/cohort1/inputs/floor.json
new file mode 100644
index 000000000..184d09acd
--- /dev/null
+++ b/harness/scenarios/cohort1/inputs/floor.json
@@ -0,0 +1 @@
+{"min": 1, "min_release": "v0.28.5"}
diff --git a/harness/scenarios/cohort1/inputs/leo.json b/harness/scenarios/cohort1/inputs/leo.json
new file mode 100644
index 000000000..54699e466
--- /dev/null
+++ b/harness/scenarios/cohort1/inputs/leo.json
@@ -0,0 +1,10 @@
+{
+ "reference": "kathleen-juggling",
+ "namespace": "platform",
+ "label": "kathleen-juggling",
+ "region": "ie",
+ "pool": "cohort1",
+ "aws_region": "eu-west-1",
+ "instance_id": "i-0d9175215cfcf63b8",
+ "operator": "operator@keymail.dev"
+}
diff --git a/harness/scenarios/cohort1/inputs/regions.json b/harness/scenarios/cohort1/inputs/regions.json
new file mode 100644
index 000000000..229b30b49
--- /dev/null
+++ b/harness/scenarios/cohort1/inputs/regions.json
@@ -0,0 +1,10 @@
+{
+ "ie": {
+ "namespaces": ["platform"],
+ "pools": ["cohort1", "console"],
+ "account": "640012953448",
+ "aws_region": "eu-west-1",
+ "group_name": "",
+ "group_arn": ""
+ }
+}
diff --git a/harness/scenarios/cohort1/inputs/sophie.json b/harness/scenarios/cohort1/inputs/sophie.json
new file mode 100644
index 000000000..c48d5669e
--- /dev/null
+++ b/harness/scenarios/cohort1/inputs/sophie.json
@@ -0,0 +1,10 @@
+{
+ "reference": "ada-letterpress",
+ "namespace": "platform",
+ "label": "ada-letterpress",
+ "region": "ie",
+ "pool": "console",
+ "aws_region": "eu-west-1",
+ "instance_id": "i-019177034b088459f",
+ "operator": "operator@keymail.dev"
+}
diff --git a/harness/scenarios/cohort1/signer-helpers.sh b/harness/scenarios/cohort1/signer-helpers.sh
new file mode 100644
index 000000000..7d8268a6a
--- /dev/null
+++ b/harness/scenarios/cohort1/signer-helpers.sh
@@ -0,0 +1,37 @@
+# The runbook's 5.1 first helper block with the session's changes (CARLOS=/usr/local/bin/carlos,
+# KEY=/run/claim-signer/release.key, no AWS_PROFILE), then 6.1's phase_out, verbatim.
+# HARNESS: B=carlos-dev-640012953448 -> harness-deployment.
+set -euo pipefail
+umask 077
+cd /root/claim-trial
+CARLOS=/usr/local/bin/carlos
+B=harness-deployment
+R=eu-west-1
+PUB=$(cat release.pub)
+KEY=/run/claim-signer/release.key
+refresh() {
+ "$CARLOS" system claims inspect --bucket "$B" --aws-region "$R" --public-key "$PUB" > inspect.json
+ jq '.signed_roster' inspect.json > roster.json
+ REV=$(jq -er '.roster.revision' inspect.json)
+}
+apply_plan() {
+ "$CARLOS" system claims run --plan /root/claim-trial/plan.json --signing-key "$KEY" --public-key "$PUB" --aws-region "$R" --dry-run
+ "$CARLOS" system claims run --plan /root/claim-trial/plan.json --signing-key "$KEY" --public-key "$PUB" --aws-region "$R"
+ refresh
+}
+phase() {
+ refresh
+ jq -n --arg phase "$1" --arg bucket "$B" --argjson rev "$REV" \
+ --slurpfile input "$2" '{phase:$phase,bucket:$bucket,expected_revision:$rev} + $input[0]' > plan.json
+ apply_plan
+}
+# phase_out <phase> <input> <out file> <result file>: phase, for the two phases that write a file to --out.
+phase_out() {
+ refresh
+ jq -n --arg phase "$1" --arg bucket "$B" --argjson rev "$REV" \
+ --slurpfile input "$2" '{phase:$phase,bucket:$bucket,expected_revision:$rev} + $input[0]' > plan.json
+ "$CARLOS" system claims run --plan /root/claim-trial/plan.json --signing-key "$KEY" --public-key "$PUB" --aws-region "$R" --out "$3" --dry-run
+ "$CARLOS" system claims run --plan /root/claim-trial/plan.json --signing-key "$KEY" --public-key "$PUB" --aws-region "$R" --out "$3" > "$4"
+ test "$(sha256sum "$3" | cut -d' ' -f1)" = "$(jq -er .output_sha256 "$4")"
+ refresh
+}
diff --git a/harness/scenarios/cohort1/ssm.sh b/harness/scenarios/cohort1/ssm.sh
new file mode 100755
index 000000000..57f2ae21a
--- /dev/null
+++ b/harness/scenarios/cohort1/ssm.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+# usage: ssm.sh <region> <instance-id> '<shell command>'
+# HARNESS: --profile kass -> --profile harness (the operator shell's MinIO keys; the SSM stand-in ignores signatures)
+set -euo pipefail
+region=$1 inst=$2 cmd=$3
+b64=$(printf '%s' "$cmd" | base64 -w0)
+params=$(python3 -c 'import json,sys;print(json.dumps({"commands":["echo %s | base64 -d | bash" % sys.argv[1]]}))' "$b64")
+id=$(aws --profile harness --region "$region" ssm send-command --instance-ids "$inst" \
+ --document-name AWS-RunShellScript --parameters "$params" --query Command.CommandId --output text)
+until s=$(aws --profile harness --region "$region" ssm get-command-invocation --command-id "$id" \
+ --instance-id "$inst" --query Status --output text 2>/dev/null) && [ "$s" != InProgress ] && [ "$s" != Pending ]; do sleep 3; done
+aws --profile harness --region "$region" ssm get-command-invocation --command-id "$id" --instance-id "$inst" \
+ --query '[Status,StandardOutputContent,StandardErrorContent]' --output text
diff --git a/harness/scenarios/cohort1/values.env b/harness/scenarios/cohort1/values.env
new file mode 100644
index 000000000..ce2c3c1c2
--- /dev/null
+++ b/harness/scenarios/cohort1/values.env
@@ -0,0 +1,12 @@
+# Harness values for the runbook's literals (runbook claim-dev-cohort1-runbook @ a06f17ea).
+# Every block below uses these in place of dev's; nothing else is changed without a "HARNESS:" note.
+LEO=i-0d9175215cfcf63b8 # dev: i-046c7fe43620944bc (leo-climbing); here donor-1, box label kathleen-juggling
+SOPHIE=i-019177034b088459f # dev: i-05498eada6f0afd23 (sophie-knitting); here donor-2, label ada-letterpress
+DENNIS=i-00000000000000023 # dev: i-009d593f451cfd562 (dennis-stenciling); harness-only id, label noor-marquetry
+SIGNER=i-00000000000000030 # dev: a fresh carlos-claim-signer EC2 instance per session; here the signer container
+LEO_BOX=kathleen-juggling # dev: leo-climbing
+SOPHIE_BOX=ada-letterpress # dev: sophie-knitting
+BUCKET=harness-deployment # dev: carlos-dev-640012953448
+PROFILE=harness # dev: kass
+TAG=v0.28.5 # dev: v0.28.4
+CV=1b635e61 # dev: f3bf1214 (the console's ship version)