Skip to content
This repository was archived by the owner on Oct 10, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

## Unreleased

- **Trained inference (Spec 007):** `hyperlexical.infer --model-dir` runs a local
checkpoint (lazy torch, local trunk, fail-closed exit 2) and emits a
`MODEL_EMBEDDING` inference packet; only the approved pin carries
`hyperlex-structure-149m`. Default CLI stays the offline stub.

- **Card rename (Spec 007):** Hub card `hyperlex-structure-149m` for `seed-morph78`.
`name_gate.py` pins the approved checkpoint; `eval_unbind` sets `name_gate`
true only for a trunk-forward eval of that pin; eval schema field is boolean.
Training contract and HF dump writer unchanged (new checkpoints stay unnamed).

- **`name_gate` yes (`seed-morph78`):** Danny `flip name_gate` — pin may be called
**Hyperlexical** (amendment A6; receipt `specs/007-hyperlexical-model/receipts/20260924-name-gate-yes-morph78.md`). Card IDs, packet/schema
field, Hub, and T13 unchanged.
Expand Down
11 changes: 7 additions & 4 deletions NEXT_MOVES_007.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

- morph78 named phrases settled · force/hard **236/277** · soft_ceiling train complete.
- **PROMOTE_BEST** (ceiling_escape): broad **0.9883** > PRIOR morph65 **0.8867** n=256 + E2 PASS.
- Card rename: Hub card `hyperlex-structure-149m`; eval packets set `name_gate` true only for a trunk-forward eval of `seed-morph78`.
- Real inference: `hyperlexical.infer --model-dir ~/.hyperlex/models/BEST` → `MODEL_EMBEDDING` packet (`hyperlex-structure-149m`), verified on Spark.
- Danny **`flip name_gate`** → `seed-morph78` may be called **Hyperlexical** (receipt `specs/007-hyperlexical-model/receipts/20260924-name-gate-yes-morph78.md`).

## Gate
Expand All @@ -14,9 +16,10 @@ soft_ceiling **spent** for this climb (morph78 now PRIOR/BEST). Further climbs n

## Next (each a separate operator sentence)

1. Card rename: `hyperlex-encoder-*` identifiers → Hyperlexical / `hyperlex-structure-149m` (C31) and packet/schema `name_gate` field.
2. Hub upload — still not authorized.
3. Optional T13 (promote `scripts/shadow/hyperlexical/` into `src/hyperlex/`).
4. HOLD morph78; no new climb without a new card.
1. Hub upload — still not authorized (decide publish vs explicit local-only).
2. Optional T13 (promote `scripts/shadow/hyperlexical/` into `src/hyperlex/`).
3. HOLD morph78; no new climb without a new card.

Open findings (receipt `receipts/20260924-infer-model-morph78.md`): classify overconfident on val-settled phrases; trunk+heads = 150.55M vs A1 150M (trunk 149.0M).

Qwen stays stopped unless re-enabled.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Repo **Hyperlex** is the transitional monorepo shell. Do not use bare public **H
| **ne0l0gist** | Slang ingest tool (zeros spelling): Crawl4AI harvest, `ingest_tap`, export/settle — **operator-named 2026-09-24** |
| **Hyperlex** (repo) | Transitional monorepo shell. GitHub repo name, `~/.hyperlex` paths, `HYPERLEX_*` env vars, and the `hyperlexical` Python package stay as-is |

`name_gate` **true** for `seed-morph78` (Danny `flip name_gate`, 2026-09-24, amendment A6). Naming **ne0l0gist** was a separate sentence and did not flip it. Card/package IDs stay `hyperlex-encoder-*`; Hub and T13 not authorized.
`name_gate` **true** for `seed-morph78` (Danny `flip name_gate`, 2026-09-24, amendment A6). Naming **ne0l0gist** was a separate sentence and did not flip it. Hub card `hyperlex-structure-149m`; Hub and T13 not authorized.

## What ships / what does not

Expand Down
2 changes: 2 additions & 0 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ The skill remains the operator surface while the encoder stays SHADOW.
See [SPEC.md](SPEC.md) and [DESIGN.md](DESIGN.md) for the historical spine. Current operator snapshot: [STATUS.md](STATUS.md).

## Recent
- 2026-09-24: Real inference path — `infer --model-dir` on `seed-morph78` emits `MODEL_EMBEDDING` packets as `hyperlex-structure-149m` (Spark-verified).
- 2026-09-24: Card rename — Hub card `hyperlex-structure-149m`; eval packets set `name_gate` true only for trunk-forward eval of `seed-morph78`.
- 2026-09-24: Danny `flip name_gate` — `seed-morph78` named **Hyperlexical** (amendment A6). Card rename, Hub, T13 still separate.
- 2026-09-24: morph78 PROMOTE_BEST (soft_ceiling ceiling_escape; broad 0.9883 > 0.8867 n=256 + E2) after named-phrase settle. `name_gate` still false.
- 2026-09-24: Hygiene — `pyproject.toml` aligned to `VERSION` 0.4.0; ROADMAP E2 line matches trained PASS; name_gate / named-phrases plan drafted. `#100` + `#99` on main. soft_ceiling ARMED; morph65 held.
Expand Down
4 changes: 2 additions & 2 deletions STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**Version:** 0.4.0
**Observed:** 2026-09-24
**Posture:** Hermes skill = current operator surface. Spec 007 = model path (SHADOW). Spark BEST = `seed-morph78` (soft_ceiling PROMOTE_BEST 2026-09-24; broad **0.9883** n=256). Ingest product named **ne0l0gist** (as in repo). Naming lock: `docs/NAMING.md` + Notion Naming lock. **#101** merged to main. Org naming graft **#14** merged. morph78 settled `have fun staying poor` + `fr fr no cap`; force **236**/hard **277**. `name_gate` **true** for `seed-morph78` (Danny `flip name_gate`, 2026-09-24, amendment A6). Card/package IDs stay `hyperlex-encoder-*`; Hub and T13 not authorized.
**Posture:** Hermes skill = current operator surface. Spec 007 = model path (SHADOW). Spark BEST = `seed-morph78` (soft_ceiling PROMOTE_BEST 2026-09-24; broad **0.9883** n=256). Ingest product named **ne0l0gist** (as in repo). Naming lock: `docs/NAMING.md` + Notion Naming lock. **#101** merged to main. Org naming graft **#14** merged. morph78 settled `have fun staying poor` + `fr fr no cap`; force **236**/hard **277**. `name_gate` **true** for `seed-morph78` (Danny `flip name_gate`, 2026-09-24, amendment A6). Hub card `hyperlex-structure-149m`; Hub and T13 not authorized.
**Install:** `bash install.sh` → `~/.hermes/skills/hyperlex`
**Claude (optional):** `bash install.sh --claude` → `~/.claude/skills/hyperlex`
**Track:** Phases 0–4 complete · Phase 5.0–5.3 · Pages static run history · Spec 007 SHADOW encoder on main
Expand Down Expand Up @@ -54,7 +54,7 @@ Danny ~2500 candidate bar: **met**. Hermes **913** / “gap to 2500” is **supe
| Spark BEST | **`seed-morph78`** — PROMOTE_BEST via soft_ceiling ceiling_escape: broad OBSERVED **0.9883** > morph65 **0.8867** n=256; E2 PASS; force fair 1.0 n=164 (advisory). LAST=8. Upsample freeze **11+**. |
| E2 vs Spec 004 | Stub still FAIL (expected). **Trained trunk-forward E2 PASS** on morph19 (`unbind_exact=1.0`). Seed smoke ≠ T1. |
| Hub publish | **No** — skeleton in-repo; weights stay on Spark. |
| T1 name | **Hyperlexical** approved for `seed-morph78`. Card/package IDs still `hyperlex-encoder-*` until a separate card-rename change. |
| T1 name | **Hyperlexical** approved for `seed-morph78`. Hub card `hyperlex-structure-149m` (C31). Local train-out paths keep `hyperlex-encoder-modernbert-base-seed-*`. |
| Lineage families | **8** only. No ninth family. |
| Brier | `null` on every 007 packet. |
| Crawl | Crawl4AI **0.9.3** default. `--source firecrawl` aliases to `crawl4ai`. No paid Firecrawl without Danny yes. |
Expand Down
2 changes: 1 addition & 1 deletion docs/NAMING.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ This file is the **durable naming SoT** for agents and operators. Copy it; do no
| **ne0l0gist** | `ne` + `0` + `l` + `0` + `gist` (zeros, not letter O) | Public **slang ingest / harvest** product: Crawl4AI, `ingest_tap`, export/settle, civilian + live phrase harvest | **yes** (2026-09-24) |
| **Hyperlexical** | Hyperlexical | Spec 007 **model / train / eval / E2 / `name_gate`** product claim | **yes** (2026-09-24) — pin `seed-morph78` only |

`name_gate` is **true** for `seed-morph78` (amendment A6). Naming **ne0l0gist** was a separate sentence. Neither authorizes Hub, T13, or renaming card/package identifiers (`hyperlex-encoder-*`).
`name_gate` is **true** for `seed-morph78` (amendment A6). Naming **ne0l0gist** was a separate sentence. Neither authorizes Hub or T13. Hub card name: `hyperlex-structure-149m`. Local paths / `HYPERLEX_*` / package names are unchanged (no hard-cut).

## Do not

Expand Down
2 changes: 2 additions & 0 deletions docs/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ The skill remains the operator surface while the encoder stays SHADOW.
See [SPEC.md](SPEC.md) and [DESIGN.md](DESIGN.md) for the historical spine. Current operator snapshot: [STATUS.md](STATUS.md).

## Recent
- 2026-09-24: Real inference path — `infer --model-dir` on `seed-morph78` emits `MODEL_EMBEDDING` packets as `hyperlex-structure-149m` (Spark-verified).
- 2026-09-24: Card rename — Hub card `hyperlex-structure-149m`; eval packets set `name_gate` true only for trunk-forward eval of `seed-morph78`.
- 2026-09-24: Danny `flip name_gate` — `seed-morph78` named **Hyperlexical** (amendment A6). Card rename, Hub, T13 still separate.
- 2026-09-24: morph78 PROMOTE_BEST (soft_ceiling ceiling_escape; broad 0.9883 > 0.8867 n=256 + E2) after named-phrase settle. `name_gate` still false.
- 2026-09-24: Hygiene — `pyproject.toml` aligned to `VERSION` 0.4.0; ROADMAP E2 line matches trained PASS; name_gate / named-phrases plan drafted. `#100` + `#99` on main. soft_ceiling ARMED; morph65 held.
Expand Down
4 changes: 3 additions & 1 deletion docs/shadow-hyperlexical.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Specify is locked C1–C52 plus A5 milestones. Implement on `main` is the stub,
|------|---------|--------------|-------------|
| Skill | Hermes CLI + package | Hyperlex (the skill) | Shipping v0.4.0 |
| T0 | Base encoder + classify heads | `hyperlex-encoder-*` only | Specified. Not Hyperlexical. |
| T1 | Encoder + unbind heads; E2 vs Spec 004 | `hyperlex-structure-*` / Hyperlexical | **Earned** by `seed-morph78`: trained E2 PASS + `name_gate` yes (2026-09-24). Card rename pending. |
| T1 | Encoder + unbind heads; E2 vs Spec 004 | `hyperlex-structure-*` / Hyperlexical | **Earned** by `seed-morph78`: trained E2 PASS + `name_gate` yes (2026-09-24). Card `hyperlex-structure-149m`. |
| T2 | Separate generative LoRA | out of this cycle | Not an implement target |

`name_gate` is **true** for `seed-morph78` (Danny yes). E2 PASS alone ≠ name. Classify volume ready ≠ T1.
Expand Down Expand Up @@ -42,6 +42,8 @@ Danny ~2500 candidate bar: **met**. Hermes 913 / “gap to 2500” is **supersed

```bash
PYTHONPATH=scripts/shadow python3 -m hyperlexical.infer --text rizz --offline
# trained pin (Spark; needs torch + local trunk):
PYTHONPATH=scripts/shadow python3 -m hyperlexical.infer --text rizz --model-dir ~/.hyperlex/models/BEST
PYTHONPATH=scripts/shadow python3 -m hyperlexical.ingest_tap --dry-run
PYTHONPATH=scripts/shadow python3 -m hyperlexical.export
PYTHONPATH=scripts/shadow python3 -m hyperlexical.export --include-live
Expand Down
4 changes: 2 additions & 2 deletions docs/start/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ fails.

### Hyperlexical (name)
Public **model** product claim for Spec 007 (train / eval / E2 / `name_gate`).
Approved for pin `seed-morph78` (Danny `name_gate` yes, 2026-09-24). Card/package IDs
are still `hyperlex-encoder-*` until a separate rename. Do not call a stub, harvest dump,
Approved for pin `seed-morph78` (Danny `name_gate` yes, 2026-09-24). Hub card name
is `hyperlex-structure-149m`. Do not call a stub, harvest dump,
or seed smoke Hyperlexical-gated-true. Harvest / ingest is **ne0l0gist**.

### name_gate
Expand Down
4 changes: 2 additions & 2 deletions docs/status.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**Version:** 0.4.0
**Observed:** 2026-09-24
**Posture:** Hermes skill = current operator surface. Spec 007 = model path (SHADOW). Spark BEST = `seed-morph78` (soft_ceiling PROMOTE_BEST 2026-09-24; broad **0.9883** n=256). Ingest product named **ne0l0gist** (as in repo). Naming lock: `docs/NAMING.md` + Notion Naming lock. **#101** merged to main. Org naming graft **#14** merged. morph78 settled `have fun staying poor` + `fr fr no cap`; force **236**/hard **277**. `name_gate` **true** for `seed-morph78` (Danny `flip name_gate`, 2026-09-24, amendment A6). Card/package IDs stay `hyperlex-encoder-*`; Hub and T13 not authorized.
**Posture:** Hermes skill = current operator surface. Spec 007 = model path (SHADOW). Spark BEST = `seed-morph78` (soft_ceiling PROMOTE_BEST 2026-09-24; broad **0.9883** n=256). Ingest product named **ne0l0gist** (as in repo). Naming lock: `docs/NAMING.md` + Notion Naming lock. **#101** merged to main. Org naming graft **#14** merged. morph78 settled `have fun staying poor` + `fr fr no cap`; force **236**/hard **277**. `name_gate` **true** for `seed-morph78` (Danny `flip name_gate`, 2026-09-24, amendment A6). Hub card `hyperlex-structure-149m`; Hub and T13 not authorized.
**Install:** `bash install.sh` → `~/.hermes/skills/hyperlex`
**Claude (optional):** `bash install.sh --claude` → `~/.claude/skills/hyperlex`
**Track:** Phases 0–4 complete · Phase 5.0–5.3 · Pages static run history · Spec 007 SHADOW encoder on main
Expand Down Expand Up @@ -54,7 +54,7 @@ Danny ~2500 candidate bar: **met**. Hermes **913** / “gap to 2500” is **supe
| Spark BEST | **`seed-morph78`** — PROMOTE_BEST via soft_ceiling ceiling_escape: broad OBSERVED **0.9883** > morph65 **0.8867** n=256; E2 PASS; force fair 1.0 n=164 (advisory). LAST=8. Upsample freeze **11+**. |
| E2 vs Spec 004 | Stub still FAIL (expected). **Trained trunk-forward E2 PASS** on morph19 (`unbind_exact=1.0`). Seed smoke ≠ T1. |
| Hub publish | **No** — skeleton in-repo; weights stay on Spark. |
| T1 name | **Hyperlexical** approved for `seed-morph78`. Card/package IDs still `hyperlex-encoder-*` until a separate card-rename change. |
| T1 name | **Hyperlexical** approved for `seed-morph78`. Hub card `hyperlex-structure-149m` (C31). Local train-out paths keep `hyperlex-encoder-modernbert-base-seed-*`. |
| Lineage families | **8** only. No ninth family. |
| Brier | `null` on every 007 packet. |
| Crawl | Crawl4AI **0.9.3** default. `--source firecrawl` aliases to `crawl4ai`. No paid Firecrawl without Danny yes. |
Expand Down
8 changes: 5 additions & 3 deletions scripts/shadow/hyperlexical/eval_unbind.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

Stub/digest swap has no civilian filler lists, so unbind_token_f1 /
unbind_slot_f1 stay null. Trunk-forward scores the same aligned filler
lists as train val and fills those fields. name_gate stays false.
lists as train val and fills those fields. name_gate is true only for a
trunk-forward eval of an approved pin (``name_gate.APPROVED_PINS``, A6).
"""

from __future__ import annotations
Expand All @@ -15,6 +16,7 @@
import sys
from pathlib import Path

from .name_gate import name_gate_for
from .unbind_metrics import null_unbind_secondary

HEAD_NAMES = ("heads.json", "model.safetensors", "heads.pt")
Expand Down Expand Up @@ -294,14 +296,14 @@ def run_eval(model_dir: str | Path | None = None, trunk_forward: bool = False) -
"trunk_forward": True,
"trunk_dir": str(trunk),
"model_dir": str(directory),
"name_gate": False,
"name_gate": name_gate_for(directory),
"device": scored.get("device"),
"encoder_trainable_loaded": scored.get("encoder_trainable_loaded", 0),
"encoder_trainable_present": scored.get("encoder_trainable_present", 0),
"note": (
f"Trunk-forward unbind_exact + token/slot F1 from {weight} vs 004 "
"probe_swap_min. Stub/digest leaves F1 null (no civilian filler "
"lists). name_gate stays false. "
"lists). name_gate is true only for an approved pin (A6). "
+ scored.get(
"encoder_note",
"Encoder is the local trunk snapshot; heads from train out.",
Expand Down
31 changes: 25 additions & 6 deletions scripts/shadow/hyperlexical/infer.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""SHADOW CLI. Offline stub. No torch. No Hub."""
"""SHADOW CLI. Offline stub by default. ``--model-dir`` runs a local trained checkpoint. No Hub."""

from __future__ import annotations

Expand All @@ -17,15 +17,34 @@ def main(argv=None) -> int:
p.add_argument("--restricted", action="store_true")
p.add_argument("--role-scheme", default="positional", choices=("positional", "type_slot"))
p.add_argument("--out", default="")
p.add_argument("--model-dir", default="", help="local train-out dir (e.g. ~/.hyperlex/models/BEST); needs torch + trunk")
p.add_argument("--trunk-dir", default="", help="local ModernBERT-base snapshot (default HYPERLEX_TRUNK_DIR)")
args = p.parse_args(argv)
if os.environ.get("HYPERLEX_OFFLINE") == "0" and not args.offline:
print("abort: online infer is out of U1", file=sys.stderr)
return 2
packet = build_packet(
args.text,
restricted=args.restricted,
role_scheme=args.role_scheme,
)
if args.model_dir:
if args.role_scheme != "positional":
print("abort: trained infer supports role_scheme=positional only", file=sys.stderr)
return 2
from .infer_model import InferModelError, infer

try:
packet = infer(
args.text,
model_dir=args.model_dir,
trunk_dir=args.trunk_dir or None,
restricted=args.restricted,
)
except InferModelError as exc:
print(json.dumps({"abort": True, "error": str(exc), "brier": None}), file=sys.stderr)
return 2
else:
packet = build_packet(
args.text,
restricted=args.restricted,
role_scheme=args.role_scheme,
)
text = json.dumps(packet, indent=2, sort_keys=True)
if args.out:
with open(args.out, "w", encoding="utf-8") as fh:
Expand Down
Loading
Loading