Skip to content

tri triage: five ordered classes, and blocked is tested before actionable (#2156) - #2157

Open
gHashTag wants to merge 2 commits into
masterfrom
w699-triage-five-classes
Open

tri triage: five ordered classes, and blocked is tested before actionable (#2156)#2157
gHashTag wants to merge 2 commits into
masterfrom
w699-triage-five-classes

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closes #2156

tri triage had three classes and made actionable the default: anything whose title did not look like a journal entry was counted as available work. Three kinds of issue cannot be picked up and finished, and all three were being advertised — blocked on hardware or a human, research with no checkable end, and duplicate or obsolete. The reported "~26 actionable" was an upper bound being read as an estimate, so a loop taking its next item from that list would periodically pick something it could not finish.

Five classes, matched in order

actionable   a defect or change with a checkable completion condition
research     an open question; done is judgement, not a check
tracking     journal entry, plan or epic; records or aggregates, never closes
blocked      needs something outside the tool: hardware, upstream, a human, a credential
duplicate    superseded, obsolete, or the same subject as an earlier issue

Order is load-bearing. blocked is tested before actionable, so a blocked defect is never offered as available. duplicate is tested last, because a duplicate that is also blocked is more usefully reported as blocked.

Measured, over 241 open issues

class count share
actionable 45 19%
research 0 0%
tracking 189 78%
blocked 7 3%
duplicate 0 0%

The seven blocked items were previously inside the actionable count. That is the whole point of the change: seven items that a loop cannot finish were being advertised as work it could take.

Two honest weaknesses in this change

research scored zero, and I did not tune the rule until it stopped. The signal reads title form — a trailing question mark, an interrogative opening, hypothes…. This tracker's titles are declarative sentences, so the signal does not fire. Some of the 45 actionable are certainly research questions phrased as statements. Reporting 0 is the honest output of the rule as written; adjusting the regex until the histogram looked plausible would have been fitting the classifier to a desired answer. The rule needs a better signal, not a wider one, and that is a separate change.

duplicate also scored zero, and for a weaker reason. The rule looks for explicit phrases (duplicate of, superseded by, obsolete) in the title or the first 2000 characters of the body. A genuine duplicate that nobody has labelled as one is invisible to it. Finding those needs subject comparison across issues, which this tool does not do and should not pretend to.

So actionable = 45 remains an upper bound. It is a tighter one than before by exactly the seven blocked items, which is a real improvement and a small one.

Autoclose is forbidden, in the code and in the output

The tool prints and exits. It closes nothing, labels nothing, and mutates nothing. 80% of this tracker is journal record with no completion condition; a title regex is not grounds to destroy it. The printed footer says the classification is a composition estimate and never a verdict on a single issue, so a reader who sees only the output cannot mistake it for a mandate.

--json emits counts for all five classes even when a class is empty, so an empty class reads as a visible zero instead of being silently absent — which is what would let research: 0 pass unnoticed.

Also here: loop helpers get a dispatcher

scripts/tri now dispatches tri <name> to scripts/tri_loop/<name>.py before forwarding anything to t27c, and tri loop-help lists the helpers with their one-line purpose taken from their own docstrings. They are deliberately outside t27c: they report on the repository rather than compile it, and a broken helper cannot take the compiler's CLI down with it.

Checks

  • docs/NOW.md has the section prepended with Closes #2156 and a current date.
  • First-party document language check: 8 errors before this change and 8 after — all pre-existing Cyrillic in docs/reports/ and docs/wave_ecosystem_2026-07-08/, none in a file this PR touches. Baseline unchanged.
  • No change to bootstrap/src/compiler.rs, so FROZEN_HASH is untouched and no re-freeze is needed.
  • Nothing in this PR alters compiler output, so a diffbin differential has nothing to compare.

Not merging. Merge is a human decision.

…able (Closes #2156)

Three classes made actionable the default, so anything unrecognised counted as
available work. Blocked, research and duplicate items were all advertised, and
the reported count was an upper bound read as an estimate.

Five classes, first match wins, blocked before actionable. Over 241 open issues:
45 actionable, 0 research, 189 tracking, 7 blocked, 0 duplicate. research=0 is a
limitation of a title-form signal on a tracker of declarative titles, reported
as measured rather than tuned.

Autoclose forbidden: the tool prints and exits, and says its output is a
composition estimate rather than a verdict on any single issue.

Loop helpers dispatch from scripts/tri_loop/ via tri <name>; tri loop-help lists
them.
@github-actions

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-14 19:02:44 UTC

Summary

Status Count
Total Open PRs 21
PRs with Failing Checks 8
PRs with All Checks Green 13
READY 5
FAILING 8
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=cd2822f290eb != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

…loses #2156)

The previous commit landed triage.py alone. The dispatcher and the NOW.md entry
were staged, then unstaged by a `git stash` / `git stash pop` used to establish
the language-check baseline, and the commit took only what was still in the
index. Without the dispatcher `tri triage` does not resolve at all, so the
branch as first pushed was inert.

Recorded rather than amended away: a verification step that mutates the index is
the defect, not the missing file.
@github-actions

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-14 19:03:19 UTC

Summary

Status Count
Total Open PRs 21
PRs with Failing Checks 8
PRs with All Checks Green 13
READY 5
FAILING 8
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=cd2822f290eb != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

tri triage calls everything it does not recognise actionable, so blocked work is advertised as available

1 participant