Skip to content

feat: enforce conditional entity mutations with record revisions - #138

Merged
rrrodzilla merged 9 commits into
mainfrom
feat/conditional-entity-mutations
Sep 7, 2026
Merged

feat: enforce conditional entity mutations with record revisions#138
rrrodzilla merged 9 commits into
mainfrom
feat/conditional-entity-mutations

Conversation

@rrrodzilla

Copy link
Copy Markdown
Contributor

Prepared PostgreSQL schemas can reject stale record updates and deletes using an opaque revision returned by authorized detail reads. Conditional mutations compare that revision atomically with persistence; ordinary writes also advance it so they invalidate old snapshots.

Preparation is explicit through apply --prepare-record-revisions. Unsupported or unprepared schemas refuse conditional writes. Authorization remains ahead of revision errors. The contract and rollout limitations are documented in docs/conditional-entity-mutations.md.

Validation: 664 Acton, 361 CLI, and 166 backend/PostgreSQL tests passed, plus both live PostgreSQL concurrency suites. Relevant Clippy checks passed without warnings, including MSSQL and SurrealDB. External MinIO cases remain separate. A PostgreSQL CI workflow covers preparation and HTTP/storage concurrency.

Stacked on metadata-only apply PR #137. Includes measured fixes for cached dynamic query shapes after DDL and NO_COLOR parsing. No registry release or production deployment is implied.

@rrrodzilla
rrrodzilla changed the base branch from fix/metadata-only-apply to main September 7, 2026 21:23
@rrrodzilla
rrrodzilla marked this pull request as ready for review September 7, 2026 21:23
Resolves the patch-handler conflict between the in-process constraint check (#133) and the conditional revision persist helper: the constraint check now runs before persist_entity_update, matching the replace path.
@rrrodzilla
rrrodzilla merged commit 3d5b9f6 into main Sep 7, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant