Skip to content

chore(governance): declare the banned-language migration backlog - #586

Merged
hyperpolymath merged 4 commits into
mainfrom
chore/banned-language-ledger
Aug 7, 2026
Merged

chore(governance): declare the banned-language migration backlog#586
hyperpolymath merged 4 commits into
mainfrom
chore/banned-language-ledger

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

The Language / package anti-pattern policy gate is failing on 3 file(s) in languages estate policy bans.

The gate is correct. These really are banned languages. But deleting the files would destroy working code without porting it, and porting is a project rather than a sweep — so this uses the mechanism the gate's own failure message names:

(declare an exemption via .hypatia-ignore or an inline # hypatia:ignore cicd_rules/banned_language_file pragma if intentional)

following the precedent already set in hyperpolymath/echidna.

Every path is listed individually, never a wildcard. A src/** entry would silently absorb new banned files added later, turning a migration ledger into a permanent blind spot. Listing each path means a newly added file still fails the gate — this ledger can only shrink as work is done, never quietly grow. It therefore doubles as the migration worklist.

Inventory taken 2026-08-06 across all 424 estate repositories: 13,206 banned-language files in 117 repos, though ~9,800 of those are vendored upstream copies (the ReScript toolchain, github/linguist) rather than estate code.

🤖 Generated with Claude Code

The "Language / package anti-pattern policy" gate is failing on 3
file(s) in banned languages (3 python).

The gate is CORRECT — these really are languages estate policy bans. But
deleting them would destroy working code without porting it, so this uses the
mechanism the gate's own failure message names:

    (declare an exemption via .hypatia-ignore ... if intentional)

Every path is listed individually rather than by wildcard. A `src/**` entry
would silently absorb NEW banned files added later, turning a migration ledger
into a permanent blind spot. Listing each path means a newly added file still
fails the gate: this ledger can only shrink as work is done.

It therefore doubles as the migration worklist.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
@gitar-bot

gitar-bot Bot commented Aug 6, 2026

Copy link
Copy Markdown

Note

Automatic reviews are paused because your trial's included automatic processing has been used for this period. Upgrade now, or comment "Gitar review" to run a review anytime.
Learn more

Code Review 🚫 Blocked 0 resolved / 1 findings

Declares the banned-language migration backlog via .hypatia-ignore, but the change is blocked because .hypatia-ignore is a documented anti-pattern that nothing reads.

🚨 Bug: .hypatia-ignore is a documented anti-pattern; nothing reads it

📄 .hypatia-ignore:1-15

docs/EXEMPTION-MECHANISMS.adoc (lines 81-87 and 113-118) explicitly states that .hypatia-ignore "never read by anything" and must be rejected at review, pointing authors to the real mechanisms instead. This PR's entire purpose — silencing the "Language / package anti-pattern policy" gate — therefore fails: the gate is a Layer-4 subsystem (built-in allowlist, .claude/CLAUDE.md heading-table, or a root .governance-allowlist file per lines 131-200), and none of them consult .hypatia-ignore, so the gate will still fail on all three Python files. Since this is the canonical standards-authority repo that publishes the anti-pattern list, merging a file it defines as a rejected anti-pattern is self-contradictory. Replace .hypatia-ignore with a .governance-allowlist entry (Layer 4c) or a CLAUDE.md exemption table (Layer 4b) listing each path, keeping the per-path (non-wildcard) discipline the description argues for.

Move the ledger into the documented Layer 4c `.governance-allowlist` file (which the gate actually reads) and delete `.hypatia-ignore`.
# .governance-allowlist — banned-language migration ledger
# One glob per line; '#' comments; blank lines ignored.
# Every path listed individually so NEW banned files still fail the gate.
# Inventory 2026-08-06: 3 python files (governance tooling + fixtures).
a2ml/actions/validate/validate-manifest-dialect.py
scripts/check-workflow-duplicate-keys.py
scripts/relock-sha-keys.py
🤖 Prompt for agents
Code Review: Declares the banned-language migration backlog via `.hypatia-ignore`, but the change is blocked because `.hypatia-ignore` is a documented anti-pattern that nothing reads.

1. 🚨 Bug: `.hypatia-ignore` is a documented anti-pattern; nothing reads it
   Files: .hypatia-ignore:1-15

   `docs/EXEMPTION-MECHANISMS.adoc` (lines 81-87 and 113-118) explicitly states that `.hypatia-ignore` "never read by anything" and must be rejected at review, pointing authors to the real mechanisms instead. This PR's entire purpose — silencing the "Language / package anti-pattern policy" gate — therefore fails: the gate is a Layer-4 subsystem (built-in allowlist, `.claude/CLAUDE.md` heading-table, or a root `.governance-allowlist` file per lines 131-200), and none of them consult `.hypatia-ignore`, so the gate will still fail on all three Python files. Since this is the canonical standards-authority repo that publishes the anti-pattern list, merging a file it defines as a rejected anti-pattern is self-contradictory. Replace `.hypatia-ignore` with a `.governance-allowlist` entry (Layer 4c) or a CLAUDE.md exemption table (Layer 4b) listing each path, keeping the per-path (non-wildcard) discipline the description argues for.

   Fix (Move the ledger into the documented Layer 4c `.governance-allowlist` file (which the gate actually reads) and delete `.hypatia-ignore`.):
   # .governance-allowlist — banned-language migration ledger
   # One glob per line; '#' comments; blank lines ignored.
   # Every path listed individually so NEW banned files still fail the gate.
   # Inventory 2026-08-06: 3 python files (governance tooling + fixtures).
   a2ml/actions/validate/validate-manifest-dialect.py
   scripts/check-workflow-duplicate-keys.py
   scripts/relock-sha-keys.py

Options

Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Important

Your trial ends in 4 days — upgrade now to keep code review, CI analysis, auto-apply, custom automations, and more.

Was this helpful? React with 👍 / 👎 | Gitar

@hyperpolymath
hyperpolymath merged commit bbe7c11 into main Aug 7, 2026
25 of 28 checks passed
@hyperpolymath
hyperpolymath deleted the chore/banned-language-ledger branch August 7, 2026 14:32
@sonarqubecloud

sonarqubecloud Bot commented Aug 7, 2026

Copy link
Copy Markdown

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