Skip to content

fix(ci): unblock antipattern + delete duplicated TS check#47

Merged
hyperpolymath merged 1 commit into
mainfrom
fix/ci-antipattern-and-language-policy
May 11, 2026
Merged

fix(ci): unblock antipattern + delete duplicated TS check#47
hyperpolymath merged 1 commit into
mainfrom
fix/ci-antipattern-and-language-policy

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

@hyperpolymath hyperpolymath commented May 11, 2026

Summary

Two related CI fixes — both unblocking workflows that have been red on main for weeks.

1. .github/workflows/rsr-antipattern.yml — heredoc syntax bug

The "Check for TypeScript" step had two PYEOF tokens in succession but only one opening python3 << 'PYEOF', leaving the second Python block dangling as bash commands. Bash saw BUILTIN_GLOBS = [...] as a command and exited 127. Every commit to main since the check was added has hit this. Same bug was in hyperpolymath/my-lang (see hyperpolymath/my-lang#13).

The first Python block already does the full TypeScript exemption check honouring the universal allowlist and the parsed .claude/CLAUDE.md table. The duplicated second block is removed.

2. .github/workflows/language-policy.yml — duplicate TS check with no allowlist

The "Check for TypeScript files" step did a blunt find . -name "*.ts" filter with no allowlist beyond node_modules and *.d.ts. False-positived on legitimate bridge files like lol/test/vitest.config.ts, which lives under the **/test/** universal-allowlist pattern that rsr-antipattern.yml honours.

Two checks for the same banned-language family is also a single-source-of-truth violation. This PR removes the duplicate from language-policy.yml; rsr-antipattern.yml remains the canonical TypeScript-detection check. All other language-policy.yml steps (ReScript, Go, Python, V-lang, ATS2, Java/Kotlin, Swift, Flutter/Dart, Makefiles, package.json runtime deps) stay — they remain the single source of truth for those languages.

What this PR fixes vs. what stays red

Fixed by this PR:

  • antipattern-check no longer exits 127 on the heredoc syntax bug. It now runs to completion.
  • Check for Banned Languages / Check for TypeScript files no longer false-positives on lol/test/vitest.config.ts.

Surfaces real pre-existing migration debt (out of scope for this PR):

  • antipattern-check / Check for ReScript flags ~30 real .res files under rhodium-standard-repositories/satellites/{consent-aware-http,cccp/.../7-tentacles}/. These were previously hidden behind the heredoc crash — the check never reached this step before. The fix here unblocks the workflow's ability to surface them; the actual migration is its own multi-PR effort.
  • Check for Banned Languages / Check for ReScript files (in language-policy.yml) also flags the same .res files. Same observation.
  • Hypatia Neurosymbolic Analysis (Dogfooding)hypatia-cli.sh scan . exits 1 with no diagnostic across multiple repos. Filed at hyperpolymath/hypatia#213.

So this PR doesn't turn the standards CI fully green — that would need the ReScript migration and the Hypatia scanner fix. But it does:

  1. Unblock the antipattern check's ability to run.
  2. Eliminate a false-positive that was masking real signal.
  3. Halve the spurious red-X load on every PR.

Why now

Both bugs surfaced while merging the affinescript#64 port work in #46. Pre-existing — unrelated to that port — but kept its merge state at BLOCKED until force-merged with --admin. Fixing now so future port PRs have less friction.

Test plan

  • CI on this PR shows antipattern-check running to completion (not exit 127).
  • Check for Banned Languages / Check for TypeScript files step passes (no spurious vitest.config.ts hit).
  • Verified by sight: the only remaining failures on this PR are pre-existing — ReScript migration debt and the Hypatia scanner bug — not introduced or worsened here.

🤖 Generated with Claude Code

…ource

Two related fixes for CI checks that have been red on main for weeks
(precursor to merging #46 — both unrelated to that port but blocking
its clean merge).

1. .github/workflows/rsr-antipattern.yml — the "Check for TypeScript"
   step had two PYEOF tokens in succession but only one opening
   `python3 << 'PYEOF'`, leaving the second Python block dangling as
   bash commands. Bash interpreted `BUILTIN_GLOBS = [...]` as a
   command and exited 127. The first Python block already does the
   full TypeScript exemption check (universal allowlist + parsed
   .claude/CLAUDE.md table), so the duplicated second block is
   removed. No behaviour change beyond the workflow running to
   completion.

2. .github/workflows/language-policy.yml — the "Check for TypeScript
   files" step duplicated the rsr-antipattern check but with no
   allowlist beyond node_modules + *.d.ts, false-positiving on
   legitimate bridge files (e.g. lol/test/vitest.config.ts which
   lives under the *vscode*-or-tests/ universal allowlist that
   rsr-antipattern honours). The duplicate step is removed; the
   other language checks (ReScript, Go, Python, V-lang, ATS2,
   Java/Kotlin, Swift, Flutter/Dart, Makefiles, package.json runtime
   deps) all stay — they remain the single source of truth for those
   languages.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@chatgpt-codex-connector
Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

@hyperpolymath hyperpolymath merged commit 29cb6b8 into main May 11, 2026
16 of 19 checks passed
@hyperpolymath hyperpolymath deleted the fix/ci-antipattern-and-language-policy branch May 11, 2026 08:20
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