console: the reservation table's unreadable refusal stays as Task 3 built it
The job tells it apart by identity (reserveBoxes' own refusal), so it needs no transient mark, and Task 3's reclaim tests compare it by value. The internal/console envelope is re-pinned (PROPOSED-self-serve-moves-2).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
3 files changed,
+3
−3
internal/console/offlinereserve.go+1 −1internal/console/selfserve_checks_test.go+1 −1internal/provision/testdata/plan14-root-reads-self-serve-moves-2.tsv+1 −1
CI failed — run details
CI log
=== gate ===
.amadan/test-gate.sh
=== launchctx (1 s)
ok amadan.net/carlos/platform.git/launchctx 0.012s
? amadan.net/carlos/platform.git/launchctx/controlname [no test files]
? amadan.net/carlos/platform.git/launchctx/wireid [no test files]
=== vet (13 s)
=== gofmt (0 s)
gofmt -l .: clean
=== rest (181 s)
? github.com/carlosframework/platform/cmd/changelog [no test files]
ok github.com/carlosframework/platform/cmd/console 3.568s
ok github.com/carlosframework/platform/cmd/moveprobe 11.579s
ok github.com/carlosframework/platform/cmd/zddprobe 0.705s
ok github.com/carlosframework/platform/internal/activator 60.008s
ok github.com/carlosframework/platform/internal/agentsock 0.035s
ok github.com/carlosframework/platform/internal/alerting 0.008s
ok github.com/carlosframework/platform/internal/analytics 0.020s
ok github.com/carlosframework/platform/internal/appconfig 2.677s
ok github.com/carlosframework/platform/internal/apperr 0.084s
ok github.com/carlosframework/platform/internal/applog 0.153s
ok github.com/carlosframework/platform/internal/awsinv 0.007s
ok github.com/carlosframework/platform/internal/boxchoice 0.007s
ok github.com/carlosframework/platform/internal/boxid 0.765s
? 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.009s
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.713s
ok github.com/carlosframework/platform/internal/changelog 0.385s
ok github.com/carlosframework/platform/internal/claimactivation 0.882s
ok github.com/carlosframework/platform/internal/clamd 0.057s
? github.com/carlosframework/platform/internal/cliflag [no test files]
? github.com/carlosframework/platform/internal/controlname [no test files]
? github.com/carlosframework/platform/internal/controlsock [no test files]
ok github.com/carlosframework/platform/internal/dbdoor 5.985s
ok github.com/carlosframework/platform/internal/dbdoor/dbdoortest 0.010s
ok github.com/carlosframework/platform/internal/dbverify 0.010s
ok github.com/carlosframework/platform/internal/dnsrec 0.009s
ok github.com/carlosframework/platform/internal/docsite 0.017s
ok github.com/carlosframework/platform/internal/domains 2.737s
ok github.com/carlosframework/platform/internal/doorkey 0.006s
ok github.com/carlosframework/platform/internal/economics 0.005s
ok github.com/carlosframework/platform/internal/edge 45.505s
? github.com/carlosframework/platform/internal/edgeproof [no test files]
ok github.com/carlosframework/platform/internal/edgesfile 0.009s
ok github.com/carlosframework/platform/internal/fleetapi 0.146s
ok github.com/carlosframework/platform/internal/gate 1.670s
ok github.com/carlosframework/platform/internal/genselect 0.022s
ok github.com/carlosframework/platform/internal/geo 0.018s
ok github.com/carlosframework/platform/internal/geoip 0.035s
ok github.com/carlosframework/platform/internal/historyreadback 0.163s
ok github.com/carlosframework/platform/internal/host 157.099s
ok github.com/carlosframework/platform/internal/hostactors 6.485s
ok github.com/carlosframework/platform/internal/hostactors/awsmembership 0.006s
ok github.com/carlosframework/platform/internal/hostbox 3.093s
ok github.com/carlosframework/platform/internal/hostclaim 0.751s
ok github.com/carlosframework/platform/internal/hostenv 0.013s
ok github.com/carlosframework/platform/internal/hostevidence 0.006s
ok github.com/carlosframework/platform/internal/hostexec 5.350s
ok github.com/carlosframework/platform/internal/hostfence 0.065s
ok github.com/carlosframework/platform/internal/hostfiles 10.283s
ok github.com/carlosframework/platform/internal/hostfloor 0.021s
ok github.com/carlosframework/platform/internal/hostguard 1.075s
ok github.com/carlosframework/platform/internal/hostops 1.954s
? 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.003s
ok github.com/carlosframework/platform/internal/hostrelocate 0.651s
ok github.com/carlosframework/platform/internal/hostresolve 0.188s
ok github.com/carlosframework/platform/internal/hostwrite 0.003s
ok github.com/carlosframework/platform/internal/infraview 0.005s
ok github.com/carlosframework/platform/internal/instancectl 5.255s
ok github.com/carlosframework/platform/internal/instanceexec 2.846s
ok github.com/carlosframework/platform/internal/instancefs 0.009s
ok github.com/carlosframework/platform/internal/instancekey 0.009s
ok github.com/carlosframework/platform/internal/instanceupdates 0.010s
2026/10/23 16:23:27 activator: h.example.com hibernated
--- FAIL: TestRawInstancesDirectoryIsNamedOnlyHere (0.41s)
rawdir_test.go:58: ../../internal/console/selfserve_checks.go:123 names the raw .instances directory; only internal/layout (and bootstrap's tmpfiles lines) may
FAIL
FAIL github.com/carlosframework/platform/internal/layout 1.812s
ok github.com/carlosframework/platform/internal/lbhealth 0.016s
ok github.com/carlosframework/platform/internal/lease 10.101s
ok github.com/carlosframework/platform/internal/lease/leasetest 0.605s
ok github.com/carlosframework/platform/internal/ledger 0.028s
ok github.com/carlosframework/platform/internal/mail 0.245s
ok github.com/carlosframework/platform/internal/maintenance 0.109s
ok github.com/carlosframework/platform/internal/maintenanceexec 5.528s
ok github.com/carlosframework/platform/internal/maintenanceguard 0.112s
ok github.com/carlosframework/platform/internal/metrics 0.016s
ok github.com/carlosframework/platform/internal/moves 21.402s
ok github.com/carlosframework/platform/internal/moves/archive 0.996s
ok github.com/carlosframework/platform/internal/objstore 0.334s
ok github.com/carlosframework/platform/internal/ops 0.237s
ok github.com/carlosframework/platform/internal/park 0.298s
ok github.com/carlosframework/platform/internal/plans 0.014s
ok github.com/carlosframework/platform/internal/privatefile 0.004s
ok github.com/carlosframework/platform/internal/provision 18.447s
ok github.com/carlosframework/platform/internal/publicrelease 0.008s
? github.com/carlosframework/platform/internal/regionname [no test files]
ok github.com/carlosframework/platform/internal/registry 5.865s
ok github.com/carlosframework/platform/internal/relay 7.255s
ok github.com/carlosframework/platform/internal/release 24.858s
ok github.com/carlosframework/platform/internal/rollout 3.829s
ok github.com/carlosframework/platform/internal/rolloutwords 0.004s
ok github.com/carlosframework/platform/internal/rootaws 0.008s
ok github.com/carlosframework/platform/internal/rootparticipation 0.064s
ok github.com/carlosframework/platform/internal/rootstate 0.027s
ok github.com/carlosframework/platform/internal/runs 0.602s
ok github.com/carlosframework/platform/internal/s3compat 0.004s
ok github.com/carlosframework/platform/internal/safefile 0.007s
ok github.com/carlosframework/platform/internal/schedule 2.714s
ok github.com/carlosframework/platform/internal/seeds 0.019s
ok github.com/carlosframework/platform/internal/sim/hostlife 10.413s
ok github.com/carlosframework/platform/internal/sim/litestreamfacts 3.767s
ok github.com/carlosframework/platform/internal/status 0.086s
ok github.com/carlosframework/platform/internal/steering 0.007s
ok github.com/carlosframework/platform/internal/stopevidence 0.308s
ok github.com/carlosframework/platform/internal/svcrole 0.002s
ok github.com/carlosframework/platform/internal/telemetry 0.005s
ok github.com/carlosframework/platform/internal/termfence 0.004s
ok github.com/carlosframework/platform/internal/tunnelclient 0.006s
ok github.com/carlosframework/platform/internal/unixdial 0.003s
ok github.com/carlosframework/platform/internal/updatewords 0.005s
ok github.com/carlosframework/platform/internal/usage 0.008s
ok github.com/carlosframework/platform/internal/version 0.002s
ok github.com/carlosframework/platform/internal/vet 1.696s
FAIL
=== internal_console@0 (83 s)
ok github.com/carlosframework/platform/internal/console 81.552s
=== internal_console@1 (49 s)
ok github.com/carlosframework/platform/internal/console 47.212s
=== internal_console@2 (45 s)
ok github.com/carlosframework/platform/internal/console 43.092s
=== internal_console@3 (47 s)
ok github.com/carlosframework/platform/internal/console 44.779s
=== internal_console@4 (47 s)
ok github.com/carlosframework/platform/internal/console 45.031s
=== internal_console@5 (49 s)
ok github.com/carlosframework/platform/internal/console 46.823s
=== internal_console@6 (48 s)
ok github.com/carlosframework/platform/internal/console 45.911s
=== internal_console@7 (43 s)
ok github.com/carlosframework/platform/internal/console 41.102s
=== root@0 (30 s)
ok github.com/carlosframework/platform 28.404s
=== root@1 (51 s)
ok github.com/carlosframework/platform 49.587s
=== root@2 (65 s)
ok github.com/carlosframework/platform 62.790s
=== e2e (54 s)
ok github.com/carlosframework/platform/internal/e2e/selfserve 53.058s
=== e2e-vet (1 s)
FAILED: rest
make: *** [Makefile:19: test] Error 1
amadan: step gate failed: exit status 2
amadan: job failed at step gate — its output is above, not at the tail of this log
diff --git a/internal/console/offlinereserve.go b/internal/console/offlinereserve.go| index 0463b5a0d..3f6a4c828 100644 |
| --- a/internal/console/offlinereserve.go |
| +++ b/internal/console/offlinereserve.go |
| @@ -107,7 +107,7 @@ func offlineBusy(host string) *offlineRefusal { |
| } |
| var ( |
| - offlineReserveUnreadable = &offlineRefusal{status: http.StatusBadGateway, msg: "could not read the instance", transient: true} |
| + offlineReserveUnreadable = &offlineRefusal{status: http.StatusBadGateway, msg: "could not read the instance"} |
| offlineReserveMismatch = &offlineRefusal{status: http.StatusConflict, msg: "the reservation does not match this move's participants"} |
| ) |
diff --git a/internal/console/selfserve_checks_test.go b/internal/console/selfserve_checks_test.go| index 3152490ac..c5cfbb30d 100644 |
| --- a/internal/console/selfserve_checks_test.go |
| +++ b/internal/console/selfserve_checks_test.go |
| @@ -120,7 +120,7 @@ func TestSelfServeDecisionsSpeakEachFact(t *testing.T) { |
| // whatever its words. |
| func TestSelfServeTransientRefusalsAreTyped(t *testing.T) { |
| s := &Server{} |
| - for _, ref := range []*offlineRefusal{offlineStaleRefusal("ie-box"), offlineReserveUnreadable} { |
| + for _, ref := range []*offlineRefusal{offlineStaleRefusal("ie-box")} { |
| if !selfServeTransient(ref) { |
| t.Errorf("%q is not transient", ref.msg) |
| } |
diff --git a/internal/provision/testdata/plan14-root-reads-self-serve-moves-2.tsv b/internal/provision/testdata/plan14-root-reads-self-serve-moves-2.tsv| index fe8fd0ce7..5a807e1e0 100644 |
| --- a/internal/provision/testdata/plan14-root-reads-self-serve-moves-2.tsv |
| +++ b/internal/provision/testdata/plan14-root-reads-self-serve-moves-2.tsv |
| @@ -23,7 +23,7 @@ internal/console/templates/settings.html external legacy accepted-legacy accepte |
| internal/provision/offline_move.go offlineBegin legacy accepted-legacy accepted-legacy;rev3=PROPOSED-self-serve-moves-2;basis=root-input (J4, as OfflineStart); the console (cmd/console serve under console.service, user carlos-console): self-serve moves 1 Task 7's body (OfflineStart's, the state a parameter; a direct start advances move_seq and stamps move.seq, refusing ErrLifetimeExhausted at MaxInt64 before any write), and it now also creates the self-serve move in offline-queued for OfflineQueue (queued_at, staged_at and precheck_at at the caller's stamp, move.seq set to the record's move_seq, no advance) and records return_of; a stage and a queue hold nothing; its one site is still rec.ActiveRun.Open(), a method on the record's run state (RunState.Open), not a file read; self-serve moves 2 Task 2 file:Open@208 0a9b432ddf2f39a977c0651e377258b35c1d05635e9979583eeac6253d6c0ec8 |
| @coverage internal/provision 42588b9f64803b41c4463efb31e69fda0fc66573efd5d6a2d6e709682eeca385 |
| # Task 3 (per-box reservations with a legacy projection and a sentinel, the fenced reclaim and the operator doors' bound admission), rev3=PROPOSED-self-serve-moves-2: no root read, class or task is added and no accepted-legacy unit is re-pinned, so the seal does not move. The new units (moves.ParseOfflineActive, moves.OfflineActiveBody, the console's offlinereserve.go, the doors' offlineApplyBound and offlineAdvanceBound) read no file: their reads are the bucket's control/offline-moves/active.json and the instance record through the judged readers and fenceRecord. Envelopes re-pinned in place (Task 2's rows replaced): internal/console (offlinereserve.go, the start and stage doors, the Server's two evidence fields) and internal/moves (the reservation table in offline.go). |
| -@coverage internal/console 4d4c15cada5899270ff8c8b7cfa93e04d3c162f9d11c7296592628aff5ec1107 |
| +@coverage internal/console fff7fd19c43a8f49c9b173f1a0d54054be9506a5126c8b10b80f2ec47a1f4460 |
| @coverage internal/moves 6a68b01ef865d9356bb19971f4cd4a61f7694769b63cee1d8234f615d5e9c8ba |
| # Task 4 (the journal, the events table, the console lease and the pass skeleton), rev3=PROPOSED-self-serve-moves-2: no root read, class or task is added. The console SQLite journal (selfserve_store.go) adds twenty-two units, each frozen accepted-legacy with a reviewed basis (console SQL as carlos-console, no bucket or root action), and the lease's console name adds one crypto/rand read (Server.selfServeConsoleID); serve (in place: the paging arm takes the store, the pass is started), NewServer (the row evidence and the recovery-mode scan) and Store.migrate (migrateSelfServe) are re-pinned. The seal moves. The lease and the pass read control/offline-moves/console.json and active.json from the bucket, not a file. Envelopes re-pinned in place: cmd/console, internal/console and internal/provision (WithWriteGuard in WriteRecord). |
| @legacy a8dd51a494ab3cd2ad371ded2850b6d78492569729527ea82cd8dd0f2b418a78 internal/console/selfserve_lease.go Server.selfServeConsoleID legacy accepted-legacy accepted-legacy;rev3=PROPOSED-self-serve-moves-2;basis=console.service user carlos-console, J4 root-input: reads crypto/rand once per process for the random console name the self-serve moves lease carries; randomness grants no root authority file:Read@110 3303b18ec5c77ccaf662064801f94276bfe947c31378cc1ecb8c4fe509d5d4d1 |