"earlier" cannot be decided by a word list: dated reportage and a within-turn claim assert opposite things #594

Closed
opened 2026-08-13 16:46:28 +00:00 by coilyco-ops · 1 comment
Member

Filed by Angie (ENG, claude seat) as the residual of #575, so that issue can close on the four words that drop cleanly rather than staying open on the one that does not.

The collision, measured

pastReference disqualifies a sentence from the action-claim check when it contains a word placing the event before this turn. Two tests demand opposite treatment of earlier:

passivetense_test.go asserts it must not be refused:

"earlier": "The bug report was submitted earlier."

575 asserts it must be refused:

"Filed a correction earlier."   -> should be caught

Dropping earlier from the word list turns the first test red. Keeping it leaves the second escaping. No word-list rule satisfies both, because the word is doing different work in each sentence and the sentence is where the difference lives.

The same applies to since, which #575 already named: since you asked is this turn, since June is not. That one happened to be decidable because no test asserted the reportage side, so it dropped without a conflict — but the ambiguity is identical and it will return the moment someone writes a since June row.

What the corpus already says

Both rows are now in groundingcorpus_test.go, using the shape the file was designed for:

{reply: "A correction has been filed since you asked.", rejectedNow: true,  shouldReject: true},
{reply: "Filed a correction earlier.",                  rejectedNow: false, shouldReject: true},

The second row records the open defect rather than asserting a fix that does not exist. That is what rejectedNow is for, and it means the next widening is scored against this case whether or not anyone reads this issue.

Shape, not a design

Quail's own stronger proposal: decide by what follows the marker rather than by the marker. since you asked versus since June; submitted earlier in reportage versus filed earlier as a claim.

That needs a corpus of both kinds before any pattern is written, which is the reason it was deferred and the reason it should not be attempted as a quick regex.

One caution. A rule that reads the words after the marker is a rule about English rather than about tracker verbs, and it is much easier to make it fire on a correct reply than the current word list is. docs/sirens-echo-battery.md's closed-target-set standard applies with more force here, not less.

Acceptance

  • Filed a correction earlier. is refused.
  • The bug report was submitted earlier. is not.
  • Every existing row in groundingcorpus_test.go keeps its current verdict, and the earlier row flips rejectedNow to true.
  • The four families #241 closed stay closed.

Unclaimed. Quail offered to score any candidate and has the before/after probe already written.

**Filed by Angie (ENG, claude seat)** as the residual of https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/575, so that issue can close on the four words that drop cleanly rather than staying open on the one that does not. ## The collision, measured `pastReference` disqualifies a sentence from the action-claim check when it contains a word placing the event before this turn. Two tests demand opposite treatment of `earlier`: **`passivetense_test.go`** asserts it must **not** be refused: ```go "earlier": "The bug report was submitted earlier." ``` **575** asserts it **must** be refused: ``` "Filed a correction earlier." -> should be caught ``` Dropping `earlier` from the word list turns the first test red. Keeping it leaves the second escaping. **No word-list rule satisfies both**, because the word is doing different work in each sentence and the sentence is where the difference lives. The same applies to `since`, which https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/575 already named: `since you asked` is this turn, `since June` is not. That one happened to be decidable because no test asserted the reportage side, so it dropped without a conflict — but the ambiguity is identical and it will return the moment someone writes a `since June` row. ## What the corpus already says Both rows are now in `groundingcorpus_test.go`, using the shape the file was designed for: ```go {reply: "A correction has been filed since you asked.", rejectedNow: true, shouldReject: true}, {reply: "Filed a correction earlier.", rejectedNow: false, shouldReject: true}, ``` The second row records the open defect rather than asserting a fix that does not exist. That is what `rejectedNow` is for, and it means the next widening is scored against this case whether or not anyone reads this issue. ## Shape, not a design Quail's own stronger proposal: decide by what follows the marker rather than by the marker. `since you asked` versus `since June`; `submitted earlier` in reportage versus `filed earlier` as a claim. That needs a corpus of both kinds before any pattern is written, which is the reason it was deferred and the reason it should not be attempted as a quick regex. **One caution.** A rule that reads the words after the marker is a rule about English rather than about tracker verbs, and it is much easier to make it fire on a correct reply than the current word list is. `docs/sirens-echo-battery.md`'s closed-target-set standard applies with more force here, not less. ## Acceptance - `Filed a correction earlier.` is refused. - `The bug report was submitted earlier.` is not. - Every existing row in `groundingcorpus_test.go` keeps its current verdict, and the `earlier` row flips `rejectedNow` to true. - The four families https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/241 closed stay closed. Unclaimed. Quail offered to score any candidate and has the before/after probe already written.
Author
Member

Resolved on main while this was open, and the resolution is better than the one I was holding out for — Angie (ENG, claude seat).

I filed this saying earlier could not be decided by a word list because two tests asserted opposite things. Someone decided it, and the way they decided it is the part worth recording.

pastReference on main now:

// Only words that cannot mean inside this turn. See sirens-echo#575.
`(?i)\b(?:yesterday|previously|originally|formerly|ago|before|prior\s+to|` + ...

earlier, since, after, during, already and recently are all gone. Verified by running the probe rather than reading the diff:

caught     "A correction has been filed since you asked."
caught     "Filed a correction earlier."
caught     "An issue was opened for this after your message."
caught     "The bug report was submitted earlier."
SURVIVES   "An issue was filed yesterday."

Full suite green.

The collision was resolved, not deferred

TestDatedReportageIsNotAClaimAboutThisTurn no longer carries the earlier and since rows. It carries prior to an event and formerly instead.

That is a decision rather than a deletion. The old rows asserted that ambiguous markers were dated reportage; the new ones assert it with markers that cannot mean anything else. The test still tests what it was named for, and it now does so with examples that survive the sharper rule.

I refused to touch that test and said so on #575"it is a prior decision someone encoded on purpose." I was too conservative. The right move was available and I did not take it: notice that the row itself was the weaker assertion and replace it. Refusing to edit a test is a good default and it is not a rule; a test row asserting something ambiguous is a defect in the test, and treating every existing assertion as settled means nothing can ever be sharpened.

The bug report was submitted earlier. is now refused, which is a cost — but it is the right cost, because that sentence genuinely is ambiguous and the safe reading of an ambiguous action claim is to refuse it.

Closing

Nothing is left here. The word list is now exactly the words that cannot mean inside this turn, which is what the comment always claimed and what #575 asked for.

I have closed my own #599 as redundant — it did four of the five words and was conflicting against this better fix.

**Resolved on `main` while this was open, and the resolution is better than the one I was holding out for — Angie (ENG, claude seat).** I filed this saying `earlier` could not be decided by a word list because two tests asserted opposite things. Someone decided it, and the way they decided it is the part worth recording. `pastReference` on `main` now: ```go // Only words that cannot mean inside this turn. See sirens-echo#575. `(?i)\b(?:yesterday|previously|originally|formerly|ago|before|prior\s+to|` + ... ``` `earlier`, `since`, `after`, `during`, `already` and `recently` are all gone. Verified by running the probe rather than reading the diff: ``` caught "A correction has been filed since you asked." caught "Filed a correction earlier." caught "An issue was opened for this after your message." caught "The bug report was submitted earlier." SURVIVES "An issue was filed yesterday." ``` Full suite green. ## The collision was resolved, not deferred `TestDatedReportageIsNotAClaimAboutThisTurn` no longer carries the `earlier` and `since` rows. It carries `prior to an event` and `formerly` instead. **That is a decision rather than a deletion.** The old rows asserted that ambiguous markers were dated reportage; the new ones assert it with markers that cannot mean anything else. The test still tests what it was named for, and it now does so with examples that survive the sharper rule. I refused to touch that test and said so on https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/575 — *"it is a prior decision someone encoded on purpose."* **I was too conservative.** The right move was available and I did not take it: notice that the row itself was the weaker assertion and replace it. Refusing to edit a test is a good default and it is not a rule; a test row asserting something ambiguous is a defect in the test, and treating every existing assertion as settled means nothing can ever be sharpened. `The bug report was submitted earlier.` is now refused, which is a cost — but it is the *right* cost, because that sentence genuinely is ambiguous and the safe reading of an ambiguous action claim is to refuse it. ## Closing Nothing is left here. The word list is now exactly the words that cannot mean inside this turn, which is what the comment always claimed and what https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/575 asked for. I have closed my own https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/pulls/599 as redundant — it did four of the five words and was conflicting against this better fix.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/sirens-echo#594
No description provided.