Skip to content

Commit 25f9e10

Browse files
hyperpolymathclaude
andcommitted
docs(npm-exemptions): mirror hypatia#405 vscode-* + tree-sitter-* carve-outs (standards#253)
Mirrors hypatia#405 (`:nodejs_detected` carve-out extension) into the two policy surfaces under standards: - `.claude/CLAUDE.md §npm Exemptions (Approved)` — adds 6 new exemption rows (vscode- substring, tree-sitter- substring, /.lake/, /office-addin/, /bindings/javascript/, /bindings/typescript/). - `rhodium-standard-repositories/.github/workflows/language-policy.yml` — adds parallel `grep -vE` filters to the NEW_NPM_LOCK block, updates carve-out comment from "6 classes" to "8 classes". Refs: hypatia#405. Closes the rule/policy gap surfaced during the standards#253 STEP 3 batch (root-level vscode-* and tree-sitter-* repos were flagged by the previous narrower `/vscode/` segment match). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent c9e9027 commit 25f9e10

2 files changed

Lines changed: 18 additions & 4 deletions

File tree

.claude/CLAUDE.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,16 @@ In-flight migration tracked under `hyperpolymath/standards#253` (172 manifests a
171171

172172
| Path / Pattern | Class | Rationale | Unblock condition |
173173
|---|---|---|---|
174-
| `**/vscode/**` | VSCode extension host-required | VSCode extension toolchain runs under Node; lockfile is contractually required by the host. | When AffineScript ships the VSCode-extension API binding. |
174+
| `**/vscode/**` | VSCode extension host-required (segment) | VSCode extension toolchain runs under Node; lockfile is contractually required by the host. | When AffineScript ships the VSCode-extension API binding. |
175+
| `vscode-` substring (`vscode-extension/`, `editors/vscode-007/`, `vscode-a2ml`, `vscode-k9`, …) | VSCode-* extension repos / subdirs | Same VSCode host-required toolchain rationale; different path-segment shape than `/vscode/`. | When AffineScript ships the VSCode-extension API binding. |
176+
| `tree-sitter-` substring (`tree-sitter-a2ml`, `tree-sitter-k9`, `editors/tree-sitter-ephapax`, `tree-sitter-affinescript/`, …) | tree-sitter grammar npm-publish target | Class C consumer artifact — tree-sitter grammars ship via npm with `node-gyp` native binding because every consumer (Atom/Neovim/VSCode TextMate) links the native addon. | Never — npm-publishable consumer artifact with native binding. |
175177
| `affinescript-deno-test/**`, `affinescript-cli/**` | bootstrap shim | Bootstrap the AffineScript toolchain itself. | When AffineScript self-hosts these. |
176178
| `rescript/**`, `servers/**`, `repos-monorepo/**`, `linguist/**` | upstream fork | Not estate-authored — vendored upstream code. | Never — upstream fork. |
177179
| `hyperpolymath-archive/**` | archived | Archived repos cannot accept PRs. | Never — archived. |
178180
| `**/deps/**`, `**/node_modules/**` | vendored package-manager dep | Vendored deps. | Never — vendored upstream. |
181+
| `**/.lake/**` | Lean4 vendored package | Lean4's package manager directory, parallel to `/deps/`. | Never — vendored. |
182+
| `**/office-addin/**` | Office.js add-in host-required | Office host loads `.js` from a Node-packaged manifest, parallel to VSCode extension carve-out. | When AffineScript ships an Office.js binding. |
183+
| `**/bindings/javascript/**`, `**/bindings/typescript/**` | consumer-facing estate export | Proven JS/TS bindings published to npm consumers, parallel to `/bindings/deno/` under `:typescript_detected`. | Never — consumer-facing bindings. |
179184
| `**/example/**`, `**/examples/**`, `**/test-fixtures/**`, `**/fixtures/**` | example/test fixture | Demonstrates an npm consumer (e.g., showing how a library is used from a Node project) without making the repo itself an npm consumer. | Never — fixture, not own toolchain. |
180185

181186
### JavaScript Exemptions (Approved)

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,20 +114,29 @@ jobs:
114114
115115
# Block new package-lock.json (npm banned 2026-05-25, replacement: Deno).
116116
# Carve-outs (parallel to hypatia cicd_rules/nodejs_detected
117-
# path_allow_prefixes — 6 classes):
118-
# **/vscode/ VSCode extension host-required toolchain
117+
# path_allow_prefixes — 8 classes):
118+
# **/vscode/ VSCode extension host-required toolchain (segment)
119+
# vscode- VSCode-* extension repos / subdirs (substring)
120+
# tree-sitter- tree-sitter grammar npm-publish targets (Class C)
119121
# affinescript-deno-test/ + affinescript-cli/ bootstrap shims
120122
# rescript/ + servers/ + repos-monorepo/ + linguist/ upstream forks
121123
# hyperpolymath-archive/ archived repos
122-
# **/deps/ + **/node_modules/ vendored package-manager deps
124+
# **/deps/ + **/node_modules/ + **/.lake/ + **/office-addin/
125+
# + **/bindings/{javascript,typescript}/ vendored / host-required /
126+
# consumer-facing exports
123127
# **/example/ + **/examples/ + **/test-fixtures/ + **/fixtures/
124128
NEW_NPM_LOCK=$(git diff --name-only --diff-filter=A HEAD~1 2>/dev/null \
125129
| grep -E '(^|/)package-lock\.json$' \
126130
| grep -vE '/vscode/' \
131+
| grep -vE 'vscode-' \
132+
| grep -vE 'tree-sitter-' \
127133
| grep -vE '^(affinescript-deno-test|affinescript-cli)/' \
128134
| grep -vE '^(rescript|servers|repos-monorepo|linguist|hyperpolymath-archive)/' \
129135
| grep -vE '/deps/' \
130136
| grep -vE '/node_modules/' \
137+
| grep -vE '/\.lake/' \
138+
| grep -vE '/office-addin/' \
139+
| grep -vE '/bindings/(javascript|typescript)/' \
131140
| grep -vE '/(example|examples|test-fixtures|fixtures)/' \
132141
|| true)
133142
if [ -n "$NEW_NPM_LOCK" ]; then

0 commit comments

Comments
 (0)