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
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.mdlanguage 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 thelanguage-policy.ymlworkflow, but several per-repo CLAUDE.md files still cite the old policy:.claude/CLAUDE.md— ALLOWED table lists ReScript as primary; BANNED table says "TypeScript → ReScript".claude/CLAUDE.md— ALLOWED lists ReScript; banned table says "TypeScript → ReScript"; "Critical Rules" includes "NEVER use TypeScript — ReScript only".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>/patternpanic-attack/docs/campaigns/2026-05-26/01-triage.tsis in the STEP-2 backlog but is structurally a one-shot already-executed historical artefact — the directory patterndocs/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_detectedfor**/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.tsis 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