-
0.44.1 Stable
released this
2026-08-24 23:36:57 -05:00 | 74 commits to main since this releaseThe account holder's name came out of history, and the guard that should have caught it
went in. No runtime change; the whole release is the gate and the record.Added
-
test_no_pii.pyrefuses a display name beside an address unless it is on a list of
placeholders. A name is the one kind of PII with no shape to match —"Lovelace, Ada"
and a real one are the same string to a regex — so the rule is inverted the way the
reserved-domain rule for addresses already is: enumerate what may appear, not what may
not. Hashing the real name into the guard was the obvious alternative and is worse than
it looks; a salted digest of a common given name and surname falls to a small dictionary,
which publishes in a public repo roughly what it was meant to protect.It reads
bytesliterals and reassembles f-strings, because both are blind spots exactly
where the fixtures live: a rawFrom:header is bytes, andf"Pay{ZWSP}Pal Security"is
two AST nodes, so a name split across an interpolation would pass a naive walk. -
test_no_pii.pyrefuses a token-shaped literal that is not bound to a module-level
name, in the one file the other rules cannot scan — this one. The real Canvas token
hid for two releases inside the docstring of the helper written to recognise its shape,
and the convention that replaced it had already drifted twice before anything checked it.
Changed
-
CLAUDE.mdrecords the rewrite and what it actually took. Taking a value out of the
tree is not taking it out of the repo: the name stayed published in 20 blobs for a day
after the 2026-08-23 sweep replaced it. Removing it tookgit filter-repo, 99 commits
recreated and 57 of 74 tags repointed — all 66 releases survived, because Forgejo keys
them to the tag name. And the force-push was not the end: Forgejo served the old commits
by hash untilgit gc --prune=nowran inside the container. Verify a rewrite by asking
the API for a hash that should be gone. -
The emoji-calendar arithmetic is current again — 140 commits and 73 of the 74 tags —
and that decision is now priced rather than assumed, since a rewrite of comparable size
has since been paid for something else.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-