Add a closed finite-verb relational surface to comprehend_relational, narrowly: declarative <A> overlaps <B>, interrogative Does <A> overlap <B>?, predicate overlaps_event ONLY (closed finite-verb table, default-off). Kept SEPARATE from the copula-connective grammar (byte-unchanged): the other connectives (before/after/during/inside/adjacent/…) still REQUIRE the copula, so "Monday before Friday." stays a refusal — no connective bypass (adversarial hazard #2). Fail-closed slot gate: each finite-verb argument slot must be EXACTLY ONE content token (after article stripping). An enumerated adverb/negation blocklist is unbounded and leaks — the adversarial audit found "Meeting never overlaps lunch." committed as a POSITIVE overlaps_event(meeting_never, lunch), plus almost/sometimes/trailing-qualifier/ second-verb compound fabrications in BOTH slots and the query path. The single-token gate closes the whole COMPOUND-fabrication class (any extra token refuses); the _FINITE_VERB_MODIFIERS and _CONNECTIVE_TOKENS checks add precise reasons for common bare-modifier / second-verb slots. Multi-word entities in the finite-verb surface are deferred (they need a positive content lexicon, which OOV entities preclude). A lone bare token remains an entity (the reader's universal OOV single-token contract — the copula and general readers behave identically), not a compound fabrication. Hazards pinned (adversarial audit hazard #1 + #2): adverb absorption, negation-as- positive ('never'), interrogative double-verb, trailing qualifier, and the copula-bypass firewall. Measurement: migrated ref-009 "Sunrise overlaps dawn." (the documented coverage gap) to a positive rel-018 — comprehension_relational_predicate 17->18, wrong_total 0, breadth still 11 (coverage added, not a new domain), baseline digest re-frozen. Refusal floor rose 9 -> 24 (finite-verb confusers replace the one migrated input). The #775 inference and #781 transitive lane SHA pins are UNTOUCHED. determine.py is untouched (reader-only): no answer=False, no FrameVerdict, INV-30 unaffected. Verified in the worktree: finite-verb + reader + reader-lane + #775 inference lane + #781 transitive lane + #779 OWA floor + capability baseline/index + INV-30/29/21 + full smoke — all green. Two read-only adversarial passes: the first found 4 real slot- fabrication blockers, closed by the single-token gate; a black-box probe of 24 adversarial inputs confirms the compound-fabrication class is fully closed.
1.9 KiB
evals/relational_inference/v1 — provenance
Independent gold for the one-hop relational-inference DETERMINE capability
(mastery-v2 Step 3). The gold (predicate, subject, object) triples are authored by
reading the relational predicate algebra (inverse/converse + symmetric)
independently of generate/determine/determine.py and
generate/meaning_graph/relational.py (INV-25 / INV-27) — the reader/determiner never
produced them.
cases.jsonl — positive coverage (13)
Each case: told fact(s) → determine(query) should assert the entailed relation.
- 8 INVERSE/converse — both directions of
less_than/greater_than,parent_of/child_of,left_of/right_of,before_event/after_event. - 5 SYMMETRIC —
sibling_of,spouse_of,equal_to,distinct_from,adjacent_to, each told one direction and queried the other.
A refusal here is a COVERAGE miss (counted refused), never a wrong.
refusals.jsonl — confusers that MUST refuse (8)
Transitive (direct + through-inverse), asymmetric self-converse (less_than,
parent_of), cross-predicate (sibling_of ≠ parent_of, greater_than ≠
equal_to), object mismatch, and ungrounded. A Determined on any of these is a
wrong=0 breach — the lane test fails loudly.
Resolved coverage gap (B3)
overlaps_event (symmetric, pack-declared graph.edge.symmetric) was previously
excluded from the positive gold: the relational reader required a copula
("X is connective Y"), but overlaps is a finite verb. The closed finite-verb reader
surface (B3 — <A> overlaps <B> / Does <A> overlap <B>?, see
generate/meaning_graph/relational.py::_read_finite_verb_clause) now reads it, so a
stored overlap and its symmetric converse determine (proven in
tests/test_relational_finite_verb.py). The reader-surface coverage lives in
evals/relational; adding a symmetric overlaps_event case to THIS inference lane is
optional follow-up.