Minor release. Per-team data isolation and gateway-role enforcement across the backend (Sprints 1 & 2). Behavior changes — see upgrade notes. Backward-compatible for existing single-team deployments (pre-existing data has no team_id and is treated as global/shared).
Security
- Data read endpoints team-scoped — shared feeds (
team_idNULL, global) + per-team overlay; fixes a cross-tenant disclosure (#178). - Responder run history owned by the triggering team; other teams get 404 (#180).
- CSPM scans namespaced per team + fail-closed auth when
GATEWAY_INTERNAL_SECRETis unset (#179). - Guardian enforces gateway role on mutating viewsets + tightened
has_perm— members can't perform admin-only actions (#181). - Legacy
X-API-Keyscoped to a non-privilegedserviceidentity; agents forward the caller's gateway identity on internal tool calls (#175). - Config mutations require owner/admin across services; operational + M2M stay member-allowed (#182).
Added
- Reusable tenancy helpers + DRF
RequireGatewayRole; two-team cross-tenant & role tests for data/responder/cspm/guardian in CI (#183).
Fixed
- CSPM
/dashboard/summaryresponse contract (was 500ing for everyone) + a float Redis TTL (#179).
Upgrade notes
- Set
GATEWAY_INTERNAL_SECRETeverywhere — guardian/cspm now return 503 without it; agents forwards it. - Members are read-only in guardian — mutations require owner/admin.
- Data adds nullable
team_idtosources/indicatorson startup; existing rows are treated as global.
Full changelog: v0.7.1...v0.8.0