mirror of
https://github.com/obra/superpowers.git
synced 2026-08-07 22:59:20 +08:00
Record Drew's approved reduced design after the second staff review. Limit preflight to the mutating bump path, cover audit's independent read path, and require byte-for-byte proof that deterministic YAML failures cannot partially update earlier JSON manifests. Provide one TDD implementation task for the Hermes registry entry, jq/yq dispatch, focused preflight, and three behavioral checks. Explicitly defer rollback, audit-status changes, nested YAML, runtime changes, and broader release-tool refactoring.
2.1 KiB
2.1 KiB
Hermes Version-Bump Wiring Design
Date: 2026-08-05 Revised: 2026-08-06 Status: Approved
Goal
Keep .hermes-plugin/plugin.yaml in lockstep with the repository version by
registering it in .version-bump.json and teaching scripts/bump-version.sh
to process YAML without implementing a YAML parser in Bash.
Design
- Add
{ "path": ".hermes-plugin/plugin.yaml", "field": "version" }to.version-bump.json. - Route
.jsonthrough the existingjqhelpers and.yamlthrough Mike Farahyqv4. The YAML key and value are passed as data, not interpolated into the expression. - Support only a present top-level YAML string field. Nested fields and
.ymlare out of scope. - Route
--check,--audit, and version updates through the same small read/write dispatcher. - Before a version bump writes any manifest, run one read-only preflight that
validates the required tools and reads every present declared manifest
through the dispatcher. This prevents a deterministic YAML failure from
occurring after earlier JSON files have already been updated. Missing-file
behavior remains unchanged, and
--helpstill works withoutjqoryq.
The preflight is the only reliability addition. It does not make the script transactional or redesign its existing audit and error-status behavior.
Tests
Three focused behavioral tests run the real script against an isolated temporary fixture and prove:
- aligned JSON and YAML pass
--checkand--audit, and a bump updates both formats; - an actual bump with JSON declared first and a later YAML manifest whose
top-level
versionis not a string exits nonzero and leaves every manifest byte-for-byte unchanged; and - the real
.version-bump.jsonregisters the Hermes manifest.
Verification also runs shell lint and scripts/bump-version.sh --check against
the repository.
Non-Goals
- No hand-written YAML parser.
- No
.ymlor nested-YAML support. - No Hermes runtime changes.
- No rollback framework, general config-schema layer, audit/status refactor, or exhaustive failure matrix.
- No change to the separate version-validation and JSON-expression issue found during review.