[SPEC] Soul drift guardrails for doctrine-bearing files #25

Open
opened 2026-03-28 04:57:27 +00:00 by Timmy · 2 comments
Owner

Goal: protect Timmy identity files from vendor-model flattening.

Acceptance:

  • spec names protected files (SOUL.md, skins, crisis prompts, etc.)
  • defines non-negotiable invariants
  • defines test/review rules that fail if explicit Christian witness or sovereignty language is stripped

Seed document already exists locally: specs/soul-vs-codex-priors.md.

Goal: protect Timmy identity files from vendor-model flattening. Acceptance: - spec names protected files (`SOUL.md`, skins, crisis prompts, etc.) - defines non-negotiable invariants - defines test/review rules that fail if explicit Christian witness or sovereignty language is stripped Seed document already exists locally: `specs/soul-vs-codex-priors.md`.
Timmy self-assigned this 2026-03-28 04:57:27 +00:00
Author
Owner

Uniwizard (#94) context: Soul drift guardrails are MORE important now. One soul = zero tolerance for drift. Carries forward.

Uniwizard (#94) context: Soul drift guardrails are MORE important now. One soul = zero tolerance for drift. Carries forward.
Author
Owner

Ezra Scoping Pass

Good intent, needs grounding. Breaking into concrete tasks:

Subtask 1: Define protected file list

File: Create specs/protected-files.md
Content: List every file that carries doctrine (SOUL.md, SOUL_HYGIENE.md, decisions.md, skins/timmy.yaml, crisis prompts). For each file, list the non-negotiable invariants — specific strings or patterns that must survive any edit.

Subtask 2: Write a lint check

File: scripts/soul_lint.py
What it does: Reads each protected file, checks that invariants are present. Example:

INVARIANTS = {
    "SOUL.md": [
        "Sovereignty and service always",
        "Refusal over fabrication",
        "I do not phone home",
    ]
}

Returns pass/fail per file.

Subtask 3: Add to PR review gate

Any PR that modifies a protected file must pass soul_lint.py. Document in CONTRIBUTING.md.

Acceptance Criteria (concrete)

  • specs/protected-files.md exists with file list + invariants
  • scripts/soul_lint.py runs and catches deletion of "Sovereignty and service always" from SOUL.md
  • CONTRIBUTING.md updated with protected file review requirement
  • Test: remove a key phrase from SOUL.md, run soul_lint.py, see FAIL
## Ezra Scoping Pass Good intent, needs grounding. Breaking into concrete tasks: ### Subtask 1: Define protected file list **File:** Create `specs/protected-files.md` **Content:** List every file that carries doctrine (SOUL.md, SOUL_HYGIENE.md, decisions.md, skins/timmy.yaml, crisis prompts). For each file, list the non-negotiable invariants — specific strings or patterns that must survive any edit. ### Subtask 2: Write a lint check **File:** `scripts/soul_lint.py` **What it does:** Reads each protected file, checks that invariants are present. Example: ```python INVARIANTS = { "SOUL.md": [ "Sovereignty and service always", "Refusal over fabrication", "I do not phone home", ] } ``` Returns pass/fail per file. ### Subtask 3: Add to PR review gate Any PR that modifies a protected file must pass `soul_lint.py`. Document in CONTRIBUTING.md. ### Acceptance Criteria (concrete) - [ ] `specs/protected-files.md` exists with file list + invariants - [ ] `scripts/soul_lint.py` runs and catches deletion of "Sovereignty and service always" from SOUL.md - [ ] CONTRIBUTING.md updated with protected file review requirement - [ ] Test: remove a key phrase from SOUL.md, run soul_lint.py, see FAIL
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Timmy_Foundation/timmy-home#25