Skip to content

One fact should not answer two questions - #44

Merged
jepegit merged 1 commit into
mainfrom
one-fact-one-question
Sep 9, 2026
Merged

jepegit merged 1 commit into
mainfrom
one-fact-one-question

Conversation

@jepegit

@jepegit jepegit commented Sep 9, 2026

Copy link
Copy Markdown
Owner

RET-06 fired 42 times across the stress corpus: two cards whose answer is the same sentence of the source. The listener is asked two questions and given one fact, and retrieval practice is spent without being had.

one sentence answers 2 questions ('SEI resulting', 'ethylene carbonate')
one sentence answers 2 questions ('crystalline silicon', 'irreversible capacity')
one sentence answers 2 questions ('materials discovery', 'machine learning')

Where it came from

The section-closing cards already avoided this, through _unshared_support, and the reasoning written there is the right reasoning. The segment prompts drew through SupportPool.take instead, whose ledger is keyed per concept — correct for exposition, where one sentence can reasonably serve two ideas, and wrong for a question. A sentence already answering one was free to answer another.

Compared by span, not by text: the answers differ by construction, each opening on a lead that carries its own subject's name, which is exactly why comparing whole answers reports nothing and looks like a rule that passes.

A prompt with nothing unshared left is dropped rather than asked. Unlike a section's closing question, which STR-06 requires, a segment prompt is already optional and capped.

This emptied KNOWN_FINDINGS, which is that mechanism working

tests/unit/test_script_lint.py records rules that fire on the clean fixture plan together with the reason, and fails when an entry stops firing. The entry said:

a section whose concept has only one usable sentence still shares it; the planner prefers an unshared sentence and falls back rather than losing the section's question

True of the section-closing cards — and it said nothing about the segment prompts, where the sharing actually came from. The reason is kept in the file as a note beside STR-09, which left the same way.

Corpus

before after
RET-06 42 0
total warnings 902 864
errors 2 2

🤖 Generated with Claude Code

Rule RET-06 fired forty-two times across the stress corpus: two cards whose answer
is the same sentence of the source, so the listener is asked two questions and
given one fact, and retrieval practice is spent without being had.

The section-closing cards already avoided it, through _unshared_support, and the
reasoning written there is the right reasoning. The segment prompts drew through
SupportPool.take instead, whose ledger is keyed per *concept* -- which is correct
for exposition, where one sentence can reasonably serve two ideas, and wrong for a
question. A sentence already answering one was free to answer another.

Compared by span rather than by text, because the answers themselves differ by
construction: each opens on a lead carrying its own subject's name, which is why
comparing whole answers reports nothing and looks like a rule that passes.

A prompt with nothing unshared left is dropped rather than asked. Unlike a
section's closing question, which rule STR-06 requires, a segment prompt is
already optional and capped.

This also emptied KNOWN_FINDINGS in test_script_lint.py, which is that mechanism
working as designed: the entry recorded that RET-06 fires on the clean fixture
plan and why, the test fails when an entry stops firing, and the stated reason was
about the section-closing cards -- it said nothing about where the sharing
actually came from.

Corpus: RET-06 falls from forty-two to none.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jepegit
jepegit merged commit e513368 into main Sep 9, 2026
4 checks passed
@jepegit
jepegit deleted the one-fact-one-question branch September 9, 2026 06:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant