* feat(whats-new): remote release notes with dev workspace mode
Add WHATS_NEW.md, CI whats-new.md asset upload, and client fetch/cache
with embedded fallbacks. Dev and -dev builds read the full file from the
repo for debugging; RC/stable download the release asset on first use.
* fix(whats-new): render ## headings and add changelog tab
Parse h2 sections in release-notes markdown; load changelog alongside
highlights and let users switch views on the What's New page.
* fix(whats-new): prefetch on startup and fix CI typecheck prebuild
Prefetch whats-new asset when the shell loads on RC/stable builds.
Run prebuild:release-notes before tsc and coverage jobs so the
gitignored generated bundle exists in CI.
* docs: CHANGELOG and credits for What's New remote notes (PR #1058)
* fix(whats-new): always slice embedded release notes to current line
Drop full CHANGELOG embed for -dev bundles; tauri:dev still reads live
markdown from the repo. Ignore all of src/generated/ in git.
* fix(whats-new): fetch release asset via Rust to bypass CORS
Route whats-new.md download through fetch_url_bytes; rename the
technical tab label; add fetch unit tests (PR #1058 review).
* fix(ci): refresh npmDepsHash on channel branch before app-v* tag
Promote workflows push with GITHUB_TOKEN, so nix-npm-deps-hash-sync never
runs on the finalize commit. verify-nix ran after create-release and opened
a PR, leaving app-v* tags pointing at commits with stale npmDepsHash.
Move Nix hash/lock refresh into prepare-nix-sources (before tagging), commit
directly to the channel branch, and build from the prepared commit SHA.
* docs(changelog): note npmDepsHash CI fix (PR #927)
Extend sync-tauri-version-from-package.js to align psysonic* crate
version fields in Cargo.lock with package.json. Include the lockfile in
promote and post-release main-bump commits. Fixes drift where lock stayed
on the previous -dev while Cargo.toml already matched the channel bump.
Reset reusable channel publish to the last known-good release flow from b83c0f5 and keep build_platform_artifacts gating for source-only dispatch compatibility.
When release and target_commitish are already valid, treat temporary git ref 404 responses as a warning so release jobs continue instead of failing on API propagation lag.
Let createRelease own tag creation with target_commitish and remove preflight tag-ref waits to reduce tag visibility races that lead to untagged release behavior.
Use GitHub REST create/update via actions/github-script with target_commitish and release id from API responses to avoid tag lookup races in the gh CLI path.
Create and update releases through explicit API payloads, include target_commitish, and verify tag binding through release id to avoid transient tag-endpoint inconsistencies.
Use gh release create --verify-tag and remove target_commitish from release payload
now that tags are created upfront. This avoids server-side untagged release fallback
while preserving deterministic tag-to-release publication.
Stop depending on tag lookup right after publish. Resolve release by tag with a
name fallback, then patch/create by id using the same payload and force a final
id-based patch to heal untagged placeholders before downstream upload steps.
Replace github-script release creation with gh release create/edit plus explicit
release-id resolution and patching. This avoids inconsistent REST createRelease
untagged behavior and keeps publication pinned to app-v tags.
* fix(release): rebind untagged draft releases to expected app-v tag
After create/update, fetch release by id and force tag_name/target_commitish when
GitHub returns an unexpected tag (including untagged placeholders). This self-heals
release metadata before downstream upload steps consume release_id.
* fix(release): remove tauri-action release publishing side effects
Build macOS/Windows bundles with tauri CLI and upload artifacts explicitly via
gh release upload to the expected app-v tag. This prevents tauri-action from
creating untagged releases while keeping release assets deterministic.
* fix(release): wait for tag ref visibility before release API calls
Before create/update release, poll GitHub REST git.getRef(tags/app-v...) until the
new tag is visible. This avoids release API timing gaps where tag exists in git
but release endpoints still return inconsistent not-found/untagged behavior.
After create/update, fetch release by id and force tag_name/target_commitish when
GitHub returns an unexpected tag (including untagged placeholders). This self-heals
release metadata before downstream upload steps consume release_id.
* fix(release): create missing app-v tag before release verification
Ensure reusable publish creates and pushes the expected app-v tag when absent,
then validates it points to source_ref. This prevents release records with tag_name
but no git refs/tags object, which previously broke Source code archives.
* fix(release): pin tauri publish to tagged release metadata
Pass tagName/releaseName/releaseDraft/prerelease to tauri-action in addition to
releaseId, so asset upload fallback remains bound to the expected app-v release
instead of creating untagged releases.
* chore(ci): align workflow action versions for release flow
Update github-script usage to v9 across release-related workflows and keep
the current tauri-action release binding changes in the same branch for testing.
* fix(release): harden tagged release resolution for source-only promote
Canonicalize release_id via getReleaseByTag after create/update and fail fast on
invalid tag/commit inputs to avoid untagged release binding. Also propagate
source-only marker through promote push events so push-triggered channel runs
skip platform artifacts and verify-nix consistently.
* fix(release): avoid tag lookup hard-fail during release creation
Remove immediate getReleaseByTag canonicalization after create/update because
GitHub can return 404 for tag-based release lookup while the release id is valid.
Keep release_id flow and downstream release-id validation to prevent regressions.
* fix(release): create missing app-v tag before release verification
Ensure reusable publish creates and pushes the expected app-v tag when absent,
then validates it points to source_ref. This prevents release records with tag_name
but no git refs/tags object, which previously broke Source code archives.
* fix(release): pin tauri publish to tagged release metadata
Pass tagName/releaseName/releaseDraft/prerelease to tauri-action in addition to
releaseId, so asset upload fallback remains bound to the expected app-v release
instead of creating untagged releases.
* chore(ci): align workflow action versions for release flow
Update github-script usage to v9 across release-related workflows and keep
the current tauri-action release binding changes in the same branch for testing.
* fix(release): harden tagged release resolution for source-only promote
Canonicalize release_id via getReleaseByTag after create/update and fail fast on
invalid tag/commit inputs to avoid untagged release binding. Also propagate
source-only marker through promote push events so push-triggered channel runs
skip platform artifacts and verify-nix consistently.
* fix(release): create missing app-v tag before release verification
Ensure reusable publish creates and pushes the expected app-v tag when absent,
then validates it points to source_ref. This prevents release records with tag_name
but no git refs/tags object, which previously broke Source code archives.
* fix(release): pin tauri publish to tagged release metadata
Pass tagName/releaseName/releaseDraft/prerelease to tauri-action in addition to
releaseId, so asset upload fallback remains bound to the expected app-v release
instead of creating untagged releases.
* chore(ci): align workflow action versions for release flow
Update github-script usage to v9 across release-related workflows and keep
the current tauri-action release binding changes in the same branch for testing.
* fix(release): create missing app-v tag before release verification
Ensure reusable publish creates and pushes the expected app-v tag when absent,
then validates it points to source_ref. This prevents release records with tag_name
but no git refs/tags object, which previously broke Source code archives.
* fix(release): pin tauri publish to tagged release metadata
Pass tagName/releaseName/releaseDraft/prerelease to tauri-action in addition to
releaseId, so asset upload fallback remains bound to the expected app-v release
instead of creating untagged releases.
Ensure reusable publish creates and pushes the expected app-v tag when absent,
then validates it points to source_ref. This prevents release records with tag_name
but no git refs/tags object, which previously broke Source code archives.
GitHub ref APIs can briefly return 404 right after create/update release.
Retry getRef(tags/...) before failing binding verification to avoid false
negatives that interrupt next/release channel publishing.
* fix(release): prevent untagged fallback from tauri publish
Set explicit github-script output for release_id and validate it before build jobs.
This prevents tauri-action from creating untagged releases when release id wiring
breaks and keeps assets attached to the intended app-v tag release.
* fix(release): add source-only promote mode and harden release binding
Add a source_only dispatch option to promote workflows and propagate it into
channel publish so maintainers can skip platform builds and verify-nix when needed.
Also validate release/tag/commit binding to prevent untagged fallback and ensure
source archives stay aligned with the intended app-v tag.
When an existing app-v tag points to a different commit than source_ref,
re-point it to the checked out source commit and continue publishing.
This preserves Source code archive correctness without blocking artifact release.
Ensure GitHub release tags are created from the checked out channel ref and fail
early if an existing tag points to a different commit. This keeps Source code
archives aligned with built artifacts and prevents mixed-release snapshots.
* ci(release): sync Cargo/tauri versions after npm version on promote
Keep bundle artifact names aligned with package.json by updating
src-tauri/Cargo.toml and tauri.conf.json when promoting channel branches.
Made-with: Cursor
* ci(release): sync Cargo/tauri in post-release dev bump PR
Run the same package.json→Tauri sync after bumping main to the next -dev
version so local builds match auto-generated PR contents.
An empty VERSION produced the invalid GitHub tag "app-v" and broke
update-manifest downloads (release tag mismatch).
Validate semver prefix, write package version via heredoc to GITHUB_OUTPUT,
and refuse to compute tag app-v.
Made-with: Cursor
* ci(release): split channel pipelines and automate version transitions
Introduce dedicated next/release orchestration workflows backed by a reusable publish pipeline with RC/final package version updates and post-release main dev bump PRs. Add a strict release process SOP with RC freeze, hotfix override, and mandatory backport rules.
* ci(release): gate main-to-next promotion on green CI
Add a dedicated workflow that validates main branch checks/statuses and block the promote-main-to-next flow unless main is green. Update the release SOP to reflect the enforced pre-promotion validation.
* ci(release): fix channel promotion edge cases and policy gaps
Switch channel promotions to reset-based snapshots with force-with-lease pushes, stop auto-merging channel nix-refresh PRs, and guard main dev bump against version downgrades. Add RC changelog fallback, require AUR release updates in SOP, and extend npmDepsHash sync to main/next/release pushes.
* docs(release): clarify backport and nix refresh survivability rules
Require RC fix backports to reach main before the next main-to-next promotion, and document that channel-local nix refresh PRs are advisory unless equivalent changes are merged into main.