docs(handoff): require multi-actor pronoun safety test in VE-A/B acceptance
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.
This commit is contained in:
parent
ee63ce4d5d
commit
796b446b49
1 changed files with 46 additions and 2 deletions
|
|
@ -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 <widened_verb> with one this PR adds.
|
||||
text = (
|
||||
"Alice has 5 marbles. "
|
||||
"Bob has 3 marbles. "
|
||||
"She <widened_verb> 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
|
||||
|
|
|
|||
Loading…
Reference in a new issue