Commit graph

283 commits

Author SHA1 Message Date
Weksa
21eaa078d8 Dao test-bed doc: corpus add names its language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 12:35:02 +00:00
Weksa
9e4486b789 Panel tests: each item lowers in its own language, per-language means, floors and feedback, bad panels, unspaced recall
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 12:34:53 +00:00
Weksa
3e4b035be6 Loop tests follow the panel: en-US panel in every fixture run, per-language reads, recall at word boundaries
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 12:29:23 +00:00
Weksa
167ce83cfc Loop: lower each item in its own language, read and decide Validation per panel language
Prompt::lower takes the language; RunRecord carries the panel; RoundRecord and
Decision hold per-language readings (pooled keys retired); decide_panel is
Pareto non-regression over decide(); recall splits at UAX #29 word bounds.
Integration tests follow in the next commit.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 12:22:26 +00:00
Weksa
b83929d4d2 Map: cut 9 ja-panel specced as ja-panel-loop and ja-panel-corpus; panel rows in Loop round and decision
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 12:16:19 +00:00
e9cbd9bbfd Merge pull request 'Lows: show-working allowlist and Display, edition_year meaning' (#48) from weksa/lows-remaining into main 2026-11-12 09:46:55 +00:00
Weksa
ff3261a50f Lows: show-working publishes by allowlist and prints Display, edition_year says first appearance
The split guard failed open on any new split name; it now allows Train and
split-less items only. The page printed Debug of Refusal/StoreError and the
EntityRead store message; it prints Display and a fixed line. edition_year
held the first-appearance year of the work or translation, not the page read:
the doc comment and published schema say so.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 09:46:50 +00:00
4298edf984 Merge pull request 'Encode prompt: participants are node ids, never an entity id' (#47) from weksa-lowering/encode-participants into main 2026-11-10 19:28:04 +00:00
Weksa
707e0204bf Encode prompt: participants are node ids, never an entity id
Both bad-form refusals in orig-5 put the speaker entity (entity:keeper) in
context.participants. One sentence, pinned by a plain test; no new rule.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:27:48 +00:00
4cbd46d12c Merge pull request 'Stance ablation beside recall; lowering prompt pinned to the stance; grade scale stated' (#46) from weksa-lowering/stance-to-lowerer into main 2026-11-10 19:26:56 +00:00
Weksa
e8a9bbc5ab Ablation reads none for an empty set, pins its line, names a missing round answer
Soul s1 findings: an empty mean printed 0.00 beside n=0 (now Option, printed
none, like SplitMean); the printed line and whole ablate output are pinned by
exact string, with drop and permute each carrying their own n; a missing
recorded round answer is RunError::Unrecorded and says the prompt digest
drifted or the head inventory moved, not that a store would not read; the
unusable count is pinned for variant and item sides.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 19:01:24 +00:00
2d65239cbc Merge pull request 'data/original gets a Test split: 8 public-domain excerpts with full provenance (ModelWritten stays out of Test)' (#45) from weksa-lowering/corpus-test-holdout into main 2026-11-10 18:51:29 +00:00
Weksa
00feb1d310 Lowering brief states the grade scale
LOWER_INSTRUCTIONS gains 'a grade is permille, 0 to 1000' (the encode brief
already states it). The pinned lowering test requires the sentence and asserts
the item's speaker entity id and group are in no prompt text.

This edits context.rs, a PROMPT_SOURCE_DIGEST input: the digest moves and runs
opened before this commit stop opening; open a fresh run to ablate under the
new brief.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:28:14 +00:00
Weksa
633bf831dc Pin that the lowering prompt moves with the stance alone
One dao packet admitted with its own stance, an anger-and-restraint stance and
none: three digests, each packet line ending in exactly that stance's JSON, the
rest of the text byte-equal, the stance features glossed in the one inventory
listing. No prompt change; the lowerer already reads the stance.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:27:23 +00:00
Weksa
e0e3c93d97 Stance ablation: replay, drop and permute a packet's stance beside recall
RecordedAnswers is the one reader of <digest>.answer files (AnswerFiles reads
through it). RunStores::stance_ablation asks a fresh lowerer the round's own
lowering prompt again (replay), with the stance emptied (drop) and with the
next item's stance in its split (permute), for live Train and Validation
packets only, and reads how far the lowering moves and what the item's own
stance adds to fidelity. A diagnostic in <root>/ablation-<n>: records nothing,
never writes round-<n>. `weksa loop ablate <root> --round n`; exits 3 until
answered. Touches no pinned prompt-source file.

The source tripwire now allows the ablation as a second Prompt::lower call site.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:26:31 +00:00
Weksa
e7aef81309 data/original: 8 public-domain Test items with full provenance; Test held out of rounds and recall
Eight one-sentence English excerpts from Dhammapada (Muller), Walden, Emerson,
Bacon, Aesop (Townsend), Mill, Plato (Jowett), Darwin, each taken from the
exact Project Gutenberg page named in edition_url and checked verbatim against
the fetched text. Groups hash into Test (buckets 83-97); split.rs untouched, the
ModelWritten-never-in-Test rule stands. Items 1..28 are byte-identical (digest
pinned). Tests: counts Train/Validation 14/14, Test 8 all PublicDomain; no Test
text in any round-1 or recall prompt or RoundRecord over data/original; a
ModelWritten item in a Test group is read in no split.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:24:37 +00:00
da6bc7aa14 Merge pull request 'Widen data/original: 22 more model-written passages (14 Train, 14 Validation); recall test pinned to live items' (#44) from weksa-lowering/corpus-widen into main 2026-11-10 18:16:48 +00:00
b273be1a22 Merge pull request 'Pin parse-reason codes; show-working guard checks the split; no Debug of errors in the page' (#43) from weksa-lowering/codes-guard-lows into main 2026-11-10 18:09:54 +00:00
Weksa
32368a998e original_corpus: recall probes only live Train/Validation over a fixture with withdrawn, model-written-Test and public-domain-Test items
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:09:47 +00:00
Weksa
d4c72c54aa show-working guard: reject Validation/Test items by split before writing
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:04:40 +00:00
Weksa
073b022c8a original_corpus tests: counts over 28 items, first six pinned, recall shows only live items
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:04:37 +00:00
Weksa
9f8ae13a12 original corpus: 22 new model-written items through the corpus door (Train 14, Validation 14)
Items original:7..28, written for the non-memorised target; groups chosen so
the V1 split derives Train or Validation. Test is not filled: a model-written
item of a test group is in no split (split.rs), so none can be held out.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:04:37 +00:00
Weksa
76984ecd71 show-working: refusal carries the closed reason only, no Debug of LowerError
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:03:47 +00:00
Weksa
829559bbc3 Pin every DraftClass code string; feed Other real serde errors
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 18:03:26 +00:00
d2cab1fd93 Merge pull request 'Refusal-reason Lows: own_family pinned to offered items, --answerer-family pinned, class closure pinned; encode prompt says a concept is never null' (#42) from weksa-lowering/refusal-reasons-lows into main 2026-11-10 18:01:01 +00:00
2f6a9673e6 Merge pull request 'Show her working: public page of the lowering chain, from the real lowerer and scorer' (#15) from weksa-page/show-her-working into main 2026-11-10 17:43:20 +00:00
Weksa
7ee9d73c72 Encode prompt: a referent's concept is never null
Both parse refusals in the original-corpus round (runs/orig-3) were a null
referents[].concept; the prompt gave 'or null' to entity, setting, medium and
addressee and never said concept could not be. One sentence, pinned by a test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:34:44 +00:00
Weksa
1a7be12374 Show-working page: lower_error covers main's four new LowerError variants; data.json publishes only fixture-cited corpus items
The example's match lacked UnknownPhone, DanglingStress, ConsentMissing and
AskerNotAddressee (E0004). build.py dumped every split into data.json, which
would have published a Validation item; it now keeps the fixtures' cited items
and fails if the written data.json holds any other item key.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:34:43 +00:00
Weksa
99cf0cb39f Remove rustfmt diffs the parse-reason cut added to run.rs and tests
Only hunks on lines that cut changed; import ordering and older code untouched.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:33:53 +00:00
Weksa
99286d3892 DraftClass: split the data-message reader out and pin each class with a real serde error
serde_json exposes no kind for a data error, so the prefix reader stays as
DraftClass::of_data; the test feeds each class a real answer and an unknown
message to Other.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:33:53 +00:00
Weksa
ff60a34cbd Merge origin/main (0d5dfe5) into weksa-page/show-her-working 2026-11-10 17:32:23 +00:00
Weksa
1a20c977e0 Pin own_family to offered items and loop open --answerer-family with tests
Mixed-family corpus fixture (Anthropic, OpenAi, Unrecorded, PublicDomain,
cast, a Test-group model item, a withdrawn item) and a CLI test reading the
run record after `loop open`.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:31:56 +00:00
0d5dfe53cf Merge pull request 'Round records and lines carry parse refusal reasons and an own-family label' (#41) from weksa-lowering/parse-reason into main 2026-11-10 17:28:08 +00:00
Weksa
2759c0f12d Round records carry a closed reason for every parse refusal and an own-family count
DraftClass (closed set from serde's category and leading words, never the
message) rides on DraftError; the round counts parse_reasons by code
('unreadable' for an answer that did not read as text) beside admit_rules.
RunRecord keeps the answerer's ModelFamily (loop open --answerer-family);
the round counts offered ModelWritten items of that family and the line
says own-family N. The corpus rule is documented as binding model judges:
the loop labels, it does not forbid. New fields and admit_rules are
cultcache default, so older run.cc records decode; schemas regenerated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 17:05:07 +00:00
Weksa
2259b9f8c3 WIP (does not build): DraftClass on DraftError; create() call sites take a ModelFamily argument
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 14:26:14 +00:00
aa6385edc3 Merge pull request 'Original corpus for a non-memorised target; recall probes every item; encode prompt states the id form' (#40) from weksa-lowering/encode-id-form into main 2026-11-10 14:24:16 +00:00
Weksa
5ebdb3cff4 Soul s2 lows: the id-form test lists a real inventory; the floor reads 14 to 20
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 14:24:15 +00:00
Weksa
3d3ca915ea Encode prompt states the id form; recall line states the real chrF floor; probe test over data/original
Five of six encoders in the first original-corpus round wrote bare integer ids and
were refused at parse (encoder-prompt-concept-ids). The prompt now says ids are
written in full with their family prefix. Soul s1 on the original corpus: unrelated
English scores chrF 13 to 18, not near 0, so the recall line says so; a test runs the
probe over the real original items.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 14:21:31 +00:00
Weksa
1c08b2abac Original corpus (data/original): six passages written for the non-memorised target; recall probes every live item
Six short original sentences, model-written (Anthropic, claude-sonnet-5-5) and so
labelled, three Train and three Validation, over the Dao revision-3 inventory and
one live entity. The recall probe now covers every offered item, naming the work
only for a public-domain one, so it can show the original set reads near the
guessing floor.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 14:18:28 +00:00
31375b703a Merge pull request 'weksa loop recall: a recitation probe for public-domain items; admit_rules not required in the round schema' (#39) from weksa-lowering/recall-diagnostic into main 2026-11-10 14:15:29 +00:00
Weksa
0ead162d8e Recall tests: mean over every probe, unreadable answer scores 0, written and withdrawn items are not probed
Soul lows: the mean-to-max, skipped-for-0 and withdrawn-gate mutants survived.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 14:15:27 +00:00
Weksa
d954cfb9e9 weksa loop recall: a recitation probe for public-domain items; admit_rules not required in the round schema
Each live public-domain Train and Validation item is offered to a model by its
opening alone and the completion is scored by chrF against the item's second
half (lowering-recall-diagnostic). Answers live in <root>/recall; the reading is
printed, recorded nowhere, never a gate. The round schema stops requiring
admit_rules, which older records lack.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 14:12:30 +00:00
cbcfed6ede Merge pull request 'Round record names the admission rules that refused items' (#38) from weksa-lowering/admit-reason into main 2026-11-10 14:08:47 +00:00
Weksa
d502cb396a Admit rules are a set: one count per item per rule, pinned by a packet that breaks V5 many times
Soul s1 low: the per-item dedup was unpinned. A BTreeSet makes it structural.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 14:08:46 +00:00
Weksa
c527d0eb08 RoundRecord names the admission rules that refused items; the round line prints them
admit_rules (key 18) counts, over both splits, each rule an admission refusal
broke: validator codes (V2, V5) or a store refusal's variant name. Rule codes
only, no identifiers or text. The printed line gains admit-rules=... before the
lowerer-reach label.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 14:05:13 +00:00
3df878f4fa Merge pull request 'Lows: summary_line leaves the public surface; lowering bound pinned in bytes, CR refused' (#37) from weksa-lowering/golf-loop-first-round into main 2026-11-10 14:00:06 +00:00
Weksa
00250088a8 Lows: summary_line leaves the public surface; lowering bound pinned in bytes, CR refused
RoundRecord and Decision no longer expose an unlabelled summary_line; the only
public spellings are RunStores::round_line and cycle_line, which label with the
run's lowerer reach. The lowering bound tests now kill the chars-for-bytes and
CR-allowed mutants.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 13:58:28 +00:00
23bfb02593 Merge pull request 'golf-loop-model-lowerer: a Claude session lowers each packet behind the model port; the template lowerer leaves the loop' (#36) from weksa-lowering/golf-loop-model-lowerer into main 2026-11-10 09:47:43 +00:00
Weksa
b569028f48 Soul s1 fixes: pin the lowerer reach, bound lowering text, pin the build refusal and the I/O discard
RunRecord key 12 LowererReach set by a required --lowerer-reach flag and
shown in round and cycle lines. PROMPT_SOURCE_DIGEST covers packet.rs.
Lowering text is refused when blank, over 4096 bytes or holding a control
character. Unanswered lowering digests are listed once. Tests for the
Prompt::lower build refusal and the packets.cc discard after a port error.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 09:32:28 +00:00
Weksa
74ebafbc65 The round lowers through the ModelPort: Prompt::lower over a LoweringInput, two answer phases
run::score_round no longer calls lower::lower. Prompt::lower prints the
meaning of an admitted view, en-US entity forms and the inventory at the
view's revision, and no item text, key, group, speaker or packet key. The
answer is a LoweringDraft {text}, held in score_round's locals and scored,
never written to run.cc, a RoundRecord, a Decision or EditFeedback. A round
or cycle asks every encode prompt, then every lowering prompt, all or
nothing. An entry an edit adds can now be lowered.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 09:18:38 +00:00