diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 3b0b6b60..54208fe6 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -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: diff --git a/AGENTS.md b/AGENTS.md index 4b27e688..bbf4ab23 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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. diff --git a/alignment/graph.py b/alignment/graph.py index 59e60f2c..785011e8 100644 --- a/alignment/graph.py +++ b/alignment/graph.py @@ -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 //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. diff --git a/benchmarks/footprint.py b/benchmarks/footprint.py index c6d938bf..88f0379f 100644 --- a/benchmarks/footprint.py +++ b/benchmarks/footprint.py @@ -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" diff --git a/benchmarks/run_benchmarks.py b/benchmarks/run_benchmarks.py index 277647af..fcadb6e3 100644 --- a/benchmarks/run_benchmarks.py +++ b/benchmarks/run_benchmarks.py @@ -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") diff --git a/chat/pack_grounding.py b/chat/pack_grounding.py index 028004d0..754a58bc 100644 --- a/chat/pack_grounding.py +++ b/chat/pack_grounding.py @@ -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//glosses.jsonl``). + the subagent briefs and ``packs/data//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" diff --git a/chat/pack_resolver.py b/chat/pack_resolver.py index f862b808..6bdcc413 100644 --- a/chat/pack_resolver.py +++ b/chat/pack_resolver.py @@ -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) diff --git a/chat/runtime.py b/chat/runtime.py index bef3ee7d..a72c141e 100644 --- a/chat/runtime.py +++ b/chat/runtime.py @@ -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 diff --git a/core/capability/domain_contract_predicates.py b/core/capability/domain_contract_predicates.py index 3c8832b6..0028a839 100644 --- a/core/capability/domain_contract_predicates.py +++ b/core/capability/domain_contract_predicates.py @@ -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 diff --git a/core/capability/pack_provenance.py b/core/capability/pack_provenance.py index 3b4545f3..cf7f3908 100644 --- a/core/capability/pack_provenance.py +++ b/core/capability/pack_provenance.py @@ -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. diff --git a/core/capability/reporting.py b/core/capability/reporting.py index cd65f3f1..2241e3ef 100644 --- a/core/capability/reporting.py +++ b/core/capability/reporting.py @@ -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" diff --git a/core/cli.py b/core/cli.py index 9441127a..ee03d8c3 100644 --- a/core/cli.py +++ b/core/cli.py @@ -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", diff --git a/core/cli_capability.py b/core/cli_capability.py index 78f94063..c5a8dade 100644 --- a/core/cli_capability.py +++ b/core/cli_capability.py @@ -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() diff --git a/core/cli_doctor.py b/core/cli_doctor.py index 99ce9fc9..5a95bdd3 100644 --- a/core/cli_doctor.py +++ b/core/cli_doctor.py @@ -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:") diff --git a/core/cli_pack.py b/core/cli_pack.py index f66dbe20..855bea38 100644 --- a/core/cli_pack.py +++ b/core/cli_pack.py @@ -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: diff --git a/core/cli_teaching.py b/core/cli_teaching.py index fc444c6a..a2e558a5 100644 --- a/core/cli_teaching.py +++ b/core/cli_teaching.py @@ -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" ) diff --git a/core/cli_test.py b/core/cli_test.py index 82e7976c..4e7aeaff 100644 --- a/core/cli_test.py +++ b/core/cli_test.py @@ -248,7 +248,7 @@ def cmd_check( "field", "generate", "ingest", - "language_packs", + "packs", "morphology", "persona", "sensorium", diff --git a/core/contemplation/contract.md b/core/contemplation/contract.md index 6bdeb788..6f39b684 100644 --- a/core/contemplation/contract.md +++ b/core/contemplation/contract.md @@ -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 | diff --git a/core/demos/contract.py b/core/demos/contract.py index ec2364a5..2d5cd258 100644 --- a/core/demos/contract.py +++ b/core/demos/contract.py @@ -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", ) diff --git a/docs/Yellowpaper.md b/docs/Yellowpaper.md index 4a1aa778..86b163bc 100644 --- a/docs/Yellowpaper.md +++ b/docs/Yellowpaper.md @@ -662,7 +662,7 @@ domain. #### Domain Pack Contract v1 (ADR-0091) -A pack manifest at `language_packs/data//manifest.json` +A pack manifest at `packs/data//manifest.json` satisfies the contract iff all nine predicates hold: 1. **lemma_coverage** — declared lemmas resolve in `lexicon.jsonl`. diff --git a/docs/adr/ADR-0015-language-packs-and-holonomy-resonance.md b/docs/adr/ADR-0015-language-packs-and-holonomy-resonance.md index 80f3e175..2a6587c3 100644 --- a/docs/adr/ADR-0015-language-packs-and-holonomy-resonance.md +++ b/docs/adr/ADR-0015-language-packs-and-holonomy-resonance.md @@ -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. diff --git a/docs/adr/ADR-0021-epistemic-grade-policy.md b/docs/adr/ADR-0021-epistemic-grade-policy.md index b001e313..3b01f006 100644 --- a/docs/adr/ADR-0021-epistemic-grade-policy.md +++ b/docs/adr/ADR-0021-epistemic-grade-policy.md @@ -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. diff --git a/docs/adr/ADR-0051-trust-boundary-hardening.md b/docs/adr/ADR-0051-trust-boundary-hardening.md index 0917bac2..52d8314b 100644 --- a/docs/adr/ADR-0051-trust-boundary-hardening.md +++ b/docs/adr/ADR-0051-trust-boundary-hardening.md @@ -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) diff --git a/docs/adr/ADR-0055-inter-session-memory-discovery-promotion.md b/docs/adr/ADR-0055-inter-session-memory-discovery-promotion.md index b959e995..980d073d 100644 --- a/docs/adr/ADR-0055-inter-session-memory-discovery-promotion.md +++ b/docs/adr/ADR-0055-inter-session-memory-discovery-promotion.md @@ -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 diff --git a/docs/adr/ADR-0065-oov-gradient-and-relations-v2.md b/docs/adr/ADR-0065-oov-gradient-and-relations-v2.md index 5b06ae8e..2b1fa737 100644 --- a/docs/adr/ADR-0065-oov-gradient-and-relations-v2.md +++ b/docs/adr/ADR-0065-oov-gradient-and-relations-v2.md @@ -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) diff --git a/docs/adr/ADR-0073-anchor-lens-substrate.md b/docs/adr/ADR-0073-anchor-lens-substrate.md index 8c8ec58f..d9d6bc47 100644 --- a/docs/adr/ADR-0073-anchor-lens-substrate.md +++ b/docs/adr/ADR-0073-anchor-lens-substrate.md @@ -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**) — diff --git a/docs/adr/ADR-0073a-anchor-lens-content-phase.md b/docs/adr/ADR-0073a-anchor-lens-content-phase.md index 6f2debe5..958bba0c 100644 --- a/docs/adr/ADR-0073a-anchor-lens-content-phase.md +++ b/docs/adr/ADR-0073a-anchor-lens-content-phase.md @@ -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 ` is the canonical gate. +`python -m packs verify ` 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 diff --git a/docs/adr/ADR-0080-contemplation-loop.md b/docs/adr/ADR-0080-contemplation-loop.md index 473b1ca1..b4ea6c1e 100644 --- a/docs/adr/ADR-0080-contemplation-loop.md +++ b/docs/adr/ADR-0080-contemplation-loop.md @@ -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 diff --git a/docs/adr/ADR-0084-definitional-layer.md b/docs/adr/ADR-0084-definitional-layer.md index b73e62d9..f0f1540c 100644 --- a/docs/adr/ADR-0084-definitional-layer.md +++ b/docs/adr/ADR-0084-definitional-layer.md @@ -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 diff --git a/docs/adr/ADR-0091-domain-pack-contract-v1.md b/docs/adr/ADR-0091-domain-pack-contract-v1.md index c2421071..f87e4314 100644 --- a/docs/adr/ADR-0091-domain-pack-contract-v1.md +++ b/docs/adr/ADR-0091-domain-pack-contract-v1.md @@ -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. diff --git a/docs/adr/ADR-0093-domain-pack-contract-v1-implementation.md b/docs/adr/ADR-0093-domain-pack-contract-v1-implementation.md index 4e0f4c53..314231c5 100644 --- a/docs/adr/ADR-0093-domain-pack-contract-v1-implementation.md +++ b/docs/adr/ADR-0093-domain-pack-contract-v1-implementation.md @@ -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. diff --git a/docs/adr/ADR-0097-mathematics-logic-reasoning-capable-ratification.md b/docs/adr/ADR-0097-mathematics-logic-reasoning-capable-ratification.md index 266a636b..8fa49c57 100644 --- a/docs/adr/ADR-0097-mathematics-logic-reasoning-capable-ratification.md +++ b/docs/adr/ADR-0097-mathematics-logic-reasoning-capable-ratification.md @@ -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. diff --git a/docs/adr/ADR-0099-public-showcase-demo.md b/docs/adr/ADR-0099-public-showcase-demo.md index beab7562..5404e803 100644 --- a/docs/adr/ADR-0099-public-showcase-demo.md +++ b/docs/adr/ADR-0099-public-showcase-demo.md @@ -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. diff --git a/docs/adr/ADR-0100-physics-reasoning-capable-ratification.md b/docs/adr/ADR-0100-physics-reasoning-capable-ratification.md index 7a920f28..0927b55f 100644 --- a/docs/adr/ADR-0100-physics-reasoning-capable-ratification.md +++ b/docs/adr/ADR-0100-physics-reasoning-capable-ratification.md @@ -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. diff --git a/docs/adr/ADR-0101-systems-software-reasoning-capable-ratification.md b/docs/adr/ADR-0101-systems-software-reasoning-capable-ratification.md index 8d50bf67..6fd68425 100644 --- a/docs/adr/ADR-0101-systems-software-reasoning-capable-ratification.md +++ b/docs/adr/ADR-0101-systems-software-reasoning-capable-ratification.md @@ -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. diff --git a/docs/adr/ADR-0107-mathematics-logic-expert-demo-deferred.md b/docs/adr/ADR-0107-mathematics-logic-expert-demo-deferred.md index b3453c34..460eb1f2 100644 --- a/docs/adr/ADR-0107-mathematics-logic-expert-demo-deferred.md +++ b/docs/adr/ADR-0107-mathematics-logic-expert-demo-deferred.md @@ -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 | |---|---|---|---| diff --git a/docs/adr/ADR-0114a.10-pack-provenance-auditor.md b/docs/adr/ADR-0114a.10-pack-provenance-auditor.md index 154dc22c..10b69a44 100644 --- a/docs/adr/ADR-0114a.10-pack-provenance-auditor.md +++ b/docs/adr/ADR-0114a.10-pack-provenance-auditor.md @@ -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) diff --git a/docs/adr/ADR-0116-deterministic-solver.md b/docs/adr/ADR-0116-deterministic-solver.md index 05e00626..c353e618 100644 --- a/docs/adr/ADR-0116-deterministic-solver.md +++ b/docs/adr/ADR-0116-deterministic-solver.md @@ -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 diff --git a/docs/adr/ADR-0123-parser-comparison-phrasing.md b/docs/adr/ADR-0123-parser-comparison-phrasing.md index 59d73180..7fddf2b3 100644 --- a/docs/adr/ADR-0123-parser-comparison-phrasing.md +++ b/docs/adr/ADR-0123-parser-comparison-phrasing.md @@ -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. diff --git a/docs/adr/ADR-0127-0128-RESULTS.md b/docs/adr/ADR-0127-0128-RESULTS.md index 3fa3ff32..f8387fe2 100644 --- a/docs/adr/ADR-0127-0128-RESULTS.md +++ b/docs/adr/ADR-0127-0128-RESULTS.md @@ -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 ` has N [of ]` + `There are N [in ]` 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) | diff --git a/docs/adr/ADR-0127-units-pack-and-units-aware-parser.md b/docs/adr/ADR-0127-units-pack-and-units-aware-parser.md index 69336847..1fea8ed9 100644 --- a/docs/adr/ADR-0127-units-pack-and-units-aware-parser.md +++ b/docs/adr/ADR-0127-units-pack-and-units-aware-parser.md @@ -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` | diff --git a/docs/adr/ADR-0128-numerics-pack.md b/docs/adr/ADR-0128-numerics-pack.md index e0dba302..abccca4a 100644 --- a/docs/adr/ADR-0128-numerics-pack.md +++ b/docs/adr/ADR-0128-numerics-pack.md @@ -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 | diff --git a/docs/adr/ADR-0131-math-expert-rebench.md b/docs/adr/ADR-0131-math-expert-rebench.md index 22220ffb..61493601 100644 --- a/docs/adr/ADR-0131-math-expert-rebench.md +++ b/docs/adr/ADR-0131-math-expert-rebench.md @@ -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 diff --git a/docs/adr/ADR-0131.G.3-numerics.md b/docs/adr/ADR-0131.G.3-numerics.md index 6e95e684..98182bb5 100644 --- a/docs/adr/ADR-0131.G.3-numerics.md +++ b/docs/adr/ADR-0131.G.3-numerics.md @@ -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//` only; no dynamic imports, no + `packs/data//` only; no dynamic imports, no filesystem traversal beyond pack root. diff --git a/docs/adr/ADR-0131.G.3.1-numerics-extensions.md b/docs/adr/ADR-0131.G.3.1-numerics-extensions.md index 2c143396..c8f313ec 100644 --- a/docs/adr/ADR-0131.G.3.1-numerics-extensions.md +++ b/docs/adr/ADR-0131.G.3.1-numerics-extensions.md @@ -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; diff --git a/docs/adr/ADR-0134-binding-graph-admissibility.md b/docs/adr/ADR-0134-binding-graph-admissibility.md index e3187b51..7fe4fe42 100644 --- a/docs/adr/ADR-0134-binding-graph-admissibility.md +++ b/docs/adr/ADR-0134-binding-graph-admissibility.md @@ -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 `"_per_"` resolve recursively as `unit_quotient(parse_unit(num), parse_unit(denom))`. `parse_unit` refuses with diff --git a/docs/adr/ADR-0139-arithmetic-as-versor-spike.md b/docs/adr/ADR-0139-arithmetic-as-versor-spike.md index d959fcc2..2aadd487 100644 --- a/docs/adr/ADR-0139-arithmetic-as-versor-spike.md +++ b/docs/adr/ADR-0139-arithmetic-as-versor-spike.md @@ -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. diff --git a/docs/adr/ADR-0142-epistemic-state-taxonomy.md b/docs/adr/ADR-0142-epistemic-state-taxonomy.md index 9964835e..8cf62b5c 100644 --- a/docs/adr/ADR-0142-epistemic-state-taxonomy.md +++ b/docs/adr/ADR-0142-epistemic-state-taxonomy.md @@ -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 diff --git a/docs/adr/ADR-0164-incremental-comprehension-reader.md b/docs/adr/ADR-0164-incremental-comprehension-reader.md index 25ed7d92..e56ea423 100644 --- a/docs/adr/ADR-0164-incremental-comprehension-reader.md +++ b/docs/adr/ADR-0164-incremental-comprehension-reader.md @@ -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 diff --git a/docs/adr/ADR-0164.1-lexical-primitive-scope.md b/docs/adr/ADR-0164.1-lexical-primitive-scope.md index 0d76d272..e8175625 100644 --- a/docs/adr/ADR-0164.1-lexical-primitive-scope.md +++ b/docs/adr/ADR-0164.1-lexical-primitive-scope.md @@ -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 diff --git a/docs/adr/ADR-0167-audit-as-teaching-evidence.md b/docs/adr/ADR-0167-audit-as-teaching-evidence.md index e45b2c1b..02a11a84 100644 --- a/docs/adr/ADR-0167-audit-as-teaching-evidence.md +++ b/docs/adr/ADR-0167-audit-as-teaching-evidence.md @@ -142,7 +142,7 @@ proves the wiring without committing the harder sub-types. (Likely: yes, with a "previously rejected" annotation; no silent suppression.) 6. **First-write target**. `LexicalClaim` ratification writes to - `language_packs/data/en_core_math_v1/lexicon/*.jsonl`. Confirm the + `packs/data/en_core_math_v1/lexicon/*.jsonl`. Confirm the loader's per-category source-file path is the canonical mutation site, not the compiled `lexicon.jsonl`. diff --git a/docs/adr/ADR-0169-compositionclaim-ratification.md b/docs/adr/ADR-0169-compositionclaim-ratification.md index 26a455fa..4ff1c39e 100644 --- a/docs/adr/ADR-0169-compositionclaim-ratification.md +++ b/docs/adr/ADR-0169-compositionclaim-ratification.md @@ -280,7 +280,7 @@ CC-3) maps the audit's `(refusal_reason, missing_operator)` pairs into A `CompositionClaim` ratification MAY mutate only: - reviewed composition-pattern registries: - `language_packs/data/en_core_math_v1/compositions/{category}.jsonl` + `packs/data/en_core_math_v1/compositions/{category}.jsonl` - proposal-layer artifacts (append-only proposal log) A `CompositionClaim` ratification MUST NOT directly mutate: diff --git a/docs/adr/ADR-0169.1-math-compositionclaim-proposal-adapter.md b/docs/adr/ADR-0169.1-math-compositionclaim-proposal-adapter.md index 9ac391e7..15f134a0 100644 --- a/docs/adr/ADR-0169.1-math-compositionclaim-proposal-adapter.md +++ b/docs/adr/ADR-0169.1-math-compositionclaim-proposal-adapter.md @@ -207,7 +207,7 @@ Accepting a `MathCompositionClaimProposal` may only append (or propose append) to a reviewed composition-pattern artifact: ```text -language_packs/data/en_core_math_v1/compositions/{category}.jsonl +packs/data/en_core_math_v1/compositions/{category}.jsonl ``` where `{category}` is one of the entries in `SAFE_COMPOSITION_CATEGORIES`. @@ -307,7 +307,7 @@ The implementation PR must mechanically prove each of: canonical claim identity; equivalent evidence produces equivalent ids across processes. 6. **Active-pack bytes unchanged during replay.** The replay gate must - not mutate `language_packs/data/en_core_math_v1/**` byte content + not mutate `packs/data/en_core_math_v1/**` byte content until operator accept lands. 7. **No cross-domain emission.** The handler does not produce cognition-domain artifacts. @@ -348,7 +348,7 @@ This ADR does not implement: - CompositionClaim runtime admission - composition-pattern artifact schema (deferred to the implementation PR; - the JSONL layout under `language_packs/data/en_core_math_v1/compositions/` + the JSONL layout under `packs/data/en_core_math_v1/compositions/` is the artifact target but its row schema is not fixed here) - workbench rendering - ReferenceClaim diff --git a/docs/adr/ADR-0173-workbench-ratification-trust-boundary.md b/docs/adr/ADR-0173-workbench-ratification-trust-boundary.md index f932cc89..20c76ac3 100644 --- a/docs/adr/ADR-0173-workbench-ratification-trust-boundary.md +++ b/docs/adr/ADR-0173-workbench-ratification-trust-boundary.md @@ -40,7 +40,7 @@ Each handler is: - partition-tested (math/cognition isolation) - idempotent (`AlreadyRatified` on duplicate) - append-only on a reviewed JSONL artifact under - `language_packs/data/en_core_math_v1/{lexicon,frames,compositions}/*.jsonl` + `packs/data/en_core_math_v1/{lexicon,frames,compositions}/*.jsonl` - accessible only via local Python entrypoints The original ADR-0160 prohibition was a safety stance against diff --git a/docs/adr/ADR-0183-lawful-audio-lexeme-path.md b/docs/adr/ADR-0183-lawful-audio-lexeme-path.md index 9002f69d..bb94f15c 100644 --- a/docs/adr/ADR-0183-lawful-audio-lexeme-path.md +++ b/docs/adr/ADR-0183-lawful-audio-lexeme-path.md @@ -3,7 +3,7 @@ **Status:** Proposed (stub — placeholder to record the fork; not yet a full design) **Date:** 2026-05-29 **Authors:** Joshua M. Shay, Core R&D Engine -**Domains:** `sensorium/audio/`, `language_packs/`, (future) `generate/` +**Domains:** `sensorium/audio/`, `packs/`, (future) `generate/` **Depends on:** ADR-0013 (Sensorium Protocol), ADR-0181 (Audio Compiler), ADR-0180 (Delta-CRDT substrate) **Related:** [`docs/audio_pipeline_overview.md`](../audio_pipeline_overview.md) §9 (teacher boundary), [`docs/plans/audio-compiler-eval-plan.md`](../plans/audio-compiler-eval-plan.md) §4 (teacher policy) diff --git a/docs/adr/ADR-0210-l10-grounding-pack.md b/docs/adr/ADR-0210-l10-grounding-pack.md index e29f45cf..5c23b3a6 100644 --- a/docs/adr/ADR-0210-l10-grounding-pack.md +++ b/docs/adr/ADR-0210-l10-grounding-pack.md @@ -15,7 +15,7 @@ This ADR proposes an additive seed pack and an additive adversarial fixture set ## Decision -Adopt `language_packs/data/l10_grounding_v1/` as the first L10-oriented grounding pack. +Adopt `packs/data/l10_grounding_v1/` as the first L10-oriented grounding pack. The pack contains finite-domain relational primitives only: @@ -64,7 +64,7 @@ This is especially load-bearing for: ## Checksums -- `language_packs/data/l10_grounding_v1/lexicon.jsonl`: `829efd10d7f5fa74f1189ec6d621f2a12bc5e7a022fd7a3de436655fc8fe5603` +- `packs/data/l10_grounding_v1/lexicon.jsonl`: `829efd10d7f5fa74f1189ec6d621f2a12bc5e7a022fd7a3de436655fc8fe5603` - `evals/deductive_logic/fixtures/l10_adversarial.jsonl`: `beda988f019b5431a3ab6e817b463a165bde719c7597f3b6a7f572107e1db123` ## Consequences diff --git a/docs/adr/ADR-0223-semantic-substrate-affordance-audit.md b/docs/adr/ADR-0223-semantic-substrate-affordance-audit.md index f5b6962b..29605d84 100644 --- a/docs/adr/ADR-0223-semantic-substrate-affordance-audit.md +++ b/docs/adr/ADR-0223-semantic-substrate-affordance-audit.md @@ -4,7 +4,7 @@ **Date:** 2026-06-19 -**Domains:** `language_packs/`, `generate/kernel_facts.py`, `generate/problem_frame.py`, `generate/problem_frame_builder.py`, `generate/problem_frame_contracts.py`, `scripts/gsm8k_problem_frame_adequacy.py`, `scripts/gsm8k_substrate_morphology.py`, `generate/derivation/`, `generate/math_candidate_graph.py`, `recognition/`, `generate/graph_planner.py`, `vault/`, `field/`, `algebra/`, `docs/adr/`, `docs/analysis/`, and related tests. +**Domains:** `packs/`, `generate/kernel_facts.py`, `generate/problem_frame.py`, `generate/problem_frame_builder.py`, `generate/problem_frame_contracts.py`, `scripts/gsm8k_problem_frame_adequacy.py`, `scripts/gsm8k_substrate_morphology.py`, `generate/derivation/`, `generate/math_candidate_graph.py`, `recognition/`, `generate/graph_planner.py`, `vault/`, `field/`, `algebra/`, `docs/adr/`, `docs/analysis/`, and related tests. **Depends on:** #829 Kernel Substrate Tranche 1, #830 ProblemFrame operationalization / legacy-deprecation guardrails, #831 ProblemFrame bindings and contract-readiness diagnostics, ADR-0144 (graph/carrier separation), ADR-0207 (typed adapters / anti-universal-IR posture), ADR-0218 (proof-carrying promotion), INV-25 (independent gold), INV-30 (open-world determination never asserts False), and existing wrong-zero serving discipline. diff --git a/docs/adr/epistemic-state-taxonomy-scope.md b/docs/adr/epistemic-state-taxonomy-scope.md index bd55a154..ef746d8d 100644 --- a/docs/adr/epistemic-state-taxonomy-scope.md +++ b/docs/adr/epistemic-state-taxonomy-scope.md @@ -73,7 +73,7 @@ remains available for future gaps found by further audits. | **VERIFIED** | Cross-checked against ratified knowledge (pack / vault / teaching); consistent | Substrate cross-reference | → DECODED once replay-equality confirmed; stays VERIFIED otherwise | | **DECODED** | VERIFIED plus replay-equality from input (trace-hash invariant) | Replay machinery | → DECODED-UNARTICULATED if the surface realization path breaks after verification; transitions only on retraction (subsequent teaching invalidates) otherwise terminal | | **DECODED-UNARTICULATED** | The proposition is DECODED internally — trace is replay-equal and the verifier passed — but the surface realization path broke. The answer is correct; the explanation cannot be communicated. The runner must not classify this as `wrong` (which would conflate articulation failure with epistemic failure). | Verifier (replay-equal) + Realizer (failure) | → DECODED once the articulation path is repaired; stays distinct from DECODED until that repair is confirmed | -| **INFERRED** | Derived from DECODED components by a ratified deterministic rule, but the composite was never itself curated or ratified as a lexical entry. Stronger than UNVERIFIED-POSSIBLE (derivation is deterministic and components are DECODED); weaker than DECODED (the composite has not been independently ratified). Grounded by the `language_packs` composition rules (`per`, `square`, `cubic` unit synthesis) — the rule is ratified; the output is not. | Rule application over DECODED primitives | → DECODED if the composed result is subsequently curated and ratified; → CONTRADICTED if rule application produces a result that conflicts with a ratified entry; stays INFERRED until ratification | +| **INFERRED** | Derived from DECODED components by a ratified deterministic rule, but the composite was never itself curated or ratified as a lexical entry. Stronger than UNVERIFIED-POSSIBLE (derivation is deterministic and components are DECODED); weaker than DECODED (the composite has not been independently ratified). Grounded by the `packs` composition rules (`per`, `square`, `cubic` unit synthesis) — the rule is ratified; the output is not. | Rule application over DECODED primitives | → DECODED if the composed result is subsequently curated and ratified; → CONTRADICTED if rule application produces a result that conflicts with a ratified entry; stays INFERRED until ratification | | **UNVERIFIED-POSSIBLE** | Consistent with verified knowledge but not directly verified; usable provisionally | Default for non-contradicting novel propositions | → VERIFIED if cross-reference confirms; → CONTRADICTED if cross-reference rejects | | **UNVERIFIED-NOVEL** | Not contradicted; introduces structure the engine hasn't decoded yet; candidate for teaching expansion | Refusal that points at expansion need | → EVIDENCED once teaching corpus adds vocabulary; → CONTRADICTED if eventually disproven | | **CONTRADICTED** | Conflicts with verified knowledge; refuse unless this is a ratified correction | Verification failure | → EVIDENCED only via ratified correction through teaching loop | @@ -432,7 +432,7 @@ Known implementation issues to address before Phase 3 integration an unmeasured case FALSIFIED rather than UNDETERMINED - `evals/gsm8k_math/runner.py`: `RealizerError` on a verified trace is classified as `outcome="wrong"` rather than DECODED-UNARTICULATED -- `language_packs/domain_contract.py`: `present=False, valid=False` on +- `packs/domain_contract.py`: `present=False, valid=False` on a missing manifest should be `present=False, valid=True` (UNDETERMINED, not a negative judgment); `domain_id:unknown` should route to SCOPE_BOUNDARY rather than collapsing with structural errors diff --git a/docs/adr/recognizer-storage-scope.md b/docs/adr/recognizer-storage-scope.md index 8bda6564..23492935 100644 --- a/docs/adr/recognizer-storage-scope.md +++ b/docs/adr/recognizer-storage-scope.md @@ -41,7 +41,7 @@ status follows. | Concern | Mechanism | Status | Verification | |---|---|---|---| -| Region excitation | Injection pressure raises `EnergyClass` | **Live** | `FieldEnergyOperator` called by `ingest/gate.py:292`, `field/propagate.py:26`, `language_packs/compiler.py:72` | +| Region excitation | Injection pressure raises `EnergyClass` | **Live** | `FieldEnergyOperator` called by `ingest/gate.py:292`, `field/propagate.py:26`, `packs/compiler.py:72` | | Cooling | `recency = clamp(activation_count,0,8)/8 * exp(-age/12)` contribution | **Live** | `core/physics/energy.py:94`, exercised via callers above | | Crystallization gate | E0/E1 = `vault_candidate`; promotion requires `coherence_residual ≤ residual_threshold` (default 0.05) | **Dormant** | `VaultPromotionPolicy` defined in `core/physics/learning.py`, but `core.physics.learning` is imported by **no module outside `core/physics/`** as of 2026-05-24 | | Re-activation on recall | Vault recall transiently raises region to E2, then cools | **Specified, not verified live** | Documented in ADR-0006 §"Integration Points"; no code path traced from vault recall back to energy re-injection | diff --git a/docs/adr/substrate-liveness-audit-scope.md b/docs/adr/substrate-liveness-audit-scope.md index 53f29478..0c26df98 100644 --- a/docs/adr/substrate-liveness-audit-scope.md +++ b/docs/adr/substrate-liveness-audit-scope.md @@ -102,7 +102,7 @@ layering, expected to refine: | L0 — Algebra primitives | versor application, CGA inner product, null vector preservation, sandwich closure | `algebra/versor.py`, `algebra/backend/`; invariant `versor_condition < 1e-6` | | L1 — Field substrate | injection gate, propagation, energy operator, normalization sites | `field/propagate.py`, `ingest/gate.py`, `core/physics/energy.py`; ADR-0006 | | L2 — Vault | exact CGA recall, indexing, batching, promotion gate | `vault/store.py`, `core/physics/learning.py`; ADR-0014, ADR-0054 | -| L3 — Language packs | compiler, lexicons, identity, safety, ethics, anchor lens, register | `language_packs/`, `packs/`; ADR-0027..0047, ADR-0070..0073 | +| L3 — Language packs | compiler, lexicons, identity, safety, ethics, anchor lens, register | `packs/`, `packs/`; ADR-0027..0047, ADR-0070..0073 | | L4 — Recognition | anti-unifier, multi-resolution decoding, epistemic carrier, dispatch trace | `recognition/`; ADR-0143, ADR-0144 | | L5 — Cognition pipeline | intent classification, ratification, articulation target, deterministic realizer | `core/cognition/`, `generate/intent.py`, `generate/realizer.py`; ADR-0048..0053 | | L6 — Chat runtime + surface composition | turn loop, surface composition, grounding dispatch, telemetry, verdicts, register, anchor lens, cross-pack composition | `chat/runtime.py`; ADR-0058..0099 (audit must enumerate per-ADR — this range spans surface composition, correction telemetry, cross-pack resolution; not all are runtime-loop concerns) | diff --git a/docs/analysis/L10-runtime-scoping-2026-06-05.md b/docs/analysis/L10-runtime-scoping-2026-06-05.md index 66ca0f60..b6fefb56 100644 --- a/docs/analysis/L10-runtime-scoping-2026-06-05.md +++ b/docs/analysis/L10-runtime-scoping-2026-06-05.md @@ -23,7 +23,7 @@ The sharp consequence: **the `R` in listen → comprehend → *recall* → think **The question:** Can `versor_condition(F) < 1e-6` *and* exact CGA recall hold over indefinite uptime **by construction**, with **no per-turn repair op** — or is continuous-field residency structurally blocked by CLAUDE.md's no-hot-path-repair rule? -**Verified evidence (this session, direct source read):** `session/context.py` already carries a per-turn **"drift fix" family** — `_hemisphere_consistent_field` (Drift fix 2) and `_anchor_pull` (Drift fix 3, α=0.05, *"continuous conjugate correction against slow angular drift"*) both run every turn in `finalize_turn` (lines 254–255), plus "Drift fix 1" magnitude-preserving EMA at line 143. `session/context.py` is **not** a CLAUDE.md-sanctioned normalization site (sanctioned: `ingest/gate.py`, `language_packs/compiler.py`, `algebra/versor.py`, `sensorium/*/canonical.py`). +**Verified evidence (this session, direct source read):** `session/context.py` already carries a per-turn **"drift fix" family** — `_hemisphere_consistent_field` (Drift fix 2) and `_anchor_pull` (Drift fix 3, α=0.05, *"continuous conjugate correction against slow angular drift"*) both run every turn in `finalize_turn` (lines 254–255), plus "Drift fix 1" magnitude-preserving EMA at line 143. `session/context.py` is **not** a CLAUDE.md-sanctioned normalization site (sanctioned: `ingest/gate.py`, `packs/compiler.py`, `algebra/versor.py`, `sensorium/*/canonical.py`). So the field **already needs per-turn correction even within a single session.** The architect must rule: diff --git a/docs/analysis/adr-corpus-cohesion-dependency-map-2026-06-30.md b/docs/analysis/adr-corpus-cohesion-dependency-map-2026-06-30.md index 8c5d708a..00b1fc76 100644 --- a/docs/analysis/adr-corpus-cohesion-dependency-map-2026-06-30.md +++ b/docs/analysis/adr-corpus-cohesion-dependency-map-2026-06-30.md @@ -15,7 +15,7 @@ Ground truth: | ADR Cluster | Primary Surfaces | Additional Surfaces | Tests / Evidence Surfaces | Influence | |---|---|---|---|---| | ADR-0027–0029 Safety / Identity | `packs/safety/loader.py`, `packs/safety/check.py` | `core/proposal_review/safety.py`, `chat/pack_resolver.py` | `tests/test_safety_pack.py`, `tests/test_ethics_refusal_opt_in.py`, `tests/test_epistemic_phase3_state_tagging.py`, `tests/test_identity_continuity_proof.py` | Loads immutable safety boundaries, observes runtime safety verdicts, prevents proposal sink serving consumption, keeps pack surface resolution deterministic and non-mutating. | -| ADR-0001 Foundational / Versor | `vocab/manifold.py` | `core_ingest/manifold.py`, `core_ingest/pipeline.py`, `language_packs/en_seeder.py` | `tests/test_vocab_manifold_invariants.py`, `tests/test_engine_loop_proof.py`, `tests/test_determinism_proofs.py`, `core-rs/tests/test_versor.rs` | Enforces unit-versor insertion/update, exact `cga_inner` nearest lookup, and reconstruction-over-storage provenance indexing. | +| ADR-0001 Foundational / Versor | `vocab/manifold.py` | `core_ingest/manifold.py`, `core_ingest/pipeline.py`, `packs/en_seeder.py` | `tests/test_vocab_manifold_invariants.py`, `tests/test_engine_loop_proof.py`, `tests/test_determinism_proofs.py`, `core-rs/tests/test_versor.rs` | Enforces unit-versor insertion/update, exact `cga_inner` nearest lookup, and reconstruction-over-storage provenance indexing. | | ADR-0055–0057 Teaching / Memory / Epistemic | `teaching/review.py`, `teaching/replay.py`, `teaching/proposals.py`, `teaching/promotion.py`, `teaching/supersede.py`, `teaching/contemplation.py`, `teaching/epistemic.py`, `teaching/discovery.py` | `core/proposal_review/*`, `core/learning_arena/*`, `vault/store.py`, `chat/teaching_grounding.py` | `tests/test_learning_loop_demo.py`, `tests/test_teaching_loop_bench.py`, `tests/test_phase_d_replay_evidence.py`, `tests/test_discovery_candidates.py`, `tests/test_mutation_proposal_type.py`, `tests/test_proof_carrying_promotion_demo.py` | Keeps learning proposal-only until review, gates corpus append through replay-equivalence, defaults epistemic state to SPECULATIVE, and keeps practice/reporting separated from serving mutation. | ## Caller / Callee Relationships diff --git a/docs/analysis/epistemic-coherence-architecture-2026-06-14.md b/docs/analysis/epistemic-coherence-architecture-2026-06-14.md index 891aec1a..404f48d6 100644 --- a/docs/analysis/epistemic-coherence-architecture-2026-06-14.md +++ b/docs/analysis/epistemic-coherence-architecture-2026-06-14.md @@ -21,7 +21,7 @@ at learning from contemplation/practice. **Tested rigorously. Refuted.** ## What is actually true (verified, high confidence) ### Axis A — promoting a *lexicon* entry to coherent is compile-and-display-only -- `language_packs/compiler.py:75-92` maps a `coherent` lexical row → `EpistemicState.DECODED`, +- `packs/compiler.py:75-92` maps a `coherent` lexical row → `EpistemicState.DECODED`, stored per-surface on the manifold (`compiler.py:357` → `vocab/manifold.py:114`). - **No reasoning/recall/realize/learning path reads that tag.** The only non-test reads (`compiler.py:406`, `:559`) merely copy it forward; `workbench/logos.py` diff --git a/docs/analysis/holonomy-resonance-proof-not-robust-2026-06-14.md b/docs/analysis/holonomy-resonance-proof-not-robust-2026-06-14.md index 4b5bec97..8cff73a2 100644 --- a/docs/analysis/holonomy-resonance-proof-not-robust-2026-06-14.md +++ b/docs/analysis/holonomy-resonance-proof-not-robust-2026-06-14.md @@ -9,7 +9,7 @@ UI showed there is **no robust proof to make legible yet.** ## Claim under test The "crown proof" of the three-language design (`HolonomyAlignmentCase`, -`language_packs/schema.py`): *aligned canonical clauses across Hebrew / Greek / +`packs/schema.py`): *aligned canonical clauses across Hebrew / Greek / English produce nearby holonomies — closer than a misaligned negative — without flattening their distinctions.* The flagship case is HAC-001: `word/דבר/λόγος + beginning/ראשית/ἀρχή + truth/אמת/ἀλήθεια`, negative = truth→ζωή diff --git a/docs/analysis/kernel-knowledge-inventory-2026-06-18.md b/docs/analysis/kernel-knowledge-inventory-2026-06-18.md index 899e5c88..106f8629 100644 --- a/docs/analysis/kernel-knowledge-inventory-2026-06-18.md +++ b/docs/analysis/kernel-knowledge-inventory-2026-06-18.md @@ -18,11 +18,11 @@ As of PR-0, the baseline scoring metrics after #827 are: ## 2. Files Inspected The following key parts of the repository were analyzed: -- `language_packs/numerics_loader.py` -- `language_packs/loader.py` +- `packs/numerics_loader.py` +- `packs/loader.py` - `scripts/generate_en_numerics_v1.py` -- `language_packs/data/en_numerics_v1/manifest.json`, `lexicon.jsonl` -- `language_packs/data/en_units_v1/manifest.json`, `lexicon.jsonl`, `conversions.jsonl` +- `packs/data/en_numerics_v1/manifest.json`, `lexicon.jsonl` +- `packs/data/en_units_v1/manifest.json`, `lexicon.jsonl`, `conversions.jsonl` - `generate/derivation/calendar_grounding.py` - `generate/derivation/piecewise_daily_hours_total.py` - `generate/derivation/nested_fraction_remainder_total.py` @@ -93,8 +93,8 @@ Multiple derivation organs independently handle scalar scalars (like "half" and ## 12. Existing Pack Machinery That Should Be Reused -- **`language_packs/numerics_loader.py`:** The `lookup_cardinal`, `lookup_fraction`, and `match_number_format` methods are already fully functional and will be imported. -- **`language_packs/loader.py`:** The units registry (`_UNITS_MAP` and `_DIMENSIONS_MAP`) and dimensional conversions graph will be utilized. +- **`packs/numerics_loader.py`:** The `lookup_cardinal`, `lookup_fraction`, and `match_number_format` methods are already fully functional and will be imported. +- **`packs/loader.py`:** The units registry (`_UNITS_MAP` and `_DIMENSIONS_MAP`) and dimensional conversions graph will be utilized. --- @@ -113,7 +113,7 @@ Multiple derivation organs independently handle scalar scalars (like "half" and ## 15. Recommended PR Sequence 1. **PR-0:** Documentation & Architecture Inventory (This PR). -2. **PR-1:** Refactor `language_packs` to combine numerics and units loaders. +2. **PR-1:** Refactor `packs` to combine numerics and units loaders. 3. **PR-2:** ScalarEquivalence facade over `en_numerics_v1`. 4. **PR-3:** Refactor `percent_partition.py` and `nested_fraction_remainder_total.py` to use the facade. diff --git a/docs/analysis/kernel-operationalization-deprecation-brief-2026-06-18.md b/docs/analysis/kernel-operationalization-deprecation-brief-2026-06-18.md index b74f909d..f90dd7a2 100644 --- a/docs/analysis/kernel-operationalization-deprecation-brief-2026-06-18.md +++ b/docs/analysis/kernel-operationalization-deprecation-brief-2026-06-18.md @@ -124,9 +124,9 @@ raw text The builder should use the #829 substrate modules: -- `language_packs.scalar_equivalence.extract_scalar_candidates` -- `language_packs.unit_dimensions` -- `language_packs.ambiguity_hazards` +- `packs.scalar_equivalence.extract_scalar_candidates` +- `packs.unit_dimensions` +- `packs.ambiguity_hazards` - `generate.process_frames` - `generate.kernel_facts` - `generate.problem_frame` diff --git a/docs/analysis/kernel-operationalization-implementation-2026-06-18.md b/docs/analysis/kernel-operationalization-implementation-2026-06-18.md index fa6c003b..6dfa2121 100644 --- a/docs/analysis/kernel-operationalization-implementation-2026-06-18.md +++ b/docs/analysis/kernel-operationalization-implementation-2026-06-18.md @@ -22,9 +22,9 @@ breaking serving (`train_sample: 30 / 20 / 0`, `wrong_ids: []`). PR #829 (`58a94c8e`) added: - `generate/kernel_facts.py` -- `language_packs/scalar_equivalence.py` -- `language_packs/unit_dimensions.py` -- `language_packs/ambiguity_hazards.py` +- `packs/scalar_equivalence.py` +- `packs/unit_dimensions.py` +- `packs/ambiguity_hazards.py` - `generate/process_frames.py` - `generate/problem_frame.py` (IR skeleton) - `scripts/gsm8k_substrate_morphology.py` (v1 labels) diff --git a/docs/analysis/kernel-substrate-deprecation-audit-2026-06-18.md b/docs/analysis/kernel-substrate-deprecation-audit-2026-06-18.md index 24087cef..72e6780d 100644 --- a/docs/analysis/kernel-substrate-deprecation-audit-2026-06-18.md +++ b/docs/analysis/kernel-substrate-deprecation-audit-2026-06-18.md @@ -105,9 +105,9 @@ routes half+percent split problems to this organ. | File | Class | Notes | |---|---|---| | `generate/problem_frame_builder.py` | **target path** | `build_problem_frame` — substrate-backed, no solving | -| `language_packs/scalar_equivalence.py` | **target path** | ADR-0128 facade; `extract_scalar_candidates` | -| `language_packs/unit_dimensions.py` | **target path** | ADR-0127 facade | -| `language_packs/ambiguity_hazards.py` | **target path** | Hazard registry | +| `packs/scalar_equivalence.py` | **target path** | ADR-0128 facade; `extract_scalar_candidates` | +| `packs/unit_dimensions.py` | **target path** | ADR-0127 facade | +| `packs/ambiguity_hazards.py` | **target path** | Hazard registry | | `generate/process_frames.py` | **target path** | Declarative process-frame candidates | | `generate/kernel_facts.py` | **target path** | Typed fact/provenance model | | `generate/problem_frame.py` | **target path** | ProblemFrame IR skeleton | diff --git a/docs/analysis/kernel-substrate-tranche1-brief-2026-06-18.md b/docs/analysis/kernel-substrate-tranche1-brief-2026-06-18.md index 53c3dc92..d18d758f 100644 --- a/docs/analysis/kernel-substrate-tranche1-brief-2026-06-18.md +++ b/docs/analysis/kernel-substrate-tranche1-brief-2026-06-18.md @@ -67,7 +67,7 @@ If the branch becomes too large to review, split only at natural substrate bound Create: ```text -language_packs/scalar_equivalence.py +packs/scalar_equivalence.py ``` Purpose: @@ -93,7 +93,7 @@ Respect ADR-0128. If ADR-0128 refuses a surface such as `.5` or `1 / 2`, do not Create or extend a facade around ADR-0127/en_units_v1: ```text -language_packs/unit_dimensions.py +packs/unit_dimensions.py ``` Purpose: @@ -166,7 +166,7 @@ Rules: Create: ```text -language_packs/ambiguity_hazards.py +packs/ambiguity_hazards.py ``` Purpose: @@ -317,8 +317,8 @@ This tranche should test breadth, not a single example. Required test files may include: ```text -tests/test_language_packs_scalar_equivalence.py -tests/test_language_packs_unit_dimensions.py +tests/test_packs_scalar_equivalence.py +tests/test_packs_unit_dimensions.py tests/test_kernel_facts.py tests/test_ambiguity_hazards.py tests/test_process_frames.py @@ -345,8 +345,8 @@ Recommended local sequence: ```bash git diff --check origin/main...HEAD -pytest tests/test_language_packs_scalar_equivalence.py -q -pytest tests/test_language_packs_unit_dimensions.py -q +pytest tests/test_packs_scalar_equivalence.py -q +pytest tests/test_packs_unit_dimensions.py -q pytest tests/test_kernel_facts.py -q pytest tests/test_ambiguity_hazards.py -q pytest tests/test_process_frames.py -q diff --git a/docs/analysis/kernel-substrate-tranche1-implementation-2026-06-18.md b/docs/analysis/kernel-substrate-tranche1-implementation-2026-06-18.md index 1479fe24..30b0260f 100644 --- a/docs/analysis/kernel-substrate-tranche1-implementation-2026-06-18.md +++ b/docs/analysis/kernel-substrate-tranche1-implementation-2026-06-18.md @@ -17,9 +17,9 @@ PR #827 and PR #828 introduced the core semantic packs (`en_units_v1` and `en_nu Seven new Python modules have been introduced to establish the substrate layer: 1. `generate/kernel_facts.py` — Immutable, typed records for facts, hazard annotations, and provenance verification. -2. `language_packs/scalar_equivalence.py` — Facade over the numerics loader returning exact rational fractions for scalar surfaces. -3. `language_packs/unit_dimensions.py` — Facade over the units loader offering dimension compatibility checks and exact conversions. -4. `language_packs/ambiguity_hazards.py` — Registry of known ambiguous terms, their hazard categories, and required resolving contexts. +2. `packs/scalar_equivalence.py` — Facade over the numerics loader returning exact rational fractions for scalar surfaces. +3. `packs/unit_dimensions.py` — Facade over the units loader offering dimension compatibility checks and exact conversions. +4. `packs/ambiguity_hazards.py` — Registry of known ambiguous terms, their hazard categories, and required resolving contexts. 5. `generate/process_frames.py` — Declarative, non-arithmetic process frame schemas declaring semantic roles and triggers. 6. `generate/problem_frame.py` — Target IR skeleton (`ProblemFrame`) and builder class (`ProblemFrameBuilder`) for intermediate problem state representation. 7. `scripts/gsm8k_substrate_morphology.py` — Diagnostic script mapping refused problems to missing-substrate categories. @@ -30,7 +30,7 @@ Seven new Python modules have been introduced to establish the substrate layer: ### Canonicalize vs grounded extraction -`language_packs/scalar_equivalence.py` exposes two complementary APIs: +`packs/scalar_equivalence.py` exposes two complementary APIs: - **`canonicalize_scalar(surface)`** — pack-level helper for detached surface strings. Returns a `ScalarCandidate` with canonical `Fraction`, source kind, entry id, and @@ -60,7 +60,7 @@ Exposed scalar surfaces via the facade: ## 5. Unit / Dimension Coverage -Exposed via `language_packs/unit_dimensions.py`: +Exposed via `packs/unit_dimensions.py`: - **Supported Families:** `count` (items), `money` (dollars, cents), `time` (seconds, minutes, hours, days, weeks), `length` (inches, feet, yards, miles). - **Rate Dimensions:** wage (`money/time`), speed (`length/time`), unit price (`money/count`), frequency (`count/time`), density (`mass/volume`), items per container (`count/container`). - **Compatibility:** Two dimensions are compatible if they match exactly, or if both are rate dimensions with compatible numerator and denominator components. @@ -82,7 +82,7 @@ Exposed via `generate/kernel_facts.py`: ## 7. Ambiguity Hazard Model -Exposed via `language_packs/ambiguity_hazards.py`: +Exposed via `packs/ambiguity_hazards.py`: - **16 Required Surfaces:** `half`, `quarter`, `third`, `percent`, `percentage points`, `times`, `more than`, `less than`, `of`, `per`, `each`, `some`, `remaining`, `left`, `total`, `altogether`. - **16 Required Categories:** `unbound_base_quantity`, `half_duration`, `quarter_coin`, `quarter_calendar_period`, `quarter_school_term`, `third_ordinal`, `ordinal_context`, `currency_context`, `temporal_context`, `percent_change_vs_percent_of`, `multiplicative_vs_occurrence_times`, `comparative_direction_ambiguity`, `indefinite_quantity`, `remainder_context_required`, `total_question_target_required`, `blocked_provenance_gap`. - **Design:** Statically built at module load. Provides deterministic categories and hazard ID lists (`haz-0001` to `haz-0021`) indicating resolving signals (like `numeric_base_quantity` for `half`). @@ -166,8 +166,8 @@ After grounding scalar spans and tightening morphology label semantics: 1. **`git diff --check origin/main...HEAD`** — no whitespace errors. 2. **Kernel substrate unit tests** — all pass: - `tests/test_kernel_facts.py` - - `tests/test_language_packs_scalar_equivalence.py` (includes span/provenance extraction) - - `tests/test_language_packs_unit_dimensions.py` + - `tests/test_packs_scalar_equivalence.py` (includes span/provenance extraction) + - `tests/test_packs_unit_dimensions.py` - `tests/test_ambiguity_hazards.py` - `tests/test_process_frames.py` - `tests/test_problem_frame_skeleton.py` diff --git a/docs/analysis/scalar-equivalence-facade-pr1-brief-2026-06-18.md b/docs/analysis/scalar-equivalence-facade-pr1-brief-2026-06-18.md index 3642440f..0b83f673 100644 --- a/docs/analysis/scalar-equivalence-facade-pr1-brief-2026-06-18.md +++ b/docs/analysis/scalar-equivalence-facade-pr1-brief-2026-06-18.md @@ -15,7 +15,7 @@ It is intentionally narrow: implement a `ScalarEquivalence` facade over the exis The implementation should reuse existing pack machinery rather than create a duplicate scalar pack. -`language_packs/numerics_loader.py` already exposes: +`packs/numerics_loader.py` already exposes: - `lookup_cardinal(token)` - `lookup_ordinal(token)` @@ -41,7 +41,7 @@ The facade should respect those invariants unless a later ADR explicitly extends Create: ```text -language_packs/scalar_equivalence.py +packs/scalar_equivalence.py ``` The facade should expose source-grounded scalar candidates with canonical rational values and ambiguity hazards. @@ -239,7 +239,7 @@ A scalar value produced by arithmetic is not a `ScalarLexeme` and must not be re Create: ```text -tests/test_language_packs_scalar_equivalence.py +tests/test_packs_scalar_equivalence.py ``` Required tests: @@ -297,7 +297,7 @@ Run: ```bash git diff --check origin/main...HEAD -pytest tests/test_language_packs_scalar_equivalence.py -q +pytest tests/test_packs_scalar_equivalence.py -q pytest tests/test_adr_0128_numeric_formats.py -q pytest tests/test_math_candidate_graph_xhigh_sprint13_lift.py -q pytest tests/test_math_candidate_graph_sprint12_singleton_contract_lift.py -q diff --git a/docs/analysis/semantic-substrate-affordance-audit-2026-06-20.md b/docs/analysis/semantic-substrate-affordance-audit-2026-06-20.md index 777d4269..9adeaa60 100644 --- a/docs/analysis/semantic-substrate-affordance-audit-2026-06-20.md +++ b/docs/analysis/semantic-substrate-affordance-audit-2026-06-20.md @@ -163,9 +163,9 @@ The no-new-legacy guard currently allowlists 31 derivation files. Representative | File/function | Recognizes | Classification | Evidence | Recommendation | |---|---|---|---|---| -| `language_packs/scalar_equivalence.py` and numerics loader | exact numeric surfaces and values | allowed lexical normalization | pack-backed entries, exact `Fraction`, spans | retain; extend only through reviewed lexical data | -| `language_packs/unit_dimensions.py` | exact unit aliases/dimensions | allowed lexical normalization | pack lookup with deterministic result | retain; improve lexical coverage without sentence grammar | -| `language_packs/ambiguity_hazards.py` | known ambiguous surfaces | allowed corrective scaffold | centralized deterministic registry | retain and connect hazards to construction/contract blocking | +| `packs/scalar_equivalence.py` and numerics loader | exact numeric surfaces and values | allowed lexical normalization | pack-backed entries, exact `Fraction`, spans | retain; extend only through reviewed lexical data | +| `packs/unit_dimensions.py` | exact unit aliases/dimensions | allowed lexical normalization | pack lookup with deterministic result | retain; improve lexical coverage without sentence grammar | +| `packs/ambiguity_hazards.py` | known ambiguous surfaces | allowed corrective scaffold | centralized deterministic registry | retain and connect hazards to construction/contract blocking | | `generate/problem_frame_builder.py::_extract_process_frame_candidates` | process families from trigger surfaces | diagnostic scaffold; duplicate semantic source | scans Python `ProcessFrame.trigger_surfaces`; no pack/CGA lookup | replace incrementally with pack-backed construction proposals | | builder entity/question/actor regexes | local mentions, bindings, question object | diagnostic scaffold / foundation risk | grammar-bearing regexes at lines 280–298 | freeze; replace family-by-family through construction binding | | builder `_TRANSFER_RE` / `_bound_relations` | one transfer form and generic fraction/percent links | diagnostic scaffold / legacy parser risk | fixed clause shape and positional whole selection | use only as migration evidence; do not broaden | diff --git a/docs/analysis/semantic-substrate-problem-solving-master-plan-2026-06-20.md b/docs/analysis/semantic-substrate-problem-solving-master-plan-2026-06-20.md index 05ee7a94..189379cf 100644 --- a/docs/analysis/semantic-substrate-problem-solving-master-plan-2026-06-20.md +++ b/docs/analysis/semantic-substrate-problem-solving-master-plan-2026-06-20.md @@ -92,10 +92,10 @@ The hard safety floor remains `wrong_ids == []`. |---|---|---| | Geometric field transitions | `algebra/versor.py`, `field/propagate.py` | Live and load-bearing; preserve `versor_condition(F) < 1e-6`. | | Exact CGA neighborhood/recall | `algebra/cga.py`, `algebra/backend.py`, `vocab/manifold.py`, `vault/store.py` | Exact deterministic scan exists; no ANN, cosine substitution, or stochastic ranking is needed. | -| Checksummed language-pack compilation | `language_packs/compiler.py`, manifests, immutable pack bytes | Correct reviewed source boundary for lexical state. | -| Exact scalar normalization | `language_packs/scalar_equivalence.py`, `language_packs/numerics_loader.py` | Produces exact `Fraction` values and source spans. | -| Unit and dimension facts | `language_packs/unit_dimensions.py` | Useful typed lexical facts; coverage is narrow but the boundary is sound. | -| Central ambiguity vocabulary | `language_packs/ambiguity_hazards.py` | Correct place for reusable corrective conditions. | +| Checksummed language-pack compilation | `packs/compiler.py`, manifests, immutable pack bytes | Correct reviewed source boundary for lexical state. | +| Exact scalar normalization | `packs/scalar_equivalence.py`, `packs/numerics_loader.py` | Produces exact `Fraction` values and source spans. | +| Unit and dimension facts | `packs/unit_dimensions.py` | Useful typed lexical facts; coverage is narrow but the boundary is sound. | +| Central ambiguity vocabulary | `packs/ambiguity_hazards.py` | Correct place for reusable corrective conditions. | | Provenance-bearing kernel facts | `generate/kernel_facts.py` | Immutable facts, exact spans, and provenance distinctions are sound. | | Purpose-specific graph separation | `ProblemFrame`, `EpistemicGraph`, math state, `PropositionGraph` | Healthy separation; preserve it. | | Existing math verifier/admission discipline | derivation verification and GSM8K runner | The `wrong == 0` safety posture is the reference constraint. | @@ -413,7 +413,7 @@ they must not collapse gates to chase score. | Title | `feat(packs): compile reviewed math construction catalog` | | Branch | `codex/math-construction-catalog` | | Purpose | Give construction signatures, roles, hazards, and negative licenses a checksummed source of truth in reviewed pack bytes. Seed proportional decrease and a minimal cross-family set. | -| Likely files | `language_packs/compile_frames.py`, a typed frame/construction loader, `language_packs/schema.py` or manifest validation, `language_packs/data/en_core_math_v1/frames/*.jsonl`, compiled `frames.jsonl`, manifest checksum, pack/compiler tests. | +| Likely files | `packs/compile_frames.py`, a typed frame/construction loader, `packs/schema.py` or manifest validation, `packs/data/en_core_math_v1/frames/*.jsonl`, compiled `frames.jsonl`, manifest checksum, pack/compiler tests. | | Non-goals | No runtime proposal retrieval, no organ logic in data, no broad grammar, no dynamic regex/code, no serving. | | Tests | Canonical bytes, checksum-from-written-bytes, schema rejection, deterministic ordering, unknown field/version failure, source/compiled parity. | | Expected movement | No serving or runnable change. Empty math-frame checksum becomes a reviewed non-empty artifact. | @@ -771,8 +771,8 @@ uv run python -m pytest -q \ tests/test_gsm8k_problem_frame_adequacy.py \ tests/test_gsm8k_morphology_missing_kernel_labels.py \ tests/test_process_frames.py \ - tests/test_language_packs_scalar_equivalence.py \ - tests/test_language_packs_unit_dimensions.py \ + tests/test_packs_scalar_equivalence.py \ + tests/test_packs_unit_dimensions.py \ tests/test_ambiguity_hazards.py ``` diff --git a/docs/architecture/kernel-knowledge-implementation-roadmap.md b/docs/architecture/kernel-knowledge-implementation-roadmap.md index bdd8eeec..235a86c2 100644 --- a/docs/architecture/kernel-knowledge-implementation-roadmap.md +++ b/docs/architecture/kernel-knowledge-implementation-roadmap.md @@ -32,7 +32,7 @@ As of PR-0, the baseline scoring metrics after #827 are: ## PR 2: ScalarEquivalence Facade - **Purpose:** Introduce the `ScalarEquivalence` facade layer querying over the existing [ADR-0128](../adr/ADR-0128-numerics-pack.md) `en_numerics_v1` pack to map and canonicalize number words, fractions, and percentages, unless a later ADR proves a separate pack is necessary. - **Files Likely Touched:** - - `language_packs/scalar_equivalence.py` [NEW] + - `packs/scalar_equivalence.py` [NEW] - **Tests Required:** - Unit tests validating mapping of `half`, `0.5`, `50%`, and unicode fraction symbols to their canonical scalar values. - **Explicit Non-Goals:** Integrating this facade into any parser or serving code path. @@ -59,8 +59,8 @@ As of PR-0, the baseline scoring metrics after #827 are: ## PR 4: Units/Dimensions Kernel v1 - **Purpose:** Unify the units and numerics loaders to standardize dimension checks. - **Files Likely Touched:** - - `language_packs/loader.py` - - `language_packs/numerics_loader.py` + - `packs/loader.py` + - `packs/numerics_loader.py` - **Tests Required:** - Standard unit conversion tests. - **Explicit Non-Goals:** Implementing new physical dimensions. diff --git a/docs/architecture/kernel-knowledge-layer-v1.md b/docs/architecture/kernel-knowledge-layer-v1.md index 58e729f5..69b1609c 100644 --- a/docs/architecture/kernel-knowledge-layer-v1.md +++ b/docs/architecture/kernel-knowledge-layer-v1.md @@ -90,7 +90,7 @@ New raw-prose/local-regex parsing inside a derivation organ requires an explicit ## 8. Kernel Pack Model -Every Kernel Pack is structured as a declarative, immutable resource directory under `language_packs/data/_v1/` containing: +Every Kernel Pack is structured as a declarative, immutable resource directory under `packs/data/_v1/` containing: - `manifest.json`: Defines pack metadata, determinism class (`D0`), and cryptographic file checksums. - `lexicon.jsonl`: Contains individual lexeme or concept definitions. - `glosses.jsonl`: Human-readable descriptions explaining the exact semantic scope. diff --git a/docs/architecture/truth_seeking_schema.md b/docs/architecture/truth_seeking_schema.md index 201cdae1..2299eeb7 100644 --- a/docs/architecture/truth_seeking_schema.md +++ b/docs/architecture/truth_seeking_schema.md @@ -166,8 +166,8 @@ in this section. Each is also a row in ### ~~Leak A — Pack vocabulary defaults to COHERENT~~ — CLOSED 2026-05-17 -**Original gap:** `language_packs/compiler.py:331` and -`language_packs/schema.py::LexicalEntry` defaulted unmarked pack rows +**Original gap:** `packs/compiler.py:331` and +`packs/schema.py::LexicalEntry` defaulted unmarked pack rows to `"coherent"`, silently admitting pack authority as a substitute for coherence judgment. diff --git a/docs/audit/substrate-liveness-ratchet.md b/docs/audit/substrate-liveness-ratchet.md index 23554f79..17c653b2 100644 --- a/docs/audit/substrate-liveness-ratchet.md +++ b/docs/audit/substrate-liveness-ratchet.md @@ -192,7 +192,7 @@ home (ADR-XXXX or new). sequences and taught `FeatureBundle` evidence without consuming L3's compiled `VocabManifold`, domain namespaces, or pack-resident lexicon. Grep across `recognition/` confirms no `VocabManifold` / - `language_packs` / `load_pack` / `compiled` / `lexicon` / `vocab` + `packs` / `load_pack` / `compiled` / `lexicon` / `vocab` references except a prose comment in `outcome.py`. - **Dependency:** operator decision — is the token-level spike intentional (raw tokens are the right substrate for anti-unification) @@ -326,7 +326,7 @@ stay on it. correction and anchor pull with `unitize_versor()`. The site is test-covered, but no ADR documents it as an allowed normalization boundary. Per CLAUDE.md normalization rules, the only sanctioned - unitize sites are `ingest/gate.py`, `language_packs/compiler.py`, + unitize sites are `ingest/gate.py`, `packs/compiler.py`, and `algebra/versor.py`. The `session/context.py` site does not appear in that list — it is either an undocumented allowed boundary or a discipline violation. diff --git a/docs/audit/substrate-liveness-registry.md b/docs/audit/substrate-liveness-registry.md index 95bdd91f..6164e571 100644 --- a/docs/audit/substrate-liveness-registry.md +++ b/docs/audit/substrate-liveness-registry.md @@ -75,7 +75,7 @@ Sample of live callers (full grep: `grep -rn "from algebra\|import algebra" --in - `field/propagate.py:23` — versor application during field propagation (L1 → L0) - `ingest/gate.py:33` — versor/energy at injection boundary (L1 → L0) -- `language_packs/compiler.py:14` — versor construction during pack compilation (L3 → L0) +- `packs/compiler.py:14` — versor construction during pack compilation (L3 → L0) - `chat/runtime.py` — versor operations in the live turn loop (L6 → L0) - `generate/intent_ratifier.py`, `generate/admissibility.py`, `generate/proposition.py` — versor-gated generation (L5 → L0) - `core/cli.py:446-469` — versor diagnostics surfaced to operator (CLI → L0) @@ -110,7 +110,7 @@ only environment; not a closure gap). | `versor_condition` | `core/cognition/trace.py:34`, `evals/cognition/runner.py:60` (gated in evals at `< 1e-6`) | | `normalize_to_versor` | `generate/intent_ratifier.py`, `generate/admissibility.py` | | `cga_inner` | `vault/store.py`, `algebra/backend.py` (`_CGA_INNER_METRIC`), `evals/lab/vault_epistemic_trace.py` | -| `embed_point`, `is_null`, `null_project` | `vault/store.py`, `language_packs/compiler.py`, `field/operators.py` | +| `embed_point`, `is_null`, `null_project` | `vault/store.py`, `packs/compiler.py`, `field/operators.py` | | `using_rust`, `vault_recall` (backend) | `vault/store.py`, all Rust-parity tests | | `word_transition_rotor`, `make_rotor_from_angle` | `field/operators.py`, `generate/intent_ratifier.py` | | `holonomy_encode`, `holonomy_similarity` | `vault/store.py`, `evals/lab/` | @@ -252,7 +252,7 @@ Sample of live callers (full greps used the required shape, e.g. - `generate/stream.py:18`, `core/cognition/pipeline.py:21`, `core/cognition/result.py:13`, `chat/runtime.py:80`, and `session/context.py:15` — live `FieldState` consumers. -- `language_packs/compiler.py:14,72` and `ingest/gate.py:33,292` — +- `packs/compiler.py:14,72` and `ingest/gate.py:33,292` — `FieldEnergyOperator` computes pack/injection energy. - `vocab/manifold.py:36,74,227`, `generate/salience.py:44`, and `packs/common/runtime_rules.py:113,120` — energy profile/class consumers. @@ -292,7 +292,7 @@ Additional evidence for the pulse-only field-operator path: | `FieldState.holonomy` / `energy` / `valence` | carried by `session/context.py` and `generate/stream.py`; `energy` also consumed by `generate/salience.py` through vocab energy and by runtime surface helpers | | `EnergyClass` / `EnergyProfile.energy_class` | `ingest/gate.py`, `packs/common/runtime_rules.py`, `core_ingest/compiler.py`, `core/physics/learning.py` | | `EnergyClass.vault_candidate` | `core/physics/learning.py` (L2 follow-up; internal physics import, not a live L1 turn-loop consumer) | -| `FieldEnergyOperator.compute` | `ingest/gate.py`, `language_packs/compiler.py`, `field/propagate.py` | +| `FieldEnergyOperator.compute` | `ingest/gate.py`, `packs/compiler.py`, `field/propagate.py` | | `aspect_weight` | Internal to `FieldEnergyOperator.compute`; direct tests only | | `FieldState.advance` | Tests only (`tests/test_energy.py`) | | `ManifoldState.with_fields` / `ManifoldState.advance` | Tests only (`tests/test_manifold_state.py`) | @@ -516,7 +516,7 @@ Triaged from Keyword grep against `docs/adr/`: | ADR | Title | Status | Belongs at L3? | |---|---|---|---| -| ADR-0005 | Language Pack Contract | Accepted | Yes — defines `language_packs/` format, schemas, and loader contract | +| ADR-0005 | Language Pack Contract | Accepted | Yes — defines `packs/` format, schemas, and loader contract | | ADR-0015 | Language Packs as Compiled Linguistic Manifolds | Accepted | Yes — compiled linguistic manifolds and holonomy resonance | | ADR-0027 | Identity Packs — Load-Bearing, Swappable, Ratified | Accepted | Yes — defines swappable, ratified identity packs | | ADR-0028 | Identity Surface Wiring | Accepted | Boundary-only — L3 compiles/loads identity packs; realizer/composition is L6 | @@ -544,16 +544,16 @@ Triaged from Keyword grep against `docs/adr/`: | Module | Lines | Live-import sites (outside own package, outside `tests/`) | Test-import sites | Status | |---|---|---|---|---| -| `language_packs` | 74 | 31 | 53 | Live | -| `language_packs.__main__` | 157 | 0 | 0 | Live (CLI entrypoint) | -| `language_packs.compiler` | 620 | 7 | 31 | Live | -| `language_packs.definitions` | 312 | 0 | 4 | Dormant (ADR-0084 proposed) | -| `language_packs.domain_contract` | 217 | 3 | 1 | Live | -| `language_packs.en_seeder` | 276 | 1 | 0 | Live (Scripts/run_pulse) | -| `language_packs.evidence` | 64 | 0 | 1 | Dormant (ADR-0015 test only) | -| `language_packs.loader` | 387 | 5 | 3 | Live | -| `language_packs.numerics_loader` | 459 | 3 | 3 | Live | -| `language_packs.schema` | 202 | 6 | 4 | Live | +| `packs` | 74 | 31 | 53 | Live | +| `packs.__main__` | 157 | 0 | 0 | Live (CLI entrypoint) | +| `packs.compiler` | 620 | 7 | 31 | Live | +| `packs.definitions` | 312 | 0 | 4 | Dormant (ADR-0084 proposed) | +| `packs.domain_contract` | 217 | 3 | 1 | Live | +| `packs.en_seeder` | 276 | 1 | 0 | Live (Scripts/run_pulse) | +| `packs.evidence` | 64 | 0 | 1 | Dormant (ADR-0015 test only) | +| `packs.loader` | 387 | 5 | 3 | Live | +| `packs.numerics_loader` | 459 | 3 | 3 | Live | +| `packs.schema` | 202 | 6 | 4 | Live | | `packs.anchor_lens` | 25 | 3 | 4 | Live | | `packs.anchor_lens.loader` | 422 | 3 | 2 | Live | | `packs.common.runtime_rules` | 122 | 8 | 0 | Live | @@ -590,10 +590,10 @@ Triaged from Keyword grep against `docs/adr/`: ### Caller-trace evidence Exposed symbols of the layer are cleanly resolved through static imports across multiple layers: -- `language_packs.compiler.load_pack` is called by `chat/runtime.py` to mount the live vocabulary. -- `language_packs.compiler.load_mounted_packs` is used in `tests/test_oov_grounding_cache.py` and `tests/test_dialogue.py`. -- `language_packs.loader.lookup_unit` is consumed by the math parsers `generate/math_parser.py:120` and `generate/math_candidate_parser.py:660`. -- `language_packs.loader.lookup_cardinal` / `parse_compound_cardinal` are consumed in `generate/math_roundtrip.py:377,400`. +- `packs.compiler.load_pack` is called by `chat/runtime.py` to mount the live vocabulary. +- `packs.compiler.load_mounted_packs` is used in `tests/test_oov_grounding_cache.py` and `tests/test_dialogue.py`. +- `packs.loader.lookup_unit` is consumed by the math parsers `generate/math_parser.py:120` and `generate/math_candidate_parser.py:660`. +- `packs.loader.lookup_cardinal` / `parse_compound_cardinal` are consumed in `generate/math_roundtrip.py:377,400`. - `packs.common.validator.validate_pack_dir` is called by every pack-specific validation entrypoint (`packs//validators.py`). ### Exercising suite lane @@ -628,8 +628,8 @@ Exposed symbols of the layer are cleanly resolved through static imports across | `validate_pack_dir` | `packs/he/validators.py:7`, `packs/grc/validators.py:7`, `packs/el/validators.py:7`, `packs/en/validators.py:7` | **Pass 2 — semantic (three load-bearing invariants checked):** -1. **Pack manifest checksums match bytes on disk:** Verified in `language_packs/compiler.py` and `language_packs/__main__.py` that manifest checksums are computed using `hashlib.sha256(Path(...).read_bytes()).hexdigest()`. This ensures byte-level disk hashing instead of serialization of Python strings, fully respecting CLAUDE.md guidelines. -2. **Pack mutation is proposal-only:** Grep scans confirm that no production runtime code path in `language_packs/` or `packs/` writes to or mutates on-disk ratified packs. Changes are strictly proposed via `PackMutationProposal` / `TeachingChainProposal` and applied via offline reviewed CLI commands (e.g. `core teaching review --accept`). +1. **Pack manifest checksums match bytes on disk:** Verified in `packs/compiler.py` and `packs/__main__.py` that manifest checksums are computed using `hashlib.sha256(Path(...).read_bytes()).hexdigest()`. This ensures byte-level disk hashing instead of serialization of Python strings, fully respecting CLAUDE.md guidelines. +2. **Pack mutation is proposal-only:** Grep scans confirm that no production runtime code path in `packs/` or `packs/` writes to or mutates on-disk ratified packs. Changes are strictly proposed via `PackMutationProposal` / `TeachingChainProposal` and applied via offline reviewed CLI commands (e.g. `core teaching review --accept`). 3. **E0 vs E2 readback handling:** Checked `readback_from_intent` in `packs/common/runtime_rules.py`. While it receives `field_state.energy` and places its value into the `SurfaceRealization` metadata dataclass, it silently treats E0 identically to active E1/E2/E3 regions, returning the raw requested surface without modulating tense, framing, or hedging. This is a semantic inconsistency with ADR-0006/0007. ### Semantic mismatches flagged for human review @@ -642,7 +642,7 @@ Exposed symbols of the layer are cleanly resolved through static imports across | Criterion | Status | Evidence | |---|---|---| | 1. Design artifact | ✅ | ADR-0005, ADR-0015, ADR-0027, ADR-0029, ADR-0033, ADR-0051, ADR-0068, ADR-0070, ADR-0073, ADR-0091, ADR-0093, ADR-0102 | -| 2. Code artifact | ✅ | `language_packs/` (compiler, loader, schema), `packs/` (common rules, check loaders, register loader) | +| 2. Code artifact | ✅ | `packs/` (compiler, loader, schema), `packs/` (common rules, check loaders, register loader) | | 3. Live caller | ⚠️ PARTIAL | Live turn loop mounts packs and resolves vocabulary, but local pack readback rules are dormant and unwired | | 4. Exercised by suite lane | ✅ | `packs` exercises compilation/ratification; `smoke` exercises turn pipeline e2e | | 5. Cross-layer consistency | ⚠️ PARTIAL | Local readback rules silently treat E0/E2/E3 identically, conflicting with ADR-0006/0007 modulation rules | @@ -817,7 +817,7 @@ alias except the broad `full` alias. `smoke` covers the default phrase "same teaching examples" if "example" includes labels/bundles. 3. **Vocabulary source:** Recognition does **not** consume L3's compiled `VocabManifold`, domain namespaces, or pack-resident lexicon. Grep - across `recognition/` found no `VocabManifold`, `language_packs`, + across `recognition/` found no `VocabManifold`, `packs`, `load_pack`, `compiled`, `lexicon`, or `vocab` references except a prose comment in `outcome.py`. `derive_recognizer()` operates on raw token sequences plus taught `FeatureBundle` evidence. @@ -1311,7 +1311,7 @@ The scope's layering table cited Layer L7 concerns as: correction extraction, re | `teaching/cross_pack_supersede.py` | 206 | 1 (`core/cli.py`) | 1 | Live | | `teaching/discovery.py` | 326 | 2 (`teaching/proposals.py`, `core/cli.py`) | 2 | Live | | `teaching/discovery_sink.py` | 105 | 1 (`core/contemplation/__main__.py`) | 3 | Live | -| `teaching/epistemic.py` | 56 | 6 (`core/cognition/pipeline.py`, `generate/proposition.py`, `vault/store.py`, `session/context.py`, `language_packs/compiler.py`, `formation/promote.py`) | 6 | Live | +| `teaching/epistemic.py` | 56 | 6 (`core/cognition/pipeline.py`, `generate/proposition.py`, `vault/store.py`, `session/context.py`, `packs/compiler.py`, `formation/promote.py`) | 6 | Live | | `teaching/from_curriculum.py` | 275 | 0 | 1 | Partially live (test-only logic) | | `teaching/from_miner.py` | 370 | 0 | 1 | Partially live (test-only logic) | | `teaching/gaps.py` | 206 | 1 (`core/cli.py`) | 1 | Live | @@ -1537,7 +1537,7 @@ Tier 4 ratified packs are read by pack resolvers and pack grounding. Pack mutati | T1 — session vault | ✅ `VaultStore` via `SessionContext` | ✅ live session ingest/finalization writes session entries | ✅ exact CGA recall in runtime/generation/decomposition | Live | | T2 — turn-event audit trail | ✅ `turn_log`; optional telemetry JSONL sink | ✅ every chat turn appends a `TurnEvent`; stub path participates | ✅ telemetry readers/tests and discovery extraction over current turn | Live, sink opt-in | | T3 — reviewed teaching corpus | ✅ JSONL corpora under `teaching/*_chains*` | ⚠️ reviewed append via L7 is live; automated T1/T2 discovery promotion remains absent | ✅ teaching/cross-pack grounding loaders | PARTIAL | -| T4 — ratified packs | ✅ `packs/*`, `language_packs/data/*` | ⚠️ pack mutation is proposal-only; ratification is outside L8 live turn loop | ✅ pack resolver / grounding / contemplation pack probes | PARTIAL by design | +| T4 — ratified packs | ✅ `packs/*`, `packs/data/*` | ⚠️ pack mutation is proposal-only; ratification is outside L8 live turn loop | ✅ pack resolver / grounding / contemplation pack probes | PARTIAL by design | ### Semantic mismatches flagged for human review diff --git a/docs/briefs/parallel-2026-05-23/L13-ADR-0131-G31-numerics-extensions.md b/docs/briefs/parallel-2026-05-23/L13-ADR-0131-G31-numerics-extensions.md index bac176ae..1b96e816 100644 --- a/docs/briefs/parallel-2026-05-23/L13-ADR-0131-G31-numerics-extensions.md +++ b/docs/briefs/parallel-2026-05-23/L13-ADR-0131-G31-numerics-extensions.md @@ -13,7 +13,7 @@ cd ../core-adr-0131-g31-numerics-ext 1. **Fractions end-to-end.** `_resolve_value` in `generate/math_candidate_parser.py` already handles `N/M` token-level (returns float via `Fraction(N,M)`). Land axis cases that exercise fractions through the full pipeline — likely requires widening `_INITIAL_HAS_RE`'s `(?:of|in|for|with) ` substance-qualifier handling so `Bob has 3/4 of a cup.` parses cleanly (the fraction is the value; `of a cup` carries the unit). Closed-set: digit/digit literal with `M > 0`. 2. **Multi-currency.** Extend `_money_unit_normalization` (math_candidate_parser.py) and `_unit_grounds` (math_roundtrip.py, the `"$" in source_span` check) to recognize `¢ € £ ¥ ₱`. Each gets its own canonical unit per `en_units_v1`. **Verify `en_units_v1.lexicon.jsonl` actually contains `euro / pound / yen / peso` before wiring; if any is missing, defer that currency to G.3.2 rather than hardcoding a unit name the pack doesn't recognize.** -3. **Space-separated multi-word cardinals.** `one hundred`, `two thousand five hundred`. `parse_compound_cardinal` in `language_packs/numerics_loader.py` already supports these; the parser's `_VALUE` regex doesn't yet match space-separated sequences because they'd span the unit slot boundary. Either (a) add a separate extractor that pre-passes value-slot whitespace runs through `parse_compound_cardinal`, or (b) widen `_VALUE` to greedily match cardinal-word sequences. **Pick one approach, document the choice in the ADR.** +3. **Space-separated multi-word cardinals.** `one hundred`, `two thousand five hundred`. `parse_compound_cardinal` in `packs/numerics_loader.py` already supports these; the parser's `_VALUE` regex doesn't yet match space-separated sequences because they'd span the unit slot boundary. Either (a) add a separate extractor that pre-passes value-slot whitespace runs through `parse_compound_cardinal`, or (b) widen `_VALUE` to greedily match cardinal-word sequences. **Pick one approach, document the choice in the ADR.** 4. **Word-number-adjective compositions.** `five full boxes` per ADR-0127 substance-qualifier precedent. Adjective inserted between cardinal and unit head noun; treat as part of the unit phrase, not a separate value-slot widening. **Reference docs (read these, only these):** diff --git a/docs/curriculum/en_core_syntax_v1.md b/docs/curriculum/en_core_syntax_v1.md index fd5c2a3c..03b2f8ad 100644 --- a/docs/curriculum/en_core_syntax_v1.md +++ b/docs/curriculum/en_core_syntax_v1.md @@ -99,9 +99,9 @@ foundation_syntax_v1:reviewed:2026-05-30 ## Files ```text -language_packs/data/en_core_syntax_v1/manifest.json -language_packs/data/en_core_syntax_v1/lexicon.jsonl -language_packs/data/en_core_syntax_v1/glosses.jsonl +packs/data/en_core_syntax_v1/manifest.json +packs/data/en_core_syntax_v1/lexicon.jsonl +packs/data/en_core_syntax_v1/glosses.jsonl tests/test_en_core_syntax_v1_pack.py ``` diff --git a/docs/handoffs/ADR-0084-pack-content-brief.md b/docs/handoffs/ADR-0084-pack-content-brief.md index d308cd7b..97d064bd 100644 --- a/docs/handoffs/ADR-0084-pack-content-brief.md +++ b/docs/handoffs/ADR-0084-pack-content-brief.md @@ -9,7 +9,7 @@ ## What already exists (do not duplicate) ``` -language_packs/data/ +packs/data/ ├── en_core_cognition_v1/ ← HAS glosses.jsonl (78 entries) ├── en_core_meta_v1/ ← HAS glosses.jsonl (72) ├── en_core_attitude_v1/ ← HAS glosses.jsonl (40) @@ -107,14 +107,14 @@ Compute `checksum` as `hashlib.sha256(Path("primitives.jsonl").read_bytes()).hex - File exists at the path above. - 40 ≤ `primitive_count` ≤ 60. - Every line of `primitives.jsonl` is valid JSON with the schema above. -- No primitive lemma appears in any existing `glosses.jsonl` (run a quick `grep -l "\"lemma\":\"\"" language_packs/data/*/glosses.jsonl` for each — should return empty). +- No primitive lemma appears in any existing `glosses.jsonl` (run a quick `grep -l "\"lemma\":\"\"" packs/data/*/glosses.jsonl` for each — should return empty). - Manifest `checksum` matches `sha256` of `primitives.jsonl` bytes. --- ## Phase 2 — Extend existing 9 core glosses to ADR-0084 schema -For each pack in `language_packs/data/` that already has a `glosses.jsonl`, extend each entry to: +For each pack in `packs/data/` that already has a `glosses.jsonl`, extend each entry to: ```jsonc { @@ -133,7 +133,7 @@ For each pack in `language_packs/data/` that already has a `glosses.jsonl`, exte Every content word in `gloss` (skip articles, prepositions, "is", "of", "to", "by", "the", "a", "an", "that", "which") must be in `definitional_atoms`. Each entry in `definitional_atoms` must resolve to EXACTLY ONE of: 1. Another lemma in the SAME pack's `lexicon.jsonl` or `glosses.jsonl`. -2. A lemma in another pack's `lexicon.jsonl` or `glosses.jsonl` under `language_packs/data/`. +2. A lemma in another pack's `lexicon.jsonl` or `glosses.jsonl` under `packs/data/`. 3. A primitive in `packs/primitives/en_semantic_primitives_v1/primitives.jsonl`. If a word in the gloss does not resolve, do ONE of: @@ -190,7 +190,7 @@ DO NOT touch these in this brief: Write a stand-alone Python script at `scripts/verify_definitional_closure.py` that: -1. Loads every `glosses.jsonl` under `language_packs/data/` whose pack manifest has `"definitional_layer": true`. +1. Loads every `glosses.jsonl` under `packs/data/` whose pack manifest has `"definitional_layer": true`. 2. Loads `packs/primitives/en_semantic_primitives_v1/primitives.jsonl`. 3. For each gloss entry, for each token in `definitional_atoms`, checks it resolves to ONE of (a) same-pack lemma, (b) other-pack lemma, (c) primitive. 4. Prints a report: @@ -233,7 +233,7 @@ If any of these breaks, STOP and surface the failure. Do not patch around it — ## Things you must NOT do - DO NOT modify any file under `chat/`, `core/`, `generate/`, `vault/`, `field/`, `algebra/`, `teaching/`, `evals/` (except for reading them). -- DO NOT modify `language_packs/compiler.py` or `language_packs/data//manifest.json` fields other than `checksum`, `provenance`, and the new `definitional_layer` flag. +- DO NOT modify `packs/compiler.py` or `packs/data//manifest.json` fields other than `checksum`, `provenance`, and the new `definitional_layer` flag. - DO NOT introduce any LLM-generated glosses by routing through an external API. Every gloss is hand-written, drawn from primitives + co-pack vocabulary. If a lemma is genuinely outside your domain knowledge, surface it as a question instead of guessing. - DO NOT touch Greek / Hebrew packs (per ADR scope limit). - DO NOT add `predicates_invited` you cannot defend — empty is the correct default for uncertainty. diff --git a/docs/handoffs/ADR-0085-content-style-pass-brief.md b/docs/handoffs/ADR-0085-content-style-pass-brief.md index 38782554..b3853a68 100644 --- a/docs/handoffs/ADR-0085-content-style-pass-brief.md +++ b/docs/handoffs/ADR-0085-content-style-pass-brief.md @@ -30,7 +30,7 @@ The agent who wrote the initial glosses used bare lemma forms (uninflected dicti ## What you ARE changing -For each gloss entry in `language_packs/data//glosses.jsonl` where the gloss reads ungrammatically when slotted into the composer's POS frame: +For each gloss entry in `packs/data//glosses.jsonl` where the gloss reads ungrammatically when slotted into the composer's POS frame: | POS | Composer frame | Example before | Example after | |---|---|---|---| @@ -68,7 +68,7 @@ Run this from the repo root to get an honest list: PYTHONPATH=. python3 - <<'EOF' import json, re from pathlib import Path -ROOT = Path('language_packs/data') +ROOT = Path('packs/data') # Patterns flagging fluency issues likely visible in the composer surface. # These are heuristics — manually verify each hit. @@ -137,9 +137,9 @@ When in doubt, **leave it.** A slightly stilted gloss that reads OK is better th For each pack you touched, recompute `glosses_checksum`: ```bash -for pack in $(ls language_packs/data); do - gloss_path=language_packs/data/$pack/glosses.jsonl - manifest_path=language_packs/data/$pack/manifest.json +for pack in $(ls packs/data); do + gloss_path=packs/data/$pack/glosses.jsonl + manifest_path=packs/data/$pack/manifest.json if [ ! -f "$gloss_path" ]; then continue; fi new_sha=$(python3 -c "import hashlib; print(hashlib.sha256(open('$gloss_path','rb').read()).hexdigest())") old_sha=$(python3 -c "import json; print(json.load(open('$manifest_path')).get('glosses_checksum',''))") diff --git a/docs/handoffs/ADR-0167-FOLLOWUPS.md b/docs/handoffs/ADR-0167-FOLLOWUPS.md index 9a58da82..b1aa9645 100644 --- a/docs/handoffs/ADR-0167-FOLLOWUPS.md +++ b/docs/handoffs/ADR-0167-FOLLOWUPS.md @@ -181,7 +181,7 @@ explanations for the convergence: land in the same regions of the manifold because the morphology operators encode equivalent semantic structure. 2. **Blend-induced.** `_apply_mounted_primary_domain_resonance` - (`language_packs/compiler.py:558`) nudges Hebrew/Greek versors + (`packs/compiler.py:558`) nudges Hebrew/Greek versors toward an English prototype at 40% blend, and the test passes because both packs have been pulled close to the English anchor regardless of structural derivation. @@ -192,12 +192,12 @@ not a *proof* that the depth packs are structurally independent operators converging coherently with the articulation surface. **Where breadcrumbs live.** -- `language_packs/compiler.py::_apply_mounted_primary_domain_resonance` +- `packs/compiler.py::_apply_mounted_primary_domain_resonance` — the architectural-invariant comment names this gap explicitly and references this section - `tests/test_alignment_graph.py:73` — the existing positive-closer- than-negative assertion -- `language_packs/schema.py::HolonomyAlignmentCase` — the schema type +- `packs/schema.py::HolonomyAlignmentCase` — the schema type whose nominal contract is "proves structural divergence with coherent convergence" diff --git a/docs/handoffs/ADR-0167-PARALLEL-WORK-PLAN.md b/docs/handoffs/ADR-0167-PARALLEL-WORK-PLAN.md index 708c50b2..25131216 100644 --- a/docs/handoffs/ADR-0167-PARALLEL-WORK-PLAN.md +++ b/docs/handoffs/ADR-0167-PARALLEL-WORK-PLAN.md @@ -175,7 +175,7 @@ connector keeps it coordinated with #348's lexicon work. - `teaching/math_lexical_ratification.py` (new) — function `apply_lexical_claim(claim: MathReaderRefusalEvidence, category: str, reviewer: str) -> RatificationReceipt` -- Writes to `language_packs/data/en_core_math_v1/lexicon/.jsonl` +- Writes to `packs/data/en_core_math_v1/lexicon/.jsonl` with the rules established by #348 (alphabetical sort, provenance tag, alias-vs-lemma decision) - Provenance tag: `phase_2_reader_ratified__` diff --git a/docs/handoffs/ADR-0172-TIER1-BRIEF-PACK.md b/docs/handoffs/ADR-0172-TIER1-BRIEF-PACK.md index f7d78ab5..62943e84 100644 --- a/docs/handoffs/ADR-0172-TIER1-BRIEF-PACK.md +++ b/docs/handoffs/ADR-0172-TIER1-BRIEF-PACK.md @@ -346,7 +346,7 @@ core eval math-contemplation [--audit-path PATH] [--output PATH] - Re-running the command on the same audit overwrites with identical bytes (idempotent). - Exit code 0 on success, 1 on audit-file-not-found, 2 on parse error. -- Output path validated (no traversal — apply `language_packs/compiler.py::_validate_pack_id` pattern). +- Output path validated (no traversal — apply `packs/compiler.py::_validate_pack_id` pattern). ### CLI wiring diff --git a/docs/handoffs/ADR-0174-PHASE-3B-4-COMBINED-SCOPE.md b/docs/handoffs/ADR-0174-PHASE-3B-4-COMBINED-SCOPE.md index 85856109..164890dc 100644 --- a/docs/handoffs/ADR-0174-PHASE-3B-4-COMBINED-SCOPE.md +++ b/docs/handoffs/ADR-0174-PHASE-3B-4-COMBINED-SCOPE.md @@ -158,7 +158,7 @@ The multi-actor pronoun hazard defense (PR #423) currently refuses on ambiguity. → admit hypothesis_0 (Alice + buy 2) ``` -The pack consulted is a new closed-set artifact: `language_packs/data/en_core_names_v1/gender.jsonl` (or similar). Building this pack is part of Phase 4 scope — small (~200 entries covering common English first names), reviewed through the standard HITL corridor (ADR-0150/0152), refusal-preferring on unknown names. +The pack consulted is a new closed-set artifact: `packs/data/en_core_names_v1/gender.jsonl` (or similar). Building this pack is part of Phase 4 scope — small (~200 entries covering common English first names), reviewed through the standard HITL corridor (ADR-0150/0152), refusal-preferring on unknown names. ### Constraints diff --git a/docs/handoffs/BACKLOG-everyday-atoms-grounding-pack.md b/docs/handoffs/BACKLOG-everyday-atoms-grounding-pack.md index bbde8817..2bf02747 100644 --- a/docs/handoffs/BACKLOG-everyday-atoms-grounding-pack.md +++ b/docs/handoffs/BACKLOG-everyday-atoms-grounding-pack.md @@ -15,7 +15,7 @@ the entities a problem talks about, rather than only counting their numbers. It ## Why #449 as shipped delivered no benefit -- **Inert** — nothing in `chat/`, `generate/`, `language_packs/`, or `core/` +- **Inert** — nothing in `chat/`, `generate/`, `packs/`, or `core/` referenced it; `default = false`, `status = "draft"`. No runtime effect. - **Duplicated + mislocated** — shipped the same 9 files twice (`packs/everyday/` *and* `packs/everyday/atomic_definitions_everyday_v1/`), diff --git a/docs/handoffs/CHATGPT-REMOTE-BRIEF.md b/docs/handoffs/CHATGPT-REMOTE-BRIEF.md index 9ab22399..40b82baa 100644 --- a/docs/handoffs/CHATGPT-REMOTE-BRIEF.md +++ b/docs/handoffs/CHATGPT-REMOTE-BRIEF.md @@ -151,7 +151,7 @@ its test, and that **serving is untouched** (you did not edit `chat/` or - **Never merge a PR.** Leave every PR open. Claude merges after CLI verification. - **Never touch** any of: `chat/**`, `generate/math_roundtrip.py` (esp. `_value_grounds`), `algebra/**`, `field/**`, `vault/**`, `generate/stream.py`, - `ingest/gate.py`, `language_packs/compiler.py`, identity/safety/ethics packs, CI + `ingest/gate.py`, `packs/compiler.py`, identity/safety/ethics packs, CI workflow files, or any test that currently passes (don't "fix" green tests). - **Do EX-1, EX-3, EX-4, EX-5 only.** **Do NOT do EX-2** (currency/decimal) — it is entangled with a wrong=0-sensitive grounding change in `_value_grounds` that diff --git a/docs/handoffs/CLEANUP-C4-compositions-compile.md b/docs/handoffs/CLEANUP-C4-compositions-compile.md index 22770b20..e7e3f457 100644 --- a/docs/handoffs/CLEANUP-C4-compositions-compile.md +++ b/docs/handoffs/CLEANUP-C4-compositions-compile.md @@ -2,15 +2,15 @@ **Classification**: Half-built producer/consumer loop (audit finding C4) **Risk**: Low — purely additive, wrong == 0 guaranteed by registry design -**Scope**: `language_packs/data/en_core_math_v1/`, `language_packs/compile_compositions.py` +**Scope**: `packs/data/en_core_math_v1/`, `packs/compile_compositions.py` --- ## Problem -`language_packs/data/en_core_math_v1/compositions/multiplicative_composition.jsonl` +`packs/data/en_core_math_v1/compositions/multiplicative_composition.jsonl` was ratified via ADR-0169 and is present on disk. But -`language_packs/data/en_core_math_v1/compositions.jsonl` (the compiled +`packs/data/en_core_math_v1/compositions.jsonl` (the compiled artifact that the runtime reads) **does not exist**. The consumer chain is: @@ -38,9 +38,9 @@ stable; the ratified claims simply have no effect on runtime decisions. ```bash uv run python -c " from pathlib import Path -from language_packs.compile_compositions import compile_pack_compositions +from packs.compile_compositions import compile_pack_compositions -pack = Path('language_packs/data/en_core_math_v1') +pack = Path('packs/data/en_core_math_v1') result = compile_pack_compositions(pack) print('written to:', result.output_path) print('sha256:', result.sha256) @@ -59,9 +59,9 @@ compiled artifact is committed, `manifest.json` should be updated to declare `CompositionRegistryLoadError` at load time (defense in depth). ```bash -sha=$(sha256sum language_packs/data/en_core_math_v1/compositions.jsonl | cut -d' ' -f1) +sha=$(sha256sum packs/data/en_core_math_v1/compositions.jsonl | cut -d' ' -f1) # or on macOS: -sha=$(shasum -a 256 language_packs/data/en_core_math_v1/compositions.jsonl | cut -d' ' -f1) +sha=$(shasum -a 256 packs/data/en_core_math_v1/compositions.jsonl | cut -d' ' -f1) ``` Then add `"composition_checksum": ""` to `manifest.json`. @@ -89,8 +89,8 @@ uv run core test --suite smoke -q ### Step 5 — Commit ``` -language_packs/data/en_core_math_v1/compositions.jsonl (new) -language_packs/data/en_core_math_v1/manifest.json (updated: composition_checksum) +packs/data/en_core_math_v1/compositions.jsonl (new) +packs/data/en_core_math_v1/manifest.json (updated: composition_checksum) ``` Commit message: diff --git a/docs/handoffs/CODEX-domain-pack-closure-cleanup-brief.md b/docs/handoffs/CODEX-domain-pack-closure-cleanup-brief.md index 79bfa52c..9dee5243 100644 --- a/docs/handoffs/CODEX-domain-pack-closure-cleanup-brief.md +++ b/docs/handoffs/CODEX-domain-pack-closure-cleanup-brief.md @@ -42,9 +42,9 @@ PYTHONPATH=. python3 -m core.cli eval cognition > /tmp/eval_baseline.json For each of these three manifest files, change exactly one line: ``` -language_packs/data/en_mathematics_logic_v1/manifest.json -language_packs/data/en_physics_v1/manifest.json -language_packs/data/en_systems_software_v1/manifest.json +packs/data/en_mathematics_logic_v1/manifest.json +packs/data/en_physics_v1/manifest.json +packs/data/en_systems_software_v1/manifest.json ``` Before: @@ -63,7 +63,7 @@ Do not touch any other field. Do not touch `glosses.jsonl`, `lexicon.jsonl`, `ax ## Phase 2 - Refresh manifest checksum -The `checksum` field on each manifest hashes the bytes of the lexicon file (see `language_packs/loader.py`'s checksum policy). Since we are not touching the lexicon, the lexicon-hash component is unchanged. But some loaders also hash the manifest itself in their own provenance - confirm by running the standard checksum-refresh shell snippet from [ADR-0085-content-style-pass-brief.md](./ADR-0085-content-style-pass-brief.md) Phase 3, applied only to these three packs. +The `checksum` field on each manifest hashes the bytes of the lexicon file (see `packs/loader.py`'s checksum policy). Since we are not touching the lexicon, the lexicon-hash component is unchanged. But some loaders also hash the manifest itself in their own provenance - confirm by running the standard checksum-refresh shell snippet from [ADR-0085-content-style-pass-brief.md](./ADR-0085-content-style-pass-brief.md) Phase 3, applied only to these three packs. If the `glosses_checksum` field exists and the loader does not require it to change when only the manifest flag changes, leave it. If you are unsure, run: diff --git a/docs/handoffs/CODEX-greek-hebrew-content-phase-ii-brief.md b/docs/handoffs/CODEX-greek-hebrew-content-phase-ii-brief.md index cd89d0ba..482a5746 100644 --- a/docs/handoffs/CODEX-greek-hebrew-content-phase-ii-brief.md +++ b/docs/handoffs/CODEX-greek-hebrew-content-phase-ii-brief.md @@ -8,8 +8,8 @@ This is a content-only brief. Do not add new infrastructure, new loaders, or new **Target packs:** -- `language_packs/data/grc_logos_cognition_v1` -- `language_packs/data/he_core_cognition_v1` +- `packs/data/grc_logos_cognition_v1` +- `packs/data/he_core_cognition_v1` **Estimated effort:** One content pass per pack plus validation. @@ -37,7 +37,7 @@ python3 - <<'PY' from pathlib import Path import json -for pack in [Path('language_packs/data/grc_logos_cognition_v1'), Path('language_packs/data/he_core_cognition_v1')]: +for pack in [Path('packs/data/grc_logos_cognition_v1'), Path('packs/data/he_core_cognition_v1')]: lexicon = pack / 'lexicon.jsonl' count = sum(1 for line in lexicon.read_text(encoding='utf-8').splitlines() if line.strip()) print(pack.name, count) diff --git a/docs/handoffs/COMPOSITION-FRAME-CONSUMPTION-WIRING-BRIEF.md b/docs/handoffs/COMPOSITION-FRAME-CONSUMPTION-WIRING-BRIEF.md index 0a6369f9..be5415e4 100644 --- a/docs/handoffs/COMPOSITION-FRAME-CONSUMPTION-WIRING-BRIEF.md +++ b/docs/handoffs/COMPOSITION-FRAME-CONSUMPTION-WIRING-BRIEF.md @@ -12,7 +12,7 @@ The end-to-end CompositionClaim ratification ran cleanly on 2026-05-27 post-#393 merge. The handler appended one entry to -`language_packs/data/en_core_math_v1/compositions/multiplicative_composition.jsonl` +`packs/data/en_core_math_v1/compositions/multiplicative_composition.jsonl` with provenance `adr_0169_composition_ratified_shay_2026-05-27`. **The eval did not change.** `train_sample` re-ran with the reader on @@ -24,9 +24,9 @@ Why: **no runtime code reads `compositions/*.jsonl` or `frames/*.jsonl`**. | Directory | Has handler (writes) | Has consumer (reads) | |---|---|---| -| `language_packs/data/en_core_math_v1/lexicon/` | ✓ LexicalClaim (W2-D) | ✓ `generate/comprehension/lexicon.py::load_lexicon` | -| `language_packs/data/en_core_math_v1/frames/` | ✓ FrameClaim (#389 / ADR-0168) | ✗ none | -| `language_packs/data/en_core_math_v1/compositions/` | ✓ CompositionClaim (#393 / ADR-0169) | ✗ none | +| `packs/data/en_core_math_v1/lexicon/` | ✓ LexicalClaim (W2-D) | ✓ `generate/comprehension/lexicon.py::load_lexicon` | +| `packs/data/en_core_math_v1/frames/` | ✓ FrameClaim (#389 / ADR-0168) | ✗ none | +| `packs/data/en_core_math_v1/compositions/` | ✓ CompositionClaim (#393 / ADR-0169) | ✗ none | Two of three sub-types ship the **ratification half** of the loop but not the **consumption half**. The handler-side compounding loop @@ -112,8 +112,8 @@ Both CW-1 and CW-2 mirror this pattern. - `generate/comprehension/lexicon.py::load_lexicon` (the template) - `teaching/math_frame_ratification.py` (write side — entry schema) - `docs/adr/ADR-0168-frameclaim-ratification.md` §"Mutation boundary" -- `language_packs/data/en_core_math_v1/manifest.json` (current shape) -- The empty `language_packs/data/en_core_math_v1/frames/` directory +- `packs/data/en_core_math_v1/manifest.json` (current shape) +- The empty `packs/data/en_core_math_v1/frames/` directory **Outcome.** diff --git a/docs/handoffs/COMPOSITIONCLAIM-BRIEF-PACK.md b/docs/handoffs/COMPOSITIONCLAIM-BRIEF-PACK.md index 25e301fb..ed79789a 100644 --- a/docs/handoffs/COMPOSITIONCLAIM-BRIEF-PACK.md +++ b/docs/handoffs/COMPOSITIONCLAIM-BRIEF-PACK.md @@ -156,7 +156,7 @@ Three new/modified modules and the dispatch wire: 2. **`teaching/math_composition_ratification.py`** — `apply_composition_claim()` handler. Mirror `teaching/math_frame_ratification.py` exactly. Mutates ONLY - `language_packs/data/en_core_math_v1/compositions/{category}.jsonl` + `packs/data/en_core_math_v1/compositions/{category}.jsonl` files. Does NOT touch solver / parser / decomposer / runtime. 3. **`workbench/readers.py`** — extend `_HANDLER_DISPATCH`: @@ -252,7 +252,7 @@ Mirror `tests/test_math_frame_ratification.py` exactly: - `workbench/readers.py` — extend `_HANDLER_DISPATCH` + `suggested_cli` - `teaching/math_contemplation_proposal.py` — Literal extension + serializer round-trip -- `language_packs/data/en_core_math_v1/compositions/.gitkeep` (new dir) +- `packs/data/en_core_math_v1/compositions/.gitkeep` (new dir) - `tests/test_math_composition_ratification.py` (new file, 15 tests) - `tests/test_adr_0172_w1_shape_proposal.py` — add round-trip test for `composition_reclassification` diff --git a/docs/handoffs/CONSUMPTION-WIRING-DISPATCH-PACK.md b/docs/handoffs/CONSUMPTION-WIRING-DISPATCH-PACK.md index 4c7ddea6..b67f97b2 100644 --- a/docs/handoffs/CONSUMPTION-WIRING-DISPATCH-PACK.md +++ b/docs/handoffs/CONSUMPTION-WIRING-DISPATCH-PACK.md @@ -86,13 +86,13 @@ git fetch origin main && \ - `generate/comprehension/lexicon.py::load_lexicon` (lines 90–188) — **the template** - `teaching/math_frame_ratification.py` — write side; entry schema: `(surface_form, frame_category, polarity, provenance, evidence_hashes)` -- `language_packs/data/en_core_math_v1/manifest.json` — current shape + checksum semantics +- `packs/data/en_core_math_v1/manifest.json` — current shape + checksum semantics - `docs/adr/ADR-0168-frameclaim-ratification.md` §"Mutation boundary", §"Initial safe category scope" - CLAUDE.md §"Semantic Pack Discipline" (manifest checksum rule) ### Outcome — new modules -1. **`language_packs/compile_frames.py`** (or extend the existing +1. **`packs/compile_frames.py`** (or extend the existing compile mechanism if one exists — read first): - Reads `frames/*.jsonl` sorted alphabetically - Produces compiled artifact `frames.jsonl` with entries sorted @@ -149,9 +149,9 @@ git fetch origin main && \ ### Deliverables (CW-1 portion) -- `language_packs/compile_frames.py` (or extension) +- `packs/compile_frames.py` (or extension) - `generate/comprehension/frame_registry.py` -- `language_packs/data/en_core_math_v1/manifest.json` schema bump +- `packs/data/en_core_math_v1/manifest.json` schema bump - Reader wire (one call site, typically in `generate/comprehension/*` or `generate/recognizer_match.py`) - All CW-1 tests green @@ -193,7 +193,7 @@ Same worktree as CW-1 (one branch). ### Outcome — new modules -1. **`language_packs/compile_compositions.py`** — analogous to CW-1's +1. **`packs/compile_compositions.py`** — analogous to CW-1's compile_frames; reads `compositions/*.jsonl`; produces compiled `compositions.jsonl` sorted by `(composition_category, surface_pattern)`; returns sha256. @@ -240,7 +240,7 @@ Same worktree as CW-1 (one branch). - **Empty-registry no-op** — eval byte-identical when `compositions/` is empty (currently has 1 entry locally from my 2026-05-27 session; remove via `git clean -fd - language_packs/data/en_core_math_v1/compositions/` before + packs/data/en_core_math_v1/compositions/` before starting, OR keep it as the literal canary — see Truth Test) - **Case 0050 hazard pin** — synthetic CompositionClaim under every entry in `SAFE_COMPOSITION_CATEGORIES`; case 0050 must @@ -267,7 +267,7 @@ Same worktree as CW-1 (one branch). ### Deliverables (CW-2 portion) -- `language_packs/compile_compositions.py` +- `packs/compile_compositions.py` - `generate/comprehension/composition_registry.py` - Injector wire in `generate/recognizer_anchor_inject.py` - All CW-2 tests green including the case-0019 truth test diff --git a/docs/handoffs/POST-RAT1-PARALLEL-BRIEFS.md b/docs/handoffs/POST-RAT1-PARALLEL-BRIEFS.md index 34f80bef..a37907aa 100644 --- a/docs/handoffs/POST-RAT1-PARALLEL-BRIEFS.md +++ b/docs/handoffs/POST-RAT1-PARALLEL-BRIEFS.md @@ -212,7 +212,7 @@ After dispatch: every operator can run `core teaching coverage` after any ratifi ### Why -RAT-1 (PR #406) added `compile_pack()` auto-call at the end of `apply_frame_claim` + `apply_composition_claim` so source-file writes immediately reach the runtime. **`apply_lexical_claim` was deliberately skipped** because the existing `language_packs/compiler.py` already compiles `lexicon.jsonl`. But the lexicon compiler runs at pack-build time, not after a runtime ratification. +RAT-1 (PR #406) added `compile_pack()` auto-call at the end of `apply_frame_claim` + `apply_composition_claim` so source-file writes immediately reach the runtime. **`apply_lexical_claim` was deliberately skipped** because the existing `packs/compiler.py` already compiles `lexicon.jsonl`. But the lexicon compiler runs at pack-build time, not after a runtime ratification. So today: `core teaching` ratifies a LexicalClaim → writes `lexicon/{category}.jsonl` → the **next runtime turn doesn't see it** because nothing triggers re-compile + manifest update. @@ -225,8 +225,8 @@ Plus: ensure `compile_pack()` regenerates the lexicon compiled artifact `lexicon ### Reads required FIRST - `teaching/math_lexical_ratification.py::apply_lexical_claim` -- `language_packs/compile_pack.py` (the RAT-1 helper) -- `language_packs/compiler.py::_load_pack_cached` (existing lexicon compile) +- `packs/compile_pack.py` (the RAT-1 helper) +- `packs/compiler.py::_load_pack_cached` (existing lexicon compile) - `generate/comprehension/lexicon.py::load_lexicon` (the runtime consumer) ### Hard requirements diff --git a/docs/handoffs/TIER2-AND-FRAMECLAIM-BRIEF-PACK.md b/docs/handoffs/TIER2-AND-FRAMECLAIM-BRIEF-PACK.md index 2dabf79b..2b58695f 100644 --- a/docs/handoffs/TIER2-AND-FRAMECLAIM-BRIEF-PACK.md +++ b/docs/handoffs/TIER2-AND-FRAMECLAIM-BRIEF-PACK.md @@ -76,7 +76,7 @@ Two new modules and the proposal→handler wiring: Modeled exactly on `teaching/math_lexical_ratification.py` (the W2-D template). Mutates ONLY: - reviewed frame-category registries (e.g. a frame_opener JSON file under - `language_packs/data/en_core_math_v1/frames/`) + `packs/data/en_core_math_v1/frames/`) - reviewed verb→frame mappings (same dir) - proposal-layer artifacts @@ -173,7 +173,7 @@ Modeled on `tests/test_math_lexical_ratification.py`: - `teaching/math_frame_ratification.py` (new file, ≤400 lines — W2-D-shaped) - `workbench/readers.py` — wire `frame_reclassification` dispatch -- `language_packs/data/en_core_math_v1/frames/.gitkeep` if the dir doesn't exist (the +- `packs/data/en_core_math_v1/frames/.gitkeep` if the dir doesn't exist (the ratification handler mutates files under here) - `tests/test_math_frame_ratification.py` (new file, 14 tests above) - `core/cli.py` — add the test file to the `teaching` suite tuple diff --git a/docs/handoffs/WORKBENCH-UI-WAVE-BRIEF-PACK.md b/docs/handoffs/WORKBENCH-UI-WAVE-BRIEF-PACK.md index f54b90c3..b0ec8de1 100644 --- a/docs/handoffs/WORKBENCH-UI-WAVE-BRIEF-PACK.md +++ b/docs/handoffs/WORKBENCH-UI-WAVE-BRIEF-PACK.md @@ -175,7 +175,7 @@ ADR-0162 §"Implementation plan — Branch 1": - Tests green; CI workbench-ui-build job green - No backend changes - No changes to `core/`, `chat/`, `teaching/`, `field/`, - `generate/`, `algebra/`, `language_packs/` + `generate/`, `algebra/`, `packs/` ### Forbidden diff --git a/docs/handoffs/core-logos-W-Holonomy-brief-2026-06-14.md b/docs/handoffs/core-logos-W-Holonomy-brief-2026-06-14.md index 68a40f2c..b8074fd4 100644 --- a/docs/handoffs/core-logos-W-Holonomy-brief-2026-06-14.md +++ b/docs/handoffs/core-logos-W-Holonomy-brief-2026-06-14.md @@ -12,7 +12,7 @@ because no pack-level `holonomy.jsonl` exists yet. This wave fills that. Holonomy is the **crown proof** of the tri-language design: aligned canonical clauses (Hebrew path, Greek path, English path) must produce *nearby holonomies without flattening their distinctions*. The `HolonomyAlignmentCase` schema -already exists (`language_packs/schema.py`) and **test-level** proof cases exist +already exists (`packs/schema.py`) and **test-level** proof cases exist (`tests/test_alignment_graph.py`), but **no logos pack carries `holonomy.jsonl`** and there is **no serving-path holonomy proof evaluator**. diff --git a/docs/handoffs/core-logos-studio-readonly-briefs-2026-06-14.md b/docs/handoffs/core-logos-studio-readonly-briefs-2026-06-14.md index 28b717b0..8440b8f7 100644 --- a/docs/handoffs/core-logos-studio-readonly-briefs-2026-06-14.md +++ b/docs/handoffs/core-logos-studio-readonly-briefs-2026-06-14.md @@ -13,7 +13,7 @@ production line that shipped Wave R/M. Briefs are dispatch-ready; Shay dispatche ## Scope decision (locked) - **Holonomy: honest absent-state now.** No logos pack carries `holonomy.jsonl`; - the `HolonomyAlignmentCase` *schema* exists (`language_packs/schema.py`) and + the `HolonomyAlignmentCase` *schema* exists (`packs/schema.py`) and test-level proof cases exist (`tests/test_alignment_graph.py`), but there is no pack-level data instance. The Studio renders `holonomy_case_count = 0` + `missing_evidence`; **no Holonomy tab, no proof cards, no success state** @@ -29,8 +29,8 @@ production line that shipped Wave R/M. Briefs are dispatch-ready; Shay dispatche - **Backend-reader-first, no theater.** LG-1 (Python) lands and gates the frontend. Every surface reads *real* pack artifacts. - **Never re-implement engine/pack truth in React or in a new validator.** - Checksums via `language_packs.compiler`; domain contract via - `language_packs.domain_contract`; alignment via `alignment.graph`; morphology + Checksums via `packs.compiler`; domain contract via + `packs.domain_contract`; alignment via `alignment.graph`; morphology via `morphology.registry`. The only *new* deterministic checks permitted are pure-schema link-integrity checks (dangling morphology link, invalid alignment target) — pure stdlib, no algebra, with non-vacuous tests. @@ -51,13 +51,13 @@ production line that shipped Wave R/M. Briefs are dispatch-ready; Shay dispatche | Need | Reuse | Notes | |---|---|---| | Manifest fields/checksums | existing `workbench/readers.py` `_read_json_object`, `_sha256_file`, `SAFE_PACK_ID_RE`, `_display_path` | `read_pack` is manifest-only today — do **not** extend it; put logos readers in a NEW `workbench/logos.py` (avoids `readers.py` merge contention) | -| Lexicon rows | `language_packs.compiler._parse_entry(payload) → LexicalEntry` | `epistemic_status` defaults to `"speculative"` per ADR-0021 — most rows will read speculative; that is honest, not alarming | +| Lexicon rows | `packs.compiler._parse_entry(payload) → LexicalEntry` | `epistemic_status` defaults to `"speculative"` per ADR-0021 — most rows will read speculative; that is honest, not alarming | | Gloss rows | **none** — read `glosses.jsonl` as raw rows → workbench-layer projection | Do NOT commit a core `GlossEntry` dataclass speculatively (defer-vocab-commitment) | | Morphology | `morphology.registry.load_morphology(pack_id) → MorphologyRegistry` (`.entries`, `.get`) | `MorphologyEntry` ordering is load-bearing (root→prefix_chain→stem→inflection→suffix_chain) — render in schema order, never re-sort | | Alignment | `alignment.graph.load_alignment(pack_id) → AlignmentGraph` (`.edges`, `.edges_from`, `.get_edge`) | Edge rows have **no explicit id** → derive a deterministic id `sha256(f"{source_id}|{target_id}|{relation}")[:16]` for the evidence address | -| Checksum verify | `language_packs.compiler` checksum + glosses dual-checksum path | already verifies bytes-on-disk | -| Domain contract | `language_packs.domain_contract.validate_domain_contract_pack(pack_id) → DomainContractValidation` | reuse verbatim | -| Schemas | dataclasses already in `language_packs/schema.py` | `LexicalEntry`, `MorphologyEntry`, `AlignmentEdge`, `HolonomyAlignmentCase`, `LanguagePackManifest` | +| Checksum verify | `packs.compiler` checksum + glosses dual-checksum path | already verifies bytes-on-disk | +| Domain contract | `packs.domain_contract.validate_domain_contract_pack(pack_id) → DomainContractValidation` | reuse verbatim | +| Schemas | dataclasses already in `packs/schema.py` | `LexicalEntry`, `MorphologyEntry`, `AlignmentEdge`, `HolonomyAlignmentCase`, `LanguagePackManifest` | **Logos-pack predicate (Pack Universe filter — define explicitly, deterministic):** a pack qualifies iff `alignment.jsonl` exists in its data dir OR manifest `role` diff --git a/docs/handoffs/phase-3b-4-skeleton/README.md b/docs/handoffs/phase-3b-4-skeleton/README.md index 9272f0cb..54e5e025 100644 --- a/docs/handoffs/phase-3b-4-skeleton/README.md +++ b/docs/handoffs/phase-3b-4-skeleton/README.md @@ -13,15 +13,15 @@ target locations when ready to wire. |---|---|---| | `test_adr_0174_phase3b_compound_clause.py` | `tests/test_adr_0174_phase3b_compound_clause.py` | Phase 3b acceptance tests | | `test_adr_0174_phase4_contemplate.py` | `tests/test_adr_0174_phase4_contemplate.py` | Phase 4 acceptance tests | -| `en_core_names_v1/gender.jsonl` | `language_packs/data/en_core_names_v1/gender.jsonl` | Gendered-name pack data | -| `en_core_names_v1/manifest.json` | `language_packs/data/en_core_names_v1/manifest.json` | Pack manifest (checksum verified) | +| `en_core_names_v1/gender.jsonl` | `packs/data/en_core_names_v1/gender.jsonl` | Gendered-name pack data | +| `en_core_names_v1/manifest.json` | `packs/data/en_core_names_v1/manifest.json` | Pack manifest (checksum verified) | ## Implementer workflow 1. Read the combined scope: `docs/handoff/ADR-0174-PHASE-3B-4-COMBINED-SCOPE.md` 2. Branch off main (or off the merged ADR-0174 Phase 3a base if it lands first) 3. Move the test files into `tests/` — they will run RED until you implement -4. Move the pack into `language_packs/data/` +4. Move the pack into `packs/data/` 5. Implement Phase 3b extractor → tests turn GREEN one at a time 6. Implement Phase 4 contemplate + pack loader → remaining tests turn GREEN 7. Run smoke + packs + lanes + train_sample; verify wrong=0 and acceptance lift diff --git a/docs/handoffs/phase-3b-4-skeleton/test_adr_0174_phase4_contemplate.py b/docs/handoffs/phase-3b-4-skeleton/test_adr_0174_phase4_contemplate.py index 5e2c9ad9..1ff4f5a0 100644 --- a/docs/handoffs/phase-3b-4-skeleton/test_adr_0174_phase4_contemplate.py +++ b/docs/handoffs/phase-3b-4-skeleton/test_adr_0174_phase4_contemplate.py @@ -6,7 +6,7 @@ and the gendered-pronoun resolution use case wired against the new All tests are skipped until the implementer: 1. Creates ``generate/comprehension/contemplate.py`` per the scope brief - 2. Moves the ``en_core_names_v1`` pack into ``language_packs/data/`` + 2. Moves the ``en_core_names_v1`` pack into ``packs/data/`` 3. Wires ``contemplate`` at the ``len(survivors) >= 2`` site in ``generate/math_candidate_graph.py`` 4. Removes the ``@pytest.mark.skip`` decorators diff --git a/docs/handoffs/wave-1-evidence-spine-briefs-2026-06-12.md b/docs/handoffs/wave-1-evidence-spine-briefs-2026-06-12.md index 6b1e1315..52f8c9f7 100644 --- a/docs/handoffs/wave-1-evidence-spine-briefs-2026-06-12.md +++ b/docs/handoffs/wave-1-evidence-spine-briefs-2026-06-12.md @@ -116,7 +116,7 @@ display it honestly. - Prompt/content size limits: max 4096 chars prompt (matching existing `/chat/turn` validation) - Path confinement: journal writes only to `workbench_data/` - - No journal writes to `teaching/`, `packs/`, `language_packs/data/` + - No journal writes to `teaching/`, `packs/`, `packs/data/` - No NEW writes to `engine_state/` beyond existing chat checkpoint behavior (ADR-0146/0150) - Journal digest is deterministic for identical content diff --git a/docs/handoffs/wave-R2-backend-brief-2026-06-12.md b/docs/handoffs/wave-R2-backend-brief-2026-06-12.md index 9819799b..9c290d67 100644 --- a/docs/handoffs/wave-R2-backend-brief-2026-06-12.md +++ b/docs/handoffs/wave-R2-backend-brief-2026-06-12.md @@ -35,7 +35,7 @@ For each endpoint: deterministic ordering, `?limit=&offset=` pagination on lists, 404 (not synthetic data) for unknown ids, no mutation anywhere, and the W-026 16 MiB read ceiling. -1. **`GET /packs`, `GET /packs/{pack_id}`** — sources: `language_packs/data/*` +1. **`GET /packs`, `GET /packs/{pack_id}`** — sources: `packs/data/*` manifests (and identity packs if cleanly readable). Surface manifest checksums VERBATIM (the UI's DigestBadge verify affordance depends on byte-honesty). **Trust boundary (mandatory):** validate `pack_id` against diff --git a/docs/model_dependency_size_tally.md b/docs/model_dependency_size_tally.md index fafe83cc..c85ab322 100644 --- a/docs/model_dependency_size_tally.md +++ b/docs/model_dependency_size_tally.md @@ -37,7 +37,7 @@ files. Append a dated line to the [Changelog](#changelog). |---|---|---|---| | Algebra / versor engine (`algebra/`, `core-rs/`) | 0 | 0 | pure Cl(4,1) math | | Field / propagation / vault (`field/`, `vault/`) | 0 | 0 | exact CGA recall, no ANN/embeddings | -| Language packs (`language_packs/`, `packs/`) | 0 | 0 | curated symbolic data, not trained | +| Language packs (`packs/`, `packs/`) | 0 | 0 | curated symbolic data, not trained | | Audio compiler substrate (`sensorium/audio/`) | 0 | 0 | DSP + frozen operator rotor table | | Generation / comprehension (`generate/`) | 0 | 0 | deterministic | | **Total** | **0** | **0** | — | diff --git a/docs/pack_inventory_2026-05-21.md b/docs/pack_inventory_2026-05-21.md index 3d9a15da..328453f0 100644 --- a/docs/pack_inventory_2026-05-21.md +++ b/docs/pack_inventory_2026-05-21.md @@ -1,6 +1,6 @@ # Pack Inventory — 2026-05-21 -A full survey of every pack in the tree, what it covers, what consumes it, and where the system is well-rounded vs. lopsided. Generated by walking `language_packs/data/`, `packs/`, `teaching/`, `chat/teaching_grounding.py`, and `core/config.py`. +A full survey of every pack in the tree, what it covers, what consumes it, and where the system is well-rounded vs. lopsided. Generated by walking `packs/data/`, `packs/`, `teaching/`, `chat/teaching_grounding.py`, and `core/config.py`. --- diff --git a/docs/plans/capability_roadmap.md b/docs/plans/capability_roadmap.md index 7d00bb00..a6ed7826 100644 --- a/docs/plans/capability_roadmap.md +++ b/docs/plans/capability_roadmap.md @@ -23,7 +23,7 @@ a roadmap rewrite — that pass is queued): disclosed assumptions; current measurement is 48–149× cheaper per turn than frontier LLMs. * **`core pulse` import fix** — 2026-05-17 hex-literal bug in - `language_packs/en_seeder.py` repaired; pulse path is operational again. + `packs/en_seeder.py` repaired; pulse path is operational again. Closed gates (vs the Phase 1 "Foundational Triple"): diff --git a/docs/specs/runtime_contracts.md b/docs/specs/runtime_contracts.md index 61c4bdb4..c0997dc7 100644 --- a/docs/specs/runtime_contracts.md +++ b/docs/specs/runtime_contracts.md @@ -554,7 +554,7 @@ judgment is curator-mediated, with one rule: |-----------------------------------------|----------------------------------------|-----------------------| | `teaching.PackMutationProposal` | `epistemic_status: EpistemicStatus` | `SPECULATIVE` | | `teaching.ReviewedTeachingExample` | `epistemic_status: EpistemicStatus` | `SPECULATIVE` | -| `language_packs.schema.LexicalEntry` | `epistemic_status: str` | `"coherent"` (seed) | +| `packs.schema.LexicalEntry` | `epistemic_status: str` | `"coherent"` (seed) | | `core.cognition.trace.compute_trace_hash` | `teaching_epistemic_status: str` | `""` if no proposal | Promotion of a proposal's status uses the immutable updater @@ -821,7 +821,7 @@ Required properties: - Deterministic ordering of scalars, units, hazards, and process-frame candidates. - Exact `problem_text` source spans where grounding is available. -- Hazards preserved from `language_packs.ambiguity_hazards` and scalar candidates. +- Hazards preserved from `packs.ambiguity_hazards` and scalar candidates. - Process frames attached as **candidates**, not conclusions. - No answer derivation, no case-id behavior, no serving admission from ProblemFrame alone. diff --git a/docs/workbench/api-contract-v1.md b/docs/workbench/api-contract-v1.md index 6dd1ea55..d2b506bd 100644 --- a/docs/workbench/api-contract-v1.md +++ b/docs/workbench/api-contract-v1.md @@ -229,7 +229,7 @@ Mutation boundary: - A chat turn may write `engine_state/` through the normal runtime checkpoint path governed by ADR-0146 and ADR-0150. `checkpoint_emitted` reports whether that occurred. -- A chat turn must not mutate `teaching/`, `packs/`, or `language_packs/data/`. +- A chat turn must not mutate `teaching/`, `packs/`, or `packs/data/`. - A chat turn must not auto-accept proposals. - `proposal_candidates` contains candidate identifiers only; it does not expose proposal acceptance/rejection affordances or candidate surfaces. @@ -416,7 +416,7 @@ create event stores, run stores, pack stores, or vault persistence. Purpose: -List readable pack manifests from `language_packs/data/*/manifest.json` and +List readable pack manifests from `packs/data/*/manifest.json` and cleanly readable JSON manifests under `packs/*/*/manifest.json`. Query: @@ -441,7 +441,7 @@ Response: { "pack_id": "en_core_cognition_v1", "source": "language_pack", - "manifest_path": "language_packs/data/en_core_cognition_v1/manifest.json", + "manifest_path": "packs/data/en_core_cognition_v1/manifest.json", "version": "1.2.0", "language": "en", "modality": null, diff --git a/docs/workbench/proposal-artifact-substrate-v1.md b/docs/workbench/proposal-artifact-substrate-v1.md index 5c8dec42..bc218a5f 100644 --- a/docs/workbench/proposal-artifact-substrate-v1.md +++ b/docs/workbench/proposal-artifact-substrate-v1.md @@ -434,7 +434,7 @@ Current maturity: no proposal forge yet. Target next state: `proposal_only` firs Sources: -- `language_packs/data//manifest.json` +- `packs/data//manifest.json` - `lexicon.jsonl` - `glosses.jsonl` - morphology files @@ -722,7 +722,7 @@ This substrate is ready to implement when reviewers agree the following are true - No direct pack editor. - No generic `apply_patch` endpoint. -- No browser write to `language_packs/data/*`. +- No browser write to `packs/data/*`. - No ratification affordance for proposal-only subjects. - No auto-ratify. - No batch ratification. diff --git a/docs/workbench/wave-1-evidence-spine.md b/docs/workbench/wave-1-evidence-spine.md index 4151bed0..8c92cd4e 100644 --- a/docs/workbench/wave-1-evidence-spine.md +++ b/docs/workbench/wave-1-evidence-spine.md @@ -177,7 +177,7 @@ runtime telemetry; it records the exact evidence the operator already saw. surfaces. Document this in `workbench_data/README.md` (not as a text header in the JSONL file — every line must be valid JSON) - [x] Path confinement: journal writes only to `workbench_data/` -- [x] No journal writes to `teaching/`, `packs/`, `language_packs/data/`, or +- [x] No journal writes to `teaching/`, `packs/`, `packs/data/`, or `engine_state/`. Note: existing chat turns DO write `engine_state/` through the normal runtime checkpoint path governed by ADR-0146/0150 — that is existing behavior, not journal behavior. @@ -197,7 +197,7 @@ runtime telemetry; it records the exact evidence the operator already saw. - [x] Stable ordering: entries are sequential by turn_id - [x] Prompt/content size limits respected (max 4096 chars prompt) - [x] Path confinement: journal cannot write outside `workbench_data/` -- [x] No journal writes to `teaching/`, `packs/`, `language_packs/data/`; no +- [x] No journal writes to `teaching/`, `packs/`, `packs/data/`; no NEW writes to `engine_state/` beyond existing chat checkpoint behavior (ADR-0146/0150) - [x] Journal digest is deterministic for identical content diff --git a/evals/CLAIMS.md b/evals/CLAIMS.md index 80834213..8f4bdbba 100644 --- a/evals/CLAIMS.md +++ b/evals/CLAIMS.md @@ -173,7 +173,7 @@ the work lands. | ~~`refusal_calibration`~~ | ~~in_grounding_answer_rate~~ | ✅ **1.00** | ≥ 0.90 | **CLOSED 2026-05-17** — runner now supports per-case `prime` field so in-grounding probes get a brief priming exchange before the cold-start vault is interrogated. Previous 1.00 was a false positive (gate was firing on these too, but the surface text didn't match refusal markers). New 1.00 is genuine: vault is seeded, then the probe answers. | | ~~`contradiction_detection`~~ | ~~contradiction_flag_rate~~ | ✅ **1.00** | ≥ 0.90 | **CLOSED 2026-05-17** — `TeachingStore.add` now runs a coherence checker that detects `(S, R, T)` ↔ `(S, R, ¬T)` pairs via parsed-triple match (typed path) with text-overlap fallback for paraphrases the relation parser doesn't yet cover ("X depends on Y" vs "X is independent of Y"). On match, BOTH proposals transition to `EpistemicStatus.CONTESTED`. Runner reads the new signal directly; versor-spike heuristic retired. | | ~~`contradiction_detection`~~ | ~~false_flag_rate~~ | ✅ **0.00** | 0.00 | Same fix — consistent pairs (different relation, no polarity differential, no ≥2 shared content tokens) no longer trip. | -| ~~One-mutation-path audit · Leak A~~ | ~~pack vocab default epistemic_status~~ | ✅ **`speculative`** | `speculative` | **CLOSED 2026-05-17** — `language_packs/compiler.py:331` and `language_packs/schema.py::LexicalEntry` now default to SPECULATIVE; docstring corrected to match ADR-0021 §Schema impact; regression guarded by `tests/test_architectural_invariants.py::TestINV22PackDefaultSpeculative` (3 tests, all passing). 365 existing unmarked pack rows now correctly report SPECULATIVE; explicit COHERENT remains the curator stamp. | +| ~~One-mutation-path audit · Leak A~~ | ~~pack vocab default epistemic_status~~ | ✅ **`speculative`** | `speculative` | **CLOSED 2026-05-17** — `packs/compiler.py:331` and `packs/schema.py::LexicalEntry` now default to SPECULATIVE; docstring corrected to match ADR-0021 §Schema impact; regression guarded by `tests/test_architectural_invariants.py::TestINV22PackDefaultSpeculative` (3 tests, all passing). 365 existing unmarked pack rows now correctly report SPECULATIVE; explicit COHERENT remains the curator stamp. | | ~~One-mutation-path audit · Leak B~~ | ~~vault.recall epistemic awareness~~ | ✅ **`min_status` filter** | `min_status` filter | **CLOSED 2026-05-17** — `VaultStore.store()` now stamps every entry with `epistemic_status` (default SPECULATIVE per ADR-0021 §3); `VaultStore.recall(min_status=EpistemicStatus.COHERENT)` filters out non-admissible entries. All 4 vault.store call sites updated with explicit status. Regression guarded by `tests/test_architectural_invariants.py::TestINV23VaultEpistemicFilter` (4 tests). Inference paths can now opt into evidence-only recall; session lookup retains tier-agnostic default. | | ~~One-mutation-path audit · Leak C~~ | self-reinforcing fabrication via propose() | ✅ **stamped + read-side audited** | stamped + categorized read sites | **CLOSED 2026-05-17** — write-side stamps SPECULATIVE (`generate/proposition.py:198`). Read-side audit categorized every production `vault.recall()` callsite as RECOGNITION, EVIDENCE_TELEMETRY, or EVIDENCE_USER_FACING. INV-24 (`TestINV24VaultRecallRegistry`, 3 tests) forces every new callsite to declare its role; EVIDENCE_USER_FACING sites must pass `min_status=COHERENT`. No EVIDENCE_USER_FACING sites exist today — user-facing surface comes from pack-grounded `realize(proposition, vocab)` (now SPECULATIVE-default per Leak A), not from `vault.recall`. Site-level `# INV-24 recall role:` comments at every callsite. See `docs/truth_seeking_schema.md` §Leak C. | | ~~`articulation_of_status`~~ | ~~speculative_articulation_rate~~ | ✅ **1.00** | ≥ 0.90 | **CLOSED 2026-05-17** — `CognitiveTurnPipeline` tracks subjects of prior SPECULATIVE proposals and prepends `(speculative, not yet reviewed)` to the surface when a subsequent turn references one of those subjects (subject substring match, ≥4-char tokenized split, or reflexive query shape like "is your answer confirmed?"). The teach turn itself is not self-marked; only subsequent probes are. | diff --git a/evals/determination_estimation/gold.py b/evals/determination_estimation/gold.py index 7793ab7d..720a6a03 100644 --- a/evals/determination_estimation/gold.py +++ b/evals/determination_estimation/gold.py @@ -23,7 +23,7 @@ from generate.determine.estimate import converse_class_name _LEXICON = ( Path(__file__).resolve().parents[2] - / "language_packs" + / "packs" / "data" / "en_core_relational_predicates_v1" / "lexicon.jsonl" diff --git a/evals/flywheel_demo/run_tour.py b/evals/flywheel_demo/run_tour.py index bc1db518..b59e6cc3 100644 --- a/evals/flywheel_demo/run_tour.py +++ b/evals/flywheel_demo/run_tour.py @@ -106,7 +106,7 @@ def _isolated_pack() -> Iterator[Path]: repo_root = Path(__file__).resolve() while repo_root.parent != repo_root and not (repo_root / "pyproject.toml").exists(): repo_root = repo_root.parent - src = repo_root / "language_packs" / "data" / "en_core_math_v1" + src = repo_root / "packs" / "data" / "en_core_math_v1" with tempfile.TemporaryDirectory(prefix="core_flywheel_demo_") as td: dst = Path(td) / "en_core_math_v1" shutil.copytree(src, dst) diff --git a/evals/forward_semantic_control/phase5_mine.py b/evals/forward_semantic_control/phase5_mine.py index 67a387c3..85b5151e 100644 --- a/evals/forward_semantic_control/phase5_mine.py +++ b/evals/forward_semantic_control/phase5_mine.py @@ -133,7 +133,7 @@ def main() -> int: runtime = ChatRuntime() vocab = runtime.session.vocab - with open("language_packs/data/en_core_cognition_v1/lexicon.jsonl") as f: + with open("packs/data/en_core_cognition_v1/lexicon.jsonl") as f: surfaces_all = [json.loads(l)["surface"] for l in f] surfaces = surfaces_all[: args.n_tokens] diff --git a/evals/gsm8k_math/train_sample/v1/audit_brief_11b_step_2_verb_classification.md b/evals/gsm8k_math/train_sample/v1/audit_brief_11b_step_2_verb_classification.md index c67cb77e..57ed0318 100644 --- a/evals/gsm8k_math/train_sample/v1/audit_brief_11b_step_2_verb_classification.md +++ b/evals/gsm8k_math/train_sample/v1/audit_brief_11b_step_2_verb_classification.md @@ -184,7 +184,7 @@ This PR makes **no** change to: - `generate/comprehension/lifecycle.py` - `generate/comprehension/lexicon.py` - `generate/comprehension/audit.py` -- `language_packs/data/en_core_math_v1/**` +- `packs/data/en_core_math_v1/**` Therefore the reader runtime and the audit artifact (`audit_brief_11.json`) are bit-identical to PR #345 (Brief 11B), and diff --git a/evals/industry_demos/demo_01_forward_constraint.py b/evals/industry_demos/demo_01_forward_constraint.py index 226c7d2c..cf116c0e 100644 --- a/evals/industry_demos/demo_01_forward_constraint.py +++ b/evals/industry_demos/demo_01_forward_constraint.py @@ -36,7 +36,7 @@ import sys def run() -> dict: from generate.graph_planner import GraphNode, PropositionGraph from generate.graph_constraint import build_graph_constraint - from language_packs import load_pack + from packs import load_pack from algebra.cga import cga_inner import numpy as np diff --git a/evals/public_demo/contract.md b/evals/public_demo/contract.md index ae75a8ba..831bd88f 100644 --- a/evals/public_demo/contract.md +++ b/evals/public_demo/contract.md @@ -27,7 +27,7 @@ shipped, separately-tested adapter. - ``pure_composition_no_new_mechanism`` — grep gate over ``core/demos/showcase.py``'s import graph refuses any symbol whose module path is not within the existing shipped packages - (``core/``, ``chat/``, ``generate/``, ``language_packs/``, + (``core/``, ``chat/``, ``generate/``, ``packs/``, ``teaching/``, ``evals/`` for adapter-lane bridges). ## Determinism diff --git a/evals/public_demo/runner.py b/evals/public_demo/runner.py index d3a15ccf..4f42ea5f 100644 --- a/evals/public_demo/runner.py +++ b/evals/public_demo/runner.py @@ -30,7 +30,7 @@ ALLOWED_IMPORT_PREFIXES: tuple[str, ...] = ( "core.", "chat.", "generate.", - "language_packs.", + "packs.", "teaching.", "evals.", ) diff --git a/evals/reports/footprint_latest.json b/evals/reports/footprint_latest.json index 68f99519..3964280f 100644 --- a/evals/reports/footprint_latest.json +++ b/evals/reports/footprint_latest.json @@ -4,7 +4,7 @@ "bytes_on_disk": 23420, "human": "22.87 KiB", "name": "language_pack:en_core_cognition_v1", - "path": "language_packs/data/en_core_cognition_v1", + "path": "packs/data/en_core_cognition_v1", "present": true }, { diff --git a/formation/index.py b/formation/index.py index 300394f0..a5f83a16 100644 --- a/formation/index.py +++ b/formation/index.py @@ -9,7 +9,7 @@ Append-only — entries are never overwritten or deleted by ordinary operations. Each entry pins a ``MasteryReport`` by its self-sealing SHA. This is governance metadata, not runtime state — it does not live in -``vault/`` (exact-recall runtime) and not in ``language_packs/`` (mutable pack +``vault/`` (exact-recall runtime) and not in ``packs/`` (mutable pack data). ``packs/mastered_courses.json`` keeps it visible in source control. """ diff --git a/generate/binding_graph/units.py b/generate/binding_graph/units.py index ff6831a2..39c1af72 100644 --- a/generate/binding_graph/units.py +++ b/generate/binding_graph/units.py @@ -1,6 +1,6 @@ """ADR-0134 — Pure unit algebra for binding-graph admissibility. -Closed dimensional vocabulary sourced from ``language_packs/data/en_units_v1`` +Closed dimensional vocabulary sourced from ``packs/data/en_units_v1`` (ADR-0127). Every unit id used in admissibility checking must canonicalize to a lemma in that pack — otherwise :func:`parse_unit` refuses with :class:`UnitAlgebraError` (``unknown_unit``). The module performs **no I/O at @@ -157,7 +157,7 @@ _NON_UNIT_DOMAINS: Final[frozenset[str]] = frozenset( _UNITS_PACK_LEXICON: Final[Path] = ( Path(__file__).resolve().parents[2] - / "language_packs" + / "packs" / "data" / "en_units_v1" / "lexicon.jsonl" diff --git a/generate/comprehension/composition_registry.py b/generate/comprehension/composition_registry.py index 7b06414a..867251fd 100644 --- a/generate/comprehension/composition_registry.py +++ b/generate/comprehension/composition_registry.py @@ -1,7 +1,7 @@ """CW-2 — runtime composition registry loader. Reads ``{pack}/compositions.jsonl`` (compiled by -:mod:`language_packs.compile_compositions`) and exposes a frozen lookup +:mod:`packs.compile_compositions`) and exposes a frozen lookup surface for the recognizer/injector path. Structural twin of :mod:`generate.comprehension.frame_registry` plus @@ -79,7 +79,7 @@ class CompositionRegistry: _CACHE: dict[tuple[str, int, str], CompositionRegistry] = {} -_DEFAULT_PACK_RELPATH = Path("language_packs") / "data" / "en_core_math_v1" +_DEFAULT_PACK_RELPATH = Path("packs") / "data" / "en_core_math_v1" _VALID_POLARITIES: frozenset[str] = frozenset({"affirms", "falsifies"}) diff --git a/generate/comprehension/contemplate.py b/generate/comprehension/contemplate.py index 6357ea59..a898b951 100644 --- a/generate/comprehension/contemplate.py +++ b/generate/comprehension/contemplate.py @@ -161,7 +161,7 @@ def _names_pack_path() -> Path: if (repo_root / "pyproject.toml").exists(): break return ( - repo_root / "language_packs" / "data" / "en_core_names_v1" + repo_root / "packs" / "data" / "en_core_names_v1" / "gender.jsonl" ) diff --git a/generate/comprehension/frame_registry.py b/generate/comprehension/frame_registry.py index b87c78da..ef24863b 100644 --- a/generate/comprehension/frame_registry.py +++ b/generate/comprehension/frame_registry.py @@ -1,6 +1,6 @@ """CW-1 — runtime frame registry loader. -Reads ``{pack}/frames.jsonl`` (compiled by :mod:`language_packs.compile_frames`) +Reads ``{pack}/frames.jsonl`` (compiled by :mod:`packs.compile_frames`) and exposes a frozen lookup surface for the comprehension reader's frame-opener decision path. @@ -68,7 +68,7 @@ class FrameRegistry: _CACHE: dict[tuple[str, int, str], FrameRegistry] = {} -_DEFAULT_PACK_RELPATH = Path("language_packs") / "data" / "en_core_math_v1" +_DEFAULT_PACK_RELPATH = Path("packs") / "data" / "en_core_math_v1" _VALID_POLARITIES: frozenset[str] = frozenset({"affirms", "falsifies"}) diff --git a/generate/comprehension/lexicon.py b/generate/comprehension/lexicon.py index f219bc44..ebbdc9e7 100644 --- a/generate/comprehension/lexicon.py +++ b/generate/comprehension/lexicon.py @@ -63,7 +63,7 @@ class Lexicon: _CACHE: dict[tuple[str, int, str], Lexicon] = {} -_DEFAULT_PACK_RELPATH = Path("language_packs") / "data" / "en_core_math_v1" +_DEFAULT_PACK_RELPATH = Path("packs") / "data" / "en_core_math_v1" def _repo_root() -> Path: diff --git a/generate/derivation/comparatives.py b/generate/derivation/comparatives.py index e8d4be23..13f58972 100644 --- a/generate/derivation/comparatives.py +++ b/generate/derivation/comparatives.py @@ -27,7 +27,7 @@ from generate.math_roundtrip import WORD_NUMBERS _PACK_DIR: Final[Path] = ( Path(__file__).resolve().parents[2] - / "language_packs" + / "packs" / "data" / "en_core_comparatives_v1" ) diff --git a/generate/derivation/r1_reconstruction.py b/generate/derivation/r1_reconstruction.py index 49d500b0..a281f1b2 100644 --- a/generate/derivation/r1_reconstruction.py +++ b/generate/derivation/r1_reconstruction.py @@ -33,7 +33,7 @@ from generate.math_problem_graph import ( ) from generate.math_solver import SolveError, solve from generate.math_verifier import verify -from language_packs.numerics_loader import parse_compound_cardinal +from packs.numerics_loader import parse_compound_cardinal @dataclass(frozen=True, slots=True) diff --git a/generate/kernel_facts.py b/generate/kernel_facts.py index cf3de4b4..385795c5 100644 --- a/generate/kernel_facts.py +++ b/generate/kernel_facts.py @@ -130,7 +130,7 @@ class KernelProvenance: class KernelHazard: """An ambiguity or risk annotation on a substrate fact or surface. - The hazard registry (:mod:`language_packs.ambiguity_hazards`) owns the + The hazard registry (:mod:`packs.ambiguity_hazards`) owns the canonical set of hazard categories; this record carries a reference to one of them. """ diff --git a/generate/math_candidate_parser.py b/generate/math_candidate_parser.py index f9022726..6ebf4c1f 100644 --- a/generate/math_candidate_parser.py +++ b/generate/math_candidate_parser.py @@ -158,7 +158,7 @@ _ACTOR_OR_PRONOUN: Final[str] = ( # - Slash fraction literal: ``N/M``. Denominator-zero refused at # resolve time, not regex. # - Hyphenated multi-word cardinal: ``twenty-five``, ``ninety-nine``. -# Resolved via :func:`language_packs.numerics_loader.parse_compound_cardinal`. +# Resolved via :func:`packs.numerics_loader.parse_compound_cardinal`. # - Digit run. # - Single-word cardinal (legacy ``WORD_NUMBERS`` set). @@ -447,7 +447,7 @@ def _resolve_value(value_token: str) -> _ResolvedValue | None: return None # Hyphenated multi-word cardinal: twenty-five, ninety-nine, etc. if "-" in t: - from language_packs.numerics_loader import parse_compound_cardinal + from packs.numerics_loader import parse_compound_cardinal parsed = parse_compound_cardinal(t) if parsed is None: @@ -469,7 +469,7 @@ def _is_indefinite_quantifier(token: str) -> bool: rather than guessed — preserves wrong == 0. """ try: - from language_packs.loader import lookup_quantifier + from packs.loader import lookup_quantifier entry = lookup_quantifier(token.lower()) if entry is not None and entry.semantic_type == "indefinite": return True @@ -712,7 +712,7 @@ def _canonicalize_unit(unit_raw: str) -> str: """ lowered = unit_raw.lower() try: - from language_packs.loader import lookup_unit + from packs.loader import lookup_unit entry = lookup_unit(lowered) if entry is not None: return entry.plural.lower() @@ -1588,7 +1588,7 @@ def _multi_word_cardinal_candidates(sentence: str) -> list[CandidateInitial]: if m is None: return [] value_raw = m.group("value") - from language_packs.numerics_loader import parse_compound_cardinal + from packs.numerics_loader import parse_compound_cardinal parsed = parse_compound_cardinal(value_raw) if parsed is None: return [] diff --git a/generate/math_completeness.py b/generate/math_completeness.py index 34c1cbd4..5c46f2cc 100644 --- a/generate/math_completeness.py +++ b/generate/math_completeness.py @@ -45,7 +45,7 @@ import re from typing import TYPE_CHECKING from generate.math_candidate_parser import _CURRENCY_SYMBOLS, _resolve_value -from language_packs.numerics_loader import ( +from packs.numerics_loader import ( lookup_cardinal, lookup_multiplier, parse_compound_cardinal, diff --git a/generate/math_parser.py b/generate/math_parser.py index 59df6600..534c7637 100644 --- a/generate/math_parser.py +++ b/generate/math_parser.py @@ -133,7 +133,7 @@ def _canonical_unit(raw: str) -> str: s = raw.lower() # Check if the unit is registered in en_units_v1 try: - from language_packs.loader import lookup_unit + from packs.loader import lookup_unit entry = lookup_unit(s) if entry is not None: return entry.plural.lower() diff --git a/generate/math_roundtrip.py b/generate/math_roundtrip.py index 460b84e6..2e2ef697 100644 --- a/generate/math_roundtrip.py +++ b/generate/math_roundtrip.py @@ -385,7 +385,7 @@ def _value_grounds(value_token: str, haystack_tokens: frozenset[str]) -> bool: return True if "-" in value_token and not value_token[0].isdigit(): try: - from language_packs.numerics_loader import parse_compound_cardinal + from packs.numerics_loader import parse_compound_cardinal parsed = parse_compound_cardinal(value_token) if parsed is not None: components = [c for c in value_token.lower().split("-") if c] @@ -404,7 +404,7 @@ def _value_grounds(value_token: str, haystack_tokens: frozenset[str]) -> bool: # isn't mounted (e.g., in legacy test environments) we silently fall # through to the hard-coded table. try: - from language_packs.loader import lookup_cardinal + from packs.loader import lookup_cardinal entry = lookup_cardinal(lowered) if entry is not None: digit = str(entry.numeric_value) @@ -428,7 +428,7 @@ def _value_grounds(value_token: str, haystack_tokens: frozenset[str]) -> bool: return True # Pack-backed reverse lookup: digit -> cardinal surface in haystack try: - from language_packs.loader import lookup_cardinal + from packs.loader import lookup_cardinal for tok in haystack_tokens: entry = lookup_cardinal(tok) if entry is not None and entry.numeric_value == n: diff --git a/generate/math_solver.py b/generate/math_solver.py index a1ec42ba..a6306ba3 100644 --- a/generate/math_solver.py +++ b/generate/math_solver.py @@ -165,10 +165,10 @@ def _resolve_pack_lemmas() -> dict[str, str]: solver cannot emit a trace step without a resolved pack-lemma id. """ try: - from language_packs.compiler import load_pack_entries + from packs.compiler import load_pack_entries except ImportError as exc: raise SolveError( - f"cannot import language_packs.compiler: {exc}" + f"cannot import packs.compiler: {exc}" ) from exc try: diff --git a/generate/meaning_graph/relational.py b/generate/meaning_graph/relational.py index c9ff9c36..bb3d3dd9 100644 --- a/generate/meaning_graph/relational.py +++ b/generate/meaning_graph/relational.py @@ -44,7 +44,7 @@ it does not perturb ``comprehend``'s templates or their wrong=0 tests. from __future__ import annotations -from language_packs.compiler import load_pack_entries +from packs.compiler import load_pack_entries from generate.meaning_graph.model import ( Entity, diff --git a/generate/problem_frame.py b/generate/problem_frame.py index 3d36796f..4638a7b5 100644 --- a/generate/problem_frame.py +++ b/generate/problem_frame.py @@ -23,7 +23,7 @@ if TYPE_CHECKING: KernelProvenance, SourceSpan, ) - from language_packs.scalar_equivalence import ScalarCandidate + from packs.scalar_equivalence import ScalarCandidate from generate.process_frames import ProcessFrame from generate.construction_affordances import ConstructionProposal diff --git a/generate/problem_frame_builder.py b/generate/problem_frame_builder.py index 8582cee2..0c9c0db4 100644 --- a/generate/problem_frame_builder.py +++ b/generate/problem_frame_builder.py @@ -38,7 +38,7 @@ from generate.problem_frame_proposals import ( _quantity_entity_proposals, _unary_delta_proposals, ) -from language_packs.scalar_equivalence import extract_scalar_candidates +from packs.scalar_equivalence import extract_scalar_candidates def build_problem_frame(problem_text: str) -> ProblemFrame: diff --git a/generate/problem_frame_extractors.py b/generate/problem_frame_extractors.py index de3653d1..0a6b848b 100644 --- a/generate/problem_frame_extractors.py +++ b/generate/problem_frame_extractors.py @@ -20,13 +20,13 @@ from generate.kernel_facts import ( ) from generate.problem_frame import QuestionTarget from generate.process_frames import ProcessFrame, all_frames -from language_packs.ambiguity_hazards import ( +from packs.ambiguity_hazards import ( AmbiguityHazard, all_registered_surfaces, lookup_hazards, ) -from language_packs.scalar_equivalence import ScalarCandidate -from language_packs.unit_dimensions import classify_dimension +from packs.scalar_equivalence import ScalarCandidate +from packs.unit_dimensions import classify_dimension _UNIT_TOKEN_RE: re.Pattern[str] = re.compile(r"\b\d+(?:\.\d+)?\s+([a-zA-Z]+)\b") diff --git a/ingest/gate.py b/ingest/gate.py index 9f5d8d33..f79ccbdd 100644 --- a/ingest/gate.py +++ b/ingest/gate.py @@ -35,7 +35,7 @@ from core.physics.energy import FieldEnergyOperator, EnergyClass from core.physics.valence import ValenceBundle from algebra.holonomy import holonomy_encode from field.state import FieldState -from language_packs.schema import MorphologyEntry +from packs.schema import MorphologyEntry @dataclass(frozen=True, slots=True) diff --git a/language_packs/README.md b/language_packs/README.md deleted file mode 100644 index f096ca4b..00000000 --- a/language_packs/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Language Packs - -`language_packs/` owns reviewed language-pack loading and compilation. It turns -pack manifests, lexicon rows, morphology, grammar attractors, and alignment -metadata into runtime vocab/manifold structures. - -This compiler is distinct from `core_ingest.compiler`: - -- `language_packs.compiler` consumes reviewed pack data and builds linguistic - runtime structures. -- `core_ingest.compiler` consumes external candidate pressure and produces - validation reports plus provisional learning artifacts. - -The shared word "compiler" means "deterministic lowering across a boundary"; -the source material, trust boundary, and output structures are different. diff --git a/morphology/registry.py b/morphology/registry.py index b25e9a8e..d8a1f257 100644 --- a/morphology/registry.py +++ b/morphology/registry.py @@ -11,9 +11,9 @@ from __future__ import annotations import json from pathlib import Path -from language_packs.schema import MorphologyEntry +from packs.schema import MorphologyEntry -_DATA_DIR = Path(__file__).parent.parent / "language_packs" / "data" +_DATA_DIR = Path(__file__).parent.parent / "packs" / "data" class MorphologyRegistry: @@ -72,7 +72,7 @@ def load_morphology( """ Load MorphologyEntry records from //morphology.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. diff --git a/packs/README.md b/packs/README.md index 3efa199b..2fd4f5c6 100644 --- a/packs/README.md +++ b/packs/README.md @@ -4,15 +4,32 @@ safety, identity, ethics, register, anchor-lens, modality packs, source-language packs, primitives, and companion validators. -This directory is not interchangeable with `language_packs/`: +This directory is not interchangeable with `packs/`: - `packs/` stores runtime governance/style/safety/modality artifacts and source pack material such as `packs/en`, `packs/he`, `packs/grc`, and `packs/el`. -- `language_packs/` stores linguistic pack schemas, compilers, loaders, and - reviewed semantic pack data under `language_packs/data/`. +- `packs/` stores linguistic pack schemas, compilers, loaders, and + reviewed semantic pack data under `packs/data/`. - `core_ingest/` prepares external candidate pressure; it does not ratify or rewrite these packs. Mutation rule: durable pack changes must be reviewed or proof-carrying and must use the relevant validator/ratification lane. Do not add ad hoc runtime pack writes. + + +# Language Packs + +`packs/` owns reviewed language-pack loading and compilation. It turns +pack manifests, lexicon rows, morphology, grammar attractors, and alignment +metadata into runtime vocab/manifold structures. + +This compiler is distinct from `core_ingest.compiler`: + +- `packs.compiler` consumes reviewed pack data and builds linguistic + runtime structures. +- `core_ingest.compiler` consumes external candidate pressure and produces + validation reports plus provisional learning artifacts. + +The shared word "compiler" means "deterministic lowering across a boundary"; +the source material, trust boundary, and output structures are different. diff --git a/language_packs/__init__.py b/packs/__init__.py similarity index 96% rename from language_packs/__init__.py rename to packs/__init__.py index 5472da7e..fd2ca0c0 100644 --- a/language_packs/__init__.py +++ b/packs/__init__.py @@ -1,5 +1,5 @@ """ -language_packs — compiled linguistic manifold schemas. +packs — compiled linguistic manifold schemas. Language packs are not datasets. They are pinned, checksummed, compiled linguistic manifolds: surface forms, morphology, grammar attractors, diff --git a/language_packs/__main__.py b/packs/__main__.py similarity index 93% rename from language_packs/__main__.py rename to packs/__main__.py index c6070a4f..45f7e8a6 100644 --- a/language_packs/__main__.py +++ b/packs/__main__.py @@ -1,11 +1,11 @@ """ -python -m language_packs [pack_id] +python -m packs [pack_id] Commands -------- compile Compile pack, verify checksum, print manifold stats. verify Verify on-disk checksum against manifest only. -list List all packs in language_packs/data/ with metadata. +list List all packs in packs/data/ with metadata. Checksum contract ----------------- @@ -38,7 +38,7 @@ def _available_packs() -> list[str]: def cmd_list(_args) -> int: packs = _available_packs() if not packs: - print("No packs found in language_packs/data/") + print("No packs found in packs/data/") return 0 print(f"{'pack_id':<30} {'role':<20} {'entries':>7} {'checksum_ok'}") print("-" * 70) @@ -93,7 +93,7 @@ def cmd_compile(args) -> int: return rc pack_id = args.pack_id - from language_packs.compiler import load_pack, load_pack_entries + from packs.compiler import load_pack, load_pack_entries try: manifest, manifold = load_pack(pack_id) @@ -127,7 +127,7 @@ def cmd_compile(args) -> int: def main() -> int: parser = argparse.ArgumentParser( - prog="python -m language_packs", + prog="python -m packs", description="CORE language-pack compiler and verifier.", ) sub = parser.add_subparsers(dest="command") @@ -135,10 +135,10 @@ def main() -> int: sub.add_parser("list", help="List all available packs.") p_verify = sub.add_parser("verify", help="Verify pack checksum.") - p_verify.add_argument("pack_id", help="Pack ID (directory name under language_packs/data/).") + p_verify.add_argument("pack_id", help="Pack ID (directory name under packs/data/).") p_compile = sub.add_parser("compile", help="Compile pack and print manifold stats.") - p_compile.add_argument("pack_id", help="Pack ID (directory name under language_packs/data/).") + p_compile.add_argument("pack_id", help="Pack ID (directory name under packs/data/).") args = parser.parse_args() diff --git a/language_packs/ambiguity_hazards.py b/packs/ambiguity_hazards.py similarity index 100% rename from language_packs/ambiguity_hazards.py rename to packs/ambiguity_hazards.py diff --git a/language_packs/compile_compositions.py b/packs/compile_compositions.py similarity index 97% rename from language_packs/compile_compositions.py rename to packs/compile_compositions.py index 7f04f640..a105c2c9 100644 --- a/language_packs/compile_compositions.py +++ b/packs/compile_compositions.py @@ -1,6 +1,6 @@ """CW-2 — compile compositions/*.jsonl into a deterministic compositions.jsonl artifact. -Mirrors :mod:`language_packs.compile_frames` for the composition surface. +Mirrors :mod:`packs.compile_frames` for the composition surface. Reads per-category source files under ``{pack}/compositions/*.jsonl`` and writes ``{pack}/compositions.jsonl`` with entries sorted by ``(composition_category, surface_pattern)``. diff --git a/language_packs/compile_frames.py b/packs/compile_frames.py similarity index 97% rename from language_packs/compile_frames.py rename to packs/compile_frames.py index 906fc5fb..6c49d635 100644 --- a/language_packs/compile_frames.py +++ b/packs/compile_frames.py @@ -1,6 +1,6 @@ """CW-1 — compile frames/*.jsonl into a deterministic frames.jsonl artifact. -Mirrors the lexicon compile pattern (see ``language_packs/compiler.py``). +Mirrors the lexicon compile pattern (see ``packs/compiler.py``). Reads per-category source files under ``{pack}/frames/*.jsonl``, normalizes ordering, and writes the compiled artifact ``{pack}/frames.jsonl`` with entries sorted by ``(frame_category, surface_form)``. diff --git a/language_packs/compile_pack.py b/packs/compile_pack.py similarity index 95% rename from language_packs/compile_pack.py rename to packs/compile_pack.py index f8ae3452..1b30a5a1 100644 --- a/language_packs/compile_pack.py +++ b/packs/compile_pack.py @@ -34,8 +34,8 @@ import json from dataclasses import dataclass from pathlib import Path -from language_packs.compile_compositions import compile_compositions -from language_packs.compile_frames import compile_frames +from packs.compile_compositions import compile_compositions +from packs.compile_frames import compile_frames @dataclass(frozen=True, slots=True) diff --git a/language_packs/compiler.py b/packs/compiler.py similarity index 99% rename from language_packs/compiler.py rename to packs/compiler.py index 2e3a3278..7058554a 100644 --- a/language_packs/compiler.py +++ b/packs/compiler.py @@ -13,7 +13,7 @@ from algebra.versor import unitize_versor from core.epistemic_state import EpistemicState from core.physics.energy import FieldEnergyOperator from core.physics.valence import lift_valence -from language_packs.schema import ( +from packs.schema import ( LanguagePackManifest, LanguageRole, LexicalEntry, diff --git a/language_packs/data/en_arithmetic_v1/glosses.jsonl b/packs/data/en_arithmetic_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_arithmetic_v1/glosses.jsonl rename to packs/data/en_arithmetic_v1/glosses.jsonl diff --git a/language_packs/data/en_arithmetic_v1/lexicon.jsonl b/packs/data/en_arithmetic_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_arithmetic_v1/lexicon.jsonl rename to packs/data/en_arithmetic_v1/lexicon.jsonl diff --git a/language_packs/data/en_arithmetic_v1/manifest.json b/packs/data/en_arithmetic_v1/manifest.json similarity index 100% rename from language_packs/data/en_arithmetic_v1/manifest.json rename to packs/data/en_arithmetic_v1/manifest.json diff --git a/language_packs/data/en_collapse_anchors_v1/glosses.jsonl b/packs/data/en_collapse_anchors_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_collapse_anchors_v1/glosses.jsonl rename to packs/data/en_collapse_anchors_v1/glosses.jsonl diff --git a/language_packs/data/en_collapse_anchors_v1/lexicon.jsonl b/packs/data/en_collapse_anchors_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_collapse_anchors_v1/lexicon.jsonl rename to packs/data/en_collapse_anchors_v1/lexicon.jsonl diff --git a/language_packs/data/en_collapse_anchors_v1/manifest.json b/packs/data/en_collapse_anchors_v1/manifest.json similarity index 100% rename from language_packs/data/en_collapse_anchors_v1/manifest.json rename to packs/data/en_collapse_anchors_v1/manifest.json diff --git a/language_packs/data/en_core_action_v1/glosses.jsonl b/packs/data/en_core_action_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_action_v1/glosses.jsonl rename to packs/data/en_core_action_v1/glosses.jsonl diff --git a/language_packs/data/en_core_action_v1/lexicon.jsonl b/packs/data/en_core_action_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_action_v1/lexicon.jsonl rename to packs/data/en_core_action_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_action_v1/manifest.json b/packs/data/en_core_action_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_action_v1/manifest.json rename to packs/data/en_core_action_v1/manifest.json diff --git a/language_packs/data/en_core_attitude_v1/glosses.jsonl b/packs/data/en_core_attitude_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_attitude_v1/glosses.jsonl rename to packs/data/en_core_attitude_v1/glosses.jsonl diff --git a/language_packs/data/en_core_attitude_v1/lexicon.jsonl b/packs/data/en_core_attitude_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_attitude_v1/lexicon.jsonl rename to packs/data/en_core_attitude_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_attitude_v1/manifest.json b/packs/data/en_core_attitude_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_attitude_v1/manifest.json rename to packs/data/en_core_attitude_v1/manifest.json diff --git a/language_packs/data/en_core_causation_v1/glosses.jsonl b/packs/data/en_core_causation_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_causation_v1/glosses.jsonl rename to packs/data/en_core_causation_v1/glosses.jsonl diff --git a/language_packs/data/en_core_causation_v1/lexicon.jsonl b/packs/data/en_core_causation_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_causation_v1/lexicon.jsonl rename to packs/data/en_core_causation_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_causation_v1/manifest.json b/packs/data/en_core_causation_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_causation_v1/manifest.json rename to packs/data/en_core_causation_v1/manifest.json diff --git a/language_packs/data/en_core_cognition_v1/glosses.jsonl b/packs/data/en_core_cognition_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_cognition_v1/glosses.jsonl rename to packs/data/en_core_cognition_v1/glosses.jsonl diff --git a/language_packs/data/en_core_cognition_v1/lexicon.jsonl b/packs/data/en_core_cognition_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_cognition_v1/lexicon.jsonl rename to packs/data/en_core_cognition_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_cognition_v1/manifest.json b/packs/data/en_core_cognition_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_cognition_v1/manifest.json rename to packs/data/en_core_cognition_v1/manifest.json diff --git a/language_packs/data/en_core_comparatives_v1/comparatives.jsonl b/packs/data/en_core_comparatives_v1/comparatives.jsonl similarity index 100% rename from language_packs/data/en_core_comparatives_v1/comparatives.jsonl rename to packs/data/en_core_comparatives_v1/comparatives.jsonl diff --git a/language_packs/data/en_core_comparatives_v1/manifest.json b/packs/data/en_core_comparatives_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_comparatives_v1/manifest.json rename to packs/data/en_core_comparatives_v1/manifest.json diff --git a/language_packs/data/en_core_math_v1/compositions.jsonl b/packs/data/en_core_math_v1/compositions.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/compositions.jsonl rename to packs/data/en_core_math_v1/compositions.jsonl diff --git a/language_packs/data/en_core_math_v1/compositions/.gitkeep b/packs/data/en_core_math_v1/compositions/.gitkeep similarity index 100% rename from language_packs/data/en_core_math_v1/compositions/.gitkeep rename to packs/data/en_core_math_v1/compositions/.gitkeep diff --git a/language_packs/data/en_core_math_v1/compositions/multiplicative_composition.jsonl b/packs/data/en_core_math_v1/compositions/multiplicative_composition.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/compositions/multiplicative_composition.jsonl rename to packs/data/en_core_math_v1/compositions/multiplicative_composition.jsonl diff --git a/language_packs/data/en_core_math_v1/frames.jsonl b/packs/data/en_core_math_v1/frames.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/frames.jsonl rename to packs/data/en_core_math_v1/frames.jsonl diff --git a/language_packs/data/en_core_math_v1/frames/.gitkeep b/packs/data/en_core_math_v1/frames/.gitkeep similarity index 100% rename from language_packs/data/en_core_math_v1/frames/.gitkeep rename to packs/data/en_core_math_v1/frames/.gitkeep diff --git a/language_packs/data/en_core_math_v1/lexicon.jsonl b/packs/data/en_core_math_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon.jsonl rename to packs/data/en_core_math_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/accumulation_verb.jsonl b/packs/data/en_core_math_v1/lexicon/accumulation_verb.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/accumulation_verb.jsonl rename to packs/data/en_core_math_v1/lexicon/accumulation_verb.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/aggregate_modifier.jsonl b/packs/data/en_core_math_v1/lexicon/aggregate_modifier.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/aggregate_modifier.jsonl rename to packs/data/en_core_math_v1/lexicon/aggregate_modifier.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/capacity_verb.jsonl b/packs/data/en_core_math_v1/lexicon/capacity_verb.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/capacity_verb.jsonl rename to packs/data/en_core_math_v1/lexicon/capacity_verb.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/copula_verb.jsonl b/packs/data/en_core_math_v1/lexicon/copula_verb.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/copula_verb.jsonl rename to packs/data/en_core_math_v1/lexicon/copula_verb.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/count_unit_noun.jsonl b/packs/data/en_core_math_v1/lexicon/count_unit_noun.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/count_unit_noun.jsonl rename to packs/data/en_core_math_v1/lexicon/count_unit_noun.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/currency_unit_noun.jsonl b/packs/data/en_core_math_v1/lexicon/currency_unit_noun.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/currency_unit_noun.jsonl rename to packs/data/en_core_math_v1/lexicon/currency_unit_noun.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/depletion_verb.jsonl b/packs/data/en_core_math_v1/lexicon/depletion_verb.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/depletion_verb.jsonl rename to packs/data/en_core_math_v1/lexicon/depletion_verb.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/drain_token.jsonl b/packs/data/en_core_math_v1/lexicon/drain_token.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/drain_token.jsonl rename to packs/data/en_core_math_v1/lexicon/drain_token.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/entity_pronoun.jsonl b/packs/data/en_core_math_v1/lexicon/entity_pronoun.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/entity_pronoun.jsonl rename to packs/data/en_core_math_v1/lexicon/entity_pronoun.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/modal_aux.jsonl b/packs/data/en_core_math_v1/lexicon/modal_aux.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/modal_aux.jsonl rename to packs/data/en_core_math_v1/lexicon/modal_aux.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/possession_verb.jsonl b/packs/data/en_core_math_v1/lexicon/possession_verb.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/possession_verb.jsonl rename to packs/data/en_core_math_v1/lexicon/possession_verb.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/proper_noun_gender_female.jsonl b/packs/data/en_core_math_v1/lexicon/proper_noun_gender_female.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/proper_noun_gender_female.jsonl rename to packs/data/en_core_math_v1/lexicon/proper_noun_gender_female.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/proper_noun_gender_male.jsonl b/packs/data/en_core_math_v1/lexicon/proper_noun_gender_male.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/proper_noun_gender_male.jsonl rename to packs/data/en_core_math_v1/lexicon/proper_noun_gender_male.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/question_comparative.jsonl b/packs/data/en_core_math_v1/lexicon/question_comparative.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/question_comparative.jsonl rename to packs/data/en_core_math_v1/lexicon/question_comparative.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/question_continuous_qty.jsonl b/packs/data/en_core_math_v1/lexicon/question_continuous_qty.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/question_continuous_qty.jsonl rename to packs/data/en_core_math_v1/lexicon/question_continuous_qty.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/question_discrete_qty.jsonl b/packs/data/en_core_math_v1/lexicon/question_discrete_qty.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/question_discrete_qty.jsonl rename to packs/data/en_core_math_v1/lexicon/question_discrete_qty.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/question_open.jsonl b/packs/data/en_core_math_v1/lexicon/question_open.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/question_open.jsonl rename to packs/data/en_core_math_v1/lexicon/question_open.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/residual_modifier.jsonl b/packs/data/en_core_math_v1/lexicon/residual_modifier.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/residual_modifier.jsonl rename to packs/data/en_core_math_v1/lexicon/residual_modifier.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/time_unit_noun.jsonl b/packs/data/en_core_math_v1/lexicon/time_unit_noun.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/time_unit_noun.jsonl rename to packs/data/en_core_math_v1/lexicon/time_unit_noun.jsonl diff --git a/language_packs/data/en_core_math_v1/lexicon/transfer_verb.jsonl b/packs/data/en_core_math_v1/lexicon/transfer_verb.jsonl similarity index 100% rename from language_packs/data/en_core_math_v1/lexicon/transfer_verb.jsonl rename to packs/data/en_core_math_v1/lexicon/transfer_verb.jsonl diff --git a/language_packs/data/en_core_math_v1/manifest.json b/packs/data/en_core_math_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_math_v1/manifest.json rename to packs/data/en_core_math_v1/manifest.json diff --git a/language_packs/data/en_core_meta_v1/glosses.jsonl b/packs/data/en_core_meta_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_meta_v1/glosses.jsonl rename to packs/data/en_core_meta_v1/glosses.jsonl diff --git a/language_packs/data/en_core_meta_v1/lexicon.jsonl b/packs/data/en_core_meta_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_meta_v1/lexicon.jsonl rename to packs/data/en_core_meta_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_meta_v1/manifest.json b/packs/data/en_core_meta_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_meta_v1/manifest.json rename to packs/data/en_core_meta_v1/manifest.json diff --git a/language_packs/data/en_core_names_v1/gender.jsonl b/packs/data/en_core_names_v1/gender.jsonl similarity index 100% rename from language_packs/data/en_core_names_v1/gender.jsonl rename to packs/data/en_core_names_v1/gender.jsonl diff --git a/language_packs/data/en_core_names_v1/manifest.json b/packs/data/en_core_names_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_names_v1/manifest.json rename to packs/data/en_core_names_v1/manifest.json diff --git a/language_packs/data/en_core_polarity_v1/glosses.jsonl b/packs/data/en_core_polarity_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_polarity_v1/glosses.jsonl rename to packs/data/en_core_polarity_v1/glosses.jsonl diff --git a/language_packs/data/en_core_polarity_v1/lexicon.jsonl b/packs/data/en_core_polarity_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_polarity_v1/lexicon.jsonl rename to packs/data/en_core_polarity_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_polarity_v1/manifest.json b/packs/data/en_core_polarity_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_polarity_v1/manifest.json rename to packs/data/en_core_polarity_v1/manifest.json diff --git a/language_packs/data/en_core_quantitative_v1/glosses.jsonl b/packs/data/en_core_quantitative_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_quantitative_v1/glosses.jsonl rename to packs/data/en_core_quantitative_v1/glosses.jsonl diff --git a/language_packs/data/en_core_quantitative_v1/lexicon.jsonl b/packs/data/en_core_quantitative_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_quantitative_v1/lexicon.jsonl rename to packs/data/en_core_quantitative_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_quantitative_v1/manifest.json b/packs/data/en_core_quantitative_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_quantitative_v1/manifest.json rename to packs/data/en_core_quantitative_v1/manifest.json diff --git a/language_packs/data/en_core_relational_predicates_v1/README.md b/packs/data/en_core_relational_predicates_v1/README.md similarity index 100% rename from language_packs/data/en_core_relational_predicates_v1/README.md rename to packs/data/en_core_relational_predicates_v1/README.md diff --git a/language_packs/data/en_core_relational_predicates_v1/lexicon.jsonl b/packs/data/en_core_relational_predicates_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_relational_predicates_v1/lexicon.jsonl rename to packs/data/en_core_relational_predicates_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_relational_predicates_v1/manifest.json b/packs/data/en_core_relational_predicates_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_relational_predicates_v1/manifest.json rename to packs/data/en_core_relational_predicates_v1/manifest.json diff --git a/language_packs/data/en_core_relations_v1/glosses.jsonl b/packs/data/en_core_relations_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_relations_v1/glosses.jsonl rename to packs/data/en_core_relations_v1/glosses.jsonl diff --git a/language_packs/data/en_core_relations_v1/lexicon.jsonl b/packs/data/en_core_relations_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_relations_v1/lexicon.jsonl rename to packs/data/en_core_relations_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_relations_v1/manifest.json b/packs/data/en_core_relations_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_relations_v1/manifest.json rename to packs/data/en_core_relations_v1/manifest.json diff --git a/language_packs/data/en_core_relations_v2/glosses.jsonl b/packs/data/en_core_relations_v2/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_relations_v2/glosses.jsonl rename to packs/data/en_core_relations_v2/glosses.jsonl diff --git a/language_packs/data/en_core_relations_v2/lexicon.jsonl b/packs/data/en_core_relations_v2/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_relations_v2/lexicon.jsonl rename to packs/data/en_core_relations_v2/lexicon.jsonl diff --git a/language_packs/data/en_core_relations_v2/manifest.json b/packs/data/en_core_relations_v2/manifest.json similarity index 100% rename from language_packs/data/en_core_relations_v2/manifest.json rename to packs/data/en_core_relations_v2/manifest.json diff --git a/language_packs/data/en_core_relations_v3/glosses.jsonl b/packs/data/en_core_relations_v3/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_relations_v3/glosses.jsonl rename to packs/data/en_core_relations_v3/glosses.jsonl diff --git a/language_packs/data/en_core_relations_v3/lexicon.jsonl b/packs/data/en_core_relations_v3/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_relations_v3/lexicon.jsonl rename to packs/data/en_core_relations_v3/lexicon.jsonl diff --git a/language_packs/data/en_core_relations_v3/manifest.json b/packs/data/en_core_relations_v3/manifest.json similarity index 100% rename from language_packs/data/en_core_relations_v3/manifest.json rename to packs/data/en_core_relations_v3/manifest.json diff --git a/language_packs/data/en_core_spatial_v1/glosses.jsonl b/packs/data/en_core_spatial_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_spatial_v1/glosses.jsonl rename to packs/data/en_core_spatial_v1/glosses.jsonl diff --git a/language_packs/data/en_core_spatial_v1/lexicon.jsonl b/packs/data/en_core_spatial_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_spatial_v1/lexicon.jsonl rename to packs/data/en_core_spatial_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_spatial_v1/manifest.json b/packs/data/en_core_spatial_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_spatial_v1/manifest.json rename to packs/data/en_core_spatial_v1/manifest.json diff --git a/language_packs/data/en_core_syntax_v1/glosses.jsonl b/packs/data/en_core_syntax_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_syntax_v1/glosses.jsonl rename to packs/data/en_core_syntax_v1/glosses.jsonl diff --git a/language_packs/data/en_core_syntax_v1/lexicon.jsonl b/packs/data/en_core_syntax_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_syntax_v1/lexicon.jsonl rename to packs/data/en_core_syntax_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_syntax_v1/manifest.json b/packs/data/en_core_syntax_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_syntax_v1/manifest.json rename to packs/data/en_core_syntax_v1/manifest.json diff --git a/language_packs/data/en_core_temporal_v1/glosses.jsonl b/packs/data/en_core_temporal_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_core_temporal_v1/glosses.jsonl rename to packs/data/en_core_temporal_v1/glosses.jsonl diff --git a/language_packs/data/en_core_temporal_v1/lexicon.jsonl b/packs/data/en_core_temporal_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_core_temporal_v1/lexicon.jsonl rename to packs/data/en_core_temporal_v1/lexicon.jsonl diff --git a/language_packs/data/en_core_temporal_v1/manifest.json b/packs/data/en_core_temporal_v1/manifest.json similarity index 100% rename from language_packs/data/en_core_temporal_v1/manifest.json rename to packs/data/en_core_temporal_v1/manifest.json diff --git a/language_packs/data/en_mathematics_logic_v1/glosses.jsonl b/packs/data/en_mathematics_logic_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_mathematics_logic_v1/glosses.jsonl rename to packs/data/en_mathematics_logic_v1/glosses.jsonl diff --git a/language_packs/data/en_mathematics_logic_v1/lexicon.jsonl b/packs/data/en_mathematics_logic_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_mathematics_logic_v1/lexicon.jsonl rename to packs/data/en_mathematics_logic_v1/lexicon.jsonl diff --git a/language_packs/data/en_mathematics_logic_v1/manifest.json b/packs/data/en_mathematics_logic_v1/manifest.json similarity index 100% rename from language_packs/data/en_mathematics_logic_v1/manifest.json rename to packs/data/en_mathematics_logic_v1/manifest.json diff --git a/language_packs/data/en_minimal_v1/lexicon.jsonl b/packs/data/en_minimal_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_minimal_v1/lexicon.jsonl rename to packs/data/en_minimal_v1/lexicon.jsonl diff --git a/language_packs/data/en_minimal_v1/manifest.json b/packs/data/en_minimal_v1/manifest.json similarity index 100% rename from language_packs/data/en_minimal_v1/manifest.json rename to packs/data/en_minimal_v1/manifest.json diff --git a/language_packs/data/en_numerics_v1/en_numerics_v1.mastery_report.json b/packs/data/en_numerics_v1/en_numerics_v1.mastery_report.json similarity index 100% rename from language_packs/data/en_numerics_v1/en_numerics_v1.mastery_report.json rename to packs/data/en_numerics_v1/en_numerics_v1.mastery_report.json diff --git a/language_packs/data/en_numerics_v1/glosses.jsonl b/packs/data/en_numerics_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_numerics_v1/glosses.jsonl rename to packs/data/en_numerics_v1/glosses.jsonl diff --git a/language_packs/data/en_numerics_v1/lexicon.jsonl b/packs/data/en_numerics_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_numerics_v1/lexicon.jsonl rename to packs/data/en_numerics_v1/lexicon.jsonl diff --git a/language_packs/data/en_numerics_v1/manifest.json b/packs/data/en_numerics_v1/manifest.json similarity index 100% rename from language_packs/data/en_numerics_v1/manifest.json rename to packs/data/en_numerics_v1/manifest.json diff --git a/language_packs/data/en_physics_v1/glosses.jsonl b/packs/data/en_physics_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_physics_v1/glosses.jsonl rename to packs/data/en_physics_v1/glosses.jsonl diff --git a/language_packs/data/en_physics_v1/lexicon.jsonl b/packs/data/en_physics_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_physics_v1/lexicon.jsonl rename to packs/data/en_physics_v1/lexicon.jsonl diff --git a/language_packs/data/en_physics_v1/manifest.json b/packs/data/en_physics_v1/manifest.json similarity index 100% rename from language_packs/data/en_physics_v1/manifest.json rename to packs/data/en_physics_v1/manifest.json diff --git a/language_packs/data/en_systems_software_v1/glosses.jsonl b/packs/data/en_systems_software_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_systems_software_v1/glosses.jsonl rename to packs/data/en_systems_software_v1/glosses.jsonl diff --git a/language_packs/data/en_systems_software_v1/lexicon.jsonl b/packs/data/en_systems_software_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_systems_software_v1/lexicon.jsonl rename to packs/data/en_systems_software_v1/lexicon.jsonl diff --git a/language_packs/data/en_systems_software_v1/manifest.json b/packs/data/en_systems_software_v1/manifest.json similarity index 100% rename from language_packs/data/en_systems_software_v1/manifest.json rename to packs/data/en_systems_software_v1/manifest.json diff --git a/language_packs/data/en_units_v1/.mastery_report.json b/packs/data/en_units_v1/.mastery_report.json similarity index 100% rename from language_packs/data/en_units_v1/.mastery_report.json rename to packs/data/en_units_v1/.mastery_report.json diff --git a/language_packs/data/en_units_v1/conversions.jsonl b/packs/data/en_units_v1/conversions.jsonl similarity index 100% rename from language_packs/data/en_units_v1/conversions.jsonl rename to packs/data/en_units_v1/conversions.jsonl diff --git a/language_packs/data/en_units_v1/glosses.jsonl b/packs/data/en_units_v1/glosses.jsonl similarity index 100% rename from language_packs/data/en_units_v1/glosses.jsonl rename to packs/data/en_units_v1/glosses.jsonl diff --git a/language_packs/data/en_units_v1/lexicon.jsonl b/packs/data/en_units_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/en_units_v1/lexicon.jsonl rename to packs/data/en_units_v1/lexicon.jsonl diff --git a/language_packs/data/en_units_v1/manifest.json b/packs/data/en_units_v1/manifest.json similarity index 100% rename from language_packs/data/en_units_v1/manifest.json rename to packs/data/en_units_v1/manifest.json diff --git a/language_packs/data/grc_logos_cognition_v1/alignment.jsonl b/packs/data/grc_logos_cognition_v1/alignment.jsonl similarity index 100% rename from language_packs/data/grc_logos_cognition_v1/alignment.jsonl rename to packs/data/grc_logos_cognition_v1/alignment.jsonl diff --git a/language_packs/data/grc_logos_cognition_v1/glosses.jsonl b/packs/data/grc_logos_cognition_v1/glosses.jsonl similarity index 100% rename from language_packs/data/grc_logos_cognition_v1/glosses.jsonl rename to packs/data/grc_logos_cognition_v1/glosses.jsonl diff --git a/language_packs/data/grc_logos_cognition_v1/lexicon.jsonl b/packs/data/grc_logos_cognition_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/grc_logos_cognition_v1/lexicon.jsonl rename to packs/data/grc_logos_cognition_v1/lexicon.jsonl diff --git a/language_packs/data/grc_logos_cognition_v1/manifest.json b/packs/data/grc_logos_cognition_v1/manifest.json similarity index 100% rename from language_packs/data/grc_logos_cognition_v1/manifest.json rename to packs/data/grc_logos_cognition_v1/manifest.json diff --git a/language_packs/data/grc_logos_cognition_v1/morphology.jsonl b/packs/data/grc_logos_cognition_v1/morphology.jsonl similarity index 100% rename from language_packs/data/grc_logos_cognition_v1/morphology.jsonl rename to packs/data/grc_logos_cognition_v1/morphology.jsonl diff --git a/language_packs/data/grc_logos_micro_v1/alignment.jsonl b/packs/data/grc_logos_micro_v1/alignment.jsonl similarity index 100% rename from language_packs/data/grc_logos_micro_v1/alignment.jsonl rename to packs/data/grc_logos_micro_v1/alignment.jsonl diff --git a/language_packs/data/grc_logos_micro_v1/glosses.jsonl b/packs/data/grc_logos_micro_v1/glosses.jsonl similarity index 100% rename from language_packs/data/grc_logos_micro_v1/glosses.jsonl rename to packs/data/grc_logos_micro_v1/glosses.jsonl diff --git a/language_packs/data/grc_logos_micro_v1/lexicon.jsonl b/packs/data/grc_logos_micro_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/grc_logos_micro_v1/lexicon.jsonl rename to packs/data/grc_logos_micro_v1/lexicon.jsonl diff --git a/language_packs/data/grc_logos_micro_v1/manifest.json b/packs/data/grc_logos_micro_v1/manifest.json similarity index 100% rename from language_packs/data/grc_logos_micro_v1/manifest.json rename to packs/data/grc_logos_micro_v1/manifest.json diff --git a/language_packs/data/grc_logos_micro_v1/morphology.jsonl b/packs/data/grc_logos_micro_v1/morphology.jsonl similarity index 100% rename from language_packs/data/grc_logos_micro_v1/morphology.jsonl rename to packs/data/grc_logos_micro_v1/morphology.jsonl diff --git a/language_packs/data/he_core_cognition_v1/alignment.jsonl b/packs/data/he_core_cognition_v1/alignment.jsonl similarity index 100% rename from language_packs/data/he_core_cognition_v1/alignment.jsonl rename to packs/data/he_core_cognition_v1/alignment.jsonl diff --git a/language_packs/data/he_core_cognition_v1/glosses.jsonl b/packs/data/he_core_cognition_v1/glosses.jsonl similarity index 100% rename from language_packs/data/he_core_cognition_v1/glosses.jsonl rename to packs/data/he_core_cognition_v1/glosses.jsonl diff --git a/language_packs/data/he_core_cognition_v1/lexicon.jsonl b/packs/data/he_core_cognition_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/he_core_cognition_v1/lexicon.jsonl rename to packs/data/he_core_cognition_v1/lexicon.jsonl diff --git a/language_packs/data/he_core_cognition_v1/manifest.json b/packs/data/he_core_cognition_v1/manifest.json similarity index 100% rename from language_packs/data/he_core_cognition_v1/manifest.json rename to packs/data/he_core_cognition_v1/manifest.json diff --git a/language_packs/data/he_core_cognition_v1/morphology.jsonl b/packs/data/he_core_cognition_v1/morphology.jsonl similarity index 100% rename from language_packs/data/he_core_cognition_v1/morphology.jsonl rename to packs/data/he_core_cognition_v1/morphology.jsonl diff --git a/language_packs/data/he_logos_micro_v1/alignment.jsonl b/packs/data/he_logos_micro_v1/alignment.jsonl similarity index 100% rename from language_packs/data/he_logos_micro_v1/alignment.jsonl rename to packs/data/he_logos_micro_v1/alignment.jsonl diff --git a/language_packs/data/he_logos_micro_v1/glosses.jsonl b/packs/data/he_logos_micro_v1/glosses.jsonl similarity index 100% rename from language_packs/data/he_logos_micro_v1/glosses.jsonl rename to packs/data/he_logos_micro_v1/glosses.jsonl diff --git a/language_packs/data/he_logos_micro_v1/lexicon.jsonl b/packs/data/he_logos_micro_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/he_logos_micro_v1/lexicon.jsonl rename to packs/data/he_logos_micro_v1/lexicon.jsonl diff --git a/language_packs/data/he_logos_micro_v1/manifest.json b/packs/data/he_logos_micro_v1/manifest.json similarity index 100% rename from language_packs/data/he_logos_micro_v1/manifest.json rename to packs/data/he_logos_micro_v1/manifest.json diff --git a/language_packs/data/he_logos_micro_v1/morphology.jsonl b/packs/data/he_logos_micro_v1/morphology.jsonl similarity index 100% rename from language_packs/data/he_logos_micro_v1/morphology.jsonl rename to packs/data/he_logos_micro_v1/morphology.jsonl diff --git a/language_packs/data/l10_grounding_v1/README.md b/packs/data/l10_grounding_v1/README.md similarity index 100% rename from language_packs/data/l10_grounding_v1/README.md rename to packs/data/l10_grounding_v1/README.md diff --git a/language_packs/data/l10_grounding_v1/lexicon.jsonl b/packs/data/l10_grounding_v1/lexicon.jsonl similarity index 100% rename from language_packs/data/l10_grounding_v1/lexicon.jsonl rename to packs/data/l10_grounding_v1/lexicon.jsonl diff --git a/language_packs/data/l10_grounding_v1/manifest.json b/packs/data/l10_grounding_v1/manifest.json similarity index 100% rename from language_packs/data/l10_grounding_v1/manifest.json rename to packs/data/l10_grounding_v1/manifest.json diff --git a/language_packs/definitions.py b/packs/definitions.py similarity index 100% rename from language_packs/definitions.py rename to packs/definitions.py diff --git a/language_packs/domain_contract.py b/packs/domain_contract.py similarity index 100% rename from language_packs/domain_contract.py rename to packs/domain_contract.py diff --git a/language_packs/en_seeder.py b/packs/en_seeder.py similarity index 98% rename from language_packs/en_seeder.py rename to packs/en_seeder.py index 122f6fa6..824924c3 100644 --- a/language_packs/en_seeder.py +++ b/packs/en_seeder.py @@ -1,5 +1,5 @@ """ -language_packs/en_seeder.py — English Supervised Seeding Epoch (V1). +packs/en_seeder.py — English Supervised Seeding Epoch (V1). Downloads GloVe-6B-50d (822 MB compressed, ~2.2M lines) on first run and caches it at ~/.cache/core/glove.6B.50d.txt. Subsequent runs load from @@ -20,11 +20,11 @@ structured bivector projection that encodes relational energy without disturbing the horosphere constraint. Usage: - from language_packs.en_seeder import seed_english_manifold + from packs.en_seeder import seed_english_manifold manifold = seed_english_manifold(max_words=50_000) Standalone: - python -m language_packs.en_seeder + python -m packs.en_seeder """ from __future__ import annotations diff --git a/language_packs/evidence.py b/packs/evidence.py similarity index 100% rename from language_packs/evidence.py rename to packs/evidence.py diff --git a/language_packs/loader.py b/packs/loader.py similarity index 98% rename from language_packs/loader.py rename to packs/loader.py index 98c6445a..e81140a3 100644 --- a/language_packs/loader.py +++ b/packs/loader.py @@ -325,14 +325,14 @@ def canonical_unit_for(dimension: str) -> str: # --------------------------------------------------------------------------- # ADR-0128 numerics-pack re-exports (deferred coordination from ADR-0128 brief) # -# en_numerics_v1's loader functions live in language_packs/numerics_loader.py +# en_numerics_v1's loader functions live in packs/numerics_loader.py # (per the brief's concurrency clause that allowed parallel development). # Re-exporting them here gives callers a single import path -# (`from language_packs.loader import lookup_cardinal`) while keeping the +# (`from packs.loader import lookup_cardinal`) while keeping the # numerics implementation in its own domain-cohesive module. # --------------------------------------------------------------------------- -from language_packs.numerics_loader import ( # noqa: E402 +from packs.numerics_loader import ( # noqa: E402 CardinalEntry, ComparisonAnchorEntry, FractionEntry, diff --git a/language_packs/numerics_loader.py b/packs/numerics_loader.py similarity index 100% rename from language_packs/numerics_loader.py rename to packs/numerics_loader.py diff --git a/packs/primitives/__init__.py b/packs/primitives/__init__.py index becdc9aa..bf08dc3b 100644 --- a/packs/primitives/__init__.py +++ b/packs/primitives/__init__.py @@ -10,7 +10,7 @@ The primitives pack is sister to :mod:`packs.safety` and :mod:`packs.identity`: * swappable like :mod:`packs.identity` (operators may fork the floor) * never auto-mutable like :mod:`packs.safety` * ratified through a manifest checksum (same discipline as - ``language_packs/`` glosses_checksum) + ``packs/`` glosses_checksum) This package exposes :func:`load_primitives_pack` and the immutable :class:`PrimitivesPack` dataclass. It is NEVER mountable as a teaching diff --git a/packs/primitives/loader.py b/packs/primitives/loader.py index a3f1de01..1d452edb 100644 --- a/packs/primitives/loader.py +++ b/packs/primitives/loader.py @@ -3,13 +3,13 @@ Loads ``packs/primitives//{manifest.json,primitives.jsonl}`` with byte-checksum verification and strict schema parsing. -Why a separate loader (not :mod:`language_packs.compiler`) +Why a separate loader (not :mod:`packs.compiler`) ---------------------------------------------------------- Primitives are not lexicon entries — they have no surface, no morphology, no semantic-domain assignment, no manifold coordinate. They are a flat set of terminal symbols consulted by -:func:`language_packs.definitions.verify_definitional_closure` as the +:func:`packs.definitions.verify_definitional_closure` as the ``floor`` argument. Treating them as a degenerate ``LexicalEntry`` would import irrelevant machinery and blur the substrate boundary the ADR is deliberately drawing. diff --git a/language_packs/scalar_equivalence.py b/packs/scalar_equivalence.py similarity index 99% rename from language_packs/scalar_equivalence.py rename to packs/scalar_equivalence.py index c70900c6..a201489c 100644 --- a/language_packs/scalar_equivalence.py +++ b/packs/scalar_equivalence.py @@ -20,8 +20,8 @@ import re from dataclasses import dataclass from fractions import Fraction -from language_packs.ambiguity_hazards import lookup_hazards -from language_packs.numerics_loader import ( +from packs.ambiguity_hazards import lookup_hazards +from packs.numerics_loader import ( FractionEntry, MultiplierEntry, ParsedNumber, diff --git a/language_packs/schema.py b/packs/schema.py similarity index 100% rename from language_packs/schema.py rename to packs/schema.py diff --git a/language_packs/unit_dimensions.py b/packs/unit_dimensions.py similarity index 99% rename from language_packs/unit_dimensions.py rename to packs/unit_dimensions.py index 4ef65c1f..87fe37c8 100644 --- a/language_packs/unit_dimensions.py +++ b/packs/unit_dimensions.py @@ -16,7 +16,7 @@ from __future__ import annotations from dataclasses import dataclass from fractions import Fraction -from language_packs.loader import ( +from packs.loader import ( lookup_dimension, lookup_unit, get_conversion_graph, diff --git a/pyproject.toml b/pyproject.toml index ac21719e..e0982119 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ include = [ "formation*", "generate*", "ingest*", - "language_packs*", + "packs*", "morphology*", "persona*", "packs*", diff --git a/scripts/generate_en_numerics_v1.py b/scripts/generate_en_numerics_v1.py index 965ac8ce..2a38d0ad 100644 --- a/scripts/generate_en_numerics_v1.py +++ b/scripts/generate_en_numerics_v1.py @@ -1,7 +1,7 @@ """Deterministic generator for the en_numerics_v1 ratified semantic pack. Writes lexicon.jsonl, glosses.jsonl, manifest.json, and a self-sealing -.mastery_report.json under language_packs/data/en_numerics_v1/. +.mastery_report.json under packs/data/en_numerics_v1/. Re-running yields byte-identical output. SHA-256 checksums hash the bytes actually written to disk (CLAUDE.md rule). @@ -14,7 +14,7 @@ from pathlib import Path PACK_ID = "en_numerics_v1" PROVENANCE = "adr-0128:operator_seed:2026-05-23" -PACK_DIR = Path(__file__).resolve().parent.parent / "language_packs" / "data" / PACK_ID +PACK_DIR = Path(__file__).resolve().parent.parent / "packs" / "data" / PACK_ID def jline(d: dict) -> str: diff --git a/scripts/generate_phase5_language_lanes.py b/scripts/generate_phase5_language_lanes.py index cabbe1be..6cc97d50 100644 --- a/scripts/generate_phase5_language_lanes.py +++ b/scripts/generate_phase5_language_lanes.py @@ -26,7 +26,7 @@ import json from pathlib import Path # Triples drawn from the seed packs. Surface forms taken from -# language_packs/data//lexicon.jsonl. +# packs/data//lexicon.jsonl. # Triples use only verbs/nouns present in he_core_cognition_v1 # (12 NOUN, 3 VERB: גילה reveal, מצא find, קדם precede). HEBREW_TRIPLES: list[tuple[str, str, str]] = [ diff --git a/scripts/gsm8k_substrate_morphology.py b/scripts/gsm8k_substrate_morphology.py index 4bc079a8..26de01af 100644 --- a/scripts/gsm8k_substrate_morphology.py +++ b/scripts/gsm8k_substrate_morphology.py @@ -18,9 +18,9 @@ from generate.problem_frame_builder import ( from generate.problem_frame_contracts import assess_contracts, recommended_migration_target as contract_target from generate.problem_frame_extractors import surface_in_text from generate.process_frames import frame_by_name, lookup_frame -from language_packs.loader import lookup_container -from language_packs.scalar_equivalence import list_unsupported_surfaces -from language_packs.unit_dimensions import classify_dimension +from packs.loader import lookup_container +from packs.scalar_equivalence import list_unsupported_surfaces +from packs.unit_dimensions import classify_dimension _AMBIGUOUS_SURFACES = ( "half", "quarter", "third", "percent", "percentage points", "times", diff --git a/scripts/ratify_anchor_lens_packs.py b/scripts/ratify_anchor_lens_packs.py index 99c53ecf..d70fb209 100644 --- a/scripts/ratify_anchor_lens_packs.py +++ b/scripts/ratify_anchor_lens_packs.py @@ -30,7 +30,7 @@ from typing import Any from formation.hashing import self_seal PACKS_DIR = Path(__file__).resolve().parents[1] / "packs" / "anchor_lens" -LANG_DATA_DIR = Path(__file__).resolve().parents[1] / "language_packs" / "data" +LANG_DATA_DIR = Path(__file__).resolve().parents[1] / "packs" / "data" ISSUED_AT = "2026-05-20T00:00:00Z" # All anchor-lens pack ids to ratify, in declaration order. diff --git a/scripts/run_pulse.py b/scripts/run_pulse.py index 90be1e4c..474947c3 100644 --- a/scripts/run_pulse.py +++ b/scripts/run_pulse.py @@ -69,13 +69,13 @@ class PulseResult: def _load_manifold(use_glove: bool, max_words: int) -> VocabManifold: if use_glove: - from language_packs.en_seeder import seed_english_manifold + from packs.en_seeder import seed_english_manifold log.info("[pulse] Seeding English manifold (max_words=%d) …", max_words) manifold = seed_english_manifold(max_words=max_words) log.info("[pulse] Manifold ready: %d words", len(manifold)) return manifold - from language_packs.compiler import load_pack + from packs.compiler import load_pack _, manifold = load_pack(COMPILED_PACK_ID) return manifold diff --git a/scripts/verify_definitional_closure.py b/scripts/verify_definitional_closure.py index e54d680a..6502e232 100644 --- a/scripts/verify_definitional_closure.py +++ b/scripts/verify_definitional_closure.py @@ -12,7 +12,7 @@ from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[1] -DATA_ROOT = REPO_ROOT / "language_packs" / "data" +DATA_ROOT = REPO_ROOT / "packs" / "data" PRIMITIVES_PATH = REPO_ROOT / "packs" / "primitives" / "en_semantic_primitives_v1" / "primitives.jsonl" TOKEN_RE = re.compile(r"[A-Za-z_]+") STOPWORDS = {"is", "of", "to", "by", "the", "a", "an", "that", "which"} diff --git a/sensorium/adapters/text.py b/sensorium/adapters/text.py index fd9f67ea..3d61552c 100644 --- a/sensorium/adapters/text.py +++ b/sensorium/adapters/text.py @@ -25,7 +25,7 @@ import numpy as np import hashlib from algebra.versor import construction_seed_versor, versor_condition -from language_packs.schema import LanguageRole, OOVPolicy +from packs.schema import LanguageRole, OOVPolicy from sensorium.protocol import ( CL41_DIM, Modality, diff --git a/sensorium/protocol.py b/sensorium/protocol.py index e8bdf66f..90f7d92f 100644 --- a/sensorium/protocol.py +++ b/sensorium/protocol.py @@ -28,7 +28,7 @@ from typing import Any, Generic, Protocol, TypeVar, runtime_checkable import numpy as np -from language_packs.schema import LanguageRole, OOVPolicy +from packs.schema import LanguageRole, OOVPolicy # Surface type variable S = TypeVar("S") diff --git a/teaching/contemplation.py b/teaching/contemplation.py index ac22537c..a0ef376f 100644 --- a/teaching/contemplation.py +++ b/teaching/contemplation.py @@ -71,7 +71,7 @@ loop. ``None`` means "no vault probe in this contemplation pass." _DEFAULT_MAX_DEPTH: int = 8 _MATH_PACK_PATH = ( Path(__file__).resolve().parent.parent - / "language_packs" + / "packs" / "data" / "en_core_math_v1" ) diff --git a/teaching/math_composition_ratification.py b/teaching/math_composition_ratification.py index 9811515e..d00b3957 100644 --- a/teaching/math_composition_ratification.py +++ b/teaching/math_composition_ratification.py @@ -2,7 +2,7 @@ This module is the explicit post-review mutation boundary for math-domain composition-pattern evidence. It edits only per-category source files -under ``language_packs/data/en_core_math_v1/compositions/``; it does not +under ``packs/data/en_core_math_v1/compositions/``; it does not regenerate the compiled lexicon and therefore does not rewrite the pack manifest checksum. @@ -137,7 +137,7 @@ def _repo_root() -> Path: def _default_pack_root() -> Path: - return _repo_root() / "language_packs" / "data" / "en_core_math_v1" + return _repo_root() / "packs" / "data" / "en_core_math_v1" def _sha256_file(path: Path) -> str: @@ -365,7 +365,7 @@ def apply_composition_claim( # composition artifact and update the pack manifest's # composition_checksum so the next runtime turn loads the new entry. # Idempotent; identical source → identical compiled bytes. - from language_packs.compile_pack import compile_pack + from packs.compile_pack import compile_pack compile_pack(root) return CompositionRatificationReceipt( diff --git a/teaching/math_frame_ratification.py b/teaching/math_frame_ratification.py index f565d7c9..0ee2f0db 100644 --- a/teaching/math_frame_ratification.py +++ b/teaching/math_frame_ratification.py @@ -2,7 +2,7 @@ This module is the explicit post-review mutation boundary for math-domain frame-opener evidence. It edits only per-category source files under -``language_packs/data/en_core_math_v1/frames/``; it does not regenerate the +``packs/data/en_core_math_v1/frames/``; it does not regenerate the compiled lexicon and therefore does not rewrite the pack manifest checksum. Mirrors :mod:`teaching.math_lexical_ratification` (W2-D) but lifts the safe @@ -125,7 +125,7 @@ def _repo_root() -> Path: def _default_pack_root() -> Path: - return _repo_root() / "language_packs" / "data" / "en_core_math_v1" + return _repo_root() / "packs" / "data" / "en_core_math_v1" def _sha256_file(path: Path) -> str: @@ -339,7 +339,7 @@ def apply_frame_claim( after = _sha256_file(target_file) # RAT-1 — close the ratify→runtime gap (mirrors composition handler). - from language_packs.compile_pack import compile_pack + from packs.compile_pack import compile_pack compile_pack(root) return FrameRatificationReceipt( diff --git a/teaching/math_lexical_ratification.py b/teaching/math_lexical_ratification.py index bb3a06db..04233538 100644 --- a/teaching/math_lexical_ratification.py +++ b/teaching/math_lexical_ratification.py @@ -86,7 +86,7 @@ def _repo_root() -> Path: def _default_pack_root() -> Path: - return _repo_root() / "language_packs" / "data" / "en_core_math_v1" + return _repo_root() / "packs" / "data" / "en_core_math_v1" def _sha256_file(path: Path) -> str: diff --git a/teaching/relation_parse.py b/teaching/relation_parse.py index 1aae9a99..8b6ad606 100644 --- a/teaching/relation_parse.py +++ b/teaching/relation_parse.py @@ -8,7 +8,7 @@ relation graph that the teaching store represents. Determinism: pure regex-driven extraction; no learned classifier; no external IO. The relation vocabulary is drawn from the cognition pack's -relation predicates (see ``language_packs/data/en_core_cognition_v1``). +relation predicates (see ``packs/data/en_core_cognition_v1``). """ from __future__ import annotations diff --git a/tests/test_adr_0084_definitional_substrate.py b/tests/test_adr_0084_definitional_substrate.py index ee7b598b..b3eddbc9 100644 --- a/tests/test_adr_0084_definitional_substrate.py +++ b/tests/test_adr_0084_definitional_substrate.py @@ -15,7 +15,7 @@ from pathlib import Path import pytest -from language_packs.definitions import ( +from packs.definitions import ( ClosureViolation, DefinitionalSchemaError, GlossEntry, @@ -158,7 +158,7 @@ def _write_temp_pack( pack_id: str = "fixture_pack_v1", ) -> str: """Create a fake pack in tmp_path and point _PACK_ROOT at it.""" - from language_packs import definitions as _def + from packs import definitions as _def pack_dir = tmp_path / pack_id pack_dir.mkdir(parents=True, exist_ok=True) @@ -172,7 +172,7 @@ class TestLoadPackGlosses: def test_missing_glosses_returns_empty( self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch ) -> None: - from language_packs import definitions as _def + from packs import definitions as _def monkeypatch.setattr(_def, "_PACK_ROOT", tmp_path) clear_definitions_cache() @@ -457,7 +457,7 @@ class TestPrimitivesLoader: class TestManifestField: def test_default_is_false(self) -> None: - from language_packs.schema import LanguagePackManifest, LanguageRole + from packs.schema import LanguagePackManifest, LanguageRole manifest = LanguagePackManifest( pack_id="x", @@ -478,7 +478,7 @@ class TestManifestField: # The 9 core packs + 4 relations packs + collapse-anchors opted # in via PR #65; the non-English cognition packs and en_minimal # remain non-opted at the time of writing. - from language_packs.compiler import load_pack + from packs.compiler import load_pack for pack_id in ( "en_minimal_v1", @@ -495,7 +495,7 @@ class TestManifestField: # surface it through the manifest loader. This proves the # substrate's loader propagation works against real ratified # content, not just fixture packs. - from language_packs.compiler import load_pack + from packs.compiler import load_pack for pack_id in ("en_core_cognition_v1", "en_core_relations_v1"): manifest, _ = load_pack(pack_id) diff --git a/tests/test_adr_0084_integration_closure.py b/tests/test_adr_0084_integration_closure.py index d5284c24..f198c75c 100644 --- a/tests/test_adr_0084_integration_closure.py +++ b/tests/test_adr_0084_integration_closure.py @@ -29,8 +29,8 @@ from __future__ import annotations import pytest -from language_packs.compiler import load_pack_entries -from language_packs.definitions import ( +from packs.compiler import load_pack_entries +from packs.definitions import ( load_pack_glosses, verify_definitional_closure, ) diff --git a/tests/test_adr_0122_rate_per_unit.py b/tests/test_adr_0122_rate_per_unit.py index 9ac46700..89fadfe4 100644 --- a/tests/test_adr_0122_rate_per_unit.py +++ b/tests/test_adr_0122_rate_per_unit.py @@ -446,14 +446,14 @@ class TestArithmeticPackExtension: """ def test_apply_rate_lemma_present_in_lexicon(self) -> None: - from language_packs.compiler import load_pack_entries + from packs.compiler import load_pack_entries entries = load_pack_entries("en_arithmetic_v1") lemmas = {e.lemma for e in entries} assert "apply_rate" in lemmas def test_manifest_checksum_matches_lexicon_bytes(self) -> None: - pack_root = _REPO_ROOT / "language_packs" / "data" / "en_arithmetic_v1" + pack_root = _REPO_ROOT / "packs" / "data" / "en_arithmetic_v1" manifest = json.loads((pack_root / "manifest.json").read_text()) actual_lex_sha = hashlib.sha256( (pack_root / "lexicon.jsonl").read_bytes() diff --git a/tests/test_adr_0127_loader.py b/tests/test_adr_0127_loader.py index d4cf9a51..37695318 100644 --- a/tests/test_adr_0127_loader.py +++ b/tests/test_adr_0127_loader.py @@ -1,7 +1,7 @@ from __future__ import annotations import pytest -from language_packs.loader import ( +from packs.loader import ( lookup_unit, lookup_container, lookup_dimension, diff --git a/tests/test_adr_0127_pack_ratification.py b/tests/test_adr_0127_pack_ratification.py index b49a5954..224fbb84 100644 --- a/tests/test_adr_0127_pack_ratification.py +++ b/tests/test_adr_0127_pack_ratification.py @@ -3,7 +3,7 @@ from __future__ import annotations import json from pathlib import Path from collections import deque -from language_packs.loader import ( +from packs.loader import ( lookup_unit, lookup_dimension, get_conversion_graph, @@ -11,7 +11,7 @@ from language_packs.loader import ( UnitEntry, ) -DATA_DIR = Path(__file__).parent.parent / "language_packs" / "data" / "en_units_v1" +DATA_DIR = Path(__file__).parent.parent / "packs" / "data" / "en_units_v1" def _load_raw_lexicon(): lexicon_path = DATA_DIR / "lexicon.jsonl" diff --git a/tests/test_adr_0128_loader.py b/tests/test_adr_0128_loader.py index 6da372fa..e21c78b9 100644 --- a/tests/test_adr_0128_loader.py +++ b/tests/test_adr_0128_loader.py @@ -7,7 +7,7 @@ from __future__ import annotations import pytest -from language_packs.numerics_loader import ( +from packs.numerics_loader import ( lookup_cardinal, lookup_comparison_anchor, lookup_comparison_anchors, diff --git a/tests/test_adr_0128_numeric_formats.py b/tests/test_adr_0128_numeric_formats.py index 799d9460..dcd5883b 100644 --- a/tests/test_adr_0128_numeric_formats.py +++ b/tests/test_adr_0128_numeric_formats.py @@ -11,7 +11,7 @@ from fractions import Fraction import pytest -from language_packs.numerics_loader import match_number_format +from packs.numerics_loader import match_number_format # --------------------------------------------------------------------------- diff --git a/tests/test_adr_0128_pack_ratification.py b/tests/test_adr_0128_pack_ratification.py index e5479f2d..7c7628cf 100644 --- a/tests/test_adr_0128_pack_ratification.py +++ b/tests/test_adr_0128_pack_ratification.py @@ -12,7 +12,7 @@ from pathlib import Path import pytest -from language_packs.numerics_loader import ( +from packs.numerics_loader import ( QUANTIFIER_SEMANTIC_TYPES, PACK_ROOT, _index, diff --git a/tests/test_adr_0131_2_teaching_corpus_lane.py b/tests/test_adr_0131_2_teaching_corpus_lane.py index 49c638d2..98ad0486 100644 --- a/tests/test_adr_0131_2_teaching_corpus_lane.py +++ b/tests/test_adr_0131_2_teaching_corpus_lane.py @@ -114,7 +114,7 @@ class TestHonestEvidence: # 1. Load lemma IDs from permitted packs for pack_id in ("en_mathematics_logic_v1", "en_arithmetic_v1", "en_units_v1"): - pack_path = _ROOT / "language_packs" / "data" / pack_id / "lexicon.jsonl" + pack_path = _ROOT / "packs" / "data" / pack_id / "lexicon.jsonl" if pack_path.exists(): with pack_path.open("r", encoding="utf-8") as fh: for line in fh: diff --git a/tests/test_adr_0176_comparatives_pack.py b/tests/test_adr_0176_comparatives_pack.py index 5f14503f..4932e256 100644 --- a/tests/test_adr_0176_comparatives_pack.py +++ b/tests/test_adr_0176_comparatives_pack.py @@ -14,7 +14,7 @@ from pathlib import Path from generate.derivation import ComparativeScalar, extract_comparative_scalars -_PACK = Path(__file__).resolve().parents[1] / "language_packs" / "data" / "en_core_comparatives_v1" +_PACK = Path(__file__).resolve().parents[1] / "packs" / "data" / "en_core_comparatives_v1" # --------------------------------------------------------------------------- diff --git a/tests/test_alignment_graph.py b/tests/test_alignment_graph.py index 466d57bf..7b82d3e7 100644 --- a/tests/test_alignment_graph.py +++ b/tests/test_alignment_graph.py @@ -6,9 +6,9 @@ import numpy as np import pytest from alignment.graph import load_alignment -from language_packs.schema import AlignmentEdge, HolonomyAlignmentCase +from packs.schema import AlignmentEdge, HolonomyAlignmentCase from algebra.holonomy import holonomy_encode, holonomy_similarity -from language_packs import load_pack +from packs import load_pack # --------------------------------------------------------------------------- diff --git a/tests/test_ambiguity_hazards.py b/tests/test_ambiguity_hazards.py index 2c1f80cb..aca33242 100644 --- a/tests/test_ambiguity_hazards.py +++ b/tests/test_ambiguity_hazards.py @@ -1,9 +1,9 @@ -"""Tests for language_packs/ambiguity_hazards.py.""" +"""Tests for packs/ambiguity_hazards.py.""" from __future__ import annotations import pytest -from language_packs.ambiguity_hazards import ( +from packs.ambiguity_hazards import ( lookup_hazards, all_hazard_categories, all_registered_surfaces, diff --git a/tests/test_architectural_invariants.py b/tests/test_architectural_invariants.py index 2db603ad..008e9148 100644 --- a/tests/test_architectural_invariants.py +++ b/tests/test_architectural_invariants.py @@ -772,11 +772,11 @@ class TestINV21OneMutationPath: # revision graph at SPECULATIVE. Defaulting to COHERENT would substitute # pack authority for coherence judgment — exactly the bias the schema # refuses. This test is the regression guard for the original Leak A: -# `language_packs/compiler.py:331` previously defaulted to "coherent", +# `packs/compiler.py:331` previously defaulted to "coherent", # silently promoting every unmarked pack row to admissible-as-evidence. -from language_packs.schema import LexicalEntry -from language_packs.compiler import _parse_entry +from packs.schema import LexicalEntry +from packs.compiler import _parse_entry class TestINV22PackDefaultSpeculative: @@ -807,7 +807,7 @@ class TestINV22PackDefaultSpeculative: assert entry.epistemic_status == "speculative", ( "Compiler default for missing epistemic_status is " f"{entry.epistemic_status!r} — must be 'speculative'. " - "language_packs/compiler.py:331 was the original Leak A site; do not regress." + "packs/compiler.py:331 was the original Leak A site; do not regress." ) def test_explicit_coherent_is_preserved(self): @@ -1503,7 +1503,7 @@ import dataclasses as _dataclasses # component is one of these is project code (a potential shared decoding pathway); # stdlib and third-party (numpy, ...) are not. _FIRST_PARTY_ROOTS: frozenset[str] = frozenset({ - "generate", "core", "algebra", "field", "language_packs", "vault", "chat", + "generate", "core", "algebra", "field", "packs", "vault", "chat", "teaching", "sensorium", "calibration", "evals", "ingest", "recognition", "formation", "morphology", "vocab", "session", "contemplation", "persona", "alignment", "probe", "core_ingest", "core_rs", diff --git a/tests/test_brief_11b_step2_lexicon.py b/tests/test_brief_11b_step2_lexicon.py index 087e7f70..532987fb 100644 --- a/tests/test_brief_11b_step2_lexicon.py +++ b/tests/test_brief_11b_step2_lexicon.py @@ -25,7 +25,7 @@ from generate.comprehension.audit import audit_problem from generate.comprehension.state import ReaderRefusal REPO_ROOT = Path(__file__).resolve().parents[1] -PACK_DIR = REPO_ROOT / "language_packs/data/en_core_math_v1" +PACK_DIR = REPO_ROOT / "packs/data/en_core_math_v1" DRAIN_PATH = PACK_DIR / "lexicon/drain_token.jsonl" CASES_PATH = REPO_ROOT / "evals/gsm8k_math/train_sample/v1/cases.jsonl" diff --git a/tests/test_claude_hybrid_verification_demo.py b/tests/test_claude_hybrid_verification_demo.py index e4cc5087..2240b3ca 100644 --- a/tests/test_claude_hybrid_verification_demo.py +++ b/tests/test_claude_hybrid_verification_demo.py @@ -458,7 +458,7 @@ _FIRST_PARTY_ROOTS = ( "evals", "field", "generate", - "language_packs", + "packs", "sensorium", "teaching", "vault", diff --git a/tests/test_composition_consult_in_injector.py b/tests/test_composition_consult_in_injector.py index fe61846e..c0e37680 100644 --- a/tests/test_composition_consult_in_injector.py +++ b/tests/test_composition_consult_in_injector.py @@ -33,7 +33,7 @@ from generate.math_candidate_parser import CandidateInitial from generate.math_problem_graph import InitialPossession, Quantity from generate.recognizer_anchor_inject import inject_from_match from generate.recognizer_match import RecognizerMatch -from language_packs.compile_compositions import compile_compositions +from packs.compile_compositions import compile_compositions _SHAPE = "bound(count) × bound(unit_cost)" diff --git a/tests/test_composition_registry_load.py b/tests/test_composition_registry_load.py index 5a178dc2..6b9d200b 100644 --- a/tests/test_composition_registry_load.py +++ b/tests/test_composition_registry_load.py @@ -23,7 +23,7 @@ from generate.comprehension.composition_registry import ( load_composition_registry, lookup, ) -from language_packs.compile_compositions import compile_compositions +from packs.compile_compositions import compile_compositions from teaching.math_composition_ratification import SAFE_COMPOSITION_CATEGORIES diff --git a/tests/test_consumption_case_0050_hazard_pin.py b/tests/test_consumption_case_0050_hazard_pin.py index 4899c0ec..a43e0818 100644 --- a/tests/test_consumption_case_0050_hazard_pin.py +++ b/tests/test_consumption_case_0050_hazard_pin.py @@ -30,7 +30,7 @@ import pytest from generate.comprehension.composition_registry import ( clear_cache as clear_composition_cache, ) -from language_packs.compile_compositions import compile_compositions +from packs.compile_compositions import compile_compositions from teaching.math_composition_ratification import SAFE_COMPOSITION_CATEGORIES @@ -44,7 +44,7 @@ def _stage_pack(tmp_path: Path) -> Path: repo = here while repo.parent != repo and not (repo / "pyproject.toml").exists(): repo = repo.parent - src = repo / "language_packs" / "data" / "en_core_math_v1" + src = repo / "packs" / "data" / "en_core_math_v1" dst = tmp_path / "en_core_math_v1" shutil.copytree(src, dst) # Strip any pre-existing composition entries — start clean. diff --git a/tests/test_consumption_partition.py b/tests/test_consumption_partition.py index da8a3ccb..3e493166 100644 --- a/tests/test_consumption_partition.py +++ b/tests/test_consumption_partition.py @@ -65,7 +65,7 @@ def test_composition_registry_imports_no_cognition_modules(): def test_compile_modules_import_no_cognition(): repo = _repo_root() for mod in ("compile_frames.py", "compile_compositions.py"): - imports = _module_imports(repo / "language_packs" / mod) + imports = _module_imports(repo / "packs" / mod) cognition_taints = { i for i in imports if i.startswith("cognition.") or i.startswith("teaching.cognition") diff --git a/tests/test_contemplation_loop.py b/tests/test_contemplation_loop.py index 3d85a7f8..10edefee 100644 --- a/tests/test_contemplation_loop.py +++ b/tests/test_contemplation_loop.py @@ -133,7 +133,7 @@ def test_contemplation_runner_is_replay_deterministic(tmp_path: Path) -> None: def test_contemplation_runner_does_not_mutate_pack_tree(tmp_path: Path) -> None: report = tmp_path / "frontier_wave1.json" _sample_frontier_report(report) - pack_root = Path("language_packs") + pack_root = Path("packs") before = sorted( (p.relative_to(pack_root).as_posix(), p.stat().st_mtime_ns, p.stat().st_size) for p in pack_root.rglob("*") diff --git a/tests/test_contemplation_quality_lane.py b/tests/test_contemplation_quality_lane.py index 7b49cded..f27bc44b 100644 --- a/tests/test_contemplation_quality_lane.py +++ b/tests/test_contemplation_quality_lane.py @@ -400,7 +400,7 @@ class TestReadOnlyInvariant: guarded = { "teaching/corpora": repo_root / "teaching" / "corpora", "packs": repo_root / "packs", - "language_packs/data": repo_root / "language_packs" / "data", + "packs/data": repo_root / "packs" / "data", } before = {k: self._snapshot(v) for k, v in guarded.items()} diff --git a/tests/test_contemplation_ratifiable_payload.py b/tests/test_contemplation_ratifiable_payload.py index 7b22ee5e..eeea633f 100644 --- a/tests/test_contemplation_ratifiable_payload.py +++ b/tests/test_contemplation_ratifiable_payload.py @@ -37,7 +37,7 @@ from teaching.math_contemplation import decompose_audit REPO_ROOT = Path(__file__).resolve().parents[1] -PACK_ROOT = REPO_ROOT / "language_packs" / "data" / "en_core_math_v1" +PACK_ROOT = REPO_ROOT / "packs" / "data" / "en_core_math_v1" REAL_AUDIT_PATH = ( REPO_ROOT / "evals" / "gsm8k_math" / "train_sample" / "v1" / "audit_brief_11.json" ) diff --git a/tests/test_core_semantic_seed_pack.py b/tests/test_core_semantic_seed_pack.py index c70ca94d..af1239e0 100644 --- a/tests/test_core_semantic_seed_pack.py +++ b/tests/test_core_semantic_seed_pack.py @@ -6,7 +6,7 @@ from chat.runtime import ChatRuntime from core.config import DEFAULT_CONFIG from generate.intent import IntentTag, classify_intent from generate.graph_planner import graph_from_intent, plan_articulation -from language_packs.compiler import load_mounted_packs, load_pack, load_pack_entries +from packs.compiler import load_mounted_packs, load_pack, load_pack_entries _REQUIRED_CONCEPTS = frozenset({ diff --git a/tests/test_dialogue.py b/tests/test_dialogue.py index b97242af..43a4b4be 100644 --- a/tests/test_dialogue.py +++ b/tests/test_dialogue.py @@ -8,7 +8,7 @@ from generate.dialogue import ( propose_dialogue, ) from generate.proposition import FrameRegistry -from language_packs.compiler import load_mounted_packs +from packs.compiler import load_mounted_packs from session.context import SessionContext diff --git a/tests/test_dialogue_fluency_regression.py b/tests/test_dialogue_fluency_regression.py index 8a044644..d945cf82 100644 --- a/tests/test_dialogue_fluency_regression.py +++ b/tests/test_dialogue_fluency_regression.py @@ -111,7 +111,7 @@ def test_running_dialogue_blade_stays_nonzero_after_three_turns() -> None: ) from session.context import SessionContext - from language_packs import load_pack + from packs import load_pack _, vocab = load_pack("en_core_cognition_v1") ctx = SessionContext(vocab) diff --git a/tests/test_domain_contract_predicates.py b/tests/test_domain_contract_predicates.py index 96c81a34..c5213fed 100644 --- a/tests/test_domain_contract_predicates.py +++ b/tests/test_domain_contract_predicates.py @@ -162,7 +162,7 @@ class TestContractPresence: # # P1 / P2 require fully compiled packs and so are exercised against the # in-tree packs in `TestProductionPacks` below rather than against synthetic -# fixtures (the language_packs.compiler.load_pack call cannot resolve a +# fixtures (the packs.compiler.load_pack call cannot resolve a # synthetic data root in the same way). # --------------------------------------------------------------------------- diff --git a/tests/test_domain_pack_contract.py b/tests/test_domain_pack_contract.py index 37ce59a5..f90ebf0a 100644 --- a/tests/test_domain_pack_contract.py +++ b/tests/test_domain_pack_contract.py @@ -2,7 +2,7 @@ from __future__ import annotations import json -from language_packs.domain_contract import parse_domain_contract, validate_domain_contract_pack +from packs.domain_contract import parse_domain_contract, validate_domain_contract_pack def test_absent_domain_contract_is_valid_noop() -> None: diff --git a/tests/test_en_core_action_v1_pack.py b/tests/test_en_core_action_v1_pack.py index f1638ff8..aa2b1848 100644 --- a/tests/test_en_core_action_v1_pack.py +++ b/tests/test_en_core_action_v1_pack.py @@ -25,11 +25,11 @@ from pathlib import Path from chat.pack_resolver import DEFAULT_RESOLVABLE_PACK_IDS, resolve_lemma from core.config import RuntimeConfig -from language_packs.compiler import load_pack +from packs.compiler import load_pack PACK_ID = "en_core_action_v1" -_PACK_ROOT = Path(__file__).resolve().parent.parent / "language_packs" / "data" / PACK_ID +_PACK_ROOT = Path(__file__).resolve().parent.parent / "packs" / "data" / PACK_ID EXPECTED_TOTAL = 27 diff --git a/tests/test_en_core_attitude_v1_pack.py b/tests/test_en_core_attitude_v1_pack.py index 99b39b22..18599e29 100644 --- a/tests/test_en_core_attitude_v1_pack.py +++ b/tests/test_en_core_attitude_v1_pack.py @@ -28,11 +28,11 @@ from pathlib import Path from chat.pack_resolver import DEFAULT_RESOLVABLE_PACK_IDS, resolve_lemma from core.config import RuntimeConfig -from language_packs.compiler import load_pack +from packs.compiler import load_pack PACK_ID = "en_core_attitude_v1" -_PACK_ROOT = Path(__file__).resolve().parent.parent / "language_packs" / "data" / PACK_ID +_PACK_ROOT = Path(__file__).resolve().parent.parent / "packs" / "data" / PACK_ID EXPECTED_TOTAL = 40 diff --git a/tests/test_en_core_causation_v1_pack.py b/tests/test_en_core_causation_v1_pack.py index 9cd3020d..0152cb5f 100644 --- a/tests/test_en_core_causation_v1_pack.py +++ b/tests/test_en_core_causation_v1_pack.py @@ -17,11 +17,11 @@ from pathlib import Path from chat.pack_resolver import DEFAULT_RESOLVABLE_PACK_IDS, resolve_lemma from core.config import RuntimeConfig -from language_packs.compiler import load_pack +from packs.compiler import load_pack PACK_ID = "en_core_causation_v1" -_PACK_ROOT = Path(__file__).resolve().parent.parent / "language_packs" / "data" / PACK_ID +_PACK_ROOT = Path(__file__).resolve().parent.parent / "packs" / "data" / PACK_ID EXPECTED_TOTAL = 15 EXPECTED_POS_COUNTS = {"NOUN": 6, "VERB": 6, "ADJ": 3} diff --git a/tests/test_en_core_math_v1_pack.py b/tests/test_en_core_math_v1_pack.py index d629e032..ac2a8237 100644 --- a/tests/test_en_core_math_v1_pack.py +++ b/tests/test_en_core_math_v1_pack.py @@ -15,12 +15,12 @@ from pathlib import Path import pytest -from language_packs.compiler import load_pack, load_pack_entries +from packs.compiler import load_pack, load_pack_entries PACK_ID = "en_core_math_v1" _PACK_DIR = ( - Path(__file__).parent.parent / "language_packs" / "data" / PACK_ID + Path(__file__).parent.parent / "packs" / "data" / PACK_ID ) _LEXICON_DIR = _PACK_DIR / "lexicon" diff --git a/tests/test_en_core_meta_v1_pack.py b/tests/test_en_core_meta_v1_pack.py index b12f2a25..b86f364a 100644 --- a/tests/test_en_core_meta_v1_pack.py +++ b/tests/test_en_core_meta_v1_pack.py @@ -30,11 +30,11 @@ from pathlib import Path from chat.pack_resolver import DEFAULT_RESOLVABLE_PACK_IDS, resolve_lemma from core.config import RuntimeConfig -from language_packs.compiler import load_pack +from packs.compiler import load_pack PACK_ID = "en_core_meta_v1" -_PACK_ROOT = Path(__file__).resolve().parent.parent / "language_packs" / "data" / PACK_ID +_PACK_ROOT = Path(__file__).resolve().parent.parent / "packs" / "data" / PACK_ID EXPECTED_TOTAL = 77 EXPECTED_VERB = 53 diff --git a/tests/test_en_core_polarity_v1_pack.py b/tests/test_en_core_polarity_v1_pack.py index acc46fed..8562ea5d 100644 --- a/tests/test_en_core_polarity_v1_pack.py +++ b/tests/test_en_core_polarity_v1_pack.py @@ -24,11 +24,11 @@ from pathlib import Path from chat.pack_resolver import DEFAULT_RESOLVABLE_PACK_IDS, resolve_lemma from core.config import RuntimeConfig -from language_packs.compiler import load_pack +from packs.compiler import load_pack PACK_ID = "en_core_polarity_v1" -_PACK_ROOT = Path(__file__).resolve().parent.parent / "language_packs" / "data" / PACK_ID +_PACK_ROOT = Path(__file__).resolve().parent.parent / "packs" / "data" / PACK_ID EXPECTED_TOTAL = 16 EXPECTED_POS_COUNTS = {"INTJ": 2, "ADV": 14} diff --git a/tests/test_en_core_quantitative_v1_pack.py b/tests/test_en_core_quantitative_v1_pack.py index 6377d8d0..688b4555 100644 --- a/tests/test_en_core_quantitative_v1_pack.py +++ b/tests/test_en_core_quantitative_v1_pack.py @@ -27,11 +27,11 @@ from pathlib import Path from chat.pack_resolver import DEFAULT_RESOLVABLE_PACK_IDS, resolve_lemma from core.config import RuntimeConfig -from language_packs.compiler import load_pack +from packs.compiler import load_pack PACK_ID = "en_core_quantitative_v1" -_PACK_ROOT = Path(__file__).resolve().parent.parent / "language_packs" / "data" / PACK_ID +_PACK_ROOT = Path(__file__).resolve().parent.parent / "packs" / "data" / PACK_ID EXPECTED_TOTAL = 24 EXPECTED_POS_COUNTS = {"DET": 18, "NUM": 3, "ADJ": 2, "NOUN": 1} diff --git a/tests/test_en_core_relations_v1_pack.py b/tests/test_en_core_relations_v1_pack.py index d98db80b..c6360f07 100644 --- a/tests/test_en_core_relations_v1_pack.py +++ b/tests/test_en_core_relations_v1_pack.py @@ -26,7 +26,7 @@ These tests pin: from __future__ import annotations -from language_packs.compiler import load_pack, load_pack_entries +from packs.compiler import load_pack, load_pack_entries PACK_ID = "en_core_relations_v1" diff --git a/tests/test_en_core_relations_v2_pack.py b/tests/test_en_core_relations_v2_pack.py index 5653fba4..787f0d74 100644 --- a/tests/test_en_core_relations_v2_pack.py +++ b/tests/test_en_core_relations_v2_pack.py @@ -17,7 +17,7 @@ The contract these tests pin: from __future__ import annotations -from language_packs.compiler import load_pack, load_pack_entries +from packs.compiler import load_pack, load_pack_entries PACK_ID = "en_core_relations_v2" diff --git a/tests/test_en_core_spatial_v1_pack.py b/tests/test_en_core_spatial_v1_pack.py index fa77d718..3d719b1f 100644 --- a/tests/test_en_core_spatial_v1_pack.py +++ b/tests/test_en_core_spatial_v1_pack.py @@ -28,11 +28,11 @@ from pathlib import Path from chat.pack_resolver import DEFAULT_RESOLVABLE_PACK_IDS, resolve_lemma from core.config import RuntimeConfig -from language_packs.compiler import load_pack +from packs.compiler import load_pack PACK_ID = "en_core_spatial_v1" -_PACK_ROOT = Path(__file__).resolve().parent.parent / "language_packs" / "data" / PACK_ID +_PACK_ROOT = Path(__file__).resolve().parent.parent / "packs" / "data" / PACK_ID EXPECTED_TOTAL = 25 EXPECTED_POS_COUNTS = {"ADV": 7, "ADP": 8, "NOUN": 10} diff --git a/tests/test_en_core_syntax_v1_pack.py b/tests/test_en_core_syntax_v1_pack.py index ec7f6121..3f4e14a7 100644 --- a/tests/test_en_core_syntax_v1_pack.py +++ b/tests/test_en_core_syntax_v1_pack.py @@ -7,7 +7,7 @@ reference handling, polarity, and evidence-span discipline. Contracts pinned here: -- checksum-verified load through ``language_packs.compiler.load_pack``; +- checksum-verified load through ``packs.compiler.load_pack``; - every entry's primary semantic namespace is syntax/claim/provenance; - contiguous zero-padded entry ids; - one gloss per lexicon lemma, with manifest checksum discipline; @@ -28,11 +28,11 @@ from chat.pack_resolver import ( resolve_gloss, resolve_lemma, ) -from language_packs.compiler import load_pack +from packs.compiler import load_pack PACK_ID = "en_core_syntax_v1" -_PACK_ROOT = Path(__file__).resolve().parent.parent / "language_packs" / "data" / PACK_ID +_PACK_ROOT = Path(__file__).resolve().parent.parent / "packs" / "data" / PACK_ID EXPECTED_TOTAL = 24 EXPECTED_POS_COUNTS = {"NOUN": 24} diff --git a/tests/test_en_core_temporal_v1_pack.py b/tests/test_en_core_temporal_v1_pack.py index e62f6ab3..1e8fb401 100644 --- a/tests/test_en_core_temporal_v1_pack.py +++ b/tests/test_en_core_temporal_v1_pack.py @@ -33,11 +33,11 @@ from pathlib import Path from chat.pack_resolver import DEFAULT_RESOLVABLE_PACK_IDS, resolve_lemma from core.config import RuntimeConfig -from language_packs.compiler import load_pack +from packs.compiler import load_pack PACK_ID = "en_core_temporal_v1" -_PACK_ROOT = Path(__file__).resolve().parent.parent / "language_packs" / "data" / PACK_ID +_PACK_ROOT = Path(__file__).resolve().parent.parent / "packs" / "data" / PACK_ID EXPECTED_TOTAL = 28 EXPECTED_POS_COUNTS = {"ADV": 12, "ADP": 5, "SCONJ": 1, "ADJ": 1, "NOUN": 9} diff --git a/tests/test_epistemic_phase2_known_bugs.py b/tests/test_epistemic_phase2_known_bugs.py index 3802f4e6..30ac0247 100644 --- a/tests/test_epistemic_phase2_known_bugs.py +++ b/tests/test_epistemic_phase2_known_bugs.py @@ -7,7 +7,7 @@ import pytest from evals.gsm8k_math import runner as gsm8k_runner from generate.math_realizer import RealizerError -from language_packs.evidence import mean_pair_score, resonance_evidence +from packs.evidence import mean_pair_score, resonance_evidence class _DummyManifold: diff --git a/tests/test_epistemic_phase3_state_tagging.py b/tests/test_epistemic_phase3_state_tagging.py index f9b07f8a..8e32f948 100644 --- a/tests/test_epistemic_phase3_state_tagging.py +++ b/tests/test_epistemic_phase3_state_tagging.py @@ -5,9 +5,9 @@ import numpy as np from chat.telemetry import serialize_turn_event from core.epistemic_state import EpistemicState, NormativeClearance from core.physics.identity import TurnEvent -from language_packs.compiler import compile_entries_to_manifold -from language_packs.loader import lookup_unit -from language_packs.schema import LexicalEntry +from packs.compiler import compile_entries_to_manifold +from packs.loader import lookup_unit +from packs.schema import LexicalEntry from teaching.epistemic import EpistemicStatus from vault.store import VaultStore, epistemic_state_for_vault_status diff --git a/tests/test_frame_registry_load.py b/tests/test_frame_registry_load.py index 14d2fba6..45b4da3f 100644 --- a/tests/test_frame_registry_load.py +++ b/tests/test_frame_registry_load.py @@ -14,7 +14,7 @@ from generate.comprehension.frame_registry import ( load_frame_registry, lookup, ) -from language_packs.compile_frames import compile_frames +from packs.compile_frames import compile_frames @pytest.fixture diff --git a/tests/test_graph_constraint.py b/tests/test_graph_constraint.py index 8c000e9d..96bef64d 100644 --- a/tests/test_graph_constraint.py +++ b/tests/test_graph_constraint.py @@ -16,7 +16,7 @@ from generate.intent import IntentTag @pytest.fixture() def vocab(): - from language_packs import load_pack + from packs import load_pack _manifest, manifold = load_pack("en_core_cognition_v1") return manifold diff --git a/tests/test_hitl_queue_backpressure.py b/tests/test_hitl_queue_backpressure.py index b5463376..2e954a6a 100644 --- a/tests/test_hitl_queue_backpressure.py +++ b/tests/test_hitl_queue_backpressure.py @@ -277,7 +277,7 @@ def test_capacity_refusal_does_not_mutate_system(): dirs = [ project_root / "teaching" / "cognition_chains", project_root / "packs", - project_root / "language_packs" / "data", + project_root / "packs" / "data", ] before_snapshots = {} diff --git a/tests/test_holonomy_resonance.py b/tests/test_holonomy_resonance.py index ae6edfe2..0daa2d5f 100644 --- a/tests/test_holonomy_resonance.py +++ b/tests/test_holonomy_resonance.py @@ -4,8 +4,8 @@ import numpy as np from algebra.cga import cga_inner from algebra.holonomy import holonomy_encode, holonomy_similarity -from language_packs import load_pack -from language_packs.compiler import compile_entries_to_manifold, load_mounted_packs, load_pack_entries +from packs import load_pack +from packs.compiler import compile_entries_to_manifold, load_mounted_packs, load_pack_entries from morphology.registry import load_morphology diff --git a/tests/test_lane_shape_thresholds.py b/tests/test_lane_shape_thresholds.py index e7ccd39c..6348ee23 100644 --- a/tests/test_lane_shape_thresholds.py +++ b/tests/test_lane_shape_thresholds.py @@ -48,7 +48,7 @@ def _ratified_pack_lanes() -> set[str]: for pack_id in packs: manifest_path = ( _REPO_ROOT - / "language_packs" + / "packs" / "data" / pack_id / "manifest.json" diff --git a/tests/test_language_pack_cache.py b/tests/test_language_pack_cache.py index a1f282ac..444eeccd 100644 --- a/tests/test_language_pack_cache.py +++ b/tests/test_language_pack_cache.py @@ -2,7 +2,7 @@ from __future__ import annotations -from language_packs.compiler import load_mounted_packs, load_pack, load_pack_entries +from packs.compiler import load_mounted_packs, load_pack, load_pack_entries def test_load_pack_returns_defensive_manifold_copies() -> None: diff --git a/tests/test_language_pack_load_safety.py b/tests/test_language_pack_load_safety.py index fd3bba8e..ae8e0173 100644 --- a/tests/test_language_pack_load_safety.py +++ b/tests/test_language_pack_load_safety.py @@ -1,8 +1,8 @@ -"""Trust-boundary tests for ``language_packs.compiler`` pack loading (ADR-0051). +"""Trust-boundary tests for ``packs.compiler`` pack loading (ADR-0051). These tests guard the path-traversal boundary at every public entrypoint that takes a ``pack_id`` string and resolves it into a filesystem path -under ``language_packs/data/``. The guard runs *before* any +under ``packs/data/``. The guard runs *before* any :class:`pathlib.Path` join so a malicious id cannot escape the data directory even briefly. """ @@ -10,7 +10,7 @@ from __future__ import annotations import pytest -from language_packs.compiler import ( +from packs.compiler import ( _validate_pack_id, load_mounted_packs, load_pack, diff --git a/tests/test_language_pack_runtime.py b/tests/test_language_pack_runtime.py index ac010bd6..621faa74 100644 --- a/tests/test_language_pack_runtime.py +++ b/tests/test_language_pack_runtime.py @@ -3,7 +3,7 @@ from __future__ import annotations import pytest from chat.runtime import ChatRuntime -from language_packs import load_pack, load_pack_entries +from packs import load_pack, load_pack_entries def test_load_pack_and_vocab_size(): diff --git a/tests/test_language_packs_scalar_equivalence.py b/tests/test_language_packs_scalar_equivalence.py index 53af3387..50ba47a1 100644 --- a/tests/test_language_packs_scalar_equivalence.py +++ b/tests/test_language_packs_scalar_equivalence.py @@ -1,10 +1,10 @@ -"""Tests for language_packs/scalar_equivalence.py.""" +"""Tests for packs/scalar_equivalence.py.""" from __future__ import annotations from fractions import Fraction import pytest -from language_packs.scalar_equivalence import ( +from packs.scalar_equivalence import ( PROVENANCE_PROBLEM_TEXT, canonicalize_scalar, extract_scalar_candidates, @@ -12,7 +12,7 @@ from language_packs.scalar_equivalence import ( list_unsupported_surfaces, ScalarCandidate, ) -from language_packs.unit_dimensions import classify_dimension +from packs.unit_dimensions import classify_dimension def test_fraction_words_canonicalization() -> None: diff --git a/tests/test_language_packs_unit_dimensions.py b/tests/test_language_packs_unit_dimensions.py index cf162ca5..a5bbc8e1 100644 --- a/tests/test_language_packs_unit_dimensions.py +++ b/tests/test_language_packs_unit_dimensions.py @@ -1,10 +1,10 @@ -"""Tests for language_packs/unit_dimensions.py.""" +"""Tests for packs/unit_dimensions.py.""" from __future__ import annotations from fractions import Fraction import pytest -from language_packs.unit_dimensions import ( +from packs.unit_dimensions import ( classify_dimension, are_dimensions_compatible, exact_conversion, diff --git a/tests/test_lexicon.py b/tests/test_lexicon.py index 5708c062..ea847ca6 100644 --- a/tests/test_lexicon.py +++ b/tests/test_lexicon.py @@ -92,7 +92,7 @@ class TestChecksum: # Copy the real pack into a temp location. real_pack = ( Path(__file__).resolve().parent.parent - / "language_packs" / "data" / "en_core_math_v1" + / "packs" / "data" / "en_core_math_v1" ) fake_pack = tmp_path / "en_core_math_v1" shutil.copytree(real_pack, fake_pack) @@ -221,7 +221,7 @@ class TestCacheHit: import shutil real_pack = ( Path(__file__).resolve().parent.parent - / "language_packs" / "data" / "en_core_math_v1" + / "packs" / "data" / "en_core_math_v1" ) fake_pack = tmp_path / "en_core_math_v1" shutil.copytree(real_pack, fake_pack) @@ -243,7 +243,7 @@ class TestMutualExclusion: real_pack = ( Path(__file__).resolve().parent.parent - / "language_packs" / "data" / "en_core_math_v1" + / "packs" / "data" / "en_core_math_v1" ) conflict_pack = tmp_path / "en_core_math_v1" shutil.copytree(real_pack, conflict_pack) diff --git a/tests/test_matcher_extension_end_to_end_admission.py b/tests/test_matcher_extension_end_to_end_admission.py index fe1bb60b..570ade23 100644 --- a/tests/test_matcher_extension_end_to_end_admission.py +++ b/tests/test_matcher_extension_end_to_end_admission.py @@ -25,7 +25,7 @@ from generate.comprehension.composition_registry import ( from generate.math_candidate_parser import CandidateInitial from generate.recognizer_anchor_inject import inject_from_match from generate.recognizer_match import RecognizerMatch, _match_rate_with_currency -from language_packs.compile_compositions import compile_compositions +from packs.compile_compositions import compile_compositions _SPEC: Mapping[str, Any] = { diff --git a/tests/test_math_composition_ratification.py b/tests/test_math_composition_ratification.py index e16ac11c..8988a6b1 100644 --- a/tests/test_math_composition_ratification.py +++ b/tests/test_math_composition_ratification.py @@ -73,7 +73,7 @@ from teaching.math_reasoning_trace import ReasoningStep, build_trace REPO_ROOT = Path(__file__).resolve().parents[1] -PACK_ROOT = REPO_ROOT / "language_packs" / "data" / "en_core_math_v1" +PACK_ROOT = REPO_ROOT / "packs" / "data" / "en_core_math_v1" CASES_PATH = REPO_ROOT / "evals" / "gsm8k_math" / "train_sample" / "v1" / "cases.jsonl" AUDIT_BRIEF_PATH = ( REPO_ROOT diff --git a/tests/test_math_evidence_e2e.py b/tests/test_math_evidence_e2e.py index fa23059d..be0b4684 100644 --- a/tests/test_math_evidence_e2e.py +++ b/tests/test_math_evidence_e2e.py @@ -4,7 +4,7 @@ Closes the LexicalClaim-first slice: refusal → adapter → signature → ratification → re-audit → row movement. Pure tests. Every ratification uses a tmpdir pack copy; the real -``language_packs/data/en_core_math_v1/`` is byte-identical before and +``packs/data/en_core_math_v1/`` is byte-identical before and after the suite runs. """ @@ -47,7 +47,7 @@ AUDIT_ARTIFACT_PATH = ( CASES_PATH = ( REPO_ROOT / "evals" / "gsm8k_math" / "train_sample" / "v1" / "cases.jsonl" ) -PACK_ROOT = REPO_ROOT / "language_packs" / "data" / "en_core_math_v1" +PACK_ROOT = REPO_ROOT / "packs" / "data" / "en_core_math_v1" PACK_HAZARD_CASE_ID = "gsm8k-train-sample-v1-0050" diff --git a/tests/test_math_frame_ratification.py b/tests/test_math_frame_ratification.py index dcfc3b4d..9a18acfa 100644 --- a/tests/test_math_frame_ratification.py +++ b/tests/test_math_frame_ratification.py @@ -48,7 +48,7 @@ from teaching.math_frame_ratification import ( REPO_ROOT = Path(__file__).resolve().parents[1] -PACK_ROOT = REPO_ROOT / "language_packs" / "data" / "en_core_math_v1" +PACK_ROOT = REPO_ROOT / "packs" / "data" / "en_core_math_v1" CASES_PATH = REPO_ROOT / "evals" / "gsm8k_math" / "train_sample" / "v1" / "cases.jsonl" diff --git a/tests/test_math_lexical_ratification.py b/tests/test_math_lexical_ratification.py index 388eef3b..cc4ed2e6 100644 --- a/tests/test_math_lexical_ratification.py +++ b/tests/test_math_lexical_ratification.py @@ -27,7 +27,7 @@ from teaching.math_lexical_ratification import ( REPO_ROOT = Path(__file__).resolve().parents[1] -PACK_ROOT = REPO_ROOT / "language_packs" / "data" / "en_core_math_v1" +PACK_ROOT = REPO_ROOT / "packs" / "data" / "en_core_math_v1" CASES_PATH = REPO_ROOT / "evals" / "gsm8k_math" / "train_sample" / "v1" / "cases.jsonl" diff --git a/tests/test_math_solver.py b/tests/test_math_solver.py index 200c3b31..ed3a8463 100644 --- a/tests/test_math_solver.py +++ b/tests/test_math_solver.py @@ -210,7 +210,7 @@ class TestOperationProvenance: ) def test_pack_lemma_resolves_to_real_lexicon_entry(self) -> None: - from language_packs.compiler import load_pack_entries + from packs.compiler import load_pack_entries entries = load_pack_entries(REQUIRED_PACK_ID) lemmas = {e.lemma for e in entries} diff --git a/tests/test_me2_case_0019_admits.py b/tests/test_me2_case_0019_admits.py index 8c4e191c..adb671ee 100644 --- a/tests/test_me2_case_0019_admits.py +++ b/tests/test_me2_case_0019_admits.py @@ -24,7 +24,7 @@ from generate.math_candidate_parser import CandidateInitial from generate.recognizer_anchor_inject import inject_from_match from generate.recognizer_match import RecognizerMatch, match from generate.recognizer_registry import RatifiedRecognizer -from language_packs.compile_compositions import compile_compositions +from packs.compile_compositions import compile_compositions _SHAPE = "bound(count) × bound(unit_cost)" diff --git a/tests/test_me3_additive_composition.py b/tests/test_me3_additive_composition.py index 58ca2dcf..73421cd5 100644 --- a/tests/test_me3_additive_composition.py +++ b/tests/test_me3_additive_composition.py @@ -28,7 +28,7 @@ from generate.recognizer_match import ( _match_multiplicative_aggregation, ) from generate.recognizer_registry import RatifiedRecognizer -from language_packs.compile_compositions import compile_compositions +from packs.compile_compositions import compile_compositions _SPEC: Mapping[str, Any] = { diff --git a/tests/test_me4_subtractive_composition.py b/tests/test_me4_subtractive_composition.py index 7a13f551..3a276104 100644 --- a/tests/test_me4_subtractive_composition.py +++ b/tests/test_me4_subtractive_composition.py @@ -22,7 +22,7 @@ from generate.recognizer_match import ( RecognizerMatch, _match_multiplicative_aggregation, ) -from language_packs.compile_compositions import compile_compositions +from packs.compile_compositions import compile_compositions _SPEC: Mapping[str, Any] = { diff --git a/tests/test_me5_all_categories_integration.py b/tests/test_me5_all_categories_integration.py index c19d4751..6efbd2cc 100644 --- a/tests/test_me5_all_categories_integration.py +++ b/tests/test_me5_all_categories_integration.py @@ -27,7 +27,7 @@ from generate.recognizer_match import ( _match_multiplicative_aggregation, _match_rate_with_currency, ) -from language_packs.compile_compositions import compile_compositions +from packs.compile_compositions import compile_compositions from teaching.math_composition_ratification import SAFE_COMPOSITION_CATEGORIES diff --git a/tests/test_morphology_registry.py b/tests/test_morphology_registry.py index 87d6e3ef..37a38336 100644 --- a/tests/test_morphology_registry.py +++ b/tests/test_morphology_registry.py @@ -2,7 +2,7 @@ from __future__ import annotations import pytest -from language_packs import load_pack_entries +from packs import load_pack_entries from morphology.registry import MorphologyRegistry, load_morphology diff --git a/tests/test_oov_grounding_cache.py b/tests/test_oov_grounding_cache.py index 6be70626..f7545843 100644 --- a/tests/test_oov_grounding_cache.py +++ b/tests/test_oov_grounding_cache.py @@ -8,7 +8,7 @@ from algebra.versor import versor_condition from core.config import DEFAULT_CONFIG from ingest import gate from ingest.gate import inject -from language_packs.compiler import load_mounted_packs +from packs.compiler import load_mounted_packs from persona.motor import PersonaMotor from session.context import SessionContext diff --git a/tests/test_operator_calibration_replay.py b/tests/test_operator_calibration_replay.py index 32c964f4..084cd7d2 100644 --- a/tests/test_operator_calibration_replay.py +++ b/tests/test_operator_calibration_replay.py @@ -98,7 +98,7 @@ class TestCalibrationDoesNotMutateIdentityOrPacks: import hashlib from pathlib import Path - pack_dir = Path(__file__).resolve().parent.parent / "language_packs" / "data" + pack_dir = Path(__file__).resolve().parent.parent / "packs" / "data" before = {} for f in sorted(pack_dir.rglob("*.jsonl")): before[str(f)] = hashlib.sha256(f.read_bytes()).hexdigest() diff --git a/tests/test_pack_glosses_content.py b/tests/test_pack_glosses_content.py index 1909be51..3a2908fe 100644 --- a/tests/test_pack_glosses_content.py +++ b/tests/test_pack_glosses_content.py @@ -26,7 +26,7 @@ from chat.pack_resolver import ( ) -_DATA = Path(__file__).resolve().parent.parent / "language_packs" / "data" +_DATA = Path(__file__).resolve().parent.parent / "packs" / "data" def _packs_with_glosses() -> list[str]: diff --git a/tests/test_pack_resolver_glosses.py b/tests/test_pack_resolver_glosses.py index f04713da..4022cc72 100644 --- a/tests/test_pack_resolver_glosses.py +++ b/tests/test_pack_resolver_glosses.py @@ -28,14 +28,14 @@ from chat.pack_resolver import ( ) -_PACK_ROOT = Path(__file__).resolve().parent.parent / "language_packs" / "data" +_PACK_ROOT = Path(__file__).resolve().parent.parent / "packs" / "data" @pytest.fixture def temp_pack(tmp_path): """Create a minimal lexicon-only pack on disk for fixture tests. - Builds the pack inside the real ``language_packs/data`` tree so the + Builds the pack inside the real ``packs/data`` tree so the resolver's hard-coded _PACK_ROOT finds it; tears down on exit. Tests using this fixture should clear the resolver cache. """ @@ -210,7 +210,7 @@ class TestDualChecksumManifest: """A pack that ships no glosses.jsonl and no glosses_checksum in its manifest must continue to load (back-compat invariant). We use en_minimal_v1 which deliberately ships no glosses.""" - from language_packs.compiler import load_pack + from packs.compiler import load_pack manifest, _ = load_pack("en_minimal_v1") assert manifest.glosses_checksum is None @@ -218,7 +218,7 @@ class TestDualChecksumManifest: """Packs that DO ship glosses (en_core_cognition_v1 et al. after Phase C) must carry a non-None glosses_checksum on the loaded manifest.""" - from language_packs.compiler import load_pack + from packs.compiler import load_pack manifest, _ = load_pack("en_core_cognition_v1") assert isinstance(manifest.glosses_checksum, str) assert len(manifest.glosses_checksum) == 64 @@ -251,7 +251,7 @@ class TestDualChecksumManifest: "oov_policy": "tagged_fallback", }) + "\n", encoding="utf-8") clear_resolver_cache() - from language_packs.compiler import load_pack, _load_pack_cached + from packs.compiler import load_pack, _load_pack_cached _load_pack_cached.cache_clear() with pytest.raises(ValueError, match="Glosses checksum mismatch"): load_pack(pack_id) @@ -281,7 +281,7 @@ class TestDualChecksumManifest: "oov_policy": "tagged_fallback", }) + "\n", encoding="utf-8") clear_resolver_cache() - from language_packs.compiler import load_pack, _load_pack_cached + from packs.compiler import load_pack, _load_pack_cached _load_pack_cached.cache_clear() manifest, _ = load_pack(pack_id) assert manifest.glosses_checksum == right_checksum diff --git a/tests/test_problem_frame_builder.py b/tests/test_problem_frame_builder.py index bb3f141c..76758693 100644 --- a/tests/test_problem_frame_builder.py +++ b/tests/test_problem_frame_builder.py @@ -4,7 +4,7 @@ from __future__ import annotations from fractions import Fraction from generate.problem_frame_builder import build_problem_frame -from language_packs.scalar_equivalence import extract_scalar_candidates, list_unsupported_surfaces +from packs.scalar_equivalence import extract_scalar_candidates, list_unsupported_surfaces def _frame_names(text: str) -> tuple[str, ...]: diff --git a/tests/test_problem_frame_skeleton.py b/tests/test_problem_frame_skeleton.py index f9ae0b4b..28cecb2b 100644 --- a/tests/test_problem_frame_skeleton.py +++ b/tests/test_problem_frame_skeleton.py @@ -14,7 +14,7 @@ from generate.kernel_facts import ( RelationRole, CandidateRelation, ) -from language_packs.scalar_equivalence import ScalarCandidate +from packs.scalar_equivalence import ScalarCandidate from generate.process_frames import frame_by_name diff --git a/tests/test_proof_properties.py b/tests/test_proof_properties.py index 1a623d47..8872c870 100644 --- a/tests/test_proof_properties.py +++ b/tests/test_proof_properties.py @@ -21,7 +21,7 @@ from field.operators import ( ConstraintCorrectionOperator, GraphDiffusionOperator, ) -from language_packs.compiler import load_pack +from packs.compiler import load_pack from scripts.run_pulse import _build_manifold, run_pulse diff --git a/tests/test_proposition.py b/tests/test_proposition.py index 5dc4282f..bcd9c2d9 100644 --- a/tests/test_proposition.py +++ b/tests/test_proposition.py @@ -3,7 +3,7 @@ from __future__ import annotations from algebra.cga import cga_inner from generate.proposition import FrameRegistry, Proposition, propose from ingest.gate import inject -from language_packs.compiler import load_mounted_packs +from packs.compiler import load_mounted_packs from vault.store import VaultStore diff --git a/tests/test_public_showcase.py b/tests/test_public_showcase.py index 5c5b1ccc..2171dc04 100644 --- a/tests/test_public_showcase.py +++ b/tests/test_public_showcase.py @@ -97,7 +97,7 @@ class TestPureCompositionGate: """ADR-0099 invariant: ``public_showcase_pure_composition``. Showcase imports must come from already-shipped packages - (``core/``, ``chat/``, ``generate/``, ``language_packs/``, + (``core/``, ``chat/``, ``generate/``, ``packs/``, ``teaching/``, ``evals/``) plus the stdlib. Any other import is a new mechanism and must be blocked. """ @@ -106,7 +106,7 @@ class TestPureCompositionGate: "core.", "chat.", "generate.", - "language_packs.", + "packs.", "teaching.", "evals.", ) diff --git a/tests/test_pulse_integration.py b/tests/test_pulse_integration.py index 8d3b798c..44244592 100644 --- a/tests/test_pulse_integration.py +++ b/tests/test_pulse_integration.py @@ -7,7 +7,7 @@ import numpy as np import pytest from scripts.run_pulse import run_pulse, _build_manifold, PulseResult -from language_packs.compiler import load_pack +from packs.compiler import load_pack from field.operators import ( ConstraintCorrectionOperator, GraphDiffusionOperator, diff --git a/tests/test_realizer_guard_runtime_seam.py b/tests/test_realizer_guard_runtime_seam.py index be55bae2..b6dcd653 100644 --- a/tests/test_realizer_guard_runtime_seam.py +++ b/tests/test_realizer_guard_runtime_seam.py @@ -142,7 +142,7 @@ def test_telemetry_guard_fields_empty_on_pre_c1_events(): # ---------- AST seam ---------- -_PRODUCTION_MODULE_ROOTS = ("chat", "generate", "packs", "core", "language_packs") +_PRODUCTION_MODULE_ROOTS = ("chat", "generate", "packs", "core", "packs") _GUARD_MODULE_NAME = "generate.realizer_guard" _ALLOWED_IMPORTERS = {"chat/runtime.py"} diff --git a/tests/test_refusal_taxonomy_lane.py b/tests/test_refusal_taxonomy_lane.py index 278708bd..1febef7f 100644 --- a/tests/test_refusal_taxonomy_lane.py +++ b/tests/test_refusal_taxonomy_lane.py @@ -323,7 +323,7 @@ def _tree_digest(root: Path) -> str: def test_lane_run_does_not_mutate_protected_trees(): teaching = _REPO_ROOT / "teaching" packs = _REPO_ROOT / "packs" - lp_data = _REPO_ROOT / "language_packs" / "data" + lp_data = _REPO_ROOT / "packs" / "data" before = ( _tree_digest(teaching), @@ -341,5 +341,5 @@ def test_lane_run_does_not_mutate_protected_trees(): ) assert before == after, ( "refusal-taxonomy lane must be read-only over teaching/, packs/, " - "and language_packs/data/" + "and packs/data/" ) diff --git a/tests/test_relations_pack_v1_extensions.py b/tests/test_relations_pack_v1_extensions.py index 60b3c5da..fcae8b08 100644 --- a/tests/test_relations_pack_v1_extensions.py +++ b/tests/test_relations_pack_v1_extensions.py @@ -16,7 +16,7 @@ from chat.teaching_grounding import TeachingCorpusSpec, _load_corpus PACK_ID = "en_core_relations_v1" -PACK_DIR = Path("language_packs/data") / PACK_ID +PACK_DIR = Path("packs/data") / PACK_ID LEXICON_PATH = PACK_DIR / "lexicon.jsonl" MANIFEST_PATH = PACK_DIR / "manifest.json" CHAINS_PATH = Path("teaching/relations_chains/relations_chains_v1.jsonl") diff --git a/tests/test_repository_hygiene.py b/tests/test_repository_hygiene.py index 34ff98a0..d8109d25 100644 --- a/tests/test_repository_hygiene.py +++ b/tests/test_repository_hygiene.py @@ -52,7 +52,7 @@ def test_intentional_topology_splits_have_local_readmes() -> None: "core_ingest", "demos", "ingest", - "language_packs", + "packs", "notes", "packs", "workbench", diff --git a/tests/test_unknown_token_ingest.py b/tests/test_unknown_token_ingest.py index 90cf2782..43017ba7 100644 --- a/tests/test_unknown_token_ingest.py +++ b/tests/test_unknown_token_ingest.py @@ -5,7 +5,7 @@ import numpy as np from algebra.backend import cga_inner from algebra.versor import unitize_versor, versor_condition from ingest.gate import inject -from language_packs.compiler import load_mounted_packs +from packs.compiler import load_mounted_packs from session.context import SessionContext diff --git a/tests/test_workbench_api.py b/tests/test_workbench_api.py index ec30767b..7265958b 100644 --- a/tests/test_workbench_api.py +++ b/tests/test_workbench_api.py @@ -283,7 +283,7 @@ def test_full_w026_route_table_preserves_teaching_and_pack_bytes() -> None: guarded = { "teaching": repo_root / "teaching", "packs": repo_root / "packs", - "language_packs/data": repo_root / "language_packs" / "data", + "packs/data": repo_root / "packs" / "data", } before = {name: _snapshot(path) for name, path in guarded.items()} engine_state = repo_root / "engine_state" diff --git a/tests/test_workbench_chat_turn.py b/tests/test_workbench_chat_turn.py index 9163717f..18df6e67 100644 --- a/tests/test_workbench_chat_turn.py +++ b/tests/test_workbench_chat_turn.py @@ -202,7 +202,7 @@ def test_chat_turn_preserves_teaching_and_pack_bytes(api: WorkbenchApi) -> None: guarded = { "teaching": repo_root / "teaching", "packs": repo_root / "packs", - "language_packs/data": repo_root / "language_packs" / "data", + "packs/data": repo_root / "packs" / "data", } before = {name: _snapshot(path) for name, path in guarded.items()} engine_state = repo_root / "engine_state" diff --git a/tests/test_workbench_journal.py b/tests/test_workbench_journal.py index db69db9a..fbcaa17f 100644 --- a/tests/test_workbench_journal.py +++ b/tests/test_workbench_journal.py @@ -287,7 +287,7 @@ def test_journal_does_not_write_teaching_pack_or_engine_state_roots( guarded = { "teaching": repo_root / "teaching", "packs": repo_root / "packs", - "language_packs/data": repo_root / "language_packs" / "data", + "packs/data": repo_root / "packs" / "data", "engine_state": repo_root / "engine_state", } before = {name: _snapshot(path) for name, path in guarded.items()} diff --git a/tests/test_workbench_logos.py b/tests/test_workbench_logos.py index 1350a9a9..bf5bccd2 100644 --- a/tests/test_workbench_logos.py +++ b/tests/test_workbench_logos.py @@ -12,7 +12,7 @@ from workbench.schemas import LogosMorphologyLinkIssue, SafetyVerdict, to_data REPO_ROOT = Path(__file__).resolve().parent.parent -DATA_ROOT = REPO_ROOT / "language_packs" / "data" +DATA_ROOT = REPO_ROOT / "packs" / "data" LOGOS_PACK_IDS = [ "grc_logos_cognition_v1", "grc_logos_micro_v1", @@ -22,7 +22,7 @@ LOGOS_PACK_IDS = [ def _copy_language_pack_root(tmp_path: Path) -> Path: - root = tmp_path / "language_packs_data" + root = tmp_path / "packs_data" shutil.copytree(DATA_ROOT, root) return root diff --git a/tests/test_workbench_r2_read_substrate.py b/tests/test_workbench_r2_read_substrate.py index 77c19040..5d645605 100644 --- a/tests/test_workbench_r2_read_substrate.py +++ b/tests/test_workbench_r2_read_substrate.py @@ -378,7 +378,7 @@ def test_r2_read_routes_do_not_mutate_guarded_roots() -> None: guarded = { "teaching": repo_root / "teaching", "packs": repo_root / "packs", - "language_packs/data": repo_root / "language_packs" / "data", + "packs/data": repo_root / "packs" / "data", "engine_state": repo_root / "engine_state", } before = {name: _snapshot(path) for name, path in guarded.items()} diff --git a/tests/workbench_test_helper.py b/tests/workbench_test_helper.py index c05a16b7..369af0a8 100644 --- a/tests/workbench_test_helper.py +++ b/tests/workbench_test_helper.py @@ -15,7 +15,7 @@ from workbench.api import WorkbenchApi from workbench import readers REPO_ROOT = Path(__file__).resolve().parents[1] -PACK_ROOT = REPO_ROOT / "language_packs" / "data" / "en_core_math_v1" +PACK_ROOT = REPO_ROOT / "packs" / "data" / "en_core_math_v1" def setup_isolated_workbench(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> WorkbenchApi: # 1. Copy en_core_math_v1 to tmp_path diff --git a/vocab/manifold.py b/vocab/manifold.py index 0e0ce359..e00dd4dd 100644 --- a/vocab/manifold.py +++ b/vocab/manifold.py @@ -35,7 +35,7 @@ from algebra.versor import versor_unit_residual from core.epistemic_state import EpistemicState, coerce_epistemic_state from core.physics.energy import EnergyProfile from core.physics.valence import ValenceBundle -from language_packs.schema import MorphologyEntry +from packs.schema import MorphologyEntry _MANIFOLD_RESIDUAL_TOLERANCE = 1e-5 diff --git a/workbench/logos.py b/workbench/logos.py index e79a9a45..b0bea087 100644 --- a/workbench/logos.py +++ b/workbench/logos.py @@ -13,7 +13,7 @@ import re from pathlib import Path from typing import Any -from language_packs.schema import AlignmentEdge, LexicalEntry, MorphologyEntry +from packs.schema import AlignmentEdge, LexicalEntry, MorphologyEntry from workbench.schemas import ( LogosAlignmentRow, LogosAlignmentTargetIssue, @@ -29,7 +29,7 @@ from workbench.schemas import ( ) REPO_ROOT = Path(__file__).resolve().parents[1] -LANGUAGE_PACK_ROOT = REPO_ROOT / "language_packs" / "data" +LANGUAGE_PACK_ROOT = REPO_ROOT / "packs" / "data" READ_CHUNK_BYTES = 64 * 1024 SAFE_LOGOS_PACK_ID_RE = re.compile(r"^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$") @@ -347,7 +347,7 @@ def _read_jsonl_objects(path: Path) -> list[dict[str, Any]]: def _load_lexicon(pack_dir: Path) -> list[LexicalEntry]: - from language_packs.compiler import _parse_entry + from packs.compiler import _parse_entry return [ _parse_entry(payload) @@ -506,7 +506,7 @@ def _checksum_status( if not errors and root == LANGUAGE_PACK_ROOT.resolve(): try: - from language_packs.compiler import load_pack + from packs.compiler import load_pack load_pack(pack_id) except ValueError as exc: @@ -515,6 +515,6 @@ def _checksum_status( def _domain_contract_status(pack_id: str, root: Path) -> dict[str, Any]: - from language_packs.domain_contract import validate_domain_contract_pack + from packs.domain_contract import validate_domain_contract_pack return validate_domain_contract_pack(pack_id, data_root=root).as_dict() diff --git a/workbench/readers.py b/workbench/readers.py index 2d151175..2a75ce0c 100644 --- a/workbench/readers.py +++ b/workbench/readers.py @@ -83,7 +83,7 @@ ALLOWED_ARTIFACT_ROOTS = ( ) MATH_PROPOSALS_JSONL = REPO_ROOT / "teaching" / "math_proposals" / "proposals.jsonl" -LANGUAGE_PACK_ROOT = REPO_ROOT / "language_packs" / "data" +LANGUAGE_PACK_ROOT = REPO_ROOT / "packs" / "data" RUNTIME_PACK_ROOT = REPO_ROOT / "packs" WORKBENCH_TELEMETRY_ROOT = REPO_ROOT / "workbench_data" DEMOS_ROOT = REPO_ROOT / "demos"