feat(tag): add [tag] mode = bump-only (#17) - #19
Merged
Conversation
Add a TagMode enum resolved onto EffectiveConfig.tag_mode from a new [tag] table. Default Full (local-owns-tag). Invalid mode is a hard load error rather than a silent fall-back.
Parse [tag] mode once in load_from_str and pass the typed value into merge, matching the ProfileKind precedent, so a bad mode can't silently default to Full. Plus minor polish: bare Result, bare TagMode in tests, and cover the bump_only alias + case-insensitivity.
Derive a ReleasePlan from the tag mode. In bump-only, skip tag creation and tag push and relax the branch guard, pushing only the bump commit so CI owns tagging + publish. Full mode is unchanged.
Full-struct equality so a future ReleasePlan field can't silently go uncovered by the mode-mapping tests.
tizz98
force-pushed
the
claude/issue-17-options-4ecda7
branch
2 times, most recently
from
July 14, 2026 15:29
3fd0595 to
3e6b300
Compare
[tag] mode = bump-only to reconcile meta tag with release.yml (#17)[tag] mode = bump-only (#17)
This was referenced Jul 14, 2026
Merged
tizz98
added a commit
that referenced
this pull request
Jul 14, 2026
tizz98
added a commit
that referenced
this pull request
Jul 14, 2026
Now that v0.5.0 ships the [tag] parser, dogfood it: bump .meta/version + framework_version to 0.5.0 and set [tag] mode = bump-only so this repo's meta tag defers tagging to release.yml. Restore the bump-only wording in docs/releasing.md (reverted out of PR #19 until the parser shipped). Closes #20. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a
[tag] mode = "full" | "bump-only"config tometa tag, the mechanism that reconcilesmeta tagwith a CI-owns-tagrelease.yml(issue #17).full(default) is unchanged: bump + commit + create + push the tag.bump-only: bump + commit + push the branch, but do not create or push a tag — a CI workflow (release.yml) creates the tag on merge and builds + publishes. This removes the silent no-op wheremeta tagpushing its own tag maderelease.yml'spreparejob skip build + publish (which shipped nothing for v0.4.0).Scope note — this repo's adoption is deferred
This PR ships the feature only (parser + command + tests). It does not switch ai-meta's own
.meta/meta.tomltobump-only, because CI runs the pinned./metashim (.meta/version= 0.4.0), and that released binary — withdeny_unknown_fields— can't parse a[tag]table it predates. A repo'smeta.tomlcan only use fields the pinned release already understands, so dogfooding[tag]has to wait until a release ships this parser and.meta/versionis bumped. Tracked in #20 (and the underlying self-hosting-CI gap in #21).How it works
TagModeenum is resolved ontoEffectiveConfig.tag_mode, parsed once inconfig::load_from_strand threaded throughmerge(mirroring theProfileKindprecedent). An invalid mode string is a hard load error, not a silent fall back tofull— a silent fallback would re-introduce the bug.meta tagderives a pure, unit-testedReleasePlan { create_tag, push_tag, enforce_branch }from the mode and branches its git orchestration on it. In bump-only: no tag created/pushed, and the "must be onmain" branch guard is relaxed (the release PR is cut from a feature branch). Full mode is byte-identical to before.post_taghook can rungh pr createfor full automation. No hook logic in this PR.Test plan
cargo test --workspace— config parse (full / bump-only / invalid) + bothReleasePlanselections. (process::tests::which_finds_shfails on the Windows sandbox only — noshonPATH; passes on Linux CI.)cargo clippy --all-targets -- -D warningsclean;cargo fmt --all -- --checkclean../meta check --strict(pinned shim, as CI runs it) — passes.cargo run -- tag patch --dry-runwith a local[tag] mode = "bump-only"shows[bump-only]+ the bump-only note and no branch refusal offmain.Follow-ups
[tag] mode = "bump-only"in ai-meta's own meta.toml (post-release) #20 — adopt[tag] mode = "bump-only"in ai-meta's own.meta/meta.toml+ updatedocs/releasing.md, after the release that ships this parser (and.meta/versionbump).meta.tomlwith its in-tree binary (the pinned-shim gap that forced the deferral above).Addresses #17 (provides the reconciliation mechanism); this repo's adoption tracked in #20.
🤖 Generated with Claude Code