Skip to content

chore(release): merge main into develop - #578

Merged
github-actions[bot] merged 15 commits into
developfrom
chore/backmerge-main
Aug 22, 2026
Merged

chore(release): merge main into develop#578
github-actions[bot] merged 15 commits into
developfrom
chore/backmerge-main

Conversation

@tomymaritano

Copy link
Copy Markdown
Collaborator

Back-merge so the promotion PR #571 can satisfy main's up-to-date requirement.

main carries release-tooling commits develop never received — notably #540 (tag without pushing a bump commit) and #537 (point semantic-release at dripnex/app). main is authoritative for release tooling, so those come back here.

Why a branch and not gh pr update-branch: GitHub refuses to update a PR whose head is a protected branch. And a direct develop ← main PR (#577) deadlocks — develop requires the head to be up to date, but main is inherently behind develop. A branch descended from develop with main merged in satisfies both.

No product changes: release config, workflow, and doc URLs only. package.json stays at 0.15.2, which is expected under the post-#540 flow.

🤖 Generated with Claude Code

tomymaritano and others added 15 commits June 9, 2026 11:13
## Release v0.15.1 — Phase 0 DevOps stabilization

Brings the 7-PR DevOps cleanup chain to main and cuts a clean release.
This is the verification gate for the whole Phase 0 effort — if anything
breaks at tag, build, or publish, Phase 0 isn't done.

### What landed since v0.15.0

| PR | Phase | Summary |
|----|-------|---------|
| #290 | **A1** | \`fix(desktop)\`: pin Electron to ^41.7.1 so
better-sqlite3 prebuilts apply (closes the v0.15.0 V8 ABI failure on all
3 build platforms) |
| #291 | **A2** | \`fix(release)\`: restore version bumping via
\`scripts/bump-version.mjs\` + \`@semantic-release/exec\` (closes the
"tag at 0.14.0" trap) |
| #292 | **B** | \`chore(ci)\`: workflow surface cleanup — actions
@v4@v5 sweep, \`windows-latest\` → \`windows-2025-vs2026\` pin, drop
\`FORCE_JAVASCRIPT_ACTIONS_TO_NODE24\`, \`if-no-files-found: error\`,
\`permissions:\` blocks, HUSKY: '0' removal |
| #293 | **A4** | \`chore(ci)\`: \`release.yml\` pre-flight dry-run gate
+ post-flight version assertion (closes the "silent no-release" trap) |
| #294 | **C1** | \`ci\`: PR-title commitlint as a standalone workflow →
required check on develop + main |
| #295 | | \`fix(lint)\`: develop lint baseline (preserve-caught-error ×
4 in encryptionService + mcp-server tsconfig split for ESLint
projectService) |
| #296 | | \`chore(ci)\`: unblock CI on develop — ignore CHANGELOG.md in
Prettier (semantic-release writes it), \`pnpm install --ignore-scripts\`
in setup job (same shape as release.yml + deploy-api.yml) |

### C2 — branch protection updates (already applied via gh api)

Both \`develop\` and \`main\`:
- **Required status checks**: \`lint\`, \`test\`, \`typecheck\`,
\`CodeRabbit\`, \`commitlint\`
- Force-pushes blocked
- \`strict: true\` (PRs must be up to date)

### Release pipeline guardrails now in place

- **Pre-merge**: PR-title commitlint blocks \`release:\`-style
non-conventional squash titles upstream.
- **Mid-release**: \`release.yml\` dry-run check fails loud if no
release would be cut. \`scripts/bump-version.mjs\` mutates both
\`package.json\` files. Post-flight assertion verifies both match the
dry-run-announced version.
- **Post-release**: \`build.yml\` artifact upload uses
\`if-no-files-found: error\` (silent zero-asset releases die at upload).
- **Native deps**: \`apps/desktop\` pinned to Electron 41.7.1 with
prebuilt better-sqlite3. CI \`setup\` skips postinstall so workflow-side
install never rebuilds native modules.

### Expected behavior of the Release pipeline after merge

1. Merge this PR → main tip advances.
2. Manually dispatch the **Release** workflow.
3. \`release.yml\` runs:
- \`pnpm install --ignore-scripts\` (no native rebuild needed for
semantic-release).
- **Pre-flight dry-run** → "next release version is 0.15.1" (single
\`fix(release):\` commit since v0.15.0).
   - \`npx semantic-release\`:
- \`@semantic-release/exec\` runs \`node scripts/bump-version.mjs
0.15.1\` → both package.json files updated.
     - \`@semantic-release/git\` commits + pushes tag \`v0.15.1\`.
     - \`@semantic-release/github\` creates draft Release.
   - **Post-flight assertion** → both package.jsons read \`0.15.1\`.
4. Tag push triggers \`build.yml\` on macOS-14, windows-2025-vs2026,
ubuntu-latest.
5. All 3 platforms succeed → publish job un-drafts the GitHub Release.
6. Auto-sync PR opens to merge main → develop.

### What still needs verification (post-release)

- [ ] Tag push actually triggers Build (needs GH_TOKEN with workflow
scope — A3 deferred, may need PAT regen)
- [ ] Build completes on all 3 platforms with prebuilt better-sqlite3
(smoke-test desktop bundle after publish)
- [ ] Auto-sync PR back to develop is created

🤖 This is the Phase 0 verification gate. Mobile + Plugin Marketplace UI
remain deferred.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added PR title validation workflow for automated commit message
compliance checks.

* **Bug Fixes**
  * Enhanced error diagnostics in encryption operations.
* Added pre-flight checks to release process to prevent failed
deployments.
  * Stricter artifact validation in builds.

* **Chores**
  * Updated GitHub Actions to latest stable versions.
  * Improved code formatting configuration and build scripts.
  * Adjusted Electron dependency version.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Why

v0.15.1 Build (run 27212685957) failed on linux because electron-builder
rejected the AppImage build: \`executableName contains invalid chars:
@readieddesktop\`. publish job (\`needs: build\`) was skipped, no
binaries reached the GitHub Release, v0.15.1 has been marked draft.

This brings the linux fix from #298 (already on develop) into main as a
cherry-pick so semantic-release can cut v0.15.2.

## Why not the original develop → main PR (#299)

I created a sync PR (#300) earlier to bring main's release-cycle commits
(CHANGELOG + version bump) back to develop. Squash-merging that sync PR
collapsed the merge ancestry — develop has main's content but not main's
commit history, so #299 stayed permanently BEHIND.

Cherry-picking the linux fix straight to main sidesteps that. After this
lands and Release cuts v0.15.2, the auto sync-develop job in build.yml
will bring the v0.15.2 release commits back to develop with proper
ancestry.

## Diff

\`apps/desktop/package.json\`: \`"executableName": "readied"\` added to
\`build.linux\`. Single line. mac+win already build cleanly because they
use \`productName\` ("Readied") and \`appId\` (\`app.readied.desktop\`)
respectively.

## Expected Build flow

semantic-release reads main's commit log since v0.15.1:
- \`fix(desktop): set linux.executableName for AppImage build (#298)\` →
patch bump

→ v0.15.2 cut as draft → Build runs on mac/win/linux → all 3 publish to
draft → \`publish\` job undrafts → \`sync-develop\` PRs main → develop.
## Summary

Release PR: `develop` → `main`. Contains one user-facing fix since
v0.15.2:

- **fix(desktop): prevent 'Object has been destroyed' and 'db not open'
crashes** (#303) — guards window and database lifecycle so IPC handlers
don't touch a destroyed `BrowserWindow` or a closed SQLite handle during
shutdown/reload.

semantic-release should cut **v0.15.3** (patch bump from the `fix:`
commit).

## Release checklist (after merge)

1. Merge this PR into `main`
2. Click **Run workflow** on the **Release** action
(`workflow_dispatch`)
3. semantic-release bumps version, tags, creates draft GitHub Release
4. Tag push triggers Build workflow (mac/win/linux)
5. All builds green → release undrafted → electron-updater picks it up
6. Auto-PR syncs `main` back to `develop`

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Keep develop for product and CI. Take main's CHANGELOG so 0.15.3 is
not dropped. This branch is the promotion head — merge to main with
a merge commit, never squash.
Release runs on every push to `main`. No PAT, no **Run workflow**.

`feat` / `fix` since `v0.15.3` will cut **0.16.0**. Build starts from
`workflow_run` (must already be on develop — merge that PR first).

**Do not squash the previous promotion.** This PR is a `ci:` fix and can
squash.

See `docs/RELEASE.md`.
The repo is \`dripnex/app\`. semantic-release compared that to
\`dripnex/readide\` in package.json and aborted. This is why the first
automatic Release failed even though the bot can push.

Merging this to main retriggers Release and should cut 0.16.0.
Dry-run already announced 0.16.0, then our grep matched the same phrase
inside generated notes and skipped the actual release. Tightened the
match.
main is protected (PR + status checks). The git plugin tried to push the
version bump and got GH013. Tags only; binaries get the version in the
Build job.
Resolve conflicts so develop (#567 Settings plugin install) can land on
main with the existing semantic-release pipeline. Keep main's tag-without
bump-commit behavior and dripnex/app repo name.

Co-authored-by:  Tomás Maritano <tomymaritano@gmail.com>
Includes #567 Settings plugin install plus main's release-pipeline fixes (#537/#539/#540). Do not squash.
@github-actions github-actions Bot added dependencies Pull requests that update a dependency file ci app:desktop labels Aug 22, 2026
@github-actions
github-actions Bot enabled auto-merge (squash) August 22, 2026 21:49
@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@tomymaritano, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 58 minutes

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 21bc90e0-985c-4db3-bf39-a705761a8ced

📥 Commits

Reviewing files that changed from the base of the PR and between f1e450e and 52d4df7.

📒 Files selected for processing (9)
  • .github/workflows/release.yml
  • CLAUDE.md
  • CONTRIBUTING.md
  • README.md
  • apps/desktop/RELEASES.md
  • apps/desktop/package.json
  • docs/RELEASE.md
  • package.json
  • release.config.js

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions
github-actions Bot merged commit e9ad3ec into develop Aug 22, 2026
16 checks passed
github-actions Bot added a commit that referenced this pull request Aug 22, 2026
Establishes `main` as an ancestor of `develop` so the promotion PR #571
can satisfy `main`'s up-to-date requirement.

**This must be merged with a merge commit, not squashed.** #578 squashed
the same content and that is exactly why it did not work: a squash
replays the changes as a new commit, so `main`'s commits never become
ancestors of `develop` and #571 stayed BEHIND. `git merge-base
--is-ancestor origin/main origin/develop` still failed after it.

`git diff origin/develop` on this branch is **empty** — #578 already
brought the content across. This PR carries ancestry only.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
github-actions Bot pushed a commit that referenced this pull request Aug 22, 2026
## Problem

#566 made every non-draft PR into `develop` squash auto-merge. That
breaks the release flow, and I found it by hitting it twice.

A back-merge exists for its **topology**, not its content. Squashing one
replays `main`'s changes as a fresh commit, so `main` never becomes an
ancestor of `develop`. `main`'s ruleset has
`strict_required_status_checks_policy: true`, so the promotion PR #571
stays `BEHIND` forever.

Both #578 and #579 hit it. On #579 I explicitly ran `gh pr merge --auto
--merge`, and the workflow re-armed auto-merge with `--squash` and
overrode it. The resulting commit `00ac6d5` has a single parent, and
`git merge-base --is-ancestor origin/main origin/develop` still fails.

## Fix

Skip PRs whose head branch starts with `chore/backmerge-`. Those get
merged by hand with a merge commit.

Also documents the back-merge recipe in `docs/RELEASE.md` next to the
promotion steps, since the failure mode is silent — the PR just sits at
BEHIND with every check green and no explanation.

## Not changed

The auto-merge policy itself, permissions, and the
concurrency/live-recheck hardening from earlier in #566 all stay as they
are. This is one `if:` clause plus docs.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 0.17.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

tomymaritano added a commit that referenced this pull request Aug 23, 2026
…585)

## Context

I enabled **Allow GitHub Actions to create and approve pull requests**
at the org and repo level, which unblocked `sync-develop` — it had been
failing with `GitHub Actions is not permitted to create or approve pull
requests` since forever. Re-running it against the v0.17.0 build now
succeeds.

But it immediately produced #584, which **cannot merge**.

## The problem

`sync-develop` opened a `develop ← main` PR. That shape deadlocks:
`develop` requires the head branch to be up to date, and `main` falls
behind `develop` the moment anything lands after the release — #582 and
#583 did exactly that. #584 has been sitting at `BEHIND` since it was
created. I hit the same wall by hand earlier tonight with #577.

Even if it could merge, the squash auto-merge would replay the content
as a fresh commit and **not** establish ancestry, which is the entire
point of a back-merge. That is what went wrong in #578 and #579.

## The fix

Push a branch descended from `develop` with `main` merged into it, then
open that against `develop`. Same thing that finally worked manually in
#581.

- Named `chore/backmerge-main-<tag>`, which matches the exclusion added
in #580 so `automerge.yml` leaves it alone.
- The job arms auto-merge itself with `--merge`, so it lands as a merge
commit.
- Exits early when `main` is already an ancestor, or when the branch
already exists, so re-runs are safe.

## Follow-up

#584 should be closed — this replaces it. The next release will exercise
this path for real.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app:desktop ci dependencies Pull requests that update a dependency file released size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants