Skip to content

Authorization Types

Source of truth: src/assync/core/enums.py::AuthorizationType and AUTHORIZATION_CAPABILITY_GRANTS. See Authorization Model for how these are actually enforced (intersection with role capabilities, never a union).

Type Capabilities granted
ANALYSIS_GO repository_read, runtime_read, analysis_execute, report_write, finding_create
IMPLEMENTATION_GO repository_read, repository_write, runtime_read, runtime_write, test_execute, analysis_execute, report_write, finding_create
REVIEW_GO repository_read, runtime_read, analysis_execute, report_write, finding_create
SECURITY_GO repository_read, runtime_read, analysis_execute, report_write, finding_create
QA_GO repository_read, runtime_read, test_execute, report_write, finding_create
DECISION_GO repository_read, runtime_read, decision_recommend
COMMIT_GO repository_read, runtime_read, commit_prepare, commit_execute
PUSH_GO repository_read, runtime_read, push_prepare, push_execute
MERGE_GO repository_read, runtime_read, merge_prepare, merge_execute
RELEASE_GO repository_read, runtime_read, release_prepare, release_execute
ABORT (none)

This table is the single source of truth for authorization-rule enforcement (authorization/policy.py). Nothing outside it is ever granted; absent authorization means deny. Each type's grant is disjoint by design — COMMIT_GO never implies PUSH_GO, PUSH_GO never implies MERGE_GO, MERGE_GO never implies RELEASE_GO.

ABORT exists so an active authorization can be explicitly revoked without deleting its record — it grants nothing.

Escalation

No code path in this MVP mints a new, more powerful Authorization on its own. The only place that can is decisions/service.py::resolve_decision(..., grant_authorization_type=...), and only when the decision resolves to APPROVED by a named human actor. See Decision Queue.