Workstream 1 third pack. Closes the temporal-vocabulary gap — prior
to this pack zero time/sequence/aspect terms existed in any mounted
English pack, so queries about *when*, *before*, *after*, *now*,
*future*, *past* all fell through to OOV.
Pack composition (28 entries, mixed POS — 12 ADV / 9 NOUN / 5 ADP /
1 SCONJ / 1 ADJ):
temporal.deictic.* (10 ADV) now today tomorrow yesterday soon
later recently eventually currently
formerly
temporal.relative.* (9 mix) before after during while until since
ago prior henceforth
temporal.noun.* (9 NOUN) moment period duration instant era
future past present time
The pack composer is POS-agnostic — surface composition uses the
ratified ``semantic_domains`` list rather than the POS tag. Mixed-POS
entries surface identically to noun/verb entries.
Files:
language_packs/data/en_core_temporal_v1/
lexicon.jsonl — 28 entries, SHA-256 checksum-sealed
manifest.json — operational_base / D0 / checksum-verified
chat/pack_resolver.py
Appended to DEFAULT_RESOLVABLE_PACK_IDS after attitude.
core/config.py
Added to RuntimeConfig.input_packs default mount.
tests/test_en_core_temporal_v1_pack.py
11 contract tests: checksum, POS-distribution invariant, primary-
domain namespace, no-collision regression gate against all 5 prior
packs, contiguous entry_ids, mounted-by-default, resolver-order
invariant, routing correctness, and prior-pack resolution unchanged.
Authoring:
Three parallel subagents — deictic / relative / nouns. Strict
exemplar + forbidden-lemma list against all 5 prior packs.
Verification:
Full lane: 2170 passed, 2 skipped, 0 failed (+11 new tests).
Cognition eval byte-identical on both splits.
Live composer probes confirm every temporal lemma surfaces
deterministically from en_core_temporal_v1.
83 lines
3.8 KiB
Python
83 lines
3.8 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class RuntimeConfig:
|
|
# ADR-0063 — ``en_core_relations_v1`` (kinship starter pack) joins the
|
|
# default mount once the cross-pack surface resolver lands. Pack
|
|
# composers in :mod:`chat.pack_grounding` now consult
|
|
# :mod:`chat.pack_resolver`, so kinship lemmas ground deterministically
|
|
# without a separate composer module.
|
|
input_packs: tuple[str, ...] = (
|
|
"en_minimal_v1",
|
|
"en_core_cognition_v1",
|
|
"en_core_meta_v1",
|
|
"en_core_attitude_v1",
|
|
"en_core_temporal_v1",
|
|
"en_core_relations_v1",
|
|
"en_core_relations_v2",
|
|
"he_logos_micro_v1",
|
|
"grc_logos_micro_v1",
|
|
)
|
|
output_language: str = "en"
|
|
frame_pack: str = "en"
|
|
max_tokens: int = 32
|
|
allow_cross_language_recall: bool = True
|
|
allow_cross_language_generation: bool = False
|
|
vault_reproject_interval: int = 20
|
|
use_salience: bool = True
|
|
salience_top_k: int = 16
|
|
inhibition_threshold: float = 0.3
|
|
inner_loop_admissibility: bool = False
|
|
admissibility_threshold: float = 0.0
|
|
# ADR-0026 / Phase 3 — margin-based admissibility. ``mode``
|
|
# selects between ADR-0024's per-candidate threshold check and
|
|
# the ranked-with-margin check. Default "threshold" preserves
|
|
# ADR-0024 acceptance evidence; opt-in "margin" replaces the
|
|
# static-threshold gate with a scale-invariant margin.
|
|
admissibility_mode: str = "threshold"
|
|
admissibility_margin: float = 0.4
|
|
# ADR-0027 — Identity pack id loaded at runtime startup. Empty string
|
|
# resolves to ``DEFAULT_IDENTITY_PACK``. CLI override on chat:
|
|
# ``core chat --identity <pack_id>``. See docs/identity_packs.md.
|
|
identity_pack: str = ""
|
|
# ADR-0033 — Ethics pack id loaded at runtime startup. Empty string
|
|
# resolves to ``DEFAULT_ETHICS_PACK``. See docs/ethics_packs.md.
|
|
ethics_pack: str = ""
|
|
# ADR-0046 / ADR-0047 — forward graph constraint. When True, the
|
|
# PropositionGraph built from the classified intent + articulation
|
|
# plan is converted into an AdmissibilityRegion BEFORE generate()
|
|
# runs (Pillar 1→2→3 coupling closes on the live path). Default
|
|
# False preserves existing behavior during the transition window —
|
|
# ADR-0024's honest-refusal exhaustion is the correct response when
|
|
# the constraint geometry and the walk candidate pool do not
|
|
# intersect, but operators must opt in to observing that behavior
|
|
# on their workloads. Enable to live the forward constraint;
|
|
# disable to retain the pre-ADR-0046 unconstrained walk.
|
|
forward_graph_constraint: bool = False
|
|
|
|
# ADR-0062 — composed teaching-grounded surface. When enabled,
|
|
# the teaching-grounded composer extends a single-chain surface
|
|
# with a follow-up chain whose subject equals the initial chain's
|
|
# object — producing surfaces like "light reveals truth, which
|
|
# grounds knowledge" instead of just "light reveals truth".
|
|
# Default False preserves all pre-ADR-0062 behaviour. Cycle-safe
|
|
# (won't follow if the next subject has been visited), bounded
|
|
# depth (max one follow-up chain in v1).
|
|
composed_surface: bool = False
|
|
|
|
# ADR-0066 / P3.2 — opt-in thread anaphora. When enabled, the
|
|
# runtime prepends a deterministic backreference to a recent
|
|
# grounded turn when the current turn's subject lemma matches
|
|
# one in the bounded session-thread context. Engages only on
|
|
# pack/teaching-tier turns (both prior and current); weaker
|
|
# tiers do not anchor. Default False preserves every pre-P3.2
|
|
# surface byte-identically.
|
|
thread_anaphora: bool = False
|
|
|
|
|
|
DEFAULT_IDENTITY_PACK: str = "default_general_v1"
|
|
DEFAULT_ETHICS_PACK: str = "default_general_ethics_v1"
|
|
DEFAULT_CONFIG = RuntimeConfig()
|