Lowerer reads entity forms: entity referents lower to the entity's en-US citation form #11

Merged
weksa merged 2 commits from weksa-lowering/entity-forms into main 2026-11-07 10:00:48 +00:00
Member

What changes

lower() takes a narrow EntityForms port (one entity by id; EntityStore implements it, so tests and the loop can hand it a map). A referent that cites an entity now lowers to that entity's first form stored under en-US (TARGET_LANGUAGE), verbatim: no re-casing at a clause start, no "the". Before, every entity-bearing referent rendered by its concept word (nibu was "the ship mind") and the name never reached the text.

  • Authority is two explicit things, not a heuristic: the language tag (TARGET_LANGUAGE) and the form's position (citation form first). Forms after the first are inflected or particle-bound shapes; no English frame asks for one, so none is chosen. Other languages add their own tag when language-ontology moves the rows into documents.
  • Refused by name, never replaced by the concept word: UnknownEntity (port does not hold it), NoForm (no en-US form), EntityRead (port fault).
  • The addressee is still "you" / "yourself" and is never looked up.
  • A name that opens a sentence is not capitalised; only template words are cased.
  • CLI weksa lower opens --entities and passes it.

Tests (cargo test -p weksa: 150 passed, 0 failed, 1 ignored as before)

New in tests/lower.rs: a lowercase name survives verbatim at a sentence start; only the en-US citation form is chosen over other languages and later forms; missing entity refused; no-en-US-form refused; port fault refused; addressee entity never looked up. The proof closing sentence is now "Nibu will stop that." (Nibu ruled the earlier "will prevent that to protect you" is not her voice: the intervention row says "will stop" and the proof packet fills no beneficiary; a packet that does is refused, so a purpose is never dropped silently). Proof lowering: "Warning: you may endanger yourself by touching the control. Nibu will stop that." tests/cli.rs follows tests/cli.rs follows (its entity form is NIBU, reaching the text as stored).

What the golf-loop scorer now can and cannot see

Can: for a packet whose referents cite entities, the lowered text now carries the entity's stored name, so chrF and the embedder cosine against a reference that uses the name no longer penalise a missing name, and a reference that says "the ship mind" now scores lower (it did, in the CLI test, 85.90 chrF against the old reference).

Cannot: this is not an interlingua measure. The scorer still compares lowered English text to a reference text; it reads nothing of the packet, the entity store, or whether the name is the right referent. It cannot see inflected forms (never chosen), non-English languages, or whether a name is attested for the speaker's community. Meaning scores come from the same embedder as before. Names enter the text from a stored form table, so a wrong form in the store gives a wrong, consistent name.

Not in this PR

An addressee-consent packet field (needed before "You asked her to" can be lowered honestly); per-language form tables for non-English targets; inflected-form selection; entity-bearing referents with features; Dao polarity/question force (dao-bed-open-points c).

🤖 Generated with Claude Code

## What changes `lower()` takes a narrow `EntityForms` port (one entity by id; `EntityStore` implements it, so tests and the loop can hand it a map). A referent that cites an entity now lowers to that entity's **first form stored under `en-US`** (`TARGET_LANGUAGE`), verbatim: no re-casing at a clause start, no "the". Before, every entity-bearing referent rendered by its concept word (`nibu` was "the ship mind") and the name never reached the text. - Authority is two explicit things, not a heuristic: the language tag (`TARGET_LANGUAGE`) and the form's position (citation form first). Forms after the first are inflected or particle-bound shapes; no English frame asks for one, so none is chosen. Other languages add their own tag when `language-ontology` moves the rows into documents. - Refused by name, never replaced by the concept word: `UnknownEntity` (port does not hold it), `NoForm` (no `en-US` form), `EntityRead` (port fault). - The addressee is still "you" / "yourself" and is never looked up. - A name that opens a sentence is not capitalised; only template words are cased. - CLI `weksa lower` opens `--entities` and passes it. ## Tests (cargo test -p weksa: 150 passed, 0 failed, 1 ignored as before) New in `tests/lower.rs`: a lowercase name survives verbatim at a sentence start; only the `en-US` citation form is chosen over other languages and later forms; missing entity refused; no-`en-US`-form refused; port fault refused; addressee entity never looked up. The proof closing sentence is now "Nibu will stop that." (Nibu ruled the earlier "will prevent that to protect you" is not her voice: the intervention row says "will stop" and the proof packet fills no beneficiary; a packet that does is refused, so a purpose is never dropped silently). Proof lowering: "Warning: you may endanger yourself by touching the control. Nibu will stop that." `tests/cli.rs` follows `tests/cli.rs` follows (its entity form is `NIBU`, reaching the text as stored). ## What the golf-loop scorer now can and cannot see Can: for a packet whose referents cite entities, the lowered text now carries the entity's stored name, so chrF and the embedder cosine against a reference that uses the name no longer penalise a missing name, and a reference that says "the ship mind" now scores lower (it did, in the CLI test, 85.90 chrF against the old reference). Cannot: this is not an interlingua measure. The scorer still compares lowered English text to a reference text; it reads nothing of the packet, the entity store, or whether the name is the *right* referent. It cannot see inflected forms (never chosen), non-English languages, or whether a name is attested for the speaker's community. Meaning scores come from the same embedder as before. Names enter the text from a stored form table, so a wrong form in the store gives a wrong, consistent name. ## Not in this PR An addressee-consent packet field (needed before "You asked her to" can be lowered honestly); per-language form tables for non-English targets; inflected-form selection; entity-bearing referents with features; `Dao` polarity/question force (dao-bed-open-points c). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
lower() takes an EntityForms port (one entity by id; EntityStore implements it).
A referent with an entity renders as the first form stored under en-US, verbatim
and never re-cased at a clause start; the addressee stays "you". An entity the
port lacks, one with no en-US form, or a port read fault is refused by name.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Nibu ruled "Nibu will prevent that to protect you." is not her voice. The
intervention row is now "{agent} will stop {patient}" and the proof packet no
longer fills the beneficiary role; a packet that does is refused as a role the
frame does not name, so a purpose is never silently dropped.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
weksa merged commit 26c64dbeb5 into main 2026-11-07 10:00:48 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/Weksa!11
No description provided.