Repository navigation
docs(process): two review findings on MEASUREMENT_DISCIPLINE.md — family order and D's missing mechanism #16126
Description
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentation
on Sep 9, 2026 - added 14 commits that reference this issue
on Sep 9, 2026 Stale-issue sweep (never auto-closed — Dev_new_gui wasn't GitHub's default branch at merge time). Verified against current
origin/main; leaving open.2 of 3 criteria MET:
docs/developer/MEASUREMENT_DISCIPLINE.md:124-128adds a forward pointer explaining the A,B,C,D,F,E family sequence and why (citing #16100/#13148); Family D (:92-120) now carries the "comfort of a refusal" mechanism ("A gate saying WAIT is indistinguishable from a healthy queue, so it receives less scrutiny...") plus the STALE PR OBJECT worked example (:112-116).NOT MET: AC3 —
scripts/lib/check_run_status.pystill has no pending-with-age state; itsRUNNINGfrozenset (:50) treats "pending" as an undifferentiated member with no duration tracking, and a repo-wide grep for pending/age wiring in that module returns nothing.Delivered by merged PR #16127.
- added a commit that references this issue
on Sep 12, 2026 - linked a pull request that will close this issuefeat(tooling): check_run_status gains a pending-with-age helper (#16126) #16534
on Sep 12, 2026 - added a commit that references this issue
on Sep 13, 2026 Closure evidence (batch 2c)
Verified against
origin/main(PR #16534, 722c3bc). All 3 ACs met; boxes ticked.AC Evidence Families read in sequence, or E's placement is explained docs/developer/MEASUREMENT_DISCIPLINE.md:124-126"E is the sixth family and is introduced further down… renaming it would break those"Family D carries the refusal mechanism and the STALE PR OBJECTexampleMEASUREMENT_DISCIPLINE.md:108-110"A verdict that stops you acting feels safe…";:112-115"A merge gate reportedSTALE PR OBJECT…"The #16120 helper names a pending state with an age scripts/lib/check_run_status.py:205pending_ages(observations),:235pending_check_ages(repository, sha); testscheck_run_status_test.py::test_a_running_context_reports_how_long_it_has_been_pending,::test_a_finished_context_carries_no_age
Two review findings on the merged
MEASUREMENT_DISCIPLINE.md(#16102). Filed rather than opened as a seventh PR — review capacity is the bottleneck, and both should ride with the next docs change.1. The family letters run A, B, C, D, F, then E
F was appended because E already existed in the gates section, and renaming would break the
Family Ereferences already posted on #16100 and #13148. That constraint is real. It is also exactly the reasoning that produces a label a reader cannot follow.This costs something here specifically, and nowhere else it might appear: a document arguing that a name which does not match what it labels sends the reader wrong is the one place a letter out of sequence is not free.
Fix: a forward pointer where F sits — E is introduced below, with the gate ladder its evidence belongs to. Preserves the external references; makes the sequence legible.
2. Family D is missing its mechanism
D says a correct output can support two causes with different remedies. It does not say why nobody checks, which is the load-bearing half:
The worked example is from the reviewing session's own gate: it reported
STALE PR OBJECTtruthfully for an hour while the reviewer supplied a cause the gate had never reported. The output was right; the explanation was invented on top of it and went unexamined because a refusal feels like it has already been investigated.That is also why D and the guard ladder's rung 2 are different failures rather than the same one — rung 2 is a guard answering an adjacent question, D is a human answering one on the guard's behalf.
3. Related, for the check-run helper (#16120)
Not a doc change, recorded here so it is not lost. #16120's criterion is that the helper must distinguish never reported from reported and not green. A third state is needed: pending, and for how long.
Two watchdog checks in one session had identical status and opposite meanings — one pending 9 minutes with the repo actively scheduling (fresh, wait), one pending 30 minutes while the repo stayed active (stuck, act). The difference is visible only in the ages, and a helper that collapses them loses the only signal that says whether waiting is the right move.
Acceptance criteria
Family Ereferences on guard(ansible): the slm_agent deploy task list is hand-maintained and unchecked against its directory #16100 and tech-debt(vnc/ansible): 3 hand-synchronised duplications that caused #13060 — role_*_active facts, noVNC pin, VNC launch params #13148STALE PR OBJECTworked exampleProvenance
Both found by the session reviewing the doc, not by its author — which is the document's own closing claim arriving as evidence about the document.