From 6f14b00090f77a0888a46e41a350486b6122a845 Mon Sep 17 00:00:00 2001 From: Weksa Date: Thu, 12 Nov 2026 15:17:36 +0000 Subject: [PATCH 1/5] language-ontology-seed: model-drafted en-US and ja-JP seed entries; the target-language YAML, its typed copy and their schema prose deleted Entries are Annotator::Model (Anthropic), inventory revision 1, drafted from the YAML and standard references, not from any corpus text. pt-BR profiles are deleted unconverted. Citations name data/ontology/ontology.cc. Co-Authored-By: Claude Sonnet 5.5 --- .weksa/cultural-ontology/README.md | 27 ---- .weksa/cultural-ontology/starter-targets.cc | Bin 13426 -> 0 bytes README.md | 7 +- crates/weksa/tests/original_corpus.rs | 63 ++++++++ data/ontology/ontology.cc | Bin 0 -> 9181 bytes data/target-language-ontology/README.md | 39 ----- data/target-language-ontology/en-US.yaml | 135 ------------------ data/target-language-ontology/ja-JP.yaml | 70 --------- .../pt-BR-overlays.yaml | 76 ---------- .../pt-BR-umbanda.yaml | 72 ---------- data/target-language-ontology/pt-BR.yaml | 74 ---------- docs/multilingual-utterance-lowering.md | 22 ++- examples/cultcache-lowering/README.md | 9 +- .../nibu-proof-001/README.md | 4 - .../nibu-proof-001/en-transatlantic.yaml | 3 - .../ja-JP-kanto-contemporary.yaml | 3 - .../pt-BR-vanilla-brazilian.yaml | 3 - .../nibu-proof-001/realizations.yaml | 6 +- prompts/nibu-cultcache-target-critic.md | 2 - prompts/nibu-cultcache-target-lowering.md | 24 +--- schemas/README.md | 3 - schemas/cultural-ontology-profile.md | 4 +- schemas/target-language-cultural-ontology.md | 81 ----------- 23 files changed, 86 insertions(+), 641 deletions(-) delete mode 100644 .weksa/cultural-ontology/README.md delete mode 100644 .weksa/cultural-ontology/starter-targets.cc create mode 100644 data/ontology/ontology.cc delete mode 100644 data/target-language-ontology/README.md delete mode 100644 data/target-language-ontology/en-US.yaml delete mode 100644 data/target-language-ontology/ja-JP.yaml delete mode 100644 data/target-language-ontology/pt-BR-overlays.yaml delete mode 100644 data/target-language-ontology/pt-BR-umbanda.yaml delete mode 100644 data/target-language-ontology/pt-BR.yaml delete mode 100644 schemas/target-language-cultural-ontology.md diff --git a/.weksa/cultural-ontology/README.md b/.weksa/cultural-ontology/README.md deleted file mode 100644 index a424e82..0000000 --- a/.weksa/cultural-ontology/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Cultural Ontology CultCache Seeds - -This directory stores Weksa cultural ontology as CultCache `.cc` witnesses. - -## Starter Database - -- `starter-targets.cc` - -This store contains one catalog entry and three draft guarded profile entries: - -- `weksa.cultural_ontology.pt-BR.vanilla_brazilian.v0` -- `weksa.cultural_ontology.en.transatlantic.v0` -- `weksa.cultural_ontology.ja-JP.kanto.contemporary.v0` - -The catalog entry is: - -- `weksa.cultural_ontology.catalog.seed_targets.v0` - -The `.cc` file is the typed state witness. This README is only an inspection -guide; it does not own cultural ontology truth. - -The profiles follow `schemas/cultural-ontology-profile.md`: salience axes and -linguistic affordances are nested typed state with feature IDs, activation -gates, constraints, indexicality, evidence, uncertainty, and trace labels. - -Qdrant retrieval may later propose evidence bundles for these profiles. It does -not own accepted profile state. diff --git a/.weksa/cultural-ontology/starter-targets.cc b/.weksa/cultural-ontology/starter-targets.cc deleted file mode 100644 index 680b06ca60a0efc878ed82d17209886f5bb14c45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13426 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 E7fJF~WB>pF diff --git a/README.md b/README.md index 3133190..ef509cb 100644 --- a/README.md +++ b/README.md @@ -82,9 +82,10 @@ English, Brazilian Portuguese, Japanese, and later target-language dialogue. [Flavored English Lowering](./docs/flavored-english-lowering.md) remains the target-specific English receipt. -See [Target-Language Cultural Ontology Profiles](./data/target-language-ontology/README.md) -for the reviewable address, register, politeness, idiom, metaphor, and script -distinctions that target lowerers must inspect before producing output. +The language ontology is `data/ontology/ontology.cc` (read it with +`weksa ontology dump`): per language, the address, register, politeness and script +choices a lowerer makes for a speaker in a stance. Its en-US and ja-JP entries are +model-drafted seeds, never Test evidence; accepted rounds grow them. For the first AquaSynth speech-training handoff, see [Tiny PanPhon v0.1 Speech Curriculum](./examples/speech-training/tiny-panphon-v0.1/README.md). diff --git a/crates/weksa/tests/original_corpus.rs b/crates/weksa/tests/original_corpus.rs index 2194a28..4e1dce1 100644 --- a/crates/weksa/tests/original_corpus.rs +++ b/crates/weksa/tests/original_corpus.rs @@ -251,6 +251,69 @@ fn the_original_inventory_is_the_dao_revision_three() { assert!(InventoryStore::open(©).is_ok()); } +/// The committed seed ontology: every entry model-drafted, exactly the two +/// panel languages, each with a Stance-conditioned entry, and every committed +/// corpus opens a run over it (ruling `ja-ontology-owner-answer`: a model-drafted +/// entry is labelled so and is never Test evidence). +#[test] +fn committed_ontology_is_model_drafted_and_reads_every_inventory() { + use weksa::OntologyStore; + use weksa::ontology::Condition; + use weksa::run::{LowererReach, RunPaths, RunStores}; + use weksa::speaker::Annotator; + let data = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../data"); + let tmp = tempfile::tempdir().unwrap(); + let onto = tmp.path().join("ontology.cc"); + std::fs::copy(data.join("ontology/ontology.cc"), &onto).unwrap(); + let entries = OntologyStore::open(&onto).unwrap().all().unwrap(); + for e in &entries { + match &e.annotator { + Annotator::Model { family, generator } => { + assert_eq!(*family, ModelFamily::Anthropic, "{}", e.key()); + assert!(generator.contains("claude"), "{}", e.key()); + } + other => panic!("{} is {other:?}", e.key()), + } + } + let mut langs: Vec<&str> = entries.iter().map(|e| e.language.as_str()).collect(); + langs.sort(); + langs.dedup(); + assert_eq!(langs, PANEL); + for lang in PANEL { + let stance = |c: &Condition| c.slot == weksa::inventory::Slot::Stance; + assert!( + entries + .iter() + .any(|e| e.language == lang && e.when.iter().any(stance)), + "{lang} has no Stance-conditioned entry" + ); + } + for (corpus, panel) in [("original", &PANEL[..]), ("daodejing", &PANEL[..1])] { + let dir = data.join(corpus); + let copy = |f: &str| { + std::fs::copy(dir.join(f), tmp.path().join(format!("{corpus}-{f}"))).unwrap(); + tmp.path().join(format!("{corpus}-{f}")) + }; + let (c, i, e) = (copy("corpus.cc"), copy("inventory.cc"), copy("entity.cc")); + RunStores::create( + &tmp.path().join(format!("run-{corpus}")), + corpus, + RunPaths { + corpus: &c, + inventory: &i, + entities: &e, + ontology: &onto, + }, + "m", + "bag", + LowererReach::BriefedSubagent, + ModelFamily::Unrecorded, + &panel.iter().map(|l| l.to_string()).collect::>(), + ) + .unwrap_or_else(|e| panic!("{corpus}: {e:?}")); + } +} + /// The probe over the real original corpus: every item is offered, none names a /// work, and a model that answers with unrelated words reads at the noise floor. #[test] diff --git a/data/ontology/ontology.cc b/data/ontology/ontology.cc new file mode 100644 index 0000000000000000000000000000000000000000..94eeb19bb785bae535198a500c282f330f069d9b GIT binary patch literal 9181 zcmc&)ZEqY`8O1H7Erl;21pRC!1P8+TL{1?BO8~B~a z|NVuBPhFxXsfn<%XR0>%PrJN!&DxEX@$t&|+TG(DYUAr`>(>43pCjz_Idj#>$c4?m za%2)KalChY!gXVz6w{tyfv>a(Ma*137LE?uY}ON@IiwsMU?HB>oZ8yNnnFa`p-2eF zW8Bfq4>f*`F(nyivpf#{u)&n(ZB=;BLl^I2@q8kb?jN=9t8-VkiuM?5%cRP-nZJi= z$y%b?Ik#Q9BIwT7dCL#l7bZgO#WM1p3k~|4IV#@!ffMk=6%{4JQ0U5r$_Dnmy;Og; z72m4HSc`5^absTB!evU}N6w7Zr`|3?yJlbsmcjO07TYh6ENl}8eMg3KhtH}&>iH?n zLq{ys1=mR|F52I<@r`FSp1!j%p|=UH^uO-e*V{KyuLE`Pq(<1afM#9BEgk@?1|bo% zSzmh$ch@ms#)){Mx*r3@tT2Quz|etUek&qO{28IDbJq-{nm6&eX81k;EStRj#E>y9 z#n*3GOdl%nbtP0EU5e_SDG#KrWjIv;3b--G0y$f0iZ&y}JmEHkJC=dVnet?;8IO!y zFkt8bcHt+7#8Pa5fWSq@%&c{KO^jA-THv=Z>QPUE zfYGv5K=u8-+=qP30@NqiPh|ojat*}8X6m{!!0xudezm~V6DzF$HA|q)E?Cs&Tr)1@ znqkR3KcTlvD8|U~-u|Zqx1s<-Ge^XlqZI8Ln~r4@%AIjJLl|g>p=i+;d%J_602h!J9*FV_M4985=8%EKUPV%|S+Y=S&@oYLM#R%rn8}}@^C_|o=%^V>U1F_ID&(pffeAFVjJS+A0*7 zDg&J{ML~sPYL`?)e1_sE3D*UymaQ^;U^*}S$;It*MpW63p~JtS4EzsU`0wk(ztT#u za28G8{%01^OF|c55XMD9krN#sn9wts-Mvb2bkwQTjAo&v|&i5GB?-q8y@_` zB!Ke6CaDW&)4twhfb;mTc${HLI3^@fPTLG5R$UD3;TKXblV5{RS5M^+_wY zb?ygMMr@`2XwA!z@qDZdo|`OLA1H;V6@fP%w^a^vK69{y`p#gk=SDxNgE*Sd$>2v0)PX|LU?CL+aS)QImgGU>ur=g`UY2{N? zfdr{X57Qsfsbelw6#X9A05R4LV~*}&$n5UiJ4RqMHs?W^~B%O z&e2a^Kb>}7NIS2lo$G1mwe(Q;TH5(z+BumX>fCtwy|iz}@%JSw>`0E|n3D zSeWlTBf4FQkrDmSrWplzGdD%?gpDi=qahm-Arei`i@9EP?t`1B{t6^-oyX5^+C6F@ zJ(G5U<*>mk6$bs-f>#WK2Aki-h;4j{2&^!Z53p;`<#vtILhh0Z)EK$n0F!bZIa1%E z<@UEy_d_T(@(mhNU`Dc0TVgUXwaBd;wMfj@hRH9codsfc=WS5>KZoY=Z^%q8HDG_! z7UTa4l6Ef!NyYRi%jrlz5nu4d+z67AM@kZ^Ekd`b**F?XmxJGF=SbRl6EJ@Khf6m; zI++7|Y$*KBCc8`=N+J4?MYI@M%eFN2>pNQN08a9fdwK1lxT*1~++{hgInBIYY;=TB+p_oTAJ zP>CXnWupp%{bE!xSR$66k3YOKg(%F&`#*C&&c-=MB5cLP2AEL;&&LEpQE0|tjK(%` z#u?;6B#fVjO2vNNchCYanR*Um$Ts*F(QNXTgq4f2 zD~fhVsJEqr{Zk3%4Ihw_@gv{5Zo*DToO0*%|99%k+xx6j;|OOWqV{!D;kc;N&vkWO+X>5nj3c?js7%*JV)G%&t< zqz5RI$gyuR - Bounded English dialogue lowering profile for current Weksa fixtures. This is - not a claim about all English-speaking cultures. -authority: - owns: - - address directness choices - - casual versus formal register - - technical metaphor legibility - - understatement or sarcasm risk - does_not_own: - - source meaning - - speaker identity - - whole-culture description -salience_axes: - address: - relevant_distinctions: - - direct second person is acceptable when scene context names the addressee - - imperative force can be softened or sharpened through wording - lowering_questions: - - Does direct address preserve the speech act? - - Does softening erase urgency? - register: - relevant_distinctions: - - casual - - technical - - formal - - intimate - - institutional - lowering_questions: - - Is technical language character pressure or exposition sludge? - - Does sarcasm obscure the actual warning? - agency: - relevant_distinctions: - - explicit agent responsibility is usually available - - passive phrasing can hide authority or blame - lowering_questions: - - Should the speaker own the intervention directly? - - Does the line preserve who is at risk? -linguistic_affordances: - grammar_features: - - feature_id: en_us_direct_imperative_warning - label: Direct imperative warning - status: draft - domain: - layer: grammar - category: clause_mood - subcategory: imperative - description: > - Broad en-US allows direct imperatives for urgent safety warnings when - the speaker has standing to intervene and the scene rewards clarity - over mitigation. - formal_conditions: - syntactic_environment: - - main_clause - - direct_address_optional - semantic_inputs: - - warning - - addressee_action_to_stop_or_avoid - - consequence_or_risk_available - required_interlingua_fields: - - speech_act - - addressee - - prohibited_action - realization: - function: stop_or_prevent_action - surface_strategy: bare_imperative_or_do_not_imperative - examples: - - "Don't touch the damaged control." - activation: - allowed_when: - - scene_has_immediate_risk - - speaker_has_contextual_authority_or_care_relation - forbidden_when: - - politeness_softening_is_required_by_target_profile - - imperative_would_falsely_imply_hierarchy - requires_profile_authority: false - minimum_density: light - maximum_density: normal - constraints: - grammar_contexts: - - avoid_if_source_requires_indirect_request - register_contexts: - - casual - - technical - - emergency - speaker_contexts: - - known_addressee - - operator_warning - incompatibilities: - - generic_assistant_over_politeness - indexicality: - social_meanings: - - urgency - - clarity - - responsibility - in_group_meanings: [] - out_group_risks: - - may sound abrupt if the scene is not urgent - stereotypes_to_avoid: [] - evidence: - source_refs: - - schemas/cultural-ontology-profile.md - qdrant_source_ids: [] - cached_source_refs: [] - source_hashes: [] - reviewer_refs: [] - confidence: medium - uncertainty: - open_questions: - - Should a later en-US regional overlay override imperative force? - known_limits: - - Base en-US does not model regional, racialized, or contact-language - dialect grammar. - trace: - trace_label: direct_imperative_warning - must_report_when_used: true - must_report_when_rejected: true - phonology_features: [] - lexicon_features: [] - discourse_patterns: [] - orthography_features: [] - code_switching: - allowed: false - constraints: - - Base en-US profile does not authorize contact-language switching. - patterns: [] -forbidden_flattenings: - - Do not treat English as the neutral source for other target languages. - - Do not use generic assistant politeness when a character voice is required. - - Do not let sarcasm replace the actual predicate being lowered. diff --git a/data/target-language-ontology/ja-JP.yaml b/data/target-language-ontology/ja-JP.yaml deleted file mode 100644 index aa23492..0000000 --- a/data/target-language-ontology/ja-JP.yaml +++ /dev/null @@ -1,70 +0,0 @@ -profile_id: weksa.target_cultural_ontology.ja-JP.v0 -language: - code: ja - locale: ja-JP - script: Jpan -scope: > - Bounded Japanese dialogue lowering profile for Weksa fixtures. This profile - records realization distinctions that must be inspected; it is not a total - description of Japanese culture. -authority: - owns: - - politeness and honorific pressure - - in-group/out-group stance when context supplies it - - subject and object omission choices - - script mix and technical register - - sentence-final force - does_not_own: - - source meaning - - character identity - - exhaustive Japanese grammar -salience_axes: - politeness: - relevant_distinctions: - - plain - - polite - - honorific - - humble - - rough - lowering_questions: - - Does politeness preserve the relationship, or does it lie about it? - - Is roughness character-specific or generic stylization? - social_position: - relevant_distinctions: - - uchi_soto_pressure - - hierarchy - - familiarity - - emergency_override - lowering_questions: - - Does urgency override ordinary deference? - - Does the line imply a relationship the scene has not earned? - ellipsis: - relevant_distinctions: - - subject omission - - object omission - - explicit pronoun for emphasis or contrast - lowering_questions: - - Is the addressee recoverable without an explicit pronoun? - - Would explicit pronouns sound unnatural or too pointed? - script_and_register: - relevant_distinctions: - - kanji for technical compounds - - kana for softness or readability - - katakana for foreignness, machine texture, or emphasis - lowering_questions: - - Does the script choice help the speaker voice? - - Does a technical compound preserve precision without becoming stiff? - sentence_final_force: - relevant_distinctions: - - direct request - - warning consequence - - command - - threat-like phrasing - lowering_questions: - - Does the ending carry warning force without cartoon aggression? - - Does the line preserve the hazard predicate? -forbidden_flattenings: - - Do not treat politeness as decoration. - - Do not use explicit pronouns just because English has them. - - Do not make every sharp line rough or anime-coded. - - Do not erase the difference between technical precision and formal politeness. diff --git a/data/target-language-ontology/pt-BR-overlays.yaml b/data/target-language-ontology/pt-BR-overlays.yaml deleted file mode 100644 index d7da0d9..0000000 --- a/data/target-language-ontology/pt-BR-overlays.yaml +++ /dev/null @@ -1,76 +0,0 @@ -catalog_id: weksa.target_cultural_ontology.pt-BR.overlays.v0 -base_profile: data/target-language-ontology/pt-BR.yaml -scope: > - Catalog of optional Brazilian Portuguese regional and cultural overlay slots. - An overlay slot is not permission to imitate a community. It is a named place - where reviewed, source-grounded distinctions can live. -activation_rule: > - Use the broad pt-BR profile by default. Add an overlay only when source - context, speaker state, setting documentation, or authoring metadata names the - relevant region, community, institution, religion, or register. -overlay_slots: - - overlay_id: broad_brazilian_default - status: active_base_mode - profile_ref: data/target-language-ontology/pt-BR.yaml - owns: - - broadly legible Brazilian Portuguese dialogue - does_not_own: - - regional specificity - - religious-cultural specificity - - overlay_id: rio_urban - status: planned_profile - profile_ref: - owns_when_defined: - - Rio de Janeiro urban speech/register pressures for specific characters or settings - blocked_until: - - reviewed source context - - human-approved examples - - overlay_id: sao_paulo_urban - status: planned_profile - profile_ref: - owns_when_defined: - - Sao Paulo urban speech/register pressures for specific characters or settings - blocked_until: - - reviewed source context - - human-approved examples - - overlay_id: northeast_regional - status: planned_profile - profile_ref: - owns_when_defined: - - Northeast Brazilian regional speech/register pressures for specific characters or settings - blocked_until: - - specific region named - - reviewed examples - - human approval - - overlay_id: south_regional - status: planned_profile - profile_ref: - owns_when_defined: - - South Brazilian regional speech/register pressures for specific characters or settings - blocked_until: - - specific region named - - reviewed examples - - human approval - - overlay_id: amazonian_regional - status: planned_profile - profile_ref: - owns_when_defined: - - Amazonian regional speech/register pressures for specific characters or settings - blocked_until: - - specific region or community named - - reviewed examples - - human approval - - overlay_id: umbanda - status: active_guarded_overlay - profile_ref: data/target-language-ontology/pt-BR-umbanda.yaml - owns: - - Umbanda-related register gating - - sacred address caution - - anti-caricature constraints - blocked_until: - - source context or authoring metadata explicitly activates Umbanda context -forbidden_flattenings: - - Do not use a planned overlay as if it were defined. - - Do not treat regional slots as accent generators. - - Do not use religious-cultural overlays for ambience. - - Do not collapse race, region, religion, class, and slang into one Brazilian flavor. diff --git a/data/target-language-ontology/pt-BR-umbanda.yaml b/data/target-language-ontology/pt-BR-umbanda.yaml deleted file mode 100644 index c65289d..0000000 --- a/data/target-language-ontology/pt-BR-umbanda.yaml +++ /dev/null @@ -1,72 +0,0 @@ -profile_id: weksa.target_cultural_ontology.pt-BR.umbanda.v0 -language: - code: pt - locale: pt-BR - script: Latn -overlay: - base_profile: data/target-language-ontology/pt-BR.yaml - kind: religious_cultural_register -scope: > - Optional Brazilian Portuguese cultural ontology overlay for Umbanda-related - scenes, speakers, ritual contexts, or referents. This profile is a consent and - context gate, not a decorative vocabulary pack. -authority: - owns: - - whether Umbanda-specific register is allowed for a realization - - sacred or ritual address caution - - house/tradition specificity warnings - - syncretic and entity-reference sensitivity - - anti-caricature constraints - does_not_own: - - Umbanda doctrine as a whole - - authority to invent ritual speech - - generic Brazilian Portuguese - - speaker identity unless the speaker context explicitly supplies it -activation_requirements: - any_required: - - source context names an Umbanda scene, terreiro, practitioner, entity, ritual, or discourse community - - speaker profile explicitly owns an Umbanda-informed voice or memory - - authoring metadata requests this overlay for reviewed cultural grounding - never_activate_for: - - generic Brazilian flavor - - jokes, insults, mystic ambience, or unexplained exotic texture - - non-Umbanda religious scenes unless the source context makes a syncretic relation explicit -salience_axes: - sacred_address: - relevant_distinctions: - - ordinary dialogue - - respectful reference - - ritual address - - entity_or_guide_reference - lowering_questions: - - Is the line ordinary speech or ritualized speech? - - Does the speaker have standing to use sacred address? - - Should a term be left general until a human reviewer approves specificity? - house_specificity: - relevant_distinctions: - - practices and terms can vary by house, region, and lineage - - generic flattening can become false authority - lowering_questions: - - Is the output pretending one practice represents all Umbanda? - - Should the trace mark the choice as house-specific or uncertain? - syncretic_reference: - relevant_distinctions: - - Catholic, African, Indigenous, Spiritist, and local references may coexist differently by context - - entity names and roles are not interchangeable decoration - lowering_questions: - - Does the source actually contain the syncretic relation? - - Does the line preserve respect without overexplaining? - anti_caricature: - relevant_distinctions: - - religious register - - folkloric stereotype - - occult ambience - lowering_questions: - - Is the output using Umbanda as culture, faith, and practice rather than spooky texture? - - Would a practitioner recognize this as respectful enough for review? -forbidden_flattenings: - - Do not use Umbanda terms as generic magic flavor. - - Do not invent ritual formulas. - - Do not collapse Umbanda into Candomblé, Spiritism, Catholicism, or generic Afro-Brazilian religion. - - Do not imply all Brazilian Portuguese religious language is Umbanda-coded. - - Do not activate this overlay unless source context or authoring metadata explicitly asks for it. diff --git a/data/target-language-ontology/pt-BR.yaml b/data/target-language-ontology/pt-BR.yaml deleted file mode 100644 index 7fe8dbc..0000000 --- a/data/target-language-ontology/pt-BR.yaml +++ /dev/null @@ -1,74 +0,0 @@ -profile_id: weksa.target_cultural_ontology.pt-BR.v0 -language: - code: pt - locale: pt-BR - script: Latn -scope: > - Bounded Brazilian Portuguese dialogue lowering profile. This profile is the - base Brazilian Portuguese target; regional, class, religious, and community - registers should be added as explicit overlays rather than silently folded - into generic pt-BR. -authority: - owns: - - Brazilian Portuguese lexical preference - - treatment and address choices - - directness versus mitigation - - regional_or_cultural_overlay_selection - - idiom naturalness for reviewed fixture prose - does_not_own: - - source meaning - - Brazilian culture as a whole - - regional or religious-community authority without an explicit overlay - - target speaker identity -salience_axes: - treatment: - relevant_distinctions: - - voce - - tu_regionally_marked - - o_senhor_a_senhora - - name_or_title_address - lowering_questions: - - Is the relationship close, hostile, hierarchical, unknown, or sacred? - - Does `voce` preserve broad Brazilian naturalness better than `tu`? - - Is `tu` regionally grounded or just imported flavor? - directness: - relevant_distinctions: - - bare imperative - - softened imperative - - warning framed as consequence - - formal warning - lowering_questions: - - Does urgency justify blunt imperative force? - - Would mitigation make the warning dishonest? - lexical_locale: - relevant_distinctions: - - Brazilian Portuguese terms should be preferred in reviewed pt-BR fixtures - - European Portuguese defaults must be marked if intentionally used - lowering_questions: - - Is a term recognizably Brazilian Portuguese in this context? - - Is a literal technical word natural enough for dialogue? - regional_and_cultural_overlay: - relevant_distinctions: - - broad_brazilian_default - - regional_speech_pattern - - class_or_institutional_register - - religious_or_ritual_register - - community_specific_lexicon - lowering_questions: - - Does the source context justify an overlay? - - Is the overlay owned by a named profile? - - Would applying the overlay stereotype the speaker or setting? - metaphor: - relevant_distinctions: - - technical metaphors can preserve character ontology - - over-literal metaphors may sound translated rather than spoken - lowering_questions: - - Does the metaphor still sound like the speaker? - - Does it preserve the warning instead of becoming decorative? -forbidden_flattenings: - - Do not label output as Portuguese without a locale in reviewed fixtures. - - Do not default to European Portuguese wording when the target is pt-BR. - - Do not treat Brazilian Portuguese as one culture, region, class, or religion. - - Do not add regional or religious markers without a cited overlay profile and source-context reason. - - Do not soften a warning merely because directness feels impolite in English review. -overlay_catalog: data/target-language-ontology/pt-BR-overlays.yaml diff --git a/docs/multilingual-utterance-lowering.md b/docs/multilingual-utterance-lowering.md index fb1f22a..6d01bbb 100644 --- a/docs/multilingual-utterance-lowering.md +++ b/docs/multilingual-utterance-lowering.md @@ -76,8 +76,8 @@ English remains a lowering target, not the pivot language. Existing flavored English fixtures continue to be useful, but new multilingual fixtures should show English as one realization in a set. -The initial cultural ontology profile is -`data/target-language-ontology/en-US.yaml`. +The en-US choices are the `en-US` entries of `data/ontology/ontology.cc` +(model-drafted seeds; read with `weksa ontology dump`). ### Brazilian Portuguese @@ -94,16 +94,10 @@ The target lowerer should record: defaults - optional regional or cultural overlays when the source context earns them -The initial cultural ontology profile is -`data/target-language-ontology/pt-BR.yaml`. - -Umbanda-related scenes, speakers, ritual contexts, or referents may add the -`data/target-language-ontology/pt-BR-umbanda.yaml` overlay. That overlay must -not activate for generic Brazilian flavor. - -Regional or cultural variants should be selected through the overlay catalog at -`data/target-language-ontology/pt-BR-overlays.yaml`. Planned overlay slots are -not active profiles until reviewed examples and source context exist. +No pt-BR ontology entry exists yet; the cut that adds pt-BR writes them to +`data/ontology/ontology.cc`. Umbanda-related scenes, speakers, ritual contexts, +or referents may later earn a regional or cultural variant, which must not +activate for generic Brazilian flavor. ### Japanese @@ -119,8 +113,8 @@ The target lowerer should record: - whether subject omission preserves or harms clarity - whether katakana, kanji, kana, or mixed script choices carry useful pressure -The initial cultural ontology profile is -`data/target-language-ontology/ja-JP.yaml`. +The ja-JP choices are the `ja-JP` entries of `data/ontology/ontology.cc` +(model-drafted seeds; read with `weksa ontology dump`). ## Packet Shape diff --git a/examples/cultcache-lowering/README.md b/examples/cultcache-lowering/README.md index 4a786a0..ed4e037 100644 --- a/examples/cultcache-lowering/README.md +++ b/examples/cultcache-lowering/README.md @@ -1,11 +1,8 @@ # CultCache Lowering Examples -These examples lower interlingua packets through CultCache cultural ontology -profiles rather than the older YAML-only target-language profiles. - -The starter database is: - -- `.weksa/cultural-ontology/starter-targets.cc` +These examples lower interlingua packets for separate target languages. The +language ontology that owns en-US and ja-JP choices is `data/ontology/ontology.cc` +(`weksa ontology dump`); its entries are model-drafted seeds. Each target file is produced as a separate agent run so differences in target ontology remain inspectable instead of being smoothed into one multilingual diff --git a/examples/cultcache-lowering/nibu-proof-001/README.md b/examples/cultcache-lowering/nibu-proof-001/README.md index 4bb85be..67661ca 100644 --- a/examples/cultcache-lowering/nibu-proof-001/README.md +++ b/examples/cultcache-lowering/nibu-proof-001/README.md @@ -8,10 +8,6 @@ Prompt: - `prompts/nibu-cultcache-target-lowering.md` -CultCache profile store: - -- `.weksa/cultural-ontology/starter-targets.cc` - Expected target outputs: - `pt-BR-vanilla-brazilian.yaml` diff --git a/examples/cultcache-lowering/nibu-proof-001/en-transatlantic.yaml b/examples/cultcache-lowering/nibu-proof-001/en-transatlantic.yaml index 8d4667e..3484adf 100644 --- a/examples/cultcache-lowering/nibu-proof-001/en-transatlantic.yaml +++ b/examples/cultcache-lowering/nibu-proof-001/en-transatlantic.yaml @@ -1,7 +1,6 @@ schema_version: weksa.utterance_lowering.agent_run.v0 source_packet_id: nibu-proof-001 source_packet_ref: examples/english-lowering/nibu-proof-001/interlingua.yaml -target_profile_ref: .weksa/cultural-ontology/starter-targets.cc target_profile_id: weksa.cultural_ontology.en.transatlantic.v0 target_agent_id: nibu realization: @@ -11,8 +10,6 @@ realization: locale: en-001 script: Latn register: cultivated transatlantic English; cross-Atlantic intelligibility; measured technical warning - cultural_ontology_refs: - - .weksa/cultural-ontology/starter-targets.cc cultural_ontology_profile_ids: - weksa.cultural_ontology.en.transatlantic.v0 outputs: diff --git a/examples/cultcache-lowering/nibu-proof-001/ja-JP-kanto-contemporary.yaml b/examples/cultcache-lowering/nibu-proof-001/ja-JP-kanto-contemporary.yaml index 10a706e..4e88905 100644 --- a/examples/cultcache-lowering/nibu-proof-001/ja-JP-kanto-contemporary.yaml +++ b/examples/cultcache-lowering/nibu-proof-001/ja-JP-kanto-contemporary.yaml @@ -1,7 +1,6 @@ schema_version: weksa.utterance_lowering.agent_run.v0 source_packet_id: nibu-proof-001 source_packet_ref: examples/english-lowering/nibu-proof-001/interlingua.yaml -target_profile_ref: .weksa/cultural-ontology/starter-targets.cc target_profile_id: weksa.cultural_ontology.ja-JP.kanto.contemporary.v0 target_agent_id: nibu realization: @@ -11,8 +10,6 @@ realization: locale: ja-JP script: Jpan register: contemporary Kanto metropolitan clipped hazard warning - cultural_ontology_refs: - - .weksa/cultural-ontology/starter-targets.cc cultural_ontology_profile_ids: - weksa.cultural_ontology.ja-JP.kanto.contemporary.v0 outputs: diff --git a/examples/cultcache-lowering/nibu-proof-001/pt-BR-vanilla-brazilian.yaml b/examples/cultcache-lowering/nibu-proof-001/pt-BR-vanilla-brazilian.yaml index 7c0788f..bc05339 100644 --- a/examples/cultcache-lowering/nibu-proof-001/pt-BR-vanilla-brazilian.yaml +++ b/examples/cultcache-lowering/nibu-proof-001/pt-BR-vanilla-brazilian.yaml @@ -1,7 +1,6 @@ schema_version: weksa.utterance_lowering.agent_run.v0 source_packet_id: nibu-proof-001 source_packet_ref: examples/english-lowering/nibu-proof-001/interlingua.yaml -target_profile_ref: .weksa/cultural-ontology/starter-targets.cc target_profile_id: weksa.cultural_ontology.pt-BR.vanilla_brazilian.v0 target_agent_id: nibu realization: @@ -11,8 +10,6 @@ realization: locale: pt-BR script: Latn register: casual_clear - cultural_ontology_refs: - - .weksa/cultural-ontology/starter-targets.cc cultural_ontology_profile_ids: - weksa.cultural_ontology.pt-BR.vanilla_brazilian.v0 outputs: diff --git a/examples/multilingual-lowering/nibu-proof-001/realizations.yaml b/examples/multilingual-lowering/nibu-proof-001/realizations.yaml index 7ac410d..e8c8080 100644 --- a/examples/multilingual-lowering/nibu-proof-001/realizations.yaml +++ b/examples/multilingual-lowering/nibu-proof-001/realizations.yaml @@ -22,7 +22,7 @@ realizations: script: Latn register: sharp technical casual cultural_ontology_refs: - - data/target-language-ontology/en-US.yaml + - data/ontology/ontology.cc outputs: visible_action: The cockpit lights snap from amber to surgical white around the damaged control. spoken_text: "Take your hand off that control unless you want your nervous system to become my least useful circuit diagram." @@ -52,8 +52,6 @@ realizations: locale: pt-BR script: Latn register: direct technical casual - cultural_ontology_refs: - - data/target-language-ontology/pt-BR.yaml outputs: visible_action: As luzes do cockpit passam de âmbar para branco cirúrgico ao redor do controle danificado. spoken_text: "Tira a mão desse controle, a não ser que você queira transformar o seu sistema nervoso no meu diagrama de circuitos menos útil." @@ -90,7 +88,7 @@ realizations: script: Jpan register: sharp technical plain cultural_ontology_refs: - - data/target-language-ontology/ja-JP.yaml + - data/ontology/ontology.cc outputs: visible_action: 損傷した制御盤の周囲で、操縦室の灯りが琥珀色から外科灯のような白へ切り替わる。 spoken_text: "その制御盤から手を離して。神経系を、私のいちばん役に立たない回路図にしたくないなら。" diff --git a/prompts/nibu-cultcache-target-critic.md b/prompts/nibu-cultcache-target-critic.md index c339739..698d38b 100644 --- a/prompts/nibu-cultcache-target-critic.md +++ b/prompts/nibu-cultcache-target-critic.md @@ -10,8 +10,6 @@ You are reviewing one target lowering produced from the Nibu interlingua packet. `examples/english-lowering/nibu-proof-001/projected-context.yaml` - Lowering prompt: `prompts/nibu-cultcache-target-lowering.md` -- CultCache profile store: - `.weksa/cultural-ontology/starter-targets.cc` The source meaning is: diff --git a/prompts/nibu-cultcache-target-lowering.md b/prompts/nibu-cultcache-target-lowering.md index d044169..512d257 100644 --- a/prompts/nibu-cultcache-target-lowering.md +++ b/prompts/nibu-cultcache-target-lowering.md @@ -24,20 +24,10 @@ text. Lower from the interlingua packet and projected context. ## Cultural Ontology Authority -Use the CultCache store: - -- `.weksa/cultural-ontology/starter-targets.cc` - -It contains: - -- `weksa.cultural_ontology.pt-BR.vanilla_brazilian.v0` -- `weksa.cultural_ontology.en.transatlantic.v0` -- `weksa.cultural_ontology.ja-JP.kanto.contemporary.v0` - -Qdrant-style retrieval and old YAML profiles may be useful context, but the -CultCache profile named in your task is the target authority. Treat the target -profile as draft guarded typed state: preserve its activation gates, forbidden -flattenings, and nested linguistic affordance feature IDs in your trace. +The language ontology is `data/ontology/ontology.cc` (`weksa ontology dump`). +It holds model-drafted seed entries for en-US and ja-JP only; there is no +pt-BR entry yet. Treat an entry as a draft: say in your trace which entries you +used, and when no entry covers the target, say so rather than inventing one. ## Output Contract @@ -50,8 +40,6 @@ The file must use this shape: schema_version: weksa.utterance_lowering.agent_run.v0 source_packet_id: nibu-proof-001 source_packet_ref: examples/english-lowering/nibu-proof-001/interlingua.yaml -target_profile_ref: .weksa/cultural-ontology/starter-targets.cc -target_profile_id: target_agent_id: nibu realization: realization_id: @@ -60,10 +48,6 @@ realization: locale: script: register: - cultural_ontology_refs: - - .weksa/cultural-ontology/starter-targets.cc - cultural_ontology_profile_ids: - - outputs: visible_action: spoken_text: diff --git a/schemas/README.md b/schemas/README.md index 6de8179..7e0350a 100644 --- a/schemas/README.md +++ b/schemas/README.md @@ -23,9 +23,6 @@ them. - [utterance-lowering-packet.md](./utterance-lowering-packet.md): shared packet contract for lowering interlingua and projected speaker context into one or more target-language utterance realizations. -- [target-language-cultural-ontology.md](./target-language-cultural-ontology.md): - contract for the address, politeness, register, idiom, metaphor, script, and - forbidden-flattening profiles consumed by target lowerers. - [cultural-ontology-profile.md](./cultural-ontology-profile.md): nested CultCache profile contract for cultural ontology, including typed salience axes, linguistic affordance feature records, evidence, activation gates, and diff --git a/schemas/cultural-ontology-profile.md b/schemas/cultural-ontology-profile.md index 84b1ed3..f805119 100644 --- a/schemas/cultural-ontology-profile.md +++ b/schemas/cultural-ontology-profile.md @@ -5,8 +5,8 @@ This is the human-facing schema receipt for reviewed cultural ontology used during utterance lowering. Executable schema code does not exist yet. When it does, it must reconcile with -this receipt, the meta-analysis paper, and the profiles under -`data/target-language-ontology/`. +this receipt, the meta-analysis paper, and the language ontology in +`data/ontology/ontology.cc`. ## Authority diff --git a/schemas/target-language-cultural-ontology.md b/schemas/target-language-cultural-ontology.md deleted file mode 100644 index ef34301..0000000 --- a/schemas/target-language-cultural-ontology.md +++ /dev/null @@ -1,81 +0,0 @@ -# Target-Language Cultural Ontology Contract - -This is the human-facing schema receipt for target-language cultural ontology -profiles consumed by Weksa utterance lowering. - -Executable schema code does not exist yet. When it does, it must reconcile with -this document and the profiles under `data/target-language-ontology/`. - -## Authority - -A target-language cultural ontology profile owns the realization distinctions -that must be inspected for a human target language before surface text is -chosen. - -It owns: - -- address and treatment distinctions -- politeness and register pressure -- social stance and directness defaults -- idiom, metaphor, and lexical-locale risks -- script or orthographic choices that carry meaning -- forbidden flattenings for reviewed output - -It does not own: - -- source meaning -- speaker identity -- private state -- exhaustive grammar -- whole-culture description -- final wording without an interlingua packet - -## Required Fields - -- `profile_id`: stable profile identifier. -- `language`: target code, locale, and script. -- `scope`: bounded statement of what the profile is and is not. -- `authority`: `owns` and `does_not_own` lists. -- `salience_axes`: named axes the lowerer must inspect. -- `linguistic_affordances`: optional nested typed feature records, following - `cultural-ontology-profile.md`, when the profile owns dialect, register, - phonological, lexical, discourse, orthographic, or code-switching pressure. -- `forbidden_flattenings`: mistakes the target lowerer must avoid. - -## Salience Axes - -Each salience axis should name: - -- `relevant_distinctions`: choices the target language or locale makes visible. -- `lowering_questions`: questions reviewers and lowerers should answer before - accepting an output. - -Examples: - -- English directness and sarcasm. -- Brazilian Portuguese treatment choice, lexical locale, and regional or - religious-cultural overlays. -- Japanese politeness, ellipsis, and sentence-final force. - -## Fixture Contract - -Reviewed multilingual fixtures should cite the profile used by each -realization: - -```yaml -target_language: - code: pt - locale: pt-BR - script: Latn - register: direct technical casual - cultural_ontology_refs: - - data/target-language-ontology/pt-BR.yaml -``` - -The realization trace should name the cultural ontology axes that shaped the -line. - -For dialectal, regional, historical, ritual, and contact-language profiles, use -the nested `weksa.cultural_ontology_profile.v0` contract in -`cultural-ontology-profile.md`. Flat string lists are only summaries; typed -feature records own accepted affordance detail. -- 2.47.3 From fc99652f1307b7a049b94efab997122b4c498e15 Mon Sep 17 00:00:00 2001 From: Weksa Date: Thu, 12 Nov 2026 15:29:11 +0000 Subject: [PATCH 2/5] language-ontology-seed fix s1: rebuild the seed as 9+9 entries that read only stance and discourse and make true claims; pin the generator exactly; drop deleted store paths from the tex and schema; README says nothing grows the seed yet ontology.cc is rebuilt from nothing (the branch is unmerged); no entry carries over unchanged in number or text. Co-Authored-By: Claude Sonnet 5.5 --- README.md | 3 ++- crates/weksa/tests/original_corpus.rs | 6 +++++- data/ontology/ontology.cc | Bin 9181 -> 6557 bytes docs/cultural-ontology-meta-analysis.tex | 13 +++++-------- schemas/cultural-ontology-profile.md | 13 +++++-------- 5 files changed, 17 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index ef509cb..b9f81e4 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,8 @@ target-specific English receipt. The language ontology is `data/ontology/ontology.cc` (read it with `weksa ontology dump`): per language, the address, register, politeness and script choices a lowerer makes for a speaker in a stance. Its en-US and ja-JP entries are -model-drafted seeds, never Test evidence; accepted rounds grow them. +model-drafted seeds, never Test evidence. Nothing yet grows them from accepted +rounds; until that mint exists they change only by a new `weksa ontology admit`. For the first AquaSynth speech-training handoff, see [Tiny PanPhon v0.1 Speech Curriculum](./examples/speech-training/tiny-panphon-v0.1/README.md). diff --git a/crates/weksa/tests/original_corpus.rs b/crates/weksa/tests/original_corpus.rs index 4e1dce1..2a48196 100644 --- a/crates/weksa/tests/original_corpus.rs +++ b/crates/weksa/tests/original_corpus.rs @@ -270,7 +270,11 @@ fn committed_ontology_is_model_drafted_and_reads_every_inventory() { match &e.annotator { Annotator::Model { family, generator } => { assert_eq!(*family, ModelFamily::Anthropic, "{}", e.key()); - assert!(generator.contains("claude"), "{}", e.key()); + assert_eq!( + generator, "claude-sonnet-5-5 (Weksa Hands, model-drafted seed ontology)", + "{}", + e.key() + ); } other => panic!("{} is {other:?}", e.key()), } diff --git a/data/ontology/ontology.cc b/data/ontology/ontology.cc index 94eeb19bb785bae535198a500c282f330f069d9b..b43ca6dad1290efd5cf090297f772219233c90f9 100644 GIT binary patch delta 1495 zcmYjROKenC7|t#9J;l;eX)8ldF^!#MW(chjGIi4gm0B@s)%Zxn(|ga%J#y!q@tixY z-AK;_AF-mezXpg9NJwjJpe#xg7Cz#_l?yg*jPVf;)2KUE?$mQ1GsEuQ`~UZUe2@Rv zr!I}3y=(O>SI64Nj^xG;zxIRG3CQYedUqO1)_|3RGuDyGG@5s@Pv(d~zDv+N7Y=0w zBzfK^Od>9jbg?Lz=j`&${F4ky}E@WtL%p;NWxo;<($7S25VoMnA=luDbIg(PQxzC1&i!Q3X9JZ0EJc`k~`#zIgcgBP11 zY~aVfPyMn(&}hj3683S3EFUalSw@5f?8!7LVc}ETGk-FYMhiTRPGT=Lfozv^Neqg} z=ctH%+YR~jC?k)=UDAkgA3ebe9+fU~s35k_h?LotEv+tT^}bf?x&m5V(dxQhtlVmR zRU2A;snrFomR9xm(J1}$~G?+17M;wG@4;JjWU9#5S0keVd~*ok7QS_RhK^3 z>Qne_aILPu{+NlKhVRD*Uw^@HCk&{54wachgi)DKiiQ@roj{L8o(PC_1TTfSMNHMe z&Mt3lSJq7rt!@M$snZ6b0EplB9jb$H7zUEZtRl=NQ*SU#gK`U;BL`1}6{9T-7bWgd zBL@S#A>Z@(ybR;QjEH!?&RTZ)+rQL%y7IBE7*v;ZrJ~ij;8m@|n*%<)vcI9&o_O2) z?U6`5e~cDfWE0^Bn=j-H%n|NbO7oG{_4)++8y}uK_?XQnFEap+v5rA_n~WQrYuT=N@6f(aBJ_#!C14h lYC!1P8+TL{1?BO8~B~a z|NVuBPhFxXsfn<%XR0>%PrJN!&DxEX@$t&|+TG(DYUAr`>(>43pCjz_Idj#>$c4?m za%2)KalChY!gXVz6w{tyfv>a(Ma*137LE?uY}ON@IiwsMU?HB>oZ8yNnnFa`p-2eF zW8Bfq4>f*`F(nyivpf#{u)&n(ZB=;BLl^I2@q8kb?jN=9t8-VkiuM?5%cRP-nZJi= z$y%b?Ik#Q9BIwT7dCL#l7bZgO#WM1p3k~|4IV#@!ffMk=6%{4JQ0U5r$_Dnmy;Og; z72m4HSc`5^absTB!evU}N6w7Zr`|3?yJlbsmcjO07TYh6ENl}8eMg3KhtH}&>iH?n zLq{ys1=mR|F52I<@r`FSp1!j%p|=UH^uO-e*V{KyuLE`Pq(<1afM#9BEgk@?1|bo% zSzmh$ch@ms#)){Mx*r3@tT2Quz|etUek&qO{28IDbJq-{nm6&eX81k;EStRj#E>y9 z#n*3GOdl%nbtP0EU5e_SDG#KrWjIv;3b--G0y$f0iZ&y}JmEHkJC=dVnet?;8IO!y zFkt8bcHt+7#8Pa5fWSq@%&c{KO^jA-THv=Z>QPUE zfYGv5K=u8-+=qP30@NqiPh|ojat*}8X6m{!!0xudezm~V6DzF$HA|q)E?Cs&Tr)1@ znqkR3KcTlvD8|U~-u|Zqx1s<-Ge^XlqZI8Ln~r4@%AIjJLl|g>p=i+;d%J_602h!J9*FV_M4985=8%EKUPV%|S+Y=S&@oYLM#R%rn8}}@^C_|o=%^V>U1F_ID&(pffeAFVjJS+A0*7 zDg&J{ML~sPYL`?)e1_sE3D*UymaQ^;U^*}S$;It*MpW63p~JtS4EzsU`0wk(ztT#u za28G8{%01^OF|c55XMD9krN#sn9wts-Mvb2bkwQTjAo&v|&i5GB?-q8y@_` zB!Ke6CaDW&)4twhfb;mTc${HLI3^@fPTLG5R$UD3;TKXblV5{RS5M^+_wY zb?ygMMr@`2XwA!z@qDZdo|`OLA1H;V6@fP%w^a^vK69{y`p#gk=SDxNgE*Sd$>2v0)PX|LU?CL+aS)QImgGU>ur=g`UY2{N? zfdr{X57Qsfsbelw6#X9A05R4LV~*}&$n5UiJ4RqMHs?W^~B%O z&e2a^Kb>}7NIS2lo$G1mwe(Q;TH5(z+BumX>fCtwy|iz}@%JSw>`0E|n3D zSeWlTBf4FQkrDmSrWplzGdD%?gpDi=qahm-Arei`i@9EP?t`1B{t6^-oyX5^+C6F@ zJ(G5U<*>mk6$bs-f>#WK2Aki-h;4j{2&^!Z53p;`<#vtILhh0Z)EK$n0F!bZIa1%E z<@UEy_d_T(@(mhNU`Dc0TVgUXwaBd;wMfj@hRH9codsfc=WS5>KZoY=Z^%q8HDG_! z7UTa4l6Ef!NyYRi%jrlz5nu4d+z67AM@kZ^Ekd`b**F?XmxJGF=SbRl6EJ@Khf6m; zI++7|Y$*KBCc8`=N+J4?MYI@M%eFN2>pNQN08a9fdwK1lxT*1~++{hgInBIYY;=TB+p_oTAJ zP>CXnWupp%{bE!xSR$66k3YOKg(%F&`#*C&&c-=MB5cLP2AEL;&&LEpQE0|tjK(%` z#u?;6B#fVjO2vNNchCYanR*Um$Ts*F(QNXTgq4f2 zD~fhVsJEqr{Zk3%4Ihw_@gv{5Zo*DToO0*%|99%k+xx6j;|OOWqV{!D;kc;N&vkWO+X>5nj3c?js7%*JV)G%&t< zqz5RI$gyuR Date: Thu, 12 Nov 2026 15:39:48 +0000 Subject: [PATCH 3/5] language-ontology-seed fix s2: neutral ja-JP:1 (no politeness per line), entry text defects, drafter residue out of the seed and score vectors, front-door and schema/tex prose ontology.cc regenerated by weksa ontology admit, 9+9 entries, same generator string. Co-Authored-By: Claude Sonnet 5.5 --- README.md | 7 ++++--- crates/weksa/tests/score.rs | 16 ++++++++-------- data/ontology/ontology.cc | Bin 6557 -> 6574 bytes docs/cultural-ontology-meta-analysis.tex | 12 ++++++------ schemas/cultural-ontology-profile.md | 2 +- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index b9f81e4..f84b165 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ measured. - [Lowering target](./docs/targets/interlingua-lowering.md) and [its map](./docs/targets/interlingua-lowering-map.md): the design, scoring and cut sequence. -- `data/`: the cultural ontology and target-language profile data. +- `data/`: the committed stores (corpora, entities, inventory, language ontology) and research data; there are no target-language profiles. - `settings/`: setting-specific proving grounds for language projects. **Live versus planned.** Live: docs, fixtures, examples, ontology data and the @@ -83,8 +83,9 @@ English, Brazilian Portuguese, Japanese, and later target-language dialogue. target-specific English receipt. The language ontology is `data/ontology/ontology.cc` (read it with -`weksa ontology dump`): per language, the address, register, politeness and script -choices a lowerer makes for a speaker in a stance. Its en-US and ja-JP entries are +`weksa ontology dump`): per language, the lexicon, grammar and discourse choices a lowerer +reads for a stance and discourse packet. The seed sets no address or politeness level; those +belong to the speaker and scene state. Its en-US and ja-JP entries are model-drafted seeds, never Test evidence. Nothing yet grows them from accepted rounds; until that mint exists they change only by a new `weksa ontology admit`. diff --git a/crates/weksa/tests/score.rs b/crates/weksa/tests/score.rs index cd23eb9..8d2efce 100644 --- a/crates/weksa/tests/score.rs +++ b/crates/weksa/tests/score.rs @@ -45,8 +45,8 @@ fn chrf_matches_sacrebleu_vectors() { #[test] fn chrf_argument_order() { - let short = "mind the hatch"; - let long = "mind the hatch before the storm arrives tonight"; + let short = "shut the gate"; + let long = "shut the gate before the storm arrives tonight"; let (as_hypothesis, as_reference) = (chrf(short, long), chrf(long, short)); assert!( as_hypothesis < as_reference - 1.0, @@ -104,8 +104,8 @@ fn chrf_whitespace_parity() { #[test] fn scorer_argument_order() { - let short = "mind the hatch"; - let long = "mind the hatch before the storm arrives tonight"; + let short = "shut the gate"; + let long = "shut the gate before the storm arrives tonight"; let scorer = Scorer::new(Bag); let got = score_one(&scorer, long, short); assert_eq!(got.chrf, chrf(short, long)); @@ -156,7 +156,7 @@ impl Embedder for Fixed { fn scorer_refuses_bad_vectors() { let run = |vectors: Vec>| { Scorer::new(Fixed(vectors)).score(&[ScoreInput { - reference: "mind the hatch", + reference: "shut the gate", output: "mind the door", }]) }; @@ -671,16 +671,16 @@ fn every_script_scores_a_near_miss_as_sacrebleu_does() { #[test] fn coverage_splits_at_any_non_word_character() { let items = [ - validation("item:v:1", "mind the hatch before the storm"), + validation("item:v:1", "shut the gate before the storm"), train("item:t:1", UNRELATED), ]; - let want = read(&["mind the hatch"], &items); + let want = read(&["shut the gate"], &items); assert_eq!(want, [(5, 3), (5, 2), (4, 1)]); for joiner in [ ":", "\u{b7}", "'", "\u{2019}", "\u{ff3f}", "-", "/", "\u{2014}", "|", "+", "\u{ff1a}", "\u{30fb}", ] { - let glued = format!("mind{joiner}the{joiner}hatch"); + let glued = format!("shut{joiner}the{joiner}gate"); assert_eq!(read(&[&glued], &items), want, "{joiner:?}"); } // a mark, a joiner or a digit is part of its word, not a break diff --git a/data/ontology/ontology.cc b/data/ontology/ontology.cc index b43ca6dad1290efd5cf090297f772219233c90f9..4c610995f6dc83367e12a332732f550eab1a9f8a 100644 GIT binary patch delta 749 zcmZWnO=uHA7-f_G5T#8TjH%$^6A@dRtwJuf6-o}0ViAk6ARY?i?w4fDW+u)|Bk^M6 z!Gj1E2c?3+9t@=iwVKjXz3I7l63+`>dMMr%oF>`k;AMF`^SyoFdv6=*59zI>6-i&7 zPG7q7%^K2Ry-e;bct|9I<8kv;MFf{~F{w$ks8_-RdMb48bcgYEf31nkUd)B8jjSN$ zG7+mkm-NHXdA%K)O72`If)en!Q$qK@4^14&F6!;Dw3NOdJFDmWq8T8}g^EWg1E~aO z1*oF9D`$YXE-((H!aZK70T)bUV)LxiXSQHrW%7pH+CNW_u^QV@t`LrWPOK%_*WWC}{e z;F6q#TSY3tTpPATB@c5jF;Js|Qi6w7^k&)_8?9_x3`&R<3DgYdxp2^^0@Ajd_W0zB zkAA)3*PrOVHullI7wtTey8imZ6EVq0r7f`lOvOI!2$zCD@; zV%Q5l2P(nP1(kLE)-IpeI)1~nY>=RV?WX`qow8b|nkrbJK>)LnU~rE|X4;D#QPcWq zkF;EE^_EUMFc%QYKq|ovw}E0-I>0zcURB6Yn2~0>x$x1eq139k+1HW$@lfAYD}~{% z9r%6srLO%cJ(SxhjL!&T+cAxJ+j>W+{+Vl~pME7pT7kn_u{cS!N#HOp#E zQ|aoeGJJ0GVfk zGCt>sP}B_!lc8gBa-dFv@hNb9&ZP;}?21E3l6CUz3eK@wK&1~J73eC4 zQl5PNIf+-2_)!wSPZo6&H@z!J~(b1(%zDVb-y20LF@pI8YQ^{~r97ws^PyN|xro17QYf;X($#3|-IQ T-r;8{)Nc;9dW=f_*Czh~lL+~Z diff --git a/docs/cultural-ontology-meta-analysis.tex b/docs/cultural-ontology-meta-analysis.tex index ef65805..7dcd72f 100644 --- a/docs/cultural-ontology-meta-analysis.tex +++ b/docs/cultural-ontology-meta-analysis.tex @@ -369,6 +369,12 @@ target. A Qdrant nearest neighbor is a witness candidate, not a cultural fact. \section{Proposed CultCache State Shape} +No profile store exists. The per-language lowering choices live in +\texttt{data/ontology/ontology.cc}; the typed profiles once stored under +\texttt{.weksa/cultural-ontology/} and the \texttt{weksa.target\_cultural\_ontology.*} +base profiles named in the listing and sketches below are deleted. Community and dialect +profiles belong to follow-up \texttt{language-ontology-communities}. + The following shape should become a typed CultCache document family: \texttt{weksa.cultural\_ontology\_profile.v0}. It can represent base languages, dialects, sociolects, regional overlays, ritual registers, and communities of @@ -612,12 +618,6 @@ feature requires speaker authority, whether it can be rendered in text or only speech synthesis, which source hashes support it, and what must be reported if the feature is rejected. -No profile store exists. The per-language lowering choices live in -\texttt{data/ontology/ontology.cc}; the typed profiles once stored under -\texttt{.weksa/cultural-ontology/} and the \texttt{weksa.target\_cultural\_ontology.*} -base profiles named in the sketches below are deleted. Community and dialect -profiles belong to follow-up \texttt{language-ontology-communities}. - \section{Dialect Profile Sketches} \subsection{AAVE/AAL} diff --git a/schemas/cultural-ontology-profile.md b/schemas/cultural-ontology-profile.md index 07fdb53..dc26099 100644 --- a/schemas/cultural-ontology-profile.md +++ b/schemas/cultural-ontology-profile.md @@ -268,7 +268,7 @@ cultural_ontology_trace: No profile store exists. The per-language lowering choices live in `data/ontology/ontology.cc` (`weksa ontology dump`); the typed profiles that once sat under `.weksa/cultural-ontology/`, and the `weksa.target_cultural_ontology.*` -base profiles named in the examples below, are deleted. Community and dialect +base profiles, whose names an example below still carries, are deleted. Community and dialect profiles are owned by follow-up `language-ontology-communities`. Qdrant may store chunks, vectors, and payload filters for retrieval. It does -- 2.47.3 From dc5e649851d2ead5c7688eed6d5971c70aebcdc8 Mon Sep 17 00:00:00 2001 From: Weksa Date: Thu, 12 Nov 2026 15:44:08 +0000 Subject: [PATCH 4/5] language-ontology-seed fix s3: ja-JP:3 and :6 name no politeness level; README claim made true; schema clause dropped Co-Authored-By: Claude Sonnet 5.5 --- README.md | 2 +- data/ontology/ontology.cc | Bin 6574 -> 6647 bytes schemas/cultural-ontology-profile.md | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f84b165..61456bf 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ target-specific English receipt. The language ontology is `data/ontology/ontology.cc` (read it with `weksa ontology dump`): per language, the lexicon, grammar and discourse choices a lowerer -reads for a stance and discourse packet. The seed sets no address or politeness level; those +reads for a stance and discourse packet. No entry fixes an address or politeness level; those belong to the speaker and scene state. Its en-US and ja-JP entries are model-drafted seeds, never Test evidence. Nothing yet grows them from accepted rounds; until that mint exists they change only by a new `weksa ontology admit`. diff --git a/data/ontology/ontology.cc b/data/ontology/ontology.cc index 4c610995f6dc83367e12a332732f550eab1a9f8a..b6cc327d1410de006ebfaf698fad80a95ac884d6 100644 GIT binary patch delta 413 zcmZ2y{M~qiI3ufxv6ZReW*J6j7&C=Q0mkfP?uIcXS^Z(mTsAoKAiFnARFJa>#_Zs7 zgfY)?2g8_ZyrnSa0zL~yPO!yMM;SLwe#l?UcxW;si?VrgPG&(tYKlT}YFctBA<#`H4sp*-;C8<;4n_C6hl0tcUu0iJ%|MQQw7f5sosQ zoGaoXAMKHuo}rMOT2zvlnO9P21$0bWPGX5dN@{XWVo~Dc%OdIq8hNQY3YGbq3P5)# zP_15xN-91rk=-*>z^*}0yFkKZk+kJp=mOQ=t`*N+eCw4mh+1D!#_Zs7 zgfY)?2g8_ZyrnSa0zL~yPO!yMM;Uu2KjbfFoHLn`McKL_CowZmAvG^0GcUc^S|L#( zDX}P3p`a)~BQq(pBr`uxK|?n$QBxtmNCBcWGq)hMD6u57EOqjF0o%!9g6p9kIwj}_ zvrSewmr(#_o6wA)Rgp8y@`_pMOQ*C_%9j+vmi{oAI5wo!OI8$n0IAo diff --git a/schemas/cultural-ontology-profile.md b/schemas/cultural-ontology-profile.md index dc26099..f027f8e 100644 --- a/schemas/cultural-ontology-profile.md +++ b/schemas/cultural-ontology-profile.md @@ -268,7 +268,7 @@ cultural_ontology_trace: No profile store exists. The per-language lowering choices live in `data/ontology/ontology.cc` (`weksa ontology dump`); the typed profiles that once sat under `.weksa/cultural-ontology/`, and the `weksa.target_cultural_ontology.*` -base profiles, whose names an example below still carries, are deleted. Community and dialect +base profiles are deleted. Community and dialect profiles are owned by follow-up `language-ontology-communities`. Qdrant may store chunks, vectors, and payload filters for retrieval. It does -- 2.47.3 From e8ba0f2eae27bc237c10fd325b728002817d298e Mon Sep 17 00:00:00 2001 From: Weksa Date: Thu, 12 Nov 2026 16:09:36 +0000 Subject: [PATCH 5/5] language-ontology-seed fix s4: ja-JP:6 bans ne-softening and hedges only; front door and lowering docs stop naming a target-language profile as register owner Co-Authored-By: Claude Sonnet 5.5 --- README.md | 2 +- data/ontology/ontology.cc | Bin 6647 -> 6632 bytes docs/multilingual-utterance-lowering.md | 2 +- docs/targets/interlingua-lowering.md | 4 ++-- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 61456bf..bfa07f2 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ culture, and constraint, and the planned lowerer that turns an agent's meaning packet into the reader's display language. **What is valuable here.** The interlingua standard and the lowering design: a -meaning packet owns what is meant, a target-language profile owns register, +meaning packet owns what is meant, speaker and scene state (planned; not yet live) own register, address and politeness, and a lowerer owns surface text and leaves a trace. **The problem it solves.** An agent's outward speech today is one English diff --git a/data/ontology/ontology.cc b/data/ontology/ontology.cc index b6cc327d1410de006ebfaf698fad80a95ac884d6..2f9cdf7af6d247d95ebed9420e16bc70bce0d5cb 100644 GIT binary patch delta 269 zcmexv{K9yHC?lJhm4T&|@n&g8CpbHqNgmGbVD5smC0PC7>>M@(`vAKaTwH*&5YBGr za)7hXatFcLs=Os|_Iy5bIQtI&b2$5?pf8*)Bb>u11aYTf)KNyY8B4Pgb-e;6pJ8`o z^qG7|#7H6|H6=Y&Au%sSAunH{I6tispw&t5C4e1Jt0CpbHqNgmGbVD5smC0PC7>>M@(`vAKaTwH*&5YBGr za)7hXatFcLs=Os|_Iy5bIQtI&b2$5?pf8*)Bb>u11aYTf)KNy$8B4Pgb-e;6pJ8`o zjGlZ)#7Mn3KdmG+FEcM)p&+rSBr`cDRY4;!RY##RUsEA5FGV3QUm+tkC4I7*=wXgR^f*@G$}ai~mgS diff --git a/docs/multilingual-utterance-lowering.md b/docs/multilingual-utterance-lowering.md index 6d01bbb..cc3daae 100644 --- a/docs/multilingual-utterance-lowering.md +++ b/docs/multilingual-utterance-lowering.md @@ -58,7 +58,7 @@ The utterance lowerer does not own: - rendered audio - phoneme parity or synth-control truth -The target-language cultural ontology profile owns: +The target-language cultural ontology profile was drafted to own the following; no such profile store exists now (address, politeness and register belong to speaker and scene state, and `data/ontology/ontology.cc` holds per-language lexicon, grammar and discourse choices): - address, politeness, register, and social stance distinctions - idiom and metaphor risks diff --git a/docs/targets/interlingua-lowering.md b/docs/targets/interlingua-lowering.md index 54bf512..a39963d 100644 --- a/docs/targets/interlingua-lowering.md +++ b/docs/targets/interlingua-lowering.md @@ -25,8 +25,8 @@ ground truth is Discord text, which can never feed this loop An agent's outward speech today is English text the model chose, so meaning, register and voice are fused in one string nobody can inspect or re-target. -Weksa's design already separates them: the packet owns meaning, the target -profile owns address, politeness and forbidden flattenings, the lowerer owns +Weksa's design already separates them: the packet owns meaning, speaker and scene state own address and politeness +(the language ontology holds only per-language lexicon, grammar and discourse choices), the lowerer owns surface text and a trace. The campaign makes that design real for a live reader, and gives Weksa's Persona a working body when her mind (`eureka-body:follow_up:weksa-mind`) wakes. -- 2.47.3