Repository navigation
baukit 0.3.0
baukit v0.3.0
One release train for the Rust crates, TypeScript packages, and templates.
Rust crates
baukit-auth
Added
- Add validated
ApiTokenPolicyRejectioncodes with at most eight numeric
details so adapters can return safe policy decisions. - Add
establish_principalfor Axum compositions that need a verified
Principalbefore rate limiting or other request middleware. Missing
credentials continue without a principal; presented invalid credentials use
the existing authentication envelope.
Changed
- Change every
ApiTokenStoreoperation fromStringfailures to
ApiTokenStoreError. Internal adapter diagnostics now map to the generic
ApiTokenError::Storage; policy rejections map to
ApiTokenError::PolicyRejected.
Migration
- Update each product adapter to return
ApiTokenStoreError. Wrap SQL and
provider errors withApiTokenStoreError::internal. Replace encoded policy
strings withApiTokenPolicyRejectionand update API mappings to inspect its
code and numeric details. - Replace product-owned principal-caching middleware with
middleware::from_fn_with_state(auth, establish_principal). Protected route
extractors remain unchanged and reuse the cached principal.
baukit-config
- No component-specific changes in this train.
baukit-core
Added
- Add production measurements and checks for trimmed Unicode scalars, compact
JSON UTF-8 bytes, byte slices, and collection slices.
baukit-credential-vault
- No component-specific changes in this train.
baukit-events
- No component-specific changes in this train.
baukit-http
Added
RequestLocaleselects from a product-owned locale set using a percent-decoded query override or
quality-weightedAccept-Language. Configuration fixes the fallback and query rule. Malformed,
duplicate override, unsupported explicit, and oversized inputs return stable validation errors.JsonRejectionCodesandHttpOptions::with_json_rejection_codespreserve JSON rejection classes.
Oversized bodies return 413, missing or invalid content types return 415, malformed JSON returns
400, and data-shape errors return 422. Responses contain fixed safe text without submitted body or
parser details.
Compatibility
- Request locale extraction is additive. Existing handlers retain their current behavior until they
putRequestLocaleConfigin Axum state and use the extractor. HttpOptions::default()andwith_json_rejection_coderetain the previous single-code 400
response forApiJson<T>rejections during this release cycle. See the README migration section
before opting into class-specific responses.
baukit-integrations
Added
- Add the
CredentialProbeport with a bounded, redacted external account ID
and six provider-neutral failure outcomes that preserveRetry-After.
baukit-jobs
Added
- Added bounded
PostgresJobStore::cleanup_terminal_jobsdeletion with separate
succeeded, cancelled, and failed cutoffs and committed per-status counts. - Added fixed whole-second UTC slot calculation and canonical idempotency
identifiers for self-enqueuing recurring jobs.
Migration
- No schema migration is needed. Terminal cleanup is a concrete PostgreSQL
store method, so existingJobStoreimplementations remain compatible. - Existing recurring jobs can replace local UTC rounding and slot-key code.
Pass the current payload slot and the handler clock tonext_slot, use the
returned boundary asrun_after, and use its identifier as the idempotency
key. Keep interval and catch-up choices in the application.
baukit-openapi
- No component-specific changes in this train.
baukit-ops
- No component-specific changes in this train.
baukit-push
- No component-specific changes in this train.
baukit-ratelimit
Added
- Add validated authenticated route-group limits with caller-supplied subject
keys and request predicates. Group counters have their own namespace and
rejections return all rate-limit headers. - Add
SharedRateLimitStoreso one runtime-selected adapter can back request
limits and fixed-window amount budgets without an application delegation
enum. - Add
RateLimitOptions::is_enabledand
RedisRateLimitStore::connect_if_enabled. Fully disabled request limiting no
longer needs a Redis URL or connection.
Changed
- Add numeric
details.retry_afterto standard rate-limit rejection bodies.
The value matches theRetry-Afterheader. - Document and test
baukit_auth::establish_principalas the supported outer
authentication middleware. Valid identities use separate identity buckets,
anonymous requests use the IP bucket, and bad credentials consume neither.
Migration
- Existing
layerscalls and error codes remain supported. Clients may read
error.details.retry_afterinstead of parsing text. Applications with route
wrappers can replace their key construction, store error mapping, response
headers, and retry detail normalization withauthenticated_route_group. - Existing
layerscalls remain supported. Applications with custom bearer
middleware can replace it withbaukit_auth::establish_principal. Startup
code can useconnect_if_enabledinstead of checking both scopes itself.
baukit-runtime
- No component-specific changes in this train.
baukit-sync
Added
- Added a cross-runtime hybrid logical clock with JavaScript-safe encoding, state restoration,
remote observation, logical rollover, and shared Rust and TypeScript fixtures.
baukit-telemetry
- No component-specific changes in this train.
baukit-test
Added
- Add a PostgreSQL live-row cap race check for concurrent last-slot creates,
updates at capacity, soft-delete release, live counts, and stable limit codes. - Add PostgreSQL inbox conformance checks for scoped replay, real concurrent
replay, transaction rollback, owner isolation, and durable outcomes. - Add HMAC-SHA256 webhook signing helpers and a bounded scripted HTTP receiver
for retry and idempotency tests. - Add a scripted credential-probe HTTP server and a provider-neutral
conformance suite for health mapping, retry hints, timeouts, invalid data,
and response bounds.
Changed
- Reuse the production resource-budget measurements from
baukit-corewhile
keeping the existing test-helper names available. - Let
InMemoryApiTokenStore::fail_withscript typed internal failures and
policy rejections after theApiTokenStoreerror contract changed.
TypeScript packages
a11y-core
Minor Changes
- Release the coordinated baukit 0.3.0 train.
analytics-core
Minor Changes
- Release the coordinated baukit 0.3.0 train.
analytics-posthog-native
Minor Changes
- Release the coordinated baukit 0.3.0 train.
Patch Changes
- Updated dependencies
- @baukit/analytics-core@0.3.0
analytics-posthog-web
Minor Changes
- Release the coordinated baukit 0.3.0 train.
Patch Changes
- Updated dependencies
- @baukit/analytics-core@0.3.0
api-runtime
Minor Changes
- Release the coordinated baukit 0.3.0 train.
- a299f89: Add dependency-free, display-only identity hints from unverified JWT claims with product-supplied fallback text.
auth-native
Minor Changes
- Release the coordinated baukit 0.3.0 train.
auth-node
Minor Changes
- 38e3201: Add a Node OIDC device-flow client with S256 PKCE, bounded requests, refresh rotation, and an atomic locked profile cache.
- Release the coordinated baukit 0.3.0 train.
auth-web
Minor Changes
- Release the coordinated baukit 0.3.0 train.
data-contracts-dexie
Minor Changes
- Release the coordinated baukit 0.3.0 train.
Patch Changes
- Updated dependencies [40882f6]
- Updated dependencies
- Updated dependencies [5472d3d]
- @baukit/data-contracts@0.3.0
data-contracts-expo-sqlite
Minor Changes
- Release the coordinated baukit 0.3.0 train.
Patch Changes
- Updated dependencies [40882f6]
- Updated dependencies
- Updated dependencies [5472d3d]
- @baukit/data-contracts@0.3.0
data-contracts
Minor Changes
- 40882f6: Add bounded import-envelope preparation, atomic commit orchestration, and adapter conformance cases.
- Release the coordinated baukit 0.3.0 train.
- 5472d3d: Add production resource-budget measurements and checks for trimmed Unicode scalars, compact JSON UTF-8 bytes, byte arrays, and collections.
events
Minor Changes
- Release the coordinated baukit 0.3.0 train.
integrations-client
Minor Changes
- Release the coordinated baukit 0.3.0 train.
localization-core
Minor Changes
- Release the coordinated baukit 0.3.0 train.
- a299f89: Add typed catalog segments that enforce product locale coverage, exact reference keys, and string versus plural-message shape.
preferences-core
Minor Changes
- Release the coordinated baukit 0.3.0 train.
- 191db25: Add an opt-in serialized preference update mode with committed visibility and pending-count state.
pwa-web
Minor Changes
- ca98c4e: Publish a worker-safe IIFE artifact and add product-controlled cache cleanup for version and identity changes.
- Release the coordinated baukit 0.3.0 train.
sync-client
Minor Changes
-
9f0dc94: Add a persisted hybrid logical clock with JavaScript-safe encoding and shared Rust and TypeScript fixtures.
-
Release the coordinated baukit 0.3.0 train.
-
4d1f0d3: Add atomic submitted-batch outcome conformance for late accepted and rejected responses.
Add the browser scheduler environment and an explicit recovery signal callback for waking product-owned retry delays.
-
9b92f9f: Add optional tombstone-horizon and full-resync conformance callbacks and cases.
ui-tokens
Minor Changes
- Release the coordinated baukit 0.3.0 train.
Commits
- chore: prepare baukit v0.3.0 (
51054e6) - test(pwa-web): run the pack check with a standalone pnpm binary (
8553126) - fix(cli,templates): PostgreSQL 18 mount, Python cache skip, strict gate before first commit (
aadd1b3) - test(cli): re-bless the auth snapshot after the MCP template change (
a60cd28) - docs(plan): mark studies 33 and 34 done, batch 7 complete (
0df5bea) - docs(studies): calendar export and release, GitOps, migration compatibility (
d94b0e8) - docs(plan): mark studies 35 and 36 done (
5ece87e) - docs(studies): browser identity composition and other deferred contracts (
cb871dc) - docs: tracker after studies 31 and 32 (
c2aa913) - docs(studies): Expo headless accessibility; notifications and timeline playback (
5df8f27) - docs: tracker after item 28 (
74ad12f) - feat(test): PostgreSQL live-row cap recipe and race conformance (
d8d9362) - docs: tracker after item 21 (
4db274a) - feat(cli,templates): opt-in MCP capability and generated package (
93b7d17) - docs: tracker after item 26 (
85deecb) - feat(test): inbox conformance and webhook signing helpers (
cbb21a5) - docs: tracker after studies 29 and 30 (
ae708db) - docs(studies): write queue and form drafts; offline asset management (
a58ff3d) - docs: tracker after item 18 (
19f6157) - feat(templates): script-only accessible Keycloak child theme (
70b65e2) - docs: tracker after item 25 (
af8c2da) - feat(data-contracts): bounded import-envelope preparation and atomic commit (
40882f6) - docs: tracker after items 23 and 27 (
3c5cccd) - docs(platform): durable-job ownership and OpenAPI mirror decisions (
29c7382) - docs: tracker after items 20, 22, 24 (
1c8f0ac) - feat(integrations,test): provider credential-probe contract (
5b01e65) - feat(sync-client): tombstone horizon contract and full-resync conformance (
9b92f9f) - fix(typescript): lint auth-node tests in their own program (
93e0c33) - feat(auth-node): OIDC device authorization package for Node (
38e3201) - docs: tracker after batch 4 items 7b, 14 to 17 (
3925bf8) - feat(templates): Keycloak realm policy validation and development reconciler (
c150ee1) - feat(templates): env reconciliation and strict Markdown link check (
418941a) - docs: tracker marks item 7b done (
0ce200c) - feat(templates): adopt the production limit measurements (
69ddb55) - docs: tracker after batch 3 (
44cee3b) - feat(templates): backport the Leitbild browser QA harness to the web template (
c6ec3c7) - feat(http,localization-core,api-runtime): locale and identity helpers (
a299f89) - feat(ratelimit): named authenticated route-group limits (
763f197) - feat(sync): cross-runtime hybrid logical clock (
9f0dc94) - docs: record batch 2 completion in the improvements tracker (
2e8fee5) - feat(auth,ratelimit): establish Principal before rate limiting (
95c6883) - feat(pwa-web): supported worker artifact and cache cleanup (
ca98c4e) - feat(sync-client): overlapping-response conformance and browser environment (
4d1f0d3) - feat(preferences-core): opt-in serialized update mode (
191db25) - docs: record batch 1 completion in the improvements tracker (
a55aa4d) - feat(core,data-contracts): production resource-budget measurements (
5472d3d) - feat(jobs): bounded terminal-job cleanup and fixed recurring UTC slots (
7f13c71) - feat(http): classify JSON extractor rejections with stable codes (
8eae0aa) - feat(auth)!: typed ApiTokenStoreError with bounded policy rejections (
32baa8b) - docs: add next-improvements plan with execution tracker (
1792c62)