# ADR-0136.S.2-post-rescan — Refusal Rescan v2: Barrier-Shift Ledger

**Status:** Accepted  
**Parent:** ADR-0136 (Statement Layer Corridor)  
**Date:** 2026-05-23

## Context

The v1 refusal taxonomy (ADR-0136.S.0) was written before S.1 and S.2 landed.
This rescan re-runs `parse_and_solve` on all 50 GSM8K train-sample cases against
the current parser (post-S.1 rate/event parsing, post-S.2 conditional-op
questions) and produces a barrier-shift ledger so ADR-0137 inherits measured
truth, not stale classification.

## Summary

| Metric | Value |
|---|---|
| Total cases | 50 |
| Admitted (correct) | 3 |
| Wrong | 0 |
| Refused | 47 |
| Barrier shifted (v1 → v2) | 27 |

## Current Admissions

| Case | Answer | Short-circuit path | Landed in |
|---|---|---|---|
| gsm8k-0014 | 240.0 | S.1 capacity rate | ADR-0136.S.1 |
| gsm8k-0018 | 16.0 | S.2 capacity rate (context filler resolved) | ADR-0136.S.2 |
| gsm8k-0042 | 30.0 | S.2 conditional-op question | ADR-0136.S.2 |

## Current Primary Barrier Distribution

| Primary barrier | Count | Notes |
|---|---|---|
| compound_statement | 6 | Two operations in one sentence |
| novel_initial_form | 5 | Existential/impersonal/quantifier sentence shapes |
| novel_initial_verb | 4 | Verb not in any closed set (donated, collected, gained, bakes) |
| admitted | 3 | Successfully parsed and solved |
| compound_comparative | 3 | N times as much/greater comparisons |
| conditional_question | 3 | If-clause in question sentence |
| context_filler | 3 | Narrative scene-setter still blocking (down from 23) |
| fraction_operand | 3 | Half/quarter/3-4/75% operands |
| distributive_multiply | 2 | N bags × M items |
| multi_entity_initial | 2 | Multiple entities in one sentence |
| rate_price | 2 | Price embedded in relative clause |
| temporal_frequency | 2 | Every N days / every other day |
| capacity_rate | 1 | "within" preposition instead of "in" |
| complex_question | 1 | Modal + infinitive chain in question |
| compound_multi_event | 1 | Multiple transport legs in one sentence |
| conditional_branch | 1 | Or-choice pricing |
| distributive_each_actor | 1 | "each saved" = per-actor distribution |
| goal_statement | 1 | "wants to lose" = intent, not state |
| multi_attribute_accumulation | 1 | Multiple platform counts in one sentence |
| multi_day_accumulation | 1 | Values across Mon–Thu in one sentence |
| partition_divide | 1 | Splits into sections |
| percentage_rate | 1 | 10% simple interest |
| rate_earnings | 1 | Multi-statement earnings with conditional |
| temporal_age_anchor | 1 | Age-conditioned initial state |

## Barrier-Shifted Cases (v1 → v2)

27 cases changed primary barrier classification. The dominant pattern: 18 of 23
v1 `context_filler` cases now parse their scene-setting sentence, exposing the
next structural barrier. Only 3 `context_filler` cases remain blocking (0022,
0031, 0049 — all have rate/intent embedded in complex relative clauses).

| Case | v1 barrier | v2 barrier |
|---|---|---|
| 0003 | context_filler | novel_initial_verb |
| 0004 | indefinite_quantity | fraction_operand |
| 0005 | compound_statement | fraction_operand |
| 0007 | context_filler | conditional_question |
| 0008 | context_filler | conditional_question |
| 0009 | compound_comparative | conditional_question |
| 0013 | context_filler | compound_statement |
| 0014 | capacity_rate | **admitted** |
| 0017 | context_filler | conditional_branch |
| 0018 | context_filler | **admitted** |
| 0019 | context_filler | rate_price |
| 0021 | context_filler | distributive_multiply |
| 0023 | multi_step_complex | novel_initial_verb |
| 0025 | context_filler | distributive_multiply |
| 0028 | context_filler | novel_initial_form |
| 0029 | context_filler | compound_comparative |
| 0030 | context_filler | novel_initial_form |
| 0032 | context_filler | compound_statement |
| 0034 | context_filler | capacity_rate |
| 0035 | coreference_pronoun | complex_question |
| 0036 | context_filler | compound_comparative |
| 0039 | context_filler | novel_initial_verb |
| 0040 | context_filler | multi_entity_initial |
| 0042 | distributive_multiply | **admitted** |
| 0043 | context_filler | compound_comparative |
| 0045 | context_filler | novel_initial_form |
| 0048 | context_filler | temporal_frequency |

## Subsumption Directive

> S.1/S.2 short-circuit paths are tactical bridges. ADR-0137 SHALL subsume them:
> every current short-circuit admission must be re-derivable as a
> (DeferredCandidate, evidence, BindingProof) triple. Short-circuits are kept
> only as regression fixtures.

### Update 2026-05-23: ADR-0137 attempted and deferred

ADR-0137 was drafted and rescoped against this ledger (PR #204), then **closed
without merging** on self-review. The reason is structural, not procedural:

The DeferredCandidate / BindingProof apparatus is the right shape for *true*
retrospective binding — where a first-pass candidate has open slots that only
later-sentence evidence can fill. Re-examining S.1/S.2 against that definition
showed neither short-circuit fits it:

- **0014**: `CandidateCapacity` (sentence 1) and `CandidateCapacityQuestion`
  (sentence 2) are both fully grounded. What's needed is a **join rule**
  pairing them into a derived `InitialPossession`, not a deferred-binding pass.
- **0042**: `CandidateInitial` (sentence 1) and `CandidateConditionalOpQuestion`
  (sentence 2) are both fully grounded — same shape, same join.

With no kind that has genuinely open slots in the v2 ledger, the binding
machinery would degenerate to a join everywhere it ran. Building it now would
be speculative infrastructure ahead of a forcing function — explicitly the
pattern CLAUDE.md warns against.

**What stays.** The S.1/S.2 short-circuits in `parse_and_solve` remain as
tactical bridges. `wrong == 0` is preserved. The canonical
`evals/gsm8k_math/runner.py` staleness on short-circuit admissions (it asserts
`selected_graph is not None`) is a real annoyance but better fixed in the
runner — teach it to score short-circuit admissions — than by inventing a
binding layer to give every admission a graph.

**Reopen criterion.** ADR-0137 (or its successor) may be revisited when a
case appears whose first-pass candidate has genuinely open slots that only
later-sentence evidence can close. Until then, the unlock vehicle is S.x.

## ADR-0137 Probe Cases

The following cases are required in the ADR-0137 probe to verify subsumption
and test the next wave of unlocks:

1. **gsm8k-0014** — Bob shucks oysters (capacity rate, currently admitted via S.1)
2. **gsm8k-0018** — Xavier scores goals (capacity rate, currently admitted via S.2)
3. **gsm8k-0042** — Ella sells apples (conditional-op, currently admitted via S.2)
4. **gsm8k-0034** — Georgie runs yards (capacity rate, blocked by "within" preposition)
5. **gsm8k-0021** — John bench presses (distributive multiply, 15×10×3)
6. **gsm8k-0003** — Bookstore erasers (novel verb "donated", 48 boxes × 24 each)
7. **gsm8k-0029** — Mouse and keyboard (compound comparative, 3× cost ratio)

Cases 1–3 test subsumption (must remain admitted). Cases 4–7 are the
shallowest remaining barriers that ADR-0137's binding graph should unlock.

## Closed Barrier Vocabulary (v2)

The `primary_barrier` field in `refusal_taxonomy_v2.json` uses exactly this
enum (24 values):

```
admitted
capacity_rate
complex_question
compound_comparative
compound_multi_event
compound_statement
conditional_branch
conditional_question
context_filler
distributive_each_actor
distributive_multiply
fraction_operand
goal_statement
multi_attribute_accumulation
multi_day_accumulation
multi_entity_initial
novel_initial_form
novel_initial_verb
partition_divide
percentage_rate
rate_earnings
rate_price
temporal_age_anchor
temporal_frequency
```

## Evidence

- Rescan ledger: `evals/gsm8k_math/train_sample/v1/refusal_rescan_v2.json`
- Taxonomy v2: `evals/gsm8k_math/train_sample/v1/refusal_taxonomy_v2.json`
- Script: `evals/gsm8k_math/train_sample/v1/rescan_v2.py`
- Tests: `tests/test_rescan_v2_invariants.py`
