Summary
Standardize all GitHub Release asset filenames across the abitofhelp ecosystem
on the bare-semver convention (no v prefix in the artifact name) and codify
the rule in the global Claude operating instructions so future authorization /
checklist / report text uses it uniformly.
This is deferred until after adafmt v1.0.0 ships so the rc4 → v1.0.0 window
stays free of unrelated shared-tooling churn.
Convention to standardize on
Two surfaces, two different shapes:
| Surface |
Form |
Example |
| Git tag |
v<semver> |
v1.0.0-rc4, v4.1.0 |
GitHub Release tag_name |
v<semver> |
v1.0.0-rc4, v4.1.0 |
| Release asset filename |
bare semver (no v) |
adafmt-1.0.0-rc4-linux-amd64.tar.gz, spark_prove_1.1.1.log |
The v prefix is a tag-name convention only. It must NOT appear in the
distributable artifact filename.
Current state (2026-06-20)
Already conformant — every release that uses package_dist.py:
adafmt-1.0.0-rc{2,3,4}-linux-{amd64,arm64}.tar.gz (+ .sha256)
- Enforced mechanically by
package_dist/package_dist.py via its
--tarball <basename> interface; the docstring example
(adafmt-1.0.0-rc1-linux-amd64) already shows the bare-semver shape.
Non-conformant — the SPARK proof log generator:
release/adapters/ada.py:874 (docstring) and release/adapters/ada.py:909
(path construction) write /tmp/spark_prove_v{version}.log, which is
subsequently uploaded as a Release asset on the SPARK-enabled library repos.
- Observed in the wild on:
abitofhelp/functional releases: spark_prove_v4.1.0.log
abitofhelp/tzif_ada releases: spark_prove_v3.0.3.log, spark_prove_v3.0.2.log
abitofhelp/zoneinfo_ada releases: spark_prove_v1.1.1.log, spark_prove_v1.1.0.log
Scope
1. Rename the SPARK proof log artifact
Change the literal in release/adapters/ada.py from
/tmp/spark_prove_v{version}.log to /tmp/spark_prove_{version}.log.
Update the surrounding docstring on line 874. Verify that nothing
downstream (workflow upload steps, asset glob patterns, release-notes
templates) hard-codes the spark_prove_v… shape.
2. Comprehensive sweep for other v-prefixed asset generators
Grep across:
hybrid_scripts_python/ (this repo) — all of release/, package_dist/,
any other adapter or helper.
hybrid_test_python/ — the sibling shared submodule.
- Per-repo
.github/workflows/*.yml in each consumer — gh release upload
steps, softprops/action-gh-release files: lists, manual tar/zip
invocations, anything that names an asset.
For each match, decide: is it a release artifact (rename to bare semver) or a
non-asset string (leave alone)?
3. Codify the rule in global Claude operating instructions
Add a short "Release Engineering" section to the operating instructions used
by Claude across all projects, scoped to:
- Tag surface uses
v<semver>.
- Release-asset filenames use bare
<semver> (no v), in the shape
<name>-<bare-semver>-<descriptor>.<ext>.
package_dist.py is the mechanical enforcement point for tarball assets;
any new asset-generating script must follow the same convention.
The exact home (a new section in ~/.claude/CLAUDE.md, or a new @release
agent, or amending an existing agent) is the maintainer's call. The
project-local feedback memory
feedback_release_asset_name_no_v_prefix.md in the adafmt project memory
should be retired or pointed at the global rule once it lands globally.
4. Cross-repo follow-up after rename
After the script rename lands, any newly-published library release will use
spark_prove_<version>.log. Existing historical assets (rc2 / rc3 tarballs,
prior SPARK logs) stay as-is — no rename of published assets in-place; the
convention applies forward.
Timing
- Do NOT start until adafmt v1.0.0 final tag ships and any immediate v1.0.0
follow-ups have settled. Shared-tooling churn during the v1.0.0 window
risks breaking the in-flight RC chain.
- After v1.0.0: open dedicated PRs against
hybrid_scripts_python (and any
per-repo workflow that needs adjustment), validate via the usual GHA gate,
and only then update the global instructions.
Out of scope
- Renaming historical published assets — only forward conformance.
- Changing the tag surface (
v<semver> stays).
- Editing
package_dist.py — already conformant.
References
- Convention surfaced and confirmed during adafmt v1.0.0-rc4 release mechanics
(2026-06-20).
- Authoritative confirmation by owner during the same session.
- Project memory:
feedback_release_asset_name_no_v_prefix.md (adafmt local
memory; to be retired once the global rule lands).
Summary
Standardize all GitHub Release asset filenames across the abitofhelp ecosystem
on the bare-semver convention (no
vprefix in the artifact name) and codifythe rule in the global Claude operating instructions so future authorization /
checklist / report text uses it uniformly.
This is deferred until after adafmt v1.0.0 ships so the rc4 → v1.0.0 window
stays free of unrelated shared-tooling churn.
Convention to standardize on
Two surfaces, two different shapes:
v<semver>v1.0.0-rc4,v4.1.0tag_namev<semver>v1.0.0-rc4,v4.1.0v)adafmt-1.0.0-rc4-linux-amd64.tar.gz,spark_prove_1.1.1.logThe
vprefix is a tag-name convention only. It must NOT appear in thedistributable artifact filename.
Current state (2026-06-20)
Already conformant — every release that uses
package_dist.py:adafmt-1.0.0-rc{2,3,4}-linux-{amd64,arm64}.tar.gz(+.sha256)package_dist/package_dist.pyvia its--tarball <basename>interface; the docstring example(
adafmt-1.0.0-rc1-linux-amd64) already shows the bare-semver shape.Non-conformant — the SPARK proof log generator:
release/adapters/ada.py:874(docstring) andrelease/adapters/ada.py:909(path construction) write
/tmp/spark_prove_v{version}.log, which issubsequently uploaded as a Release asset on the SPARK-enabled library repos.
abitofhelp/functionalreleases:spark_prove_v4.1.0.logabitofhelp/tzif_adareleases:spark_prove_v3.0.3.log,spark_prove_v3.0.2.logabitofhelp/zoneinfo_adareleases:spark_prove_v1.1.1.log,spark_prove_v1.1.0.logScope
1. Rename the SPARK proof log artifact
Change the literal in
release/adapters/ada.pyfrom/tmp/spark_prove_v{version}.logto/tmp/spark_prove_{version}.log.Update the surrounding docstring on line 874. Verify that nothing
downstream (workflow upload steps, asset glob patterns, release-notes
templates) hard-codes the
spark_prove_v…shape.2. Comprehensive sweep for other
v-prefixed asset generatorsGrep across:
hybrid_scripts_python/(this repo) — all ofrelease/,package_dist/,any other adapter or helper.
hybrid_test_python/— the sibling shared submodule..github/workflows/*.ymlin each consumer —gh release uploadsteps,
softprops/action-gh-releasefiles:lists, manualtar/zipinvocations, anything that names an asset.
For each match, decide: is it a release artifact (rename to bare semver) or a
non-asset string (leave alone)?
3. Codify the rule in global Claude operating instructions
Add a short "Release Engineering" section to the operating instructions used
by Claude across all projects, scoped to:
v<semver>.<semver>(nov), in the shape<name>-<bare-semver>-<descriptor>.<ext>.package_dist.pyis the mechanical enforcement point for tarball assets;any new asset-generating script must follow the same convention.
The exact home (a new section in
~/.claude/CLAUDE.md, or a new@releaseagent, or amending an existing agent) is the maintainer's call. The
project-local feedback memory
feedback_release_asset_name_no_v_prefix.mdin the adafmt project memoryshould be retired or pointed at the global rule once it lands globally.
4. Cross-repo follow-up after rename
After the script rename lands, any newly-published library release will use
spark_prove_<version>.log. Existing historical assets (rc2 / rc3 tarballs,prior SPARK logs) stay as-is — no rename of published assets in-place; the
convention applies forward.
Timing
follow-ups have settled. Shared-tooling churn during the v1.0.0 window
risks breaking the in-flight RC chain.
hybrid_scripts_python(and anyper-repo workflow that needs adjustment), validate via the usual GHA gate,
and only then update the global instructions.
Out of scope
v<semver>stays).package_dist.py— already conformant.References
(2026-06-20).
feedback_release_asset_name_no_v_prefix.md(adafmt localmemory; to be retired once the global rule lands).