Keel

keel route

Independence cannot be manufactured, but it can be routed.

Every ungrounded verification edge in sinatra, paired — where a pairing exists — with an anchored producer already present in the same measurement. Nothing here invents an anchor, and nothing here has been applied.

targetsinatra
revisioncb22afd7902b566b6eaba6c4ea89739494a65d12
source reportreports/sinatra.json
generated2026-07-25T05:21:51.905Z
statusproposed (all 1)
0.88

today — measured

·
0.88

projection if applied — 0 re-grounded · 0 constructed

anchored / (anchored + self_referential + unknown)

anchored 7 self_referential 0 unknown 1 not_a_check 17 excluded from the denominator

The second number is a projection: the ratio this target would carry if a human applied every route below and the applied routes measured as anchored on re-measurement. It is arithmetic on a hypothetical. It is not written to any report, it is not fed back into the grounding ratio, and no proposal on this page has been applied. Projected counts, for the same conditional: anchored 7 · self_referential 0 · unknown 1 · not_a_check 17. The delta is two different claims and is reported as two: 0 re-grounded — an existing check whose signal moves outside the write boundary, the proposition it asserts unchanged — and 0 constructed — a not_a_check node that becomes a check, entering the denominator as well as the numerator. Only the first repairs something that was already being claimed.

Scope. Keel measures the shape of verification, not its quality. A repo can be 100% anchored with terrible tests. Anchoring says the signal comes from outside; it does not say the signal is sufficient.

Routes — 0 routable · 1 unroutable

Existing checks whose signal could come from somewhere they cannot write. Cheapest effort on top. no route is a first-class answer: it means the fix needs a policy decision rather than a rewiring, and it is reported here rather than dropped.

what's ungrounded route to why that's anchored effort
.github/workflows/CODEOWNERS#codeowners
review_gate · code owners (CODEOWNERS)
today the signal comes from cannot be established — a human review requirement, if one is enforced at all, is produced by GitHub branch-protection settings that live outside the repository
unknown
no route

The proposition this node tries to assert is 'a designated code owner reviewed and approved this change before it merged'. Every anchored producer in this report asserts a different proposition: the three release.yml steps assert 'the gemspec builds and the built .gem installs' (RubyGems exit codes on a v* tag push), and the four rspec/rake nodes assert 'the committed specs pass against the committed lib' (Ruby runtime exit codes on the PR path). Neither family emits any signal about who looked at the diff, so wiring the review gate onto one of them would move the ratio without grounding the claim. There is additionally no producer of review evidence anywhere in the measured tree: the artifact that would have to exist is a GitHub branch-protection approval record, and by the source verdict's own reasoning that record lives outside the clone and outside what this report measured.

why not: Not a rewiring — two human policy decisions, neither of which an agent may make. (1) Is this gate meant to be enforced at all? The file sits at .github/workflows/CODEOWNERS, which GitHub never parses; making it live means relocating it to the repo root, .github/, or docs/ AND enabling 'Require review from Code Owners' in branch protection, both changes to repository configuration that is not in the tree and not in this report. (2) Even once enforced, whether @sinatra/team-sinatra reviewing a fellow maintainer's PR is a producer outside the write boundary is a judgement about the org's composition, not a wire that can be moved. Until a human settles both, unknown is the honest verdict and it correctly fails closed.

Construct — not yet.

A route makes a check read a signal from outside itself. It does not pair that check with a counter-metric, name who arbitrates when the pair disagrees, or set a cadence at which the route is re-audited. Those three fields are declared in schemas/route.ts and are filled by keel construct, which is not built. The columns are empty by construction, not by omission.

route pairedWith arbitratedBy auditEvery
no routes on this run