A contributor can create a large patch quickly. The maintainer still pays the cost of reconstructing intent, risk, and evidence.
Make pull requests reviewable before they reach maintainers.
Reviewability Attestation is a structured record that binds a change narrative to evidence. It asks whether a contribution is bounded, honest, and ready for human review.
Overview
The platform should not grade prose. It should inspect whether the declared cargo matches the container: stated scope, actual diff, available evidence, and repository policy.
The gate does not prove correctness. It decides whether the change is coherent enough for a human to inspect.
Missing tests or stale docs should not lock contributors out. False claims should.
Reviewability Attestation is not AI disclosure. It is accountable change control.
Admission flow
Contributor states scope, tests, risks, and gaps.
Platform inspects files, symbols, CI, and policy.
Claims are checked against observable facts.
The PR is admitted, warned, drafted, or quarantined.
Missing evidence becomes a small maturity step.
Attestation model
The record separates facts the platform can verify from claims the contributor makes and evidence the repository does not have.
Commit range, changed files, sensitive paths, lockfiles, CI jobs, test results, and code owner areas.
Problem statement, intended scope, non-goals, manual reproduction, risk assessment, and human acceptance.
No tests, flaky CI, stale docs, no owner map, no integration environment, or no reproduction path.
{
"attestation_version": "0.1.0",
"predicate_type": "https://reviewability.dev/attestation/v0.1",
"subject": {
"platform": "github",
"repository": "example/project",
"pull_request": 1234,
"base_commit": "abc123",
"head_commit": "def456"
},
"declared_intent": {
"summary": "Fix parser crash on empty quoted field.",
"scope": ["parser empty-field handling", "regression test"],
"non_goals": ["No public API change", "No dependency changes"]
},
"verified_change_surface": {
"files_changed": ["src/parser.rs", "tests/parser_empty_field.rs"],
"sensitive_paths_touched": [],
"dependency_files_changed": [],
"public_api_changed": false
},
"evidence": {
"verified": [{ "type": "ci_job", "name": "unit-tests", "status": "passed" }],
"declared": [{ "type": "manual_reproduction", "claim": "Crash reproduced before patch." }],
"absent": [{ "type": "integration_tests", "reason": "No suite exists." }]
},
"gate_decision": {
"outcome": "admit",
"reason": "Declared scope matches diff and available evidence."
}
}
Gate outcomes and risk tiers
The controller has four outcomes. It should correct first, quarantine only when risk or contradiction requires it, and rarely reject permanently.
| Outcome | Meaning | Maintainer impact |
|---|---|---|
| Admit | The record is coherent enough for normal review. | Enters the review queue. |
| Admit with warnings | The change is bounded, but evidence is incomplete or degraded. | Visible degraded-evidence label. |
| Hold as draft | The contributor can correct scope, test claims, or declarations. | No normal review notification. |
| Quarantine | The change is high-risk, unbounded, or unauthorized. | Requires explicit maintainer authorization. |
Markdown typo, CSS tweak, comment correction, dead link, small test-only change.
Helper refactor, localized bug fix, small parser change, non-breaking UI component.
Auth, crypto, lockfiles, build scripts, public APIs, migrations, sandboxing, permissions.
Reviewability gate held this PR as draft.
Reason:
The attestation claims this is a UI-only change, but the diff modifies src/auth/session.rs.
Required correction:
Update the declared scope, split the PR, or link a maintainer-approved issue authorizing auth changes.
Repository policy
A repository-owned policy file defines sensitive paths, required evidence, degraded-mode behavior, draft conditions, and quarantine conditions.
version: "0.1"
default_mode: degraded_allowed
sensitive_paths:
- path: "src/auth/**"
tier: high
requires:
- linked_issue
- maintainer_authorization
- security_impact_statement
- test_evidence_or_absence_declaration
- path: "Cargo.lock"
tier: high
requires:
- dependency_impact_statement
- ci_evidence
- path: ".github/workflows/**"
tier: high
requires:
- maintainer_authorization
- build_impact_statement
- path: "docs/**"
tier: low
requires:
- basic_intent
test_policy:
allow_absent_tests_when_declared: true
require_regression_test_for_bugfix_when_feasible: true
flaky_ci_strategy: compare_base_branch
draft_on:
- contradiction
- missing_required_declaration
- undeclared_dependency_change
- scope_mismatch
quarantine_on:
- high_risk_without_authorization
- security_sensitive_scope_mismatch
- undeclared_lockfile_change
If tests do not exist, contributors can declare that absence. The gate routes the PR with warnings instead of inventing certainty.
Add a regression test, fixture, reproduction script, command transcript, or manual verification note when feasible.
API and CLI surfaces
The system can start as a GitHub Action, GitLab CI job, or platform app. A platform-native version should expose submit, retrieve, evaluate, and authorize operations.
POST /repos/{owner}/{repo}/pulls/{number}/reviewability-attestations
GET /repos/{owner}/{repo}/pulls/{number}/reviewability-attestations/latest
POST /repos/{owner}/{repo}/pulls/{number}/reviewability-evaluate
GET /repos/{owner}/{repo}/pulls/{number}/reviewability-decision
POST /repos/{owner}/{repo}/pulls/{number}/reviewability-authorization
reviewability init
reviewability attest \
--pr 123 \
--scope "parser crash fix" \
--tests "cargo test parser_empty_field"
reviewability verify --pr 123
reviewability explain --pr 123
Reference components
Receives structured records from PR forms, IDEs, agents, CI jobs, or CLI tools.
Computes changed files, sensitive areas, symbol changes, and dependency impact.
Maps test claims to CI jobs, static analysis, scans, and artifact evidence.
Applies repository policy and degraded-mode rules.
Compares claims against observable facts.
Routes the PR to admit, warning, draft, or quarantine.
Rollout path
Start with lightweight policy and labels. Move toward signed attestations, platform UI, and open standardization only after the workflow proves useful.
Classify files, sensitive paths, dependencies, and risk tiers.
Require scope, tests, absent evidence, and acceptance.
Compare claims to diff, CI, and policy.
Support flaky CI, missing tests, and stale documentation.
Bind attestations to commit range and PR identity.
reviewability/admitted
reviewability/admitted-with-warnings
reviewability/held-draft
reviewability/quarantined
reviewability/degraded-evidence
reviewability/scope-mismatch
reviewability/dependency-impact
reviewability/high-risk
The durable standard is simple: a pull request should not be eligible for human review until it is reviewable by structure.