[reader-arc] OPEN DESIGN TASK: frame-anchored comparative admission with wrong=0-safe polarity determination (owned by rate-frame increment) #78

Closed
opened 2026-07-19 03:08:08 +00:00 by core-labs · 0 comments
Owner

Deferred out of increment 1 (PR #77 ruling). The frame-anchoring reader change (c3aed13b) was reverted from that PR; the reader stays on the _comparison_anchor_verb() whitelist (fail-closed) for all comparative frames until this lands.

Why deferred

  1. Zero measured benefit today — verb-free frame-anchoring converts 0 of 500 official holdout_dev/v1 cases (tune byte-identical; measure = 1 divergence, 0441, which advances frame-refusal → question-refusal but does not solve).
  2. Consumer is a later increment — frame-anchoring exists to serve rate-frame admission (increment 2). The next increment (seeding-sentence injection) is a shared layer that doesn't touch it.
  3. Fail-open surface at the sealed test — the prototype polarity blocklist admits every unenumerated verb, so an unlisted depletion verb in a complete frame is a coherent-but-inverted graph = a wrong on the run-once sealed arbiter (round-trip guards parse consistency, not gold-correctness). Fail-closed doctrine never takes that trade for zero gain.

The open problem (the real lesson)

The frame (<factor> as many/much <unit> as <REF>) is the right gate, but the verb carries a polarity bit that must be positively determined, not assumed-safe-unless-blocklisted. A polarity-inverting/depletion verb ("Alice lost twice as many apples as Bob") makes the compared quantity a loss, so actor = factor × reference reads backwards → wrong>0. Pinned by test_adr_0131_G2a…::test_polarity_inverting_verb_not_admitted, …::test_spend_verb_not_admitted, test_recognizer_comparative_inject…[Alice lost…].

Deliverable (in the rate-frame increment)

Frame-anchored comparative admission + positive polarity determination, one of:

  • a neutral-polarity allowlist (fail-closed: only verbs affirmatively known non-inverting admit), or
  • a small polarity classifier / lexicon (possession/production/acquisition = neutral → factor×ref; depletion/transfer/loss = inverting → refuse or model as a delta).

Exercised end-to-end on rate frames, measured on the disjoint tune/measure split, wrong=0 preserved on the sealed arbiter.

Record

Full measurement + reasoning: docs/research/compare-increment-funnel-2026-07-18.md (§ MEASURED OUTCOME, Deferral ruling, OPEN DESIGN TASK). Reverted code preserved in history at commit c3aed13b (frame-anchored recognizer + _COMPARE_POLARITY_BLOCK prototype).

Deferred out of increment 1 (PR #77 ruling). The frame-anchoring reader change (`c3aed13b`) was reverted from that PR; the reader stays on the `_comparison_anchor_verb()` whitelist (fail-closed) for all comparative frames until this lands. ## Why deferred 1. **Zero measured benefit today** — verb-free frame-anchoring converts 0 of 500 official `holdout_dev/v1` cases (tune byte-identical; measure = 1 divergence, `0441`, which advances frame-refusal → question-refusal but does not solve). 2. **Consumer is a later increment** — frame-anchoring exists to serve rate-frame admission (increment 2). The next increment (seeding-sentence injection) is a shared layer that doesn't touch it. 3. **Fail-open surface at the sealed test** — the prototype polarity *blocklist* admits every unenumerated verb, so an unlisted depletion verb in a complete frame is a coherent-but-inverted graph = a **wrong** on the run-once sealed arbiter (round-trip guards parse consistency, not gold-correctness). Fail-closed doctrine never takes that trade for zero gain. ## The open problem (the real lesson) The frame (`<factor> as many/much <unit> as <REF>`) is the right gate, but **the verb carries a polarity bit that must be positively determined, not assumed-safe-unless-blocklisted**. A polarity-inverting/depletion verb ("Alice **lost** twice as many apples as Bob") makes the compared quantity a loss, so `actor = factor × reference` reads backwards → wrong>0. Pinned by `test_adr_0131_G2a…::test_polarity_inverting_verb_not_admitted`, `…::test_spend_verb_not_admitted`, `test_recognizer_comparative_inject…[Alice lost…]`. ## Deliverable (in the rate-frame increment) Frame-anchored comparative admission + **positive polarity determination**, one of: - a **neutral-polarity allowlist** (fail-closed: only verbs affirmatively known non-inverting admit), or - a small **polarity classifier / lexicon** (possession/production/acquisition = neutral → `factor×ref`; depletion/transfer/loss = inverting → refuse or model as a delta). Exercised end-to-end on rate frames, measured on the disjoint tune/measure split, wrong=0 preserved on the sealed arbiter. ## Record Full measurement + reasoning: `docs/research/compare-increment-funnel-2026-07-18.md` (§ MEASURED OUTCOME, Deferral ruling, OPEN DESIGN TASK). Reverted code preserved in history at commit `c3aed13b` (frame-anchored recognizer + `_COMPARE_POLARITY_BLOCK` prototype).
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: core-labs/core#78
No description provided.