From dac67cebb7fed419c71cb1050fea388cd9e06d72 Mon Sep 17 00:00:00 2001 From: Weksa Date: Sat, 14 Nov 2026 03:55:13 +0000 Subject: [PATCH] Rewrite lowering prose to the live system after table retirement Co-Authored-By: Claude Sonnet 5.5 --- README.md | 4 +-- docs/english-pronunciation-lowering.md | 4 +-- docs/interlingua-standard.md | 7 ++-- docs/targets/dao-de-jing-test-bed.md | 2 ++ docs/targets/interlingua-lowering-map.md | 46 ++++-------------------- 5 files changed, 16 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 2b5d0d3..8becda9 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,8 @@ measured. - `settings/`: setting-specific proving grounds for language projects. **Live versus planned.** Live: docs, fixtures, examples, ontology data and the -packet crate `crates/weksa`, including `weksa lower` (the template lowerer for -proof fixtures) and `weksa score`, and the golf loop's round and edit-accept +packet crate `crates/weksa`, including `weksa pronounce` (the ruled IPA and phones +of the entities a packet cites), `weksa score`, and the golf loop's round and edit-accept cycle (`weksa loop open|round|cycle`), which encodes and lowers through the model (a prompted Claude subagent, per staged-distill). Planned: Score and lowering documents and the other panel languages. No diff --git a/docs/english-pronunciation-lowering.md b/docs/english-pronunciation-lowering.md index 0e2f7cc..acd5e37 100644 --- a/docs/english-pronunciation-lowering.md +++ b/docs/english-pronunciation-lowering.md @@ -85,8 +85,8 @@ thing. An entity's citation form in a language may carry a ruled pronunciation (`LanguageForms.pronunciation`): bare IPA with stress marks, who ruled it, the date, the source, and an optional list of rejected variants kept so nobody -re-proposes them. `weksa lower --ipa` prints the stored IPA of each -entity the packet cites, one per line, and refuses with `NoPronunciation` for an +re-proposes them. `weksa pronounce ` prints the stored IPA of each +entity the packet cites, one per line (`--phones` prints the phones line), and refuses with `NoPronunciation` for an entity with none; rejected variants are never read. This is not the plan below: it carries no timing, contour, length or invented prosody, and Weksa has no English G2P, so an unruled name has no IPA. diff --git a/docs/interlingua-standard.md b/docs/interlingua-standard.md index f8e7937..0ada803 100644 --- a/docs/interlingua-standard.md +++ b/docs/interlingua-standard.md @@ -196,10 +196,9 @@ and `features` carry source-side nuance on content (hedge, certainty, irony and whatever the inventory grows). This is source-side communicative pressure, not target-language register. `addressee_consent` is no feature: it names the predication the addressee asked for or agreed to, a fact about what the -addressee did. The English lowerer's request row (`frame:3`, "{agent} asked -{patient} to stop") reads it: the consent must name that predication and its -agent must be the addressee, else `ConsentMissing` or `AskerNotAddressee`. A -consent naming any other predication is refused as unrendered. +addressee did. `V14` and `V15` check the field: it may be set only by authoring or game +telemetry, and it must name a predication of the packet. Nothing lowers a +request clause from it today (follow-up `table-retirement-consent-owner`). ### `stance` diff --git a/docs/targets/dao-de-jing-test-bed.md b/docs/targets/dao-de-jing-test-bed.md index 2b71dab..0af4831 100644 --- a/docs/targets/dao-de-jing-test-bed.md +++ b/docs/targets/dao-de-jing-test-bed.md @@ -81,6 +81,8 @@ ceiling of an author who saw the reference: frame minted from Train, scored lowest (chrF 44.18). The scores rise with how bespoke the frame is, the reverse of generalisation. The Validation and Test numbers measure the lowerer table, not what the interlingua can carry. + That table is deleted: the Dao numbers below were measured on it, and the + loop now lowers through the model (`Prompt::lower`). - n = 5, one translation as reference, one embedding model, no variance. ## What the scorer cannot see diff --git a/docs/targets/interlingua-lowering-map.md b/docs/targets/interlingua-lowering-map.md index 1600f6b..2a54223 100644 --- a/docs/targets/interlingua-lowering-map.md +++ b/docs/targets/interlingua-lowering-map.md @@ -606,57 +606,25 @@ measurable with this corpus either. Training pairs are Train only, at a frozen revision; the export is 12b. -## Lowerer first cut (`golf-loop-lowerer-cut`) +## Lowering authorities (`golf-loop-lowerer-cut`, `table-retirement`) -Authority map for the smallest lowerer, written before its code (Imagination -pass by the Weksa Self run, 2026-11-01). The cut exists to give the golf loop a -measurable baseline from a packet: `lower` gives text, `score` gives numbers. +Authority map of who decides what about a packet's wording. The first cut gave +the loop a baseline from an English template table; cut `table-retirement` +deleted that table, `lower()` and the CLI lowering command, so no deterministic path +produces lowered text and the model's answer to `Prompt::lower` is the only +wording owner. `lower.rs` keeps the entity port, `pronounce` and `phones` +(`weksa pronounce`). | Decision | Owner | Inputs | Outputs | Not the owner | |---|---|---|---|---| | Whether a packet exists | `validate` / `PacketStore::admit` (unchanged) | packet, inventory, corpus, entities | admitted packet or typed refusal | the lowerer | | Wording of a scored item in English (golf loop, `golf-loop-model-lowerer`) | the ModelPort's answer to `Prompt::lower` (`context.rs`), read as `LoweringDraft` (`encode.rs`) and held in `run::score_round`'s locals | the admitted view, the inventory at its revision, en-US entity forms | `{"text"}`, scored once, never stored | the corpus item, the scorer, the editor | -| Wording of a packet in English (`weksa lower`, proof fixtures) | `crates/weksa/src/lower.rs`: `lower(&LoweringInput, &Inventory) -> Result` | the validated lowering view and the inventory at its revision | text, or a typed refusal naming the missing template | the corpus item, the scorer, the golf loop | -| English template table (concept words, frame templates, speech-act openers) | the same module, as rows `(inventory id, gloss it speaks for, surface)` | none; it is data in code | rows the lowerer looks up | the inventory (it owns the ids and glosses, not the English) | | The inventory's concepts and frames | an inventory revision; here `inventory::proof_revision()` (rev 2), hand-seeded as `seed()` is | none | the 6 concepts and 3 frames `nibu-proof-001` and the consent-gated request packet name | the lowerer | | What a score counts | `Scorer::score` (unchanged) | output text, reference text | `ItemScore` | `weksa score`, which only reads text and calls it | | The proof packet | `packet::proof_packet()`, typed ids of rev 2, admitted by `weksa packet proof ` through `PacketStore::admit`. Not JSON: `Packet`'s serde is CultCache's positional tuple, and JSON in is the xenos boundary the cut 7 encoder owns | none | admitted packet | the CLI decides nothing about validity | Decisions this map makes, and why: -- **`lower` takes `&LoweringInput`, not `&Packet`.** A `Packet` carries `trace` - and `provenance.corpus_item`; the model page says the lowerer sees the packet - without its trace and never the corpus item (`lowering-traced`, - `leak-owned-by-flow-and-scorer-3`). `validate` already yields the view, so the - CLI runs `validate` and hands it over. Cut 4 narrows the door to - `PacketStore::admit`; this cut does not wait on it. -- **The frame owns the verb phrase; a predication's concept must resolve but is - not rendered.** Referent concepts supply nouns. A frame template names its - roles by inventory gloss (`{agent}`), resolved against the inventory at the - packet's revision, so a retired or re-glossed role cannot be silently - mis-keyed. A row whose gloss differs from the inventory's entry for its id is - a `LowerError`, so a table row cannot speak for a different meaning than its - id now carries. -- **Rendering rules, all deterministic and all from packet fields:** the - discourse addressee renders "you" ("yourself" when it already filled a role - in the same predication), other referents render "the ", a - predication filling a role renders "that", the speech-act row supplies an - optional opener, sentences are capitalised and end in a full stop. - Entity-bearing referents render by concept word: the lowerer does not read - the entity store in this cut (follow-up: entity forms in the lowerer). -- **No style, no register, no features.** Hedge, certainty, modality and - polarity are not rendered, so the baseline scores what meaning alone buys. - A lowerer that ignores `polarity: negative` would assert the opposite, so - `lower` refuses any packet that carries a feature, relation or extension it - does not render rather than render it wrong (`packet-owns-meaning`); features arrive as templates - learn them. -- **Deleted by later cuts, not this one:** the table in `lower.rs` and - `proof_revision()` are temporary owners. Cut 5 (`language-ontology`) moves - the table to `weksa.ontology_entry` documents selected by the target - profile; cut 7 replaces `proof_revision()` with the loop's minting round. - Nothing is deleted today because no earlier lowerer exists; the YAML - `examples/english-lowering/` hand-lowerings are fixtures, not owners, and - stay. - **`weksa score` is a thin reader of `Scorer::score`**: `weksa score ... [--output FILE]` embeds the output text once against every named item. It stores nothing (Score documents arrive with cut 7) and gates nothing.