Repository navigation
Conversation
The acknowledgement names a table, but on the declarative front door the derived plan decides how many fenced copies block its writes, and a value left on an embedder's configuration would take the table offline for every later plan.
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. |
|
🤖 Correctness review on Jash's behalf at head 641a009. Verdict: no concrete blocker found in the full diff; surrounding-source and local-test verification are incomplete. The CLI rejects the combination and RunDesired returns the typed ErrBlockWritesNotSupported before diffplan.Plan. The nil-pool test meaningfully checks that the library refusal happens before database work. Moving desired-state copy tests to logical decoding preserves coverage for the newly required live path; imperative block-writes behavior is unchanged by the shown implementation.
Verification: read the description, all diff hunks, visible issue comments and current check results. All 16 checks succeeded, including PostgreSQL 14–18. I did not run a local build or tests. Exact-head surrounding-source API reads failed to connect, so unchanged command wiring, helpers, repository instructions outside the diff, and inline review threads were not independently verified. Generated by Codex. |
|
🤖 Product review at 641a009. OSS adoption: The usage error explains why the combination is refused and gives an actionable imperative alternative. Help and copy-and-swap documentation describe the same restriction. This makes accepting each write outage explicit; automation using the old combination must change its invocation. SchemaBot integration: ErrBlockWritesNotSupported gives embedders an errors.Is target without parsing prose, and the refusal precedes planning. An adapter should surface it as a configuration refusal requiring operator action, rather than repeatedly retrying. I have not verified the downstream adapter's current mapping. Generated by Codex. |
|
🤖 Review 1/2 of 641a009: 0 blocking, 4 non-blocking. Inspected the full diff at The change is correct. Nothing here weakens a safety property: a desired-state run can no longer take a table offline, which is the safer direction. No entry in Non-blocking
Verified
This review was generated by Claude Code (claude-sonnet-5-5). |
|
🤖 Review 2/2 of 641a009: 0 blocking, 2 non-blocking (the OSS adoption and integration lenses; the correctness review is the comment above). OSS adoption: what a first-time operator meetsThe usage error is the right shape: it says what is wrong, why (the plan decides how many copies run), and the command to run instead. The
Integration ease: schemabot and other importersSource-compatible and runtime-breaking, in the same way the
Verified
This review was generated by Claude Code (claude-sonnet-5-5). |
aparajon
left a comment
There was a problem hiding this comment.
🤖 Stamping with comments: 0 blocking, 6 non-blocking (see the two review comments above).
This stamp was left by Claude Code (claude-sonnet-5-5).
migrate --desiredandRunDesirednow reject the block-writes acknowledgement, so desired-state execution never takes a table offline for writes.Why
--block-writes SCHEMA.TABLEaccepts an outage: every write to the table fails with55006until the swap. Onmigrate --alterthe operator wrote the one statement that takes the copy, so they know what they are accepting. Onmigrate --desiredthe derived plan decides which statements take copy-and-swap, so a plan that retypes two columns runs two fenced copies, and the operator accepted an outage whose length they never saw. A library embedder that leavesBlockWritesset in its configuration would take the table offline for every later plan. This is the same reasoning that keeps--forceand--allow-destructiveoff the declarative front door: make mistakes hard to commit.What
migrate --desired --block-writes …is a usage error namingmigrate --alter --block-writesas the way to run offline.RunDesiredreturns the new sentinelErrBlockWritesNotSupportedbefore any database work.RunDesiredis gone, since that path is no longer reachable.--block-writeshelp,copy-and-swap.md,limitations.md, andschemabot-integration.md.Before / after
The same desired file retypes two columns of
public.orderson a server without logical decoding. Before, the operator's one table name authorized both fenced copies the planner chose; after, nothing runs, and the operator runs each retype themselves on the imperative front door.migrate --alter --block-writesis unchanged.