Skip to content

Pre-release verification: fix two checks that reported more than they did, and cut 0.2.0 - #6

Merged
jehrr merged 2 commits into
mainfrom
audit/pre-release-verification
Sep 10, 2026
Merged

jehrr merged 2 commits into
mainfrom
audit/pre-release-verification

Conversation

@jehrr

@jehrr jehrr commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator

A pass through the repo against the family notes, by code rather than from memory. Four things were not what they reported, and the repo had no tag.

Fixed

The fixture privacy check examined an empty string. test_no_capture_leaks collected its corpus with k.startswith("FIX_"), but every fixture in the suite is named by suffixSEARCH_FIXTURE, US_LISTING_FIXTURE, eight more. The generator matched nothing, so all twelve patterns (JWTs, session ids, click-tracking keys, DataDome blobs) ran against "".

Twelve checks reported PASS over 150 KB of committed real captures that nothing had looked at.

before:  the string the privacy checks actually scan is 0 chars
after:   PASS  the privacy checks below have fixtures to scan (10 fixtures, 150487 chars)

The captures are clean — with the collection fixed, all twelve still pass. This changes no committed data; it changes whether we know that. The real fix is the assertion added underneath, which fails if the corpus is ever empty again.

The banned-wording scan reached only the repo root. os.listdir(REPO_ROOT) left eight shipped files unscanned: both Claude workflows, tests.yml, canary.yml and the four issue templates — the files most likely to attract product wording. It asks git ls-files now, which also excludes untracked scratch and .pytest_cache for free, with the old behaviour as a fallback for a non-git tarball.

The canary's header described a schedule that its own body, forty lines further down, explains it does not have.

The README did not state that pyppeteer is effectively unmaintained, though the engine table recommends it as one of the two engines that reach Etsy.

Release 0.2.0

There was no tag at all. pyproject.toml said 0.1.0, the CHANGELOG documented a 0.1.0 release and linked to releases/tag/v0.1.0, and on a public repo that link was dead. v0.1.0 will be tagged retroactively at the rewrite commit it describes; this is v0.2.0.

0.2.0 rather than 0.1.1 because two changes are user-visible, and the notes lead with them: diff_runs.py now refuses a cross-currency comparison, and the canary is dispatch-only.

Verified against the family notes, not assumed

Checked by reading the code, not by recalling it. Already correct: all 23 family flags in all three engines · the status→exit mapping shared through finish_run · every bare sys.exit literal is exit 2 · --proxy refused with --cdp-endpoint in all three engines · --fingerprint warned in the two that have it · link[rel="next"] leading the selector list · MIN_CARD_MATCHES 5 · pages_failed recorded by number · diff_runs refusing an incomplete run · all four grouping spaces pinned by literal-character tests · .env.example parity in both directions · both Claude workflows token-gated and pinned to stable · the concurrency test covering all five behaviours the notes ask for.

Checks

571 offline checks (was 569), 0 failures. ci_checks.py --all clean. pytest wrapper passes.

jehr and others added 2 commits September 10, 2026 10:37
A pass through the repo against the family notes, by code rather than from
memory. Four things were not what they reported.

**The fixture privacy check examined an empty string.** `test_no_capture_leaks`
collected its corpus with `k.startswith("FIX_")`, but every fixture in this
file is named by SUFFIX — `SEARCH_FIXTURE`, `US_LISTING_FIXTURE`, and eight
more. The generator matched nothing, so all twelve patterns — JWTs, session
ids, click-tracking keys, DataDome blobs — were tested against `""` and
twelve checks reported PASS over 150 KB of committed real captures that
nothing had looked at.

The captures turn out to be clean: with the collection fixed, all twelve
still pass, now over 150,487 characters across 10 fixtures. So this changes
no committed data — it changes whether we know that. The actual fix is the
assertion added underneath, which fails if the corpus is ever empty again: a
check that can silently scan nothing is worse than no check, because it
reports the same green as a real one.

**The wording scan reached only the repo root.** `os.listdir(REPO_ROOT)` left
eight shipped files unscanned — both Claude workflows, tests.yml, canary.yml
and the four issue templates — which are exactly the files a contributor
pastes product wording into. It now asks git for the tracked file list, so
subdirectories are covered and untracked scratch files and .pytest_cache are
excluded for free, with the old behaviour kept as a fallback for a release
tarball that is not a git checkout. A check pins that the scan is no longer
root-only.

**The canary's header still described a schedule it no longer has.** Its own
body explains, forty lines further down, that the schedule is off because the
credential does not live a day. The top of the file contradicted it.

**pyppeteer's maintenance status was missing from the README.** The engine
table recommends it as one of the two that reach Etsy, so the caveat the
family notes ask for belongs beside that recommendation, not only in the
engine's own docstring.

571 offline checks (was 569), 0 failures.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Version, CHANGELOG and the release badge, in their own commit.

The repo has had no tag at all: `pyproject.toml` said 0.1.0, the CHANGELOG
documented a 0.1.0 release and linked to `releases/tag/v0.1.0`, and that
link was dead on a public repository because the tag was never pushed. So
v0.1.0 is tagged retroactively at the rewrite commit it describes, and this
is v0.2.0 — the DataDome fallback, the credential check, the second
storefront, the canary rework and today's audit batch.

0.2.0 rather than 0.1.1: two of those change behaviour an existing user
would see, so the release notes lead with them, per this file's own
preamble.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jehrr
jehrr merged commit 2531ee4 into main Sep 10, 2026
7 checks passed
@jehrr
jehrr deleted the audit/pre-release-verification branch September 10, 2026 08:40
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