From 22eba3a106cf0d3f64d2b3bda792675423ae9c7e Mon Sep 17 00:00:00 2001 From: Weksa Date: Mon, 2 Nov 2026 18:27:18 +0000 Subject: [PATCH] lower: refuse role fills the frame does not name and referents no role mentions; header states what is and is not rendered (Soul pass on 3d851bf) Co-Authored-By: Claude Sonnet 5.5 --- crates/weksa/src/lower.rs | 22 +++++++++++++++++++--- crates/weksa/tests/lower.rs | 14 ++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/crates/weksa/src/lower.rs b/crates/weksa/src/lower.rs index a6f7577..d6fcdfb 100644 --- a/crates/weksa/src/lower.rs +++ b/crates/weksa/src/lower.rs @@ -2,9 +2,11 @@ //! fixed table keyed by inventory ids. It renders predications, referents and the //! speech act, and nothing else: no style, no model, no corpus text. It takes a //! [`LoweringInput`], so it cannot see the trace or the corpus item. A packet -//! carrying anything it does not render is refused, because rendering part of a -//! meaning would assert a different one (`polarity: negative` dropped says the -//! opposite). +//! carrying a feature, relation, extension, role fill or referent it does not +//! render is refused, because rendering part of a meaning would assert a different +//! one (`polarity: negative` dropped says the opposite). Context, kind and +//! constraints steer delivery and are not rendered; the concept of a predication +//! must resolve but the frame owns the verb. //! //! The table is a temporary owner. Each row speaks for an inventory entry and //! names the gloss it speaks for, so a row cannot outlive a change of what its id @@ -112,6 +114,15 @@ pub fn lower(input: &LoweringInput, inv: &Inventory) -> Result 0 { @@ -164,6 +175,11 @@ fn clause(input: &LoweringInput, inv: &Inventory, p: &Predication) -> Result