core/packs
Shay ae38412e93 fix(packs/register): remove bare '.' closings + ratify gate refuses them
The widened 100-pack tour surfaced four packs whose closings bucket
included a bare '.' entry: assertive_v1, blunt_v1, dry_v1, and
mathematical_v1. Seeded variation selects from buckets uniformly, so
roughly 1/N of turns would emit a '..'-style surface artefact
(e.g. 'Truth is what is true..') when '.' was selected and appended
to a surface CORE's deterministic realizer already terminated with
'.'.

This commit:
  * Strips the bare '.' entry from the four affected packs' closings.
    The remaining entries (e.g. ' — qed.', ' — that's it.', '') all
    carry their own leading separator, so concatenation produces a
    clean surface.
  * Re-runs scripts/ratify_register_packs.py to re-seal each pack's
    mastery_report.json with a fresh pack_source_sha256 and
    self_seal_sha256 — these companion files are part of the diff
    because pack content changed.
  * Adds _validate_discourse_markers_shape() to
    scripts/ratify_register_packs.py as defense in depth. The new
    R4-tier gate refuses any closing entry whose first character is
    bare sentence-final punctuation ('.', '!', '?', ';', ':') or an
    alphanumeric — both classes would produce concatenation artefacts.
    Ellipsis ('...', '…') is explicitly exempt as a legitimate
    stylistic ending.

Verified:
  * core eval cognition byte-identical (the eval runs unregistered)
  * tests/test_cognition_eval_register_matrix.py: 801 passed in 5:23
    (100 registers × 8 projection invariants + meta-test), confirming
    the closing fix did not perturb ADR-0072 trace_hash invariance
    or any per-case projection.
  * Hand-verification across {assertive,blunt,dry,mathematical}_v1
    × 4 prompts = 16 surfaces: 0 remaining double-period artefacts.
  * Re-running ratify against a re-introduced bad closing produces
    SystemExit with the new gate's diagnostic message.

mathematical_v1 now reads beautifully under "What is light?":
  "Lemma:  Light is visible medium that reveals truth. — qed."
2026-05-21 06:57:43 -07:00
..
anchor_lens feat(packs): round-4 — he_chesed_v1, he_shalom_v1, he_tzedek_v1 + lossy EN-collapse alignment edges (#54) 2026-05-20 07:26:54 -07:00
common Implement core physics and pack validation 2026-05-14 12:35:19 -07:00
el Implement core physics and pack validation 2026-05-14 12:35:19 -07:00
en Implement core physics and pack validation 2026-05-14 12:35:19 -07:00
ethics feat(packs): expansion round 2 — ethics ×3, anchor-lens ×3, relations-v3, register ×2 (#48) 2026-05-20 07:18:35 -07:00
grc Implement core physics and pack validation 2026-05-14 12:35:19 -07:00
he Implement core physics and pack validation 2026-05-14 12:35:19 -07:00
identity feat(surface): ADR-0031 — score-decomposition surface (per-axis hedges) 2026-05-17 20:16:22 -07:00
primitives test(adr-0084): integration test pins substrate gate against ratified content (#68) 2026-05-20 15:35:37 -07:00
register fix(packs/register): remove bare '.' closings + ratify gate refuses them 2026-05-21 06:57:43 -07:00
rhetorical_style feat(adr-0087): rhetorical-style pack substrate (loader + default_unstyled_v1) (#74) 2026-05-20 16:19:36 -07:00
safety feat(safety): ADR-0032 — SafetyCheck structural surface 2026-05-17 20:25:22 -07:00