Lane 4: Registry Consolidation (language_packs to packs)

This commit is contained in:
Shay 2026-07-04 15:11:28 -07:00
parent 2a17d5b6f3
commit f6c1f01a13
382 changed files with 520 additions and 518 deletions

View file

@ -26,7 +26,7 @@ The cognitive path is centered on:
- `teaching/correction.py`, `teaching/review.py`, `teaching/store.py`
- `evals/*`
- `calibration/*`
- `language_packs/data/en_core_cognition_v1`
- `packs/data/en_core_cognition_v1`
The runtime response contract is documented in `docs/runtime_contracts.md`.
Follow it.
@ -42,7 +42,7 @@ versor_condition(F) < 1e-6
Allowed construction/closure sites:
- `ingest/gate.py`
- `language_packs/compiler.py` / vocabulary construction
- `packs/compiler.py` / vocabulary construction
- `algebra/versor.py`
Forbidden hot-path repair sites:

View file

@ -59,7 +59,7 @@ Fix the operator or construction boundary that violated it.
### Allowed normalization boundaries
Normalization / closure / canonicalization belongs only at explicit construction or algebra boundaries, such as:
- `ingest/gate.py`
- `language_packs/compiler.py`
- `packs/compiler.py`
- `algebra/versor.py`
- `sensorium/*/canonical.py`
- `session/context.py` for session-scoped **semantic anchoring** of the field toward the session concept-attractor (the anchor pull, hemisphere consistency). Allowed ONLY because every such op (1) preserves `versor_condition` BY CONSTRUCTION — composed from `rotor_power` / `word_transition_rotor` / `versor_apply` on the Spin manifold, never a post-hoc `unitize`/grade-projection — AND (2) carries semantic meaning in the cognitive model.

View file

@ -17,9 +17,9 @@ from __future__ import annotations
import json
from pathlib import Path
from language_packs.schema import AlignmentEdge
from packs.schema import AlignmentEdge
_DATA_DIR = Path(__file__).parent.parent / "language_packs" / "data"
_DATA_DIR = Path(__file__).parent.parent / "packs" / "data"
class AlignmentGraph:
@ -74,7 +74,7 @@ def load_alignment(
"""
Load AlignmentEdge records from <data_root>/<pack_id>/alignment.jsonl.
``data_root`` defaults to the committed ``language_packs/data`` tree; pass
``data_root`` defaults to the committed ``packs/data`` tree; pass
an alternate root (e.g. a test-fixture copy) to read packs from elsewhere
without forking the parser.

View file

@ -288,7 +288,7 @@ def run_footprint(*, pack_id: str = "en_core_cognition_v1") -> FootprintReport:
rss_post = _rss_bytes()
py_bytes, py_modules = _measure_python_runtime()
pack_path = PROJECT_ROOT / "language_packs" / "data" / pack_id
pack_path = PROJECT_ROOT / "packs" / "data" / pack_id
vault_path = PROJECT_ROOT / "vault"
rust_path = _rust_artifact_path()
seed_packs_path = PROJECT_ROOT / "packs"

View file

@ -152,7 +152,7 @@ def bench_backend_speedup() -> BenchResult:
will be tracked when the doctrine clock advances.
"""
from field.operators import GraphDiffusionOperator
from language_packs.compiler import load_pack
from packs.compiler import load_pack
from scripts.run_pulse import _build_manifold
_, manifold = load_pack("en_core_cognition_v1")
@ -225,7 +225,7 @@ def bench_versor_closure_audit() -> BenchResult:
"""Run pulse for all eval cases, verify versor_condition < 1e-6 at every step."""
from algebra.backend import versor_condition
from field.operators import GraphDiffusionOperator, ConstraintCorrectionOperator
from language_packs.compiler import load_pack
from packs.compiler import load_pack
from scripts.run_pulse import _build_manifold
_, manifold = load_pack("en_core_cognition_v1")

View file

@ -60,7 +60,7 @@ _ANCHOR_LENS_SUBSTRATE_PACK_IDS: dict[str, tuple[str, ...]] = {
_PACK_LEXICON_PATH = (
Path(__file__).resolve().parent.parent
/ "language_packs"
/ "packs"
/ "data"
/ PACK_ID
/ "lexicon.jsonl"
@ -76,7 +76,7 @@ _PACK_LEXICON_PATH = (
# lemmas — only lens-engagement reads from here.
_COLLAPSE_ANCHORS_LEXICON_PATH = (
Path(__file__).resolve().parent.parent
/ "language_packs"
/ "packs"
/ "data"
/ "en_collapse_anchors_v1"
/ "lexicon.jsonl"
@ -130,7 +130,7 @@ def _frame_gloss(lemma: str, pos: str, gloss: str) -> str:
* (unknown) -> "{Lemma}: {gloss}." (back-compat fallback)
The glosses are authored to match these frames exactly (see
the subagent briefs and ``language_packs/data/<pack>/glosses.jsonl``).
the subagent briefs and ``packs/data/<pack>/glosses.jsonl``).
Capitalization is applied only to the framed surface, never to
the lemma in the lexicon (which stays lowercase by convention).
"""
@ -253,7 +253,7 @@ def _substrate_lexicon_by_entry_id(pack_id: str) -> dict[str, tuple[str, ...]]:
"""
lexicon_path = (
Path(__file__).resolve().parent.parent
/ "language_packs"
/ "packs"
/ "data"
/ pack_id
/ "lexicon.jsonl"

View file

@ -69,7 +69,7 @@ DEFAULT_RESOLVABLE_PACK_IDS: tuple[str, ...] = (
"en_collapse_anchors_v1",
)
_PACK_ROOT = Path(__file__).resolve().parent.parent / "language_packs" / "data"
_PACK_ROOT = Path(__file__).resolve().parent.parent / "packs" / "data"
@lru_cache(maxsize=16)

View file

@ -107,7 +107,7 @@ from generate.result import GenerationResult
from generate.stream import generate
from generate.surface import SentenceAssembler, SentencePlan, SurfaceContext
from ingest.gate import inject
from language_packs import OOVPolicy, load_mounted_packs, load_pack, load_pack_entries
from packs import OOVPolicy, load_mounted_packs, load_pack, load_pack_entries
from persona.motor import PersonaMotor
from session.context import SessionContext
from session.correction import CorrectionPass

View file

@ -2,7 +2,7 @@
Wires the five follow-up items from ADR-0091 §"Follow-up Work" into a
single evidence-bearing report. The existing parser
(:func:`language_packs.domain_contract.parse_domain_contract`) handles
(:func:`packs.domain_contract.parse_domain_contract`) handles
structural validation; this module layers the nine semantic predicates
from ADR-0091 §"Validation Semantics" on top.
@ -34,7 +34,7 @@ from core.capability.reviewers import (
load_reviewer_registry,
)
from core.capability.sources import LEDGER_SOURCES
from language_packs.domain_contract import (
from packs.domain_contract import (
DomainContractValidation,
DomainPackContract,
validate_domain_contract_pack,
@ -113,7 +113,7 @@ def _predicate_p1_manifest_valid(
lands, this predicate inherits the improvement.
"""
try:
from language_packs import compiler as pack_compiler
from packs import compiler as pack_compiler
loader = getattr(pack_compiler, "load_pack", None)
if loader is None:
@ -121,7 +121,7 @@ def _predicate_p1_manifest_valid(
predicate_id="P1",
title="manifest/checksum valid",
passed=False,
notes="language_packs.compiler.load_pack not available",
notes="packs.compiler.load_pack not available",
)
loader(pack_id)
except Exception as exc: # pylint: disable=broad-except
@ -486,7 +486,7 @@ def evaluate_domain_contract(
- ``reviewer_registry`` injects a parsed registry (avoids re-loading
from disk per pack).
"""
root = data_root or (_REPO_ROOT / "language_packs" / "data")
root = data_root or (_REPO_ROOT / "packs" / "data")
validation: DomainContractValidation = validate_domain_contract_pack(
pack_id, data_root=root

View file

@ -49,7 +49,7 @@ _REPO_ROOT = Path(__file__).resolve().parent.parent.parent
# The math domain's operator pack — same constant the solver uses.
DEFAULT_MATH_PACK_ID: str = "en_arithmetic_v1"
DEFAULT_MATH_LEXICON: Path = (
_REPO_ROOT / "language_packs" / "data" / DEFAULT_MATH_PACK_ID / "lexicon.jsonl"
_REPO_ROOT / "packs" / "data" / DEFAULT_MATH_PACK_ID / "lexicon.jsonl"
)
# Default B3 lane location.

View file

@ -29,7 +29,7 @@ from core.capability.reviewers import (
)
from core.capability.sources import LEDGER_SOURCES
from core.config import DEFAULT_CONFIG
from language_packs.domain_contract import validate_domain_contract_pack
from packs.domain_contract import validate_domain_contract_pack
_REPO_ROOT = Path(__file__).resolve().parent.parent.parent
_CHAINS_PER_OPERATOR_DOMAIN = 8
@ -109,12 +109,12 @@ def _latest_eval_result(lane: str, version: str, split: str) -> dict[str, Any]:
def _manifest_for_pack(pack_id: str) -> dict[str, Any]:
path = _REPO_ROOT / "language_packs" / "data" / pack_id / "manifest.json"
path = _REPO_ROOT / "packs" / "data" / pack_id / "manifest.json"
return _load_json(path)
def _pack_lemmas(pack_id: str) -> set[str]:
root = _REPO_ROOT / "language_packs" / "data" / pack_id
root = _REPO_ROOT / "packs" / "data" / pack_id
path = root / "lexicon.jsonl"
lemmas: set[str] = set()
if not path.exists():
@ -139,7 +139,7 @@ def _count_jsonl(path: Path) -> int:
def _pack_metrics(pack_id: str) -> dict[str, Any]:
root = _REPO_ROOT / "language_packs" / "data" / pack_id
root = _REPO_ROOT / "packs" / "data" / pack_id
manifest = _manifest_for_pack(pack_id)
lexicon_path = root / str(manifest.get("lexicon", "lexicon.jsonl"))
glosses_path = root / "glosses.jsonl"

View file

@ -979,7 +979,7 @@ _DEFAULT_OUTPUT_PATH = _MATH_PROPOSALS_DIR / "proposals.jsonl"
def _validate_output_path(raw: str | None) -> Path:
"""Reject output paths that escape teaching/math_proposals/.
Mirrors :func:`language_packs.compiler._validate_pack_id` trust-boundary
Mirrors :func:`packs.compiler._validate_pack_id` trust-boundary
discipline: path-traversal and absolute paths are rejected before any
filesystem access.
@ -3362,7 +3362,7 @@ def build_parser() -> argparse.ArgumentParser:
teaching_compile_pack.add_argument(
"--pack",
default=None,
help="pack root path (default: language_packs/data/en_core_math_v1)",
help="pack root path (default: packs/data/en_core_math_v1)",
)
teaching_compile_pack.add_argument(
"--json",

View file

@ -48,7 +48,7 @@ def cmd_capability_domain_contract(args: argparse.Namespace) -> int:
The legacy structural-only output remains available via
``--structural-only`` for callers that depend on the prior shape.
"""
from language_packs.domain_contract import validate_domain_contract_pack
from packs.domain_contract import validate_domain_contract_pack
if getattr(args, "structural_only", False):
report = validate_domain_contract_pack(args.pack_id).as_dict()

View file

@ -20,7 +20,7 @@ IMPORT_CHECKS: tuple[tuple[str, str], ...] = (
("demos", "demos.claude_tool_authority"),
("engine_state", "engine_state"),
("evals", "evals.framework"),
("language_packs", "language_packs"),
("packs", "packs"),
("morphology", "morphology.registry"),
("packs", "packs.safety.loader"),
("scripts", "scripts.run_pulse"),
@ -54,13 +54,13 @@ def cmd_doctor(args: argparse.Namespace, *, repo_root: Path = DEFAULT_REPO_ROOT)
if args.packs:
try:
from language_packs import list_packs
from packs import list_packs
packs = list_packs()
except Exception as exc:
ok = False
print(
f"FAIL packs language_packs.list_packs: {exc.__class__.__name__}: {exc}"
f"FAIL packs packs.list_packs: {exc.__class__.__name__}: {exc}"
)
else:
print("packs:")

View file

@ -11,7 +11,7 @@ from core.cli import _die, _REPO_ROOT, _run
def cmd_pack_list(args: argparse.Namespace) -> int:
"""List compiled language packs."""
from language_packs import list_packs
from packs import list_packs
packs = list_packs()
if not packs:
@ -24,7 +24,7 @@ def cmd_pack_list(args: argparse.Namespace) -> int:
def cmd_pack_verify(args: argparse.Namespace) -> int:
"""Verify one language pack checksum."""
return _run(sys.executable, "-m", "language_packs", "verify", args.pack_id)
return _run(sys.executable, "-m", "packs", "verify", args.pack_id)
def cmd_pack_validate(args: argparse.Namespace) -> int:

View file

@ -876,14 +876,14 @@ def cmd_teaching_compile_pack(args: argparse.Namespace) -> int:
"""
from pathlib import Path
from language_packs.compile_pack import compile_pack
from packs.compile_pack import compile_pack
pack_root = (
Path(args.pack)
if args.pack
else (
Path(__file__).resolve().parent.parent
/ "language_packs"
/ "packs"
/ "data"
/ "en_core_math_v1"
)

View file

@ -248,7 +248,7 @@ def cmd_check(
"field",
"generate",
"ingest",
"language_packs",
"packs",
"morphology",
"persona",
"sensorium",

View file

@ -127,7 +127,7 @@ runs and ADR-0055 discovery candidates.
| SPECULATIVE-only invariant | `ContemplationFinding.__post_init__` raises on any non-SPECULATIVE status | always | ✅ pinned by test |
| Deterministic replay | two `contemplate_*` calls on the same inputs → identical `run_id` and `as_dict()` | byte-identical | ✅ pinned by test |
| Sink path is additive | the `ContemplationRun` blob is byte-identical whether or not a sink is supplied | byte-identical | ✅ pinned by test |
| No pack mutation | `language_packs/` tree mtimes unchanged across a `contemplate_*` invocation | true | ✅ pinned by test |
| No pack mutation | `packs/` tree mtimes unchanged across a `contemplate_*` invocation | true | ✅ pinned by test |
| Predicate split | `missed_contradiction` and `false_contradiction_flag` produce distinct `proposed_action` text | distinct | ✅ pinned by test |
| Lane config_hash separation | `contemplate_frontier_reports` and `contemplate_contradiction_reports` produce distinct `config_hash` on identical input paths | distinct | ✅ pinned by test |

View file

@ -160,7 +160,7 @@ def canonical_json(payload: dict[str, Any]) -> bytes:
_TRACKED_MODULES: tuple[str, ...] = (
"chat.telemetry",
"chat.runtime",
"language_packs.compiler",
"packs.compiler",
)

View file

@ -662,7 +662,7 @@ domain.
#### Domain Pack Contract v1 (ADR-0091)
A pack manifest at `language_packs/data/<pack_id>/manifest.json`
A pack manifest at `packs/data/<pack_id>/manifest.json`
satisfies the contract iff all nine predicates hold:
1. **lemma_coverage** — declared lemmas resolve in `lexicon.jsonl`.

View file

@ -123,7 +123,7 @@ light, life, spirit, truth, covenant, grace, kingdom, creation.
## Implementation Order
1. Terminology and schema foundation (`language_packs/schema.py`).
1. Terminology and schema foundation (`packs/schema.py`).
2. Pack roles and OOV policy in `sensorium`.
3. Split text adapters into English, Hebrew, Koine Greek specializations.
4. Add grammar scaffold artifacts.

View file

@ -131,7 +131,7 @@ typed surfaces:
`ACCEPTED` / `REJECTED_IDENTITY` axis. Accepting a proposal
is not the same as ratifying it as `COHERENT` — the two are
orthogonal and both required for admission as evidence.
- `language_packs/data/*/lexicon.jsonl` — new optional field
- `packs/data/*/lexicon.jsonl` — new optional field
`epistemic_status` (default `COHERENT` for the seed
vocabulary; deliberate-curator-reviewed at pack version
bumps). No retroactive tagging without review.

View file

@ -21,7 +21,7 @@ doctrine and converts the live properties into type-level and test-level
guards:
1. `core pack validate` dynamic validator execution.
2. Language / source pack loading via `language_packs.compiler`.
2. Language / source pack loading via `packs.compiler`.
3. OOV token grounding error messages.
4. Pack mutation proposal-only enforcement.
@ -50,7 +50,7 @@ boundary holds. Result: the boundary is doctrinally complete.
### Surface 2 — Language / source pack loading
**Audited state — gap found.** `language_packs/compiler.py` exposed
**Audited state — gap found.** `packs/compiler.py` exposed
three public entrypoints — `load_pack(pack_id)`,
`load_pack_entries(pack_id)`, and `load_mounted_packs(pack_ids)` — that
concatenated their argument straight into a filesystem path
@ -149,7 +149,7 @@ fallback, approximate recall, and unreviewed mutation*. This ADR:
deterministic and pure.
- **Adds no broad infrastructure.** Two new small modules
(`core/_safe_display.py`, the `_validate_pack_id` helper inside
`language_packs/compiler.py`) and three new test files.
`packs/compiler.py`) and three new test files.
- **Pins the boundary in tests.** The invariants previously enforced
by convention now fail closed in CI.
@ -161,7 +161,7 @@ fallback, approximate recall, and unreviewed mutation*. This ADR:
- New module `core/_safe_display.py` — central sanitiser for user-
controlled fragments in error / log messages.
- `language_packs/compiler.py` gains `_validate_pack_id` and wires it
- `packs/compiler.py` gains `_validate_pack_id` and wires it
into `load_pack`, `load_pack_entries`, and `load_mounted_packs`.
- Three new test files:
- `tests/test_safe_display.py` (20 tests)

View file

@ -49,7 +49,7 @@ turn ─► session vault (ephemeral, exact CGA recall)
ratified packs
(packs/identity/, packs/safety/, packs/ethics/, language_packs/)
(packs/identity/, packs/safety/, packs/ethics/, packs/)
```
### Tier 1 — Session vault (`vault/store.py`)
@ -90,7 +90,7 @@ turn ─► session vault (ephemeral, exact CGA recall)
### Tier 4 — Ratified packs
- `packs/identity/`, `packs/safety/`, `packs/ethics/`,
`language_packs/data/*`.
`packs/data/*`.
- Self-sealed via companion `.mastery_report.json`; verified at
startup in production mode.
- `PackMutationProposal` (ADR-0051 lineage) is the only path that

View file

@ -174,7 +174,7 @@ chat/runtime.py fall-through refactor + attach_
chat/teaching_grounding.py relations_chains_v2 registered
core/cli.py oov-gaps + oov-queue subcommands
core/config.py relations_v2 in input_packs defaults
language_packs/data/en_core_relations_v2/ NEW pack (8 lemmas + manifest)
packs/data/en_core_relations_v2/ NEW pack (8 lemmas + manifest)
teaching/oov_sink.py NEW (~150 lines)
teaching/oov_gaps.py NEW (~165 lines)
teaching/oov_promotion.py NEW (~120 lines)

View file

@ -30,7 +30,7 @@ substrates**, not the same thing in different clothes. That axis is
The substrate to deliver it already sits half-built on disk.
* `language_packs/data/grc_logos_micro_v1` (11 entries, alignment),
* `packs/data/grc_logos_micro_v1` (11 entries, alignment),
`grc_logos_cognition_v1` (20 entries, **no alignment**),
`he_logos_micro_v1` (9 entries, alignment),
`he_core_cognition_v1` (20 entries, **no alignment**) —

View file

@ -109,7 +109,7 @@ checksum = hashlib.sha256(Path(lexicon_path).read_bytes()).hexdigest()
`grc_logos_cognition_v1/manifest.json` and
`he_core_cognition_v1/manifest.json` are updated with the new
checksums of their post-enrichment lexicon.jsonl files.
`python -m language_packs verify <pack_id>` is the canonical gate.
`python -m packs verify <pack_id>` is the canonical gate.
---
@ -136,7 +136,7 @@ runtime change.
L1.1 touches user-influenceable content (pack files) but the gate
remains the same as for every other language pack: manifest
checksum + `python -m language_packs verify`. The new entries are
checksum + `python -m packs verify`. The new entries are
authored by hand here, not ingested from an external source.
No dynamic imports, no filesystem traversal, no shell passthrough.
@ -146,9 +146,9 @@ No dynamic imports, no filesystem traversal, no shell passthrough.
## Verification
```
python -m language_packs verify grc_logos_cognition_v1 → OK
python -m language_packs verify he_core_cognition_v1 → OK
python -m language_packs list → both packs listed,
python -m packs verify grc_logos_cognition_v1 → OK
python -m packs verify he_core_cognition_v1 → OK
python -m packs list → both packs listed,
entry counts 29 / 23
python -m core.cli test --suite packs -q → green
python -m core.cli eval cognition → public 100/100/91.7/100

View file

@ -111,7 +111,7 @@ Constructing a finding with `COHERENT`, `CONTESTED`, or `FALSIFIED` is rejected.
### 2. No pack mutation
The contemplation runner must not write to `language_packs/`, ratification outputs, teaching corpora, or runtime pack manifests.
The contemplation runner must not write to `packs/`, ratification outputs, teaching corpora, or runtime pack manifests.
### 3. Replay determinism

View file

@ -198,9 +198,9 @@ co-pack lemmas. Targeted at the cases the prompt-diversity suite
### What changes
- `language_packs/compiler.py` — schema accepts the optional
- `packs/compiler.py` — schema accepts the optional
`definition` block; ratification gate enforces closure.
- `language_packs/data/en_core_cognition_v1/` — pilot pack gains
- `packs/data/en_core_cognition_v1/` — pilot pack gains
glosses end-to-end; manifest checksum refreshed; companion mastery
report updated.
- New `packs/primitives/en_semantic_primitives_v1/` — ratified

View file

@ -11,7 +11,7 @@
Accepted after ADR-0093 implementation wired Domain Pack Contract v1 into the validator and capability ledger:
- `language_packs/domain_contract.py` parses the optional contract fields and rejects malformed structure.
- `packs/domain_contract.py` parses the optional contract fields and rejects malformed structure.
- `core/capability/domain_contract_predicates.py` evaluates the nine ADR-0091 semantic predicates.
- `tests/test_capability_cli.py` verifies `core capability ledger --json` emits reasoning-capable rows for the ratified domains.
- `tests/test_adr_0097_mathematics_logic_ratification.py` and `tests/test_adr_0100_0102_sibling_ratifications.py` verify all nine predicates pass for the ratified domain packs.

View file

@ -12,7 +12,7 @@
Accepted after Domain Pack Contract v1 was implemented as an enforced validator/ledger predicate path:
- `language_packs/domain_contract.py` parses `domain_contract_version=1` and contract fields.
- `packs/domain_contract.py` parses `domain_contract_version=1` and contract fields.
- `core/capability/domain_contract_predicates.py` evaluates the nine ADR-0091 predicates.
- `core/capability/reviewers.py` and `docs/reviewers.yaml` provide ADR-0092 reviewer resolution for predicate P8.
- `evals/domain_contract_validation/contract.md` documents the validation lane.

View file

@ -12,7 +12,7 @@
Accepted after `mathematics_logic` became a mechanically ratified `reasoning-capable` ledger row:
- `language_packs/data/en_mathematics_logic_v1/manifest.json` carries Domain Pack Contract v1 fields.
- `packs/data/en_mathematics_logic_v1/manifest.json` carries Domain Pack Contract v1 fields.
- `teaching/domain_chains/mathematics_logic_chains_v1.jsonl` supplies reviewed active chains.
- `core/capability/domain_contract_predicates.py` verifies all nine ADR-0091 predicates.
- `tests/test_adr_0097_mathematics_logic_ratification.py` pins:
@ -28,7 +28,7 @@ Accepted after `mathematics_logic` became a mechanically ratified `reasoning-cap
The mathematics/logic substrate is structurally complete:
- `language_packs/data/en_mathematics_logic_v1/` ships with manifest,
- `packs/data/en_mathematics_logic_v1/` ships with manifest,
lexicon, glosses.
- `teaching/domain_chains/mathematics_logic_chains_v1.jsonl` exists.
- `evals/elementary_mathematics_ood/` exists.

View file

@ -117,7 +117,7 @@ invocation in trace, replay byte-equal.
`public_showcase_pure_composition` — grep gate refuses any symbol in
the showcase's import graph not already exported by `core/`, `chat/`,
`generate/`, `language_packs/`, `teaching/`, or `core.commands.demo_*`.
`generate/`, `packs/`, `teaching/`, or `core.commands.demo_*`.
`public_showcase_all_claims_supported` — CI fails if showcase exits
with `all_claims_supported=False` or runtime >30s.

View file

@ -12,7 +12,7 @@
Accepted after `physics` became a mechanically ratified `reasoning-capable` ledger row:
- `language_packs/data/en_physics_v1/manifest.json` carries Domain Pack Contract v1 fields.
- `packs/data/en_physics_v1/manifest.json` carries Domain Pack Contract v1 fields.
- `teaching/domain_chains/physics_chains_v1.jsonl` supplies reviewed active chains.
- `tests/test_adr_0100_0102_sibling_ratifications.py` pins:
- all nine predicates pass for `en_physics_v1`
@ -28,7 +28,7 @@ Accepted after `physics` became a mechanically ratified `reasoning-capable` ledg
The physics substrate is structurally complete:
- `language_packs/data/en_physics_v1/` ships with manifest, lexicon, glosses.
- `packs/data/en_physics_v1/` ships with manifest, lexicon, glosses.
- `teaching/domain_chains/physics_chains_v1.jsonl` exists.
- `evals/foundational_physics_ood/` exists with dev/public/holdout coverage.
- `docs/gaps.md` marks physics gaps closed.

View file

@ -12,7 +12,7 @@
Accepted after `systems_software` became a mechanically ratified `reasoning-capable` ledger row:
- `language_packs/data/en_systems_software_v1/manifest.json` carries Domain Pack Contract v1 fields.
- `packs/data/en_systems_software_v1/manifest.json` carries Domain Pack Contract v1 fields.
- `teaching/domain_chains/systems_software_chains_v1.jsonl` supplies reviewed active chains.
- `tests/test_adr_0100_0102_sibling_ratifications.py` pins:
- all nine predicates pass for `en_systems_software_v1`
@ -28,7 +28,7 @@ Accepted after `systems_software` became a mechanically ratified `reasoning-capa
The systems_software substrate is structurally complete:
- `language_packs/data/en_systems_software_v1/` ships with manifest, lexicon, glosses.
- `packs/data/en_systems_software_v1/` ships with manifest, lexicon, glosses.
- `teaching/domain_chains/systems_software_chains_v1.jsonl` exists.
- `evals/symbolic_logic/` exists with dev/public/holdout coverage as the closest in-tree lane for systems/software reasoning at v1.
- `docs/gaps.md` marks systems_software gaps closed.

View file

@ -27,7 +27,7 @@ gaps that prove the gap is real.
## Evidence
`mathematics_logic` attaches three eval lanes via
`language_packs/data/en_mathematics_logic_v1/manifest.json`:
`packs/data/en_mathematics_logic_v1/manifest.json`:
| Lane | Public split | Holdout split | Notes |
|---|---|---|---|

View file

@ -117,7 +117,7 @@ holds for them too if a future case exercises them.
## Trust boundary
- **Reads only**:
- `language_packs/data/en_arithmetic_v1/lexicon.jsonl` (the
- `packs/data/en_arithmetic_v1/lexicon.jsonl` (the
pack-on-disk; auditor MUST read this independently rather
than trusting the solver's loader)
- `evals/math_bounded_grammar/v1/cases.jsonl` (the B3 case set)

View file

@ -58,7 +58,7 @@ JSON. Two solves of the same graph produce byte-equal bytes.
### Operation provenance via `en_arithmetic_v1`
A new operator-vocabulary pack ships under
`language_packs/data/en_arithmetic_v1/`. Five entries, all `pos=VERB`:
`packs/data/en_arithmetic_v1/`. Five entries, all `pos=VERB`:
| entry_id | lemma | semantic domain |
|---|---|---|
@ -72,7 +72,7 @@ A new operator-vocabulary pack ships under
domain contract). Manifest carries `provenance: adr-0116:operator_seed:2026-05-22`.
The solver loads this pack at every `solve()` call via
`language_packs.compiler.load_pack_entries`. Each operation kind in
`packs.compiler.load_pack_entries`. Each operation kind in
the input graph is dispatched through the pack's lemma table; a
missing or unloadable pack raises `SolveError` immediately.
@ -178,7 +178,7 @@ Accepted when:
- `generate/math_solver.py` exports `solve`, `SolutionTrace`,
`SolutionStep`, `SolveError`, and `REQUIRED_PACK_ID`
- `language_packs/data/en_arithmetic_v1/` ships with manifest,
- `packs/data/en_arithmetic_v1/` ships with manifest,
lexicon (5 entries), and glosses; checksums verified
- `tests/test_math_solver.py` (109 cases) is green
- Smoke suite is green
@ -197,7 +197,7 @@ Accepted when:
- Four ADR-0114a obligations are now load-bearing in code, not
promissory. Future expert-tier work can rely on them.
- The arithmetic operator vocabulary is now a first-class pack,
inspectable by external readers (`cat language_packs/data/en_arithmetic_v1/lexicon.jsonl`).
inspectable by external readers (`cat packs/data/en_arithmetic_v1/lexicon.jsonl`).
- The "operations bind to concepts, not hardcoded strings"
architectural claim is now true rather than rhetorical. Inspecting
any `SolutionTrace` shows the path from English verb (via the

View file

@ -187,7 +187,7 @@ exists to render.
modified.
- `generate/math_verifier.py` — comparison-step verification is
already shipped; not modified.
- `language_packs/data/en_arithmetic_v1/*` — `en-arith-006`
- `packs/data/en_arithmetic_v1/*` — `en-arith-006`
(compare_additive) and `en-arith-007` (compare_multiplicative)
are already shipped at manifest version 1.1.0; this ADR adds
no further pack vocabulary.

View file

@ -40,9 +40,9 @@ recall and determinism are the discriminators — see
| Architecture | `generate/math_candidate_parser.py` | Candidate-emitting sentence parser (17 tests, ADR-0126 P2) |
| Architecture | `generate/math_candidate_graph.py` | Branch enumeration + decision rule (22 tests, ADR-0126 P3) |
| Architecture | `evals/gsm8k_math/runner.py::_score_one_candidate_graph` | Runner wiring (9 tests, ADR-0126 P4) |
| Substrate | `language_packs/data/en_units_v1/` | 284 lemmas, 401 conversion edges, NIST/ISO provenance (Gemini, PR #164) |
| Substrate | `language_packs/data/en_numerics_v1/` | 130 lemmas across cardinals/ordinals/fractions/multipliers/quantifiers/comparison-anchors/format-rules (Opus #2, PR #163) |
| Loader | `language_packs/loader.py` re-exports | Single import path for both packs (ADR-0127/0128 deferred coordination) |
| Substrate | `packs/data/en_units_v1/` | 284 lemmas, 401 conversion edges, NIST/ISO provenance (Gemini, PR #164) |
| Substrate | `packs/data/en_numerics_v1/` | 130 lemmas across cardinals/ordinals/fractions/multipliers/quantifiers/comparison-anchors/format-rules (Opus #2, PR #163) |
| Loader | `packs/loader.py` re-exports | Single import path for both packs (ADR-0127/0128 deferred coordination) |
| Integration | `generate/math_candidate_parser.py::_canonicalize_unit` | Pack-aware unit canonicalization — handles irregular plurals (feet, children, etc.) via pack lookup |
| Integration | `generate/math_candidate_parser.py::extract_initial_candidates` | Widened to `<Entity> has N <unit> [of <substance>]` + `There are N <unit> [in <place>]` shapes |
| Integration | `generate/math_candidate_parser.py::_is_indefinite_quantifier` | ADR-0128.4 quantifier-driven refusal (`some`, `many`, etc. → no candidate emitted; preserves wrong == 0) |

View file

@ -60,7 +60,7 @@ behind the units pack.
## Decision
Add a `language_packs/data/en_units_v1/` ratified semantic pack and
Add a `packs/data/en_units_v1/` ratified semantic pack and
extend the ADR-0126 candidate parser to consult it during candidate
emission. **No new operation kinds.** **No new ADR-0114a
obligations.** **No new exit gates beyond ADR-0126's** (`correct ≥
@ -372,8 +372,8 @@ against decoration without integration.
| Phase | Module | Description |
|-------|--------|-------------|
| 0127.1 | `language_packs/data/en_units_v1/` | Pack content: lexicon (dimensions + units + containers + rate connectors) + `conversions.jsonl` + manifest + glosses + mastery report |
| 0127.2 | `language_packs/loader.py` (or sibling) | Pack loader API: `lookup_unit(token) -> UnitEntry \| None`; `get_conversion_graph(dimension) -> ConversionGraph` |
| 0127.1 | `packs/data/en_units_v1/` | Pack content: lexicon (dimensions + units + containers + rate connectors) + `conversions.jsonl` + manifest + glosses + mastery report |
| 0127.2 | `packs/loader.py` (or sibling) | Pack loader API: `lookup_unit(token) -> UnitEntry \| None`; `get_conversion_graph(dimension) -> ConversionGraph` |
| 0127.3 | `generate/math_roundtrip.py` | Optional `require_pack_typed_unit` parameter on `roundtrip_admissible` |
| 0127.4 | `generate/math_candidate_parser.py` | Three new initial-possession shapes + rate-declaration extractor, consulting the pack loader |
| 0127.5 | `generate/math_unit_conversion.py` (new) | `canonicalize_to_dimension_canonical(quantity, graph)`; shortest-path lookup + edges-fired provenance for `SolutionTrace.steps` |

View file

@ -55,7 +55,7 @@ architecture to get a fair empirical reading on the train sample.
## Decision
Add a `language_packs/data/en_numerics_v1/` ratified semantic pack
Add a `packs/data/en_numerics_v1/` ratified semantic pack
that exhaustively encodes the English linguistic forms of
quantities. Parser changes are minimal — most pack content
replaces today's scattered hard-coded tables with ratified
@ -299,8 +299,8 @@ addresses re: scope mismatch.
| Phase | Module | Description |
|-------|--------|-------------|
| 0128.1 | `language_packs/data/en_numerics_v1/` | Pack content (lexicon + manifest + glosses + mastery report) |
| 0128.2 | `language_packs/loader.py` | `lookup_cardinal`, `lookup_ordinal`, `lookup_fraction`, `lookup_quantifier`, `match_number_format` |
| 0128.1 | `packs/data/en_numerics_v1/` | Pack content (lexicon + manifest + glosses + mastery report) |
| 0128.2 | `packs/loader.py` | `lookup_cardinal`, `lookup_ordinal`, `lookup_fraction`, `lookup_quantifier`, `match_number_format` |
| 0128.3 | `generate/math_roundtrip.py` | Replace hard-coded `WORD_NUMBERS` + `COMPARE_*_ANCHORS` with pack-backed lookups |
| 0128.4 | `generate/math_candidate_parser.py` | `normalize_value_token` helper; quantifier-driven refusal |
| 0128.5 | `tests/test_adr_0128_*.py` | Pack ratification (exhaustiveness gates) + parser integration + format regex corpus |

View file

@ -86,7 +86,7 @@ structural disadvantage on this task.)
**What:** Run the math expert against the math teaching corpus's
own evaluation lane. Problems are sourced from ratified
teaching chains in `language_packs/data/en_arithmetic_v1` +
teaching chains in `packs/data/en_arithmetic_v1` +
en_units_v1 + en_numerics_v1; the parser's grammar matches the
corpus's surface forms *by construction* (no paraphrase-variance
gap because both sides of the eval consume the same ratified

View file

@ -42,7 +42,7 @@ probe lift; the load-bearing measurement for this iteration is the
via existing unit-slot path; normalized at candidate build.
3. **Hyphenated multi-word cardinal**`twenty-five`, `ninety-nine`,
etc. Resolved via
`language_packs.numerics_loader.parse_compound_cardinal`.
`packs.numerics_loader.parse_compound_cardinal`.
### Canonical money normalization (load-bearing)
@ -222,5 +222,5 @@ explicitly attributed, not buried inside a capability-axis PR).
regex; widened regex stays bounded (closed alternation set,
no backreferences, no catastrophic-backtracking-risk
patterns). Pack loader paths consult
`language_packs/data/<pack_id>/` only; no dynamic imports, no
`packs/data/<pack_id>/` only; no dynamic imports, no
filesystem traversal beyond pack root.

View file

@ -94,7 +94,7 @@ source span (mirrors the existing `$` / `dollar` grounding logic).
### Axis 3 — Multi-token space-separated cardinals
`parse_compound_cardinal` in `language_packs/numerics_loader.py` already
`parse_compound_cardinal` in `packs/numerics_loader.py` already
handles `"one hundred"`, `"two thousand five hundred"` etc. — it
normalises hyphens to spaces then tokenises. The parser couldn't emit these
in the value slot because `_VALUE` alternation uses a single-token pattern;

View file

@ -32,7 +32,7 @@ Add three deliverables under `generate/binding_graph/`:
1. **`units.py`** — pure unit algebra over an integer exponent vector
on six base dimensions (`length, time, mass, money, count,
temperature`). The closed vocabulary is loaded once from
`language_packs/data/en_units_v1/lexicon.jsonl` at first call and
`packs/data/en_units_v1/lexicon.jsonl` at first call and
memoized. Composite unit ids of the form `"<num>_per_<denom>"`
resolve recursively as `unit_quotient(parse_unit(num),
parse_unit(denom))`. `parse_unit` refuses with

View file

@ -311,7 +311,7 @@ The spike is governed by the same invariants as the rest of CORE:
- Null inputs to `versor_apply` stay null. Verified by `cga_inner(R, R)
≈ 0` on every result.
- No normalization is introduced outside the allowed sites
(`ingest/gate.py`, `language_packs/compiler.py`,
(`ingest/gate.py`, `packs/compiler.py`,
`algebra/versor.py`). The new functions live in a new module —
proposed path `generate/math_versor_arithmetic.py` — and call only
existing primitives. They do not add any new normalization.

View file

@ -103,11 +103,11 @@ The following is implemented and merged:
- `chat/runtime.py``ChatResponse` carries all three fields; both stub and
main paths populate them from verdicts and grounding source.
- `chat/telemetry.py` — serializes state axes into JSONL turn events.
- `language_packs/loader.py` — `UnitEntry` carries `epistemic_state`; curated
- `packs/loader.py` — `UnitEntry` carries `epistemic_state`; curated
entries tagged DECODED, composition-rule entries tagged INFERRED.
- `vocab/manifold.py``add()` accepts `epistemic_state`; `add_transient()`
tags words UNVERIFIED_NOVEL; `epistemic_state_for_word()` exposed.
- `language_packs/compiler.py` — passes `epistemic_state` through compile,
- `packs/compiler.py` — passes `epistemic_state` through compile,
clone, and cached-load paths.
- `vault/store.py``epistemic_state_for_vault_status()` mapping;
`epistemic_state` stamped into metadata on `store()`; recall results expose

View file

@ -131,7 +131,7 @@ Example category set (closed, ADR-tracked, extended only by ratification):
| `entity_pronoun` | she, he, they, it | binds resolved entity |
| `proper_noun_entity` | Tina, Marion, Jen, … | binds entity directly |
The lexicon lives under `language_packs/data/en_core_math_v1/` parallel to
The lexicon lives under `packs/data/en_core_math_v1/` parallel to
`en_core_cognition_v1` and `en_core_relations_v1`, with the same loader
discipline, the same manifest-checksum rule (CLAUDE.md §Semantic Pack
Discipline), and the same review pathway (ADR-0150/0152/0155/0161). New

View file

@ -385,7 +385,7 @@ primitive.
This ADR moves to **Accepted** when:
1. The seed registry above is materialized in
`language_packs/data/en_core_math_v1/lexical_primitives.json` (or
`packs/data/en_core_math_v1/lexical_primitives.json` (or
the equivalent loader format settled in the Phase 1 PR), one
record per entry, fields populated verbatim.
2. The manifest checksum hashes the bytes written to disk (CLAUDE.md

Some files were not shown because too many files have changed in this diff Show more