provision: census re-pins for Task 5 fix round 2 (PROPOSED-self-serve-moves-2)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
3 files changed,
+7
−2
docs/superpowers/notes/census-proposal-self-serve-moves-2.md+2 −0internal/provision/self_serve_moves2_census_test.go+3 −1internal/provision/testdata/plan14-root-reads-self-serve-moves-2.tsv+2 −1
CI passed — run details
CI log
=== gate ===
.amadan/test-gate.sh
=== launchctx (1 s)
ok amadan.net/carlos/platform.git/launchctx 0.014s
? amadan.net/carlos/platform.git/launchctx/controlname [no test files]
? amadan.net/carlos/platform.git/launchctx/wireid [no test files]
=== vet (9 s)
=== gofmt (1 s)
gofmt -l .: clean
=== rest (179 s)
? github.com/carlosframework/platform/cmd/changelog [no test files]
ok github.com/carlosframework/platform/cmd/console 3.570s
ok github.com/carlosframework/platform/cmd/moveprobe 11.587s
ok github.com/carlosframework/platform/cmd/zddprobe 0.705s
ok github.com/carlosframework/platform/internal/activator 60.408s
ok github.com/carlosframework/platform/internal/agentsock 0.020s
ok github.com/carlosframework/platform/internal/alerting 0.006s
ok github.com/carlosframework/platform/internal/analytics 0.024s
ok github.com/carlosframework/platform/internal/appconfig 2.718s
ok github.com/carlosframework/platform/internal/apperr 0.089s
ok github.com/carlosframework/platform/internal/applog 0.181s
ok github.com/carlosframework/platform/internal/awsinv 0.013s
ok github.com/carlosframework/platform/internal/boxchoice 0.005s
ok github.com/carlosframework/platform/internal/boxid 0.797s
? 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.014s
ok github.com/carlosframework/platform/internal/caps 0.018s
ok github.com/carlosframework/platform/internal/certwarm 0.008s
ok github.com/carlosframework/platform/internal/cgroup 0.709s
ok github.com/carlosframework/platform/internal/changelog 0.354s
ok github.com/carlosframework/platform/internal/claimactivation 0.906s
ok github.com/carlosframework/platform/internal/clamd 0.068s
? 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 6.516s
ok github.com/carlosframework/platform/internal/dbdoor/dbdoortest 0.010s
ok github.com/carlosframework/platform/internal/dbverify 0.006s
ok github.com/carlosframework/platform/internal/dnsrec 0.005s
ok github.com/carlosframework/platform/internal/docsite 0.011s
ok github.com/carlosframework/platform/internal/domains 2.782s
ok github.com/carlosframework/platform/internal/doorkey 0.014s
ok github.com/carlosframework/platform/internal/economics 0.005s
ok github.com/carlosframework/platform/internal/edge 45.355s
? 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.142s
ok github.com/carlosframework/platform/internal/gate 1.669s
ok github.com/carlosframework/platform/internal/genselect 0.021s
ok github.com/carlosframework/platform/internal/geo 0.018s
ok github.com/carlosframework/platform/internal/geoip 0.033s
ok github.com/carlosframework/platform/internal/historyreadback 0.169s
ok github.com/carlosframework/platform/internal/host 158.717s
ok github.com/carlosframework/platform/internal/hostactors 6.423s
ok github.com/carlosframework/platform/internal/hostactors/awsmembership 0.010s
ok github.com/carlosframework/platform/internal/hostbox 3.106s
ok github.com/carlosframework/platform/internal/hostclaim 0.741s
ok github.com/carlosframework/platform/internal/hostenv 0.006s
ok github.com/carlosframework/platform/internal/hostevidence 0.006s
ok github.com/carlosframework/platform/internal/hostexec 5.222s
ok github.com/carlosframework/platform/internal/hostfence 0.035s
ok github.com/carlosframework/platform/internal/hostfiles 10.298s
ok github.com/carlosframework/platform/internal/hostfloor 0.017s
ok github.com/carlosframework/platform/internal/hostguard 1.061s
ok github.com/carlosframework/platform/internal/hostops 1.928s
? github.com/carlosframework/platform/internal/hostops/fencerelease [no test files]
ok github.com/carlosframework/platform/internal/hostops/internal/fencerelease 0.002s
ok github.com/carlosframework/platform/internal/hostquarantine 0.005s
ok github.com/carlosframework/platform/internal/hostrelocate 0.609s
ok github.com/carlosframework/platform/internal/hostresolve 0.176s
ok github.com/carlosframework/platform/internal/hostwrite 0.004s
ok github.com/carlosframework/platform/internal/infraview 0.003s
ok github.com/carlosframework/platform/internal/instancectl 5.225s
ok github.com/carlosframework/platform/internal/instanceexec 2.832s
ok github.com/carlosframework/platform/internal/instancefs 0.015s
ok github.com/carlosframework/platform/internal/instancekey 0.005s
ok github.com/carlosframework/platform/internal/instanceupdates 0.016s
ok github.com/carlosframework/platform/internal/layout 1.733s
ok github.com/carlosframework/platform/internal/lbhealth 0.002s
ok github.com/carlosframework/platform/internal/lease 10.132s
ok github.com/carlosframework/platform/internal/lease/leasetest 0.530s
ok github.com/carlosframework/platform/internal/ledger 0.026s
ok github.com/carlosframework/platform/internal/mail 0.220s
ok github.com/carlosframework/platform/internal/maintenance 0.095s
ok github.com/carlosframework/platform/internal/maintenanceexec 5.506s
ok github.com/carlosframework/platform/internal/maintenanceguard 0.085s
ok github.com/carlosframework/platform/internal/metrics 0.006s
ok github.com/carlosframework/platform/internal/moves 21.285s
ok github.com/carlosframework/platform/internal/moves/archive 0.894s
ok github.com/carlosframework/platform/internal/objstore 0.300s
ok github.com/carlosframework/platform/internal/ops 0.309s
ok github.com/carlosframework/platform/internal/park 0.289s
ok github.com/carlosframework/platform/internal/plans 0.012s
ok github.com/carlosframework/platform/internal/privatefile 0.007s
ok github.com/carlosframework/platform/internal/provision 17.766s
ok github.com/carlosframework/platform/internal/publicrelease 0.012s
? github.com/carlosframework/platform/internal/regionname [no test files]
ok github.com/carlosframework/platform/internal/registry 5.772s
ok github.com/carlosframework/platform/internal/relay 7.220s
ok github.com/carlosframework/platform/internal/release 24.289s
ok github.com/carlosframework/platform/internal/rollout 3.835s
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.063s
ok github.com/carlosframework/platform/internal/rootstate 0.029s
ok github.com/carlosframework/platform/internal/runs 0.613s
ok github.com/carlosframework/platform/internal/s3compat 0.005s
ok github.com/carlosframework/platform/internal/safefile 0.005s
ok github.com/carlosframework/platform/internal/schedule 2.726s
ok github.com/carlosframework/platform/internal/seeds 0.011s
ok github.com/carlosframework/platform/internal/sim/hostlife 10.198s
ok github.com/carlosframework/platform/internal/sim/litestreamfacts 3.700s
ok github.com/carlosframework/platform/internal/status 0.086s
ok github.com/carlosframework/platform/internal/steering 0.006s
ok github.com/carlosframework/platform/internal/stopevidence 0.238s
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.003s
ok github.com/carlosframework/platform/internal/updatewords 0.005s
ok github.com/carlosframework/platform/internal/usage 0.005s
ok github.com/carlosframework/platform/internal/version 0.001s
ok github.com/carlosframework/platform/internal/vet 1.631s
=== internal_console@0 (87 s)
ok github.com/carlosframework/platform/internal/console 85.339s
=== internal_console@1 (49 s)
ok github.com/carlosframework/platform/internal/console 46.556s
=== internal_console@2 (46 s)
ok github.com/carlosframework/platform/internal/console 43.528s
=== internal_console@3 (46 s)
ok github.com/carlosframework/platform/internal/console 43.744s
=== internal_console@4 (47 s)
ok github.com/carlosframework/platform/internal/console 45.098s
=== internal_console@5 (49 s)
ok github.com/carlosframework/platform/internal/console 46.915s
=== internal_console@6 (48 s)
ok github.com/carlosframework/platform/internal/console 46.210s
=== internal_console@7 (43 s)
ok github.com/carlosframework/platform/internal/console 41.126s
=== root@0 (30 s)
ok github.com/carlosframework/platform 28.070s
=== root@1 (48 s)
ok github.com/carlosframework/platform 46.115s
=== root@2 (56 s)
ok github.com/carlosframework/platform 54.261s
=== e2e (2 s)
ok github.com/carlosframework/platform/internal/e2e/selfserve 0.211s
=== e2e-vet (1 s)
=== cross ===
--- shard 0 of 5 ---
cross-compiling darwin/arm64
--- shard 1 of 5 ---
cross-compiling darwin/amd64
--- shard 2 of 5 ---
cross-compiling linux/arm64
linux/arm64 carlos binary: 50266274 bytes (ceiling 52000000)
--- shard 3 of 5 ---
cross-compiling windows/amd64
--- shard 4 of 5 ---
cross-compiling windows/arm64
=== minio-contract ===
minio contract: arm64, minio RELEASE.2025-09-07T16-13-09Z, mc RELEASE.2025-08-13T08-35-41Z
minio: cached, digest verified
mc: cached, digest verified
minio healthy on 127.0.0.1:20999
Added `local` successfully.
Bucket created successfully `local/contract-bucket`.
Bucket created successfully `local/denied-bucket`.
Created policy `contract-only` successfully.
Added user `scopeduser` successfully.
Attached Policies: [contract-only]
To User: scopeduser
buckets and scoped user ready
=== RUN TestDeliveredContractMinio
=== RUN TestDeliveredContractMinio/put
=== RUN TestDeliveredContractMinio/get_round-trips_the_body
=== RUN TestDeliveredContractMinio/list_shows_the_key
=== RUN TestDeliveredContractMinio/head_and_list_agree_on_the_version
=== RUN TestDeliveredContractMinio/the_app_cannot_tag_its_own_object
=== RUN TestDeliveredContractMinio/the_app_cannot_tag_its_own_object/not_by_PutObjectTagging
=== RUN TestDeliveredContractMinio/the_app_cannot_tag_its_own_object/and_not_by_x-amz-tagging_on_upload
=== RUN TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route
=== RUN TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/not_by_CreateMultipartUpload
=== RUN TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/not_by_CopyObject_with_a_REPLACE_tagging_directive
=== RUN TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/but_multipart_itself_is_allowed
=== RUN TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/and_copy_itself_is_allowed
=== RUN TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/a_POST-policy_forged_tag_with_a_matching_version_is_still_not_a_verdict
=== RUN TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/and_an_ordinary_tagged-with-something-else_upload_is_allowed
=== RUN TestDeliveredContractMinio/delete_removes_it
=== RUN TestDeliveredContractMinio/cross-bucket_denial
--- PASS: TestDeliveredContractMinio (0.02s)
--- PASS: TestDeliveredContractMinio/put (0.00s)
--- PASS: TestDeliveredContractMinio/get_round-trips_the_body (0.00s)
--- PASS: TestDeliveredContractMinio/list_shows_the_key (0.00s)
--- PASS: TestDeliveredContractMinio/head_and_list_agree_on_the_version (0.00s)
--- PASS: TestDeliveredContractMinio/the_app_cannot_tag_its_own_object (0.00s)
--- PASS: TestDeliveredContractMinio/the_app_cannot_tag_its_own_object/not_by_PutObjectTagging (0.00s)
--- PASS: TestDeliveredContractMinio/the_app_cannot_tag_its_own_object/and_not_by_x-amz-tagging_on_upload (0.00s)
--- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route (0.01s)
--- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/not_by_CreateMultipartUpload (0.00s)
--- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/not_by_CopyObject_with_a_REPLACE_tagging_directive (0.00s)
--- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/but_multipart_itself_is_allowed (0.00s)
--- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/and_copy_itself_is_allowed (0.00s)
--- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/a_POST-policy_forged_tag_with_a_matching_version_is_still_not_a_verdict (0.00s)
--- PASS: TestDeliveredContractMinio/the_app_cannot_tag_by_any_other_route/and_an_ordinary_tagged-with-something-else_upload_is_allowed (0.00s)
--- PASS: TestDeliveredContractMinio/delete_removes_it (0.00s)
--- PASS: TestDeliveredContractMinio/cross-bucket_denial (0.00s)
PASS
ok github.com/carlosframework/platform/internal/objstore 0.023s
=== RUN TestT4StorageProbeMinio
2026/10/23 14:11:11 moves: T4: STORE: list: operation error S3: ListObjectsV2, https response error StatusCode: 403, RequestID: 18E12DF8669DCCF1, HostID: 7c420053e0fbcd7f41653fdd92ffa2802c903d05303b1aa15adc2e8bb65d183f, api error SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method.
--- PASS: TestT4StorageProbeMinio (0.01s)
PASS
ok github.com/carlosframework/platform/internal/host 0.022s
minio contract: PASS
diff --git a/docs/superpowers/notes/census-proposal-self-serve-moves-2.md b/docs/superpowers/notes/census-proposal-self-serve-moves-2.md| index 72b4be703..1dfb58d12 100644 |
| --- a/docs/superpowers/notes/census-proposal-self-serve-moves-2.md |
| +++ b/docs/superpowers/notes/census-proposal-self-serve-moves-2.md |
| @@ -27,3 +27,5 @@ Task 10a fix round 1 adds two test seams to the agent's own code and re-pins thr |
| Task 5 (record eligibility, the split start validation, participant pinning, the self-serve door bodies and the view) adds no root read class or task. Six console units are new, each frozen accepted-legacy with a reviewed basis, and none reads a file; the scanner names them for sites that only look like reads. `Server.participantIdentityFor` reads the signed host roster (`hostactors.Directory.Read`: `control/host-actors.json` in the deployment bucket, verified under the release key) so a self-serve participant's identity record is checked against it; an absent roster is no entries, any other failure refuses. `Server.selfServeEstimate` reads the request's URL query. `selfServeBusy`'s one site is `rec.ActiveRun.Open()`, a method of the record already read, as `offlineBegin`'s is. `Server.estimate`, `type estimateTerms` and `var estimateDefaults` are the estimate's arithmetic and its terms: their sites are the `Open` term, a struct field named `Open` (Task 9's shape). Four units are re-pinned: `Server.handleAPIInstanceMoveStatus` (with Phase 1 off on a claims-off console the poll joins the instance's self-serve rows from the console SQLite store and answers `?estimate=1` while the switch admits; its sites are unchanged in kind) and `Server.offlineClaimEvidence` (the census-ruling-moves-offline body unchanged, its inputs passed as account, app, host and record) in new Task 5 rows; `Store.AdmitSelfServeMove` (the row also stores the estimate) and `Store.RequestSelfServeAbort` (its predicate also requires `cut_requested_at = 0`) in place in their Task 4 rows. The door's other new reads are bucket objects read with the console's deployment credentials, which the scanner names no site for: the boxes' status reports (`status/boxes/<label>.json`, through `readOfflineFleet`, now with each report's time for pinning) and the boxes' identity records (`boxid.Load`, `control/boxes/<box id>.json`, keyed by the edges file's box id and never the label). The operator doors pin an instance id from a current status report and read no identity record. The seal moves to `6f975f90…`, and the internal/console envelope is re-pinned in place. In the record-write inventory nothing is added or changed: the request door's one write is the console SQLite row (`AdmitSelfServeMove`), the cut and cancel doors' are `MarkSelfServeCut` and `RequestSelfServeAbort`, and the record's queue write is the job's (Task 7). The operator start and stage doors' record writes are unchanged (`offlineBegin`, `offlineAdvanceBound`). Paul's ruling is still outstanding. |
| Task 5 fix round 1 adds no root read. `selfServeBusy` and `Server.selfServeEstimate` are re-pinned in place in their Task 5 rows: the record's checks (class, run, move) now come before the journal read, which moved into its own helper. Their sites are unchanged in kind, offsets moved. The seal moves to `ad120371…`, and the internal/console envelope is re-pinned in place. The other fixes of the round (operator selections reserve the sentinel outside self-serve mode, admission needs lifetimes on, the facts' order, the cancel of a returning move, and operator status views reading no identity) change no census unit's sites. The record-write inventory is unchanged. |
| + |
| +Task 5 fix round 2 adds no root read and moves no seal. `reserveBoxes` now accepts an operator operation's own reservation whatever its keys (entries it no longer wants stay held until the move's release removes every entry of its id; a sentinel it holds covers every box). Its one `Put` of `control/offline-moves/active.json` is unchanged, so in the record-write inventory it stays nonrecord (`sel:Put`) with a new digest. The internal/console root-read envelope is re-pinned in place. |
diff --git a/internal/provision/self_serve_moves2_census_test.go b/internal/provision/self_serve_moves2_census_test.go| index 6454bf894..5c26224e1 100644 |
| --- a/internal/provision/self_serve_moves2_census_test.go |
| +++ b/internal/provision/self_serve_moves2_census_test.go |
| @@ -136,7 +136,9 @@ func plan14SelfServeMoves2WriteCensusInventory() []censusEntry { |
| {"internal/provision/provision.go", "SetRecordMoveAt", "record-writer", "key:SetRecordMoveAt", "e818d6acd4429185c5fc11db4100a73b2d83409b9f6f32435e88aac7f9012f41"}, |
| {"internal/moves/offline.go", "OpenRecordKey", "key-site", "key:OpenRecordKey", "ebb4f0dcd050b5d183b642829423ba71740bf6d86427af2cba64475d54276be9"}, |
| {"internal/console/apiinstancemove_offline.go", "Server.offlineApplyBound", "record-writer", "key:SetRecordMoveAt", "039573bfd1f3ec621474e9c761f55ce301227d812f4dd6a7d206dad0c18b9980"}, |
| - {"internal/console/offlinereserve.go", "Server.reserveBoxes", "nonrecord", "sel:Put", "d8f9896e36b25b8dd9e2d25df30b3f2b01a08259a7ee1952299d4e1015bba48f"}, |
| + // Re-pinned by Task 5 fix round 2: an operator operation's own |
| + // reservation is accepted whatever its keys; the one Put is unchanged. |
| + {"internal/console/offlinereserve.go", "Server.reserveBoxes", "nonrecord", "sel:Put", "6dabc4ca621053e3e973a40c646e65ed48cc90f654e65981d963c57f8655b8e8"}, |
| {"internal/console/offlinereserve.go", "Server.releaseBoxes", "nonrecord", "sel:Put", "0d7cad2d3a92890c10d7a538784713124d3659d89c872e75fbc107bf96794751"}, |
| {"internal/console/selfserve_lease.go", "leaseToken.put", "nonrecord", "sel:Put", "e574640142eb930463ce8c4a91cd599857870311303072902ca8d98901d64fac"}, |
| {"internal/console/server.go", "NewServer", "key-site", "lit:instances", "4a3aea119aaef70a5eb1a0e0a01c47ea8f91b1f3b121bb209624d1752e0086e3"}, |
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 e80df05ea..620c11d16 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 f862a815e0c6ce1f97eefc7101584c19b1aa4c316fc28a235c62e2fdf77b92b6 |
| +@coverage internal/console bd5130702807fc15a9f66a7b41d00edc022a6088d96780ff5f140b26b37c0816 |
| @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 |
| @@ -170,3 +170,4 @@ internal/console/selfserve_estimate.go type estimateTerms legacy accepted-legacy |
| @legacy e7a1b4b8179de6b4d263f785208f5bad87eaa2ec4ff8eb07876e01f6034002a8 internal/console/selfserve_estimate.go var estimateDefaults legacy accepted-legacy accepted-legacy;rev3=PROPOSED-self-serve-moves-2;basis=console.service user carlos-console, J4 root-input: the estimate's default terms, a literal whose Open field is the open phase's term; no file read, no root action file:Open@247,file:Open@49 e7c598c8e4a4fa1e4df207e463c6fd722f89d0955f896baa439ce328db821849 |
| internal/console/selfserve_estimate.go var estimateDefaults legacy accepted-legacy accepted-legacy;rev3=PROPOSED-self-serve-moves-2;basis=console.service user carlos-console, J4 root-input: the estimate's default terms, a literal whose Open field is the open phase's term; no file read, no root action file:Open@247,file:Open@49 e7c598c8e4a4fa1e4df207e463c6fd722f89d0955f896baa439ce328db821849 |
| # Task 5 fix round 1, rev3=PROPOSED-self-serve-moves-2: selfServeBusy and Server.selfServeEstimate are re-pinned in place in their Task 5 rows (the record checks come before the journal read); no root read is added. The internal/console envelope is re-pinned in place. The seal moves. |
| +# Task 5 fix round 2, rev3=PROPOSED-self-serve-moves-2: reserveBoxes accepts an operator operation's own reservation whatever its keys; it reads no file, so no root read row changes and the seal stands. The internal/console envelope is re-pinned in place. |