tri topic: has someone already done this, or are they doing it now? - #3066
Conversation
Closes #3065 Twice in one session I started work another session had shipped or had open. #3049 shipped `tri gates quiet` and `tri gates empty`, which cover two of the four lenses a 29-agent fan-out of mine was scanning at the same moment. #3056 shipped `tri skill refs` -- every cross-reference and whether it resolves -- which is the tool for a dangling pointer I had just written a paragraph about. The first was an OPEN PULL REQUEST the whole time I was scanning. The second was a merged commit. Neither was hard to find afterwards; both were free to find before, and the reason I did not is that it takes four commands and none of them is habit. So: one command over open PRs, open issues, the last N commits on the base branch, and every SKILL.md section title. A row matches on any keyword and rows are ordered by how many DISTINCT keywords they carry -- ranking by occurrences would put a title repeating one word above one carrying two. Verified retroactively on both collisions: each comes out at the top of its own query. It prints the DISTRIBUTION rather than applying a threshold. 468 of 694 on a three-word query is not a result, and a cutoff would need a number nobody has measured -- which is the mistake that produced a three-state column with no correct members earlier the same day. It refuses when `gh` cannot answer, and says so in the words this repository uses. "Nobody else is working on this" and "I could not ask" are the same empty list, which is the defect the last five issues here have all been about. Four mutants, four kills, each by exactly one test, with passed+failed asserted against the expected six every time -- because `cargo test topic` also matches `issues::tests::the_matcher_reads_the_claim_and_not_the_topic`, and a filter that catches somebody else's test is how a mutant reads as surviving. Stated in the module rather than left to be found: it reads titles, not bodies or diffs, so a pull request whose title does not name its subject is invisible here, and the ordering is a word count, not an understanding.
Refs #3065 The section this session earned twice over. My own check printed OK=False -- 442 sections where 440 were expected -- and I pushed. The file had three of master's sections duplicated. The tool was handed the wrong input, which is ordinary; the lesson is that the guard which caught it reached nobody because its answer was a line of text rather than an exit code the push was downstream of. Two smaller versions the same hour, both caught because the guard sat in the right place: a stale binary answered with its usage text (the merge was resolved but never concluded, so the binary predated the code), and a completed merge still did not have origin/master as an ancestor because master moved underneath it. The section is placed by the command it sits next to, so its number came from tri skill renumber rather than by hand -- and this commit's own check gates the push on exit code, which is the thing it is about.
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
1 similar comment
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-09-03 22:12:51 UTC
Summary
Seal Status
|
PR DashboardGenerated at: 2026-09-03 22:17:56 UTC
Summary
Seal Status
|
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Refs #3065 Found on this command's SECOND use, by me. `for q in "a b c"; do tri topic $q; done` in zsh does not word-split, so the whole phrase arrived as one keyword, matched nothing, and the command answered `rows matching 0` -- which reads as "nobody else is working on this". That is the exact sentence this command exists to keep from being said wrongly, produced by its own input handling, four queries in a row, and I believed all four until I re-ran one I knew had matched. Refused rather than answered, with the split spelled out. A single word padded with spaces is not a quoting mistake and is not flagged -- mutating the guard to `k.contains` instead of `k.trim().contains` kills that assertion. Prior art, checked rather than assumed: pytest reserves exit code 5 for "No tests were collected" as a public-API outcome distinct from 1 (tests failed), 2 (interrupted), 3 (internal error) and 4 (usage error). This repository's convention -- 2 for everything that is not a reading -- is coarser than the field's by one distinction: "the instrument is missing" and "the population is empty" are the same code here and different codes there.
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-09-03 22:28:58 UTC
Summary
Seal Status
|
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-09-03 22:36:00 UTC
Summary
Seal Status
|
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-09-03 23:02:58 UTC
Summary
Seal Status
|
Closes #3065
The cost, measured
Twice in one session I started work another session had shipped or had open:
--gatecommandstri gates quietandtri gates emptycover two of my four lenses§Ncross-referencetri skill refs, every cross-reference and whether it resolvesRoughly half a fan-out duplicated ground that was already shipped. Both were free to find beforehand; what was missing was one command instead of four.
Verified retroactively on both collisions
Each comes out at the top of its own query. Ranking is by distinct keywords, not occurrences — a title repeating one word five times is not a better match than one carrying two different words.
The distribution is printed; no threshold is applied
468 of 694on a three-word query is not a result. A cutoff would need a number nobody has measured — and that is exactly the mistake that produced a three-state column with no correct members earlier today (#3057). One line showing the shape beats a heuristic hiding it.It refuses when it cannot ask
"Nobody else is working on this" and "I could not ask" are the same empty list. When
ghis absent or errors, this exits with the repository's own words — the defect #3025, #3045, #3059, #3061 and #3063 have all been about.Evidence
contains("")is true of everything)ghreturns an empty stringcargo test -p tri --bins→ 581 passed, 0 failed, 0 filtered.Every mutant row asserts
passed + failed == 6, becausecargo test topicalso matchesissues::tests::the_matcher_reads_the_claim_and_not_the_topic— a filter that catches somebody else's test is how a mutant reads as surviving.Stated in the module, not left to be found
It reads titles and headlines, not bodies or diffs: a pull request whose title does not name its subject is invisible here, and the ordering is a word count, not an understanding. A two-second check against a class of waste measured at two occurrences in one session — not a search engine.
Its first real use was on itself (
tri topic topic duplicate overlap→ three unrelated rows), which is the procedure it exists to make cheap.