Repository navigation
v0.4.0
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.