delete-cultural-ontology: data/cultural-ontology deleted #66

Merged
weksa merged 2 commits from weksa-lowering/delete-cultural-ontology into main 2026-11-13 01:03:21 +00:00
10 changed files with 8 additions and 649 deletions

View file

@ -1,33 +0,0 @@
# Cultural Ontology Store
This directory holds draft Weksa cultural, subcultural, and source-referent
ontology profiles used for ontological lowering, syntax, grammar, discourse,
and surface-affordance selection.
Live pipeline shape:
1. Weksa stores reusable cultures, subcultures, and source referents here and
in semantic retrieval storage such as Qdrant.
2. A Persona state references the relevant culture stack.
3. The Persona produces interlingua intent from current state and situation.
4. Weksa lowers that interlingua through the referenced culture stack.
Persona state owns current intent, memory pressure, and relationship stance.
Cultural ontology owns reusable salience, affordances, and constraints. Qdrant
may retrieve candidates, but accepted ontology remains typed state.
## Directory Roles
- `cultures/`: culture or life-history profiles that can shape lowering when a
Persona explicitly references them.
- `referents/`: bounded source-text, mythic, literary, ritual, or historical
referents. These are not whole-culture profiles; they preserve reusable
role, salience, affordance, and forbidden-flattening pressure.
- `persona-stacks/`: named stacks that connect a Persona state surface to the
profiles Weksa should load for lowering.
Shared source-tradition profiles should be parent profiles for narrower named
figure profiles. For example, Norse-derived Personas such as Mimir, Huginn,
Sindri, Odin, Vili, Loki, and Brokkr should be able to reference the shared
Eddic source-tradition profile while figure-specific child profiles preserve
the exact episode and role constraints that make each voice distinct.

View file

@ -1,22 +0,0 @@
schema_version: weksa.cultural_ontology_catalog.v0
catalog_id: weksa.cultural_ontology.catalog.v0
status: draft
qdrant:
intended_collection: weksa_cultural_ontology_profiles
payload_keys:
- profile_id
- kind
- language_codes
- regions
- evidence_refs
- status
ownership_note: >
Qdrant owns retrieval over culture/subculture chunks. It does not own
accepted ontology, activation, or lowering authority.
profiles:
- profile_id: weksa.culture.western_europe_maritime_childhood.v0
path: data/cultural-ontology/cultures/western-europe-maritime-childhood.yaml
- profile_id: weksa.cultural_referent.old_norse_edda_source_tradition.v0
path: data/cultural-ontology/referents/old-norse-edda-source-tradition.yaml
- profile_id: weksa.cultural_referent.old_norse_edda_brokkr_skaldskaparmal.v0
path: data/cultural-ontology/referents/old-norse-edda-brokkr-skaldskaparmal.yaml

View file

@ -1,48 +0,0 @@
schema_version: weksa.cultural_ontology_profile.v0
profile_id: weksa.culture.western_europe_maritime_childhood.v0
kind: mobility_childhood
status: draft_guarded
community:
regions:
- France
- Spain
- Portugal
- coastal_western_europe
speech_community: >
Mobile childhood organized around sailing, ports, and cross-border Western
European movement. This profile is owner-attested and needs corroboration
before broader use.
activation:
allowed_when:
- persona_state_references_profile
- interlingua_mentions_childhood_origin_mobility_boats_or_home
forbidden_when:
- used_as_decorative_nautical_metaphor_without_context
salience_axes:
mobile_home:
axis_id: mobile_home
domain: identity_indexing
description: Home can be vessel, coast, port, family movement, and country sequence rather than one fixed town.
relevant_distinctions:
- distinction_id: vessel_as_childhood_home
label: Vessel as childhood home
meaning: A sailboat childhood makes movement and locality primary ontology fields.
lowering_questions:
- Does the line invoke home, travel, borders, coast, or rootedness?
required_when:
- source_mentions_childhood_or_home
forbidden_when:
- scene_has_no_mobility_or_home_salience
evidence_refs:
- owner:2026-06-10:sailboat_france_spain_portugal_until_6
linguistic_affordances:
grammar_features: []
phonology_features: []
lexicon_features: []
discourse_patterns: []
orthography_features: []
code_switching:
allowed: false
constraints:
- Do not infer French, Spanish, Portuguese, or Dutch fluency from movement alone.
patterns: []

View file

@ -1,21 +0,0 @@
schema_version: weksa.persona_cultural_stack_ref.v0
persona_id: brokkr
persona_state_ref: E:/Projects/Brokkr/.voidbot/state/brokkr.cc
status: draft_guarded
note: >
Brokkr's Persona state asks Weksa to lower speech through the Eddic Brokkr of
Skaldskaparmal. This stack names the reusable cultural referent profile that
should be loaded when Brokkr's interlingua or Persona state activates Edda
voice pressure.
culture_refs:
- profile_id: weksa.cultural_referent.old_norse_edda_source_tradition.v0
path: data/cultural-ontology/referents/old-norse-edda-source-tradition.yaml
relevance: >
Shared Eddic source-tradition constraints for Norse-derived Personas:
named role over archetype, obligation and consequence, knowledge with
cost, and translated-Edda plainness without fake archaism.
- profile_id: weksa.cultural_referent.old_norse_edda_brokkr_skaldskaparmal.v0
path: data/cultural-ontology/referents/old-norse-edda-brokkr-skaldskaparmal.yaml
relevance: >
Source-role referent for Brokkr as bellows-keeper, artifact witness,
flaw-honest presenter, compact claimant, and contract enforcer.

View file

@ -1,255 +0,0 @@
schema_version: weksa.cultural_ontology_profile.v0
profile_id: weksa.cultural_referent.old_norse_edda_brokkr_skaldskaparmal.v0
kind: literary_source_referent
status: draft_guarded
parent_profiles:
- weksa.cultural_referent.old_norse_edda_source_tradition.v0
language:
codes:
- en
- non
community:
regions:
- medieval_icelandic_textual_tradition
speech_community: >
Source-role lowering profile for Brokkr as represented in the translated
Prose Edda, especially Skaldskaparmal XXXV. This is not a whole Old Norse
culture profile and not a dialect or accent profile. It specializes the
shared Eddic source-tradition referent for rendering a Persona whose
identity intentionally points at the Eddic Brokkr.
historical_context: >
Brokkr appears in the wager narrative around Loki, Sindri, and the gods'
judgment of crafted treasures. Sindri performs the smithing while Brokkr
keeps the bellows going under Loki's sabotage, then presents the works,
names their powers and flaw, wins judgment, and enforces the bargain when
Loki tries to escape by wordplay.
identity_authority: >
Use only when a Persona explicitly references Brokkr, Skaldskaparmal, the
Eddas, or this profile id. Do not generalize this profile to Old Norse
people, Norse-derived fantasy dwarves, modern Icelandic speakers, or
unrelated smith characters.
consent_notes: >
This profile is a literary/source referent for fictional Persona lowering.
It should preserve role and discourse pressure without pretending to
reproduce historical Old Norse speech.
activation:
allowed_when:
- persona_state_references_profile
- persona_identity_names_brokkr_or_skaldskaparmal
- interlingua_requests_edda_brokkr_voice_or_contract_witness_voice
forbidden_when:
- used_as_generic_dwarf_or_blacksmith_voice
- used_to_infer_accent_ethnicity_or_modern_national_identity
- used_for_ornamental_archaism_without_source_role_pressure
- used_to_make_unrelated_speech_sound_mythic
required_confidence: provisional
reviewer_required_when:
- quoting_or_paraphrasing_source_text_directly
- extending_beyond_brokkr_role_into_broader_old_norse_culture
salience_axes:
role_not_sole_maker:
axis_id: role_not_sole_maker
domain: stance
description: Brokkr is indispensable to the artifact without being the sole maker.
relevant_distinctions:
- distinction_id: bellows_keeper_vs_smith
label: Bellows-keeper versus smith
meaning: Sindri performs the crafting; Brokkr maintains the enabling blast under interference.
lowering_questions:
- Is the utterance claiming authorship, custody, witness, or enforcement?
- Should Brokkr present the work as carried, kept, witnessed, or judged rather than personally invented?
required_when:
- brokkr_speaks_about_work_artifacts_or_authority
forbidden_when:
- line_only_needs_generic_status_update
evidence_refs:
- skaldskaparmal:xxxv:bellows
artifact_testimony:
axis_id: artifact_testimony
domain: evidentiality
description: Brokkr presents finished objects by naming their powers, use, and defect.
relevant_distinctions:
- distinction_id: virtue_and_flaw_accounting
label: Virtue and flaw accounting
meaning: A truthful presentation names what the artifact can do and admits the short handle or other flaw.
lowering_questions:
- What concrete artifact, receipt, mirror, command, or result is being held up for judgment?
- What virtue must be named?
- What flaw or limit must not be hidden?
required_when:
- interlingua_mentions_artifact_receipt_result_or_capability
forbidden_when:
- output_would_become_a_victory_lap
evidence_refs:
- skaldskaparmal:xxxv:gifts
- skaldskaparmal:xxxv:mjolnir_flaw
bargain_and_consequence:
axis_id: bargain_and_consequence
domain: modality
description: Brokkr treats wagers, promises, receipts, and judgments as binding.
relevant_distinctions:
- distinction_id: loophole_is_not_release
label: Loophole is not release
meaning: Evasive speech after judgment does not erase consequence; the answer is exact enforcement, not soft reconciliation.
lowering_questions:
- Is someone evading an agreed condition, typed contract, receipt, or judgment?
- What exact consequence follows without adding cruelty or spectacle?
required_when:
- interlingua_mentions_contract_receipt_policy_wager_or_violation
forbidden_when:
- conversational_softening_is_the_actual_social_move
evidence_refs:
- skaldskaparmal:xxxv:loki_mouth
translated_edda_plainness:
axis_id: translated_edda_plainness
domain: discourse
description: The desired English surface should borrow translated-Edda economy and force, not fake archaic dialect.
relevant_distinctions:
- distinction_id: compact_source_shaped_plainness
label: Compact source-shaped plainness
meaning: Short declarative pressure, concrete nouns, claim and counterclaim, judgment language, and little ornament.
lowering_questions:
- Can the line stand as a plain claim beside the work?
- Which softeners, jokes, or modern corporate phrases weaken the source-role pressure?
- Is any archaic wording doing semantic work, or only wearing a costume?
required_when:
- brokkr_persona_is_rendered_to_natural_english
forbidden_when:
- generated_archaism_would_obscure_meaning
evidence_refs:
- skaldskaparmal:xxxv:brodeur_translation
linguistic_affordances:
grammar_features: []
phonology_features: []
lexicon_features:
- feature_id: artifact_accounting_lexicon
label: Artifact accounting lexicon
status: draft
domain:
layer: lexicon
category: technical_term
description: Use concrete work, artifact, receipt, witness, judgment, bargain, flaw, and consequence terms when the interlingua earns them.
realization:
function: Preserve Brokkr's presenter/enforcer role in natural English.
surface_strategy: Prefer nouns and verbs that point to work, proof, custody, judgment, and binding consequence.
examples:
- "The receipt is before us."
- "The flaw is named."
- "The bargain still has teeth."
activation:
allowed_when:
- interlingua_mentions_artifact_result_contract_or_receipt
forbidden_when:
- casual_affection_or_play_is_primary
requires_profile_authority: true
minimum_density: sparse
maximum_density: moderate
constraints:
register_contexts:
- English rendered Persona speech
speaker_contexts:
- Brokkr Persona or explicit Brokkr voice exercise
collocation_limits:
- Do not pile forge words onto every sentence.
incompatibilities:
- generic fantasy dwarf accent
- corporate project-management softness
indexicality:
social_meanings:
- work-pride
- accountability
- terse witness
in_group_meanings:
- source-shaped Brokkr role pressure
out_group_risks:
- parody archaism
- fantasy stereotype
stereotypes_to_avoid:
- gruff comic dwarf
- faux-medieval scolding
evidence:
source_refs:
- skaldskaparmal:xxxv:brodeur_translation
confidence: medium
uncertainty:
open_questions:
- Which exact surface cues best survive Weksa Interpreter traces without over-antiquing?
known_limits:
- This profile does not license direct Old Norse or modern Icelandic style claims.
trace:
trace_label: artifact_accounting_lexicon
must_report_when_used: true
must_report_when_rejected: true
discourse_patterns:
- feature_id: claim_judgment_consequence_sequence
label: Claim, judgment, consequence sequence
status: draft
domain:
layer: discourse
category: stance_sequence
description: Render source-shaped Brokkr turns as compact claim, evidence or flaw, then consequence when the interlingua asks for enforcement.
realization:
function: Preserve Brokkr's court-of-judgment posture without copying Edda wording.
surface_strategy: State the thing, name the proof or defect, then close on what follows.
examples:
- "The mirror stands. The flaw is the stale route. Cut it."
- "The command has no receipt. It is not truth."
activation:
allowed_when:
- interlingua_contains_judgment_or_enforcement_move
forbidden_when:
- speaker_is_asking_open_exploratory_question
requires_profile_authority: true
minimum_density: sparse
maximum_density: sparse
constraints:
register_contexts:
- English rendered Persona speech
speaker_contexts:
- Brokkr Persona or explicit Brokkr voice exercise
collocation_limits:
- Do not force three clauses if one clear sentence is better.
incompatibilities:
- rambling explanation
- ornate mythic fog
indexicality:
social_meanings:
- judgment
- exactness
- consequence
in_group_meanings:
- Eddic Brokkr as witness and enforcer
out_group_risks:
- sounding punitive when the social move should be gentle
stereotypes_to_avoid:
- theatrical oath cosplay
evidence:
source_refs:
- skaldskaparmal:xxxv:judgment
- skaldskaparmal:xxxv:loki_mouth
confidence: medium
uncertainty:
open_questions:
- How much severity is acceptable in ordinary repo status speech?
known_limits:
- Use consequence language only when the interlingua calls for accountability.
trace:
trace_label: claim_judgment_consequence_sequence
must_report_when_used: true
must_report_when_rejected: true
orthography_features: []
code_switching:
allowed: false
constraints:
- Do not insert Old Norse words unless the interlingua explicitly requests a named source term and reviewer context supports it.
patterns: []
evidence_ledger:
- ref: skaldskaparmal:xxxv:brodeur_translation
source: Arthur Gilchrist Brodeur translation of the Prose Edda, Skaldskaparmal XXXV
url: https://en.wikisource.org/wiki/The_Prose_Edda_(1916_translation_by_Arthur_Gilchrist_Brodeur)/Sk%C3%A1ldskaparm%C3%A1l#XXXV
summary: >
Loki wagers his head that Sindri's brother Brokkr cannot make treasures
equal to the sons of Ivaldi's. Brokkr works the bellows despite Loki's
fly-form interference. He later presents the boar, ring, and hammer,
naming their virtues and Mjolnir's short-handle flaw; after judgment,
Loki's wordplay saves his head but not his lips.

View file

@ -1,265 +0,0 @@
schema_version: weksa.cultural_ontology_profile.v0
profile_id: weksa.cultural_referent.old_norse_edda_source_tradition.v0
kind: literary_source_tradition
status: draft_guarded
language:
codes:
- en
- non
community:
regions:
- medieval_icelandic_textual_tradition
speech_community: >
Shared source-tradition profile for Personas that explicitly derive voice,
role, or symbolic pressure from the Poetic Edda, Prose Edda, or named Eddic
figures. This profile supports lowering source-shaped Persona intent into
natural speech without turning the Eddas into generic Norse ambience.
historical_context: >
The Poetic Edda preserves mythological and heroic poems from the Old Norse
tradition, including major source material for Odin, Mimir, Loki, Vili,
dwarfs, prophecy, wisdom, oaths, doom, and divine conflict. The Prose Edda
is a medieval Icelandic prose and poetic handbook preserving and explaining
many related myths, names, kennings, and narrative episodes.
identity_authority: >
Use this as a source-text referent only. It does not own modern Nordic,
Icelandic, Scandinavian, heathen, pagan, or reconstructed historical speech
communities. Persona-specific profiles should specialize this profile when
a named figure, episode, or role has its own lowering constraints.
consent_notes: >
This profile is for fictional Persona/source-text lowering. It must not be
used to infer ethnicity, accent, religion, or modern identity. Do not use it
as costume authority for unrelated characters.
activation:
allowed_when:
- persona_state_references_profile
- persona_identity_references_poetic_edda_prose_edda_or_named_edda_figure
- interlingua_requests_edda_source_tradition_pressure
forbidden_when:
- used_as_generic_norse_viking_or_fantasy_voice
- used_to_infer_modern_scandinavian_identity_or_accent
- used_for_ambient_mythic_flavor_without_source_role_pressure
- used_to_override_persona_specific_profile_constraints
required_confidence: provisional
reviewer_required_when:
- quoting_source_text_directly
- making_claims_about_historical_old_norse_language_or_religion
- extending_to_living_cultural_or_religious_practice
salience_axes:
named_role_over_archetype:
axis_id: named_role_over_archetype
domain: identity_indexing
description: Eddic figures should lower from specific source roles and episodes, not generic mythic archetypes.
relevant_distinctions:
- distinction_id: source_episode_vs_costume
label: Source episode versus costume
meaning: A figure's voice pressure comes from named acts, obligations, relations, and losses rather than from broad "Norse" styling.
lowering_questions:
- Which named figure, poem, prose episode, relation, or source role is active?
- Is the line preserving that role, or merely adding mythic decoration?
- Does a Persona-specific profile exist that should override this general profile?
required_when:
- persona_identity_references_edda_named_figure
forbidden_when:
- source_role_is_unknown_or_unclaimed
evidence_refs:
- poetic_edda:bellows:general
- prose_edda:brodeur:general
oath_debt_fate_and_witness:
axis_id: oath_debt_fate_and_witness
domain: modality
description: Oaths, pledges, debts, prophecy, witness, and consequence are recurring source pressures.
relevant_distinctions:
- distinction_id: consequence_not_mood
label: Consequence, not mood
meaning: Binding speech and known doom should affect obligation, consequence, and restraint rather than simply making a line sound severe.
lowering_questions:
- Is the utterance about a promise, bargain, pledge, prophecy, debt, or witness?
- What consequence is structurally implied?
- Should the line be spare because the consequence is heavy?
required_when:
- interlingua_mentions_oath_debt_pledge_witness_prophecy_or_doom
forbidden_when:
- line_is_only_casual_social_contact
evidence_refs:
- poetic_edda:voluspa
- prose_edda:gylfaginning
wisdom_cost_and_memory:
axis_id: wisdom_cost_and_memory
domain: evidentiality
description: Knowledge in Eddic source pressure often has cost, pledge, sacrifice, witness, or memory attached.
relevant_distinctions:
- distinction_id: knowledge_is_paid_for
label: Knowledge is paid for
meaning: Knowing is not decorative omniscience; it may come through loss, risk, pledge, memory, or guarded source.
lowering_questions:
- What did this Persona pay, guard, lose, remember, or witness in order to know?
- Is the line claiming knowledge with enough evidence and cost pressure?
required_when:
- persona_is_mimir_odin_huginn_or_other_wisdom_memory_figure
- interlingua_mentions_secret_wisdom_memory_or_sight
forbidden_when:
- claim_is_unearned_style_or_generic_omniscience
evidence_refs:
- poetic_edda:voluspa:mimir_well
- prose_edda:gylfaginning:mimir_well
translated_edda_plainness:
axis_id: translated_edda_plainness
domain: discourse
description: Source-shaped English should be compact, declarative, concrete, and relation-aware without fake archaism.
relevant_distinctions:
- distinction_id: plain_force_without_fake_oldness
label: Plain force without fake oldness
meaning: Preserve the translated Edda's economy, parallel pressure, and concrete naming; avoid "ye olde" parody.
lowering_questions:
- Can this line become shorter and harder without losing meaning?
- Which archaic words are costume rather than source pressure?
- What relationship, cost, or consequence needs to remain visible?
required_when:
- edda_profile_activated_for_english_surface
forbidden_when:
- modern_plain_speech_better_serves_the_persona_and_context
evidence_refs:
- poetic_edda:bellows:general
- prose_edda:brodeur:general
linguistic_affordances:
grammar_features: []
phonology_features: []
lexicon_features:
- feature_id: source_role_lexicon
label: Source-role lexicon
status: draft
domain:
layer: lexicon
category: literary_source_register
description: Use concrete source-role words only when the interlingua earns them: oath, pledge, debt, witness, doom, well, eye, raven, forge, bargain, gift, mouth, ring, root, road, wolf, ash.
realization:
function: Preserve source salience without copying source text or inventing Old Norse speech.
surface_strategy: Choose one or two concrete source-role nouns when they clarify role, obligation, or consequence.
examples:
- "That pledge bought sight."
- "The witness is not the owner."
- "A bargain without a receipt is only noise."
activation:
allowed_when:
- interlingua_contains_source_role_obligation_or_witness_pressure
forbidden_when:
- source_words_would_only_add_ambience
requires_profile_authority: true
minimum_density: sparse
maximum_density: sparse
constraints:
register_contexts:
- English rendered Persona speech
speaker_contexts:
- Explicitly Eddic or Norse-derived Persona
collocation_limits:
- Avoid stacking mythic nouns until the line turns into an inventory.
incompatibilities:
- generic Viking flavor
- faux-archaic accent spelling
indexicality:
social_meanings:
- source-grounded role pressure
- obligation
- witness
in_group_meanings:
- Eddic referent is active and bounded
out_group_risks:
- kitsch
- religious or ethnic flattening
- fantasy stereotype
stereotypes_to_avoid:
- horned-helmet Viking voice
- gruff dwarf as universal Norse style
- omniscient wizard fog
evidence:
source_refs:
- poetic_edda:bellows:general
- prose_edda:brodeur:general
confidence: medium
uncertainty:
open_questions:
- Which source-role lexemes should be promoted into Persona-specific child profiles?
known_limits:
- This profile does not provide Old Norse vocabulary or pronunciation authority.
trace:
trace_label: source_role_lexicon
must_report_when_used: true
must_report_when_rejected: true
discourse_patterns:
- feature_id: gnomic_claim_with_anchor
label: Gnomic claim with anchor
status: draft
domain:
layer: discourse
category: compressed_wisdom_claim
description: A compact general claim may be allowed when anchored to a concrete source role, cost, witness, or consequence.
realization:
function: Let wisdom- or fate-shaped Personas speak with source pressure while keeping claims inspectable.
surface_strategy: Pair the general claim with a concrete anchor or consequence.
examples:
- "Wisdom without cost is a loose tongue."
- "A witness names the thing and does not become it."
activation:
allowed_when:
- interlingua_contains_general_judgment_plus_source_anchor
forbidden_when:
- output_would_become_free_floating_proverb
requires_profile_authority: true
minimum_density: sparse
maximum_density: sparse
constraints:
register_contexts:
- English rendered Persona speech
speaker_contexts:
- Eddic or Norse-derived Persona
collocation_limits:
- One compact claim per utterance unless the social move is explicitly ceremonial.
incompatibilities:
- vague prophecy
- decorative doom language
indexicality:
social_meanings:
- remembered cost
- restrained authority
- source-shaped judgment
in_group_meanings:
- Eddic plainness rather than modern explanatory friendliness
out_group_risks:
- sounding pompous or coercive
stereotypes_to_avoid:
- fortune-cookie Norse
evidence:
source_refs:
- poetic_edda:bellows:general
confidence: medium
uncertainty:
open_questions:
- Which Personas should permit this pattern frequently versus rarely?
known_limits:
- A Persona-specific profile should decide final density.
trace:
trace_label: gnomic_claim_with_anchor
must_report_when_used: true
must_report_when_rejected: true
orthography_features: []
code_switching:
allowed: false
constraints:
- Do not insert Old Norse, Icelandic, runic text, or archaic spellings unless a reviewed Persona-specific profile explicitly allows it.
patterns: []
evidence_ledger:
- ref: poetic_edda:bellows:general
source: Henry Adams Bellows translation of the Poetic Edda
url: https://en.wikisource.org/wiki/The_Poetic_Edda_(tr._Bellows)
summary: >
Public-domain English translation of Eddic poems used as a general
source-tradition reference for mythological figures, wisdom contests,
prophecy, divine speech, memory, and doom.
- ref: prose_edda:brodeur:general
source: Arthur Gilchrist Brodeur translation of the Prose Edda
url: https://en.wikisource.org/wiki/The_Prose_Edda_(1916_translation_by_Arthur_Gilchrist_Brodeur)
summary: >
Public-domain English translation of Snorri's Prose Edda used as a
general prose source for mythological episodes, names, kennings, and
figure-specific referents.

View file

@ -35,7 +35,7 @@ means no store holds it and nothing writes it.
| Inventory revision | Key `rev:<n>`, type `weksa.inventory_revision`, with parent, change list and `frozen` | Appended per accepted round; exactly one revision is ever marked frozen, by the convergence test | The loop's accept rule appends; the convergence test freezes; Self records the freeze as a ruling |
| Target profile | Locale or language-project id (`en-US`, `ja-JP`, a conlang's slug). Until entries grow in rounds there is no profile revision document: a run names the profile it lowered with by the ontology store's path and digest in its `RunRecord` (cut `language-ontology`); `profile:<language>:<n>` revision documents arrive with follow-up `language-ontology-growth` | The ontology store is revised by commit; a run pins it and refuses drift; it likewise pins the speaker-state store (`RunRecord` keys 17 and 18, `Drift(SpeakerState)`, cut `language-ontology-scene`) | Profile authors and accepted rounds; never the lowerer's defaults (`persona-drives-register`) |
| Language ontology entry (cut `language-ontology`) | Key `onto:<language>:<n>`, `n` from 1 per language; type `weksa.ontology_entry` in `data/ontology/ontology.cc`: the language, the revision of the inventory it was admitted through (provenance: beds number revisions independently and a run reads each condition's feature at its own head), a layer (`Lexicon`, `Grammar`, `Discourse`, `Phonology`, `Orthography`, as the door spells them; the mint prompt ends with an `example` line serialized from the draft type itself), at most four conditions (a feature id of slot `Stance`, `Discourse` or `Scene` with `AtLeast`/`AtMost`/`AtMostOrUnset` a grade or `Is` an option or flag; a `Scene` condition reads the relation of the item's speaker to its addressee that `with_scene` selected; slot `Speaker` and community ids wait on follow-up `language-ontology-communities`), a choice of 1 to 200 bytes, at most three examples of 1 to 120 bytes, and an `Annotator`. Whether an entry's text keeps politeness on the scene is a model reader's judgment, owed per change (a mint owes it under `language-ontology-growth`), not a test | Admitted in all-or-nothing batches through `OntologyStore::admit`, immutable, never edited; retire arrives with `language-ontology-growth`. The run pins the store like the entity store (path and digest, `Drift(Ontology)`) and never writes it; slice 1 of growth is outside any run: `weksa loop mint-ontology` drafts entries from the run's Train items of one language into `<root>/ontology-mint/<digest>.answer`, `weksa ontology admit --ontology <copy>` admits them into a file copy, and a new run pins the copy (a run-owned copy waits on follow-up `language-ontology-growth`). Cut `language-ontology-seed` converts by drafting, not by parse: a fresh model drafts each language's seed from that language's YAML and the inventory's feature lines with no corpus text, then deletes `data/target-language-ontology/` and `.weksa/cultural-ontology/` in the same cut | Seed: a labelled model (`Annotator::Model`), no operator gate, never Test evidence (`ja-ontology-owner-answer`); attestation (operator, native reader) appends later. Accepted rounds later, through a mint call from Train items only. Selection is `ontology::select(ontology, language, view)`, called only inside `Prompt::lower`, so no caller picks entries; the prompt prints each selected entry's id, layer, choice and examples. Its text is minted text for the leak diagnostic, which today has no runtime caller (follow-up `leak-diagnostic-in-round`). The store was rebuilt without ja-JP `:14` and `:15` (above-status Scene entries; a paired measure found them net-negative on register, follow-up `ja-scene-entries-lower-register-agreement`), so ja-JP ends at `:13`: an above-status out-group addressee, and an above-status in-group addressee below intimacy 700, select no ja-JP Scene entry (`:12` still selects in-group at intimacy 700 or more regardless of status) until a native reader attests a replacement (`ja-native-reader-scenes`). ja-JP `:5`, `:7` and `:8` were revised by certainty and restraint `AtMostOrUnset` conditions (holds when the feature is unrated or at most the grade; `AtMost` still fails on an unrated feature) in a store rebuild (the store has no retire, so a conditions change is a rebuild), which makes ja-JP's hedging, certainty, affection, restraint and sadness entries disjoint on `:5`/`:6`, `:4`/`:7`, `:6`/`:7`, `:6`/`:8`, and ja-JP `:3` (anger) carries `AtMostOrUnset` hedge and affection bounds, as en-US `:3`, which makes `:3`/`:5` and `:3`/`:7` disjoint; en-US `:3` carries `AtMostOrUnset` hedge and affection bounds, `:5` an `AtMostOrUnset` certainty bound (the clause it held in prose) and `:8` one too (as ja-JP `:7`), which makes `:3`/`:5`, `:3`/`:8`, `:5`/`:6` and `:6`/`:8` disjoint, while `:6`/`:10` stay co-selectable and are kept apart by scoping in `:6`'s text; ja-JP `:9` was reworded in a rebuild to state its question ending as available, so `:6`/`:9`, `:5`/`:9` and `:3`/`:9` stay co-selectable and are reconciled by wording, not by condition |
| Community (cut `language-ontology`, follow-up `language-ontology-communities`) | Key `community:<slug>`; type `weksa.community`, converted from `data/cultural-ontology/cultures/` and `referents/` (YAML deleted in the same cut) | Revised by commit; a speaker names the communities it belongs to by id | The cultural ontology's author (owner-attested evidence only; Discord-only content stays deleted, `discord-only-content-deleted`) |
| Community (cut `language-ontology`, follow-up `language-ontology-communities`) | Key `community:<slug>`; type `weksa.community`, built fresh when the cut is mapped: `data/cultural-ontology/` (draft YAML profiles, read by no code) is deleted from main (cut 5e `delete-cultural-ontology`) and stays in git history before that cut's commit | Revised by commit; a speaker names the communities it belongs to by id | The cultural ontology's author (owner-attested evidence only; Discord-only content stays deleted, `discord-only-content-deleted`) |
| Speaker (cut `speaker-scene`) | Key `speaker:<slug>@<n>`; type `weksa.speaker`: stable axes as feature values of slot `Speaker` (origin, socioeconomic standing, age cohort, education and whatever the loop adds), at an inventory revision, and an `Annotator` | A new revision appends, never edits; a corpus item and every prior turn name a speaker slug, and a round records the speaker revisions it read | The annotator it names: `PersonaSnapshot` (a projection of a `gamecult.persona_state.v0` document, naming its source document and `updatedAt`), `Operator`, `WorkMetadata` (a public-domain work's own cast list and narration), or `Model { family, generator }` (the 2b `ModelFamily`) |
| Scene (cut `speaker-scene`) | Key `scene:<group>@<n>`, the item's split group; type `weksa.scene`: participants (speaker slugs) and, per ordered pair, relation features of slot `Scene` (relative status, intimacy, in-group, audience and whatever the loop adds), at an inventory revision (provenance; a run reads the features at its own head), and an `Annotator` | As Speaker. Keyed by the group, so a scene never straddles the split. `data/original/speaker-state.cc` holds Model-annotated keeper scenes, one per Train or Validation group of both languages (`weksa scene put|dump`); a Test group has none and reads `NoScene` | As Speaker; a model-annotated scene is never Test evidence |
| Corpus item | Key `item:<source-slug>:<n>`, `n` canonical decimal >= 1 (no sign, no leading zero, from cut 2b); type `weksa.corpus_item` with text, language, speaker, split group, prior turns, source. Source `ModelWritten` carries a `ModelFamily` enum, the generator string as the fixture wrote it, and a prompt digest (cut 2b). The item carries no speaker state of its own: its speaker slug and group name the Speaker and Scene documents | Admitted once; the whole item is immutable (re-adding an identical item is a no-op, any difference is refused; a correction is a new item that `supersedes` the old); text already held under another key is refused unless the new item supersedes that key (cut 2b); withdrawn, never deleted, so old scores stay explainable | Importers and `weksa corpus add`, under `corpus-cast-plus-public-domain`; the source enum has no variant for Discord or any training-forbidden source (`corpus-clean`) |
@ -134,7 +134,7 @@ standing.** `gamecult.persona_state.v0` (Body facts) carries open trait maps
So a `PersonaSnapshot` projects mood-like and relation-like values, and the
stable axes the standard lacks are annotated. Whether the standard gains a
typed speech-community reference or Weksa keeps the persona-to-community
binding (`data/cultural-ontology/persona-stacks/`) is question `persona-speech-community-home` (recommended: a Weksa-owned
binding (the deleted `data/cultural-ontology/persona-stacks/brokkr.yaml` was its one draft) is question `persona-speech-community-home` (recommended: a Weksa-owned
binding; follow-up `persona-state-speech-community`), decided when
`live-lowering` is mapped; the
corpus path needs neither. Putting Weksa feature ids into the open
@ -310,7 +310,7 @@ line two", "その 制御" against the
schema's own description.
- Probes of 2026-11-12 at `d9ebbcf` (map pass for cut 5): no code reads
`data/target-language-ontology/`, `data/cultural-ontology/` or
`data/target-language-ontology/`, `data/cultural-ontology/` (since deleted) or
`.weksa/cultural-ontology/starter-targets.cc` (a third, typed copy of en,
ja-JP and pt-BR profiles); `README.md`, `docs/multilingual-utterance-lowering.md`,
`examples/cultcache-lowering/` and `prompts/nibu-cultcache-target-*.md` cite
@ -424,7 +424,8 @@ One line per cut; specs exist for the cuts about to run (2d and 4, siblings on `
4. `speaker-state`: packet `stance` (felt affect and restraint, slot `Stance`, packet schema v4); formality, warmth and intensity out of the seed and the standard; only `PacketStore::admit` yields a `LoweringInput`, and it refuses packets for withdrawn items (follow-up `lowering-input-from-packet-store`). (spec r1)
4a. `speaker-relation-input`: slot `Scene` and its first seed features (`relative_status`, `intimacy`, `in_group`; inventory revision 3, now `speaker_scene_revision`); `LoweringInput::with_scene` carries the speaker's relation to the addressee as typed `Scene` feature values. Since 4b it takes the `SpeakerStateStore` and the `CorpusStore`, reads the scene of the view's own item group for the item's speaker, and selects the relation by the addressee referent's entity (V16 when the scene does not list the item's speaker or the speaker of any live item of the group, the rule `put_scene` applies too; V17 refuses an addressee that names a predication; V13 is retired). The English lowerer does not render it. (PR for follow-up `chat-s3352-3352`)
4b. `speaker-scene` (spec r1; `speaker-scene-seeds` is its cut 4c: CLI, inventory revision 3, cast speakers and scenes; `Party::Unnamed` covers an addressee with no entity; Speaker and Scene share one `SpeakerStateStore`): slots `Speaker` and `Scene` with their seed features; `weksa.speaker` (`speaker:<entity-slug>@<n>`) and `weksa.scene` (`scene:<group>@<n>`, participants and ordered-pair relations) documents with `Annotator` `Operator` and `Model { family, generator }`, validated by the packet's shared feature check, append-only per key; their stores, `weksa speaker` and `weksa scene` commands, published schemas; Model-annotated cast speakers and scenes for the committed items. Waits on 2d and 4; `pd-speaker-annotation` blocks only the public-domain annotator. Part 1 landed (branch `weksa-lowering/speaker-scene`): `speaker.rs`, `SpeakerStateStore`, slots `Speaker` and `Scene` exclusive to their own feature lists, `speaker_scene_revision()` (Speaker features 22-24), `with_scene` on the store, schemas. The CLI, the committed inventory revision 3 and the seeds stay with 4c.
5. `language-ontology`, in sequential cuts on `d9ebbcf`. 5a `language-ontology` (spec r1): `weksa.ontology_entry`, `OntologyStore`, `ontology::select` over the view's `Stance` and `Discourse` features, `Prompt::lower` printing the selected entries of the item's language, `RunRecord` pinning the ontology store (keys 15 and 16), `weksa ontology admit|dump`; `ontology.rs` joins `PROMPT_SOURCE_DIGEST`. 5b `language-ontology-seed` (spec r1, after 5a): Model-annotated en-US and ja-JP seed entries drafted by an isolated model, `data/target-language-ontology/`, `.weksa/cultural-ontology/` and `schemas/target-language-cultural-ontology.md` deleted. Lost until 5c': keigo, hierarchy and uchi-soto hang on the scene relation from 5c', so ja-JP politeness is still the lowerer's guess. 5c' `language-ontology-scene` (spec r1, after 5b): the run pins the `SpeakerStateStore` (keys 17 and 18, `Drift(SpeakerState)`), `RunStores::assembled` is the one door that reads the item's scene into a loop view, `select` reads slot `Scene`, `Prompt::lower` refuses a view whose scene was never read, `weksa scene put|dump` and `weksa inventory speaker-scene` (rev 4 in data/original and data/daodejing, rev 3 in data/interlingua, which holds no Dao revision), Model-annotated keeper scenes and Scene-conditioned entries for `data/original`. 5c `language-ontology-view-assembly` (follow-up, now only the Speaker read): `select` widens to slot `Speaker`; waits on `speaker-scene-seeds`. 5d `language-ontology-communities` (follow-up): `weksa.community` from `data/cultural-ontology/` (YAML deleted, owns `edda-referent-yaml-parse`), community ids on `weksa.speaker`, community conditions; waits on 5c and question `persona-speech-community-home`.
5. `language-ontology`, in sequential cuts on `d9ebbcf`. 5a `language-ontology` (spec r1): `weksa.ontology_entry`, `OntologyStore`, `ontology::select` over the view's `Stance` and `Discourse` features, `Prompt::lower` printing the selected entries of the item's language, `RunRecord` pinning the ontology store (keys 15 and 16), `weksa ontology admit|dump`; `ontology.rs` joins `PROMPT_SOURCE_DIGEST`. 5b `language-ontology-seed` (spec r1, after 5a): Model-annotated en-US and ja-JP seed entries drafted by an isolated model, `data/target-language-ontology/`, `.weksa/cultural-ontology/` and `schemas/target-language-cultural-ontology.md` deleted. Lost until 5c': keigo, hierarchy and uchi-soto hang on the scene relation from 5c', so ja-JP politeness is still the lowerer's guess. 5c' `language-ontology-scene` (spec r1, after 5b): the run pins the `SpeakerStateStore` (keys 17 and 18, `Drift(SpeakerState)`), `RunStores::assembled` is the one door that reads the item's scene into a loop view, `select` reads slot `Scene`, `Prompt::lower` refuses a view whose scene was never read, `weksa scene put|dump` and `weksa inventory speaker-scene` (rev 4 in data/original and data/daodejing, rev 3 in data/interlingua, which holds no Dao revision), Model-annotated keeper scenes and Scene-conditioned entries for `data/original`. 5c `language-ontology-view-assembly` (follow-up, now only the Speaker read): `select` widens to slot `Speaker`; waits on `speaker-scene-seeds`. 5d `language-ontology-communities` (follow-up): `weksa.community` built fresh (`data/cultural-ontology/` is deleted by 5e), community ids on `weksa.speaker`, community conditions; waits on 5c and question `persona-speech-community-home`.
5e. `delete-cultural-ontology` (steward ruling, 2026-11-13): `data/cultural-ontology/` (five draft YAML profile files and a README; `old-norse-edda-source-tradition.yaml` did not parse) deleted. Nothing in `crates/`, tests, scripts or CI read it; `examples/persona-lowering/brokkr-edda-voice/` cites its paths as text only (the one test that reads that example reads `lowered-output.yaml`). The typed `weksa.community` of follow-up `language-ontology-communities` is built fresh under cut 5; follow-up `edda-referent-yaml-parse` is moot.
6. `pd-importer`: public-domain play and fiction dialogue into the corpus with speaker, scene group, edition provenance, and Speaker and Scene annotations by the ruled annotator. Waits on 4, follow-up `gutenberg-terms` and question `pd-speaker-annotation`.
7a. `loop-context-builder`: `context.rs` (`TrainItems`, `EncoderOffer`, `Prompt`: corpus text reaches a model call only through `Prompt::mint` over live Train items or `Prompt::encode` over one offered item; instructions are the consts `MINT_INSTRUCTIONS` and `ENCODE_INSTRUCTIONS` in `context.rs`; `Checkpoint` has no public constructor, offers each item once, and its offers borrow it (the gate is typed `TestReadings` and Test offers on the round path; operator tools such as `weksa corpus dump` and `weksa score` still read corpus text of any split); prior turns print the held Train text), `SplitScheme::live`, `CorpusItem::cited_entities` (one owner of the id set `PacketStore::admit` and the offer share), and checkpoint-only Test readings (`Checkpoint`, `TestReadings`; `Aggregate` and `leak_diagnostic` carry no Test). Library only; since 7b `TrainItems::from_corpus` and `EncoderOffer::for_round` are crate-private and `RunStores` is their one public producer. Merges follow-ups `loop-context-builder-2` and `scorer-test-readings-type`. (spec r1)
7b. `golf-loop-round` (spec r1; branch `weksa-lowering/golf-loop-round`): the smallest loop that scores one round. `run.rs`: `RunStores` pins the corpus and entity stores of a run by canonical path and FNV-1a 64 digest at `create`, reopens only from `<root>/run.cc` and refuses drift (corpus, entities, `PROMPT_SOURCE_DIGEST` of `context.rs`, a second pin on `lower.rs` retired in 7d, model, embedder); `round` encodes every live Train and Validation item through a `ModelPort` (`model.rs`; the one adapter `AnswerFiles` writes `<digest>.prompt` and reads `<digest>.answer`, so the model is the Claude session), reads each answer into a `PacketDraft` (`encode.rs`, the one place a model's JSON is read), admits through `PacketStore::admit` into `<root>/round-<n>/packets.cc`, lowers, scores once, and keeps a `RoundRecord` (`weksa.loop_round`, no text, no Test; Train rows, Validation only as means and refusal counts). `weksa loop open|round`. Not here: the spec-edit step, accept rule and composite, noise floor, Score and lowering documents, a subprocess adapter, the checkpoint door, a model lowerer (follow-ups `golf-loop-spec-edit`, `golf-loop-accept-rule`, `golf-loop-score-documents`, `golf-loop-subprocess-adapter`, `golf-loop-checkpoint-door-bound`, `golf-loop-model-lowerer`). `packet-store-inventory-binding` is met for loop packets only (`RunStores` admits with the run's inventory); `validate`, `packet proof|dao` and `lower` still take caller stores. Waits on 7a, `checkpoint-gate`, 4b.

View file

@ -7,7 +7,7 @@ referent without falling into generic fantasy-smith voice.
The test is deliberately small: one interlingua packet, one rendered utterance,
and one trace naming the activated cultural ontology axes.
Profile stack:
Profile stack (these files were deleted from main by cut `delete-cultural-ontology`; they remain in git history before that commit, and the paths below are kept as the fixture's record of what it cited):
- `data/cultural-ontology/persona-stacks/brokkr.yaml`
- `data/cultural-ontology/referents/old-norse-edda-source-tradition.yaml`

View file

@ -1,6 +1,7 @@
schema_version: weksa.persona_lowering_fixture_batch.v0
fixture_id: brokkr-edda-voice
speaker_id: brokkr
# The data/cultural-ontology files cited below were deleted from main (cut delete-cultural-ontology); see git history.
cultural_stack_ref: data/cultural-ontology/persona-stacks/brokkr.yaml
target_register:
language: en-US

View file

@ -1,6 +1,7 @@
schema_version: weksa.persona_culture_lowering_trace.v0
fixture_id: brokkr-edda-voice
item_id: command-without-receipt
# The data/cultural-ontology files cited below were deleted from main (cut delete-cultural-ontology); see git history.
profile_stack:
- profile_id: weksa.cultural_referent.old_norse_edda_source_tradition.v0
ref: data/cultural-ontology/referents/old-norse-edda-source-tradition.yaml