Open the 0.1.0 release cycle - #403
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
znai deploys to <deploy>/<doc-id> and prefixes every internal URL with the doc id, so a second export pass whose doc id names the version directory yields a self-consistent copy under v<version>/ beside the unchanged root. fix_site_urls.py grows a doc-id mode: verify the prefix on every link (failing on any without it), repair the stubs, and pin GitHub source links to the release tag a permanent tree documents. The deployed site joins the fresh build with every previously released version, kept in libfn/website: generate_docs assembles from a public clone, so the PR artifact is the complete future site; a separate push_archive job (the only holder of WEBSITE_PUSH_TOKEN) pushes each release deploy back to the archive before it goes live. Runs serialize per ref, an assembly that drops an archived version's files refuses, and an archived version's content is immutable once tagged. README directs single-header users to the per-version permalinks and the versions.html index; the moving /libfn.hpp remains, labelled as moving. v0.1.0-rc1's site is preserved only as libfn/website's tag - the versioned pipeline starts at 0.1.0. The scripts were verified against the deployed rc1 tree in an out-of-repo harness (byte-exact round-trips); the pipeline's loud guards are the in-repo test surface. Assisted-by: Claude:claude-fable-5
Member
Author
|
augment review |
🤖 Augment PR SummarySummary: Opens the final Changes:
release commits; the archive tag protects already-published version content from mutation.
🤖 Was this summary useful? React with 👍 or 👎 |
SemVer 2.0.0 forbids leading-zero numeric prerelease identifiers; scripts/sync_versions.py (pre-commit) rejects them, but CMakeLists.txt and scripts/assemble_site.py accepted e.g. 0.1.0-01, so a bypassed pre-commit run could publish and tag an invalid version directory. Both now enforce the canonical grammar — CMake's regex flavor fits it in exactly its nine-group maximum. Verified by a 22-case corpus probed against all three validators, sync_versions.py as oracle. Addresses PR #403 review r3833446766. Assisted-by: Claude:claude-fable-5
Member
Author
|
augment review |
Every push to a draft ran the full matrix on paid runners before anyone asked for review. The paid jobs (build, package tests, codecov, sonarcloud, single-header verify) now skip while the pull request is a draft, and ready_for_review is added to their triggers so flipping to ready runs what was skipped. Pre-commit, the licence diff and the docs build still run on drafts, so a cheap correctness check remains. A run with all jobs skipped concludes 'skipped', which keeps the pr-scan consumers idle. No test: draft semantics only exist on real pull request events, so PR #403 is the live probe. Assisted-by: Claude:claude-fable-5
The four fixes from #402 section 2. The release push trigger loses its paths filter, so a release merge always redeploys regardless of what the delta touched. The checkout fetches full history, so the banner's git describe still resolves after release moves past the tagged commit. The Pages deploy gets its own concurrency group with cancellation off, job-level so pull request builds keep their per-ref group. deploy_docs declares the github-pages environment, failing a branch-policy rejection before any step runs and surfacing the live URL. No test: the deploy leg only runs on a release push; the next release exercises it. Pull request runs prove generate_docs unaffected. Assisted-by: Claude:claude-fable-5
Covers #402 sections 1, 5, 8 and 6. Records the smallest-bump version cadence, tag-and-push sequence, post-deploy checks, step rationales, and the repository prerequisites. Assisted-by: Gemini:gemini-3.6-flash Assisted-by: Claude:claude-fable-5
* Remove passive narrative constructions and conversational preambles * Expose testing dimensions, compiler assertions, and pipeline pitfalls in structured, bold-lead bullet points * Absorb and refine C++23/26 compiler exception baselines in Development Environment * Clarify client code best-practices, header layers, and repository secrets * Format website references using clean reference links Assisted-by: Gemini:gemini-3.6-flash
* Add draft entry and previous SHA pointer to CHANGELOG.md * Incorporate user-refined options for C++26 and compiler overrides * Restructure Releasing sections to define draft-to-publish playbook * Fix link reference mappings at bottom of CONTRIBUTING.md Assisted-by: Gemini:gemini-3.6-flash
* Rephrase the Why section to be active and direct * Explicitly document the lack of GCC/Clang portability and type limits in the default type-sorting mode * Add Latest Release and Website badges to the top banner Assisted-by: Gemini:gemini-3.6-flash
Bronek
force-pushed
the
bronek/release_0_1
branch
from
August 23, 2026 16:26
a44d871 to
f50f942
Compare
The publish job signs SLSA build provenance for libfn-v<tag>.hpp before uploading, so an attached asset always carries an attestation; a download is checked with `gh attestation verify`. Untestable before a release: the job runs only on `release: published`, so first contact is the next release publish. Assisted-by: Claude:claude-fable-5
The README named all three distribution channels in one sentence but stated no contract for any of them; #402 asks that consumers can pick deliberately. One list item per channel: the versioned site copy is the immutable URL to pin, the release asset adds verifiable build provenance, the root URL moves with each release. Assisted-by: Claude:claude-fable-5
Four bullets carry the rc1-to-release delta: the versioned docs site, provenance on the single-header asset, the documented release procedure and cadence, and the draft pull request gating. The rc1 entry keeps the full library description, dated headings settle on the em dash, and the previous-changelog pointer now says what its link holds. Assisted-by: Claude:claude-fable-5
README's Using-the-library chapter gains the two sub-headings, opens the single-header section with the steer towards real headers, and groups the practicalities after the channel contracts. CONTRIBUTING lists both spellings of the C++26 entry point: the exported libfn::fn_cxx26 and the in-tree include_fn_cxx26. Assisted-by: Claude:claude-fable-5
Bronek
marked this pull request as ready for review
August 23, 2026 17:46
target_compile_features needs PRIVATE for the consumer's own sources — INTERFACE reaches only dependents, leaving the target itself at its prior standard. The CI docs page still claimed the site publishes from main, and its opening sentence predated the draft gating. Assisted-by: Claude:claude-fable-5
Member
Author
|
augment review |
An untagged push to release would archive and tag v<VERSION> in libfn/website with wrong-banner content, and the immutability guard would then block the real release. generate_docs now fails fast unless HEAD carries the exact v<VERSION> tag. Also corrects CONTRIBUTING's sanitizer paragraph: they default ON when the build type is Debug or unset, not Debug alone. Both are review findings; the guard's failure path is reachable only by an untagged release push, so it ships untested by design. Assisted-by: Claude:claude-fable-5
Member
Author
|
augment review |
The release-branch clause read as a claim that namespace derivation inspects branches, which it does not. Split by prerelease kind instead: candidates are uniquely numbered, so mixing two fails at the linker; -dev builds share one spelling, which is the silent hazard the release cadence exists to close. Review finding. Assisted-by: Gemini:gemini-3.6-flash
Member
Author
|
augment review |
|
15 tasks
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.



Tagging
v0.1.0-rc1leftmainclaiming a version it no longer is.VERSIONreachesinclude/libfn_version.hppasLIBFN_VERSION— the inline namespace — so until it moves, every commit here builds headers spelling the released namespace while carrying unreleased content. Two such builds link cleanly and are ODR-incompatible, and nothing diagnoses it. Bumping now closes that window; it also alignsVERSIONwith the CHANGELOG, whose top entry already reads 0.1.0.Five places consume the version.
CMakeLists.txtandconanfile.pyread theVERSIONfile, so they follow automatically;MODULE.bazel,ports/libfn/vcpkg.jsonandinclude/libfn_version.hppeach carry it independently and are updated here. No reference torc1survives outside CHANGELOG history.Changes:
VERSIONfile and associated files (see above)/v<x.y.z>/, assembled with every previously released version from the libfn/website archive and pushed back there on release deploys. The scripts are covered by the pipeline's own loud guards plus an out-of-repo harness run against the deployed rc1 tree (byte-exact round-trips) — ctest cannot exercise them, lacking znai's output; this PR's docs run is the first end-to-end execution.docs.ymlfor release deploys (Harden the release procedure before 0.1.0 #402 §2): unconditional release redeploys, full-depth tags forgit describe, serialized Pages deploys, thegithub-pagesenvironment declaredgh attestation verifychecks a downloaded copyRemaining follow-ups from the rc1 dry run — the vcpkg port and the
v*tag ruleset — stay tracked in #402.Assisted-by: Claude:claude-opus-5
Assisted-by: Claude:claude-fable-5
Assisted-by: Gemini:gemini-3.6-flash