From 21aa8b765f18433535619a00cea59c103ae7dd87 Mon Sep 17 00:00:00 2001 From: Shay Date: Fri, 5 Jun 2026 09:07:13 -0700 Subject: [PATCH 1/6] feat(l10): add finite grounding lexicon --- language_packs/data/l10_grounding_v1/lexicon.jsonl | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 language_packs/data/l10_grounding_v1/lexicon.jsonl diff --git a/language_packs/data/l10_grounding_v1/lexicon.jsonl b/language_packs/data/l10_grounding_v1/lexicon.jsonl new file mode 100644 index 00000000..ecc1da27 --- /dev/null +++ b/language_packs/data/l10_grounding_v1/lexicon.jsonl @@ -0,0 +1,10 @@ +{"arity":1,"entry_id":"l10-ground-001","epistemic_status":"coherent","l10_stateless":true,"language":"en","lemma":"l10_finite_entity","morphology_tags":["l10_grounding","finite_entity"],"operator_class":"entity_ground","pos":"NOUN","provenance_ids":["brief-c:l10-grounding:2026-06-05"],"requires_explicit_witness":true,"semantic_domains":["l10.grounding.entity","logic.range_restriction"],"surface":"l10 finite entity"} +{"arity":2,"entry_id":"l10-ground-002","epistemic_status":"coherent","l10_stateless":true,"language":"en","lemma":"l10_witness_binding","morphology_tags":["l10_grounding","witness"],"operator_class":"witness_bind","pos":"NOUN","provenance_ids":["brief-c:l10-grounding:2026-06-05"],"requires_explicit_witness":true,"semantic_domains":["l10.grounding.witness","logic.existential"],"surface":"l10 witness binding"} +{"arity":2,"entry_id":"l10-ground-003","epistemic_status":"coherent","l10_stateless":true,"language":"en","lemma":"l10_range_restriction","morphology_tags":["l10_grounding","range_restriction"],"operator_class":"range_guard","pos":"NOUN","provenance_ids":["brief-c:l10-grounding:2026-06-05"],"requires_explicit_witness":true,"semantic_domains":["l10.grounding.range","logic.quantifier.guard"],"surface":"l10 range restriction"} +{"arity":3,"entry_id":"l10-ground-004","epistemic_status":"coherent","l10_stateless":true,"language":"en","lemma":"l10_grounded_universal","morphology_tags":["l10_grounding","universal","finite_guarded"],"operator_class":"forall_guarded_finite","pos":"NOUN","provenance_ids":["brief-c:l10-grounding:2026-06-05"],"requires_explicit_witness":true,"semantic_domains":["l10.grounding.quantifier","logic.universal"],"surface":"l10 grounded universal"} +{"arity":2,"entry_id":"l10-ground-005","epistemic_status":"coherent","l10_stateless":true,"language":"en","lemma":"l10_grounded_existential","morphology_tags":["l10_grounding","existential","finite_guarded"],"operator_class":"exists_grounded","pos":"NOUN","provenance_ids":["brief-c:l10-grounding:2026-06-05"],"requires_explicit_witness":true,"semantic_domains":["l10.grounding.quantifier","logic.existential"],"surface":"l10 grounded existential"} +{"arity":2,"entry_id":"l10-ground-006","epistemic_status":"coherent","l10_stateless":true,"language":"en","lemma":"l10_vacuous_truth_block","morphology_tags":["l10_grounding","vacuous_truth_guard"],"operator_class":"vacuity_refusal_guard","pos":"NOUN","provenance_ids":["brief-c:l10-grounding:2026-06-05"],"requires_explicit_witness":true,"semantic_domains":["l10.grounding.vacuity","logic.universal"],"surface":"l10 vacuous truth block"} +{"arity":2,"entry_id":"l10-ground-007","epistemic_status":"coherent","l10_stateless":true,"language":"en","lemma":"l10_contradiction_barrier","morphology_tags":["l10_grounding","contradiction_barrier"],"operator_class":"inconsistency_refusal_guard","pos":"NOUN","provenance_ids":["brief-c:l10-grounding:2026-06-05"],"requires_explicit_witness":false,"semantic_domains":["l10.grounding.consistency","logic.contradiction"],"surface":"l10 contradiction barrier"} +{"arity":1,"entry_id":"l10-ground-008","epistemic_status":"coherent","l10_stateless":true,"language":"en","lemma":"l10_no_explosion","morphology_tags":["l10_grounding","explosion_block"],"operator_class":"ex_falso_block","pos":"NOUN","provenance_ids":["brief-c:l10-grounding:2026-06-05"],"requires_explicit_witness":false,"semantic_domains":["l10.grounding.consistency","logic.paraconsistent_boundary"],"surface":"l10 no explosion"} +{"arity":1,"entry_id":"l10-ground-009","epistemic_status":"coherent","l10_stateless":true,"language":"en","lemma":"l10_finite_domain_closure","morphology_tags":["l10_grounding","finite_domain"],"operator_class":"domain_close_finite","pos":"NOUN","provenance_ids":["brief-c:l10-grounding:2026-06-05"],"requires_explicit_witness":true,"semantic_domains":["l10.grounding.finite_domain","logic.domain"],"surface":"l10 finite domain closure"} +{"arity":1,"entry_id":"l10-ground-010","epistemic_status":"coherent","l10_stateless":true,"language":"en","lemma":"l10_undecidable_refusal","morphology_tags":["l10_grounding","wrong_zero_refusal"],"operator_class":"undecidable_to_refuse","pos":"NOUN","provenance_ids":["brief-c:l10-grounding:2026-06-05"],"requires_explicit_witness":false,"semantic_domains":["l10.grounding.refusal","logic.epistemic_state"],"surface":"l10 undecidable refusal"} From 543e6c04f50dd23305069afb33b843cff3de4879 Mon Sep 17 00:00:00 2001 From: Shay Date: Fri, 5 Jun 2026 09:07:42 -0700 Subject: [PATCH 2/6] feat(l10): add finite grounding pack manifest --- .../data/l10_grounding_v1/manifest.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 language_packs/data/l10_grounding_v1/manifest.json diff --git a/language_packs/data/l10_grounding_v1/manifest.json b/language_packs/data/l10_grounding_v1/manifest.json new file mode 100644 index 00000000..b62787a4 --- /dev/null +++ b/language_packs/data/l10_grounding_v1/manifest.json @@ -0,0 +1,17 @@ +{ + "checksum": "829efd10d7f5fa74f1189ec6d621f2a12bc5e7a022fd7a3de436655fc8fe5603", + "collision_policy": "globally_unique_l10_prefixed_lemmas", + "definitional_layer": false, + "determinism_class": "D0", + "gate_engaged": false, + "l10_stateless": true, + "language": "en", + "normalization_policy": "unitize_versor", + "oov_policy": "fail_closed", + "pack_id": "l10_grounding_v1", + "provenance": "brief-c:l10-grounding:2026-06-05", + "role": "operational_base", + "script": "Latin", + "source_manifest": "l10_grounding_v1.lexicon.jsonl", + "version": "0.1.0" +} From fb3ca87fd0be59beb6285e46b2505b7b0b91d4f7 Mon Sep 17 00:00:00 2001 From: Shay Date: Fri, 5 Jun 2026 09:07:55 -0700 Subject: [PATCH 3/6] docs(l10): describe finite grounding pack --- .../data/l10_grounding_v1/README.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 language_packs/data/l10_grounding_v1/README.md diff --git a/language_packs/data/l10_grounding_v1/README.md b/language_packs/data/l10_grounding_v1/README.md new file mode 100644 index 00000000..e2bb0a5f --- /dev/null +++ b/language_packs/data/l10_grounding_v1/README.md @@ -0,0 +1,23 @@ +# l10_grounding_v1 + +Additive relational-predicate seed pack for the L10 stateless execution path. + +## Scope + +This pack contains only finite-entity grounding, range-restriction, vacuity, contradiction-barrier, and wrong=0 refusal primitives. It is not a general logic curriculum and does not introduce runtime behavior. + +## L10 constraints + +- Stateless: each row is self-contained and carries no external state dependency. +- Zero-dependency: no corpus, model, or online source is required to interpret the row. +- Finite-entity only: every positive relation is designed to require an explicit finite witness or guarded range. +- Fail closed: manifest OOV policy is `fail_closed`. +- Collision resistant: every lemma uses the `l10_` namespace to avoid collisions with existing packs. + +## Checksums + +- `lexicon.jsonl` sha256: `829efd10d7f5fa74f1189ec6d621f2a12bc5e7a022fd7a3de436655fc8fe5603` + +## Review note + +This pack is intentionally additive-only. Runtime loaders may ignore the additional L10 metadata fields until an explicit L10 loader is ratified. From 51c6852b0cb0b609e10d8d0fe7286a45bc092bd6 Mon Sep 17 00:00:00 2001 From: Shay Date: Fri, 5 Jun 2026 09:08:23 -0700 Subject: [PATCH 4/6] test(l10): add independent-gold adversarial logic fixtures --- evals/deductive_logic/fixtures/l10_adversarial.jsonl | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 evals/deductive_logic/fixtures/l10_adversarial.jsonl diff --git a/evals/deductive_logic/fixtures/l10_adversarial.jsonl b/evals/deductive_logic/fixtures/l10_adversarial.jsonl new file mode 100644 index 00000000..d604fc70 --- /dev/null +++ b/evals/deductive_logic/fixtures/l10_adversarial.jsonl @@ -0,0 +1,8 @@ +{"case_id":"l10-adv-001-vacuous-universal-no-witness","category":"vacuous_truth","finite_domain":["raven_a","raven_b"],"gold":{"epistemic_state":"UNDETERMINED","label":"refuse","reason":"Universal over an empty guarded range does not ground silver(raven_a).","wrong_value":0},"premises":[{"guard":{"args":["x"],"pred":"unicorn"},"implies":{"args":["x"],"pred":"silver"},"op":"forall_guarded","var":"x"},{"args":["raven_a"],"op":"closed_world_negative","pred":"unicorn"},{"args":["raven_b"],"op":"closed_world_negative","pred":"unicorn"}],"query":{"args":["raven_a"],"pred":"silver"},"symbolic_resolution":["range(unicorn) = \u2205 under finite_domain","forall_guarded is vacuously satisfied","query subject lacks explicit unicorn witness","no admissible entailment; refuse"]} +{"case_id":"l10-adv-002-contradiction-no-explosion","category":"contradictory_premises","finite_domain":["invoice_1"],"gold":{"epistemic_state":"CONTRADICTED","label":"refuse","reason":"The same entity is asserted paid and not_paid; no explosion from inconsistent premises.","wrong_value":0},"premises":[{"args":["invoice_1"],"op":"fact","pred":"paid"},{"args":["invoice_1"],"op":"fact","pred":"not_paid"},{"guard":{"args":["x"],"pred":"paid"},"implies":{"args":["x"],"pred":"has_receipt"},"op":"forall_guarded","var":"x"}],"query":{"args":["invoice_1"],"pred":"has_receipt"},"symbolic_resolution":["detect paid(invoice_1) \u2227 not_paid(invoice_1)","mark premise set inconsistent","block ex-falso entailment","refuse"]} +{"case_id":"l10-adv-003-range-restriction-blocks-link","category":"range_restriction","finite_domain":["alice","bob"],"gold":{"epistemic_state":"VERIFIED","label":"false","reason":"Alice is grounded in team_red only; the team_blue guard is not satisfied.","wrong_value":0},"premises":[{"args":["alice","team_red"],"op":"fact","pred":"member"},{"guard":{"args":["x","team_blue"],"pred":"member"},"implies":{"args":["x","vault_blue"],"pred":"can_access"},"op":"forall_guarded","var":"x"}],"query":{"args":["alice","vault_blue"],"pred":"can_access"},"symbolic_resolution":["member(alice, team_blue) absent from finite facts","guard fails for alice","implication cannot fire","query is false under finite closure"]} +{"case_id":"l10-adv-004-grounded-universal-entails","category":"grounded_entailment","finite_domain":["sam"],"gold":{"epistemic_state":"VERIFIED","label":"true","reason":"Sam is explicitly grounded and satisfies the guarded universal range.","wrong_value":0},"premises":[{"args":["sam"],"op":"fact","pred":"finite_entity"},{"args":["sam"],"op":"fact","pred":"student"},{"guard":{"args":["x"],"pred":"student"},"implies":{"args":["x"],"pred":"has_id"},"op":"forall_guarded","var":"x"}],"query":{"args":["sam"],"pred":"has_id"},"symbolic_resolution":["finite_entity(sam)","student(sam) satisfies guard","forall_guarded fires","entails has_id(sam)"]} +{"case_id":"l10-adv-005-existential-without-witness","category":"existential_grounding","finite_domain":["box_1","box_2"],"gold":{"epistemic_state":"UNDETERMINED","label":"refuse","reason":"An unbound existential does not identify box_1 as the witness.","wrong_value":0},"premises":[{"body":{"args":["x"],"pred":"contains_key"},"op":"exists_unbound","var":"x"}],"query":{"args":["box_1"],"pred":"contains_key"},"symbolic_resolution":["exists x contains_key(x) has no witness binding","box_1 is not independently bound","query would require hallucinated witness link","refuse"]} +{"case_id":"l10-adv-006-contradictory-rule-heads","category":"contradictory_premises","finite_domain":["node_a"],"gold":{"epistemic_state":"CONTRADICTED","label":"refuse","reason":"The same grounded guard entails incompatible heads; runtime must not choose one.","wrong_value":0},"premises":[{"args":["node_a"],"op":"fact","pred":"sensor_green"},{"guard":{"args":["x"],"pred":"sensor_green"},"implies":{"args":["x"],"pred":"safe"},"op":"forall_guarded","var":"x"},{"guard":{"args":["x"],"pred":"sensor_green"},"implies":{"args":["x"],"pred":"unsafe"},"op":"forall_guarded","var":"x"}],"query":{"args":["node_a"],"pred":"safe"},"symbolic_resolution":["sensor_green(node_a) grounds both rules","derive safe(node_a) and unsafe(node_a)","detect incompatible heads","refuse"]} +{"case_id":"l10-adv-007-negated-ground-false","category":"finite_closure","finite_domain":["door_1"],"gold":{"epistemic_state":"VERIFIED","label":"false","reason":"locked and unlocked are declared incompatible for the same grounded entity.","wrong_value":0},"premises":[{"args":["door_1"],"op":"fact","pred":"finite_entity"},{"args":["door_1"],"op":"fact","pred":"locked"}],"query":{"args":["door_1"],"pred":"unlocked"},"symbolic_resolution":["finite_entity(door_1)","locked(door_1)","incompatible(locked, unlocked)","unlocked(door_1) is false"]} +{"case_id":"l10-adv-008-out-of-domain-entity","category":"range_restriction","finite_domain":["asset_1"],"gold":{"epistemic_state":"SCOPE_BOUNDARY","label":"refuse","reason":"asset_1 is grounded, but not in the account range required by the rule.","wrong_value":0},"premises":[{"args":["asset_1"],"op":"fact","pred":"asset"},{"guard":{"args":["x"],"pred":"account"},"implies":{"args":["x"],"pred":"reconciled"},"op":"forall_guarded","var":"x"}],"query":{"args":["asset_1"],"pred":"reconciled"},"symbolic_resolution":["asset(asset_1) only","account(asset_1) absent","range-restricted rule cannot fire","refuse instead of hallucinating account(asset_1)"]} From 6eccdb41ea268ea8c67b1b7e2dd2c6f1ae795642 Mon Sep 17 00:00:00 2001 From: Shay Date: Fri, 5 Jun 2026 09:08:42 -0700 Subject: [PATCH 5/6] docs(l10): propose finite grounding ADR --- docs/decisions/adr-012-l10-grounding.md | 101 ++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 docs/decisions/adr-012-l10-grounding.md diff --git a/docs/decisions/adr-012-l10-grounding.md b/docs/decisions/adr-012-l10-grounding.md new file mode 100644 index 00000000..e5efe7bf --- /dev/null +++ b/docs/decisions/adr-012-l10-grounding.md @@ -0,0 +1,101 @@ +# ADR-012-L10-Grounding — L10 finite grounding pack and adversarial wrong=0 fixtures + +Status: Proposed +Date: 2026-06-05 +Scope: Additive pack + additive eval fixtures only +Branch: `feat/l10-grounding-pack-evals-adr` + +## Context + +CORE is migrating toward an L10 runtime thread: a stateless, hyper-efficient, content-addressed execution layer. The transition must preserve CORE's existing doctrine: deterministic replay, refusal before invention, finite proof surfaces, and geometric reasoning over compiled structure rather than probabilistic guessing. + +The immediate failure class is not arithmetic. It is relational grounding. A system that treats vacuous universals, unbound existentials, or contradictory premise sets as license to fabricate relational links will pass superficial natural-language tests while violating CORE's wrong=0 doctrine. + +This ADR proposes an additive seed pack and an additive adversarial fixture set for the L10 transition. No existing runtime, parser, solver, loader, or pack is modified. + +## Decision + +Adopt `language_packs/data/l10_grounding_v1/` as the first L10-oriented grounding pack. + +The pack contains finite-domain relational primitives only: + +- finite entity grounding +- witness binding +- range restriction +- guarded universal +- grounded existential +- vacuous-truth refusal guard +- contradiction barrier +- no-explosion barrier +- finite-domain closure +- undecidable-refusal mapping + +Every lemma is namespaced with `l10_` to avoid global lemma collisions. The pack manifest uses `oov_policy = "fail_closed"` and declares `l10_stateless = true`. + +Adopt `evals/deductive_logic/fixtures/l10_adversarial.jsonl` as independent-gold adversarial cases for wrong=0 behavior. Gold labels are symbolic, not model-inferred. The fixture set explicitly covers vacuous truth, range restriction, contradictory premises, unbound existential witnesses, finite closure, and no-explosion refusal. + +## Relationship to CORE-AI geometric reasoning doctrine + +CORE's geometric doctrine requires that meaning be carried through stable structure and admissible transformations, not guessed associations. L10 grounding preserves that doctrine by refusing to project an ungrounded relational edge into the substrate. + +For a future L10 compiler, these primitives should lower into content-addressed operators whose admissibility depends on explicit finite witnesses and guards. A universal over an empty guard may be logically vacuous, but it must not create an entity-specific rotor edge. A contradictory premise set may identify a real boundary, but it must not explode into arbitrary entailments. + +## Stateless execution alignment + +The pack and fixtures are L10-compatible because: + +1. All rows are self-contained JSON records. +2. No row depends on mutable global state, online lookup, model inference, or hidden cache. +3. All fixture gold labels are derivable from finite premise lists. +4. The fixture format includes explicit `finite_domain`, `premises`, `query`, `gold`, and `symbolic_resolution` fields. +5. OOV behavior is fail-closed by manifest declaration. + +## Wrong=0 doctrine + +The expected wrong value for every fixture is `0`. Any uncertain or inconsistent proposition must resolve to `refuse`, not a guessed truth value. + +This is especially load-bearing for: + +- vacuous universals with no explicit witness +- existential claims without a bound witness +- range-restricted rules whose guard is not satisfied +- premise sets that derive incompatible heads +- contradictory entity facts + +## Checksums + +- `language_packs/data/l10_grounding_v1/lexicon.jsonl`: `829efd10d7f5fa74f1189ec6d621f2a12bc5e7a022fd7a3de436655fc8fe5603` +- `evals/deductive_logic/fixtures/l10_adversarial.jsonl`: `beda988f019b5431a3ab6e817b463a165bde719c7597f3b6a7f572107e1db123` + +## Consequences + +Positive: + +- Establishes a clean L10 seed surface without refactoring existing code. +- Gives the wrong=0 gate concrete adversarial cases before the L10 runtime exists. +- Prevents hallucinated relation links from being treated as legitimate inference. + +Negative / deferred: + +- No runtime loader is added in this PR. +- No test harness is added in this PR. +- The filename requested here is `adr-012-l10-grounding.md`; this is a working L10 proposal and should be reconciled with the existing ADR registry before final numbering or merge. + +## Verification plan + +To be completed in the Claude lane or local CI after review: + +1. Confirm all `lemma` values in `l10_grounding_v1/lexicon.jsonl` are globally unique across every pack. +2. Confirm the lexicon checksum matches the manifest checksum. +3. Confirm the adversarial fixture checksum matches this ADR. +4. Add a future symbolic runner that derives each fixture gold label without model inference. +5. Require wrong=0: no false positives, no hallucinated links, no ex-falso entailment. + +## Non-goals + +- No serving-code mutation. +- No eval-runner mutation. +- No parser mutation. +- No loader mutation. +- No new dependency. +- No empirical claim that the fixtures pass before they are run. From bbf75ff1950c8ecd44a0f4daba7d3d24514809b1 Mon Sep 17 00:00:00 2001 From: Shay Date: Fri, 5 Jun 2026 10:01:17 -0700 Subject: [PATCH 6/6] docs(l10): reconcile grounding ADR to registry (ADR-0210) + flag gold consistency Rename adr-012-l10-grounding.md -> ADR-0210-l10-grounding-pack.md: the requested number collided with ADR-0012-core-ingest-governance-layer.md and did not follow the ADR-NNNN convention. 0210 is the next free number. Record the one latent soundness item: l10-adv-003 (false) vs l10-adv-008 (refuse) take different stances on an unsatisfied guard; the discriminating principle (same-sort negative -> false; cross-sort mismatch -> refuse) must be encoded by the future symbolic runner before the fixtures become a live wrong=0 oracle. Pack + fixtures remain inert and byte-identical. --- ...ding.md => ADR-0210-l10-grounding-pack.md} | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) rename docs/decisions/{adr-012-l10-grounding.md => ADR-0210-l10-grounding-pack.md} (76%) diff --git a/docs/decisions/adr-012-l10-grounding.md b/docs/decisions/ADR-0210-l10-grounding-pack.md similarity index 76% rename from docs/decisions/adr-012-l10-grounding.md rename to docs/decisions/ADR-0210-l10-grounding-pack.md index e5efe7bf..0d44d477 100644 --- a/docs/decisions/adr-012-l10-grounding.md +++ b/docs/decisions/ADR-0210-l10-grounding-pack.md @@ -1,4 +1,4 @@ -# ADR-012-L10-Grounding — L10 finite grounding pack and adversarial wrong=0 fixtures +# ADR-0210 — L10 finite grounding pack and adversarial wrong=0 fixtures Status: Proposed Date: 2026-06-05 @@ -79,7 +79,31 @@ Negative / deferred: - No runtime loader is added in this PR. - No test harness is added in this PR. -- The filename requested here is `adr-012-l10-grounding.md`; this is a working L10 proposal and should be reconciled with the existing ADR registry before final numbering or merge. +- Reconciled with the existing ADR registry at merge: numbered `ADR-0210` + (the originally requested `adr-012-l10-grounding.md` collided with the + existing `ADR-0012-core-ingest-governance-layer.md` and did not follow the + `ADR-NNNN` convention). + +## Open reconciliation item (must resolve before the fixtures are wired) + +The adversarial fixtures encode two different responses to "the query +subject is in `finite_domain` but the guard relation is unsatisfied": + +- `l10-adv-003` resolves to `label: false` / `VERIFIED` (the subject is + grounded in the same relation sort — `member(alice, team_red)` — just not + the guarded value, so closed-world negation makes the query false). +- `l10-adv-008` resolves to `label: refuse` / `SCOPE_BOUNDARY` (the subject + is grounded only in a *different* sort — `asset(asset_1)`, not + `account(...)` — so the rule's range is type-incommensurate and the engine + refuses rather than concluding false). + +That distinction (same-sort negative ⇒ `false`; cross-sort/type-mismatch ⇒ +`refuse`) is defensible but is not yet stated as a single decision +procedure. A future symbolic runner (verification-plan item 4) MUST encode +the discriminating principle explicitly before these labels become a live +oracle; otherwise the two cases are an inconsistent gold and would not be a +sound independent check. Until then the fixtures are an inert proposal, not +a wired wrong=0 lane. ## Verification plan