Skip to content

Create promote-beta-to-stable skill#2955

Merged
wwwillchen merged 2 commits intodyad-sh:mainfrom
wwwillchen-bot:release-0.39.x
Mar 9, 2026
Merged

Create promote-beta-to-stable skill#2955
wwwillchen merged 2 commits intodyad-sh:mainfrom
wwwillchen-bot:release-0.39.x

Conversation

@wwwillchen
Copy link
Copy Markdown
Collaborator

@wwwillchen wwwillchen commented Mar 9, 2026

Summary

  • Bump version to v0.39.0
  • Add promote-beta-to-stable skill for automating future releases

Test plan

  • CI passes
  • Version number is correct in package.json

πŸ€– Generated with Claude Code


Open with Devin

@wwwillchen
Copy link
Copy Markdown
Collaborator Author

@BugBot run

@wwwillchen wwwillchen changed the title Release v0.39.0 Create promote-beta-to-stable skill Mar 9, 2026
@wwwillchen wwwillchen merged commit 33393f6 into dyad-sh:main Mar 9, 2026
9 of 11 checks passed
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request focuses on enhancing the release automation capabilities by adding a new skill that streamlines the promotion of beta versions to stable releases. This new skill encapsulates the entire process, from identifying the latest pre-release to creating and pushing the stable release branch, thereby reducing manual effort and potential errors in the release workflow. Concurrently, the project's package.json has been updated to reflect the new stable version.

Highlights

  • New Skill Added: Introduced a new skill, /dyad:promote-beta-to-stable, to automate the process of promoting the latest pre-release to a stable release.
  • Version Bump: Updated the project version in package.json from 0.39.0-beta.1 to 0.39.0.
Changelog
  • .claude/README.md
    • Added promote-beta-to-stable skill to the list of available Claude skills.
  • .claude/skills/promote-beta-to-stable/SKILL.md
    • Introduced a new skill definition for promote-beta-to-stable, outlining the automated process for creating release branches, bumping versions, and pushing changes.
  • package.json
    • Bumped the project version from 0.39.0-beta.1 to 0.39.0.
Activity
  • The pull request was generated using Claude Code.
  • CI checks have passed, ensuring code quality and functionality.
  • The version number in package.json was confirmed to be correct as part of the test plan.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with πŸ‘ and πŸ‘Ž on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is ON, but it could not run because Privacy Mode (Legacy) is turned on. To enable Bugbot Autofix, switch your privacy mode in the Cursor dashboard.

{
"name": "dyad",
"version": "0.39.0-beta.1",
"version": "0.39.0",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

package-lock.json version not updated to match package.json

Medium Severity

The version in package.json was bumped to 0.39.0, but package-lock.json still contains 0.39.0-beta.1 (at lines 3 and 9). This version mismatch means the lockfile is out of sync with the manifest, which can cause inconsistencies in build tooling or CI that reads the version from the lockfile.

Fix in CursorΒ Fix in Web

Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

βœ… Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 3 additional findings.

Open in Devin Review

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 9, 2026

Greptile Summary

This PR bumps package.json from 0.39.0-beta.1 to the stable 0.39.0 and introduces a new Claude Code skill (promote-beta-to-stable) to automate future stable releases by branching from a pre-release tag, stripping the pre-release suffix from the version, and pushing a release branch to upstream.

Key changes:

  • package.json: Version bumped from 0.39.0-beta.1 β†’ 0.39.0 βœ…
  • .claude/README.md: New skill entry added to the reference table βœ…
  • .claude/skills/promote-beta-to-stable/SKILL.md: New automation skill β€” contains a bug in step 2 where git rev-parse <tag> is used to resolve the tag to a SHA. GitHub releases create annotated tags, so this command returns the tag object SHA rather than the underlying commit SHA. When that SHA is passed to git checkout -b in step 4, Git will fail with fatal: reference is not a tree. The fix is to use git rev-parse <tag>^{} to dereference the tag to its commit SHA.

Confidence Score: 4/5

  • Safe to merge β€” the version bump is correct and the skill bug only affects future automated runs, not this release.
  • The core release change (version bump in package.json) is straightforward and correct. The only issue is in the new automation skill, where git rev-parse <tag> will return a tag-object SHA instead of a commit SHA for GitHub's annotated tags, causing the skill to fail when next invoked. This doesn't block merging v0.39.0 itself, but the skill will need a fix before it can be reliably used.
  • .claude/skills/promote-beta-to-stable/SKILL.md β€” the git rev-parse command in step 2 needs ^{} to dereference annotated tags to their commit SHA.

Important Files Changed

Filename Overview
.claude/skills/promote-beta-to-stable/SKILL.md New skill for automating stable releases. Contains a logic bug where git rev-parse <tag> returns the tag object SHA for annotated tags (used by GitHub releases), which will cause git checkout -b to fail in step 4. Should use git rev-parse <tag>^{} to dereference to the commit SHA.
package.json Version bumped from 0.39.0-beta.1 to 0.39.0 β€” correct stable release version, no issues.
.claude/README.md Added the new promote-beta-to-stable skill entry to the skills reference table. Documentation is accurate and consistent.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["/dyad:promote-beta-to-stable invoked"] --> B["gh release list\n--json tagName,isPrerelease"]
    B --> C{Pre-release found?}
    C -- No --> D[Report & stop]
    C -- Yes --> E["git fetch upstream --tags\ngit rev-parse &lt;tag&gt;\n⚠️ Returns tag object SHA\nfor annotated tags"]
    E --> F["Parse MAJOR.MINOR\nfrom tag name"]
    F --> G["git checkout -b release-MAJOR.MINOR.x &lt;sha&gt;\n⚠️ Fails if SHA is a tag object"]
    G --> H["Edit package.json\nStrip pre-release suffix"]
    H --> I["git add package.json\ngit commit -m 'Bump to vX.Y.Z'"]
    I --> J["git push upstream release-MAJOR.MINOR.x"]
    J --> K[Summarize results]
Loading

Last reviewed commit: 7630695


```
git fetch upstream --tags
git rev-parse <tag>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

git rev-parse <tag> returns the tag object SHA for annotated tags, not the commit SHA

GitHub releases always create annotated tags. For annotated tags, git rev-parse <tag> returns the SHA of the tag object, not the underlying commit. When that tag-object SHA is passed to git checkout -b in step 4, Git will fail with:

fatal: reference is not a tree: <tag-object-sha>

To fix, dereference the tag using ^{} to guarantee a commit SHA is returned:

Suggested change
git rev-parse <tag>
git rev-parse <tag>^{}

Alternatively, step 4 could use the tag name directly (git checkout -b release-MAJOR.MINOR.x <tag>) to let Git automatically dereference the annotated tag.

Prompt To Fix With AI
This is a comment left during a code review.
Path: .claude/skills/promote-beta-to-stable/SKILL.md
Line: 28

Comment:
`git rev-parse <tag>` returns the tag object SHA for annotated tags, not the commit SHA

GitHub releases always create annotated tags. For annotated tags, `git rev-parse <tag>` returns the SHA of the **tag object**, not the underlying commit. When that tag-object SHA is passed to `git checkout -b` in step 4, Git will fail with:

```
fatal: reference is not a tree: <tag-object-sha>
```

To fix, dereference the tag using `^{}` to guarantee a commit SHA is returned:

```suggestion
   git rev-parse <tag>^{}
```

Alternatively, step 4 could use the tag name directly (`git checkout -b release-MAJOR.MINOR.x <tag>`) to let Git automatically dereference the annotated tag.

How can I resolve this? If you propose a fix, please make it concise.

@dyad-assistant
Copy link
Copy Markdown
Contributor

dyad-assistant bot commented Mar 9, 2026

πŸ” Dyadbot Code Review Summary

Verdict: β›” NO - Do NOT merge

Reviewed by 3 independent agents: Correctness Expert, Code Health Expert, UX Wizard.

Issues Summary

Severity File Issue
πŸ”΄ HIGH package.json:3 package-lock.json not updated to match version bump
🟑 MEDIUM .claude/skills/promote-beta-to-stable/SKILL.md:47-56 Skill does not update package-lock.json after bumping
🟒 Low Priority Notes (2 items)
  • git rev-parse on annotated tags returns tag object, not commit - .claude/skills/promote-beta-to-stable/SKILL.md:27-29 - Use git rev-parse <tag>^{commit} or just pass the tag directly to git checkout -b
  • No handling for pre-existing release branch - .claude/skills/promote-beta-to-stable/SKILL.md:41-44 - git checkout -b will fail if branch already exists from a previous run
🚫 Dropped False Positives (0 items)

None β€” all flagged issues were confirmed valid.


Generated by Dyadbot multi-agent code review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new 'promote-beta-to-stable' skill to automate the release process and applies it by bumping the version to v0.39.0. The implementation of the skill is well-structured. I've added one suggestion to make the skill more robust by handling cases where a release branch already exists.

Note: Security Review has been skipped due to the limited scope of the PR.

Comment on lines +41 to +45
4. **Create the release branch from the pre-release commit:**

```
git checkout -b release-MAJOR.MINOR.x <commit-sha>
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The instruction git checkout -b ... will fail if the release branch (e.g., release-0.39.x) already exists. This is a likely scenario when promoting a patch release on an existing release line. To make the skill more robust, it should explicitly check for the branch's existence and abort if found.

Here is a suggested update for this step:

4. **Create the release branch from the pre-release commit:**

   First, check if the release branch already exists on `upstream`. If it does, report an error and stop.

git ls-remote --exit-code --heads upstream release-MAJOR.MINOR.x


If the command fails with exit code 2, the branch does not exist. Proceed to create it:

git checkout -b release-MAJOR.MINOR.x

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

βœ… Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Copy link
Copy Markdown
Contributor

@dyad-assistant dyad-assistant bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Multi-agent review: 2 issue(s) found

{
"name": "dyad",
"version": "0.39.0-beta.1",
"version": "0.39.0",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

πŸ”΄ HIGH | data-integrity

package-lock.json not updated to match version bump

package.json was bumped to 0.39.0 but package-lock.json still has 0.39.0-beta.1 (both in version and packages[""].version). This version mismatch can cause npm ci failures and inconsistent builds.

πŸ’‘ Suggestion: Run npm install --package-lock-only to regenerate the lockfile, then commit the updated package-lock.json.

- `1.2.0-beta.3` β†’ `1.2.0`

Use the Edit tool to make this change.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟑 MEDIUM | missing-step

Skill does not update package-lock.json after bumping package.json

Step 5 only edits package.json, but package-lock.json also contains the version string. Future runs of this skill will produce the same version mismatch bug seen in this PR.

πŸ’‘ Suggestion: Add a substep after editing package.json to run npm install --package-lock-only, and update step 6 to stage both files: git add package.json package-lock.json.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

πŸ’‘ Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7630695ea3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with πŸ‘.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

4. **Create the release branch from the pre-release commit:**

```
git checkout -b release-MAJOR.MINOR.x <commit-sha>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Handle existing release branch before checkout

Step 4 always runs git checkout -b release-MAJOR.MINOR.x <commit-sha>, but git checkout -h documents -b as β€œcreate and checkout a new branch,” so this fails whenever that release branch already exists (for example, promoting a second beta for the same MAJOR.MINOR line or rerunning after a partial failure). In those cases the skill aborts before the version bump and push, which breaks the intended autonomous release flow.

Useful? React with πŸ‘Β / πŸ‘Ž.

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 3 files

Confidence score: 4/5

  • This PR is likely safe to merge, with one moderate-risk workflow issue rather than a product-facing break.
  • In .claude/skills/promote-beta-to-stable/SKILL.md, using git checkout -b can fail when the release branch already exists, which may disrupt reruns or second beta promotions on the same release line.
  • Given the issue is severity 5/10 (confidence 8/10) and appears scoped to release process instructions, risk is real but limited in blast radius.
  • Pay close attention to .claude/skills/promote-beta-to-stable/SKILL.md - branch creation should handle pre-existing release branches to avoid promotion failures.
Prompt for AI agents (unresolved issues)

Check if these issues are valid β€” if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name=".claude/skills/promote-beta-to-stable/SKILL.md">

<violation number="1" location=".claude/skills/promote-beta-to-stable/SKILL.md:44">
P2: `git checkout -b` will fail if the release branch already exists (e.g., when promoting a second beta on the same release line, or rerunning after a partial failure). Consider checking for the branch's existence first, or using `git checkout -B` which resets the branch if it already exists.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

4. **Create the release branch from the pre-release commit:**

```
git checkout -b release-MAJOR.MINOR.x <commit-sha>
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot Mar 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: git checkout -b will fail if the release branch already exists (e.g., when promoting a second beta on the same release line, or rerunning after a partial failure). Consider checking for the branch's existence first, or using git checkout -B which resets the branch if it already exists.

Prompt for AI agents
Check if this issue is valid β€” if so, understand the root cause and fix it. At .claude/skills/promote-beta-to-stable/SKILL.md, line 44:

<comment>`git checkout -b` will fail if the release branch already exists (e.g., when promoting a second beta on the same release line, or rerunning after a partial failure). Consider checking for the branch's existence first, or using `git checkout -B` which resets the branch if it already exists.</comment>

<file context>
@@ -0,0 +1,78 @@
+4. **Create the release branch from the pre-release commit:**
+
+   ```
+   git checkout -b release-MAJOR.MINOR.x <commit-sha>
+   ```
+
</file context>
Fix with Cubic

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 9, 2026

🎭 Playwright Test Results

❌ Some tests failed

OS Passed Failed Flaky Skipped
🍎 macOS 379 1 3 122
πŸͺŸ Windows 381 5 5 122

Summary: 760 passed, 6 failed, 8 flaky, 244 skipped

Failed Tests

🍎 macOS

  • visual_editing.spec.ts > swap image via URL
    • TimeoutError: locator.click: Timeout 30000ms exceeded.

πŸͺŸ Windows

  • concurrent_chat.spec.ts > concurrent chat
    • Error: expect(locator).toBeVisible() failed
  • github.spec.ts > create and sync to new repo
    • Error: expect(locator).toHaveClass(expected) failed
  • github.spec.ts > create and sync to new repo - custom branch
    • TimeoutError: locator.click: Timeout 30000ms exceeded.
  • github.spec.ts > create repo with spaces in name - should normalize to hyphens
    • TimeoutError: page.waitForSelector: Timeout 5000ms exceeded.
  • github.spec.ts > create and sync to existing repo
    • Error: expect(locator).toMatchAriaSnapshot(expected) failed

πŸ“‹ Re-run Failing Tests (macOS)

Copy and paste to re-run all failing spec files locally:

npm run e2e \
  e2e-tests/visual_editing.spec.ts

⚠️ Flaky Tests

🍎 macOS

  • mcp.spec.ts > mcp - call calculator via http (passed after 1 retry)
  • setup_flow.spec.ts > Setup Flow > setup banner shows correct state when node.js is installed (passed after 1 retry)
  • smart_context_options.spec.ts > switching smart context mode saves the right setting (passed after 1 retry)

πŸͺŸ Windows

  • chat_tabs.spec.ts > right-click context menu: Close other tabs (passed after 2 retries)
  • context_manage.spec.ts > manage context - smart context (passed after 1 retry)
  • edit_code.spec.ts > edit code (passed after 2 retries)
  • github.spec.ts > create and sync to existing repo - custom branch (passed after 2 retries)
  • setup_flow.spec.ts > Setup Flow > setup banner shows correct state when node.js is installed (passed after 1 retry)

πŸ“Š View full report

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant