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 680b06c..0000000 Binary files a/.weksa/cultural-ontology/starter-targets.cc and /dev/null differ diff --git a/README.md b/README.md index 3133190..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 @@ -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 @@ -82,9 +82,12 @@ 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 lexicon, grammar and discourse choices a lowerer +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`. 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..2a48196 100644 --- a/crates/weksa/tests/original_corpus.rs +++ b/crates/weksa/tests/original_corpus.rs @@ -251,6 +251,73 @@ 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_eq!( + generator, "claude-sonnet-5-5 (Weksa Hands, model-drafted seed ontology)", + "{}", + 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/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 new file mode 100644 index 0000000..2f9cdf7 Binary files /dev/null and b/data/ontology/ontology.cc differ diff --git a/data/target-language-ontology/README.md b/data/target-language-ontology/README.md deleted file mode 100644 index 4ae5de7..0000000 --- a/data/target-language-ontology/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Target-Language Cultural Ontology Profiles - -These profiles describe culturally loaded realization choices for human target -languages used by Weksa utterance lowering. - -They are not whole-culture summaries. They are bounded lowering profiles: the -distinctions a target lowerer must inspect before producing dialogue. - -## Authority - -Target-language cultural ontology profiles own: - -- address and politeness distinctions -- register and social stance pressures -- agency, responsibility, and directness defaults -- idiom and metaphor risks -- script or orthographic choices that carry meaning -- forbidden flattenings that would make the output dishonest - -They do not own: - -- source meaning -- speaker-private state -- target-language grammar as a whole -- national or cultural stereotypes -- final wording without an interlingua packet - -## Current Profiles - -- [English, US fixture default](./en-US.yaml) -- [Brazilian Portuguese](./pt-BR.yaml) -- [Brazilian Portuguese overlay catalog](./pt-BR-overlays.yaml) -- [Brazilian Portuguese, Umbanda overlay](./pt-BR-umbanda.yaml) -- [Japanese](./ja-JP.yaml) - -Each multilingual lowering fixture should cite the profile or profile stack it -used so reviewers can tell which social and cultural distinctions were -considered. Regional and religious-cultural options are overlays on a base -language profile, not replacements for source meaning. diff --git a/data/target-language-ontology/en-US.yaml b/data/target-language-ontology/en-US.yaml deleted file mode 100644 index 628cd1f..0000000 --- a/data/target-language-ontology/en-US.yaml +++ /dev/null @@ -1,135 +0,0 @@ -profile_id: weksa.target_cultural_ontology.en-US.v0 -language: - code: en - locale: en-US - script: Latn -scope: > - 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/cultural-ontology-meta-analysis.tex b/docs/cultural-ontology-meta-analysis.tex index 6532952..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,15 +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. -Recommended CultCache paths: - -\begin{lstlisting}[basicstyle=\ttfamily\small] -.weksa/cultural-ontology/{profileId}.cc -.weksa/cultural-ontology/{baseProfileId}/overlays/{overlayId}.cc -.weksa/cultural-ontology/catalogs/{catalogId}.cc -.weksa/cultural-ontology/evidence-bundles/{bundleId}.cc -\end{lstlisting} - \section{Dialect Profile Sketches} \subsection{AAVE/AAL} diff --git a/docs/multilingual-utterance-lowering.md b/docs/multilingual-utterance-lowering.md index fb1f22a..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 @@ -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/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. 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..f027f8e 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 @@ -265,14 +265,11 @@ cultural_ontology_trace: ## Storage -Recommended CultCache paths: - -```text -.weksa/cultural-ontology/{profileId}.cc -.weksa/cultural-ontology/{baseProfileId}/overlays/{overlayId}.cc -.weksa/cultural-ontology/catalogs/{catalogId}.cc -.weksa/cultural-ontology/evidence-bundles/{bundleId}.cc -``` +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 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 not own profile acceptance, feature activation, or renderer 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.