Skip to content

Commit 3ea55d0

Browse files
docs+ci: mirror hypatia#378 TS carve-out extension (linguist + /deps/ + /vscode/) (#238)
## Summary Mirrors hypatia#378 across the three standards enforcement files so the hypatia rule, governance-reusable CI gate, and prose policy stay in lockstep on the 9-class TS carve-out canon. ## Changes - **\`.claude/CLAUDE.md\`** TypeScript Exemptions table — adds 3 rows (linguist fork inline, \`**/deps/**\` vendored Mix dirs, \`**/vscode/**\` editor-host extensions blocked on AS-bindings). - **\`LANGUAGE-POLICY.adoc\`** TypeScript banned-row prose — class count 5 → 9 with rationale for each new class. - **\`language-policy.yml\`** grep-chain — adds \`linguist/\`, \`/deps/\`, \`/vscode/\` to the carve-out grep -v chain. ## Why Inventory pass 2026-05-28 surfaced three asymmetries between the hypatia rule's path_allow_prefixes (post hypatia#375) and the standards enforcement files: 5 estate repos with \`vscode/extension.ts\` would be policy-gate violations until VSCode-extension API bindings ship; \`linguist/\` ships \`samples/TypeScript/*.ts\` as ML training data; \`tma-mark2/deps/phoenix_live_view/\` is vendored Phoenix LiveView TS. ## Test plan - [x] hypatia#378 contains the rule-side change and tests - [x] grep-chain extended consistently - [x] prose class count synced - [ ] CI green 🤖 Generated with [Claude Code](https://claude.com/claude-code)
1 parent 18f0ed2 commit 3ea55d0

3 files changed

Lines changed: 25 additions & 8 deletions

File tree

.claude/CLAUDE.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,9 @@ Existing pre-2026-04-30 `.ts`/`.tsx` outside these carve-outs is grandfathered w
139139
| `avow-protocol/telegram-bot/avow-telegram-bot/**` | PERMANENT | Telegraf / node-telegram-bot-api are the canonical TS-native libraries for the Bot API; no AffineScript binding planned. | AffineScript Telegram-bot bindings (no scheduled issue). |
140140
| `**/vite.config.ts`, `**/vitest.config.ts`, `**/tsup.config.ts`, `**/tsconfig.json` | tooling | Build orchestration, not application code. | When AffineScript ships native equivalents. |
141141
| `affinescript-deno-test/**`, `affinescript-cli/**` | bootstrap shim | TS/JS shims used to bootstrap the AffineScript test runner / CLI. | When AffineScript self-hosts these. |
142-
| `rescript/**`, `servers/**`, `repos-monorepo/**` | upstream fork | Not estate-authored — vendored upstream code (ReScript compiler, third-party MCP servers, mass aggregator). | Never — upstream fork. |
142+
| `rescript/**`, `servers/**`, `repos-monorepo/**`, `linguist/**` | upstream fork | Not estate-authored — vendored upstream code (ReScript compiler, third-party MCP servers, mass aggregator, GitHub linguist with `samples/TypeScript/*.ts` as ML training fixtures). | Never — upstream fork. |
143143
| `hyperpolymath-archive/**` | archived | GitHub-archived repos cannot accept PRs; TS is dormant. | Never — archived. |
144+
| `**/deps/**` | vendored package-manager dep | Elixir Mix vendored-dep directory (also adopted by other tools). Exemplar: `tma-mark2/deps/phoenix_live_view/assets/js/phoenix_live_view/*.ts` ships Phoenix LiveView's authored TS. | Never — vendored upstream. |
145+
| `**/vscode/**` (covers `editors/vscode/`, `extensions/vscode/`, `clients/vscode/`) | editor-host extension | VSCode extension entry points target the `vscode` extension-host API. Five estate repos (`universal-language-server-plugin`, `reposystem`, `proof-burrower`, `phronesis`, `bofj-kitt`) have a single `vscode/extension.ts`. | When AffineScript ships the VSCode-extension API binding (top-50 roadmap, unshipped). |
144146

145147
Adding to this list requires explicit user approval and an unblock condition (except the structural classes above, which are estate-wide policy). The detection rule and its `path_allow_prefixes` field are the single source of truth; this table mirrors that for human readability.

rhodium-standard-repositories/.github/workflows/language-policy.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,10 @@ jobs:
5252
# avow-protocol/telegram-bot/avow-telegram-bot/ Telegraf PERMANENT exemption
5353
# *.config.ts / vite.config.ts / vitest.config.ts / tsup.config.ts tooling
5454
# affinescript-deno-test/ + affinescript-cli/ bootstrap shims
55-
# rescript/ + servers/ + repos-monorepo/ upstream forks
55+
# rescript/ + servers/ + repos-monorepo/ + linguist/ upstream forks
5656
# hyperpolymath-archive/ archived repos
57+
# **/deps/ Mix-style vendored package-manager deps
58+
# **/vscode/ VSCode extension entry points (blocked on AS bindings)
5759
NEW_TS=$(git diff --name-only --diff-filter=A HEAD~1 2>/dev/null \
5860
| grep -E '\.tsx?$' \
5961
| grep -vE '\.d\.ts$' \
@@ -62,7 +64,9 @@ jobs:
6264
| grep -vE '(^|/)(vite|vitest|tsup)\.config\.ts$' \
6365
| grep -vE '\.config\.ts$' \
6466
| grep -vE '^(affinescript-deno-test|affinescript-cli)/' \
65-
| grep -vE '^(rescript|servers|repos-monorepo|hyperpolymath-archive)/' \
67+
| grep -vE '^(rescript|servers|repos-monorepo|linguist|hyperpolymath-archive)/' \
68+
| grep -vE '/deps/' \
69+
| grep -vE '/vscode/' \
6670
|| true)
6771
if [ -n "$NEW_TS" ]; then
6872
echo "❌ New TypeScript files detected (banned 2026-04-30). Use AffineScript instead."

rhodium-standard-repositories/spec/LANGUAGE-POLICY.adoc

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ NOTE: For full rationale and migration guides, see the link:{source-repo}[CCCP r
129129
(see project tracker
130130
`project_estate_ts_to_affinescript_2026_05_28.md`). Detection is
131131
the hypatia rule `cicd_rules/typescript_detected` (matches `*.ts`)
132-
with `path_allow_prefixes` covering five carve-out classes:
132+
with `path_allow_prefixes` covering nine carve-out classes:
133133
(1) `*.d.ts` declaration files (FFI/library type definitions —
134134
these are headers, not implementation); (2) `*/bindings/deno/`,
135135
`*/bindings/typescript/`, `*/bindings/ts/` interop targets where
@@ -140,10 +140,21 @@ NOTE: For full rationale and migration guides, see the link:{source-repo}[CCCP r
140140
binding planned (PERMANENT exemption); (4) tooling configs
141141
(`vite.config.ts`, `vitest.config.ts`, `tsup.config.ts`,
142142
`tsconfig.json`) — these are build orchestration, not application
143-
code; (5) upstream forks not estate-authored (`rescript/`,
144-
`servers/`, `repos-monorepo/`) and `hyperpolymath-archive/**`
145-
(archived repos with dormant TS). Unsound gradual typing is the
146-
underlying technical objection; AffineScript provides affine/linear
143+
code; (5) bootstrap shims (`affinescript-deno-test/`, `affinescript-cli/`)
144+
— TS/JS that bootstraps the AS toolchain itself;
145+
(6) upstream forks not estate-authored (`rescript/` ReScript
146+
compiler, `servers/` third-party MCP servers, `repos-monorepo/`
147+
mass aggregator, `linguist/` GitHub language classifier whose
148+
`samples/TypeScript/*.ts` are ML training fixtures);
149+
(7) `hyperpolymath-archive/**` archived repos with dormant TS;
150+
(8) `**/deps/**` Elixir Mix vendored package-manager directory
151+
(exemplar: `tma-mark2/deps/phoenix_live_view/assets/js/phoenix_live_view/*.ts`
152+
ships Phoenix LiveView's authored TS, vendored as a hex-mix dep);
153+
(9) `**/vscode/**` editor-host extensions (covers `editors/vscode/`,
154+
`extensions/vscode/`, `clients/vscode/`) — five estate repos have
155+
a `vscode/extension.ts` blocked on AffineScript's VSCode-extension
156+
API binding (top-50 roadmap, unshipped). Unsound gradual typing is
157+
the underlying technical objection; AffineScript provides affine/linear
147158
types plus typed-wasm output.
148159

149160
| *Node.js*

0 commit comments

Comments
 (0)