What happens
When the model writes a fact with both a value and an object that it did not declare as an entity, the whole fact is lost: the value, the object phrase and the evidence.
Seen on the recall bench (NVIDIA corpus, DeepSeek-V3), in the SB Energy exhibit chunk:
{"subject": "SB Energy", "subject_ref": "k2", "predicate": "build",
"object": "new energy generation", "object_ref": null,
"value": "at least 10 GW",
"quote": "SB Energy and SoftBank will build at least 10 GW of new energy generation"}
The same chunk in another round came back as value-only ("value": "at least 10 GW of new energy generation", no object), and those facts landed. So whether "at least 10 GW", "at least $4.2 billion" and "incremental $40 million" reach the graph depends on which of two equally reasonable shapes the model picks. One round lost all three (46/52 → 40/52 on the exhibit alone). The shape shows up in 0–1.5% of facts per round, on builds before and after #637 and #670.
Why
In extraction.rs, the literal branch accepts (value, no object), an object that is itself a quantity, and an undeclared literal-looking object under an unknown predicate. (value, undeclared non-literal object) matches none of those, so the fact goes to the relation path. There its object isn't a declared entity, and it is dropped.
Fix
This is structure only, with no words involved. When a fact carries a value and its object is neither referenced (object_ref) nor declared in the response, the value is the literal. Keep it as a value fact, and carry the object phrase in the surface predicate: build + "new energy generation" is proposed as build new energy generation. The phrase is kept rather than discarded, and the quote stays as evidence. A declared or referenced object keeps the relation path as today.
Test: that exact reply shape lands as a value fact with the phrase in its proposed predicate. A declared object still makes an edge.
What happens
When the model writes a fact with both a
valueand anobjectthat it did not declare as an entity, the whole fact is lost: the value, the object phrase and the evidence.Seen on the recall bench (NVIDIA corpus, DeepSeek-V3), in the SB Energy exhibit chunk:
{"subject": "SB Energy", "subject_ref": "k2", "predicate": "build", "object": "new energy generation", "object_ref": null, "value": "at least 10 GW", "quote": "SB Energy and SoftBank will build at least 10 GW of new energy generation"}The same chunk in another round came back as value-only (
"value": "at least 10 GW of new energy generation", no object), and those facts landed. So whether "at least 10 GW", "at least $4.2 billion" and "incremental $40 million" reach the graph depends on which of two equally reasonable shapes the model picks. One round lost all three (46/52 → 40/52 on the exhibit alone). The shape shows up in 0–1.5% of facts per round, on builds before and after #637 and #670.Why
In
extraction.rs, the literal branch accepts(value, no object), an object that is itself a quantity, and an undeclared literal-looking object under an unknown predicate.(value, undeclared non-literal object)matches none of those, so the fact goes to the relation path. There its object isn't a declared entity, and it is dropped.Fix
This is structure only, with no words involved. When a fact carries a value and its object is neither referenced (
object_ref) nor declared in the response, the value is the literal. Keep it as a value fact, and carry the object phrase in the surface predicate:build+ "new energy generation" is proposed asbuild new energy generation. The phrase is kept rather than discarded, and the quote stays as evidence. A declared or referenced object keeps the relation path as today.Test: that exact reply shape lands as a value fact with the phrase in its proposed predicate. A declared object still makes an edge.