Release v0.10.0
·
82 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
[0.10.0] - 2026-02-21
Features
- schema: Add namespaced key builders and GSI4 (#364) (0117576)
- schema: Add namespaced key builders and GSI4 (#374) (3bd748e)
- repository: Thread namespace_id through all call sites (#365) (91dba61)
- repository: Thread namespace_id through all call sites (#376) (3a3ca1e)
- aggregator: Extract namespace_id from stream record PKs (#367) (36a40d4)
- aggregator: Extract namespace_id from stream record PKs (#378) (2e5cb95)
- repository: Add RepositoryBuilder with namespace resolution and version management (31dc785)
- repository: Add GSI4 attributes on all creation paths (10a1a9e)
- models: Emit DeprecationWarning on StackOptions instantiation (c9f96bd)
- repository: Add on_unavailable to builder and namespace() (02f0af7)
- repository: Add parallel_mode() to SyncRepositoryBuilder (f64ffcc)
- repository: Add Builder pattern replacing StackOptions + with_options() (#379) (bbc8120)
- repository: Add namespace registry with concurrent bulk registration (#369) (7e355b0)
- repository,cli: Add namespace registry with DynamoDB records and CLI commands (#382) (d808008)
- cli: Add --namespace / -N flag to 17 data-access commands (#368) (8a98db7)
- cli: Add --namespace / -N flag to data-access commands (#383) (e5cd385)
- infra: Add namespace-scoped IAM policies with PrincipalTag conditions (#370) (86f7357)
- infra: Add namespace-scoped IAM policies with PrincipalTag conditions (#370) (#387) (1df0db4)
- repository: Add Repository.connect() factory classmethod (#381) (f363e69)
- cli: Migrate data-access commands to Repository.connect() (3f25c2c)
- repository: Add Repository.connect() factory classmethod (#381) (#402) (6b450ad)
- repository: Add Repository.connect() factory classmethod (#403) (55bb4c0)
- repository: Add Repository.open() unified entry point (#404) (b67b904)
- repository: Add Repository.open() unified entry point (#404) (#407) (32429c9)
- models: Add burst parameter to Limit factory methods (a51c4ce)
- cli: Support period suffix in -l flag syntax (c48d712)
- schema: Add sk_provisioner() key builder for #PROVISIONER record (#405) (34421d2)
- repository: Add get/put_provisioner_state() for declarative limits (#405) (1e5ef18)
- infra: Add LimitsManifest dataclass with YAML parsing (#405) (2083ed5)
- infra: Add diff engine for declarative limits provisioner (#405) (b8f8a0c)
- infra: Add applier module for declarative limits provisioner (#405) (9741dff)
- infra: Add Lambda handler for declarative limits provisioner (#405) (7213735)
- infra: Add Lambda builder for limits provisioner (#405) (5973283)
- infra: Add limits provisioner Lambda to CloudFormation template (#405) (e697c7b)
- infra: Deploy provisioner Lambda code alongside aggregator (#405) (b325fe2)
- cli: Add limits plan/apply/diff/cfn-template commands (#405) (aa3bfe4)
- cli: Auto-register namespace on first limits apply (#405) (1ab4654)
- infra: Add declarative limits management via YAML and Lambda provisioner (#405) (#409) (d4bf8e0)
Bug Fixes
- repository: Update archiver and remaining tests for namespaced keys (a2efd8f)
- test: Add namespace_id to integration test dataclass constructors (3040c80)
- repository: Version record uses RESERVED_NAMESPACE, remove strict_version/skip_version_check (1cf4913)
- repository: Remove skip_version_check from doctests and examples (abca7ef)
- repository: Copy parallel mode fields to SyncRepository.namespace() scoped repo (79de8f2)
- repository: Filter "purging" status in _resolve_namespace (34dd767)
- limiter: Forward deprecated params to repo + reset on_unavailable cache on invalidate (77b0a9a)
- docs: Split multi-import line to pass ruff E401 lint (f1d44c6)
- docs: Tag namespace migration examples as lint-only for doctest (4ce8cf0)
- test: Make namespace migration doc examples executable in doctest (3164a9b)
- test: Support RepositoryBuilder in doctest conftest (6dcdc56)
- test: Move pytest_plugins to root conftest (#170) (7f9e779)
- test: Integrate aiobotocore patch into mock_dynamodb fixture (#173) (a48271c)
- limiter: Reject namespace IDs starting with dash (#398) (5b21823)
- limiter: Reject namespace IDs starting with dash (#399) (fbb2896)
- test: Replace print-based warnings with warnings.warn in test cleanup (#175) (3c1729d)
- test: Replace print-based warnings with warnings.warn in test cleanup (#175) (#400) (8e129fe)
- limiter: Distinguish TransactionConflict from ConditionalCheckFailed in _commit_initial (#332) (25a50bb)
- limiter: Distinguish TransactionConflict from ConditionalCheckFailed in _commit_initial (#332) (#401) (f8582a0)
- test: Fix integration and doctest failures after connect() migration (8966b7c)
- test: Use constructor for CLI audit test to match CLI namespace (5ceca1c)
- test: Fix pagination mock passing fake ExclusiveStartKey to moto (a922164)
- test: Use opaque namespace ID in E2E usage snapshot items (c897641)
- ci: Make verify-sync-generated hook work in both CI and local environments (343927d)
- docs: Pass required limits arg to set_system_defaults() in examples (4ba6a45)
- test: Pass parallel_mode after open() since it's a sync-only constructor param (#404) (060e9eb)
- test: Inject parallel_mode into SyncRepository.open() via generator (#404) (d8ad337)
- docs: Correct CLI namespace note — open() auto-registers namespaces (#404) (7739654)
- cli: Mark unreachable _format_period fallback with pragma no cover (60a95fc)
- docs: Replace deprecated capacity= kwarg with positional arg in examples (960f040)
- docs: Avoid [:burst] pattern that triggers mkdocs-autorefs warning (c889d38)
- cli: Migrate connect() to open() after Repository API rename (#405) (49c7d7b)
- infra: Use RoleNameFormat for provisioner Lambda role (#405) (a3d2db6)
Revert
Documentation
- Migrate code examples to Repository-first pattern (#366) (1bab3aa)
- infra: Add namespace-scoped access control documentation (#370) (ed8d3ca)
- schema: Add namespace-prefixed keys migration guide (#371) (f4fc60f)
- schema: Clarify GSI4 empty backfill and UPDATING state (#371) (7efe9af)
- schema: Add namespace-prefixed keys migration guide (#371) (#391) (0858e59)
- Migrate to RepositoryBuilder API and add namespace documentation (#389) (6343a95)
- Update cost headline to $0.625/1M with $0 fast rejections (880873f)
- Fix verification gaps for namespace documentation (#389) (457afe4)
- Migrate to RepositoryBuilder API and add namespace documentation (#392) (de8ff6d)
- test: Clarify xdist must stay enabled for non-benchmark tests (9e9b260)
- benchmark: Add fixture scope design for #171 (3eb7d48)
- benchmark: Write implementation plan for fixture scope (#171) (0d0f93e)
- test: Add fixture scope selection guidance (#171) (1529681)
- limiter: Add Repository.open() design document (#404) (776029a)
- Migrate remaining connect()/builder(args) references to open()/builder() (#404) (0ebb35b)
- Simplify examples to use Repository.open() without stack/region (#404) (6eb1712)
- Migrate README from connect() to open() and simplify examples (#404) (390c376)
- guide: Use builder pattern for per-namespace on_unavailable examples (#404) (b38baab)
- infra: Use builder pattern for namespace registration in deployment guide (#404) (038ca1d)
- infra: Mention builder().build() also registers default namespace (#404) (2f58d24)
- infra: Add declarative limits management design (#405) (8ac1110)
- infra: Add declarative limits implementation plan (#405) (e76c0bc)
- infra: Add declarative limits management documentation (#405) (0656eda)
- Fix 29 stale/inaccurate items across 9 documentation files (2ecedee)
- Fix stale documentation across 9 files for v0.10.0 namespace release (#411) (cc9fd6a)
Performance
- benchmark: Add module-scoped moto fixtures and BenchmarkEntities (#171) (87c1e78)
- benchmark: Switch test_throughput.py to pre-warmed entities (#171) (98e2872)
- benchmark: Switch test_latency.py to pre-warmed entities (#171) (1c89e80)
- benchmark: Switch test_operations.py to pre-warmed entities (#171) (729d3fb)
- benchmark: Reduce pre-warmed entities from 100 to 15 (#171) (9924227)
- benchmark: Module-scope fixtures for faster benchmark runs (#171) (#396) (0edbb57)
Refactoring
- repository: Use secrets.token_urlsafe(8) for namespace IDs (1d3b340)
- test: Migrate test fixtures to Repository-first pattern (#366) (83532a3)
- repository: Add get_namespace() public method for CLI (d50be2b)
- test: Extract shared fixtures to tests/fixtures/ package (#170) (8325b1a)
- test: Add FileLock shared stacks and pytest_sessionfinish cleanup (#170) (d7a3c8e)
- test: Remove unused SharedStack re-exports from conftest files (ef9b260)
- test: Deduplicate remaining fixtures across conftest files (#170) (20ebc9d)
- test: Remove unused fixture imports from conftest files (#170) (76a5e17)
- test: Use pytest_plugins for fixture module registration (#170) (0805c21)
- test: Extract shared fixtures to tests/fixtures/ package (#395) (1cbe2e3)
- benchmark: Remove fixture scope plan doc (#171) (e413927)
- test: Make aiobotocore patch an autouse session fixture (#173) (4d9cf16)
- test: Make aiobotocore patch an autouse session fixture (#397) (eca1c42)
- cli: Migrate remaining commands from constructor to connect() (6555b33)
- repository: Migrate test fixtures to connect() and fix deprecation version to v1.0.0 (953aac6)
- test: Migrate e2e/integration/benchmark tests from connect()/builder(args) to open()/builder() (#404) (378aef7)
- models: Remove redundant burst field from Limit model (#406) (e17e3a5)
- models: Remove redundant
burstfield from Limit model (#408) (b8800bb) - infra: Remove burst field from declarative limits (#405) (fd4beef)
Testing
- schema: Add empty string edge case for parse_namespace (0048917)
- repository: Add namespace scoping tests (7718102)
- repository: Add coverage for version management and namespace edge cases (08d6875)
- repository: Filter create_stack deprecation test by message (bf46375)
- repository: Add coverage for on_unavailable in builder and namespace() (cf8afe4)
- repository,limiter: Add coverage for deprecated params + delete_stack + resolve_on_unavailable (#366) (b3cee98)
- repository,cli: Add coverage for namespace registry and CLI commands (5b6d0e2)
- limiter: Add namespace isolation integration tests and update CLAUDE.md (#372) (08a87a6)
- limiter: Add namespace isolation integration tests and update CLAUDE.md (#372) (#390) (4e0dc4f)
- e2e: Add namespace multi-tenant lifecycle and CLI E2E tests (23d7aee)
- e2e: Add namespace multi-tenant isolation and CLI integration tests (#394) (01ccc9d)
- cli: Add coverage for NamespaceNotFoundError in _connect helper (95f11b3)
- repository: Add test for open() re-raising non-ResourceNotFoundException errors (#404) (8179372)
- repository: Add version check test for local endpoints and fix LocalStack doc (#404) (90f5068)
- cli: Add tests for burst parameter in _parse_limit and _format_limit (9815661)
- infra: Add integration tests for declarative limits provisioner (#405) (75a50f6)
- infra: Add coverage for provisioner builder, stack manager, and CLI (#405) (526a918)
- infra: Cover remaining uncovered lines in provisioner and CLI (#405) (2a522dd)
- infra: Add integration and AWS e2e tests for provisioner handler (#405) (cf3ac77)
- infra: Add true CFN e2e test for Custom::ZaeLimiterLimits (#405) (4a46c5d)
Miscellaneous Tasks
- Use uv run python in verify-sync-generated pre-commit hook (9566d34)
CI
- Skip integration and e2e tests on draft PRs (c2792e1)
- Skip integration and e2e tests on draft PRs (#377) (68207b1)
- Make benchmark-localstack a manual-only job (5c1facf)
- Make benchmark-localstack a manual-only job (#388) (91b3348)
- benchmark: Enable LocalStack benchmarks by default (867449b)
- Retrigger CI after flaky namespace ID test (#173) (467ddc6)
- Add uv.lock to ci-tests paths filter (e47cad6)
- Add uv.lock to ci-tests paths filter (#413) (d81c678)
Security
- deps: Bump flask from 3.1.2 to 3.1.3 (#412) (2a06067)
- deps: Bump werkzeug from 3.1.5 to 3.1.6 (#414) (7dd1763)