Pre-release verification: fix two checks that reported more than they did, and cut 0.2.0 - #6
Merged
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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_leakscollected its corpus withk.startswith("FIX_"), but every fixture in the suite is named by suffix —SEARCH_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.
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.ymland the four issue templates — the files most likely to attract product wording. It asksgit ls-filesnow, which also excludes untracked scratch and.pytest_cachefor 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.tomlsaid 0.1.0, the CHANGELOG documented a 0.1.0 release and linked toreleases/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.pynow 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 baresys.exitliteral is exit 2 ·--proxyrefused with--cdp-endpointin all three engines ·--fingerprintwarned in the two that have it ·link[rel="next"]leading the selector list ·MIN_CARD_MATCHES5 ·pages_failedrecorded by number ·diff_runsrefusing an incomplete run · all four grouping spaces pinned by literal-character tests ·.env.exampleparity in both directions · both Claude workflows token-gated and pinned tostable· the concurrency test covering all five behaviours the notes ask for.Checks
571 offline checks (was 569), 0 failures.
ci_checks.py --allclean. pytest wrapper passes.