Make versor construction fail closed instead of synthesizing hash-derived fallback rotors.
- remove pseudo-random construction fallback from unitize_versor
- add signed residual helper for +1 field states vs ±1 manifold entries
- validate vocab manifold entries with full residuals
- document antipodal transition rotor failure contract
- add focused invariant tests for versor closure and manifold validation
Add geometry-backed ArticulationPlan and realize(), wire articulation into ChatRuntime and trace output, expose proposition relation_norm, and add articulation/runtime/CLI tests.
Add RuntimeConfig with English default output policy, wire output language through runtime/frame selection/generation/CLI, preserve language metadata in mounted manifolds, and add runtime/CLI policy tests.
* Make core CLI help robust and intuitive
* Package runtime support modules for core CLI
* Add CLI help and doctor tests
* Fix CLI trace help and pack listing
* Export language pack listing helper
* Bootstrap repo root for console runtime imports
* Align trace formatter with Proposition schema
* Cover real trace payload formatting
compile_entries_to_manifold now returns a 2-tuple; the test that calls
it directly must unpack [0] to get the VocabManifold before calling
.get_versor().
- Guard _triliteral_root() rotor to Hebrew-script roots only; Greek/other
scripts now use the root: rotor alone (0.17) — no spurious uppercase
Unicode blade collision from the romanization fallback path
- test_structured_morphology_improves_same_root_hebrew_resonance: replace
tag_only baseline (now empty since legacy tags stripped) with no_morphology
baseline (domain+pos+lemma+surface only), which is the honest comparison
for what structured morphology contributes post-migration
algebra/rotor.py and persona/motor.py were calling normalize_to_versor()
which is the gate-only injection primitive. Both are construction-time
sites (building rotors and motors from raw arrays), so the correct call
is unitize_versor().
Also tightens TestINV02 to scan for normalize_to_versor violations only —
unitize_versor has its own legitimate call sites and is not under the
same single-site restriction. Adds a new TestINV02b that verifies
unitize_versor is NOT called inside propagation, generation, or vault
recall paths.
Fixes: INV-02 architectural invariant test failure.