diff --git a/packs/common/anchors/trilingual-anchor-template.json b/packs/common/anchors/trilingual-anchor-template.json index c50fc9b4..77cbd09a 100644 --- a/packs/common/anchors/trilingual-anchor-template.json +++ b/packs/common/anchors/trilingual-anchor-template.json @@ -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 } ] } diff --git a/packs/common/contracts/language-pack.md b/packs/common/contracts/language-pack.md index ccd9b082..a9c43002 100644 --- a/packs/common/contracts/language-pack.md +++ b/packs/common/contracts/language-pack.md @@ -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// + 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. diff --git a/packs/common/schema/frame.schema.json b/packs/common/schema/frame.schema.json index ba182539..ad755a18 100644 --- a/packs/common/schema/frame.schema.json +++ b/packs/common/schema/frame.schema.json @@ -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 ':[-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 diff --git a/packs/common/schema/lemma.schema.json b/packs/common/schema/lemma.schema.json index fcf9bd06..738160bd 100644 --- a/packs/common/schema/lemma.schema.json +++ b/packs/common/schema/lemma.schema.json @@ -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 ':'. 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 diff --git a/packs/common/schema/morphology.schema.json b/packs/common/schema/morphology.schema.json index cff92f51..ec20e7e2 100644 --- a/packs/common/schema/morphology.schema.json +++ b/packs/common/schema/morphology.schema.json @@ -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": { "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 diff --git a/packs/common/schema/probe.schema.json b/packs/common/schema/probe.schema.json index 61eb6d6c..309c31d3 100644 --- a/packs/common/schema/probe.schema.json +++ b/packs/common/schema/probe.schema.json @@ -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 '::