Repository navigation
feat(claims): extract stated event intervals with each bound's own precision (#717, slice 4) - #926
Conversation
…ecision (#717, slice 4) stated_event_time left every sentence with interval wording unknown. It now reads "from D1 to|until|till|through D2" and "between D1 and D2" as a closed interval, "since D" as a start with an unknown end, and "until|till D" as an end with an unknown start. Each bound keeps its written precision and zone. Abbreviated ranges ("from 10 to 12 March 2026", "10-12 March 2026") stay unknown: their first end names no month or year, and copying them from the second end would invent them. An end before its start, or a pair where only one end states a zone, is rejected by EventTime and stays unknown. The empty-default mutant of _word_before is registered as an equivalent. Refs #717 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_018kyZYs2Nms1G85LP4zC4Lk
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude finished @cdeust's task in 2m 5s —— View job PR #926 review (1 of 3)
I found no Blockers and posted three Notes. I couldn't run pytest or the craftsmanship script because Python needs approval in this sandbox, so CI will have to confirm them. Verdict: approve |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8d1725205a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if word in _OPEN_START_WORDS: | ||
| return EventTime(kind="interval", end=bound) |
There was a problem hiding this comment.
Reject abbreviated closed ranges before accepting an open bound
For We used Redis from 10 until 12 March 2026., only the second endpoint matches a full date, so this branch returns an interval with an unknown start and an end of March 12. The same happens with till. These are abbreviated closed ranges, which the documented contract explicitly leaves unknown, not genuinely open-start intervals. This silently drops the stated lower endpoint and persists a different temporal meaning. Before accepting a single-bound frame, check that it is not the surviving endpoint of an unsupported closed range, and add regression cases for both connectors.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Confirmé et corrigé dans 830568c. Sur 8d17252, « We used Redis from 10 until 12 March 2026. » (et la même phrase avec till) donnait un intervalle à fin seule au 2026-03-12, ce qui perdait la borne de début écrite. Une borne seule n'est désormais ouverte que si son mot-cadre est la seule formulation d'intervalle de la phrase (_RANGE_RE y trouve une seule correspondance). Ces deux phrases, plus « Since 10 until 12 March 2026… », restent unknown. « We worked from home until March 2026. » reste une fin seule, car « from home » n'est pas une formulation d'intervalle. Les 79 tests du module passent. Porte de mutation locale : aucun survivant non enregistré.
Generated by Claude Code
Review 1 of 3 — PR #926 (#717, slice 4)I found no Blockers. Five reviews ran (code quality, docs accuracy, performance, security, test coverage), all by reading the code:
I couldn't run pytest or the craftsmanship script here because Python needs approval in this sandbox, so CI will have to confirm them. Notes, no action before merge
Verdict: approve |
… own precision (#717, slice 4) Codex review on 8d17252 (PR #926): in "from 10 until 12 March 2026" only the second end is a full date, so the single-bound branch returned an end-only interval and dropped the stated start. A single bound is now open only when its frame is the sentence's only interval wording; the abbreviated closed range stays unknown, as the module contract states. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_018kyZYs2Nms1G85LP4zC4Lk
|
Claude finished @cdeust's task in 1m 47s —— View job PR #926 review (2 of 3)
The fixup fixes the Codex finding: "from 10 until 12 March 2026" now gives I couldn't run pytest because Python needs approval in this sandbox, so CI will have to confirm the tests. Verdict: approve |
… own precision (#717, slice 4) Claude review 1 of 3 on PR #926: the slice-3 CHANGELOG entry still said "since 2026-01" stays unknown, which slice 4 changes; and no test covered from...till or a lone "through D" (interval wording with no open-bound frame, so unknown). Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_018kyZYs2Nms1G85LP4zC4Lk
|
Suite à la revue 1 of 3 (Claude), dans 7751462 :
Generated by Claude Code |
|
Claude finished @cdeust's task in 1m 34s —— View job PR #926 review (2 of 3)
I found no Blockers and posted three Notes:
I couldn't run pytest or the mutation gate because Python needs approval in this sandbox, so CI will have to confirm them. Verdict: approve |
Review 2 of 3 — PR #926 (#717, slice 4)Scope: only the commit pushed after The fix works for the Codex finding. For "from 10 until|till 12 March 2026",
I found no Blockers. Notes, no action before merge
Verdict: approve |
|
Revue 2 of 3 (Claude) : les deux notes sont prises en compte, sans nouveau push.
Generated by Claude Code |
Review 2 of 3 — PR #926 (#717, slice 4)There were no earlier Blockers to check. This review covers only the commits pushed after 8d17252 (830568c, 7751462). I traced the code and ran five reviews: code quality, docs accuracy, performance, security and test coverage. Codex P2 is fixed. "We used Redis from 10 until 12 March 2026." now gives two Other checks are clean:
I could not run pytest or the mutation gate because Python needs approval in this sandbox, so the results above come from reading the code and CI will have to confirm them. Notes, no action before merge
Verdict: approve |
|
Deuxième passage de la revue 2 of 3 (sur 7751462) : ses trois notes recoupent celles auxquelles j'ai déjà répondu.
Generated by Claude Code |
Summary
Tranche 4 de #717 :
stated_event_timelisait toute phrase contenant une formulation d'intervalle commeunknown. Elle lit désormais les intervalles bornés par des dates complètes, chaque borne gardant sa précision et son fuseau écrits :from D1 to|until|till|through D2etbetween D1 and D2→ intervalle fermé ;since D→ début connu, fin inconnue ;until|till D→ fin connue, début inconnu.Cause racine : la tranche 3 avait volontairement laissé
_RANGE_REcourt-circuiter toute la lecture (« stays unknown until intervals are extracted »), alors queEventTime(tranche 1) et le stockage (tranche 2) portent déjàkind="interval"avec bornes optionnelles.Ce qui reste
unknown, pour ne pas inventer de date : les intervalles abrégés (« from 10 to 12 March 2026 », « 10-12 March 2026 ») dont la première borne ne donne ni mois ni année ; une fin avant le début ; une paire où une seule borne indique un fuseau (refusé parEventTime) ; toute autre formulation.Refs #717
Type of change
Test plan
pytest tests_py/core/test_claim_event_time.py: 75 passés. Quatre phrases qui étaient attenduesunknown(« Since 2026-01… », « …until March 2026 », « From 2026-01 to 2026-03… », « Between March 2026 and 4 April 2026… ») sont maintenant des intervalles, comme voulu. Nouveaux cas négatifs : fin avant début, fuseau sur une seule borne, mauvais mot de liaison, trois dates, date impossible, date en tête de phrase.-k "claim or event_time or wiki_extract or mutation"surtests_py/coreettests_py/handlers) : 140 passés, 1 ignoré.scripts/mutation_check.shsurclaim_event_time.py) : 204 mutants, 203 tués, 1 survivant enregistré comme équivalent par construction (x__word_before__mutmut_8, valeur par défaut""→"XXXX", aucune des deux n'est un mot de cadre).ruff check/ruff format --check(0.17.3, version deuv.lock) sur les fichiers modifiés, porte craftsmanship OK.Audit notes
core(+shared.wiki_irdéjà importé), pas de nouvel import.event_timedans la synthèse et la recherche (wiki_viewne filtre pas encore parevent_time, et la sémantique de comparaison entre précisions et fuseaux reste à décider), plus les intervalles abrégés. Suivi dans feat: preserve event time separately from extraction time in ClaimEvent #717.Coding-standards compliance
# source:.Breaking changes
Aucun pour le schéma :
event_timeaccepte déjàintervaldepuis la tranche 1. Certaines claims qui sortaientunknownsortent maintenantinterval.Reviewer checklist
Generated by Claude Code