Feature 09: the backend permission gate. Registers the canonical ENTITIES-AND-SERVICES §2 service inventory with voluptuous schemas and services.yaml metadata, a single SERVICE_POLICY registry (complete_quest open; everything else admin-only), a permission_gate wrapper applied to every registered service (reads call.context.user_id, consults admin_allowlist.is_admin, raises Unauthorized; fails closed on no context), audit logging (warning on denial, debug on success), presence writes regenerating child instances, and the full permission test matrix with a registry coverage assertion.
Task PRs: #98#99#100#101#102#103. Codex gpt-5.6-terra feature review: one P2 (sort_order=0 truthiness) verified as a false positive — see feature notes.
uv run pytest: 1361 passed. Schema still version 6; no migration.
Feature 09: the backend permission gate. Registers the canonical ENTITIES-AND-SERVICES §2 service inventory with voluptuous schemas and services.yaml metadata, a single SERVICE_POLICY registry (complete_quest open; everything else admin-only), a permission_gate wrapper applied to every registered service (reads call.context.user_id, consults admin_allowlist.is_admin, raises Unauthorized; fails closed on no context), audit logging (warning on denial, debug on success), presence writes regenerating child instances, and the full permission test matrix with a registry coverage assertion.
Task PRs: #98 #99 #100 #101 #102 #103. Codex gpt-5.6-terra feature review: one P2 (sort_order=0 truthiness) verified as a false positive — see feature notes.
`uv run pytest`: 1361 passed. Schema still version 6; no migration.
permission_gate wraps all registered services at registration time:
admin-only policy reads call.context.user_id against admin_allowlist
is_admin (fail closed on no context); complete_quest stays open.
Parametrised test denies no-context calls on every admin-only service;
complete_quest proceeds with no user; scheduled internals stay direct
function calls.
Admin succeeds on all ten admin-only services; a non-admin and a
no-context call are refused on each; complete_quest stays open; a
kiosk-style id is refused on uncomplete_quest and regenerate; the
registry coverage assertion fails the suite on any gap.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Feature 09: the backend permission gate. Registers the canonical ENTITIES-AND-SERVICES §2 service inventory with voluptuous schemas and services.yaml metadata, a single SERVICE_POLICY registry (complete_quest open; everything else admin-only), a permission_gate wrapper applied to every registered service (reads call.context.user_id, consults admin_allowlist.is_admin, raises Unauthorized; fails closed on no context), audit logging (warning on denial, debug on success), presence writes regenerating child instances, and the full permission test matrix with a registry coverage assertion.
Task PRs: #98 #99 #100 #101 #102 #103. Codex gpt-5.6-terra feature review: one P2 (sort_order=0 truthiness) verified as a false positive — see feature notes.
uv run pytest: 1361 passed. Schema still version 6; no migration.