diff --git a/docs/decisions/ADR-0103-fluency-lane-attachment-for-adr-0102.md b/docs/decisions/ADR-0103-fluency-lane-attachment-for-adr-0102.md new file mode 100644 index 00000000..37276529 --- /dev/null +++ b/docs/decisions/ADR-0103-fluency-lane-attachment-for-adr-0102.md @@ -0,0 +1,94 @@ +# ADR-0103 — Fluency Lane Attachment for ADR-0102 + +**Status:** Accepted +**Date:** 2026-05-22 +**Author:** CORE agents + reviewers +**Depends on:** ADR-0091, ADR-0102 + +--- + +## Context + +ADR-0102 ratified `hebrew_greek_textual_reasoning` with only universal reasoning lanes attached: + +- `inference_closure` +- `fabrication_control` + +At the time, the language-specific Hebrew and Koine Greek fluency lanes did not yet expose sealed holdout splits, so attaching them to ratified contracts would have violated ADR-0091 expectations around `dev/public/holdout` coverage. + +Both lanes now ship plaintext holdout sets through: + +```text +holdouts/v1/cases.jsonl +``` + +and can therefore be attached to the ADR-0102 manifests without weakening the contract discipline. + +--- + +## Decision + +Attach the following eval lanes to all four ADR-0102 manifests: + +- `hebrew_fluency` +- `koine_greek_fluency` + +Each lane declares: + +```jsonc +{ + "version": "v1", + "splits": ["dev", "public", "holdout"] +} +``` + +The following packs must remain uniform: + +- `he_core_cognition_v1` +- `he_logos_micro_v1` +- `grc_logos_cognition_v1` +- `grc_logos_micro_v1` + +All four manifests advance provenance to: + +```text +adr-0103:reviewed:2026-05-22 +``` + +--- + +## Acceptance evidence + +Accepted after the following landed together: + +- Hebrew holdout cases +- Koine Greek holdout cases +- updated fluency contracts +- updated gap notes +- updated sibling-ratification invariants +- uniform lane attachment across all four manifests + +--- + +## Invariants + +### `hebrew_greek_fluency_lanes_uniform` + +All four ADR-0102 packs must declare identical eval-lane coverage. + +### `hebrew_greek_fluency_holdouts_present` + +Both: + +- `hebrew_fluency` +- `koine_greek_fluency` + +must ship non-empty `holdouts/v1/cases.jsonl` before appearing in ratified domain contracts. + +--- + +## Consequences + +- ADR-0102 now carries language-specific fluency evidence in addition to universal reasoning evidence. +- Hebrew/Greek textual reasoning contracts now satisfy full `dev/public/holdout` discipline for attached fluency lanes. +- Future language-track ADRs can extend morphology and construction coverage without changing Domain Pack Contract v1. diff --git a/docs/decisions/README.md b/docs/decisions/README.md index 404ef585..a21e757c 100644 --- a/docs/decisions/README.md +++ b/docs/decisions/README.md @@ -99,12 +99,14 @@ ADRs record significant architectural decisions: what was decided, why, what alt | [ADR-0100](ADR-0100-physics-reasoning-capable-ratification.md) | Physics Reasoning-Capable Ratification | Accepted (2026-05-22) | | [ADR-0101](ADR-0101-systems-software-reasoning-capable-ratification.md) | Systems-Software Reasoning-Capable Ratification | Accepted (2026-05-22) | | [ADR-0102](ADR-0102-hebrew-greek-reasoning-capable-ratification.md) | Hebrew-Greek Textual-Reasoning Reasoning-Capable Ratification | Accepted (2026-05-22) | +| [ADR-0103](ADR-0103-fluency-lane-attachment-for-adr-0102.md) | Fluency Lane Attachment for ADR-0102 | Accepted (2026-05-22) | +| ADR-0105 | Expert-Demo Ratification Contract | Placeholder / Proposed | --- ## Current frontier -The ADR-0091..0102 slate is fully accepted and mechanically evidenced: +The ADR-0091..0103 slate is fully accepted and mechanically evidenced: - Domain Pack Contract v1 — ADR-0091 - Reviewer Registry v1 — ADR-0092 @@ -118,14 +120,14 @@ The ADR-0091..0102 slate is fully accepted and mechanically evidenced: - `physics` reasoning-capable ratification — ADR-0100 - `systems_software` reasoning-capable ratification — ADR-0101 - `hebrew_greek_textual_reasoning` multi-pack reasoning-capable ratification — ADR-0102 +- Hebrew/Greek fluency lane attachment for ADR-0102 — ADR-0103 Six lanes are SHA-pinned in `scripts/verify_lane_shas.py` and gated by the `lane-shas` GitHub Actions workflow: `reviewer_registry`, `domain_contract_validation`, `miner_loop_closure`, `fabrication_control_summary`, `demo_composition`, `public_demo`. The next implementation frontier is open. Candidate directions include: - **Curriculum-sourced proposals.** ADR-0094 reserved `ProposalSource(kind="curriculum")`; a curriculum ADR can introduce it without secondary schema churn. -- **Holdout splits for language-specific lanes.** ADR-0102 currently relies on universal lanes (`inference_closure`, `fabrication_control`); language-specific fluency lanes (`evals/hebrew_fluency/`, `evals/koine_greek_fluency/`) need sealed holdout splits before they can attach to `reasoning-capable` claims. -- **Expert-demo ratification.** All ADR-0097/0100/0101/0102 ledger rows currently sit at `reasoning-capable` with `expert_demo=false`. The next status tier requires evidence beyond the universal lanes. +- **Expert-demo ratification.** All ADR-0097/0100/0101/0102 ledger rows currently sit at `reasoning-capable` with `expert_demo=false`. ADR-0105 is reserved for the expert-demo promotion contract. No ADR currently sits in a "Proposed but unimplemented" state. @@ -138,7 +140,7 @@ No ADR currently sits in a "Proposed but unimplemented" state. | `mathematics_logic` | ADR-0097 | `en_mathematics_logic_v1` | All nine ADR-0091 predicates pass; ledger row is `reasoning-capable`; `expert_demo` remains false; lanes include positive coverage, inference closure, and fabrication control. | | `physics` | ADR-0100 | `en_physics_v1` | All nine predicates pass; causal/modal operator coverage meets threshold; ledger row is `reasoning-capable`; `expert_demo` remains false. | | `systems_software` | ADR-0101 | `en_systems_software_v1` | All nine predicates pass; transitive/causal operator coverage meets threshold; ledger row is `reasoning-capable`; `symbolic_logic` is the v1 closest-fit eval lane. | -| `hebrew_greek_textual_reasoning` | ADR-0102 | `grc_logos_micro_v1`, `grc_logos_cognition_v1`, `he_logos_micro_v1`, `he_core_cognition_v1` | First multi-pack ratification; all four packs carry uniform contract fields; causal/contradiction operator coverage meets threshold; universal lanes are declared until language-specific holdouts land. | +| `hebrew_greek_textual_reasoning` | ADR-0102 + ADR-0103 | `grc_logos_micro_v1`, `grc_logos_cognition_v1`, `he_logos_micro_v1`, `he_core_cognition_v1` | First multi-pack ratification; all four packs carry uniform contract fields; causal/contradiction operator coverage meets threshold; ADR-0103 attaches Hebrew and Koine Greek fluency lanes with `dev/public/holdout` coverage. | --- @@ -160,9 +162,9 @@ Runtime contracts for the chain are pinned in [`docs/runtime_contracts.md`](../r ADR-0027 through ADR-0045 establish the identity / safety / ethics pack architecture with deterministic remediation, audit completeness, telemetry, operator readout, audit-tour demo, pack measurements, a worked-example medical ethics pack, and long-context comparison measurements. -### Evidence-governed domain chain — ADR-0091 through ADR-0102 +### Evidence-governed domain chain — ADR-0091 through ADR-0103 -ADR-0091 through ADR-0102 establish the current domain-ratification substrate: +ADR-0091 through ADR-0103 establish the current domain-ratification substrate: ```text contract definition @@ -174,6 +176,8 @@ validator / ledger enforcement negative-control fabrication lane ↓ reasoning-capable domain ratification + ↓ +language-specific fluency lane attachment ``` No domain claim should be treated as mature merely because a pack exists. Capability status belongs to the generated ledger and its evidence predicates. diff --git a/evals/hebrew_fluency/contract.md b/evals/hebrew_fluency/contract.md index 2cf719fe..79c54911 100644 --- a/evals/hebrew_fluency/contract.md +++ b/evals/hebrew_fluency/contract.md @@ -35,6 +35,12 @@ grounding + word-order assembly through `_assemble`. `dev/cases.jsonl` : 1 case — smoke check for runner integration. +`holdouts/v1/cases.jsonl` +: 5 sealed plaintext Hebrew realization cases added for ADR-0103. + These cases are not referenced by the development split and complete + the `dev/public/holdout` requirement for attaching + `hebrew_fluency` to ADR-0102 ratified contracts. + ## Scoring rubric A case passes if the realized surface: diff --git a/evals/hebrew_fluency/gaps.md b/evals/hebrew_fluency/gaps.md index 4b763ff8..7b37d528 100644 --- a/evals/hebrew_fluency/gaps.md +++ b/evals/hebrew_fluency/gaps.md @@ -11,6 +11,9 @@ slot matching is *not* gated at v1 — the runtime currently folds multi-token Hebrew input to a single lexeme through articulation (a known limitation, see v2 below). +- Holdout status: ADR-0103 adds plaintext `holdouts/v1/` cases so the + lane now satisfies the `dev/public/holdout` requirement for + attachment to ADR-0102 reasoning-capable contracts. ## v2 unblock path — Hebrew construction coverage diff --git a/evals/hebrew_fluency/holdouts/v1/cases.jsonl b/evals/hebrew_fluency/holdouts/v1/cases.jsonl new file mode 100644 index 00000000..ffaa2bf5 --- /dev/null +++ b/evals/hebrew_fluency/holdouts/v1/cases.jsonl @@ -0,0 +1,5 @@ +{"id": "HEB-HLD_01", "construction": "C01", "construction_name": "simple_declarative", "language": "he", "proposition_graph": {"nodes": [{"node_id": "n1", "subject": "רוח", "predicate": "ברא", "obj": "חיים"}], "edges": []}, "accept_surfaces": ["ברא רוח חיים"], "constraints": {"must_contain": ["רוח", "ברא", "חיים"], "word_order": ["ברא", "רוח", "חיים"], "max_words": 6}} +{"id": "HEB-HLD_02", "construction": "C01", "construction_name": "simple_declarative", "language": "he", "proposition_graph": {"nodes": [{"node_id": "n1", "subject": "אדם", "predicate": "צרך", "obj": "בינה"}], "edges": []}, "accept_surfaces": ["צרך אדם בינה"], "constraints": {"must_contain": ["אדם", "צרך", "בינה"], "word_order": ["צרך", "אדם", "בינה"], "max_words": 6}} +{"id": "HEB-HLD_03", "construction": "C01", "construction_name": "simple_declarative", "language": "he", "proposition_graph": {"nodes": [{"node_id": "n1", "subject": "ראשית", "predicate": "ברא", "obj": "בריאה"}], "edges": []}, "accept_surfaces": ["ברא ראשית בריאה"], "constraints": {"must_contain": ["ראשית", "ברא", "בריאה"], "word_order": ["ברא", "ראשית", "בריאה"], "max_words": 6}} +{"id": "HEB-HLD_04", "construction": "C01", "construction_name": "simple_declarative", "language": "he", "proposition_graph": {"nodes": [{"node_id": "n1", "subject": "חסד", "predicate": "דבר", "obj": "שלום"}], "edges": []}, "accept_surfaces": ["דבר חסד שלום"], "constraints": {"must_contain": ["חסד", "דבר", "שלום"], "word_order": ["דבר", "חסד", "שלום"], "max_words": 6}} +{"id": "HEB-HLD_05", "construction": "C01", "construction_name": "simple_declarative", "language": "he", "proposition_graph": {"nodes": [{"node_id": "n1", "subject": "נפש", "predicate": "צרך", "obj": "נשמה"}], "edges": []}, "accept_surfaces": ["צרך נפש נשמה"], "constraints": {"must_contain": ["נפש", "צרך", "נשמה"], "word_order": ["צרך", "נפש", "נשמה"], "max_words": 6}} diff --git a/evals/koine_greek_fluency/contract.md b/evals/koine_greek_fluency/contract.md index 734242a1..2704c243 100644 --- a/evals/koine_greek_fluency/contract.md +++ b/evals/koine_greek_fluency/contract.md @@ -26,6 +26,12 @@ measured honestly. See `gaps.md` for the v2 unblock path. `dev/cases.jsonl` : 1 case — smoke check for runner integration. +`holdouts/v1/cases.jsonl` +: 5 sealed plaintext Koine Greek realization cases added for ADR-0103. + These cases are not referenced by the development split and complete + the `dev/public/holdout` requirement for attaching + `koine_greek_fluency` to ADR-0102 ratified contracts. + ## Scoring rubric A case passes if the realized surface: diff --git a/evals/koine_greek_fluency/gaps.md b/evals/koine_greek_fluency/gaps.md index 9c672cac..015c5643 100644 --- a/evals/koine_greek_fluency/gaps.md +++ b/evals/koine_greek_fluency/gaps.md @@ -9,6 +9,9 @@ - Rubric: **script + length** only. Lexeme-level slot matching is not gated at v1 for the same runtime-folding reason as Hebrew (see v2 §6 below). +- Holdout status: ADR-0103 adds plaintext `holdouts/v1/` cases so the + lane now satisfies the `dev/public/holdout` requirement for + attachment to ADR-0102 reasoning-capable contracts. ## v2 unblock path — Koine Greek construction coverage diff --git a/evals/koine_greek_fluency/holdouts/v1/cases.jsonl b/evals/koine_greek_fluency/holdouts/v1/cases.jsonl new file mode 100644 index 00000000..a2f1de03 --- /dev/null +++ b/evals/koine_greek_fluency/holdouts/v1/cases.jsonl @@ -0,0 +1,5 @@ +{"id": "GRC-HLD_01", "construction": "C01", "construction_name": "simple_declarative", "language": "grc", "proposition_graph": {"nodes": [{"node_id": "n1", "subject": "πνεῦμα", "predicate": "κτίζω", "obj": "ζωή"}], "edges": []}, "accept_surfaces": ["πνεῦμα ζωή κτίζω"], "constraints": {"must_contain": ["πνεῦμα", "κτίζω", "ζωή"], "word_order": ["πνεῦμα", "ζωή", "κτίζω"], "max_words": 6}} +{"id": "GRC-HLD_02", "construction": "C01", "construction_name": "simple_declarative", "language": "grc", "proposition_graph": {"nodes": [{"node_id": "n1", "subject": "ἄνθρωπος", "predicate": "λαμβάνω", "obj": "σύνεσις"}], "edges": []}, "accept_surfaces": ["ἄνθρωπος σύνεσις λαμβάνω"], "constraints": {"must_contain": ["ἄνθρωπος", "λαμβάνω", "σύνεσις"], "word_order": ["ἄνθρωπος", "σύνεσις", "λαμβάνω"], "max_words": 6}} +{"id": "GRC-HLD_03", "construction": "C01", "construction_name": "simple_declarative", "language": "grc", "proposition_graph": {"nodes": [{"node_id": "n1", "subject": "ἀγάπη", "predicate": "λέγω", "obj": "φιλία"}], "edges": []}, "accept_surfaces": ["ἀγάπη φιλία λέγω"], "constraints": {"must_contain": ["ἀγάπη", "λέγω", "φιλία"], "word_order": ["ἀγάπη", "φιλία", "λέγω"], "max_words": 6}} +{"id": "GRC-HLD_04", "construction": "C01", "construction_name": "simple_declarative", "language": "grc", "proposition_graph": {"nodes": [{"node_id": "n1", "subject": "αἰών", "predicate": "ἐρωτάω", "obj": "ἐπιστήμη"}], "edges": []}, "accept_surfaces": ["αἰών ἐπιστήμη ἐρωτάω"], "constraints": {"must_contain": ["αἰών", "ἐρωτάω", "ἐπιστήμη"], "word_order": ["αἰών", "ἐπιστήμη", "ἐρωτάω"], "max_words": 6}} +{"id": "GRC-HLD_05", "construction": "C01", "construction_name": "simple_declarative", "language": "grc", "proposition_graph": {"nodes": [{"node_id": "n1", "subject": "ἔρως", "predicate": "ἀποκρίνομαι", "obj": "στοργή"}], "edges": []}, "accept_surfaces": ["ἔρως στοργή ἀποκρίνομαι"], "constraints": {"must_contain": ["ἔρως", "ἀποκρίνομαι", "στοργή"], "word_order": ["ἔρως", "στοργή", "ἀποκρίνομαι"], "max_words": 6}} diff --git a/language_packs/data/grc_logos_cognition_v1/manifest.json b/language_packs/data/grc_logos_cognition_v1/manifest.json index b9d697a7..719716f0 100644 --- a/language_packs/data/grc_logos_cognition_v1/manifest.json +++ b/language_packs/data/grc_logos_cognition_v1/manifest.json @@ -11,7 +11,7 @@ "gate_engaged": true, "oov_policy": "fail_closed", "glosses_checksum": "6b1e83010b2065ceedb0988e2020ee13999a1883e6399f1ca8908235683d7e42", - "provenance": "adr-0102:reviewed:2026-05-21", + "provenance": "adr-0103:reviewed:2026-05-22", "domain_contract_version": 1, "domain_id": "hebrew_greek_textual_reasoning", "axioms": null, @@ -27,6 +27,16 @@ "lane": "fabrication_control", "version": "v1", "splits": ["dev", "public", "holdout"] + }, + { + "lane": "hebrew_fluency", + "version": "v1", + "splits": ["dev", "public", "holdout"] + }, + { + "lane": "koine_greek_fluency", + "version": "v1", + "splits": ["dev", "public", "holdout"] } ], "reviewers": ["shay-j"], diff --git a/language_packs/data/grc_logos_micro_v1/manifest.json b/language_packs/data/grc_logos_micro_v1/manifest.json index bd58aad4..4f4cea34 100644 --- a/language_packs/data/grc_logos_micro_v1/manifest.json +++ b/language_packs/data/grc_logos_micro_v1/manifest.json @@ -11,7 +11,7 @@ "gate_engaged": true, "oov_policy": "fail_closed", "glosses_checksum": "cfc5c3b3dafcd8290cff484039af34c8a17a826e40a3c8fa1ffe97e32c36934c", - "provenance": "adr-0102:reviewed:2026-05-21", + "provenance": "adr-0103:reviewed:2026-05-22", "domain_contract_version": 1, "domain_id": "hebrew_greek_textual_reasoning", "axioms": null, @@ -27,6 +27,16 @@ "lane": "fabrication_control", "version": "v1", "splits": ["dev", "public", "holdout"] + }, + { + "lane": "hebrew_fluency", + "version": "v1", + "splits": ["dev", "public", "holdout"] + }, + { + "lane": "koine_greek_fluency", + "version": "v1", + "splits": ["dev", "public", "holdout"] } ], "reviewers": ["shay-j"], diff --git a/language_packs/data/he_core_cognition_v1/manifest.json b/language_packs/data/he_core_cognition_v1/manifest.json index 40d2f055..daeb428d 100644 --- a/language_packs/data/he_core_cognition_v1/manifest.json +++ b/language_packs/data/he_core_cognition_v1/manifest.json @@ -11,7 +11,7 @@ "gate_engaged": true, "oov_policy": "fail_closed", "glosses_checksum": "286acaf29fd2b3cc01ff5537f2b1552788ba2d495f977517ec5e4acd2a564ac5", - "provenance": "adr-0102:reviewed:2026-05-21", + "provenance": "adr-0103:reviewed:2026-05-22", "domain_contract_version": 1, "domain_id": "hebrew_greek_textual_reasoning", "axioms": null, @@ -27,6 +27,16 @@ "lane": "fabrication_control", "version": "v1", "splits": ["dev", "public", "holdout"] + }, + { + "lane": "hebrew_fluency", + "version": "v1", + "splits": ["dev", "public", "holdout"] + }, + { + "lane": "koine_greek_fluency", + "version": "v1", + "splits": ["dev", "public", "holdout"] } ], "reviewers": ["shay-j"], diff --git a/language_packs/data/he_logos_micro_v1/manifest.json b/language_packs/data/he_logos_micro_v1/manifest.json index 2e4c9439..ab451bc1 100644 --- a/language_packs/data/he_logos_micro_v1/manifest.json +++ b/language_packs/data/he_logos_micro_v1/manifest.json @@ -11,7 +11,7 @@ "gate_engaged": true, "oov_policy": "fail_closed", "glosses_checksum": "2d00c18735fa81b6d1f3ece754c132924bf8a2b83241d1561370bef52e8816e1", - "provenance": "adr-0102:reviewed:2026-05-21", + "provenance": "adr-0103:reviewed:2026-05-22", "domain_contract_version": 1, "domain_id": "hebrew_greek_textual_reasoning", "axioms": null, @@ -27,6 +27,16 @@ "lane": "fabrication_control", "version": "v1", "splits": ["dev", "public", "holdout"] + }, + { + "lane": "hebrew_fluency", + "version": "v1", + "splits": ["dev", "public", "holdout"] + }, + { + "lane": "koine_greek_fluency", + "version": "v1", + "splits": ["dev", "public", "holdout"] } ], "reviewers": ["shay-j"], diff --git a/tests/test_adr_0100_0102_sibling_ratifications.py b/tests/test_adr_0100_0102_sibling_ratifications.py index be84fd36..8198cc69 100644 --- a/tests/test_adr_0100_0102_sibling_ratifications.py +++ b/tests/test_adr_0100_0102_sibling_ratifications.py @@ -45,7 +45,7 @@ _DOMAINS: dict[str, dict] = { }, }, "hebrew_greek_textual_reasoning": { - "adr": "adr-0102", + "adr": "adr-0103", "packs": ( "grc_logos_micro_v1", "grc_logos_cognition_v1", @@ -55,7 +55,12 @@ _DOMAINS: dict[str, dict] = { "claimed_operators": ("causal", "contradiction"), "min_intent_shapes": 3, "expected_chains": ["hebrew_greek_textual_reasoning_chains_v1"], - "expected_lanes": {"inference_closure", "fabrication_control"}, + "expected_lanes": { + "inference_closure", + "fabrication_control", + "hebrew_fluency", + "koine_greek_fluency", + }, }, }