digest-aware serialized extraction + chain simplification replace the spine stage
Owner live-test verdict on the spine (2026-09-30): no perceptible gain — the real problems (restatement nodes, shallow re-derivations, same conclusion from many angles) are mint-time issues a post-hoc chain minter cannot fix. This arc moves assembly INTO the extractor and adds the deterministic dedupe the owner specified: - Digest-aware extraction: each stretch's extractor prompt carries THE GRAPH SO FAR (its own source's merged propositions + chains, ids verbatim); build on existing ids instead of restating, lean on established conclusions as premises. Mixed-namespace chain endpoints (fresh p-ids OR existing n_-ids) validated at the submit seam. - Serialized per source: a source's batches/chunks run strictly in order (each extract reads every earlier merge); cross-source runs stay parallel; source-wide abort stops the loop. The spine stage, role, phase, usage stage, cost row, and setup roster are gone. - Core-ideas prompt: goal reframed as uncovering core ideas and showing how everything derives from the foundations; direction upward, prefer lean derivations, never re-derive what the graph already holds. - Chain simplification (merger maintenance): simplifyChains drops provably redundant chains at every merge — prefer-fewest-premises + ancestry-cover ([A,B]⟹X with [X,C]⟹Y covers [A,B,C]⟹Y, transitive); same-key provenance lines drop together; rewriteLedgers under the audit lock; droppedChains counted separately in stats. Chunk budget stays 8192 (owner: keep for now, maybe lower later).
This commit is contained in:
@@ -309,14 +309,11 @@ export function displayCostTotals(costs: Pick<GraphCostSummary, "stages">): {
|
||||
totalDollars: number;
|
||||
unpricedRuns: number;
|
||||
} {
|
||||
// The three live stages (spine joined 2026-09-30); empty spines
|
||||
// contribute zero — the fold leaves them at 0 when a run never
|
||||
// called the spine (first-stretch skip / pre-spine records).
|
||||
// The two live stages (the spine came and went on one day,
|
||||
// 2026-09-30 — digest-aware extraction replaced it).
|
||||
return {
|
||||
totalDollars:
|
||||
costs.stages.extraction.dollars + costs.stages.spine.dollars + costs.stages.audit.dollars,
|
||||
unpricedRuns:
|
||||
costs.stages.extraction.unpricedRuns + costs.stages.spine.unpricedRuns + costs.stages.audit.unpricedRuns,
|
||||
totalDollars: costs.stages.extraction.dollars + costs.stages.audit.dollars,
|
||||
unpricedRuns: costs.stages.extraction.unpricedRuns + costs.stages.audit.unpricedRuns,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -373,7 +370,6 @@ function GraphCostControl({ costs }: { costs: GraphCostSummary }) {
|
||||
function GraphCostPanel({ costs }: { costs: GraphCostSummary }) {
|
||||
const stageRows: [string, GraphCostSummary["stages"]["extraction"]][] = [
|
||||
["Extraction", costs.stages.extraction],
|
||||
["Assembly", costs.stages.spine],
|
||||
["Audit", costs.stages.audit],
|
||||
];
|
||||
// The displayed figures come from displayCostTotals (naming excluded —
|
||||
|
||||
@@ -49,7 +49,7 @@ import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
|
||||
/** The pickers' slot identity — same roster language as the Agent
|
||||
* section's slot rows. */
|
||||
const SLOT_META: Record<ModelSlotName, { label: string; roster: string }> = {
|
||||
strong: { label: "Strong", roster: "Prober, teacher, spine, practice trio" },
|
||||
strong: { label: "Strong", roster: "Prober, teacher, practice trio" },
|
||||
cheap: { label: "Cheap", roster: "Researcher, demo builder, extractor, auditor" },
|
||||
vision: { label: "Vision", roster: "Visual maker + PDF reader" },
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user