Repository navigation
feat: adopt DevCli release and promote the CI package - #10
Merged
StevenTCramer merged 12 commits intoNov 9, 2026
Merged
StevenTCramer merged 12 commits into
StevenTCramer merged 12 commits into
Conversation
A release of TimeWarp.Builder rebuilt the nupkg on release:published and the GitHub Release was created by hand. DevCli 4.0.0-beta.11 supplies release, and the workflow now pushes the Packages-* artifact CI already tested. The props version stays 1.1.0. Co-Authored-By: grok <noreply@x.ai>
The clean-tree dry-run stopped on the master guard, and the PR workflow packed TimeWarp.Builder.1.1.0 without creating a tag. Co-Authored-By: grok <noreply@x.ai>
DevCli 4.0.0-beta.11 walks back only over kanban-only commits, and a deferred 1.1.0 cut outlives the 7-day Packages-* artifact. The guide told operators that documentation commits were skipped and that gh run rerun was always enough. Co-Authored-By: grok <noreply@x.ai>
Guard 8 names the push run, so a refresh left the guide looping on an expired artifact. The cut proceeds when any non-pull-request run at the target commit still has a live Packages-* artifact. Co-Authored-By: grok <noreply@x.ai>
The guide fix was uncommitted during the first dry-run, so that pass stopped on the dirty tree. The rerun on the committed branch stopped because the branch is not master. Co-Authored-By: grok <noreply@x.ai>
A merge-mode dispatch builds master HEAD. When HEAD is kanban-only commits past the dry-run target, the live package artifact is there, and repeating the list at the old SHA loops on refresh. Co-Authored-By: grok <noreply@x.ai>
The guide fix was uncommitted during the first dry-run, so that pass stopped on the dirty tree. The rerun on the committed branch stopped because the branch is not master. Co-Authored-By: grok <noreply@x.ai>
The walk stops at the first path outside kanban/, which sits under land kanban commits after a documentation merge. A merge-mode dispatch builds HEAD, so the next Target commit is HEAD. Co-Authored-By: grok <noreply@x.ai>
The guide fix was uncommitted during the first dry-run, so that pass stopped on the dirty tree. The rerun on the committed branch stopped because the branch is not master. Co-Authored-By: grok <noreply@x.ai>
StevenTCramer
deleted the
task/010-adopt-devcli-dev-release-command-and-release-pipel
branch
November 9, 2026 05:30
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
TimeWarp.Nuru.DevCli4.0.0-beta.11 suppliesclean,check-version,release, andself-install. This repo keepsbuild,test,pack,format,verify-samples, andworkflow. Release mode promotesPackages-*and pushesTimeWarp.Builderto nuget.org. It does not rebuild.<Version>is still 1.1.0. No tag and no GitHub Release were created.dev self-installAOT-publishes becausetools/dev-cli/Directory.Build.propssetsGenerateDocumentationFileto false, so the publish no longer looks fordev.xml. Amuru stays at 2.0.0: 3.0.0-beta.1 is net11.0 only, and the git hooks restore that package. DevCli 4.0.0-beta.11 compiles against Amuru 2.0.0.ganda repo auditfirst reported one warning,vscode-window-icon, because.vscode/settings.jsonwas missing.ganda repo audit --fix --checks vscode-window-iconwrote that file. It is gitignored (.gitignoreline.vscode/*). The re-audit reported Passed 38, Failed 0, Skipped 3.On the clean task branch,
./bin/dev release --dry-runpassed the gh and clean-tree guards and stopped with "release must be cut from master".git tag -l 'v1.1.0'was empty../bin/dev workflow --mode prthen ran self-install, clean, build, test, and pack and printedPipeline SUCCEEDED. The packed file isartifacts/packages/TimeWarp.Builder.1.1.0.nupkg.Review round 1's open findings were both in
documentation/developer/guides/releasing.md. The guide saysdev releasewalks back only overkanban/(at most 50 commits). A docs-only HEAD is recovered withgh workflow run workflow.yml --ref master -f mode=merge, then another dry-run after that run is green. Download and Break-glass state thatgh run rerunlasts 30 days. Past that, whilemasteris still the tagged commit, the recovery is that merge-mode dispatch (the upload step requiresrefs/heads/master) and then break-glass on the tag. Round 1merged.mdmarks M1 and M2 fixed. Round 2 verified those two and opened M3.This fix pass reran
ganda repo audit(Passed 38, Failed 0, Skipped 3),./bin/dev build(0 warnings, both target DLLs),./bin/dev test(6 of 6 Jaribu files), and./bin/dev check-version(source 1.1.0, NuGet 1.0.0)../bin/dev release --dry-runstopped at the clean-tree guard while these edits were uncommitted. After that commit, the same command passed the clean-tree guard and stopped with "release must be cut from master". It did not rungh release create.git tag -l 'v1.1.0'was empty.source/Directory.Build.propswas unchanged.Review round 2's bug was the pre-cut gate. Step 2 no longer reads the run id from guard 8. Guard 8 prints
OrderCandidateRuns(...)[0], which is the push run when one exists, so a refresh leaves that line on the expired version-bump run. The guide now tells the operator to take the full SHA from the dry-runTarget commit:line, listgh run list --workflow workflow.yml --commit SHA --status success, skippull_request, and continue when any other run has aPackages-*artifact withexpiredfalse. Refresh is the same merge-mode dispatch, and only when every such artifact is missing or expired. The push run staying older than 7 days is not another refresh. Download says an expired push run is skipped so the later dispatch's artifact is the one promoted. Round 2merged.mdmarks M3 fixed. Disposition waits for review round 3.Review round 3's bug was the refresh loop that the M3 wording added. The merge-mode dispatch builds
masterHEAD. When HEAD is kanban-only commits past the dry-run target, the livePackages-*artifact is at HEAD, and the next dry-run movesTarget commit:there. The guide no longer says to repeat the list at the SHA from before the refresh. After the run is green, the operator dry-runs again and lists at the newTarget commit:SHA. That SHA stays when HEAD was already the target, and only then does guard 8 still name the old push run. It moves to HEAD when HEAD was kanban-only past the old target. Download no longer says the dispatch is "at the same commit". It says a later merge-mode dispatch onmastersupplies the bytes when that dispatch ran at the commit being released. Round 3merged.mdmarks M4 fixed. Disposition waits for review round 4. No tag and no GitHub Release were created.<Version>is still 1.1.0.This fix pass reran
ganda repo audit(Passed 38, Failed 0, Skipped 3),./bin/dev build(0 warnings, both target DLLs, packageTimeWarp.Builder.1.1.0.nupkg),./bin/dev test(6 of 6 Jaribu files), and./bin/dev check-version(source 1.1.0, NuGet 1.0.0)../bin/dev release --dry-runstopped at the clean-tree guard while these edits were uncommitted. After that commit, the same command passed the clean-tree guard and stopped with "release must be cut from master". It did not rungh release create.git tag -l 'v1.1.0'was empty.source/Directory.Build.propswas unchanged.Review round 4's bug was the guard 8 refusal paragraph. The walk names the first commit with a path outside
kanban/. That commit isHEAD, or the commit under a run of kanban-only commits. On this repo the usual documentation-only merge is followed byland kanbancommits, so the refusal names the merge. The clause "when HEAD is not kanban-only" is gone. The merge-mode dispatch buildsHEAD, so after it is green the newTarget commit:isHEAD. The operator dry-runs again and applies the artifact check at that line. Round 4merged.mdmarks M5 fixed. Disposition waits for review round 5. No tag and no GitHub Release were created.<Version>is still 1.1.0.This fix pass reran
ganda repo audit(Passed 38, Failed 0, Skipped 3),./bin/dev build(0 warnings, both target DLLs, packageTimeWarp.Builder.1.1.0.nupkg),./bin/dev test(6 of 6 Jaribu files), and./bin/dev check-version(source 1.1.0, NuGet 1.0.0)../bin/dev release --dry-runstopped at the clean-tree guard while these edits were uncommitted. After that commit, the same command passed the clean-tree guard and stopped with "release must be cut from master". It did not rungh release create.git tag -l 'v1.1.0'was empty.source/Directory.Build.propswas unchanged.Test plan
Smoke: from this worktree, on a clean tree:
Expect:
releaseis in./bin/dev --help../bin/dev release --dry-runexits non-zero because this branch is notmaster, prints nogh release createexecution, andgit tag -l 'v1.1.0'stays empty../bin/dev check-versionprintsPackages checked: TimeWarp.Builder,Version in source: 1.1.0, andLatest NuGet version: 1.0.0../bin/dev buildis 0 warnings and writessource/timewarp-builder/bin/Release/net10.0/TimeWarp.Builder.dllandsource/timewarp-builder/bin/Release/net11.0/TimeWarp.Builder.dll. All 6 Jaribu runfiles pass.source/Directory.Build.propsstill has<Version>1.1.0</Version>. The guide's walk-back sentence names kanban-only commits and says a path outsidekanban/, includingdocumentation/, ends the walk. It containsgh workflow run workflow.yml --ref master -f mode=mergeas the guard 8 recovery and as the pre-cut refresh. The pre-cut check copies the full SHA fromTarget commit:, runsgh run list --workflow workflow.yml --commit SHA --status success, skipspull_request, and continues when any other run has aPackages-*artifact withexpiredfalse. After the refresh is green it says to dry-run again and list at the newTarget commit:SHA, and not to repeat the list at the SHA from before the refresh. It says that SHA moves toHEADwhenHEADwas kanban-only commits past the old target, and that the old SHA still showing every artifact expired is not a reason to dispatch again. It limits "the push run that guard 8 names stays older than 7 days" to the case whereHEADwas already the target. Download says a later merge-mode dispatch onmastersupplies the bytes when that dispatch ran at the commit being released. It says GitHub acceptsgh run rerunfor 30 days, and the break-glass section then dispatches merge mode onmasterwhilemasteris still the tagged commit. The guard 8 refusal starts with "no successful CI run of workflow.yml". When the walk reaches a commit with a path outsidekanban/, it names that commit and the path. That commit isHEAD, or the commit under a run of kanban-only commits. The usual case is a documentation-only merge followed byland kanbancommits, and the refusal names the merge. The dispatch buildsHEAD, so after the run is green the newTarget commit:isHEAD. The paragraph does not say the refused commit isHEAD, and it does not say "when HEAD is not kanban-only".Automated gate:
./bin/dev buildand./bin/dev testfrom the repo root.ganda repo auditexits 0.The release cut itself is not part of this validation. Run
dev releaseonly with--dry-runon this branch.Kanban task 010
Session: 01a1bcc1-3c09-78e2-8fa0-ceeacadc6e70