Scale the blocker window by lane risk, converging with risk-nexus
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

risk-nexus accepted the offer to match their convention rather than grow a second
one, and published it: 14d critical/high, 30d medium, 60d low, nothing auto-closing
on staleness alone. Their preference — point warden route gaps at those windows and
the two registers agree without a shared mechanism — is better than a joint tool.

blocker_stale_days() now maps lane risk onto those windows. A flat 14 would have
been wrong in both directions: too aggressive for a low-risk pointer, and it treated
an admin PAT lane the same as one.

ungraded takes the shortest window, not the longest. ADR-0007 makes an absent grade
a defect and ADR-0008 makes a grade cover the whole path, so a lane nobody graded is
the one whose blocker deserves least trust. Encoding that as 60 days would have been
the fail-open default this repo already fixed once.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-21 13:29:29 +02:00
parent 55f0f47a02
commit e18894ee5b
7 changed files with 96 additions and 24 deletions

View file

@ -194,7 +194,21 @@ while they shared one 90-day threshold. They should not.
| Claim | Question | Default | Where |
| --- | --- | --- | --- |
| Pointer freshness | Is this still the right owner and page? | **90 days** | `warden route list --stale` |
| Interim blocker | Has the intended owner answered / can they front this yet? | **14 days** | `warden route gaps` |
| Interim blocker | Has the intended owner answered / can they front this yet? | **risk-scaled, 1460 days** | `warden route gaps` |
The blocker window scales with what the lane holds, matching `risk-nexus`'s stall
windows (`docs/method/check-procedure.md`) so the two registers agree without a
shared tool:
| Lane `risk` | Window | risk-nexus equivalent |
| --- | --- | --- |
| `high`, `ungraded` | **14 days** | critical / high |
| `standard` | **30 days** | medium |
| `low`, `accepted` | **60 days** | low |
`ungraded` takes the *shortest* window, not the longest. `ADR-0007` makes an
absent grade a defect and `ADR-0008` makes a grade cover the whole path — a lane
nobody has graded is the one whose blocker deserves least trust.
A pointer genuinely is a quarterly question. A blocker is not: it is a claim
about another repo's state at a date, and this estate invalidates those in days.
@ -230,8 +244,8 @@ re-establishing the claim is the failure this section exists to prevent, and it
is cheap to avoid — most of these are answerable by reading the owner's repo.
```bash
warden route gaps # 14-day blocker cadence, plus unverified lanes
warden route gaps --stale-days 30 # looser threshold
warden route gaps # risk-scaled cadence, plus unverified lanes
warden route gaps --stale-days 30 # flat override for every lane
warden route gaps --fail-on-stale # exit 3 — for a cron job or a gate
```