chore(ci): assert tags are bare version numbers (no v prefix)#19
Merged
Conversation
ShellSyntaxTree convention: release tags are SemVer version numbers
verbatim — no decoration. Example: `0.1.0-alpha`, NOT `v0.1.0-alpha`.
The tag value IS the package version.
publish_nuget.yml changes:
- Trigger broadened to `tags: ['*']` so the workflow fires on ANY tag
push; mistakes show up in CI rather than silently no-op-ing.
- New first step "Assert tag is a bare version number":
* fails fast with a clear ::error:: message if the tag starts with 'v'
* fails if the tag isn't SemVer-shaped
(`<major>.<minor>.<patch>[-prerelease]`)
* on success, writes PACKAGE_VERSION=<tag> straight to GITHUB_ENV
- "Compute package version from tag" step folded into the assert (no
more `${TAG#v}` strip; the assert guarantees no leading v).
Version-string cleanups in docs:
- README.md: Versioning section header now lists `0.1.0-alpha` /
`0.1.x` / `0.2.0` / `1.0.0` (no v prefix); added a one-liner
explaining the convention.
- IMPLEMENTATION_PLAN.md: NOW / NEXT / LATER bucket headings switched
from `v0.1.x` to `0.1.x` etc.; the example tag-push command is now
`git tag 0.1.0-alpha && git push origin 0.1.0-alpha`.
Tests / build clean. Public API surface unchanged.
This lands before the first tag push so the workflow's assertion is in
place when 0.1.0-alpha goes out.
1500cf8 to
ba6d907
Compare
5 tasks
Aaronontheweb
added a commit
that referenced
this pull request
May 11, 2026
Reconcile the plan with what actually shipped on 2026-05-11: - Mark IMPLEMENTATION_PLAN.md Item 13 (Release 0.1.0-alpha) complete. Tag 0.1.0-alpha pushed at commit 41e9433 (PR #19); publish_nuget.yml succeeded at 13:58:20Z; GitHub Release cut at 14:08:47Z. Record PR #19 + PR #20 as post-alpha CI follow-ups. - Archive OpenSpec change v0.1-locked-interpretations under openspec/changes/archive/2026-05-11-v0.1-locked-interpretations/. Skipped applying the spec delta (--skip-specs) because some scenarios describe pre-implementation states (e.g., Parse stub throwing NotImplementedException) that are now stale; SPEC.md remains the v0.1 source of truth. No code, test, corpus, or SPEC.md changes. Build clean; 353/353 tests pass.
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
ShellSyntaxTree convention: release tags are bare SemVer version numbers — no
vprefix.0.1.0-alpha, notv0.1.0-alpha. The tag value IS the package version, verbatim.This PR enforces that convention in the release pipeline before the first tag pushes.
Workflow changes (
publish_nuget.yml)tags: ['*']so the workflow fires on ANY tag push. Mistakes (e.g.,v0.1.0accidentally pushed) show up loudly in CI instead of silently no-op-ing.::error::if the tag starts withv<major>.<minor>.<patch>or<major>.<minor>.<patch>-<prerelease>)PACKAGE_VERSION=<tag>straight to$GITHUB_ENV${TAG#v}strip needed.Doc cleanups
README.mdVersioning section:0.1.0-alpha/0.1.x/0.2.0/1.0.0(novprefix). Added a one-liner explaining the convention.IMPLEMENTATION_PLAN.md: NOW / NEXT / LATER bucket headings updated; example tag-push command is nowgit tag 0.1.0-alpha && git push origin 0.1.0-alpha.Verification
dotnet build -c Release— cleandotnet test -c Release— 353/353 passingpwsh ./scripts/Add-FileHeaders.ps1 -VerifyTest plan
0.1.0-alphatag and verify the workflow's assert step accepts it; verify the workflow rejects a deliberately-misformatted test tag (optional sanity check; can also be deferred to whenever someone accidentally mistypes).Next
After this merges: I push the
0.1.0-alphatag (per your go-ahead).