Repository navigation
v0.4.0 -- Low overlap is not disagreement
Four reasoning gaps found by reading Aegis Vector's memory-gate results, closed without giving up any rule from earlier releases.
What changed:
- Low word overlap is not disagreement where figures are involved (
consult.py). In a one-true-value domain,consult()used to fall through toCOLLIDESwhenever overlap was low, even with no figure to disagree about. Now two claims that don't compete on a figure are a different aspect of the same fact (COEXISTS), and a claim that drops the figure at low overlap isUNCONFIRMED(marked for review), not an asserted collision. A collision still needs a different figure or, in a figureless attribute like hair color, differing wording. - A reversal can't reinforce. "No longer need CFO approval" used to reinforce "must get CFO approval" and raise its weight. Words like "no longer", "without" and "any amount" now withhold confirmation (
UNCONFIRMEDin an attribute domain,COEXISTSin an event domain). It only ever adds a flag, never clears one. It is a short cue list, not language understanding. resolve()lets a person close an open collision or a review item (vindicated, mooted, wrong, reconciled together). A reason is required, the decision is dated, no weights change, and a resolved edge can't be quietly resolved again. The demo scenario uses it.scan_other_domains()checks a claim against every attribute-domain claim, not just its own referent, so a document the filing step misplaced is still caught when it restates a known claim with a different figure. It reports value conflicts only, and treats a different scope as a review item, never a collision.
Behavior change: a claim with a shared figure but different wording, or one that adds a figure to a figureless claim, no longer collides. Previously the real $10,000 limit arriving beside a "CFO approves above the limit" rule was held as a collision.
Measured on Aegis Vector's battery (five small local models, nine forged payloads): the gate still quarantines all nine and holds adoption at 0% with 90% utility. With hand labels, legitimate documents held drop from 2 to 1, and both no-number forgeries are now labeled UNCONFIRMED instead of COLLIDES. The cross-fact scan flags none of the 20 legitimate documents, changed no verdict there (every payload was already filed correctly), and would catch only 3 of the 9 if they were misfiled. A claim about a fact the memory doesn't hold is still admitted.
109 tests, all passing. store.py's Elasticsearch backend is still unverified against a live cluster. Nothing acts on a resolution yet (a vindicated claim doesn't supersede the old one), by design.