Implements the 4-phase documentation reorganization master plan. - Consolidation: Merged brief/, handoff/, planning/, and decisions/ into briefs/, handoffs/, plans/, and adr/ respectively (101 ADRs relocated) - Root Cleanup: Relocated HANDOFF-gpt55-*.md and key top-level docs (runtime_contracts.md, etc.) to canonical folders. Added superseded alerts. - Indices & Navigation: Created docs/README.md navigation document, docs/sessions/README.md index, docs/adr/README.md index - Note: Also includes prior commit adding ADR-0200+ corpus hygiene governance (ADR-0225, dependency map, backfilled cross-references)
4.3 KiB
ADR-0092 — Reviewer Registry v1
Status: Accepted Date: 2026-05-21 Accepted: 2026-05-22 Author: CORE agents + reviewers Depends on: ADR-0091
Acceptance evidence
Accepted after the reviewer registry trust root was implemented and wired into Domain Pack Contract v1 validation:
docs/reviewers.yamlcarriesschema_version: 1and the bootstrapshay-jreviewer entry.core/capability/reviewers.pyimplements the immutable loader, unknown-key rejection, duplicate-id rejection, role/domain restrictions, and review-scope checks.core/capability/domain_contract_predicates.pyconsults the registry for ADR-0091 predicate P8.evals/reviewer_registry/runner.pycontains the reviewer-registry lane.tests/test_capability_cli.pyand the ratification tests exercise ledger rows that depend on successful reviewer resolution.
Context
ADR-0091 defines Domain Pack Contract v1. Its validation semantics require
that every reviewers entry on a reasoning-capable pack resolve through
docs/reviewers.yaml.
The registry is also load-bearing for proposal review (teaching/review.py)
and capability ledger evidence rows. Treating it as a free-form list will
produce drift; treating it as schema-bearing data lets the validator
refuse malformed entries before they reach the runtime.
Decision
Introduce Reviewer Registry v1 as a structured, validator-checked
schema for docs/reviewers.yaml. The schema is small on purpose. It must
be the minimum that satisfies ADR-0091 predicates without inviting
identity inflation.
Schema
schema_version: 1
reviewers:
- reviewer_id: shay-j
display_name: "Joshua Shay"
role: primary
domains: ["*"]
review_scope: ["pack", "proposal", "chain", "eval"]
provenance: "adr-0092:bootstrap:2026-05-21"
| Field | Required | Purpose |
|---|---|---|
schema_version |
yes | Version gate for registry parsing semantics. |
reviewer_id |
yes | Stable key referenced by pack manifests and proposals. |
display_name |
yes | Human-readable label for ledger and report rows. |
role |
yes | primary or domain. primary may review any pack; domain requires domains enumeration. |
domains |
yes | List of domain_id values from ADR-0091. ["*"] for primary reviewers. |
review_scope |
yes | Subset of {pack, proposal, chain, eval}. Bounds what artifacts this reviewer may ratify. |
provenance |
yes | Review trail entry for the reviewer's addition itself. |
Bootstrap entry
Registry ships with exactly one reviewer (shay-j) at v1 landing. Adding
reviewers is a separate reviewed proposal flow. The bootstrap entry is
self-sealed: its provenance references this ADR.
Validator rules
The capability validator refuses ratification when:
docs/reviewers.yamldoes not matchschema_version: 1.- A pack manifest names a
reviewer_idabsent from the registry. - A reviewer's
role: domaindoes not include the pack'sdomain_id. - A reviewer's
review_scopedoes not cover the artifact being ratified. - Two reviewer entries share a
reviewer_id.
No validator mutates the registry. Mutation remains a reviewed proposal.
Trust Boundary
docs/reviewers.yaml is parsed at validator startup and on every ledger
report run. The parser rejects unknown top-level keys and unknown
reviewer fields rather than ignoring them — schema drift is loud, not
silent. Reviewer IDs are display-only; the registry never grants runtime
permissions beyond the predicates ADR-0091 already enforces.
Invariant
reviewer_registry_schema_v1 — running core capability ledger against
a registry that fails schema validation must exit non-zero and produce a
typed error naming the failing field; no ledger row may be emitted under
a malformed registry.
Lane
evals/reviewer_registry/:
- positive: valid v1 registry passes
- negative: empty registry blocks all
reasoning-capableclaims - negative: malformed entry produces typed error
- negative: domain reviewer claiming wildcard
["*"]rejected
Consequences
- One real reviewer entered; subsequent reviewer additions are themselves reviewed proposals, preventing trust inflation.
- ADR-0091 predicate #8 (reviewer resolution) is enforceable.
- Identity, safety, ethics packs gain a checked author trail without altering their existing self-seal flow.