You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Changed
Renamed the project proofshot → cliproof. The previous name collided
with an established npm package and GitHub repo (AmElmo/proofshot) that also
installs to ~/.claude/skills/proofshot/, which would clobber this skill on
disk. cliproof is verified free on npm and GitHub. Install is now /plugin marketplace add aks-builds/cliproof then /plugin install cliproof@cliproof;
the embed marker is <!-- cliproof:start -->.
Added
Agent-agnostic npm CLI (npm i -g cliproof) — bin/cli.js (zero deps): cliproof install copies the skill into Claude Code, Cursor, Codex, OpenCode,
Gemini CLI, and Windsurf; cliproof <cmd> passes through to the Python
pipeline; cliproof doctor reports capabilities.
Determinism + freshness check — scripts/normalize.py neutralises volatile
tokens (durations, timestamps, UUIDs, hashes, temp paths, ports) and scripts/check.py re-runs proof commands listed in .cliproof/proof.json,
failing on real drift. Reusable composite action .github/actions/cliproof-check
and a freshness.yml workflow keep README proofs honest in CI.
scripts/verify.py — runs a command and judges PASS/FAIL from the exit code
plus error signatures across 10+ languages; emits a PR-ready Markdown report.
scripts/suggest.py — scans a repo (package.json/Makefile/pyproject/--help/
README quickstart) and ranks the best "proof it runs" commands.
scripts/storyboard.py — stitches multiple SVG captures into one vertical
session image; scripts/annotate.py adds a caption bar (frame only).
scripts/pr.py — posts the screenshot + verify verdict as a GitHub PR comment.
Custom redaction policy — redact.py loads .cliproof/redact.json
(patterns + allow) to add project secret patterns and exempt false positives.
Test coverage for every advertised capability — Node tests for the
agent-agnostic install/CLI (test/cli.test.js, run in CI), a guard test
asserting the scripts import only stdlib and no network modules
(test_no_dependencies.py), multi-language verify signature tests, and an integration.yml workflow that installs real freeze and runs
capture → redact → embed → check end-to-end on Linux (plus a best-effort real vhs GIF). 114 pytest + 5 Node tests.
Release automation — release.yml (dispatch → bump → sync npm + Claude
marketplace manifests → release PR → auto-merge) and publish.yml
(npm publish with provenance + tag + GitHub release). Requires NPM_TOKEN and RELEASE_PR_PAT secrets.
scripts/capture.py — reliable wrapper around freeze: launches it with
stdin closed, forces --language ansi for --execute, and captures to SVG.
All freeze style flags pass through. This is now the recommended way to
capture (use it instead of calling freeze directly).
scripts/rasterize.py — converts a (redacted) SVG to PNG using the first
available local renderer (Chromium browser → resvg → rsvg-convert → inkscape → magick), loading the SVG file directly. Retina (--scale 2)
by default; --renderer to force one.
preflight.py now reports SVG→PNG rasterize availability.
Tests for capture.py and rasterize.py.
Fixed
freeze hangs when launched with an inherited non-tty stdin (every
agent/CI shell). capture.py closes stdin (subprocess.DEVNULL); docs show
the manual < /dev/null / cmd /c "… < NUL" equivalents.
freeze PNG/WebP rasterizer can crash on some Windows machines (Go 0xc0000005). The pipeline now captures SVG and rasterizes separately via rasterize.py, so PNG no longer depends on freeze's wasm rasterizer.
UTF-8 mojibake (Â, â€") from re-encoding the SVG — renderers now read
the .svg file directly; docs warn about cp1252 defaults (PowerShell).
UTF-8 BOM handling — all scripts that read text now use utf-8-sig (strips
a leading BOM) and write plain utf-8 (never adds one), so a BOM'd input
(Notepad/VS Code) can't break SVG parsing or README frontmatter. capture.py
also strips a BOM from freeze's output defensively.
Line endings — redact.py/embed.py write newline="\n", so editing a
file on Windows no longer silently rewrites it with CRLF.
Changed
Docs (SKILL.md, references/tooling.md, README.md) route captures through capture.py/rasterize.py, drop the "PNG works natively everywhere" claim,
and add a per-failure-mode reliability table plus a "view the rendered image"
verification step.