partitioner fix: chain ids lead every rendered line

The partitioner was told to reference chain ids, but no rendered line
ever showed one — chainLine emitted bare 'premises → conclusion', so
the model re-typed whole rendered lines into submit_partition and every
call failed 'unknown chain ids' validation (owner live report,
2026-09-30 evening). The generator's YOUR TARGET block had the same
blindness.

- chainLine now leads with the chain's id: [arg_x] n_a, n_b → n_c;
  a bare proposition repeats its own id ([n_y] n_y (no premises)) —
  mechanically teaching that its chain id IS its proposition id.
- PARTITIONER_INSTRUCTIONS rewritten to chains-primary vocabulary
  (was still 'follows-edges, bijective re-encoding' — pre-chains
  framing) with the id-only doctrine and singular propositions
  first-class.
- partitionSchema/problemSchema gained field descriptions: ids
  VERBATIM, never re-type, never invent.
- Generator OUTPUT bullet + target-block header say the same.

Design ruling en route: partitioner stays an LLM partitioning chains
(deterministic partitioning and propositions-as-targets both
considered and declined by the owner).
This commit is contained in:
amosblomqvist
2026-10-01 23:56:34 +03:00
parent 91341a93da
commit d8cca61d1d
3 changed files with 64 additions and 21 deletions
+6 -3
View File
@@ -109,12 +109,15 @@ describe("renderParams — named levels, never a number", () => {
});
describe("rendering (the agent-facing text)", () => {
it("renderChains: legend with names + statements, premises → conclusion, singletons marked", () => {
it("renderChains: legend with names + statements, chain ids LEAD every line (the referenceable anchor)", () => {
const text = renderChains(chains, propositions);
assert.match(text, /\[n1\] Self-ownership — Each person owns themself\./);
assert.match(text, /\[n2\] Homesteading — Unowned goods are claimed by first use\./);
assert.match(text, /n1 → n3/);
assert.match(text, /n2 \(no premises\)/);
// The chain id precedes every line — the id the submit references.
assert.match(text, /\[n3\] n1 → n3/);
// A bare proposition: its own id, twice — the chain id IS the
// proposition id (owner fix, 2026-09-30 evening).
assert.match(text, /\[n2\] n2 \(no premises\)/);
});
it("renderPreviousProblems: numbered statements + chains; empty = first-set line", () => {