A benchmark that asks the question this project is built around - #340
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: WaylandYang <wayland0916@gmail.com>
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.
Closes #306.
The only number this repository could quote was Ontology2SQL on BIRD Mini-Dev. Nothing measured the thing it is actually built around — answering as of a date, and being right when the fact changed.
scripts/bench/temporal.mjsmeasures it, over a fixed corpus and a fixed question sheet that anyone can re-run.Two axes, which is the part nobody else has
atas_ofThe same entity on the same date can have different right answers on the two axes, and
aurora-lead-record-wave1-at-2024-08is that question: the world axis asks about August 2024 (Li Si had taken over), the record axis stops before the handover memo arrived (we only knew Zhang San). Answering Li Si is answering the past with today's knowledge.The record axis is not manufactured by moving clocks. The corpus is ingested in two waves; the timestamp taken after wave one is the record-axis boundary, and wave two brings the handover, a payroll correction and a document deletion. Every
as_of: "wave-1"question asks about a moment the product actually passed through.First results — 2026-09-05,
dev @ 1dd917b, DeepSeek-V3 + bge-m3--no-declare)The gap is the finding, and it is entirely on the world axis. Automatic closure runs off
functional/inverse_functional, and those are never inferred — deliberately, since they drive automatic rewrites of the ledger. On a base where nobody declared them, a succession is stored as two open facts:Two people running one project at the same time. Ask who ran it in June 2023 and both come back — on the question this product exists to answer. That is the shape a new deployment has out of the box, so it is filed as its own issue rather than buried in a benchmark table.
The record axis barely moves (7/8 vs 8/8) because it depends on no declaration at all:
recorded_atandinvalidated_atare written as the rows are written.Two more things the run surfaced, recorded rather than smoothed over
atomitted means "no world filter", not "now" — whileas_ofomitted does mean now. The two axes have different defaults, andaurora-lead-unfilteredpins that behaviour so a later change has to notice it.salaryvalue was dropped by extraction (extraction_drops,malformed_item): withnumberdeclared, the run where the model wrote "28000 CNY" failed validation. Refusing a dirty value is the deliberate choice; the benchmark just records that it happened.What is in the sheet
25 questions over one fictional company — successions, a corrected salary, an employment that predates the document stating it, a retracted document, and three questions whose right answer is nothing (before a project started, before someone was hired, after a fact was retracted). Reading an open interval as "always was" is the easiest bitemporal mistake to make, so it gets its own questions.
Scoring does not look at predicate names: an ontology may call it
works_fororemployed_by, and this bench measures time, not vocabulary.absent(extraction never produced the entity) is its own bucket rather than a temporal miss, as in the type-resolution bench next door.--chatruns the same sheet through the agent for the product-level number; the ledger run is the regression net.Verified by running it: the numbers above are from three full runs against a scratch deployment (its own database, its own data directory, a real model), not from a dry run.
🤖 Generated with Claude Code