Skip to content

[campaign #239] Estate seam audit: stale .claude/CLAUDE.md language tables + carve-out candidate pattern #281

@hyperpolymath

Description

@hyperpolymath

Surfaced during STEP 2 candidate survey (2026-05-30, sibling of #241/#242). These are estate-policy seams, not blockers for any single PR — file as a follow-up sweep.

Stale .claude/CLAUDE.md language tables (3 repos)

The 2026-05-25 estate policy shift to AffineScript (and 2026-04-30 ReScript ban — see feedback_estate_lang_policy_2026_05_25 memory) is now reflected in canonical LANGUAGE-POLICY.adoc (standards#235) and the language-policy.yml workflow, but several per-repo CLAUDE.md files still cite the old policy:

  • phronesis .claude/CLAUDE.md — ALLOWED table lists ReScript as primary; BANNED table says "TypeScript → ReScript"
  • panll .claude/CLAUDE.md — ALLOWED lists ReScript; banned table says "TypeScript → ReScript"; "Critical Rules" includes "NEVER use TypeScript — ReScript only"
  • dotfiles .claude/CLAUDE.md — ALLOWED lists ReScript; BANNED table says "TypeScript → ReScript"

Risk: a Claude session in one of these repos reads the local CLAUDE.md first and writes ReScript code, in good faith, despite the estate-level ban. The detection workflow catches the violation at PR time, but it's wasted human + CI cycles.

Suggested fix: a single per-repo PR per offending CLAUDE.md, swapping ReScript→AffineScript in both ALLOWED and BANNED tables, citing standards#235. Low-risk, ~5-line diff per repo. Candidate for batch-fanout.

There may be more — a sweep:

```bash
grep -rln 'ReScript' /home/hyperpolymath/developer/repos/*/.claude/CLAUDE.md 2>/dev/null
```

would surface every offender.

Carve-out candidate: docs/campaigns/<date>/ pattern

panic-attack/docs/campaigns/2026-05-26/01-triage.ts is in the STEP-2 backlog but is structurally a one-shot already-executed historical artefact — the directory pattern docs/campaigns/<YYYY-MM-DD>/ signals "campaign script run on that date, archived". Re-executing it would be unusual; refactoring to AffineScript adds maintenance burden for an artefact whose only purpose was historical record.

Estate-wide check (similar patterns in other repos?):

```bash
find /home/hyperpolymath/developer/repos -path '/docs/campaigns/' -name '.ts' 2>/dev/null | head
find /home/hyperpolymath/developer/repos -path '
/docs/migrations/' -name '.ts' 2>/dev/null | head
```

Suggested: consider a class-10 carve-out in hypatia :typescript_detected for **/docs/{campaigns,migrations}/<date>/*.ts — historical campaign artefacts are PERMANENT carve-outs (rerun not expected). Pair with a hypatia#378-style extension PR if this pattern recurs.

Self-referential irony

standards/scripts/check-ts-allowlist.ts is the STEP-2 candidate that checks the TS allowlist for the estate. It is itself a TS script. Porting it to AffineScript would be tidy but not high-leverage — its consumers (CI) read its exit code only. Worth noting in step-2 prioritisation.

Cross-refs

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions