Skip to content

docs(007): STOP force climb — morph65 fair 1.0 ceiling - #99

Merged
scrimshawlife-ctrl merged 130 commits into
mainfrom
cursor/morph67-sot-flip-docs-41af
Sep 24, 2026
Merged

scrimshawlife-ctrl merged 130 commits into
mainfrom
cursor/morph67-sot-flip-docs-41af

Conversation

@scrimshawlife-ctrl

@scrimshawlife-ctrl scrimshawlife-ctrl commented Sep 21, 2026 •

Copy link
Copy Markdown
Owner

val-settle kept 4 OBSERVED; fair n stuck 164 because force keys leave val; Jev stop_force_climb.

@scrimshawlife-ctrl scrimshawlife-ctrl changed the title docs(007): morph65 residual label + morph67 SoT-flip inflight docs(007): morph67 REJECT SoT-flip; morph68 residual-gold inflight Sep 21, 2026
@scrimshawlife-ctrl scrimshawlife-ctrl changed the title docs(007): HOLD — morph77 val-split authorize card ready docs(007): STOP force climb — morph65 fair 1.0 ceiling Sep 23, 2026
@scrimshawlife-ctrl

Copy link
Copy Markdown
Owner Author

soft_ceiling ARMED (operator authorize gate soft_ceiling)

  • Force-fair still primary when <1.0; at 1.0 promote on candidate broad OBSERVED > PRIOR morph65 on live SoT + E2 (do not cancel solely for fair 1.0).
  • Authorize pin historical: 0.889763779527559 n=254. Live prior post-morph77 settle pincheck: 0.88671875 n=256.
  • Spark wired: GATE_SOFT_CEILING.json, eval_broad_observed.py, run_broad_eval.sh, gate_soft_ceiling_decide.py, finish_soft_ceiling.py.
  • morph78: HOLD fresh acquire (empty gold from Jev defer). Not force-only ceiling burn.
  • Receipts: 20260923-authorize-gate-soft-ceiling.md, gate-soft-ceiling-20260923/.

@scrimshawlife-ctrl

Copy link
Copy Markdown
Owner Author

continue under soft_ceiling → morph78 fresh acquire HOLD empty gold

  • Acquired 37 val atoms (METHOD morph43 AUTHORIZE=37).
  • Jev qualify: defer_quality=35 · already_variant=2 · force_expand_safe=0.
  • Empty-next: land_hold_empty (0.51); revisit morph77 leftovers → no card ≥0.40 NEW.
  • No settle / no force expand / no train.
  • Await authorize morph78 / authorize val-settle with named phrases, or new acquire direction.
  • Receipt: 20260923-morph78-fresh-acquire-hold-empty.md

@scrimshawlife-ctrl

Copy link
Copy Markdown
Owner Author

continue → live broad residual reprobe → still HOLD empty gold

  • Live morph65 broad OBSERVED 0.88671875 n=256 (confirms soft_ceiling prior).
  • Residuals 29; METHOD AUTHORIZE=20 / ABSTAIN=9.
  • Jev qualify: defer=18 · already_variant=1 · force_expand_safe=0.
  • Next: land_hold_empty 0.86 — idle until named authorize morph78 / authorize val-settle.
  • Receipt: 20260923-morph65-broad-reprobe-hold-empty.md

@scrimshawlife-ctrl

Copy link
Copy Markdown
Owner Author

authorize val-settle → CANCELLED_EMPTY_GOLD

HOLD cards (morph78 acquire + live residual reprobe) have authorize_card_phrases=[]. Jev cancel_empty_gold 0.96 — no invent OBSERVED, no settle, no force expand, no morph78 train.

Force tip still morph77 232/273. soft_ceiling remains ARMED.

Need authorize that lists named phrases, or a new acquire clearing force_expand_safe.

Receipt: 20260923-authorize-val-settle-cancelled-empty-gold.md

@scrimshawlife-ctrl

Copy link
Copy Markdown
Owner Author

PR triage — handle (no merge without your yes)

PR CI Mergeable Recommendation
#100 pytrends evidence validate green (3.10/3.11/3.12) clean Recommend merge after operator live check: python3 scripts/hyperlex.py analyze "rizz" --route trends (and offline HYPERLEX_OFFLINE=1 … --route trends). Skill-track only; independent of Hyperlexical name_gate.
#99 Spec 007 tip (this PR) validate was red (ImportError: apply_unbind_force_train) unstable Stay draft. Force-train API restored on tip (unbind_recipe + tests) + draft product plan landed. Re-check CI after tip push. Merge only on explicit authorize.
#95 HYPERLEX-Q1 validate green clean but base stale vs main Stay draft. Rebase onto current main. Remains UNQUALIFIED / pairwise BLOCKED — spec-only.

Hyperlexical product plan (draft): specs/007-hyperlexical-model/HYPERLEXICAL-PRODUCT-PLAN.md

Hard locks unchanged: name_gate=false, no Hub, no invented OBSERVED, upsample freeze 11+, no SECOND_SLOT=4, soft_ceiling ARMED, HOLD empty gold until named phrases.

@scrimshawlife-ctrl

Copy link
Copy Markdown
Owner Author

CI follow-up: force-train ImportError fixed (c165c74). Second tip gap: loop.py had dropped training_routing.route_rows + reviewed_occurrences refuse-before-write (broke adapter/routing validate). Restored in 27e803f. Re-check validate on latest head. Still draft — no merge without authorize.

@scrimshawlife-ctrl

Copy link
Copy Markdown
Owner Author

CI root cause: tip-only tests/shadow/test_hyperlexical_init_expand_vocab.py did bare import torch at collection; validate matrix installs pytest+jsonschema only → collection ERROR exit 2.

Fix: torch = pytest.importorskip("torch") in 3d28c91. Local full suite was already green with torch present; CI should collect/skip that module now.

Still draft — merge only on authorize after validate green.

@scrimshawlife-ctrl
scrimshawlife-ctrl marked this pull request as ready for review September 24, 2026 00:25
@scrimshawlife-ctrl
scrimshawlife-ctrl merged commit ce9605f into main Sep 24, 2026
5 checks passed
@scrimshawlife-ctrl

Copy link
Copy Markdown
Owner Author

merged (operator authorize)

Squash merge ce9605f → main. soft_ceiling ARMED · morph65 BEST · product plan on main. Follow-up: hygiene + name_gate/named-phrases plan.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3d28c91b7f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".



def _cpu_module_state(module) -> dict:
return {k: v.detach().cpu().contiguous() for k, v in module.state_dict().items()}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Clone CPU tensors before retaining the best checkpoint

On CPU-only training runs, .cpu() and .contiguous() return the existing storage when the tensor is already contiguous on the CPU, so these detached values still alias the live parameters. Subsequent optimizer steps therefore mutate best_state, and the final promotion writes later/final head weights as model.safetensors while the receipt claims they came from the best epoch. Clone the tensors when constructing the retained snapshot; collect_encoder_trainable() needs the same treatment for CPU encoder parameters.

Useful? React with 👍 / 👎.

tok = AutoTokenizer.from_pretrained(str(TRUNK), local_files_only=True)
enc = AutoModel.from_pretrained(str(TRUNK), local_files_only=True)
filler_state, encoder_tensors, heads_blob = _weight_parts(weight_path, torch)
apply_encoder_trainable(enc, encoder_tensors)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Fail broad evaluation when encoder weights do not load

When a checkpoint contains encoder tensors whose keys do not match the selected trunk, apply_encoder_trainable() reports present > 0 and loaded == 0 but silently leaves the base encoder unchanged; this return value is discarded here. The resulting broad score is then attributed to the candidate and can drive the soft-ceiling promotion decision using the wrong model. Check the result and fail closed, as run_unbind_exact() already does for the same condition.

Useful? React with 👍 / 👎.

Comment on lines +78 to +79
weight_path = root / "model.safetensors"
assert weight_path.is_file(), weight_path

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Accept the checkpoint format produced by the fallback saver

When safetensors is unavailable or save_file() raises, the repository's save_heads() deliberately produces only heads.pt, and both warm loading and _weight_parts() support that artifact. This script nevertheless hardcodes model.safetensors and aborts at the assertion, so broad evaluation and the soft-ceiling gate cannot run against a valid fallback training output. Resolve either supported filename before calling _weight_parts().

Useful? React with 👍 / 👎.

git config user.name "Daniel Meyer"
git config user.email "scrimshawlife@gmail.com"
git add scripts/shadow/hyperlexical/export.py tests/shadow/test_hyperlexical_export.py
git commit -m "fix(007): reject type_slot-tagged wiki scaffolding chrome"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Skip the empty restoration commit

For the push that adds .restore/TRIGGER in this commit, and for every manual dispatch at this revision, the decoded export and test payloads are byte-for-byte identical to the checked-in files (including the configured SHA-256 values), so git add stages nothing. This unguarded git commit consequently exits with status 1 under set -e and the workflow fails before git push; Git exposes --allow-empty specifically as an opt-in rather than the default (git-commit documentation). Guard the commit with a staged-diff check or avoid triggering the restoration after its output is already committed.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant