You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
t27b ratchet: UNLISTED blames only the PR that adds the spec, as a t27 rule (see #8321) #9024
Part of the downtime epic (linked from it). Write it in t27 only, as pure rules with tests. DRY (AGENTS.md, see #8963): first search specs/tri/t27b/steward.t27 and specs/tri/t27b/*.t27 for an existing rule (t27c dupes --name, grep -rn) and extend it instead of copying. No hand-written code in other languages (see #8236).
Root fix for the native ratchet turning red for every PR. A spec merged without a ledger row makes master's t27b-native-ratchet report UNLISTED, and every later PR inherits it: the PR goes UNSTABLE and GitHub refuses auto-merge. On 2026-10-09/10 this happened 6 times in 30 minutes.
Requirements
FR-001: Add a pure rule in .t27 (extend specs/tri/t27b/steward.t27 if it fits, or create specs/tri/t27b/unlisted_rule.t27): unlisted_fails_pr(path, added_by_pr) -> bool. An UNLISTED spec fails the PR only when the PR itself adds that spec. An inherited UNLISTED is a note.
FR-002: Tests: a spec the PR adds without a row fails; a spec master added earlier without a row is a note; a spec the PR adds with a row is clean.
Success Criteria
grep -c 'fn unlisted_fails_pr' specs/tri/t27b/unlisted_rule.t27 prints 1
t27c spec-status specs/tri/t27b/unlisted_rule.t27 prints IMPLEMENTED
Boundary
specs/tri/t27b/unlisted_rule.t27
User Scenarios
Given a PR adds a new spec without a ledger row, When the t27b ratchet runs, Then the spec is UNLISTED and the PR fails
Given master has a spec without a ledger row from a previous merge, When a new PR runs the t27b ratchet, Then the spec is UNLISTED but reported as a note (PR does not fail)
Given a PR adds a new spec with a proper ledger row, When the t27b ratchet runs, Then the spec is clean and the PR passes
Success Criteria
grep -c 'fn unlisted_fails_pr' specs/tri/t27b/unlisted_rule.t27 prints 1 and exits 0
t27c spec-status specs/tri/t27b/unlisted_rule.t27 prints IMPLEMENTED and exits 0
t27c test specs/tri/t27b/unlisted_rule.t27 runs 3 tests and exits 0
Activity