Skip to content

Guard the public boundary in CI, and add a CHANGELOG - #27

Merged
ww-mw merged 2 commits into
mainfrom
add-leak-check-gate
Sep 18, 2026
Merged

ww-mw merged 2 commits into
mainfrom
add-leak-check-gate

Conversation

@ww-mw

@ww-mw ww-mw commented Sep 18, 2026

Copy link
Copy Markdown
Member

Two pieces of maintenance groundwork.

scripts/leak-check.mjs + npm run check:leak, wired into CI. The repo is
public and had no automated check that internal material stays out of it — core
already has one, this repo did not. Three phases: internal needles in tracked
files, every package-lock resolved URL on the public registry (the upstream
git dependency being the one allowed exception), and local-only notes absent from
the index. Each phase was tested against a planted violation; each fails, and the
lockfile phase also trips the needle phase, which is the intended overlap.

The needle scan is case-sensitive deliberately — -i matches ipws inside
skipWs() in rowFilter.ts, and a check that cries wolf gets muted.

Runs before npm ci: no dependencies needed, and a leak should surface in seconds
rather than behind a five-minute build.

CHANGELOG.md, backfilled from the 80 annotated release tags, so the
Marketplace page and GitHub Releases stop showing no history.

Also adds a verify aggregate (typecheck && build && build:web && test && check:leak) as a single local pre-merge gate, mirroring core's.

The repository is public and had no automated check that internal material stays
out of it — the grep lived in local notes and ran when someone remembered. By the
time a leak is tagged it is already fetchable, and history keeps it there.

Three phases, one per way material has escaped or could:

- internal needles in any tracked file, via `git grep` so the set scanned is
  exactly the set that can reach the remote;
- every package-lock `resolved` URL pointing at the public registry. The npm
  registry configured in this dev environment is the internal one and the public
  one is unreachable, so each `npm install` pulls internal hosts in and the
  rewrite back out is manual, hence forgettable, hence asserted. The upstream
  data model is a git dependency and is the one allowed exception;
- local-only notes absent from the index. .gitignore does not apply to files
  already tracked, so one `git add -f` makes CLAUDE.md permanent while
  .gitignore goes on looking correct.

The needle scan is case-sensitive on purpose: `ipws` is four characters and
occurs inside ordinary camelCase, so `-i` flags every `skipWs()` call in
rowFilter.ts. A check that cries wolf on correct code gets muted.

Runs before `npm ci` — it needs no dependencies, and it is the one check whose
failure cannot be fixed by retrying.
Eighty releases with no changelog, so the Marketplace page and every GitHub
Release showed no history. Reconstructed from the annotated tags: their subject
where they have one, then the annotation body, then the commit subjects the tag
covers with bump and merge noise dropped. Five of the eighty still say nothing
useful — those tags genuinely recorded only a version number.

From here the entry is written at bump time, beside the version change.
@ww-mw
ww-mw merged commit 12e115d into main Sep 18, 2026
1 check passed
@ww-mw
ww-mw deleted the add-leak-check-gate branch September 18, 2026 20:10
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