v0.1.20
Added
-
celmisis on PyPI, and the pack now says so. Published 0.1.0 and
verified from the live index: installed on Python 3.9.25 in a clean
container, all five commands run against a real production pack, one flipped
bit reported asfindings.json: sha256 mismatchwith exit 1, a missing file
with exit 2.summary.mdinside every pack said "recompute them and
compare", which was true and had no executable form; it now names
pip install celmisandcelmis verify, and says in the same breath that
you are not required to use it — the manifest is plain JSON and sha256 is
sha256. A tool that made checking us require trusting us would defeat the
point of the pack. -
packaging/pypi/— the evidence-pack verifier, as a standalone package.
summary.mdinside every pack tells a third party they can check it without
trusting the tool that made it, and until now the only way to reach
verify_pack()was to clone an AGPL repository and install forty
dependencies under Python 3.13. The claim was true and unexecutable. The
verifier is a few hundred lines ofhashlib,io,jsonandzipfile, so
it lifts out with no dependencies at all and runs from Python 3.9 — which is
where a locked-down audit box usually is. Two commands,verifyandshow,
with exit codes an auditor's CI can read: 0 intact, 1 problems found, 2 could
not check.A fixture pack is committed in both trees and a drift test builds a fresh
pack frombuild_evidence_pack()and runs the packaged verifier over it.
Without it, the day somebody adds a file to the producer every installed
celmis verifystarts reportingpresent but not in the manifest— a false
accusation of tampering, produced by our own tooling, against the operator.
Changed
-
The platform's distribution is
celmis-platform.celmison PyPI is the
verifier above, and while both were called the same thing two failures were
one command away:python -m buildfrom the repository root would publish
the entire server under the verifier's name, and in a shared environment
importlib.metadata.version("celmis")would answer with the verifier's
version — whichsrc/vault/provenance.pystamps into every generated
document and/api/capabilitiesreports as the running platform. Both
DISTRIBUTIONStuples now ask forcelmis-platformfirst, and the root
carries aPrivate :: Do Not Uploadclassifier, which is not a real
classifier and which PyPI therefore rejects — a hard stop rather than a note. -
Two sentences kept the mark after the labels above them lost it. The
navigation entry and the tour heading were renamed to "Agent"; the subtitle
and the tour's own description still said "Dispatch a bug straight to the
Claude agent" and "Claude agent: code-editing sessions on your repos". A scan
for "Claude agent" found seven locales of sixteen — the other nine inflect it
("agentovi Claude", "à l'agent Claude", "al agente de Claude"), which is why
the first pass missed them. All thirty-two strings are fixed, and the guard
now covers the keys that name a section of ours, not only the button.Naming Anthropic's product is untouched: "Claude Code agent — researches the
code" is an engine the operator picks between, and erasing the mark there
would leave them guessing what they chose.