From ebcd48c302d55548ee5bae4ddaea35136359b446 Mon Sep 17 00:00:00 2001 From: Bin Le Date: Wed, 12 Aug 2026 23:55:03 -0400 Subject: [PATCH] Release v1.9.6: make the committed cover snapshot deterministic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As shipped in 1.9.5 the snapshot carried the build stamp, whose commit hash and timestamp change on every run. Every build therefore dirtied docs/cover.html even when nothing about the page had changed — noise in git status forever, and a permanent failure of this skill's own clean-tree gate before deploy. The stamp is now stripped from the committed copy only; the published dist still carries it. Two consecutive builds from unchanged source produce identical bytes, so the snapshot moves only when the page or version does. Co-Authored-By: Claude Opus 5 (1M context) --- .../publish-cover/scripts/build-cover-dist.sh | 7 +++++++ CHANGELOG.md | 14 ++++++++++++++ docs/cover.html | 5 ++--- pyproject.toml | 2 +- uv.lock | 2 +- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/.agents/skills/publish-cover/scripts/build-cover-dist.sh b/.agents/skills/publish-cover/scripts/build-cover-dist.sh index b2130d4..4a9d5dd 100755 --- a/.agents/skills/publish-cover/scripts/build-cover-dist.sh +++ b/.agents/skills/publish-cover/scripts/build-cover-dist.sh @@ -205,6 +205,13 @@ dist, src, out = (pathlib.Path(a) for a in sys.argv[1:4]) html = (dist / "index.html").read_text() rel = os.path.relpath(src.resolve(), out.parent.resolve()) +# Drop the build stamp. The snapshot is committed, so it must be byte-stable +# for a given source + version — the stamp carries a commit hash and a +# timestamp that change on every run, which would dirty the working tree on +# every build and permanently trip this skill's own clean-tree gate. The +# published dist keeps its stamp; only the committed copy sheds it. +html = re.sub(r'\A\n', '', html, count=1) + SKIP = re.compile(r'^(?:[a-z][a-z0-9+.-]*:|//|#|\.\.?/)', re.I) def repoint(m): diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cf9c63..97ac0bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,20 @@ This project follows a Keep a Changelog-style format and uses version tags for r ## [Unreleased] +## [1.9.6] - 2026-08-12 + +### Fixed + +- **The committed cover snapshot is now byte-deterministic.** As shipped in + 1.9.5 it carried the build stamp, whose commit hash and timestamp change on + every run — so every `build-cover-dist.sh` invocation dirtied + `docs/cover.html` even when nothing about the page had changed, and would + have permanently tripped this skill's own "clean working tree" gate before + deploy. The stamp is now stripped from the committed copy only; the published + dist still carries it. Two consecutive builds from an unchanged source now + produce identical bytes, so the snapshot changes only when the page or the + version does. + ## [1.9.5] - 2026-08-12 ### Changed diff --git a/docs/cover.html b/docs/cover.html index 3413ce5..ad33a62 100644 --- a/docs/cover.html +++ b/docs/cover.html @@ -1,4 +1,3 @@ - @@ -166,7 +165,7 @@
- v1.9.5 + v1.9.6

actop.

Watch your Apple Silicon Mac the way it actually works — sudoless, @@ -275,7 +274,7 @@

actop — Apple Chip top

diff --git a/pyproject.toml b/pyproject.toml index 0adc9fc..ddf0a3f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "actop" -version = "1.9.5" +version = "1.9.6" description = "Apple Silicon (M1–M4) power, GPU, ANE & memory-bandwidth monitor — sudoless TUI + Python API for profiling local LLM / MLX / CoreML inference" readme = "README.md" license = { text = "MIT" } diff --git a/uv.lock b/uv.lock index 06227bb..1ef3ddd 100644 --- a/uv.lock +++ b/uv.lock @@ -15,7 +15,7 @@ resolution-markers = [ [[package]] name = "actop" -version = "1.9.5" +version = "1.9.6" source = { editable = "." } dependencies = [ { name = "rich" },