Skip to content

baukit 0.3.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 18:04
· 569 commits to main since this release

baukit v0.3.0

One release train for the Rust crates, TypeScript packages, and templates.

Rust crates

baukit-auth

Added

  • Add validated ApiTokenPolicyRejection codes with at most eight numeric
    details so adapters can return safe policy decisions.
  • Add establish_principal for Axum compositions that need a verified
    Principal before rate limiting or other request middleware. Missing
    credentials continue without a principal; presented invalid credentials use
    the existing authentication envelope.

Changed

  • Change every ApiTokenStore operation from String failures 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 with ApiTokenStoreError::internal. Replace encoded policy
    strings with ApiTokenPolicyRejection and 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

  • RequestLocale selects from a product-owned locale set using a percent-decoded query override or
    quality-weighted Accept-Language. Configuration fixes the fallback and query rule. Malformed,
    duplicate override, unsupported explicit, and oversized inputs return stable validation errors.
  • JsonRejectionCodes and HttpOptions::with_json_rejection_codes preserve 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
    put RequestLocaleConfig in Axum state and use the extractor.
  • HttpOptions::default() and with_json_rejection_code retain the previous single-code 400
    response for ApiJson<T> rejections during this release cycle. See the README migration section
    before opting into class-specific responses.

baukit-integrations

Added

  • Add the CredentialProbe port with a bounded, redacted external account ID
    and six provider-neutral failure outcomes that preserve Retry-After.

baukit-jobs

Added

  • Added bounded PostgresJobStore::cleanup_terminal_jobs deletion 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 existing JobStore implementations remain compatible.
  • Existing recurring jobs can replace local UTC rounding and slot-key code.
    Pass the current payload slot and the handler clock to next_slot, use the
    returned boundary as run_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 SharedRateLimitStore so one runtime-selected adapter can back request
    limits and fixed-window amount budgets without an application delegation
    enum.
  • Add RateLimitOptions::is_enabled and
    RedisRateLimitStore::connect_if_enabled. Fully disabled request limiting no
    longer needs a Redis URL or connection.

Changed

  • Add numeric details.retry_after to standard rate-limit rejection bodies.
    The value matches the Retry-After header.
  • Document and test baukit_auth::establish_principal as the supported outer
    authentication middleware. Valid identities use separate identity buckets,
    anonymous requests use the IP bucket, and bad credentials consume neither.

Migration

  • Existing layers calls and error codes remain supported. Clients may read
    error.details.retry_after instead of parsing text. Applications with route
    wrappers can replace their key construction, store error mapping, response
    headers, and retry detail normalization with authenticated_route_group.
  • Existing layers calls remain supported. Applications with custom bearer
    middleware can replace it with baukit_auth::establish_principal. Startup
    code can use connect_if_enabled instead 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-core while
    keeping the existing test-helper names available.
  • Let InMemoryApiTokenStore::fail_with script typed internal failures and
    policy rejections after the ApiTokenStore error 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)