Make GitHub release tags short (rust-<v> / js-<v>) and fix missing npm/crates.io/GitHub releases#18
Conversation
Adding .gitkeep for PR creation (default mode). This file will be removed when the task is complete. Issue: #17
Shorten the JavaScript release tag to js-<version> (multi-language) and a bare <version> (single-language): no v prefix, single - separator, replacing js_v<version>. normalizeVersion/buildReleaseTag still accept every legacy spelling so old tags keep resolving. Self-heal a release that bumped package.json but never published: when version-and-commit.mjs finds nothing to commit it now signals already_released so the idempotent npm publish step verifies the registry and publishes the missing version (observed as 0.10.1 stuck on main).
…rust- tags (#17) ROOT CAUSE: the Rust release job had no version-bump step, so the crate version never advanced past its initial value, fragments piled up unconsumed in changelog.d/, and no new crates.io or GitHub release was ever produced. Add get-bump-type.rs / bump-version.rs / collect-changelog.rs (mirroring the JS changeset flow and the link-foundation rust template) and wire them into the release job: re-align to origin/main (concurrency-safe, no double-bump), pick the highest declared bump, rewrite Cargo.toml, fold fragments into CHANGELOG.md, cargo update -p the crate, commit rust-<version> and push, then target the GitHub release at the bump commit. Also shorten the Rust tag to rust-<version> (no v, single -) and unify the duplicated alloc-no-stdlib major in the published-crate smoke test.
#17) checkout@v4->v6, setup-node@v4->v6, cache@v4->v5, create-pull-request@v7->v8 across js.yml/rust.yml/parity.yml to clear Node 16/18 deprecation warnings. Add **/target/ to .gitignore so experiment crates don't commit build output.
#17) Minimal downstream crate that does 'cargo add web-search' and uses the library API, reproducing the brotli/alloc-no-stdlib E0277 split a fresh resolve hits. Used to verify the rust.yml smoke-test fix.
…e data (#17) Add README.md reconstructing the timeline of runs 27496039708 (Rust CI false-positive smoke-test failure) and 27496039720 (JS release that bumped to 0.10.1 but never published), the requirement matrix, root-cause analysis (RC-1..RC-5), the solutions applied, libraries considered, tag-cleanup recommendation, and upstream reports. Persist issue/run/registry-state JSON under data/ alongside the existing template-comparison.md and raw logs.
v and - to be short
Working session summaryAll three workflows pass on the final commit; the tree is clean. Everything is complete. Here's the final state. SummaryIssue #17 is fully solved in PR #18 (ready for review, CI green on all three workflows). The real bug behind "I don't see all the releases"Auditing the two linked runs revealed three independent pipeline faults, on top of the tag-format request:
Tag format (the headline request)
Also done
One thing I deliberately did not doThe duplicate Verification: This summary was automatically extracted from the AI working session output. |
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost estimation:
📊 Context and tokens usage:Claude Opus 4.8: (4 sub-sessions)
Total: (72.1K new + 581.9K cache writes + 13.7M cache reads) input tokens, 176.6K output tokens, $15.278797 cost Claude Haiku 4.5:
Total: (89 new + 141.9K cache writes + 361.1K cache reads) input tokens, 12.3K output tokens, $0.275177 cost 🤖 Models used:
📎 Log file uploaded as Gist (6091KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
✅ Ready to mergeThis pull request is now ready to be merged:
Monitored by hive-mind with --auto-restart-until-mergeable flag |
This reverts commit 3e480f3.
Summary
Closes #17. Makes GitHub release tags short —
rust-<version>andjs-<version>(novprefix, single-separator) — and fixes the "I still don't see all the releases in package managers and GitHub" symptom by repairing three independent release-pipeline faults found while auditing the two runs the issue links to.Full analysis:
docs/case-studies/issue-17/README.mdandtemplate-comparison.md.Release-channel state at investigation time
main0.8.20.10.10.2.00.2.00.2.0×2rust-v/rust_vtags for one versionRoot causes & fixes
getTagPrefix()→js-(multi) /''(single); Rust workflow →rust-$VERSION/$VERSION.normalizeVersion()still strips every legacy spelling (v,js-v,js_v,rust-v,rust_v) so old tags remain valid inputs.version-and-commit.mjsfinds nothing to commit (a prior run bumped + pushed but died before publishing, consuming the changeset), it now also setsalready_released=true. The idempotent publish step then verifies npm and self-heals the missing version instead of skipping it forever. This is why npm sat at0.8.2whilepackage.jsonwas0.10.1.0.2.0forever. Addedget-bump-type.rs/bump-version.rs/collect-changelog.rs(mirroring the JS changeset flow and the link-foundation rust template) and wired them into the release job: re-align toorigin/main(concurrency-safe, no double-bump), pick the highest declared bump, rewriteCargo.toml, foldchangelog.d/fragments intoCHANGELOG.md,cargo update -pthe crate, commitrust-<version>, push, and target the release at the bump commit.alloc-no-stdlib2.0.4/3.0.0 split (E0277) even though0.2.0was already published. The smoke test now collapses the duplicate major to 2.0.4 on the fresh consumer resolve (no-op once upstream realigns).0.2.0releases are left in place — deleting published releases is destructive/outward-facing, so the case study documents a manual cleanup recommendation instead.checkout@v6,setup-node@v6,cache@v5,create-pull-request@v8) acrossjs.yml,rust.yml,parity.yml.What happens on the first push to
mainafter merge0.2.0→0.3.0, publishes to crates.io, creates releaserust-0.3.0.0.10.1to npm (self-heal if still in limbo) and creates releasejs-0.10.1.Tests / verification
npm test: 158/158 pass (includes updatedrelease-namingtag tests —buildReleaseTag('1.2.3', MULTI) === 'js-1.2.3', never containsv/_;normalizeVersionaccepts all legacy spellings).npm run lintandnpm run format:check: clean (format check covers.github/workflows).RUSTFLAGS=-Dwarnings; exercised locally: 5 fragments →minor;0.2.0→0.3.0; changelog folded; fragments consumed;Cargo.locksynced.Upstream reports (R5)
Three shared template defects were verified against the live JS template source and filed upstream (repro + fix in each issue):
extractReleaseNotesregex lacks an end-anchor: notes for1.2match the1.2.3section.check-changesetscounts any.mdfile as a changeset.merge-changesetssilently drops malformed changesets.The full catalogue (including lower-severity items) is in
template-comparison.md§"Shared bugs to report upstream".Reproduction & case study (R6/R7)
docs/case-studies/issue-17/holds the deep analysis, the raw failing/passing run logs, the issue/run/registry-state JSON snapshots, and the upstream reference scripts.