Lane 4: Registry Consolidation (language_packs to packs)
This commit is contained in:
parent
2a17d5b6f3
commit
f6c1f01a13
382 changed files with 520 additions and 518 deletions
4
.github/copilot-instructions.md
vendored
4
.github/copilot-instructions.md
vendored
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -17,9 +17,9 @@ from __future__ import annotations
|
|||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from language_packs.schema import AlignmentEdge
|
||||
from packs.schema import AlignmentEdge
|
||||
|
||||
_DATA_DIR = Path(__file__).parent.parent / "language_packs" / "data"
|
||||
_DATA_DIR = Path(__file__).parent.parent / "packs" / "data"
|
||||
|
||||
|
||||
class AlignmentGraph:
|
||||
|
|
@ -74,7 +74,7 @@ def load_alignment(
|
|||
"""
|
||||
Load AlignmentEdge records from <data_root>/<pack_id>/alignment.jsonl.
|
||||
|
||||
``data_root`` defaults to the committed ``language_packs/data`` tree; pass
|
||||
``data_root`` defaults to the committed ``packs/data`` tree; pass
|
||||
an alternate root (e.g. a test-fixture copy) to read packs from elsewhere
|
||||
without forking the parser.
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ _ANCHOR_LENS_SUBSTRATE_PACK_IDS: dict[str, tuple[str, ...]] = {
|
|||
|
||||
_PACK_LEXICON_PATH = (
|
||||
Path(__file__).resolve().parent.parent
|
||||
/ "language_packs"
|
||||
/ "packs"
|
||||
/ "data"
|
||||
/ PACK_ID
|
||||
/ "lexicon.jsonl"
|
||||
|
|
@ -76,7 +76,7 @@ _PACK_LEXICON_PATH = (
|
|||
# lemmas — only lens-engagement reads from here.
|
||||
_COLLAPSE_ANCHORS_LEXICON_PATH = (
|
||||
Path(__file__).resolve().parent.parent
|
||||
/ "language_packs"
|
||||
/ "packs"
|
||||
/ "data"
|
||||
/ "en_collapse_anchors_v1"
|
||||
/ "lexicon.jsonl"
|
||||
|
|
@ -130,7 +130,7 @@ def _frame_gloss(lemma: str, pos: str, gloss: str) -> str:
|
|||
* (unknown) -> "{Lemma}: {gloss}." (back-compat fallback)
|
||||
|
||||
The glosses are authored to match these frames exactly (see
|
||||
the subagent briefs and ``language_packs/data/<pack>/glosses.jsonl``).
|
||||
the subagent briefs and ``packs/data/<pack>/glosses.jsonl``).
|
||||
Capitalization is applied only to the framed surface, never to
|
||||
the lemma in the lexicon (which stays lowercase by convention).
|
||||
"""
|
||||
|
|
@ -253,7 +253,7 @@ def _substrate_lexicon_by_entry_id(pack_id: str) -> dict[str, tuple[str, ...]]:
|
|||
"""
|
||||
lexicon_path = (
|
||||
Path(__file__).resolve().parent.parent
|
||||
/ "language_packs"
|
||||
/ "packs"
|
||||
/ "data"
|
||||
/ pack_id
|
||||
/ "lexicon.jsonl"
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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:")
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -248,7 +248,7 @@ def cmd_check(
|
|||
"field",
|
||||
"generate",
|
||||
"ingest",
|
||||
"language_packs",
|
||||
"packs",
|
||||
"morphology",
|
||||
"persona",
|
||||
"sensorium",
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -662,7 +662,7 @@ domain.
|
|||
|
||||
#### Domain Pack Contract v1 (ADR-0091)
|
||||
|
||||
A pack manifest at `language_packs/data/<pack_id>/manifest.json`
|
||||
A pack manifest at `packs/data/<pack_id>/manifest.json`
|
||||
satisfies the contract iff all nine predicates hold:
|
||||
|
||||
1. **lemma_coverage** — declared lemmas resolve in `lexicon.jsonl`.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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**) —
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ checksum = hashlib.sha256(Path(lexicon_path).read_bytes()).hexdigest()
|
|||
`grc_logos_cognition_v1/manifest.json` and
|
||||
`he_core_cognition_v1/manifest.json` are updated with the new
|
||||
checksums of their post-enrichment lexicon.jsonl files.
|
||||
`python -m language_packs verify <pack_id>` is the canonical gate.
|
||||
`python -m packs verify <pack_id>` is the canonical gate.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -136,7 +136,7 @@ runtime change.
|
|||
|
||||
L1.1 touches user-influenceable content (pack files) but the gate
|
||||
remains the same as for every other language pack: manifest
|
||||
checksum + `python -m language_packs verify`. The new entries are
|
||||
checksum + `python -m packs verify`. The new entries are
|
||||
authored by hand here, not ingested from an external source.
|
||||
|
||||
No dynamic imports, no filesystem traversal, no shell passthrough.
|
||||
|
|
@ -146,9 +146,9 @@ No dynamic imports, no filesystem traversal, no shell passthrough.
|
|||
## Verification
|
||||
|
||||
```
|
||||
python -m language_packs verify grc_logos_cognition_v1 → OK
|
||||
python -m language_packs verify he_core_cognition_v1 → OK
|
||||
python -m language_packs list → both packs listed,
|
||||
python -m packs verify grc_logos_cognition_v1 → OK
|
||||
python -m packs verify he_core_cognition_v1 → OK
|
||||
python -m packs list → both packs listed,
|
||||
entry counts 29 / 23
|
||||
python -m core.cli test --suite packs -q → green
|
||||
python -m core.cli eval cognition → public 100/100/91.7/100
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|---|---|---|---|
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -40,9 +40,9 @@ recall and determinism are the discriminators — see
|
|||
| Architecture | `generate/math_candidate_parser.py` | Candidate-emitting sentence parser (17 tests, ADR-0126 P2) |
|
||||
| Architecture | `generate/math_candidate_graph.py` | Branch enumeration + decision rule (22 tests, ADR-0126 P3) |
|
||||
| Architecture | `evals/gsm8k_math/runner.py::_score_one_candidate_graph` | Runner wiring (9 tests, ADR-0126 P4) |
|
||||
| Substrate | `language_packs/data/en_units_v1/` | 284 lemmas, 401 conversion edges, NIST/ISO provenance (Gemini, PR #164) |
|
||||
| Substrate | `language_packs/data/en_numerics_v1/` | 130 lemmas across cardinals/ordinals/fractions/multipliers/quantifiers/comparison-anchors/format-rules (Opus #2, PR #163) |
|
||||
| Loader | `language_packs/loader.py` re-exports | Single import path for both packs (ADR-0127/0128 deferred coordination) |
|
||||
| Substrate | `packs/data/en_units_v1/` | 284 lemmas, 401 conversion edges, NIST/ISO provenance (Gemini, PR #164) |
|
||||
| Substrate | `packs/data/en_numerics_v1/` | 130 lemmas across cardinals/ordinals/fractions/multipliers/quantifiers/comparison-anchors/format-rules (Opus #2, PR #163) |
|
||||
| Loader | `packs/loader.py` re-exports | Single import path for both packs (ADR-0127/0128 deferred coordination) |
|
||||
| Integration | `generate/math_candidate_parser.py::_canonicalize_unit` | Pack-aware unit canonicalization — handles irregular plurals (feet, children, etc.) via pack lookup |
|
||||
| Integration | `generate/math_candidate_parser.py::extract_initial_candidates` | Widened to `<Entity> has N <unit> [of <substance>]` + `There are N <unit> [in <place>]` shapes |
|
||||
| Integration | `generate/math_candidate_parser.py::_is_indefinite_quantifier` | ADR-0128.4 quantifier-driven refusal (`some`, `many`, etc. → no candidate emitted; preserves wrong == 0) |
|
||||
|
|
|
|||
|
|
@ -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` |
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ probe lift; the load-bearing measurement for this iteration is the
|
|||
via existing unit-slot path; normalized at candidate build.
|
||||
3. **Hyphenated multi-word cardinal** — `twenty-five`, `ninety-nine`,
|
||||
etc. Resolved via
|
||||
`language_packs.numerics_loader.parse_compound_cardinal`.
|
||||
`packs.numerics_loader.parse_compound_cardinal`.
|
||||
|
||||
### Canonical money normalization (load-bearing)
|
||||
|
||||
|
|
@ -222,5 +222,5 @@ explicitly attributed, not buried inside a capability-axis PR).
|
|||
regex; widened regex stays bounded (closed alternation set,
|
||||
no backreferences, no catastrophic-backtracking-risk
|
||||
patterns). Pack loader paths consult
|
||||
`language_packs/data/<pack_id>/` only; no dynamic imports, no
|
||||
`packs/data/<pack_id>/` only; no dynamic imports, no
|
||||
filesystem traversal beyond pack root.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ Add three deliverables under `generate/binding_graph/`:
|
|||
1. **`units.py`** — pure unit algebra over an integer exponent vector
|
||||
on six base dimensions (`length, time, mass, money, count,
|
||||
temperature`). The closed vocabulary is loaded once from
|
||||
`language_packs/data/en_units_v1/lexicon.jsonl` at first call and
|
||||
`packs/data/en_units_v1/lexicon.jsonl` at first call and
|
||||
memoized. Composite unit ids of the form `"<num>_per_<denom>"`
|
||||
resolve recursively as `unit_quotient(parse_unit(num),
|
||||
parse_unit(denom))`. `parse_unit` refuses with
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -385,7 +385,7 @@ primitive.
|
|||
This ADR moves to **Accepted** when:
|
||||
|
||||
1. The seed registry above is materialized in
|
||||
`language_packs/data/en_core_math_v1/lexical_primitives.json` (or
|
||||
`packs/data/en_core_math_v1/lexical_primitives.json` (or
|
||||
the equivalent loader format settled in the Phase 1 PR), one
|
||||
record per entry, fields populated verbatim.
|
||||
2. The manifest checksum hashes the bytes written to disk (CLAUDE.md
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue