db-region-forward: review brief for round 3
Lists findings 1 to 15 with rev 3's answer to each, and asks for a disposition table, an invariant-by-invariant check of §5.2, then only new findings.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 file changed,
+64
−46
docs/superpowers/specs/CODEX-REVIEW-BRIEF-DB-REGION-FORWARD.md+64 −46
CI passed — run details
CI log
=== gate ===
.amadan/test-gate.sh
=== launchctx (2 s)
ok amadan.net/carlos/platform.git/launchctx 0.024s
? amadan.net/carlos/platform.git/launchctx/controlname [no test files]
? amadan.net/carlos/platform.git/launchctx/wireid [no test files]
=== vet (28 s)
=== gofmt (0 s)
gofmt -l .: clean
=== rest (187 s)
? github.com/carlosframework/platform/cmd/changelog [no test files]
ok github.com/carlosframework/platform/cmd/console 6.116s
ok github.com/carlosframework/platform/cmd/moveprobe 13.826s
ok github.com/carlosframework/platform/cmd/zddprobe 0.927s
ok github.com/carlosframework/platform/internal/activator 61.589s
ok github.com/carlosframework/platform/internal/agentsock 0.188s
ok github.com/carlosframework/platform/internal/alerting 0.187s
ok github.com/carlosframework/platform/internal/analytics 0.120s
ok github.com/carlosframework/platform/internal/appconfig 4.189s
ok github.com/carlosframework/platform/internal/apperr 0.482s
ok github.com/carlosframework/platform/internal/applog 0.721s
ok github.com/carlosframework/platform/internal/awsinv 0.013s
ok github.com/carlosframework/platform/internal/boxchoice 0.014s
ok github.com/carlosframework/platform/internal/boxid 1.008s
? 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.029s
ok github.com/carlosframework/platform/internal/caps 0.040s
ok github.com/carlosframework/platform/internal/certwarm 0.008s
ok github.com/carlosframework/platform/internal/cgroup 1.031s
ok github.com/carlosframework/platform/internal/changelog 0.921s
ok github.com/carlosframework/platform/internal/claimactivation 2.592s
ok github.com/carlosframework/platform/internal/clamd 0.062s
? 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.568s
ok github.com/carlosframework/platform/internal/dbdoor/dbdoortest 0.103s
ok github.com/carlosframework/platform/internal/dbverify 0.010s
ok github.com/carlosframework/platform/internal/dnsrec 0.025s
ok github.com/carlosframework/platform/internal/docsite 0.055s
ok github.com/carlosframework/platform/internal/domains 4.610s
ok github.com/carlosframework/platform/internal/doorkey 0.024s
ok github.com/carlosframework/platform/internal/economics 0.025s
ok github.com/carlosframework/platform/internal/edge 46.424s
? github.com/carlosframework/platform/internal/edgeproof [no test files]
ok github.com/carlosframework/platform/internal/edgesfile 0.022s
ok github.com/carlosframework/platform/internal/fleetapi 0.213s
ok github.com/carlosframework/platform/internal/gate 1.763s
ok github.com/carlosframework/platform/internal/genselect 0.022s
ok github.com/carlosframework/platform/internal/geo 0.029s
ok github.com/carlosframework/platform/internal/geoip 0.090s
ok github.com/carlosframework/platform/internal/historyreadback 0.395s
ok github.com/carlosframework/platform/internal/host 147.727s
ok github.com/carlosframework/platform/internal/hostactors 5.735s
ok github.com/carlosframework/platform/internal/hostactors/awsmembership 0.006s
ok github.com/carlosframework/platform/internal/hostbox 3.245s
ok github.com/carlosframework/platform/internal/hostclaim 0.863s
ok github.com/carlosframework/platform/internal/hostenv 0.012s
ok github.com/carlosframework/platform/internal/hostevidence 0.014s
ok github.com/carlosframework/platform/internal/hostexec 5.639s
ok github.com/carlosframework/platform/internal/hostfence 0.057s
ok github.com/carlosframework/platform/internal/hostfiles 10.400s
ok github.com/carlosframework/platform/internal/hostfloor 0.017s
ok github.com/carlosframework/platform/internal/hostguard 1.111s
ok github.com/carlosframework/platform/internal/hostops 2.183s
? github.com/carlosframework/platform/internal/hostops/fencerelease [no test files]
ok github.com/carlosframework/platform/internal/hostops/internal/fencerelease 0.004s
ok github.com/carlosframework/platform/internal/hostquarantine 0.003s
ok github.com/carlosframework/platform/internal/hostrelocate 0.697s
ok github.com/carlosframework/platform/internal/hostresolve 0.231s
ok github.com/carlosframework/platform/internal/hostwrite 0.003s
ok github.com/carlosframework/platform/internal/infraview 0.003s
ok github.com/carlosframework/platform/internal/instancectl 5.257s
ok github.com/carlosframework/platform/internal/instanceexec 2.796s
ok github.com/carlosframework/platform/internal/instancefs 0.025s
ok github.com/carlosframework/platform/internal/instancekey 0.019s
ok github.com/carlosframework/platform/internal/instanceupdates 0.021s
ok github.com/carlosframework/platform/internal/layout 1.898s
ok github.com/carlosframework/platform/internal/lbhealth 0.020s
ok github.com/carlosframework/platform/internal/lease 10.264s
ok github.com/carlosframework/platform/internal/lease/leasetest 0.688s
ok github.com/carlosframework/platform/internal/ledger 0.031s
ok github.com/carlosframework/platform/internal/mail 0.294s
ok github.com/carlosframework/platform/internal/maintenance 0.104s
ok github.com/carlosframework/platform/internal/maintenanceexec 5.603s
ok github.com/carlosframework/platform/internal/maintenanceguard 0.100s
ok github.com/carlosframework/platform/internal/metrics 0.005s
ok github.com/carlosframework/platform/internal/moves 24.840s
ok github.com/carlosframework/platform/internal/moves/archive 1.129s
ok github.com/carlosframework/platform/internal/objstore 0.315s
ok github.com/carlosframework/platform/internal/ops 0.215s
ok github.com/carlosframework/platform/internal/park 0.317s
ok github.com/carlosframework/platform/internal/plans 0.009s
ok github.com/carlosframework/platform/internal/privatefile 0.005s
ok github.com/carlosframework/platform/internal/provision 26.896s
ok github.com/carlosframework/platform/internal/publicrelease 0.011s
? github.com/carlosframework/platform/internal/regionname [no test files]
ok github.com/carlosframework/platform/internal/registry 5.814s
ok github.com/carlosframework/platform/internal/relay 7.270s
ok github.com/carlosframework/platform/internal/release 30.050s
ok github.com/carlosframework/platform/internal/rollout 3.896s
ok github.com/carlosframework/platform/internal/rolloutwords 0.007s
ok github.com/carlosframework/platform/internal/rootaws 0.017s
ok github.com/carlosframework/platform/internal/rootparticipation 0.064s
ok github.com/carlosframework/platform/internal/rootstate 0.029s
ok github.com/carlosframework/platform/internal/runs 0.550s
ok github.com/carlosframework/platform/internal/s3compat 0.007s
ok github.com/carlosframework/platform/internal/safefile 0.006s
ok github.com/carlosframework/platform/internal/schedule 2.855s
ok github.com/carlosframework/platform/internal/seeds 0.011s
ok github.com/carlosframework/platform/internal/sim/engines 2.883s
ok github.com/carlosframework/platform/internal/sim/hostlife 17.178s
ok github.com/carlosframework/platform/internal/sim/litestreamfacts 3.498s
ok github.com/carlosframework/platform/internal/status 0.081s
ok github.com/carlosframework/platform/internal/steering 0.008s
ok github.com/carlosframework/platform/internal/stopevidence 0.331s
ok github.com/carlosframework/platform/internal/svcrole 0.002s
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.002s
ok github.com/carlosframework/platform/internal/vet 1.685s
=== internal_console@0 (87 s)
ok github.com/carlosframework/platform/internal/console 85.177s
=== internal_console@1 (37 s)
ok github.com/carlosframework/platform/internal/console 35.322s
=== internal_console@2 (44 s)
ok github.com/carlosframework/platform/internal/console 41.691s
=== internal_console@3 (39 s)
ok github.com/carlosframework/platform/internal/console 36.595s
=== internal_console@4 (40 s)
ok github.com/carlosframework/platform/internal/console 37.800s
=== internal_console@5 (43 s)
ok github.com/carlosframework/platform/internal/console 40.565s
=== internal_console@6 (46 s)
ok github.com/carlosframework/platform/internal/console 43.416s
=== internal_console@7 (45 s)
ok github.com/carlosframework/platform/internal/console 43.018s
=== root@0 (36 s)
ok github.com/carlosframework/platform 34.259s
=== root@1 (46 s)
ok github.com/carlosframework/platform 44.830s
=== root@2 (45 s)
ok github.com/carlosframework/platform 43.542s
=== 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: downloading https://github.com/minio/minio/releases/download/RELEASE.2025-09-07T16-13-09Z/minio.linux-arm64.RELEASE.2025-09-07T16-13-09Z
minio: downloaded, digest verified
mc: downloading https://github.com/minio/mc/releases/download/RELEASE.2025-08-13T08-35-41Z/mc.linux-arm64.RELEASE.2025-08-13T08-35-41Z
mc: downloaded, 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.03s)
--- 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.02s)
--- 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.035s
=== RUN TestT4StorageProbeMinio
2026/10/22 11:43:02 moves: T4: STORE: list: operation error S3: ListObjectsV2, https response error StatusCode: 403, RequestID: 18E0D74E40DFE509, 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.032s
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 16add9656..e3d48cc88 100644 |
| --- a/docs/superpowers/specs/CODEX-REVIEW-BRIEF-DB-REGION-FORWARD.md |
| +++ b/docs/superpowers/specs/CODEX-REVIEW-BRIEF-DB-REGION-FORWARD.md |
| @@ -7,49 +7,67 @@ 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 2 |
| - |
| -This is round 2. Rev 2 of the spec answers your round 1 findings, |
| -`docs/superpowers/specs/CODEX-FINDINGS-DB-REGION-FORWARD.md` (reviewed at |
| -`a12757a1`). Each change is marked **(codex N)** where it lands, and §18 |
| -gives the reasons for the two parts that were declined. |
| - |
| -| # | Round 1 finding | Spec's answer | |
| -|---|---|---| |
| -| 1 | P1: the incarnation check does not cover the replica reads | accepted in part: the identity bracket, §8.2 (checks A and B around the download; no output before B). Version pinning declined, §18 | |
| -| 2 | `Accept=yes` does not put the connection on stdin | accepted: `StandardInput=socket`, `StandardOutput=socket`, `StandardError=journal`, §8.3 | |
| -| 3 | progress acks indistinguishable from the final ack | accepted: separate `ack` and `done` routes; `done` carries the result's SHA-256, §5.4, §9.1 | |
| -| 4 | a lost result does not stop a late writer | accepted: heartbeat removed; a box deadline in `picked`, a 60 s bound on each PUT, and a fence before `lost`, §5.8 | |
| -| 5 | immediate cleanup reopens the election | accepted: `picked` is a tombstone kept until the read has ended and the acceptance window has passed, §5.8, §5.9 | |
| -| 6 | the CLI cannot promise it showed none of a rejected answer | accepted: the CLI buffers up to 64 MiB and writes nothing until the summary checks out, §5.4 | |
| -| 7 | the window does not bound stored ciphertext | accepted: acknowledged chunks are deleted on each progress ack, §5.7 | |
| -| 8 | disk checks can spend the same space twice | accepted: one reservation table in the agent; restart waits for old workers, §5.7 | |
| -| 9 | a socket inode does not prove a worker can run | accepted: capability from the armed loop and a readiness probe through the real units, §7.1 | |
| -| 10 | snapshot-load failure is not in the error return | accepted: refuse up front only on `Complete` and `BoxesComplete` evidence, §7.1 | |
| -| 11 | separate regional store servers need per-store endpoints | accepted in part: the overclaim is withdrawn and the supported shape stated, §12. Per-store endpoints declined, §18 | |
| -| 12 | "non-root" is not a census class; the runner stays CLI-reachable | accepted: a class per declaration with both callers named, §13 | |
| - |
| -Rev 2 also folds in the coordinator's provisional answers to rev 1's open |
| -questions (§16). They await Paul. Do not argue them; report only a |
| -mechanism that fails to honour one. |
| - |
| -**Start with a disposition table** for findings 1 to 12: fixed, declined |
| -with an acceptable reason, or not fixed. Check each answer against the code, |
| -not against the spec's summary of it. Then give **only new findings**. Do |
| -not repeat a round 1 finding unless its fix is wrong or incomplete; then |
| -say so in the table and give the new evidence. |
| - |
| -Worth extra attention in round 2, because rev 2 added them: |
| - |
| -- the write fence (§5.8): can any box write land after the console's |
| - `lost`, given clock skew and the SDK's retry behaviour inside a 60 s |
| - PUT timeout? |
| -- the tombstone's deletion rule against a read that runs the full 20 |
| - minutes; |
| -- the reservation table across an agent restart (§5.7); |
| -- the readiness probe: what it proves, and whether a probe can itself be |
| - abused or leak a worker; |
| -- the worker protocol's `ready` and `run` split (§8.2, §8.3). |
| +## 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 | |
| +|---|---|---|---| |
| +| 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 | |
| + |
| +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 |
| +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 |
| + 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. |
| +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. |
| ## Fixed rulings: do not re-argue them |
| @@ -179,6 +197,6 @@ A numbered list of findings. Each one gives: |
| Then a one-line verdict: accept, or revise. Do not rewrite the spec. No |
| praise. |
| -On a later round you will be given your earlier findings files. Start with a |
| -disposition table (finding: fixed, declined with an acceptable reason, or not |
| -fixed), then give only new findings. |
| +On every round after the first, follow the three-part answer in the round |
| +section at the top: the disposition table, the invariant check, then only |
| +new findings. |