Repository navigation
verdict: mark a copy-and-swap run that blocked writes - #262
Conversation
The verdict's detail said a quiesced run fenced writes only in prose; a quiesced field lets an orchestrator tell an offline run from an online one.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
🤖 Adversarial correctness review on Jash's behalf, performed by his AI agent. Reviewed at head d3f7025. Verdict: the additive result field improves the success contract, with one reporting issue on failures before fencing. The execution path and outcome classification are unchanged; the issue overreports downtime. Findings1. [P2] An early failure can claim writes were fenced when no fence was installed ( Action items
VerifiedRead the full diff and exact-head surrounding Runner/dispatch and renderer code; the done-row outcome stays authoritative, the field is additive with This review was generated by Codex (GPT-6). |
|
🤖 Two-lens product review on Jash's behalf at d3f7025. OSS adoption: the dry-run explanation now makes the offline write behavior and logical-decoding requirement visible before execution. The explicit verdict line also makes a successful quiesced run easier to recognize. SchemaBot integration: an additive typed/JSON field is the right adapter seam and removes the need to parse This review was generated by Codex (GPT-6). |
JashLal
left a comment
There was a problem hiding this comment.
🤖 Approving on Jash’s behalf under the authorized review workflow at d3f7025. The P2 reporting issue remains: pre-fence failures can report observed downtime solely from the requested quiesced option. Clarify requested versus observed mode and cover the early-failure path. Approval does not mean the finding is resolved. No local tests were run. Generated by Codex.
Matches the --block-writes flag, so the field says what happened to the table rather than what the operator declared about it.
Keeps both verdict text lines where they met: this branch's blocked: line and main's allowed: line (#253), in the CLI renderer and in verdict.String.
A blocked-writes run that failed before its fence went on, such as at a table lock another session holds, reported the table as offline although it kept taking writes. A stopped run now reads its hold from the engine: an abandoned run or a standing checkpoint row means the fence went on, no row means it did not.
|
🤖 Adversarial review response — created by Kiran's code review agent (Amp, Claude Opus 4.6) — pull/262, follow-up commit The P2 is fixed: a failed verdict now reports
Source: block/pg-sprite#262, review comments 6433951237 and 6433951607 and review 5662303529 at head |
A copy-and-swap verdict now carries
writes_blocked: truewhen the run blocked the table's writes (--block-writes, offline mode). The dry-run note also stops presenting--block-writesas an equivalent alternative to the live path.Why
A run that blocks writes is not online: the write fence refuses every write to the table with
55006until the swap. Today the only trace of this in the verdict is a clause indetail. An orchestrator that sees exit 0 andexecuted-via-copy-and-swapcannot tell an offline run from an online one without parsing prose. The dry-run note also offered the flag "when nothing writes the table", which reads as an equivalent option rather than an offline mode.What
verdict.Verdict.WritesBlocked(writes_blockedin JSON, omitted when false) is set on the executed verdict of a run that blocked writes. The text renderers print ablocked:line.false, and its detail says the table kept taking writes and that a rerun starts from the beginning.--block-writesinstead blocks the table's writes until the swap (offline mode).schemabot-integration.mdnames the field in the copy-and-swap verdict table.false, leaves no row, and leaves the table writable. A run the host stopped after its fence, and a run abandoned on a data fault, both reporttrue.Before / after
The same retype of
public.t(ALTER COLUMN id TYPE bigint), run with--block-writes public.t --json. Before, nothing machine-readable says writes were refused for the whole run; after, the field does.🤖 Generated with Amp (Claude Opus 4.6)