Skip to content

v0.4.0

Choose a tag to compare

@HoronLee HoronLee released this 03 May 05:39
· 221 commits to main since this release

Highlights

Breaking changes (no in-tree caller affected — servora-iam deprecated, servora-platform on cached v0.1.2):

  • `security/authz.Authorizer.IsAuthorized` renamed to `Check`; interface extended with two required methods `BatchCheck` and `ListAllowed` matching OpenFGA SDK / SpiceDB primitives
  • `authz.DecisionDetail.CacheHit` and `audit.AuthzDetail.CacheHit` fields removed (cache is an `infra/openfga` internal optimization, not audit semantics)

New features:

  • `authz.NewAuthzBridge(recorder)` — one-liner audit wiring, closes TODO P0-2
  • `authz.WithCheckTimeout(d)` — bounds backend latency (protects business RPC from slow OpenFGA)
  • `authz.WithFailOpenOnMissingRule(alertFn)` — dev-time ergonomics; never use in production
  • `extractProtoField` supports dot-path (`parent.id` style nested fields)
  • `infra/openfga.Client.BatchCheck` — order-preserving multi-check primitive
  • `security/authz/doc.go` — package-level doc with contextual-tuples roadmap

See `docs/superpowers/plans/2026-05-01-authz-closure-and-hardening.md` for the full execution plan.

Commits (v0.3.2..v0.4.0)

  • docs: mark P0-2 done; record authz closure & hardening plan completion (9b01395)
  • docs(security/authz): add package doc with contextual-tuples roadmap note (f124b43)
  • feat(security/authz): add NewAuthzBridge for one-liner audit wiring (closes P0-2) (e015d5b)
  • feat(security/authz): support dot-path id_field for nested proto messages (3c102b8)
  • docs(security/authz): sync Server() Behavior list with WithFailOpenOnMissingRule (b31a097)
  • feat(security/authz): add WithFailOpenOnMissingRule for dev-time ergonomics (e87a0d9)
  • feat(security/authz): add WithCheckTimeout option to bound backend latency (deab2f8)
  • style(security/authz): fix imports order and noop BatchCheck empty-input contract (c990b92)
  • fix(security/authz): use maps.Copy in MergeRules (mapsloop modernize) (9716dbf)
  • feat(security/authz): expand Authorizer to Check/BatchCheck/ListAllowed (7b16dc2)
  • refactor(security/authz): drop DecisionDetail.CacheHit (cache is engine-internal) (38bc86b)
  • fix(infra/openfga): address lint warnings on BatchCheck (SA1012 + rangeint) (3a31ec4)
  • feat(infra/openfga): add Client.BatchCheck with per-item correlation (1f86420)
  • refactor(obs/audit): drop AuthzDetail.CacheHit (engine-internal, not audit semantics) (ad7b0f8)
  • docs(security/authz): add closure & hardening plan (2026-05-01) (76d8b47)
  • revert(ci): re-enable lint and test on tag push to fix release skip (50c658a)

Note

The v0.4.0 release pipeline initially failed on a stricter govet check (pre-existing `reflect.Ptr` deprecated alias in `core/mapper/converter.go`, unrelated to this plan). Hotfixed in v0.4.1. v0.4.0 ships the full plan above; v0.4.1 = v0.4.0 + the lint fix.