From 5ed724c224e31240bd2549eac1787acb5e3b82c4 Mon Sep 17 00:00:00 2001 From: amosblomqvist Date: Wed, 30 Sep 2026 05:36:28 +0300 Subject: [PATCH] extractor: standalone/entailment/selection doctrines in EXTRACTION_CORE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Data analysis of the five-source corpus (490 nodes, 244 chains) found three pathologies the goal-first core let through: 1. Narrative-adjacency chains — premises that occasioned rather than entailed conclusions (concentrated in the polemical sources). 2. Session-scaffolding minted as knowledge — the source's own axiom numbering (A1/F2/UT2), arc labels ('the crux') persisted as nodes. 3. Full-discourse volume — glossary and argument-arc material at equal rank with load-bearing ideas (~200 nodes per source). Three doctrine lines, same terse register as the core: - entailment is the only link that earns a chain; historical/narrative connections keep their pieces as bare propositions or drop them - load-bearing ideas only (what a reference on the subject would teach) - propositions must stand alone for a reader who never saw the source; no leaning on the source's own scaffolding Substring pins for all three; shared by session + notes extractors by construction. --- src/agent/subagents/extraction.ts | 8 ++++++++ tests/extraction.test.ts | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/src/agent/subagents/extraction.ts b/src/agent/subagents/extraction.ts index 12c0c8b..cd4beee 100644 --- a/src/agent/subagents/extraction.ts +++ b/src/agent/subagents/extraction.ts @@ -305,11 +305,19 @@ export const NOTES_PREAMBLE = export const EXTRACTION_CORE = `THE GOAL: extract the source's REASONING CHAINS. The source teaches by making arguments — propositions worked out from other propositions. Your deliverable is twofold: the propositions themselves, and every argument the source makes. Each argument is a chain: premises that JOINTLY entail a conclusion. +Entailment is the only link that earns a chain — where the real connection is historical or narrative +(who argued what, how a debate or exposition unfolds), there is no chain; keep the pieces as bare +propositions or drop them. The graph holds TRUE propositions about the world, nothing else — never anything about the learner, the teacher, or this reading: not "the learner understands X" but X. A misconception enters as its TRUE correction. Each statement is one self-contained reasoning step at full precision. +Extract the load-bearing ideas of the subject — what a reference on it would teach — not the full run of +the discourse. Every proposition must stand alone for a reader who never saw this source: names and +statements may not lean on the source's own scaffolding (claim numbering, axiom tags, arc labels); a +claim that only matters as part of how this document is organized is not knowledge — drop it. + SUBMIT with one submit_findings call: every proposition with a short name and a precise statement, and every chain as premises + conclusion. Premises within one chain are used TOGETHER — independent arguments for the same conclusion are separate chains. A conclusion may reappear, by id, as a premise of later diff --git a/tests/extraction.test.ts b/tests/extraction.test.ts index 50f79aa..ea97042 100644 --- a/tests/extraction.test.ts +++ b/tests/extraction.test.ts @@ -1184,6 +1184,10 @@ describe("the extractor redesign (owner, 2026-09-30): chains are the deliverable // The core carries the goal + submission mechanics. assert.match(EXTRACTION_CORE, /JOINTLY entail a conclusion/); assert.match(EXTRACTION_CORE, /for the same conclusion are separate chains/); + assert.match(EXTRACTION_CORE, /Entailment is the only link that earns a chain/); + assert.match(EXTRACTION_CORE, /what a reference on it would teach/); + assert.match(EXTRACTION_CORE, /stand alone for a reader who never saw this source/); + assert.match(EXTRACTION_CORE, /may not lean on the source's own scaffolding/); assert.match(EXTRACTION_CORE, /SUBMIT with one submit_findings call/); assert.match(EXTRACTION_CORE, /"chains": \[\] when the source makes no arguments/);