Repository navigation
Resolving relative dates against valid_at #364
Copy link
Copy link
Closed
Labels
wayfinder:grillingWayfinder grilling ticketWayfinder grilling ticket
Description
Activity
- added a parent issue
on Sep 28, 2026 Resolution
No relative-date resolver in v1: the event's date is its edge's
valid_at, made computable. The ticket's premise, inherited from #361, didn't survive measurement.Facts (the 18 date questions in the committed 100 goldens, against
longmemeval-ssession dates)questions served by valid_atalone?8 "between X and Y" across two sessions 8/8: gold answer = difference of the two evidence sessions' dates, to the day 2 "months since…" 2/2 at month granularity 8 "how long ago…" 7/8 exactly ( question_date − session date)#82, baking class ✗: the event is "yesterday" in its session (2022/03/21 → 03/20; cake 04/10): gold 21, valid_atgives 20Why: LongMemEval phrases every evidence event as "today"/"just" in its session (checked in each evidence turn: "I just harvested my first batch … today", "I just received my new tennis racket today"). The event date is the session date by construction. That is a benchmark artifact: nobody has measured how often a coding session says "yesterday I deployed…". What is measured is that resolution buys 1 question at ±1 day, and only if a
Datenode were extracted and linked to the event, which #361 got for neither MoMA visit.Also found:
- Every timestamp is a string.
Session.started_atholds the corpus's raw'2023/05/30 (Tue) 17:27'(inject.py:75), not ISO. The starter relation vocabulary #347'svalid_atwould be stamped from it, soduration.betweencannot run on it. - In the eval graph each turn's
Action.timestampis ingest wall-clock time:inject.pynever sets it. question_datenever reaches the retrieval agent, so the 8 "ago" questions are unanswerable in the eval whatever the graph holds. That is eval harness, filed as The retrieval agent is never given question_date #367 on map Map: Context-graph emergence pipeline — reconciliation, retrieval, eval #297.
Decisions
- No resolver in v1.
Datekeeps raw text and stays span-scoped (Values, not links: do entity attributes belong in the model #361), so question 4 is moot. An event's date is its edge'svalid_at.Daterecall no longer blocks these questions (question 5), andDatestays in the fixed core for stated dates. Revisit when the coding corpus shows how often events aren't same-day. valid_atis a Memgraph temporal value, normalized by the writer rather than copied from the corpus string, so date arithmetic is a deterministicduration.betweenin Cypher and not LLM arithmetic (question 1's eval: the judge scores identical answers differently, which is what makes the passing set unstable #324 concern, answered by making the query computable, not by resolving at write time).valid_atis the source turn'sAction.timestamp, not the session'sstarted_at(question 3). After Chunking and the durability of constraints #352 every edge comes from exactly one turn's window, so this is free, and it is right for a resumed session days after it started. Requiresinject.pyto stamp each turn with the fixture's session date, or every evalvalid_atis the run date. Revises The starter relation vocabulary #347's "valid_atfrom the session".- Correction: Values, not links: do entity attributes belong in the model #361's "10 are between X and Y and need the discussed event's date, which
valid_atis not — the largest unserved bucket (11%)" is wrong.valid_atserves 8 of those 10 exactly, and 2 were month-granularity. Values, not links: do entity attributes belong in the model #361 and its map line are amended.
- Every timestamp is a string.
- added 6 commits that reference this issue
on Sep 29, 2026
Metadata
Metadata
Assignees
Labels
wayfinder:grillingWayfinder grilling ticketWayfinder grilling ticket
Part of #344
Question
#361 made
Datea value type: an extracted span-scoped node, related into by a temporal relation such ashappened_on. But what lands in it is mostly not a date. What turnsDate:'last Thursday'into something a "how many days between X and Y" question can compute on?Measured for #361:
valid_at, which The starter relation vocabulary #347 stamps from the session, is when the conversation happened, so it doesn't serve them. (The 8 "how long ago…" questions are served byvalid_atalone.)last summer×4,today×4,last Thursday×2,a few weeks×2,recently×2,this year. All 6 absolute mentions areMay 6.Datementions, mostly weekday names (sunday×14 from one shift table), years from an art-history digression (1927,1940), and junk (Date:'18'). It extracted no date for either MoMA visit.The anchor exists: the writer already knows each session's date, because that's what it stamps as
valid_at.Open:
valid_atat write time (deterministic, same placevalid_atis stamped), or should the reader or retrieval agent do the arithmetic at query time? eval: the judge scores identical answers differently, which is what makes the passing set unstable #324 measured that the retrieval agent is non-deterministic even attemperature=0, which argues against leaving date arithmetic to it.last Thursdayandtodayresolve deterministically.last summerresolves to an interval.a few weeksandrecentlydon't resolve at all. What does the node carry for each: a resolved date, an interval, or raw text only, and how does a reader tell them apart?valid_ats. Is session granularity enough, or does resolution need the turn's own timestamp?Datespecifically, where the resolved value is comparable across sessions?Datedescription and temporal relations) rather than this ticket's?Interacts with #347 (
valid_atis the anchor), #361 (Dateas a span-scoped value type), #353 (derivation emits the temporal relations), and #324 (why not to leave the arithmetic to the retrieval agent).