db-region-forward: review brief for round 4
Lists findings 1 to 18 with rev 4's answer, asks for the disposition table, a check of invariants J1 to J5 with the long-request timeouts first, then only new findings.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 file changed,
+71
−48
docs/superpowers/specs/CODEX-REVIEW-BRIEF-DB-REGION-FORWARD.md+71 −48
CI passed — run details
CI log
=== gate ===
.amadan/test-gate.sh
=== launchctx (0 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 (1 s)
=== gofmt (0 s)
gofmt -l .: clean
=== rest (143 s)
? github.com/carlosframework/platform/cmd/changelog [no test files]
ok github.com/carlosframework/platform/cmd/console 3.869s
ok github.com/carlosframework/platform/cmd/moveprobe 11.952s
ok github.com/carlosframework/platform/cmd/zddprobe 0.760s
ok github.com/carlosframework/platform/internal/activator 59.980s
ok github.com/carlosframework/platform/internal/agentsock 0.030s
ok github.com/carlosframework/platform/internal/alerting 0.006s
ok github.com/carlosframework/platform/internal/analytics 0.045s
ok github.com/carlosframework/platform/internal/appconfig 3.076s
ok github.com/carlosframework/platform/internal/apperr 0.208s
ok github.com/carlosframework/platform/internal/applog 0.462s
ok github.com/carlosframework/platform/internal/awsinv 0.008s
ok github.com/carlosframework/platform/internal/boxchoice 0.008s
ok github.com/carlosframework/platform/internal/boxid 1.069s
? 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.011s
ok github.com/carlosframework/platform/internal/caps 0.013s
ok github.com/carlosframework/platform/internal/certwarm 0.004s
ok github.com/carlosframework/platform/internal/cgroup 0.778s
ok github.com/carlosframework/platform/internal/changelog 0.531s
ok github.com/carlosframework/platform/internal/claimactivation 1.419s
ok github.com/carlosframework/platform/internal/clamd 0.069s
? 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.214s
ok github.com/carlosframework/platform/internal/dbdoor/dbdoortest 0.013s
ok github.com/carlosframework/platform/internal/dbverify 0.010s
ok github.com/carlosframework/platform/internal/dnsrec 0.003s
ok github.com/carlosframework/platform/internal/docsite 0.009s
ok github.com/carlosframework/platform/internal/domains 3.210s
ok github.com/carlosframework/platform/internal/doorkey 0.008s
ok github.com/carlosframework/platform/internal/economics 0.006s
ok github.com/carlosframework/platform/internal/edge 45.635s
? 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.167s
ok github.com/carlosframework/platform/internal/gate 1.901s
ok github.com/carlosframework/platform/internal/genselect 0.041s
ok github.com/carlosframework/platform/internal/geo 0.012s
ok github.com/carlosframework/platform/internal/geoip 0.037s
ok github.com/carlosframework/platform/internal/historyreadback 0.279s
ok github.com/carlosframework/platform/internal/host 140.456s
ok github.com/carlosframework/platform/internal/hostactors 6.537s
ok github.com/carlosframework/platform/internal/hostactors/awsmembership 0.007s
ok github.com/carlosframework/platform/internal/hostbox 3.458s
ok github.com/carlosframework/platform/internal/hostclaim 0.912s
ok github.com/carlosframework/platform/internal/hostenv 0.005s
ok github.com/carlosframework/platform/internal/hostevidence 0.008s
ok github.com/carlosframework/platform/internal/hostexec 5.812s
ok github.com/carlosframework/platform/internal/hostfence 0.045s
ok github.com/carlosframework/platform/internal/hostfiles 10.279s
ok github.com/carlosframework/platform/internal/hostfloor 0.031s
ok github.com/carlosframework/platform/internal/hostguard 1.056s
ok github.com/carlosframework/platform/internal/hostops 2.438s
? 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.004s
ok github.com/carlosframework/platform/internal/hostrelocate 0.652s
ok github.com/carlosframework/platform/internal/hostresolve 0.245s
ok github.com/carlosframework/platform/internal/hostwrite 0.015s
ok github.com/carlosframework/platform/internal/infraview 0.017s
ok github.com/carlosframework/platform/internal/instancectl 5.271s
ok github.com/carlosframework/platform/internal/instanceexec 2.831s
ok github.com/carlosframework/platform/internal/instancefs 0.005s
ok github.com/carlosframework/platform/internal/instancekey 0.003s
ok github.com/carlosframework/platform/internal/instanceupdates 0.009s
ok github.com/carlosframework/platform/internal/layout 2.034s
ok github.com/carlosframework/platform/internal/lbhealth 0.004s
ok github.com/carlosframework/platform/internal/lease 10.265s
ok github.com/carlosframework/platform/internal/lease/leasetest 0.630s
ok github.com/carlosframework/platform/internal/ledger 0.029s
ok github.com/carlosframework/platform/internal/mail 0.243s
ok github.com/carlosframework/platform/internal/maintenance 0.081s
ok github.com/carlosframework/platform/internal/maintenanceexec 5.606s
ok github.com/carlosframework/platform/internal/maintenanceguard 0.141s
ok github.com/carlosframework/platform/internal/metrics 0.008s
ok github.com/carlosframework/platform/internal/moves 21.816s
ok github.com/carlosframework/platform/internal/moves/archive 1.129s
ok github.com/carlosframework/platform/internal/objstore 0.318s
ok github.com/carlosframework/platform/internal/ops 0.267s
ok github.com/carlosframework/platform/internal/park 0.308s
ok github.com/carlosframework/platform/internal/plans 0.007s
ok github.com/carlosframework/platform/internal/privatefile 0.007s
ok github.com/carlosframework/platform/internal/provision 14.135s
ok github.com/carlosframework/platform/internal/publicrelease 0.009s
? github.com/carlosframework/platform/internal/regionname [no test files]
ok github.com/carlosframework/platform/internal/registry 5.762s
ok github.com/carlosframework/platform/internal/relay 7.236s
ok github.com/carlosframework/platform/internal/release 25.649s
ok github.com/carlosframework/platform/internal/rollout 3.892s
ok github.com/carlosframework/platform/internal/rolloutwords 0.007s
ok github.com/carlosframework/platform/internal/rootaws 0.008s
ok github.com/carlosframework/platform/internal/rootparticipation 0.065s
ok github.com/carlosframework/platform/internal/rootstate 0.031s
ok github.com/carlosframework/platform/internal/runs 0.581s
ok github.com/carlosframework/platform/internal/s3compat 0.006s
ok github.com/carlosframework/platform/internal/safefile 0.006s
ok github.com/carlosframework/platform/internal/schedule 2.810s
ok github.com/carlosframework/platform/internal/seeds 0.017s
ok github.com/carlosframework/platform/internal/sim/engines 2.971s
ok github.com/carlosframework/platform/internal/sim/hostlife 11.668s
ok github.com/carlosframework/platform/internal/sim/litestreamfacts 3.509s
ok github.com/carlosframework/platform/internal/status 0.082s
ok github.com/carlosframework/platform/internal/steering 0.008s
ok github.com/carlosframework/platform/internal/stopevidence 0.262s
ok github.com/carlosframework/platform/internal/svcrole 0.004s
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.005s
ok github.com/carlosframework/platform/internal/unixdial 0.006s
ok github.com/carlosframework/platform/internal/updatewords 0.006s
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.691s
=== internal_console@0 (86 s)
ok github.com/carlosframework/platform/internal/console 83.835s
=== internal_console@1 (35 s)
ok github.com/carlosframework/platform/internal/console 32.786s
=== internal_console@2 (41 s)
ok github.com/carlosframework/platform/internal/console 39.679s
=== internal_console@3 (36 s)
ok github.com/carlosframework/platform/internal/console 34.678s
=== internal_console@4 (39 s)
ok github.com/carlosframework/platform/internal/console 36.600s
=== internal_console@5 (40 s)
ok github.com/carlosframework/platform/internal/console 37.876s
=== internal_console@6 (42 s)
ok github.com/carlosframework/platform/internal/console 39.949s
=== internal_console@7 (42 s)
ok github.com/carlosframework/platform/internal/console 40.439s
=== root@0 (33 s)
ok github.com/carlosframework/platform 31.004s
=== root@1 (45 s)
ok github.com/carlosframework/platform 42.755s
=== root@2 (42 s)
ok github.com/carlosframework/platform 40.535s
=== 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: 50069666 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.027s
=== RUN TestT4StorageProbeMinio
2026/10/22 11:54:07 moves: T4: STORE: list: operation error S3: ListObjectsV2, https response error StatusCode: 403, RequestID: 18E0D7E902DF71D8, 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.023s
minio contract: PASS
diff --git a/docs/superpowers/specs/CODEX-REVIEW-BRIEF-DB-REGION-FORWARD.md b/docs/superpowers/specs/CODEX-REVIEW-BRIEF-DB-REGION-FORWARD.md| index e3d48cc88..e96d36109 100644 |
| --- a/docs/superpowers/specs/CODEX-REVIEW-BRIEF-DB-REGION-FORWARD.md |
| +++ b/docs/superpowers/specs/CODEX-REVIEW-BRIEF-DB-REGION-FORWARD.md |
| @@ -7,39 +7,46 @@ yet; you are reviewing the design against the code on `main`. |
| **Spec:** `docs/superpowers/specs/2026-10-22-db-region-forward-design.md`, |
| at the commit named in the prompt. Read `AGENTS.md` first. |
| -## Round 3 |
| - |
| -This is round 3. Rev 3 of the spec answers your round 2 findings, |
| -`docs/superpowers/specs/CODEX-FINDINGS-DB-REGION-FORWARD-R2.md` (reviewed |
| -at `8c118ae7`). Your round 1 findings are in |
| -`CODEX-FINDINGS-DB-REGION-FORWARD.md`. Each change is marked |
| -**(codex N)** where it lands, and §18 records what was declined. |
| - |
| -Rounds 1 and 2 kept finding defects in one area: which object ends a read, |
| -and who deletes what when. Rev 3 does not patch those cases one by one. It |
| -states the lifecycle as seven invariants (§5.2, I1 to I7) and builds the |
| -simplest mechanism that keeps them: every protocol object is a create-only |
| -write under `db-reads/`, nothing in the protocol replaces or deletes |
| -anything, one create-only `result.json` decides how a read ended, and a |
| -bucket lifecycle rule expires everything. |
| - |
| -| # | Finding | Round 2 said | Rev 3's answer | |
| +## Round 4 |
| + |
| +This is round 4. Rev 4 of the spec answers your round 3 findings, |
| +`docs/superpowers/specs/CODEX-FINDINGS-DB-REGION-FORWARD-R3.md` (reviewed |
| +at `20524df4`). Rounds 1 and 2 are in `CODEX-FINDINGS-DB-REGION-FORWARD.md` |
| +and `-R2.md`. Each change is marked **(codex N)** where it lands, and §18 |
| +records what was declined. |
| + |
| +Every round so far found defects from one source: a read was a durable, |
| +resumable object with its own lifecycle (follow, cancel, lazy expiry, |
| +console-written `lost` and `expired`, admission that outlived the |
| +request). Rev 4 removes that lifecycle. **A forwarded read is one |
| +synchronous HTTP request** (§5.2): the CLI's request stays open for the |
| +whole read, the console waits on the box's objects inside it and streams |
| +them back as newline-delimited JSON, and when the request ends the read is |
| +over for everyone. There is no follow route, no cancel route, no |
| +console-written `picked`, `lost` or `expired`, and the store's lifecycle |
| +rule is the only deletion. Rev 3's seven invariants are replaced by five, |
| +J1 to J5 (§5.3). |
| + |
| +| # | Finding | Round 3 said | Rev 4's answer | |
| |---|---|---|---| |
| -| 1 | incarnation check does not cover the replica reads | fixed; pinning decline agreed | unchanged, §8.2 | |
| -| 2 | `Accept=yes` does not put the connection on stdin | fixed | unchanged, §8.3 | |
| -| 3 | progress ack indistinguishable from the final ack | fixed | superseded: no acks at all (I1, I4), §5.2, §9.1 | |
| -| 4 | late writes after `lost` | partly | I4 and I5: `lost` is a conditional create of `result.json`, so storage decides between it and a late box result; late chunks are never accepted, §5.2, §5.8 | |
| -| 5 | cleanup reopens the election | fixed | `picked` is never deleted by the protocol (I1, I2) | |
| -| 6 | the CLI cannot promise it showed none | fixed | unchanged, §5.5 | |
| -| 7 | the window does not bound stored ciphertext | partly | I1 and I2: no deletes; the lifecycle rule expires current and noncurrent versions; the bound is restated as at most the output cap per read for at most two days, §5.7. This invalidates the bound in provisional ruling 1, which §16 flags for re-confirmation | |
| -| 8 | disk reservations | partly | the two-minute escape is gone; a reservation is released only when the worker unit has stopped; the agent admits nothing while an orphan worker unit is active; the worker cancels its work on EOF, §5.7, §8.3 | |
| -| 9 | worker readiness | partly | `MaxConnections=3`: two reads and one connection kept for the probe; a blocked probe is skipped, not failed, §7.1, §8.3 | |
| -| 10 | incomplete snapshot evidence | partly | incomplete evidence (either flag false) is checked first and admits; DBF-1 and DBF-2 both need `Complete` and `BoxesComplete`, §7.1 | |
| -| 11 | separate store endpoints | decline agreed | unchanged, §12, §18 | |
| -| 12 | census classifications | fixed | unchanged apart from the new sites, §13 | |
| -| 13 | completion deletes the evidence that a read ended | new | I1 and I4: nothing is deleted on completion; the result stays until expiry, §5.2 | |
| -| 14 | cleanup removes the identity needed to follow | new | I1, I2 and I6: the request lives as long as every other object of the read, §5.2, §5.3 | |
| -| 15 | the full db gate on follow routes hides `record-changed` | new | two gates: only create reads the current record; follow and cancel check membership and the signed request, §9.1 | |
| +| 1 | incarnation check | fixed; pinning decline agreed | unchanged, §8.2 | |
| +| 2 | socket on stdin | fixed | unchanged, §8.3 | |
| +| 3 | progress versus completion ack | fixed | removed by the synchronous design | |
| +| 4 | late writes after `lost` | fixed | removed by the synchronous design: the console never writes `lost` | |
| +| 5 | cleanup reopens the election | fixed | J2, J4 | |
| +| 6 | "showed none" | fixed | unchanged; a response that ends without a result also prints nothing, §5.5 | |
| +| 7 | stored-ciphertext bound | partly | J4 with an honest timing statement and no hard bound, §5.7; ruling 1's bound flagged for Paul, §16 | |
| +| 8 | disk reservations | fixed | unchanged, and `CheckDBContext` named, §8.3 | |
| +| 9 | worker readiness | fixed | unchanged | |
| +| 10 | snapshot evidence | fixed | unchanged | |
| +| 11 | separate store endpoints | decline agreed | unchanged | |
| +| 12 | census | fixed | updated for one route and no delete site, §13 | |
| +| 13 | completion deletes terminal evidence | partly | removed by the synchronous design: nothing needs the evidence after the request ends | |
| +| 14 | cleanup removes follow identity | partly | removed by the synchronous design: there is no follow | |
| +| 15 | full db gate on follow routes | fixed | removed by the synchronous design: one route, one gate at the start, `record-changed` in the same response | |
| +| 16 | lazy expiry strands a read | new | removed by the synchronous design (the console writes no `picked` or result); J3's read-back for a box's ambiguous `picked`, §5.4 | |
| +| 17 | abandoned reads hold admission | new | J5: the console's counts are released by the handler's return, §5.7 | |
| +| 18 | the forgery claim contradicts sealing | new | withdrawn; §5.6 states the trust boundary plainly | |
| The provisional rulings in §16 await Paul. Do not argue them; report only |
| a mechanism that fails to honour one. Ruling 1's bound is flagged by the |
| @@ -47,24 +54,29 @@ spec itself; you need not report it again. |
| **Your answer has three parts, in this order.** |
| -1. **A disposition table** for findings 1 to 15: fixed, declined with an |
| +1. **A disposition table** for findings 1 to 18: fixed, declined with an |
| acceptable reason, or not fixed. Check each answer against the code, not |
| against the spec's summary of it. |
| -2. **An invariant check.** For each of I1 to I7 in §5.2: does every |
| - mechanism in the spec keep it (name any write, delete, route or timer |
| - that breaks it, with the section), and does the "closed by" table in |
| - §5.2 hold, finding by finding? Look in particular for: |
| - - any protocol path that still deletes or replaces an object, including |
| - the housekeeping pass and its boundary with the protocol; |
| - - any way two parties both believe they own a read or ended it; |
| - - whether `expired` and `lost` created lazily on follow calls can be |
| - missed, doubled or created against a read that is still being picked; |
| - - whether conditional creates behave as the spec needs on S3 and on |
| - MinIO, including a create whose answer is lost, and the box's |
| - read-back rule in §5.3; |
| - - whether the queue under `db-reads/queue/<region>/<hour>/` can make a |
| - box miss a read across an hour boundary or a clock skew; |
| - - whether the storage bound in §5.7 is now true on a versioned bucket. |
| +2. **An invariant check.** For each of J1 to J5 in §5.3: does every |
| + mechanism in the spec keep it (name any write, route, timer or state |
| + that breaks it, with the section), and does the mapping table in §5.3 |
| + hold, finding by finding? Look in particular for: |
| + - **the long request.** §5.2 claims that nothing on the real path (the |
| + edge's public listeners and reverse proxies, the console's |
| + `http.Server` with its 5-minute `ReadTimeout`, the CLI's clients) |
| + cuts a request of up to 22 minutes, and that the console can lift its |
| + read deadline per request as the import door does. Check each number |
| + and line it cites, and Go's actual `ReadTimeout` behaviour once a |
| + handler has read its body. Name any timeout the spec missed; |
| + - anything on the console side that outlives the request (J1), or an |
| + admission count released anywhere but the handler's return (J5); |
| + - any protocol delete or replacing write (J2, J4); |
| + - the box's `picked` read-back rule (J3) against a create whose answer is |
| + lost on S3 and on MinIO; |
| + - whether a box that keeps running after the console gave up can harm a |
| + later read, a later request with the same envelope, or the disk; |
| + - whether the storage statement in §5.7 is now true, without a hard |
| + bound it cannot keep. |
| 3. **Only new findings.** Do not repeat an earlier finding unless its fix |
| is wrong or incomplete; then say so in the table and give the new |
| evidence. |
| @@ -120,6 +132,17 @@ for every claim about existing code. These are the places that matter. |
| precedent; |
| - `internal/appconfig/crypto.go`: the sealing construction the spec reuses. |
| +**The long request (round 4):** |
| + |
| +- `internal/edge/edge.go`: the public listeners (around lines 3188 and |
| + 3354) and `unixProxy` and `tcpProxy` (around line 2377); |
| +- `cmd/console/main.go`: the console's `http.Server` (around line 586); |
| +- `internal/console/apiinstanceimport.go`: the per-request read deadline |
| + (around line 479); |
| +- `auth.go` (the CLI's 30 s console client) and `apimode.go` (`shipTimeout`); |
| +- `internal/console/apidb.go`: `handleAPIDBGet` and `dbStream`, the |
| + streaming precedent. |
| + |
| **Boxes, capability and sandbox:** |
| - `internal/host/edgesfile.go` (capabilities), `movesoffline.go` and |