Skip to content

t27b ratchet: UNLISTED blames only the PR that adds the spec, as a t27 rule (see #8321) #9024

Open

Description

@gHashTag

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0Critical priority - must fix immediatelyqueen-shaped

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions