Define nested cultural ontology profile state

This commit is contained in:
Meta Vens 2026-06-09 16:40:31 +01:00
commit 743f3aabe2
5 changed files with 649 additions and 14 deletions

View file

@ -41,6 +41,94 @@ salience_axes:
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.

View file

@ -446,14 +446,132 @@ salience_axes:
lowering_questions: []
linguistic_affordances:
grammar_features: []
phonology_features: []
lexicon_features: []
discourse_patterns: []
orthography_features: []
grammar_features:
- feature_id:
status: draft | reviewed | deprecated
domain:
layer: grammar
category: tense_aspect_modality | negation | agreement |
pronoun | word_order | discourse_particle
description:
formal_conditions:
syntactic_environment: []
semantic_inputs: []
required_interlingua_fields: []
realization:
function:
surface_strategy:
examples: []
activation:
allowed_when: []
forbidden_when: []
requires_profile_authority:
minimum_density:
maximum_density:
constraints:
grammar_contexts: []
register_contexts: []
speaker_contexts: []
incompatibilities: []
indexicality:
social_meanings: []
in_group_meanings: []
out_group_risks: []
stereotypes_to_avoid: []
evidence:
source_refs: []
qdrant_source_ids: []
cached_source_refs: []
source_hashes: []
reviewer_refs: []
confidence: low | medium | high
uncertainty:
open_questions: []
known_limits: []
trace:
trace_label:
must_report_when_used:
must_report_when_rejected:
phonology_features:
- feature_id:
domain:
layer: phonology
category: vowel_shift | consonant_realization | prosody |
rhythm | stress | intonation
realization:
ipa_hint:
orthography_should_change:
speech_synthesis_controls: []
constraints:
lexical_sets: []
environments: []
density_safe_for_text:
indexicality: {}
evidence: {}
trace: {}
lexicon_features:
- feature_id:
domain:
layer: lexicon
category: regional_lexeme | loanword | calque | taboo |
honorific | kinship | ritual_term | technical_term
lexical_items:
- form:
gloss:
sense:
register:
allowed_speaker_standing:
forbidden_senses: []
collocations: []
activation: {}
indexicality: {}
evidence: {}
trace: {}
discourse_patterns:
- pattern_id:
domain:
layer: discourse
category: stance_marker | turn_taking | address_sequence |
narrative_frame | ritual_formula | humor | emphasis
interactional_function:
sequence_shape: []
adjacency_constraints: []
activation: {}
indexicality: {}
evidence: {}
trace: {}
orthography_features:
- feature_id:
domain:
layer: orthography
category: spelling_variant | script_choice | punctuation |
transliteration | eye_dialect_guard
allowed_surface_forms: []
forbidden_surface_forms: []
renderer_notes:
activation: {}
evidence: {}
trace: {}
code_switching:
allowed:
constraints: []
patterns:
- pattern_id:
domain:
layer: code_switching
category: lexical_insertion | tag_switch | alternation |
quotation | ritual_formula | metalinguistic
languages: []
matrix_language:
embedded_language:
switch_sites: []
pragmatic_functions: []
constraints:
requires_bilingual_speaker:
requires_community_context:
forbidden_when: []
evidence: {}
trace: {}
style_controls:
density:
@ -485,6 +603,15 @@ trace_requirements:
- reviewer_required
\end{lstlisting}
Flat lists such as \texttt{grammar\_features: [habitual\_be]} are allowed only
as summaries or search indexes. The accepted state must be the nested feature
record: a stable feature identifier, domain, activation gates, constraints,
indexical meanings, evidence, uncertainty, and trace behavior. This lets the
lowerer ask fine-grained questions without parsing prose, such as whether a
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]
@ -527,15 +654,145 @@ salience_axes:
- bidialectal_context_switching
linguistic_affordances:
grammar_features:
- invariant_habitual_be
- stressed_BIN
- completive_done
- negative_concord
evidence_refs:
- Green2002
- Rickford1999
- CORAAL
- YaleInvariantBe
- feature_id: aal_invariant_habitual_be
status: draft_guarded
domain:
layer: grammar
category: tense_aspect_modality
subcategory: habitual_aspect
description: Marks habitual or characteristic occurrence, not present
progressive meaning.
formal_conditions:
semantic_inputs:
- habituality
required_interlingua_fields:
- event_iterativity_or_characteristic_state
realization:
function: express_habitual_aspect
surface_strategy: invariant_be
examples: []
activation:
allowed_when:
- speaker_profile_refs_aal
- scene_context_refs_aal_community
forbidden_when:
- generic_black_coding
- outsider_performance_without_authority
requires_profile_authority: true
minimum_density: reviewed_light
maximum_density: reviewed_dense
constraints:
grammar_contexts:
- only_when_habitual_aspect_is_intended
incompatibilities:
- present_progressive_only_reading
indexicality:
social_meanings:
- aal_systematic_aspect
out_group_risks:
- treated_as_broken_standard_english
stereotypes_to_avoid:
- ignorance
- comedy
evidence:
source_refs:
- Green2002
- Rickford1999
- YaleInvariantBe
- CORAAL
confidence: high
trace:
trace_label: aal_habitual_be
must_report_when_used: true
must_report_when_rejected: true
- feature_id: aal_stressed_bin
status: draft_guarded
domain:
layer: grammar
category: tense_aspect_modality
subcategory: remote_past_or_remote_state
activation:
allowed_when:
- speaker_profile_refs_aal
forbidden_when:
- generic_flavor
requires_profile_authority: true
evidence:
source_refs:
- Green2002
- Rickford1999
confidence: medium
trace:
trace_label: aal_stressed_bin
must_report_when_used: true
must_report_when_rejected: true
- feature_id: aal_completive_done
status: draft_guarded
domain:
layer: grammar
category: tense_aspect_modality
subcategory: completive
activation:
allowed_when:
- speaker_profile_refs_aal
forbidden_when:
- generic_flavor
requires_profile_authority: true
evidence:
source_refs:
- Green2002
- Rickford1999
confidence: medium
trace:
trace_label: aal_completive_done
must_report_when_used: true
must_report_when_rejected: true
- feature_id: aal_negative_concord
status: draft_guarded
domain:
layer: grammar
category: negation
subcategory: negative_concord
activation:
allowed_when:
- speaker_profile_refs_aal
forbidden_when:
- generic_flavor
requires_profile_authority: true
evidence:
source_refs:
- Green2002
- Rickford1999
confidence: medium
trace:
trace_label: aal_negative_concord
must_report_when_used: true
must_report_when_rejected: true
phonology_features: []
lexicon_features: []
discourse_patterns: []
orthography_features:
- feature_id: aal_eye_dialect_guard
status: draft_guarded
domain:
layer: orthography
category: eye_dialect_guard
allowed_surface_forms: []
forbidden_surface_forms:
- misspelling_as_dialect
- random_apostrophe_deletion
renderer_notes: Text rendering must not fake AAL phonology through
stigmatizing spelling unless an orthographic practice is separately
evidenced and reviewed.
trace:
trace_label: aal_eye_dialect_guard
must_report_when_used: false
must_report_when_rejected: true
code_switching:
allowed: true
constraints:
- Requires speaker/community context and evidence-backed pattern.
patterns: []
forbidden_flattenings:
- Do not treat AAL as broken Standard English.
- Do not use AAL to imply criminality, ignorance, comedy, or informality.

View file

@ -26,6 +26,10 @@ them.
- [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
lowering traces.
- [english-lowering-packet.md](./english-lowering-packet.md): packet contract
for the older English-specific realization lane.
- [english-pronunciation-plan.md](./english-pronunciation-plan.md): plan for

View file

@ -0,0 +1,278 @@
# Cultural Ontology Profile Contract
This is the human-facing schema receipt for
`weksa.cultural_ontology_profile.v0`, the CultCache document family that stores
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/`.
## Authority
A cultural ontology profile owns the realization lens for a target speech
community, dialect, register, regional overlay, ritual register, historical
period, or contact-language repertoire.
It owns:
- salience axes the lowerer must inspect
- social-indexical meanings attached to forms
- linguistic affordances available to a dialect or register
- activation gates and forbidden use contexts
- evidence, reviewer status, uncertainty, and source hashes
- trace requirements for lowering audits
It does not own:
- source meaning
- speaker identity
- final wording without an interlingua packet
- unreviewed stereotypes
- Qdrant nearest-neighbor results as accepted truth
- renderer-specific surface tricks
## State Shape
The profile is typed state whose nested fields are also typed state. Lists of
strings may be used only as summaries or indexes; accepted affordance authority
lives in feature records.
```yaml
schema: weksa.cultural_ontology_profile.v0
profile_id:
kind: base_language | dialect | sociolect | regional_overlay |
institutional_register | religious_overlay | contact_language_overlay |
historical_period_profile | community_of_practice
status: draft | draft_guarded | reviewed | deprecated
language:
code:
locale:
script:
variety_label:
endonyms: []
exonyms: []
parent_profiles: []
community:
regions: []
speech_community:
historical_context:
identity_authority:
consent_notes:
activation:
allowed_when: []
forbidden_when: []
required_confidence: exploratory | provisional | reviewed
reviewer_required_when: []
salience_axes:
<axis_id>:
axis_id:
domain: temporality_aspect | stance | social_relation |
identity_indexing | sacred_or_ritual_context | address |
modality | evidentiality | affect | politeness
description:
relevant_distinctions:
- distinction_id:
label:
meaning:
lowering_questions: []
required_when: []
forbidden_when: []
evidence_refs: []
linguistic_affordances:
grammar_features: []
phonology_features: []
lexicon_features: []
discourse_patterns: []
orthography_features: []
code_switching:
allowed:
constraints: []
patterns: []
```
## Affordance Feature Records
Every affordance list above contains typed feature records. Feature IDs should
be stable inside a profile and reusable in lowering traces.
```yaml
feature_id:
label:
status: draft | reviewed | deprecated
domain:
layer: grammar | phonology | lexicon | discourse | orthography | code_switching
category:
subcategory:
description:
realization:
function:
surface_strategy:
examples: []
activation:
allowed_when: []
forbidden_when: []
requires_profile_authority:
minimum_density:
maximum_density:
constraints:
grammar_contexts: []
phonological_contexts: []
register_contexts: []
speaker_contexts: []
collocation_limits: []
incompatibilities: []
indexicality:
social_meanings: []
in_group_meanings: []
out_group_risks: []
stereotypes_to_avoid: []
evidence:
source_refs: []
qdrant_source_ids: []
cached_source_refs: []
source_hashes: []
reviewer_refs: []
confidence: low | medium | high
uncertainty:
open_questions: []
known_limits: []
trace:
trace_label:
must_report_when_used:
must_report_when_rejected:
```
Specialized feature records add fields rather than replacing the common record:
```yaml
grammar_feature:
feature_id:
domain:
layer: grammar
category: tense_aspect_modality | negation | agreement | pronoun |
word_order | subordination | discourse_particle
formal_conditions:
syntactic_environment: []
semantic_inputs: []
required_interlingua_fields: []
lowering_effect:
adds_meaning:
preserves_meaning:
changes_register:
can_be_omitted_when: []
phonology_feature:
feature_id:
domain:
layer: phonology
category: vowel_shift | consonant_realization | prosody | rhythm |
stress | intonation
realization:
ipa_hint:
orthography_should_change:
speech_synthesis_controls: []
constraints:
lexical_sets: []
environments: []
density_safe_for_text:
lexicon_feature:
feature_id:
domain:
layer: lexicon
category: regional_lexeme | loanword | calque | taboo | honorific |
kinship | ritual_term | technical_term
lexical_items:
- form:
gloss:
sense:
register:
allowed_speaker_standing:
forbidden_senses: []
collocations: []
discourse_pattern:
pattern_id:
domain:
layer: discourse
category: stance_marker | turn_taking | address_sequence |
narrative_frame | ritual_formula | humor | emphasis
interactional_function:
sequence_shape: []
adjacency_constraints: []
orthography_feature:
feature_id:
domain:
layer: orthography
category: spelling_variant | script_choice | punctuation |
transliteration | eye_dialect_guard
allowed_surface_forms: []
forbidden_surface_forms: []
renderer_notes:
code_switching_pattern:
pattern_id:
domain:
layer: code_switching
category: lexical_insertion | tag_switch | alternation |
quotation | ritual_formula | metalinguistic
languages: []
matrix_language:
embedded_language:
switch_sites: []
pragmatic_functions: []
constraints:
requires_bilingual_speaker:
requires_community_context:
forbidden_when: []
```
## Lowering Trace Contract
A lowered utterance trace should cite the nested state that actually affected
the line:
```yaml
cultural_ontology_trace:
activated_profiles: []
activated_axes:
- axis_id:
distinctions_used: []
distinctions_rejected: []
activated_affordances:
- profile_id:
layer:
feature_id:
density:
reason:
evidence_refs: []
rejected_affordances:
- profile_id:
layer:
feature_id:
reason:
reviewer_required:
uncertainty: []
```
## 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
```
Qdrant may store chunks, vectors, and payload filters for retrieval. It does
not own profile acceptance, feature activation, or renderer authority.

View file

@ -37,6 +37,9 @@ It does not own:
- `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
@ -71,3 +74,8 @@ target_language:
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.