v2.0.0-rc
Pre-release
Pre-release
Immutable
release. Only release title and notes can be modified.
2.0.0-rc (2026-07-06)
⚠ BREAKING CHANGES
- promote TableTheory product strengthening program
- py: the deprecated theorydb_py Python import package is removed in v2; consumers must import tabletheory_py.
- query: Go consumers must stop constructing pkg/query.MainExecutor, query.NewExecutor, or pkg/query.DynamoDBAPI directly; use DB.Model/tabletheory.Model flows for execution and query.UnmarshalItem(s) or NewWithClient plus pkg/testing/fakedb for tests.
- core: Go callers can no longer pass arbitrary opts ...any values to AutoMigrateWithOptions or CreateTable; use schema.AutoMigrateOption and schema.TableOption values or concrete slices.
- ts: TypeScript consumers must import FaceTheory ISR, release-state, and lease helpers from @theory-cloud/tabletheory-ts/facetheory, /release-state, and /lease; the root package now exposes only generic ORM APIs.
- py: Python consumers must import tabletheory_py as the canonical runtime package; theorydb_py is no longer the implementation package and remains only as a DeprecationWarning transition shim.
- ts: TypeScript now unmarshals DynamoDB N and NS values to canonical decimal strings by default; consumers that intentionally want historical JavaScript Number coercion must configure numberUnmarshalMode: 'number'.
- core: Go consumers must replace DB.Transaction, ExtendedDB.TransactionFunc, core.Tx, mocks, and pkg/testing helpers built around the non-atomic callback API with the DynamoDB-backed Transact()/TransactWrite transaction builder.
- Go writes now persist []byte and set-tagged numeric/binary slices as canonical DynamoDB B/NS/BS/NULL shapes and reject unsupported set element types. Legacy shape-driven reads remain, but consumers with raw filters or conditions over old list-shaped data may need backfill.
Features
- api: add typed API surfaces (b82860c)
- ci: adopt merge queue for protected branches (4cf17fb)
- cli: add DMS validate and codegen (990c07b)
- cli: add init scaffold command (d625d6e)
- cli: generate CDK table constructs from DMS (d220248)
- contract: add cross-runtime interop scenario support (509b103)
- contract: add GSI projection P1 scenarios (b058043)
- contract: add key-contract v0.2 transforms spec (338d8f3)
- contract: add naming and encryption parity scenarios (2cf26b6)
- contract: add native count P1 scenario (46ad3ca)
- contract: add optional get P1 scenario (70f4237)
- contract: add pagination cursor scenarios (c036ba5)
- contract: add query and scan ops to the scenario harness (f2d7f37)
- contract: add query semantics P1 scenarios (b351bcc)
- contract: add transaction and lazy iteration scenarios (49d7686)
- contract: add type matrix P0 scenario (87c852b)
- contract: add version-conflict error scenario (fc57f56)
- contract: generate runner models from DMS (6012701)
- contract: implement item_equals and cursor_equals assertions (af9d827)
- contract: pin exact number precision scenario (df1855e)
- core: remove non-atomic Transaction API in favor of Transact() (5241ba1)
- core: require typed schema options (9d86388)
- docs: generate API references from source (88c7d94)
- docs: ship generative-coding artifacts (feb423e)
- examples: add DynamoDB-Local variant to cdk-multilang (dcf1867)
- examples: add one-command Go local quickstart (35635a9)
- go: add injectable DynamoDB client constructor (9f4d17a)
- go: add state-backed DynamoDB fake (f36cc70)
- keycontract: implement v0.2 transforms across runtimes (041cc73)
- make: add rubric-fast contributor gate (579b0a7)
- promote TableTheory product strengthening program (5130b5d)
- py: add DMS equivalence gate (f169d2a)
- py: add native query and scan count (21b50d2)
- py: add optional get API (cb4c52d)
- py: add schema migration and transform support (7ef69c1)
- py: add stateful DynamoDB testkit fake (4616356)
- py: add tabletheory_py canonical import alias (58723c2)
- py: make tabletheory_py the canonical package (ea60a1a)
- py: remove legacy theorydb_py shim (2aa4a46)
- py: support Python 3.12+ (e1100ac)
- query: add optional first helper in Go (9b6eec3)
- query: remove deprecated MainExecutor (90997b4)
- query: use native DynamoDB count in Go (c2467dc)
- release: publish pip find-links index for Python releases (fe4ebbb)
- release: publish tabletheory CLI as a release asset (adf1e3d)
- ts: add DMS equivalence gate (688217c)
- ts: add domain subpath exports (eceff7a)
- ts: add exact number unmarshal mode (54ecfcc)
- ts: add native query and scan count (f6d2030)
- ts: add optional get API (66840a0)
- ts: add schema migration and transform support (6753cc5)
- ts: add stateful DynamoDB testkit fake (01c9e06)
- ts: declare AWS SDK clients as peer dependencies (0353a2f)
- ts: default to precision-safe number unmarshaling (7813d7e)
- ts: ground optimizer index selection (2f3af60)
- ts: move domain helpers to subpath exports (54d8cc0)
- ts: support Node 20 LTS and CommonJS consumers (5e039c9)
Bug Fixes
- ci: accept unnumbered release-please RC PRs (e5c26aa)
- ci: accept unnumbered release-please RC PRs (bfc8e52)
- ci: allow pinned runtime matrices in toolchain check (7285b0c)
- ci: select v2 verifiers for protected promotions (9e447d4)
- ci: select v2 verifiers for protected promotions (b8d3cd2)
- ci: support premain compatibility checks (dfdcf97)
- ci: support premain compatibility checks (5dd6bde)
- cli: show persisted version in Go scaffold (ed96d22)
- complete M6 review rework (1e866c8)
- contract: assert DynamoDB numbers as canonical decimal strings (e14c485)
- contract: fail closed on interop read assertions (929a101)
- contract: map encryption error codes in Go driver (85eeeea)
- contract: use consistent reads for raw-item assertions in all runners (3758b21)
- dms: align naming convention enum (8e76cdc)
- dms: make Python codegen dataclass ordering safe (0e7f7a4)
- go: classify AWS errors with errors.As (45efbf3)
- go: distinguish version conflict errors (0c83ff1)
- go: satisfy update executor lint (6718067)
- gov: store repo-relative evidence paths in rubric report (4684391)
- keep correctness-trap deprecations lint-clean (5c0052a)
- lambda: return cached init error instead of (nil, nil) after failed cold start (ad0837a)
- lambda: synchronize lambdaTimeoutBuffer access (ecd8e40)
- lambda: synchronize timeout buffer reads (353edb8)
- mocks: fail assertions instead of panicking on type mismatches (02bd5ec)
- model: improve tag validation diagnostics (efc8484)
- py: distinguish version conflict errors (cf76ce4)
- py: keep count helpers within size gate (96fb8e7)
- py: keep key contract exports lazy (961c10f)
- py: keep storage type helper typed for build verification (95a7dde)
- py: preserve legacy shims without wildcards (b29800a)
- py: reject unsupported union annotations and unify storage-type resolution (64c2ad1)
- query: keep native count gates green (9fbac15)
- release: accept release-please first RC publishing (e117879)
- release: accept release-please first RC publishing (0d0873e)
- release: read branch-sync JSON from git refs (c7da8e7)
- release: read branch-sync JSON from git refs (aec7779)
- release: tolerate Python version path transition (f698ffd)
- resolve PR export checks (9c7bee4)
- rubric: enforce generated model drift gate (8c1673d)
- testing: return explicit error from DefaultDBFactory instead of nil DB (a3bcb5b)
- transaction: document non-atomic DB.Transaction and deprecate in favor of Transact() (371cb04)
- ts: build package exports in unit test (2a9ebb1)
- ts: distinguish version conflict errors (e509a72)