Skip to content

docs(claude-md): estate-wide ReScript→AffineScript CLAUDE.md flip — 100-repo survey + phased strategy #287

@hyperpolymath

Description

@hyperpolymath

Context

A 2026-05-30 estate-wide grep across ~/developer/repos/*/.claude/CLAUDE.md for the stale template row | TypeScript | ReScript | (the BANNED-replacement row that names ReScript as the AffineScript replacement, pre-2026-05-25 policy) returned 100 repos.

This is a documentation slice of the standards#252 ReScript→AffineScript code-migration tracker. The CLAUDE.md files are policy docs that should reflect target state, independent of how far the code migration has progressed in any given repo.

Inventory (100 repos)

Category Count Strategy
template-clone (0 .res files) 55 Safe batch flip — identical 6-line sed substitution
template-clone-with-stubs (1–4 .res files) 13 Quick spot-check, then flip
rescript-heavy (≥5 .res files) 32 Per-repo review — panll-style nuance required; many will need migration-trajectory wording or stay as-is

Survey TSV: ~/Documents/claude-md-survey-2026-05-30.tsv (will be saved on phase kickoff).

Lessons from initial sweep (developer-ecosystem#96/#97, phronesis#33, dotfiles#20, panll#60)

  1. panll/.claude/CLAUDE.md reverted by owner — the migration-trajectory note pattern wasn't wanted for that repo. Saved as feedback memory: ReScript-heavy repos where local reality dominates need owner judgment per repo, not a template flip.
  2. GitHub secondary rate limit — ~5 PR creates per 30 min triggers a block. 100 PRs is ~10 hours of throttled creation if done all-at-once.
  3. Standards-reusable interaction — flipping CLAUDE.md may surface latent anti-pattern violations elsewhere in the repo (cf. dev-eco#96 needing .hypatia-ignore for vendored emoji-name .res fixtures). Each batch run should be ready for these.

Recommended phased strategy

Phase 1 — 55 template-clones (safe-flip)

Identical 6-line substitution per file (already validated on dev-eco#96/#97):

```
ReScript | Primary application code | Compiles to JS, type-safe
AffineScript | Primary application code | Affine-typed, compiles to typed-wasm or Deno-ESM
Only where ReScript cannot → Only where AffineScript cannot
| TypeScript | ReScript | → | TypeScript | AffineScript |
Web UI (ReScript) → Web UI (AffineScript)
Convert existing TS to ReScript → Convert existing TS to AffineScript
ReScript for apps → AffineScript for apps
```

Execution: subagent fan-out, 5 PRs per 30-min window, ~5.5 hours total throttled. All single-file docs PRs, GPG-signed, auto-merge.

Phase 2 — 13 template-clone-with-stubs (probably-safe)

Same 6-line sed but with a per-repo git ls-files '*.res' spot-check first to confirm the .res files are either test fixtures or one-off stubs (not load-bearing source).

Phase 3 — 32 rescript-heavy (per-repo review)

These need owner-shaped wording (or skip-list inclusion). Examples from initial survey:

  • kaldor-iiot (49 .res), patallm-gallery (38), svalinn (32), preference-injector (30), ambientops (28), grim-repo (27)
  • repos-monorepo (12707 — almost certainly the vendored rescript-compiler counted; needs disambiguation before any action)

Default action: no edit until per-repo decision recorded here. Mirrors the panll precedent.

Phase 1 candidates list (55)

  • anvomidav
  • bebop-ffi
  • boinc-boinc
  • branch-newspaper
  • candy-crash
  • casket-ssg
  • cccp
  • checky-monkey
  • chimichanga
  • conative-gating
  • conflow
  • defiant
  • docudactyl
  • echidnabot
  • eclexia
  • explicit-trust-plane
  • feedback-o-tron
  • heterogenous-mobile-computing
  • http-capability-gateway
  • hybrid-automation-router
  • im-docs
  • januskey
  • laminar
  • megadog
  • modshells
  • neural-foundations
  • neurophone
  • nextgen-languages
  • oblibeny
  • palimpsest-plasma
  • php-aegis
  • polysafe-gitfixer
  • pow-the-game
  • project-wharf
  • proof-of-work
  • reasonably-good-token-vault
  • refugia
  • resource-record-fluctuator
  • robodog-ecm
  • robot-vacuum-cleaner
  • rpa-elysium
  • rrecord-verity
  • sanctify-php
  • scripts
  • seamstress
  • snapcreate
  • thejeffparadox
  • thunderbird-template-reloaded
  • tma-mark2
  • tree-navigator
  • universal-chat-extractor
  • universal-language-server-plugin
  • universal-project-manager
  • v3-templater
  • zerostep

Phase 2 candidates list (13)

  • affinescript-stdlib-pr (1 .res files)
  • anamnesis (4 .res files)
  • befunge93-vault-cracker (1 .res files)
  • blue-screen-of-app (2 .res files)
  • bofig (2 .res files)
  • bunsenite (3 .res files)
  • maa-framework (1 .res files)
  • palimpsest-license (1 .res files)
  • qubes-sdp (1 .res files)
  • safe-brute-force (1 .res files)
  • volumod (3 .res files)
  • voyage-enterprise-decision-system (4 .res files)
  • wokelang (2 .res files)

Phase 3 candidates list (32 — needs per-repo decision)

  • academic-workflow-suite (9 .res files)
  • accessibility-everywhere (14 .res files)
  • ambientops (28 .res files)
  • civic-connect (5 .res files)
  • coq-jr (7 .res files)
  • dicti0nary-attack (8 .res files)
  • dotmatrix-fileprinter (8 .res files)
  • double-track-browser (10 .res files)
  • empty-linter (16 .res files)
  • excel-economic-numbers-tool (14 .res files)
  • fireflag (7 .res files)
  • grim-repo (27 .res files)
  • julia-the-viper (5 .res files)
  • kaldor-iiot (49 .res files)
  • laniakea (7 .res files)
  • misinformation-defence-platform (13 .res files)
  • my-lang (9 .res files)
  • nafa-app (8 .res files)
  • network-ambulance (5 .res files)
  • patallm-gallery (38 .res files)
  • phantom-metal-taste (5 .res files)
  • polyglot-i18n (11 .res files)
  • poly-k8s-mcp (5 .res files)
  • poly-observability-mcp (6 .res files)
  • preference-injector (30 .res files)
  • repos-monorepo (12707 .res files)
  • social-media-polygraph (5 .res files)
  • supernorma (12 .res files)
  • svalinn (32 .res files)
  • ubicity (9 .res files)
  • valence-shell (6 .res files)
  • vcs-ircd (5 .res files)

Owner decision needed

Pick one:

  • (a) Approve Phase 1 fanout now → I throttle 55 single-purpose PRs over ~5.5 hours, batch under this issue, report per-wave.
  • (b) Approve Phase 1 + Phase 2 now (68 PRs over ~7 hours) → same with quick .res-content spot-checks for Phase 2.
  • (c) Park this — the immediate sweep (dotfiles, phronesis, dev-eco) is enough for now. Reopen when bandwidth allows.
  • (d) Different cut — e.g., "do the 10 most-active repos only" or "do Phase 1 minus forks".

For Phase 3 (rescript-heavy) I'll wait for explicit per-repo direction regardless.

Refs #252
Refs #239

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