Skip to content

chore(release): bump cli 0.32.0, acton 0.31.0, backend 0.12.0#65

Merged
rrrodzilla merged 1 commit into
mainfrom
release/v0.32.0
May 26, 2026
Merged

chore(release): bump cli 0.32.0, acton 0.31.0, backend 0.12.0#65
rrrodzilla merged 1 commit into
mainfrom
release/v0.32.0

Conversation

@rrrodzilla
Copy link
Copy Markdown
Contributor

Summary

Release bump rolling up the production-audit gap PRs (#61, #62, #63, #64).

crate from to reason
schema-forge-backend 0.11.0 0.12.0 breaking: AuthStore::record_login required method (#61)
schema-forge-acton 0.30.0 0.31.0 breaking: DynAuthStore::record_login shim + filter_entity_fields return type change (#61, #63)
schema-forge-cli 0.31.0 0.32.0 follows acton/backend; user-facing audit-emission behaviour

Pre-1.0 minor bumps per CHANGELOG convention. Release tag will be v0.32.0 after merge.

Test plan

  • cargo update -w clean
  • cargo check --workspace --features schema-forge-acton/surrealdb clean
  • CI smoke (auto)

Release rolling up the production-audit gap PRs (#61, #62, #63, #64).

BREAKING (pre-1.0 minor):
  schema-forge-backend 0.11 → 0.12
    AuthStore trait gains required `record_login(username, at)` method.
    Downstream impls must add it.
  schema-forge-acton 0.30 → 0.31
    DynAuthStore trait gains required `record_login` shim.
    `access::filter_entity_fields` now returns `Vec<String>` (dropped
    field names) instead of `()`. Callers binding the return value
    must update.
@rrrodzilla rrrodzilla merged commit 48c447b into main May 26, 2026
rrrodzilla added a commit that referenced this pull request May 28, 2026
* feat(auth): add GET /auth/me principal endpoint (#70)

Surfaces the resolved principal to clients that cannot decrypt the PASETO:
user_id (the User entity id), email, display_name, roles, the user's full
tenant membership set (tenant_chain), the active tenant, and the projected
principal_claims. This is the client-side anchor for 'signed in as / current
org' chrome and a tenant switcher, removing the racy email->user_id lookup.

Scope decision — switch-tenant uses what #67 shipped:
#67 made the active tenant a per-request 'X-Active-Tenant: <type>:<id>' header
resolved by the tenant_scope middleware, not a token claim. Switching tenants
therefore needs no new token and no /auth/switch-tenant endpoint: the client
sends a different header. /auth/me reports active_tenant by honoring that same
header (valid member -> that tenant; sole membership -> implied; else null),
and returns the header name so clients don't hard-code it.

- tenant_scope middleware now skips /forge/auth/* so /auth/me returns the FULL
  membership set (the multi-membership header requirement would otherwise 400
  exactly the users it serves); this also keeps /auth/refresh usable for
  multi-membership users.
- resolve_active_tenant is a pure, unit-tested helper; parse_active_tenant
  reused from tenant_scope (no duplicate grammar).
- Tests: 7 unit (resolver + serde shape) + 4 integration (full membership set,
  header-resolved active tenant, non-member header -> null, no-claims -> 401).

No version bump (release bumps land separately, per #65). No public trait
changes — reuses the list_tenant_memberships added in #67.

* docs(auth): document GET /auth/me in the tenant-chain contract (#70)

Add §10.7 to principal-claims-reference.md covering /auth/me as the client-side
read of the X-Active-Tenant contract: full membership set, header-mirrored
active_tenant resolution, tenant_scope exemption, and that switching uses the
shipped header (no switch-tenant endpoint / no active-tenant claim). Cross-link
from §10.2.
@rrrodzilla rrrodzilla deleted the release/v0.32.0 branch May 28, 2026 19:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant