feat(tri): separate figures over a sliding population, and hoist the rule out of the figure filter - #3027
Merged
Merged
Conversation
…rule out of the figure filter Seven headline figures published in this session were re-read hours later. Three had moved, and all three stand over a population that is a QUERY rather than a set: 4/33 -> 3/37 (the last 20 commits), 121/40/116 -> 126/44/121 (the skill grows), 288 -> 287 (the live backlog). The three over files on disk did not move at all. The claim survives; the number does not, so re-measuring such a figure is a first reading of a different population rather than a second reading of the same one. `tri skill claims --windowed` reports them: 14 of 422 sections describe a windowed population, anchored to c039ebe because two of the fourteen are the sections added here -- writing the figure moved its population. The placement was the finding. Written after the existing filter that keeps sections whose HEADING states a figure, the check reported 4 of 126; a hand count over every section said 12 of 420. Neither number is an error -- they answer different questions -- and the section the filter dropped was 179, whose title IS the rule ("A `--limit` on a run list is a time window in disguise"). The command now prints both counts on adjacent lines so neither can stand alone, and a test asserts the two rules disagree on that one string without needing the corpus. `names_its_anchor` is an UPPER bound and says so: over the original twelve it reported 3, all three were read by hand, and one does not survive -- section 125 dates its CLAIM while the window it read is dated nowhere. A looser matcher keyed on the word `today` fires on 28 further sections stating no window at all; excluded, with the count printed. Nine clauses were mutated and each killed a test. Three clauses survived mutation and also moved nothing on the corpus: a label de-duplication the caller cannot observe and a left word-boundary check were deleted, and one character position of the date pattern was the wrong unit -- the shape is now `is_iso_date`, tested as one rule. Refs #2994
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
Contributor
PR DashboardGenerated at: 2026-09-03 14:16:19 UTC
Summary
Seal Status
|
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
PR DashboardGenerated at: 2026-09-03 15:05:23 UTC
Summary
Seal Status
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Seven headline figures published in this session, one per merged PR, were read again hours later. Three had moved, and all three stand over a population that is a QUERY rather than a set.
tri skill claimsfigures / instruments / freetri issues numberspopulationtri gates emptytri quantifiers reporttri gates sweepverdictstools/-- FIXEDThe claim survives -- the local vocabulary really does see a fraction of what the gates accept -- and the number does not. Re-measuring such a figure is not a second reading of one population; it is a first reading of a different one.
The placement was the finding
The check was first written after the existing filter that keeps sections whose HEADING states a figure.
Neither number is an error -- they answer different questions, and only one is the question the rule asks. The section the filter dropped was section 179, whose title IS the rule: "A
--limiton a run list is a time window in disguise".A disagreement between a hand count and a fresh matcher is a population question first and a logic question second. The command now prints
14 (of ALL 422 sections, not of the 126)so neither count can stand alone, and the test that would have caught it needs no corpus -- it asserts the two rules disagree on one string, and says so if that heading ever gains a digit.The anchor count is an upper bound and says so
names_its_anchorasks "is there a revision or an ISO date anywhere", which is necessary but not sufficient. Over the original twelve it reported 3; all three were read by hand and one does not survive -- section 125 says "checks have not fired since 2026-08-24 11:06", a date anchoring the CLAIM, while the window it read was "the last 10, then 60 runs" and is dated nowhere. A section the rule rejects is definitely unanchored; one it accepts merely might be. No lower bound is claimed.A looser matcher keyed on the word today fires on 28 further sections stating no window at all -- excluded as a matcher describing its input, with the count printed rather than dropped.
Nine clauses killed, three priced and removed
Four clauses of
window_markersand five of the date shape were mutated; each killed a test. TheANCHOR NOT FOUNDguard fired once on a literal newline escape that never expanded -- the mutant was refused rather than scored as a pass.Three clauses survived mutation and moved nothing on the corpus: a label de-duplication the caller cannot observe, a left word-boundary check, and one character position of the date pattern. The first two were deleted; the third was the wrong unit -- mutating one conjunct of a ten-conjunct shape asks a question no natural input answers -- so the shape was extracted as
is_iso_dateand tested as ONE rule.cargo test -p tri window_tests::,iso_date_tests::reported0 passed; 489 filtered out: the filter is a substring, not an alternation. Modules were run separately with an empty-sample guard.The figure moved because writing it moved the population
Adding these two sections took the count from 12 of 420 to 14 of 422 -- two of the fourteen are sections 457 and 458. That is why the reading is anchored to
c039ebebeinstead of dated "currently", and both new sections carry an anchor on purpose.cargo test -p tri-- 489 passed, 0 failedtri skill check-- 422 sections, no number used twiceRefs #2994