Skip to content

revize release skills - #836

Open
ozgunozerk wants to merge 1 commit into
mainfrom
skill-revision
Open

revize release skills#836
ozgunozerk wants to merge 1 commit into
mainfrom
skill-revision

Conversation

@ozgunozerk

@ozgunozerk ozgunozerk commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

Revision of skills to be more compatible with Dev3

PR Checklist

Summary by CodeRabbit

  • New Features

    • Added a guided release workflow with preflight checks, confirmation steps, release tracking, and final artifact links.
    • Added a dedicated version-bump workflow for updating project versions and lockfiles.
  • Documentation

    • Updated contributor and project guidance to reflect the new release and version-bump workflows.
    • Corrected references to code-quality documentation.

@ozgunozerk
ozgunozerk requested review from bidzyyys and brozorec August 7, 2026 17:21
@ozgunozerk ozgunozerk self-assigned this Aug 7, 2026
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The PR adds a gated release command for coordinated library, Wizard, and documentation releases. It adds the standalone version-bump command and updates repository guidance to reference the new command paths.

Changes

Release workflow

Layer / File(s) Summary
Command surface and references
.claude/commands/release.md, .claude/commands/version-bump.md, CLAUDE.md, CONTRIBUTING.md
Adds the release command, renames release-prep to version-bump, and updates command references.
Release inputs and gates
.claude/commands/release.md
Defines required inputs, repository preflight checks, diff collection, confirmation gates, and the release checklist.
Release execution steps
.claude/commands/release.md
Defines version, audit, Wizard, documentation, branch, and optional release-note workflows.
Maintenance and completion
.claude/commands/release.md
Adds skill-maintenance checks and requires final checklist, artifact links, and remaining manual actions.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ReleaseCommand
  participant LibraryRepository
  participant ContractsWizardRepository
  participant DocsRepository
  participant GitHub
  participant Netlify
  ReleaseCommand->>LibraryRepository: run version and audit checks
  ReleaseCommand->>ContractsWizardRepository: discover and synchronize Wizard changes
  ReleaseCommand->>DocsRepository: assess and prepare documentation updates
  ReleaseCommand->>GitHub: create release branch and optional draft release
  GitHub->>Netlify: trigger publishing after branch push
Loading

Possibly related PRs

Suggested reviewers: brozorec

Poem

A rabbit checks each release gate,
With tidy steps and plans to state.
Version leaves, docs follow near,
Draft notes hop to GitHub clear.
The checklist rests—no tasks unclear.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description gives a brief summary but omits the issue reference, change context, and PR checklist items required by the template. Add the issue reference, describe the changes and context, and complete the Tests and Documentation checklist items.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title identifies the release-skill revision and matches the main changes, although it uses an informal spelling.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch skill-revision

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

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/commands/release.md:
- Line 52: Update the checklist code fence in the release instructions to
declare the text language, resolving the MD040 unlabeled-fence violation while
preserving the checklist content.
- Line 48: Update the release workflow around the preflight evidence and
publication steps to require an explicit release SHA, use that immutable commit
for all tag comparisons and diff evidence, and revalidate that the SHA is still
the intended current base after the plan gate. Change the release branch
creation in the main publication flow to start from the validated SHA rather
than newly pulled main, preserving the release-v<X.Y.Z> naming.
- Around line 65-71: Enforce a complete version-bump safety gate in both command
flows: in .claude/commands/release.md lines 65-71, require confirmation of the
full README, Cargo.toml, and Cargo.lock edit plan before invoking version-bump;
in .claude/commands/version-bump.md lines 2-13, add a clean-working-tree
preflight and require explicit plan confirmation before applying any changes,
including Cargo.lock updates.
- Around line 118-124: Add the Dev3 repository to the release inputs in the plan
before the compatibility sweep: specify its local checkout path, branch
convention, and fallback URLs alongside the existing repository entries, so the
`languages/soroban/` pointer skills can be located and fetched.
- Around line 107-111: Update the release workflow’s Plan and Apply steps to
define new_ref as the exact commit SHA confirmed in Step 6, then use it in the
contributor commands and pass --target <new_ref> to gh release create. Define
<draft> as the generated notes-file path before referencing it with
--notes-file.
- Around line 82-89: Update the Wizard PR workflow around the relevance check
and merge plan to identify the PR corresponding to the current release by
matching its release version or branch, rather than selecting from the broad
search results. Before offering gh pr merge, verify the matched PR’s files and
CI status, while preserving the requirement for explicit merge confirmation.

In `@CLAUDE.md`:
- Around line 202-205: Update the `/release` summary in CLAUDE.md to include
auditing and updating the release skills as part of its scope, matching
skill-maintenance step 8 in `.claude/commands/release.md` while preserving the
existing checklist description.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 78b3c6ca-0316-4618-aa8e-ff645480d7cf

📥 Commits

Reviewing files that changed from the base of the PR and between 9b5ed96 and c58f196.

📒 Files selected for processing (4)
  • .claude/commands/release.md
  • .claude/commands/version-bump.md
  • CLAUDE.md
  • CONTRIBUTING.md

2. The **previous release tag** to diff against (e.g., `v0.8.0`) — verify it exists with `git tag`
3. Where the **final audit report PDF** is (a local path), or "not available yet"

Then run a preflight in stellar-contracts: `git status` is clean, `git fetch --tags` done, and note which branch you're on. Compute the release diff once (`git log <prev_tag>..HEAD --oneline`, `git diff <prev_tag>..HEAD --stat`) and reuse it as evidence in the gates below.

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.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Bind release evidence and publication to one immutable commit.

Line 48 computes evidence from the current HEAD, but line 102 later pulls the current main and creates the publish branch. These refs can differ. New commits can land after the gates, so the workflow can publish code that was not reviewed. Require an explicit release SHA, compute all diffs against it, verify it remains current after the plan gate, and create release-v<X.Y.Z> from that SHA.

Also applies to: 100-102

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/commands/release.md at line 48, Update the release workflow around
the preflight evidence and publication steps to require an explicit release SHA,
use that immutable commit for all tag comparisons and diff evidence, and
revalidate that the SHA is still the intended current base after the plan gate.
Change the release branch creation in the main publication flow to start from
the validated SHA rather than newly pulled main, preserving the release-v<X.Y.Z>
naming.


## Checklist (tracking template)

```

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.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a language to the checklist code fence.

The unlabeled fence triggers markdownlint MD040. Use text for this checklist block.

🧰 Tools
🪛 markdownlint-cli2 (0.23.2)

[warning] 52-52: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/commands/release.md at line 52, Update the checklist code fence in
the release instructions to declare the text language, resolving the MD040
unlabeled-fence violation while preserving the checklist content.

Source: Linters/SAST tools

Comment on lines +65 to +71
### 1 + 2. READMEs, version bump, build

These two checklist items are already covered by the `version-bump` skill in this repo.

- **Relevance check**: always needed for a release — but confirm the version number one more time before starting.
- **Plan / Apply**: invoke the `version-bump` skill (`.claude/commands/version-bump.md`) and follow it. Keep the Gate Pattern inside it too: present the list of README edits it wants to make before making them.
- Done when: `cargo build` passes, `Cargo.lock` reflects the new version, and `grep -rn '"=OLD_VERSION"' --include='*.md' --include='Cargo.toml'` comes back clean.

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.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Enforce one complete safety gate for every version bump.

The release command delegates to version-bump, while the standalone command permits direct edits without a clean-tree check or full plan confirmation. This can mix uncommitted work with release changes and can modify Cargo.lock without approval.

  • .claude/commands/release.md#L65-L71: require confirmation for the complete README, Cargo.toml, and Cargo.lock plan before delegation.
  • .claude/commands/version-bump.md#L2-L13: add the clean-tree preflight and plan/apply gate for standalone execution.
📍 Affects 2 files
  • .claude/commands/release.md#L65-L71 (this comment)
  • .claude/commands/version-bump.md#L2-L13
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/commands/release.md around lines 65 - 71, Enforce a complete
version-bump safety gate in both command flows: in .claude/commands/release.md
lines 65-71, require confirmation of the full README, Cargo.toml, and Cargo.lock
edit plan before invoking version-bump; in .claude/commands/version-bump.md
lines 2-13, add a clean-working-tree preflight and require explicit plan
confirmation before applying any changes, including Cargo.lock updates.

Comment on lines +82 to +89
- **Relevance check**: two things to check, in order:
1. Is there already an open Wizard PR for this release? Check with:
`gh pr list --repo OpenZeppelin/contracts-wizard --state open --search "stellar"`
2. If no PR exists — does this release even need Wizard changes? Scan the release diff for changes to public traits, function signatures, or new user-facing contracts that the Wizard generates code for (`packages/core/stellar` in contracts-wizard). Internal-only changes need no Wizard update.
- **Plan**:
- If an open PR exists: summarize the PR (title, files touched, CI status) and ask whether to merge it now (`gh pr merge`). Merging is outward-facing — never merge without explicit confirmation.
- If no PR exists but changes are needed: follow the wizard sync skill (`.claude/skills/stellar-release-update/SKILL.md` in the contracts-wizard repo — see the companion table). Present its upstream-change analysis and update plan as the gate before touching wizard code.
- **Apply**: merge the PR, or implement the wizard changes and open a PR, per the confirmed plan.

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.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -eu

printf '%s\n' '--- target file metadata ---'
wc -l .claude/commands/release.md
printf '%s\n' '--- target section ---'
sed -n '1,150p' .claude/commands/release.md
printf '%s\n' '--- related references ---'
rg -n -i --glob '!node_modules' --glob '!dist' \
  'Wizard PR|contracts-wizard|gh pr list|stellar-release-update|release version|release branch' \
  .claude README.md 2>/dev/null || true
printf '%s\n' '--- tracked candidate files ---'
git ls-files | rg '(^|/)(release\.md|SKILL\.md)$|contracts-wizard|wizard' | head -200

Repository: OpenZeppelin/stellar-contracts

Length of output: 14151


🏁 Script executed:

#!/bin/bash
set -eu

printf '%s\n' '--- gh availability ---'
command -v gh || true
printf '%s\n' '--- broad Wizard PR search ---'
if command -v gh >/dev/null 2>&1; then
  gh pr list \
    --repo OpenZeppelin/contracts-wizard \
    --state open \
    --search "stellar" \
    --limit 100 \
    --json number,title,headRefName,baseRefName,url,files,statusCheckRollup
else
  printf '%s\n' 'gh is unavailable'
fi
printf '%s\n' '--- Wizard sync skill ---'
if command -v gh >/dev/null 2>&1; then
  gh api repos/OpenZeppelin/contracts-wizard/contents/.claude/skills/stellar-release-update/SKILL.md \
    --jq '.content' | base64 --decode | sed -n '1,240p'
else
  printf '%s\n' 'gh is unavailable'
fi

Repository: OpenZeppelin/stellar-contracts

Length of output: 50387


Match the Wizard PR to this release before merging.

The broad search returns multiple open PRs. Match the PR by release version or branch, then verify its files and CI status before offering gh pr merge.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/commands/release.md around lines 82 - 89, Update the Wizard PR
workflow around the relevance check and merge plan to identify the PR
corresponding to the current release by matching its release version or branch,
rather than selecting from the broad search results. Before offering gh pr
merge, verify the matched PR’s files and CI status, while preserving the
requirement for explicit merge confirmation.

Comment on lines +107 to +111
- **Plan**: gather contributors for the release range:
- `git log <prev_tag>..<new_ref> --format='%an|%ae' | sort -u` for names
- prefer GitHub handles: `gh api repos/OpenZeppelin/stellar-contracts/compare/<prev_tag>...<new_ref> --jq '.commits[].author.login' | sort -u`
- Draft the notes: highlights, breaking changes, new modules, audit reference, and a "Contributors" section thanking each handle. Show the full draft.
- **Apply**: on confirmation, create/update the GitHub release draft: `gh release create v<X.Y.Z> --draft --title "v<X.Y.Z>" --notes-file <draft>` (or `gh release edit` if it exists). Leave it as a draft unless the user explicitly asks to publish.

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.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -eu

printf '%s\n' '--- file inventory ---'
git ls-files '.claude/commands/release.md' '.claude/commands' '.github' 'README.md' | sed -n '1,160p'

printf '%s\n' '--- release.md size and outline ---'
wc -l .claude/commands/release.md
if command -v ast-grep >/dev/null 2>&1; then
  ast-grep outline .claude/commands/release.md
fi

printf '%s\n' '--- release.md lines 1-180 ---'
cat -n .claude/commands/release.md | sed -n '1,180p'

printf '%s\n' '--- relevant references ---'
rg -n -S --hidden --glob '!.git' \
  'new_ref|<draft>|gh release (create|edit)|--target|prev_tag|release draft|confirmed release' \
  .claude .github README.md 2>/dev/null || true

Repository: OpenZeppelin/stellar-contracts

Length of output: 14760


🌐 Web query:

GitHub CLI gh release create documentation --target default branch tag creation --notes-file

💡 Result:

The GitHub CLI command gh release create is used to create a new release for a repository [1][2]. Regarding the specific behaviors you mentioned: --target The --target flag specifies the branch or full commit SHA that the release should be based on [1][3]. By default, if you do not provide a --target, the release is based on the default branch of the repository (e.g., main) [1][4]. Tag Creation If the git tag you specify in the command does not already exist, the GitHub CLI will automatically create one for you [1][2]. This automatic tag is created from the latest state of the target branch or commit SHA [1][5]. If the tag already exists, the release will be associated with that existing tag [6]. To fetch any newly created tags to your local repository after running the command, you should execute git fetch --tags origin [1][2]. --notes-file The -F or --notes-file flag allows you to read the release notes from a local file [1][2]. You can also pass "-" to this flag to read the release notes from standard input [2][5]. Example usage: gh release create v1.0.0 --target main -F release-notes.md In this example, the command creates a release for tag v1.0.0 based on the main branch, using the contents of release-notes.md as the release notes [1][2]. If v1.0.0 did not exist, it would be created automatically from the latest commit on main [1][5].

Citations:


Pin the GitHub release to the confirmed release commit.

Define new_ref as the exact commit SHA selected in Step 6. Use it in the contributor commands and pass --target <new_ref> to gh release create; otherwise, a missing tag is created from the default branch. Define <draft> as the generated notes-file path before using --notes-file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/commands/release.md around lines 107 - 111, Update the release
workflow’s Plan and Apply steps to define new_ref as the exact commit SHA
confirmed in Step 6, then use it in the contributor commands and pass --target
<new_ref> to gh release create. Define <draft> as the generated notes-file path
before referencing it with --notes-file.

Comment on lines +118 to +124
- **Plan**: read each skill in the family and diff it against the reality you just observed:
- this repo: `.claude/commands/release.md` (this file) and `.claude/commands/version-bump.md` — paths, grep patterns, the audit filename pattern, the release-branch convention, line-number hints
- contracts-wizard: `.claude/skills/stellar-release-update/SKILL.md` — key-file table, commands, version-file locations
- docs repo: `.claude/skills/update-stellar-docs.md` — content paths, navigation file, build/check commands
- Dev3 repo: the pointer skills under `languages/soroban/` (`soroban-release`, `soroban-update-wizard`, `soroban-update-external-docs`) — canonical URLs, default-branch names, repo paths
Look specifically for: hardcoded version numbers or example tags that drifted, stale file paths, renamed traits/commands, changed default branches, changed naming patterns, and steps this run skipped or added. Present the proposed skill edits per file.
- **Apply**: make the confirmed edits in each repo's local checkout. Edits to skills in other repos go up as their own small PRs (or ride along with that repo's release-related PR) — state which route you took for each.

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.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Add the Dev3 repository to the release inputs.

The maintenance sweep requires files under languages/soroban/, but the repository table lists only stellar-contracts, contracts-wizard, and docs. The command cannot locate or fetch the Dev3 skills. Add the Dev3 checkout path, branch, and fallback URLs before relying on this compatibility sweep.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/commands/release.md around lines 118 - 124, Add the Dev3 repository
to the release inputs in the plan before the compatibility sweep: specify its
local checkout path, branch convention, and fallback URLs alongside the existing
repository entries, so the `languages/soroban/` pointer skills can be located
and fetched.

Comment thread CLAUDE.md
Comment on lines +202 to +205
- `/release` — the full release checklist end to end: READMEs, version
bump, audit report, Wizard PR, docs site, release branch, release
notes. Confirms with the user before every step. See
`.claude/commands/release.md`.

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.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Include skill maintenance in the /release scope.

.claude/commands/release.md includes skill-maintenance step 8, but this summary ends at release notes. State that /release also audits and updates the release skills so the documented scope matches the command.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CLAUDE.md` around lines 202 - 205, Update the `/release` summary in CLAUDE.md
to include auditing and updating the release skills as part of its scope,
matching skill-maintenance step 8 in `.claude/commands/release.md` while
preserving the existing checklist description.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant