core/docs/decisions/ADR-0136.S2-post-rescan.md
Shay 6e11145282
docs(ADR-0136.S.2): record ADR-0137 attempt + deferral (#206)
PR #204 (ADR-0137 retrospective binding, rescoped to subsumption-only)
was drafted then closed without merging. The deferral reason is
structural: the DeferredCandidate/BindingProof apparatus is the right
shape for true retrospective binding (first-pass candidate has open
slots awaiting later evidence), but re-examination showed neither S.1
nor S.2 short-circuit fits that definition — both join two fully
grounded candidates. With no kind that has open slots in the v2
ledger, the machinery would degenerate to a join everywhere, which is
speculative infrastructure ahead of a forcing function (CLAUDE.md
warns against this pattern).

Update appended to the post-rescan notes so the deferral lives in the
repo, not just in a closed PR thread. Includes a reopen criterion:
ADR-0137 (or successor) may return when a case appears whose first-pass
candidate has genuinely open slots only later-sentence evidence can
close. Until then the unlock vehicle is S.x.

The S.1/S.2 short-circuits remain as tactical bridges; the canonical
runner staleness is better fixed in the runner than in a binding
layer.
2026-05-23 21:55:48 -07:00

191 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 MonThu 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 13 test subsumption (must remain admitted). Cases 47 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`