Commit graph

233 commits

Author SHA1 Message Date
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
Weksa
3b7a6803bc Retire the lowerer source pin: one prompt pin over context, split and lower
Deletes LOWERER_SOURCE_DIGEST, DriftOf::Lowerer, RunRecord key 7 and
RoundRecord key 3 (retired, never reused). PROMPT_SOURCE_DIGEST now covers
lower.rs, which the lowering prompt will read. Schemas regenerated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 09:10:56 +00:00
3bdfb514ae Merge pull request 'Round-digest lows 2: length-framed source digest, lock cleanup, honest drift text, window tests' (#35) from weksa-lowering/round-digest-lows-2 into main 2026-11-10 08:56:20 +00:00
69e1f0dda3 Merge pull request 'Speaker-scene lows: with_scene enforces scene coverage at read, one owner' (#34) from weksa-lowering/speaker-scene-lows into main 2026-11-10 08:54:49 +00:00
Weksa
7a803f5cb5 Pin the read-side coverage filters; V16 says the scene covers every live speaker of the group
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 08:54:28 +00:00
Weksa
de46ced9ea Round lows 2: length-framed prompt source digest, refused create takes its lock, Prompts drift text, window pins for entities and head, one-write asserts Accepted
Recorded prompt digests change with the framing (they drift by design).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 08:40:35 +00:00
Weksa
da407e23af Scene coverage has one owner, Scene::uncovered, applied at put and at with_scene
with_scene now takes the corpus store and refuses (V16) a scene that no longer
lists the speaker of every live item of its group.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 08:40:17 +00:00
e93862a57f Merge pull request 'Round lows: split.rs joins the prompt source digest, stores re-checked after open' (#33) from weksa-lowering/golf-loop-round-lows into main 2026-11-10 08:36:12 +00:00
5a125fef4e Merge pull request 'Checkpoint-gate lows: pin the once rule and the elide branch, escape line breaks in item text' (#32) from weksa-lowering/checkpoint-gate-lows into main 2026-11-10 08:23:34 +00:00
Weksa
af35f72004 context: pin every line separator in item text with its own splitter
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 08:23:18 +00:00
Weksa
c1c19cc848 Run pins: prompt digest covers split.rs; stores are re-pinned after they open, so digest and open cannot straddle a change
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 08:22:12 +00:00
069820b323 Merge pull request 'One-write seam: pin 'accept is one batch' by behaviour, delete the source-text tripwire' (#31) from weksa-lowering/one-write-seam into main 2026-11-10 08:19:05 +00:00
Weksa
0b2f6ce43b context: item text cannot forge a prompt line or block; pin interleaved re-offers, long shared-prefix ids, near-prefix held turns
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:59:59 +00:00
Weksa
caaa3b0650 Accepting is one write, pinned by a store that refuses its second write
Delete the source-shape tripwire for one put_prepared_batch; run_cache_over
lets a unit test run cycle over a CacheBackingStore failing write 1 or 2:
the round and the decision land together or not at all.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:55:11 +00:00
Weksa
60e9cfca87 context: pin the once rule per key and for Train, the held-turn key equality, and item text inside its block
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:53:44 +00:00
f14d9d1592 Merge pull request 'golf-loop-edit-accept: a Train-only editor proposes an inventory edit, a candidate round scores it, a noise-floor rule accepts or rejects on Validation' (#30) from weksa-lowering/golf-loop-edit-accept into main 2026-11-10 07:50:03 +00:00
377adae7e9 Merge pull request 'Clippy: name the predication tuple, box PutArgs' (#29) from weksa-lowering/clippy-lints into main 2026-11-10 07:50:02 +00:00
Weksa
5f97aad6a2 run: create removes the inventory copy when a later step fails
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:49:15 +00:00
Weksa
592dbd7e67 test: pin decide's chrF tolerance to billionths on two-decimal pairs
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:49:15 +00:00
Weksa
c61ef8b7ea cycle: drop the redundant verdict field the base literal already supplies
The mutant that deleted it was equivalent; the line is the cut.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:18:59 +00:00
Weksa
cd4295632a Map: create refuses an existing inventory.cc; decide compares in billionths
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:11:45 +00:00
Weksa
52e7c44990 rustfmt the new tests
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:11:04 +00:00
Weksa
c28f1fbb13 Pin the one-write accept: an injected run.cc write failure leaves neither round nor decision; tripwire on a second write
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:10:43 +00:00
Weksa
59fdd7fec7 decide: compare readings in billionths, so a gain of exactly one LADDER_STEP is no gain on every baseline
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:10:43 +00:00
Weksa
f1fc31e420 cycle: every rejection removes a stale candidate inventory an earlier attempt built
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:10:43 +00:00
Weksa
b0321fe487 Pin the last-edit word to the latest decision: a reject after an accept is told as rejected
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:10:43 +00:00
Weksa
467ce98ea0 Pin the head to the latest accept: two accepted cycles, the third builds on the second
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:10:43 +00:00
Weksa
d02029c8b8 Pin the Ladder release: a rejected candidate's score never reaches the editor, only the stepped head's
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:10:43 +00:00
Weksa
20ca3aaae5 Pin the noise floor: distinct replicates set the per-field and composite spread, and a gain inside it is no gain
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:10:43 +00:00
Weksa
afe1a1b434 create: copy the inventory with create_new, so a root that holds inventory.cc refuses and never truncates it
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 07:10:43 +00:00
Weksa
1c1fd3cf10 Clippy: name the predication tuple, box PutArgs in EntityCommand
Clears type_complexity in daodejing.rs and large_enum_variant in main.rs.
RoundOutcome's large_enum_variant in run.rs is left for golf-loop-edit-accept, which rewrites that file.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 06:23:09 +00:00
Weksa
ae384ee928 Map and README: the edit-accept cycle, the Decision row and the loop's live surface
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 05:11:06 +00:00
Weksa
ae8deb1e03 weksa loop cycle: a Train-only editor proposes an inventory edit, a candidate round scores it, a Ladder-stepped noise-floor rule accepts or rejects on Validation
Reading, decide and LADDER_STEP are pure; Decision (weksa.loop_decision) holds
digests and numbers; the latest Accepted decision names the run's head. The
candidate round and its decision are one batch put.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 05:10:47 +00:00
Weksa
a8918c6ff1 EditDraft and EntryDraft: the editor's JSON read once, ids and revisions the store's
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 05:03:33 +00:00
Weksa
6d17f45ca2 The mint prompt becomes the editor's: Train blocks, the inventory listing and an EditFeedback line, nothing from the held-out split
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 05:02:42 +00:00
Weksa
fc52f3d3a4 RoundRecord keys 16 inventory_digest and 17 cycle; round becomes the drift check, score_round and one put
An encode answer the port reports as InvalidData is that item's Refused(Parse),
not an aborted round.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 05:01:18 +00:00
Weksa
a14bcaf9f8 The run stops opening the caller's inventory store: create copies it to <root>/inventory.cc and pins its digest (key 11)
RunRecord.inventory is provenance only; open refuses Drift(Inventory) when the
run's own file differs. A run.cc from before has no key 11 and its open fails.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 05:00:34 +00:00
7b407fdd13 Merge pull request 'golf-loop-round: the smallest loop that scores one round end to end' (#28) from weksa-lowering/golf-loop-round into main 2026-11-10 04:42:53 +00:00
Weksa
2425030fe3 Pin the round-start discard: a stale packets.cc and lock in an unrecorded round dir do not refuse a revised draft
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 04:41:02 +00:00
Weksa
a014fc3f87 Pin the scored counts of the Dao round
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 04:15:57 +00:00
Weksa
3e1e1a07da Fix the golf_loop test that did not compile in the previous commit
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 04:15:00 +00:00
Weksa
fd0c3b0edb Round: means count a refused item as 0, a failed round discards its packets, the round line is pinned
Validation and Train means are over every item of the split with scored counts
beside them, so refusing a weak item cannot raise a mean. A round that fails
before its record is put (embedder down) removes its packets.cc, and a round
starts from none, so a rerun with revised answers is not refused as a changed
packet. RoundRecord::summary_line owns the printed line and is pinned with exact
values. The RoundRecord compile_fail doctest gives every field and fails on
E0451, with its twin literal in a lib unit test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 04:14:39 +00:00
Weksa
8ac92f5af3 Kill the mutation survivors: error texts, unreadable files, the second round's number
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 04:04:36 +00:00
Weksa
db543840a6 weksa loop open|round: pin a run's stores, run one round, print one line
Round reads its stores only from the run record; prompts without answers are
written to the round directory and the command exits 3. Map line 7b records
what landed and what the follow-ups still own.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 03:51:18 +00:00
Weksa
49879000f7 run::round: a pinned run encodes Train and Validation, admits, lowers, scores and records the round
encode.rs reads a model answer into a PacketDraft (the one JSON door for
models) and the encoder step sets everything the model does not write. round
asks every offer first and writes nothing while any prompt is unanswered, then
admits into the round's own packets.cc, lowers, scores in one call and keeps a
RoundRecord with Train rows and Validation only as means and refusal counts.
The Dao stores reproduce the base scores (Train 44.18, Validation 78.56).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 03:50:04 +00:00
Weksa
77d8b13952 ModelPort and AnswerFiles; the encode prompt lists the live inventory and has a digest
The encoder's instructions are written, Prompt::encode takes the run inventory
and revision, and Prompt::digest names a prompt for AnswerFiles: a prompt with
no answer file is written to <digest>.prompt and nothing else happens.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 03:47:24 +00:00
Weksa
e7b4d9a68b RunStores is the one public producer of TrainItems and EncoderOffer: a run pins its corpus and entity stores by digest
TrainItems::from_corpus and EncoderOffer::for_round become pub(crate). RunStores
(run.rs) creates a run over three stores, records their canonical paths and
FNV-1a 64 digests plus the prompt and lowerer source digests in run.cc, and
reopens only from that record, refusing on drift. RunRecord and RoundRecord are
published CultCache types. tests/context.rs and the context.rs doctests move to
RunStores; the two mutated-clone gate cases become a unit test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 03:45:49 +00:00
2be0a35ae7 Merge pull request 'speaker-scene: weksa.speaker and weksa.scene documents, with_scene reads the store' (#26) from weksa-lowering/speaker-scene into main 2026-11-10 03:26:05 +00:00
Weksa
eff94fb4af Pin LoweringInput::of's privacy with the right arity; scene() doc points to scene_read()
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 03:25:44 +00:00