Changelog
Club OWNER-only scope grants
- Replaced the P0 “unsupported for every issuer” decision for
club.compliance.read_files,club.safety.read_sensitive,club.coaches.read,club.coaches.write, andclub.federations.readwith an exact-current-club OWNER-only grant rule. - Kept permission wildcard and role evidence separate: ADMIN, custom wildcard holders and owners of other clubs cannot grant these scopes.
- Applied one server-owned grant ceiling to the scope catalog, credential creation and scope update. Existing keys retain explicit scopes only; strict reduction remains available and rotation does not expand them.
P5 contract publication
- Published signed-only authentication; removed obsolete Bearer and runtime mock-demo guidance.
- Frozen the current inventory at 96 explicit controller operations: public
GET /healthplus 95 signed/v1operations on 85 path templates. - Added equal-route bilingual OpenAPI, source-ledger drift checks, missing-translation and missing-spec failures, and bilingual docs build gates.
- Documented workspace Redis limits, fail-closed idempotency, five signing webhook events, canonical reconciliation and current provisioning/worker limitations.
P6 standalone Partner worker
- Added explicit
PARTNER_ROLE=api|workerstartup with backward-compatibleapidefault and fail-fast unknown roles. - Moved webhook queue consumption and recovery out of every Academy mode into the health-only worker; retained the shared producer in Partner API and Academy.
- Added independent API/worker Kubernetes Deployments from the same bundle. Only the API has a Service/public route.
- Added isolated Postgres/Redis runtime checks for role routes, queue registry identity, consumer ownership and shutdown.