batch 2: packs/common — contract, schemas, trilingual anchor template

This commit is contained in:
Shay 2026-05-12 21:39:12 -07:00
parent 0322e073e7
commit cc45ba8cac
7 changed files with 157 additions and 162 deletions

View file

@ -1,43 +1,70 @@
{
"anchor_set_id": "core-foundation-v0",
"description": "Trilingual alignment anchors for EN/HE/EL. Each anchor is a shared semantic concept that must be expressible in all three packs and must map to the same CORE field target. These are the hardest-gate coherence check: if these cannot be aligned, the pack is not ready.",
"anchor_set_id": "core-trilingual-foundation",
"version": "0.1.0",
"description": "Canonical cross-language anchor set for EN, HE, and EL. Each anchor defines a formal semantic equivalence across all three packs, scoped by stated constraints. These anchors are the minimum required for the Alignment gate to pass.",
"anchors": [
{
"anchor_id": "logos-word-speech",
"field_target": "speech.creative",
"en": {"lemma_id": "en:word", "gloss": "word, speech"},
"he": {"lemma_id": "he:dabar", "gloss": "word, speech, matter"},
"el": {"lemma_id": "el:logos", "gloss": "word, reason, speech"},
"reference": "John 1:1-2",
"notes": "The primary trilingual anchor. Logos/Dabar/Word — the creative speech act through which the universe was spoken into existence. This anchor is the theological and architectural foundation of the three-language choice. All three must map to speech.creative with equal coherence."
"anchor_id": "logos-word-creative-speech",
"field_target": "logos.articulation.creative",
"en": {
"lemma_id": "en:word",
"sense_id": "en:word:creative-utterance",
"notes": "English 'word' in the creative/declarative sense — 'the word went forth'."
},
"he": {
"lemma_id": "he:dabar",
"sense_id": "he:dabar:spoken-creative-word",
"notes": "דבר as divine or authoritative speech-act. Carries both the act of speaking and the thing spoken. The word is the event."
},
"el": {
"lemma_id": "el:logos",
"sense_id": "el:logos:creative-word",
"notes": "λόγος in John 1:1 sense — the rational, creative, pre-existent Word. Not merely speech or reason in isolation but both unified. John articulated in Greek what the Hebrew already carried."
},
"constraints": ["creative-or-authoritative-context"],
"tolerance": null
},
{
"anchor_id": "existence-being",
"field_target": "existence.state",
"en": {"lemma_id": "en:be", "gloss": "be"},
"he": {"lemma_id": "he:haya", "gloss": "be, become, exist"},
"el": {"lemma_id": "el:eimi", "gloss": "be, exist, am"},
"reference": "Exodus 3:14 / John 8:58",
"notes": "Copular existence anchor. The 'I AM' — hayah in Hebrew, eimi in Greek, the copula in English. Semantically the deepest single point of alignment across all three packs."
"anchor_id": "existence-being-copular",
"field_target": "existence.state.identity",
"en": {
"lemma_id": "en:be",
"sense_id": "en:be:existence",
"notes": null
},
"he": {
"lemma_id": "he:haya",
"sense_id": "he:haya:existence",
"notes": "היה — to be, to become, to exist. The Hebrew copula is often implicit; when present it carries aspectual and ontological weight beyond mere predication."
},
"el": {
"lemma_id": "el:eimi",
"sense_id": "el:eimi:existence",
"notes": "εἰμί — to be. In John 1:1 ἦν (imperfect) signals continuous pre-existent being, not merely occurrence at a point in time."
},
"constraints": ["copular-frame"],
"tolerance": null
},
{
"anchor_id": "light",
"field_target": "illumination.emanation",
"en": {"lemma_id": "en:light", "gloss": "light"},
"he": {"lemma_id": "he:or", "gloss": "light"},
"el": {"lemma_id": "el:phos", "gloss": "light"},
"reference": "Genesis 1:3 / John 1:4-5",
"notes": "Illumination anchor. Or/Phos/Light — the first spoken creation and a central semantic pole across the canon."
},
{
"anchor_id": "beginning-origin",
"field_target": "time.origin",
"en": {"lemma_id": "en:beginning", "gloss": "beginning, origin"},
"he": {"lemma_id": "he:reshit", "gloss": "beginning, first, chief"},
"el": {"lemma_id": "el:arche", "gloss": "beginning, origin, rule"},
"reference": "Genesis 1:1 / John 1:1",
"notes": "Origin anchor. Reshit/Arche — both John and Genesis open with this concept. In Koine Greek arche carries both temporal and ruling senses, which the field primitive must preserve."
"anchor_id": "beginning-origin-temporal-absolute",
"field_target": "time.origin.absolute",
"en": {
"lemma_id": "en:beginning",
"sense_id": "en:beginning:absolute-origin",
"notes": null
},
"he": {
"lemma_id": "he:reshit",
"sense_id": "he:reshit:absolute-origin",
"notes": "רֵאשִׁית — first, beginning, chief. In Gen 1:1 בְּרֵאשִׁית is anarthrous (no article), signaling primordial commencement before time itself was a container."
},
"el": {
"lemma_id": "el:arche",
"sense_id": "el:arche:absolute-origin",
"notes": "ἀρχή — beginning, origin, first principle. In John 1:1 ἐν ἀρχῇ is a direct echo of Gen 1:1, placing the Logos at the same primordial coordinate. Both point to the same zero-point."
},
"constraints": ["absolute-temporal-or-ontological-context"],
"tolerance": null
}
]
}

View file

@ -1,100 +1,93 @@
# Language Pack Contract
A CORE language pack is a deterministic, versioned manifold bundle that binds
a human language to the shared CORE semantic field.
A CORE language pack is a deterministic, versioned manifold bundle that binds a
human language to the shared CORE semantic field.
## Goals
A valid pack must be able to:
- normalize incoming surface text into canonical language units
- lift canonical units into CORE-native pressure
- read back field state into grammatical surface language
- validate its own internal consistency
- participate in cross-language alignment probes
- Normalize incoming surface text into canonical language units.
- Lift canonical units into CORE-native `CandidateGeometricPressure`.
- Read back field state into grammatical surface language.
- Validate its own internal consistency through the gate sequence.
- Participate in cross-language alignment probes via published anchor records.
## Required Interfaces
## Required Public Interface
Each pack's `validators.py` must expose:
Each pack must expose the following methods:
```python
def validate() -> ValidationReport: ...
def validate() -> ValidationReport
def normalize(text: str) -> NormalizedText
def analyze(text: str) -> LinguisticAnalysis
def lift(analysis: LinguisticAnalysis) -> CandidatePressureBatch
def readback(field_state, intent=None) -> SurfaceRealization
def anchors() -> list[AnchorRecord]
def probe() -> ProbeReport
```
Each pack's `lift_rules.py` must expose:
```python
def lift(analysis: LinguisticAnalysis) -> CandidatePressureBatch: ...
```
Each pack's `readback_rules.py` must expose:
```python
def readback(field_state, intent: dict | None = None) -> SurfaceRealization: ...
```
These are not optional. A pack that cannot implement one of these boundaries
must raise `NotImplementedError` at that boundary explicitly. Nothing is
silently skipped.
## Required Data Surfaces
| File | Purpose |
|-----------------------|---------------------------------------------------|
| `pack.toml` | Pack identity, version, activation flags |
| `orthography.yaml` | Script, normalization, spacing, punctuation rules |
| `lemmas.jsonl` | Lemma inventory (lemma-first) |
| `morphology.jsonl` | Surface forms per lemma with feature bundles |
| `frames.jsonl` | Predicate frame templates |
| `senses.jsonl` | Sense records mapping lemmas to field targets |
| `lift_rules.py` | Deterministic lift into field primitives |
| `readback_rules.py` | Deterministic articulation from field state |
| `validators.py` | Gate-sequence validation logic |
| `probes/` | Deterministic probe sets for each gate |
| `corpora/manifest.yaml` | Curated, licensed corpus source manifest |
```text
packs/<lang>/
pack.toml
orthography.yaml
lemmas.jsonl
morphology.jsonl
frames.jsonl
senses.jsonl
lift_rules.py
readback_rules.py
validators.py
probes/
corpora/
manifest.yaml
```
## Design Rules
### 1. Lemma-first
Tokens are surface realizations. Lemmas are the stable lexical unit.
The field-state layer operates on lemmas, not tokens.
Tokens are surface realizations. Lemmas are the stable lexical unit. All lexical
identity, morphological variation, and semantic targeting is anchored to lemmas.
### 2. Deterministic normalization
Normalization must be deterministic and script-aware. Unicode NFC is the
minimum baseline. Script-specific rules are defined in `orthography.yaml`.
Normalization must be deterministic and script-aware. Unicode normalization form,
punctuation strategy, and spacing rules are declared in `orthography.yaml` and
must produce identical output for identical input every time.
### 3. Native morphology
Morphology is a first-class pack surface, not optional metadata.
Hebrew stems and Koine Greek aspects are semantically load-bearing and
must be represented in `morphology.jsonl` with explicit feature bundles.
Morphology is part of meaning-bearing structure, not optional metadata. Hebrew
and Koine Greek morphology carries semantic load (stem, aspect, voice, agreement)
that must be represented in the morphology layer and available to the lift rules.
### 4. Shared field target
Semantic lift must target shared CORE field primitives.
No pack-private semantic space is permitted. What cannot be expressed
in shared primitives must be proposed as a new shared primitive,
not hidden inside a pack.
Semantic lift must target shared CORE field primitives. No pack may define
private or opaque semantic space that bypasses the shared field. A pack that
cannot express its semantics in shared field primitives is not a valid CORE pack.
### 5. Readback is owned locally
Each pack owns its articulation rules. Readback is not a global
postprocessor. Ambiguity management at the surface level is resolved
by the pack, not by the field layer.
Each pack owns its articulation rules, grammatical agreement, and ambiguity
management. Readback does not reach into another pack's rules.
### 6. Alignment is explicit
Packs must publish anchor records verifiable against the trilingual
anchor template in `packs/common/anchors/`. Coherence across languages
is a testable probe, not an emergent assumption.
Packs must publish anchor records in `anchors()` for cross-language coherence
checks. Anchors are formally scoped semantic equivalences with stated constraints
and tolerances — not approximate glosses.
## Validation Gate Sequence
## Validation Gates
A pack is not considered active because files exist. A pack becomes active only
when it passes all eight gates in order:
| Gate | Checks |
|------|--------|
| 1. Schema | All data files validate against their JSON schemas |
| 2. Lexical | Lemma inventory is non-empty and internally consistent |
| 3. Morphology | All surface forms trace to a known lemma record |
| 4. Lift | Lift rules produce valid pressure for all seed inputs |
| 5. Readback | Readback produces grammatical surface for all seed states |
| 6. Determinism | All D0/D1 paths produce identical output on repeated runs |
| 7. Alignment | Anchor records pass trilingual coherence check |
| 8. Coverage | Probe set covers minimum lexical and morphological surface |
| 1. Schema | All `.jsonl` records validate against their JSON Schema |
| 2. Lexical | All `lemma_id`s are unique; all `field_hooks` reference known primitives |
| 3. Morphology | All morphology records reference existing `lemma_id`s |
| 4. Lift | `lift()` produces valid `CandidatePressureBatch` for every probe input |
| 5. Readback | `readback()` produces grammatical surface output for every probe intent |
| 6. Determinism | `normalize()` and `lift()` produce identical output on repeated runs |
| 7. Alignment | `anchors()` returns at least the required trilingual anchor set |
| 8. Coverage | Required probe set passes without failures |
A pack is not active until all eight gates pass.
A gate failure blocks all subsequent gates. The pack is not partially active.

View file

@ -1,14 +1,13 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://assetoverflow.dev/core/schemas/frame",
"title": "CORE Frame Record",
"description": "A predicate frame template. Frames define the argument structure of predicates — what roles are required, optional, or forbidden.",
"description": "A syntactic-semantic frame template defining participant structure for a predicate type.",
"type": "object",
"required": ["frame_id", "language", "predicate_type", "slots"],
"properties": {
"frame_id": {
"type": "string",
"description": "Stable unique identifier. Convention: {lang}:{predicate-name} e.g. 'he:copular-basic'."
"description": "Unique frame identifier in the form '<lang>:<predicate_type>[-variant]'."
},
"language": {
"type": "string",
@ -16,31 +15,25 @@
},
"predicate_type": {
"type": "string",
"description": "Class of predicate. Examples: 'copular', 'transitive', 'ditransitive', 'intransitive', 'causative', 'stative'."
"description": "The predicate class this frame serves. Examples: copular, transitive, ditransitive, existential, causative."
},
"slots": {
"type": "array",
"description": "Ordered list of argument slots in this frame.",
"items": {
"type": "object",
"required": ["name", "required"],
"properties": {
"name": {"type": "string"},
"required": {"type": "boolean"},
"semantic_role": {"type": "string"},
"constraints": {"type": "array", "items": {"type": "string"}}
"name": { "type": "string" },
"required": { "type": "boolean" },
"semantic_role": { "type": ["string", "null"] },
"agreement_target": { "type": ["string", "null"] }
},
"additionalProperties": false
}
},
"constraints": {
"type": "array",
"items": {"type": "string"},
"description": "Frame-level constraints that apply regardless of slot. E.g. 'agreement-required', 'no-passive'."
},
"field_target": {
"type": ["string", "null"],
"description": "The shared CORE field primitive this frame maps to when activated."
"items": { "type": "string" }
}
},
"additionalProperties": false

View file

@ -1,53 +1,51 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://assetoverflow.dev/core/schemas/lemma",
"title": "CORE Lemma Record",
"description": "A single lexical entry in the pack's lemma inventory. Lemmas are the stable unit of the field-state layer — tokens are surface realizations of lemmas, not the other way around.",
"description": "A single lemma entry in a CORE language pack. Lemmas are the stable lexical unit — not tokens, not surface forms.",
"type": "object",
"required": ["lemma_id", "language", "script_form", "pos", "morph_class", "semantic_family"],
"properties": {
"lemma_id": {
"type": "string",
"description": "Stable unique identifier. Convention: {lang}:{base_form} e.g. 'he:dabar', 'el:logos'."
"description": "Unique identifier in the form '<lang>:<canonical_form>'. Example: 'he:dabar'."
},
"language": {
"type": "string",
"enum": ["en", "he", "el"],
"description": "Pack language code."
"description": "ISO 639-1 code for the pack language."
},
"script_form": {
"type": "string",
"description": "Canonical script form in the pack's native script. Unicode NFC. For Hebrew: unpointed unless pointing is semantically load-bearing."
"description": "The lemma in its native script. Hebrew right-to-left; Greek polytonic or monotonic as appropriate."
},
"transliteration": {
"type": ["string", "null"],
"description": "Latin-script transliteration for non-Latin packs. Null for English."
"description": "SBL-style transliteration for Hebrew and Greek. Null for English."
},
"gloss_seed": {
"type": ["string", "null"],
"description": "A minimal English gloss seed. Not a definition — just a stable orientation anchor for alignment and debugging."
"description": "A single-word English gloss for orientation only. Not a definition. Not used in semantic lift."
},
"pos": {
"type": "string",
"description": "Part of speech. Use lowercase: 'noun', 'verb', 'adjective', 'particle', 'pronoun', 'preposition', 'conjunction', 'adverb', 'interjection'."
"description": "Part of speech. Examples: verb, noun, adjective, particle, conjunction, preposition."
},
"morph_class": {
"type": "string",
"description": "Morphological class within the pack. For Hebrew: Qal, Niphal, Piel, etc. For Greek: thematic, athematic, etc. For English: regular, copular, modal, etc."
"description": "Morphological class within the pack. Hebrew: qal, niphal, etc. Greek: thematic, athematic, etc. English: regular, irregular, copular, etc."
},
"semantic_family": {
"type": "string",
"description": "Shared semantic family name. This is the cross-language alignment handle. Must be a string that can be matched against the same field in other packs."
"description": "The broad semantic domain this lemma inhabits. Must correspond to a recognized CORE field primitive family."
},
"field_hooks": {
"type": "array",
"items": {"type": "string"},
"description": "List of CORE field primitive names this lemma connects to. These must exist in the shared field primitive vocabulary."
"items": { "type": "string" },
"description": "List of CORE field primitive targets this lemma can lift into. Must be non-empty for any lemma that participates in semantic lift."
},
"readback_priority": {
"type": ["number", "integer"],
"description": "When multiple lemmas could realize a field state, higher priority wins. Integer. 1 is highest priority.",
"minimum": 1
"description": "Relative priority when this lemma is a candidate during readback disambiguation. Higher is preferred."
}
},
"additionalProperties": false

View file

@ -1,30 +1,29 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://assetoverflow.dev/core/schemas/morphology",
"title": "CORE Morphology Record",
"description": "A single inflected surface form derived from a lemma, with an explicit morphological feature bundle.",
"description": "A single inflected surface form for a lemma, with its full morphological feature bundle.",
"type": "object",
"required": ["record_id", "lemma_id", "surface_form", "features"],
"properties": {
"record_id": {
"type": "string",
"description": "Stable unique identifier. Convention: {lemma_id}:{feature-summary} e.g. 'he:haya:qatal:3ms'."
"description": "Unique identifier in the form '<lemma_id>:<feature_summary>'."
},
"lemma_id": {
"type": "string",
"description": "Foreign key to the lemma record."
"description": "Foreign key to a lemma record in the same pack."
},
"surface_form": {
"type": "string",
"description": "The inflected surface form in the pack's native script. Unicode NFC."
"description": "The fully inflected surface form in native script."
},
"features": {
"type": "object",
"description": "Morphological feature bundle. Keys vary by language and part of speech. Examples for Hebrew verbs: stem, aspect, person, gender, number. Examples for Greek verbs: tense, voice, mood, person, number. Examples for English: tense, person, number."
"description": "Key-value morphological feature bundle. Keys vary by language and part of speech."
},
"notes": {
"type": ["string", "null"],
"description": "Optional notes on irregular forms, defective paradigms, or disambiguation."
"description": "Optional philological or parsing note. Null if not needed."
}
},
"additionalProperties": false

View file

@ -1,33 +1,22 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://assetoverflow.dev/core/schemas/probe",
"title": "CORE Probe Record",
"description": "A deterministic probe for pack validation. Probes are the executable assertions that verify a pack's contract against real inputs.",
"description": "A deterministic test case for a language pack gate.",
"type": "object",
"required": ["probe_id", "kind", "input", "expected"],
"properties": {
"probe_id": {
"type": "string",
"description": "Stable unique identifier. Convention: {lang}:{gate}:{probe-name}."
"description": "Unique identifier in the form '<lang>:<gate>:<label>'."
},
"kind": {
"type": "string",
"description": "Which gate this probe tests. One of: 'schema', 'lexical', 'morphology', 'lift', 'readback', 'determinism', 'alignment', 'coverage'.",
"enum": ["schema", "lexical", "morphology", "lift", "readback", "determinism", "alignment", "coverage"]
},
"input": {
"description": "The input to the operation under test. Shape depends on kind."
},
"expected": {
"description": "The expected output or outcome. Shape depends on kind."
"enum": ["normalize", "lift", "readback", "alignment", "determinism"]
},
"input": {},
"expected": {},
"tolerance": {
"type": ["number", "null"],
"description": "For numeric comparisons, the acceptable deviation. Null for exact-match probes."
},
"notes": {
"type": ["string", "null"],
"description": "Optional commentary on what this probe is checking and why."
"type": ["number", "null"]
}
},
"additionalProperties": false

View file

@ -1,32 +1,28 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://assetoverflow.dev/core/schemas/sense",
"title": "CORE Sense Record",
"description": "A single sense of a lemma: a specific mapping from a lemma to a CORE field target, valid under specified constraints.",
"description": "A scoped semantic sense for a lemma, mapping it to a specific CORE field primitive target under stated constraints.",
"type": "object",
"required": ["sense_id", "lemma_id", "field_target"],
"properties": {
"sense_id": {
"type": "string",
"description": "Stable unique identifier. Convention: {lemma_id}:{sense-name} e.g. 'el:logos:cosmic-speech'."
"description": "Unique identifier in the form '<lemma_id>:<semantic_label>'."
},
"lemma_id": {
"type": "string",
"description": "Foreign key to the lemma record."
"type": "string"
},
"field_target": {
"type": "string",
"description": "The CORE shared field primitive this sense maps to. Must exist in the shared primitive vocabulary. E.g. 'speech.creative', 'existence.state', 'identity.relational'."
"description": "The CORE field primitive this sense lifts into. Dot-separated path. Example: 'logos.articulation.spoken'."
},
"constraints": {
"type": "array",
"items": {"type": "string"},
"description": "Conditions under which this sense is valid. E.g. 'copular-frame', 'divine-context', 'temporal-aspect:aorist'."
"items": { "type": "string" }
},
"rank": {
"type": ["number", "integer"],
"description": "Priority rank for this sense when multiple senses could apply. 1 is primary sense.",
"minimum": 1
"description": "Priority rank among senses for the same lemma. 1 is most primary."
}
},
"additionalProperties": false