From 796b446b49e774bf39b5b351c11ad4d33a0c09bb Mon Sep 17 00:00:00 2001 From: Shay Date: Thu, 28 May 2026 09:19:46 -0700 Subject: [PATCH] docs(handoff): require multi-actor pronoun safety test in VE-A/B acceptance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds second mandatory hazard test to VE-A/B acceptance criteria: multi-actor pronoun ambiguity must trigger no_antecedent_ambiguous refusal per ADR-0174 Phase 3a defense. Verb expansion widens the cases that reach Phase 3a lookback wiring; without this test the multi-actor wrong=0 hazard could fire silently in production. Surfaced by 2026-05-28 Phase 1-3a lookback review. References: project-adr-0174-multi-actor-pronoun-hazard memory, CLAUDE.md §Lookback Review Discipline. --- docs/handoff/VERB-EXPANSION-DISPATCH-PACK.md | 48 +++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/docs/handoff/VERB-EXPANSION-DISPATCH-PACK.md b/docs/handoff/VERB-EXPANSION-DISPATCH-PACK.md index 3a245b35..c1671e9d 100644 --- a/docs/handoff/VERB-EXPANSION-DISPATCH-PACK.md +++ b/docs/handoff/VERB-EXPANSION-DISPATCH-PACK.md @@ -124,8 +124,9 @@ evidence; this column is a recommendation only. ### Hazard pinning — non-negotiable -Every VE-A / VE-B PR MUST include a test that asserts case 0050 -remains refused after the widening: +Every VE-A / VE-B PR MUST include **two** safety tests. + +#### Hazard test #1 — case 0050 canary ```python def test_case_0050_remains_refused_after_verb_widening(self) -> None: @@ -146,6 +147,49 @@ def test_case_0050_remains_refused_after_verb_widening(self) -> None: Reference: memory `feedback-wrong-zero-hazard-case-0050`. +#### Hazard test #2 — multi-actor pronoun safety (ADR-0174 Phase 3a) + +VE-A / VE-B widens the verb whitelist, which means more +discrete_count_statement cases will reach the ADR-0174 Phase 3a +lookback wiring. When the widened verb appears in a multi-actor +problem, the Phase 3a defense (`no_antecedent_ambiguous` refusal on +multiple distinct prior subjects) MUST fire — otherwise the pronoun +could be mis-resolved and produce a wrong answer with no downstream +safety net catching it. + +```python +def test_multi_actor_pronoun_with_widened_verb_refuses_safely(self) -> None: + """ADR-0174 Phase 3a multi-actor hazard — when more than one + proper-noun subject appears in prior context, the pronoun + resolver must refuse rather than guess the most-recent. + Verb widening must preserve this defense.""" + from generate.math_candidate_graph import parse_and_solve + import json + # Replace with one this PR adds. + text = ( + "Alice has 5 marbles. " + "Bob has 3 marbles. " + "She 2 marbles. " + "How many marbles does Bob have?" + ) + r = parse_and_solve(text) + # MUST refuse — wrong attribution is the hazard. + assert r.answer is None + # Trace MUST include no_antecedent_ambiguous. + lookback_events = [ + json.loads(ev) for ev in r.reader_trace + if json.loads(ev).get("layer") == "lookback" + ] + assert any( + ev.get("outcome") == "no_antecedent_ambiguous" + for ev in lookback_events + ), f"multi-actor defense did not fire; trace={lookback_events}" +``` + +Reference: memory `project-adr-0174-multi-actor-pronoun-hazard`, +CLAUDE.md §Lookback Review Discipline (the discipline that surfaced +this hazard at the right time). + --- ## Per-PR workflow