PA BRAT Beta Release
SkillDev toolsManage Personal Assistant BRAT beta prerelease workflow. Use when the user asks to prepare, explain, validate, publish, or follow up a BRAT beta/prerelease build; asks about beta branch management; wants to move master-integrated work into BRAT testing; or needs the work branch to master to beta packaging or stable release process.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the PA BRAT Beta Release skill
What this skill tells your AI
The instructions your AI receives, as published by edonyzpc/personal-assistant in .agents/skills/pa-brat-beta-release/SKILL.md and read by ahel’s review.
Use this skill for Personal Assistant prerelease builds intended for BRAT beta
testers. The detailed repo SOP is docs/operations/brat-beta-testing.md; read it before
changing the workflow or executing a beta release.
Branch Model
Keep these roles distinct:
master: the sole integration and release-source branch. All accepted runtime code, tests, research/design docs, governance and release-tooling changes land here through a PR merge or an explicitly authorized direct commit.- Work branch: optional isolation/review transport. It has no beta or stable
release authority; accepted commits must enter
masterfirst. - Beta packaging branch: temporary branch named exactly
beta/<target-version>, created from the exact verifiedmasterHEAD.
A beta branch may contain only the generated [release] vX.Y.Z-beta.N packaging
commit and tag above master. Do not add feature/fix/docs commits there, and do
not merge or rebase the beta release commit back to master.
Safety Boundaries
- Treat
make release,make publish, tag creation, branch pushes, GitHub Releases, and sending BRAT tester instructions to others as release-side effects. - Do not publish, push branches, push tags, create GitHub Releases, or hand off BRAT tester instructions/URLs to others unless the user clearly asks for that action in the current turn. Reporting a verified published URL to the user in this conversation is read-only and does not require separate authorization.
- If the target version,
masterbaseline, or baseline tag is ambiguous, stop and ask before creating release state. - Prefer
make release-dry-run VERSION=x.y.z-beta.Nbefore any local release commit/tag.
Preparation Workflow
Choose the lane from the user's request:
- Explain/status/inspect: read local state, the runbook, and remote status when needed. Do not fetch, switch, pull, create branches, or write release state.
- Dry run only: inspect
scripts/release.mjsand run the existing dry-run command when its prerequisites already hold. It writes no release files, but currently requires a clean matchingbeta/<version>branch atmasterHEAD and a tagged baseline. Report unmet prerequisites; a dry-run request alone does not authorize creating branches or changing the checkout to satisfy them. - Prepare: perform the workflow below within the requested scope. Preparing the baseline/packaging branch does not authorize a release commit, tag, or push.
When asked to prepare a beta:
- Inspect current state:
git status --short --branchgit branch --show-currentnode -p "require('./package.json').version"git tag --sort=-v:refname | sed -n '1,20p'Ifgit status --short --branchshows any uncommitted changes, stop before switching or creating beta branches. Ask the user to commit, stash, clean, or explicitly confirm the intended dirty-worktree scope.
- Confirm all accepted work is already in
master. A work branch with commits not reachable frommastermust be merged by PR or authorized direct commit before beta preparation continues. - Refresh and verify the local integration baseline:
git fetch origin mastergit switch mastergit pull --ff-only- verify
git rev-parse masterequalsgit rev-parse origin/master - run the validation gate appropriate to the change
If local
masteris ahead, publishing beta must stop until the user explicitly authorizes pushingmasterand the two refs match.
- Choose the next prerelease version, usually
<next-stable>-beta.N. - Create the packaging branch from the exact current
masterHEAD:git switch -c beta/<target-version>- verify
git rev-parse HEADequalsgit rev-parse master
- Run or recommend:
make release-dry-run VERSION=<target-version>make release VERSION=<target-version>only when the user asked to create local release state.make publish VERSION=<target-version>only when the user asked to publish and the publish preflight below passes.
The release command uses the release-critical documentation gate. Full
docs:check lifecycle/status findings remain a separate CI and maintenance
signal and must not block beta or stable publication.
scripts/release.mjs enforces both the matching beta/<target-version> name and
the pre-release HEAD == master source invariant.
Publish Preflight
Before make publish VERSION=<target-version>, verify:
git status --short
git branch --show-current
node -p "require('./package.json').version"
git rev-parse <target-version>^{}
git rev-parse HEAD
git rev-parse HEAD^
git rev-parse master
Expected:
git status --shortis empty.- For prereleases, the current branch is exactly
beta/<target-version>. - For stable releases, the current branch is exactly
master. package.jsonversion equals<target-version>.git rev-parse <target-version>^{}equalsgit rev-parse HEAD.- For prereleases,
HEAD^equalsmasterand the release commit is the only commit present on beta but not onmaster. masterequalsorigin/master; otherwise the remote workflow will reject the prerelease source even if local checks pass.
scripts/publish-release.mjs also checks package/manifest versions, the exact
generated packaging-file set and commit subject, queries live origin/master,
then pushes the beta branch + tag atomically. If master advances normally
after the live preflight, the workflow accepts the verified source parent as an
ancestor; divergent/rewritten master history is rejected.
Publish Verification
After publish, verify the GitHub prerelease before claiming BRAT readiness:
gh release view <target-version> \
--json tagName,name,isPrerelease,assets \
--jq '{tagName,name,isPrerelease,assets:[.assets[].name]}'
Expected:
tagNameandnameequal<target-version>.isPrereleaseistrue.- Assets include
main.js,manifest.json, andstyles.css. - The released
manifest.jsonasset hasversionequal to<target-version>.
For release workflow failures, inspect GitHub Actions before giving testers the BRAT URL.
BRAT Smoke
Do not claim BRAT validation unless the plugin was installed or updated through BRAT from the published GitHub Release.
Minimum evidence:
- GitHub Release object and asset verification.
- Desktop Obsidian install/update through BRAT.
- Plugin enable/reload and Settings open.
- One Chat path and one Memory/Pagelet path relevant to the beta scope.
- Mobile BRAT install/update when the change touches mobile-visible UI, storage, or platform behavior.
For app smoke, use obsidian-test-vault-smoke; for iOS, use
obsidian-ios-real-device-smoke.
Stable Graduation
When beta blockers are closed:
- Confirm every accepted beta fix is already on
master; fixes may enter by PR or authorized direct commit, never only on a beta branch. - Verify
masteragain. Do not merge beta release commits or prerelease metadata into it. - Cut the stable release directly from
master:git switch mastergit pull --ff-onlygit branch --show-currentgit status --shortmake release-dry-run VERSION=<stable-version>make release VERSION=<stable-version>make publish VERSION=<stable-version>only after explicit publish intent.
Stable changelog generation ignores prerelease tags, so the stable release notes should cover the full range from the previous stable tag.
Recovery
- If a beta is bad, put the fix on
masterfirst. If no published tag exists, recreate the packaging branch from that updatedmasteronly with explicit authority to replace local release state. - If a beta is already published, publish the next beta tag such as
2.9.0-beta.3from updatedmaster; do not rewrite tags without explicit maintainer approval. - If
make release-dry-runreports the current package version is untagged, stop and resolve the baseline tag before proceeding.
Signals
- GitHub stars
- 149
- Forks
- 8
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
pa-brat-beta-release- Source
- github.com/edonyzpc/personal-assistant