Skip to content

feat(rules): :nodejs_detected — add /bindings/rescript/ carve-out (post #275 closeout cleanup)#412

Merged
hyperpolymath merged 1 commit into
mainfrom
cicd/nodejs-bindings-rescript-carveout
May 31, 2026
Merged

feat(rules): :nodejs_detected — add /bindings/rescript/ carve-out (post #275 closeout cleanup)#412
hyperpolymath merged 1 commit into
mainfrom
cicd/nodejs-bindings-rescript-carveout

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

Surfaced during the hyperpolymath/standards#275 STEP 7 closeout estate-wide hypatia scan: proven-servers/bindings/rescript/package-lock.json was the single uncarved hit across 20 estate-wide package-lock.json files.

The rescript variant is host-required for the rescript-to-js compile chain (same pattern as JS/TS consumer exports, just produced from .res sources) and is symmetric to the existing /bindings/javascript/ and /bindings/typescript/ carve-out class (5c).

Changes

lib/rules/cicd_rules.ex — carve-out class 5c extended:

Before After
/bindings/javascript/ /bindings/javascript/
/bindings/typescript/ /bindings/typescript/
/bindings/rescript/

Comment block updated to reflect the rescript variant + reference the standards#275 STEP 7 surfacing context.

test/rules/cicd_rules_rescript_npm_js_test.exs — 1 new test case in the nodejs_detected rule describe block asserting that lockfiles under any of the three sibling consumer-export bindings paths are exempt.

Why this closes the loop

The standards#253 closeout PR (hyperpolymath/standards#325) merged 2026-05-31T07:11Z, declaring the npm → Deno migration "substantially complete" with "zero :nodejs_detected flags outside carve-outs". The estate-wide scan during that closeout's STEP 7 audit (hyperpolymath/standards#275) surfaced one uncarved hit. This PR makes the closeout declaration exactly true (was 19/20 prior).

Test plan

  • CI: existing nodejs_detected suite passes
  • New test: exempts */bindings/{javascript,typescript,rescript}/ consumer exports passes (already syntactically validated via Code.string_to_quoted!)
  • Hypatia self-scan: no false-positive flagging on proven-servers/bindings/rescript/

Refs hyperpolymath/standards#253 (umbrella, CLOSED 2026-05-31)
Refs hyperpolymath/standards#275 (STEP 7, CLOSED 2026-05-31)
Refs #405 (predecessor — first batch of class-5c carve-outs added vscode-, tree-sitter-, Lake, Office, javascript/typescript bindings)

🤖 Generated with Claude Code

…rallel to /bindings/{javascript,typescript}/)

Surfaced during standards#275 STEP 7 closeout estate-wide hypatia scan:
proven-servers/bindings/rescript/package-lock.json was the single
uncarved hit across 20 estate-wide package-lock.json files. The
rescript variant is host-required for the rescript-to-js compile chain
(same pattern as JS/TS consumer exports, just produced from .res
sources) and is symmetric to the existing /bindings/javascript/ and
/bindings/typescript/ carve-out class (5c).

## Carve-out class 5c updated

Old:
- `/bindings/javascript/`
- `/bindings/typescript/`

New:
- `/bindings/javascript/`
- `/bindings/typescript/`
- `/bindings/rescript/`

Comment block updated to reflect the rescript variant + reference
the standards#275 STEP 7 surfacing context.

## Test coverage

Adds 1 new test case `"exempts */bindings/{javascript,typescript,rescript}/ consumer exports"` to `cicd_rules_rescript_npm_js_test.exs` `nodejs_detected rule` describe block. Asserts that lockfiles under any of the three sibling consumer-export bindings paths are exempt.

After this lands, the standards#253 closeout (PR #325 merged 2026-05-31) declaration "zero `:nodejs_detected` flags outside carve-outs" becomes exactly true estate-wide (was 19/20 prior).

Refs standards#253 (umbrella npm → Deno campaign, closed 2026-05-31)
Refs standards#275 (STEP 7 workspace finalisation, closed 2026-05-31)
Refs hypatia#405 (predecessor — first batch of class-5c carve-outs)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath hyperpolymath enabled auto-merge (squash) May 31, 2026 07:21
@hyperpolymath hyperpolymath merged commit d21e6fe into main May 31, 2026
1 of 31 checks passed
@hyperpolymath hyperpolymath deleted the cicd/nodejs-bindings-rescript-carveout branch May 31, 2026 07:29
hyperpolymath added a commit to hyperpolymath/standards that referenced this pull request May 31, 2026
…t (post #275 closeout cleanup) (#328)

## Summary

Surfaced during the standards#275 STEP 7 closeout **estate-wide hypatia
scan**: `proven-servers/bindings/rescript/package-lock.json` was the
single uncarved hit across 20 estate-wide `package-lock.json` files.

[hypatia#412](hyperpolymath/hypatia#412) extends
the `:nodejs_detected` rule's class 5c
(`/bindings/{javascript,typescript}/`) to also cover
`/bindings/rescript/`. This PR **mirrors that to the
LANGUAGE-POLICY.adoc Node.js narrative row**, matching the docs-vs-rule
parity pattern from hypatia#405 + standards#320.

## Change

`rhodium-standard-repositories/spec/LANGUAGE-POLICY.adoc` Node.js
banned-language row:

| Before | After |
|---|---|
| "nine carve-out classes (six original + three added during the
migration via hypatia#405)" | "nine carve-out classes (six original +
three added during the migration via hypatia#405 + one added
post-closeout via hypatia#412 for `/bindings/rescript/` symmetry)" |
| Class (5): `**/bindings/{javascript,typescript}/**` | Class (5):
`**/bindings/{javascript,typescript,rescript}/**` with rationale "the
`rescript` variant is host-required for the rescript-to-js compile
chain" |

## Why post-closeout

The standards#253 closeout PR (#325) merged 2026-05-31T07:11Z. The
campaign is officially complete. This PR makes the closeout declaration
"zero `:nodejs_detected` flags outside carve-outs" **exactly true** (was
19/20 prior) without re-opening #253 or #275.

Pairs with hyperpolymath/hypatia#412 (rule update + test). Both should
land together to maintain docs↔rule parity.

## Test plan

- [ ] CI green (text-only change)
- [ ] Cross-link to hypatia#412 PR description visible in this PR
comments
- [ ] Hypatia self-scan unchanged (rule is in hypatia repo, not
standards)

Refs #253 (umbrella, CLOSED 2026-05-31)
Refs #275 (STEP 7, CLOSED 2026-05-31)
Refs #320 (predecessor mirror PR pattern for hypatia#405)
Refs hyperpolymath/hypatia#412 (the rule update this mirrors)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant