Rewrite lowering prose to the live system after table retirement
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
577f61092e
commit
dac67cebb7
5 changed files with 16 additions and 47 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 <store> <key> --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 <store> <key>` 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.
|
||||
|
|
|
|||
|
|
@ -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`
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<String, LowerError>` | 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 <store>` 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 <concept word>", 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 <item>...
|
||||
[--output FILE]` embeds the output text once against every named item. It
|
||||
stores nothing (Score documents arrive with cut 7) and gates nothing.
|
||||
|
|
|
|||
Loading…
Reference in a new issue