v0.27.0
Design guardrails distilled from the first full-pipeline reference run (an EC-order system exercising CRUD / application-driven 2PC / Saga / TCC / GraphQL end to end on ScalarDB 3.19). Each change encodes a defect class that run actually produced — 4 critical review findings, per-service codegen improvisations, and 3 contract gaps — so the next project is stopped at design time instead of at review.
Added
tools/validate-cross-references.py— mechanical cross-artifact lint (schema table counts, hand-written operation totals vs OpenAPI, problem-type slug/status registry consistency, phantom section references, namespace singular/plural variants), wired intodesign-api/design-scalardbcompletion. Field-validated: caught 19 genuine leftovers in the reference project, regression-tested.- Saga & TCC design checklists in
design-scalardb— durable co-committed start, enumeration index, leased recovery worker, pivot definition, EXECUTED-only idempotency guards; sweeper lease + checkpoint catch-up + clock-skew grace for expiring state. - Replay-authorization contract items in
design-api— replay-branch ownership predicate and principal-scoped idempotency-record table required per keyed operation;transaction-status-unknowndeclared on every ScalarDB-writing service. - Repository Exception Strategy section in
design-implementation; mandatory deprecation check ingenerate-scalardb-code; revision-propagation check (Step 5) inreview-synthesizer.
Fixed
rules/scalardb-2pc-patterns.mdstale for 3.19 (shipped once as SDB-101):validate()is required whenever SERIALIZABLE on 3.19+ (serializable_strategyno longer exists); the application-driven 2PC surface is recorded as@Deprecatedon 3.19+ with the obligations a deliberate adoption carries.rules/api-error-standard.md§3.1: unknown-status txId accessor keyed to the pinned release (3.19:getTransactionId()).- 2PC code-pattern templates: mandatory deprecation check; version-dependent validate() rule.
Full details: CHANGELOG.md / CHANGELOG_ja.md.
🤖 Generated with Claude Code