fix(grounding): an undated simple-past passive is a claim, a dated one is not #566

Merged
coilyco-ops merged 1 commit from fix/an-undated-passive-is-still-a-claim into main 2026-08-13 16:03:07 +00:00
Member

closes #555

Family 2 is #559 and carries a question rather than a defect, so this closes #555 on the family that is purely a defect.

Measured by Quail (QA) — the family they proved was not a one-line change.

Why the obvious fix does not work

Adding was|were to passiveActionClaim catches all four shapes and false-fires:

FALSE FIRE  "The issue was created in June, before the wipe."

QA ran that and warned about it in the issue body before anyone tried it.

The design, and why this one

The check asks whether this turn wrote to the tracker. A sentence placing the event before this turn is reportage — out of scope by construction, not by leniency. So a past reference disqualifies the sentence exactly the way a denial already does, scoped to that sentence for the same reason polarity is.

I let the asymmetry pick it: refusing a correct reply is worse than missing a wrong one. A member told their true sentence is a lie gets no explanation and no recourse. I said on #555 before starting that if I could not get the negatives clean I would report the family unfixable rather than ship a narrower pattern that looked like it worked.

The measurement

All four shapes now reject. No regression on lines — the corpus's 23 correct replies all still pass, including the two past-tense rows QA added for exactly this widening:

"The issue was created in June, before the wipe."
"Those issues were opened long before you joined."

The second is why the pattern reads a bare before rather than only before the. I would not have found that by hand; the corpus found it on the first run.

Ten more reportage shapes are pinned in a new file, and one test proves the exemption does not leak across a sentence boundary.

Retirements

Four corpus rows and two characterization tests flip. Every one of them named its own retirement condition in its failure text, including the field and the value. That is the whole argument for writing them this way.

ward exec gate green.

closes #555 Family 2 is #559 and carries a question rather than a defect, so this closes #555 on the family that is purely a defect. **Measured by Quail (QA)** — the family they proved was *not* a one-line change. ## Why the obvious fix does not work Adding `was|were` to `passiveActionClaim` catches all four shapes and false-fires: ``` FALSE FIRE "The issue was created in June, before the wipe." ``` QA ran that and warned about it in the issue body before anyone tried it. ## The design, and why this one The check asks whether **this turn** wrote to the tracker. A sentence placing the event before this turn is reportage — **out of scope by construction, not by leniency**. So a past reference disqualifies the sentence exactly the way a denial already does, scoped to that sentence for the same reason polarity is. I let the asymmetry pick it: **refusing a correct reply is worse than missing a wrong one.** A member told their true sentence is a lie gets no explanation and no recourse. I said on #555 before starting that if I could not get the negatives clean I would report the family unfixable rather than ship a narrower pattern that looked like it worked. ## The measurement All four shapes now reject. **No `regression on` lines** — the corpus's 23 correct replies all still pass, including the two past-tense rows QA added for exactly this widening: > `"The issue was created in June, before the wipe."` > `"Those issues were opened long before you joined."` The second is why the pattern reads a bare `before` rather than only `before the`. I would not have found that by hand; the corpus found it on the first run. Ten more reportage shapes are pinned in a new file, and one test proves the exemption does not leak across a sentence boundary. ## Retirements Four corpus rows and two characterization tests flip. Every one of them named its own retirement condition in its failure text, including the field and the value. That is the whole argument for writing them this way. `ward exec gate` green.
fix(grounding): an undated simple-past passive is a claim, a dated one is not
All checks were successful
ci / image-build (pull_request) Successful in 23s
ci / test (pull_request) Successful in 41s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
6ede8d9d1b
passiveActionClaim required has or have been, so four shapes walked through it:
a tracking issue was created, an issue was opened for this, the correction was
filed for review, two issues were created.

QA measured that adding was or were alone false-fires on the issue was created
in June, before the wipe. That warning was right, and it is why the alternation
is not the whole change.

The check asks whether this turn wrote to the tracker. A sentence placing the
event before this turn is reportage, out of scope by construction rather than
by leniency, so a past reference disqualifies the sentence the way a denial
already does and scoped the same way.

The direction of the risk picked the design. Refusing a correct reply is worse
than missing a wrong one, because a member told their true sentence is a lie
gets no explanation. The corpus carries 23 correct replies including both past
tenses QA added for exactly this widening, and none of them regressed.

Four corpus rows and two characterization tests flip, each having named its own
retirement condition in its failure text.

Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
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!566
No description provided.