Skip to content

The ADR-0056 D10 authz conformance matrix has no row for the grant-catalogue active flag, and its completeness check cannot notice #8711

Description

@qq9340100

Found while implementing #8613. Filed unassigned; observation-class.

packages/qa/dogfood/test/authz-conformance.matrix.ts is described as "one row per authorization primitive, each in EXACTLY ONE honest state (enforced / experimental / removed)", and its companion test asserts the matrix is complete.

After #8613, sys_permission_set.active / sys_position.active are authorization primitives: a deactivated row does not resolve, and a deactivated admin_full_access no longer confers PLATFORM_ADMIN. There is no row for either. Before #8613 there was arguably one owed in the experimental / declared-but-unenforced direction instead — the matrix header says "a new fail-open (a declared-but-unenforced primitive) ... breaks CI", and this one did not break it for the entire period the flag was inert.

Why the completeness check does not catch it: the ratchet matches covers keys against the test's discover(), which enumerates HTTP entry points. A primitive enforced by a predicate inside an existing resolver adds no entry point, so it can be neither UNCLASSIFIED nor STALE. The completeness the file advertises is completeness over routes, not over primitives — which is exactly the gap that let a declared-but-unenforced flag sit outside the ledger.

Two separable questions:

  1. Add the missing row(s) for the active flag now that it is enforced (small, mechanical).
  2. Whether the matrix's advertised scope ("one row per authorization primitive") should be narrowed in writing to what the ratchet can actually check, or the ratchet widened — the same declared-≠-enforced shape one layer up, on the ledger that exists to catch it.

Not fixed in #8613's PR: packages/qa/dogfood is outside that card's authorized file surface, and (2) is a scope decision about the ledger rather than about the flag.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions