You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
"Never commit the Translator-specific URL" has been a documented rule in CLAUDE.md and README.md for as long as there has been a config template, and until #20 nothing enforced it. The
rule had already failed in practice: the internal releases URL was the hardcoded default in cli.py from the initial commit until the history was rewritten to remove it on 2026-09-01.
#20 added TestCommittedConfigTemplate (tests/test_cli.py), which fails if a non-public host
appears in env.default. That closes the template, but not the hole the leak actually came
through — a default value in source. A scan over the whole tree is what would have caught it.
What to add
A CI step (and ideally a test, so it also runs locally) that fails on:
Non-public Babel URLs. Every stars.renci.org URL in a tracked file must be under /var/babel/. Today there are 11, all compliant:
Prefer an allowlist ("only these paths are permitted") over a denylist naming the private
directory — writing the private path into ci.yml to grep for it would reintroduce the string
this repository just spent a history rewrite removing.
Google Sheet IDs. Requested for coverage; note there is currently no Google Sheets
reference anywhere in this repo, tracked or in history (git log -S docs.google --all is
empty), so this one is preventive rather than fixing a known leak. Relevant because upstream
Babel curates some concords in Sheets, so an ID could plausibly arrive here with a future
feature. Pattern: docs.google.com/spreadsheets/d/<44-char id>, plus bare 44-character [A-Za-z0-9_-] IDs assigned to a variable named like a sheet.
Consider a general secret scanner (gitleaks, trufflehog) instead of bespoke greps, if the
maintenance trade seems right. A bespoke allowlist is easier to reason about and produces no
false positives; a scanner catches classes nobody thought to write a rule for.
This does not retroactively fix anything: the URL is out of this repository's history, but
GitHub still retains pre-rewrite objects reachable by SHA, and the tree it pointed at still
serves 200 unauthenticated. Both are being handled outside this repo.
Why
"Never commit the Translator-specific URL" has been a documented rule in
CLAUDE.mdandREADME.mdfor as long as there has been a config template, and until #20 nothing enforced it. Therule had already failed in practice: the internal releases URL was the hardcoded default in
cli.pyfrom the initial commit until the history was rewritten to remove it on 2026-09-01.#20 added
TestCommittedConfigTemplate(tests/test_cli.py), which fails if a non-public hostappears in
env.default. That closes the template, but not the hole the leak actually camethrough — a default value in source. A scan over the whole tree is what would have caught it.
What to add
A CI step (and ideally a test, so it also runs locally) that fails on:
Non-public Babel URLs. Every
stars.renci.orgURL in a tracked file must be under/var/babel/. Today there are 11, all compliant:Prefer an allowlist ("only these paths are permitted") over a denylist naming the private
directory — writing the private path into
ci.ymlto grep for it would reintroduce the stringthis repository just spent a history rewrite removing.
Google Sheet IDs. Requested for coverage; note there is currently no Google Sheets
reference anywhere in this repo, tracked or in history (
git log -S docs.google --allisempty), so this one is preventive rather than fixing a known leak. Relevant because upstream
Babel curates some concords in Sheets, so an ID could plausibly arrive here with a future
feature. Pattern:
docs.google.com/spreadsheets/d/<44-char id>, plus bare 44-character[A-Za-z0-9_-]IDs assigned to a variable named like a sheet.Notes
git grep), not the working tree, so a developer's local.envis out of scope —
.gitignorecovers.envand.env.*as of Add babel-explorer: a CLI for querying Babel cross-references via DuckDB and NodeNorm #20.maintenance trade seems right. A bespoke allowlist is easier to reason about and produces no
false positives; a scanner catches classes nobody thought to write a rule for.
GitHub still retains pre-rewrite objects reachable by SHA, and the tree it pointed at still
serves 200 unauthenticated. Both are being handled outside this repo.