بنقرة واحدة
بنقرة واحدة
Query the local Postgres database of the active Aspire worktree via psql.
Apply a downstream brand to a PlatformPlatform fork. Edits one config file, drops in eight supplied logo assets, renames the solution and CLI to the new brand, and rotates UserSecretsId across every csproj. Skips all other source files. Use once per downstream fork after cloning, or to re-flip a brand later.
Stop the .NET Aspire AppHost and its Docker containers via the developer CLI. Defaults to the current worktree; supports stopping all worktrees or a specific base port.
Trigger only on explicit "ultra review" or "ultra-review".
Lint code via the developer CLI - backend (.NET via JetBrains inspectcode), frontend (oxlint), and the developer CLI itself.
Auto-format code via the developer CLI - backend (.NET via JetBrains cleanupcode), frontend (oxfmt + oxlint --fix), and the developer CLI itself.
Run in parallel (quick reads, not background):
git status - working tree stategit branch --show-current - local branchgit --no-pager log --format=%s --reverse $(git merge-base HEAD main)..HEAD - commits on the branchgit --no-pager diff main - full diffgit rev-parse @{u} 2>/dev/null - upstream presence (already pushed?)gh pr view --json number,url,state 2>/dev/null (only if upstream exists) - check if the branch already has an open pull requestEverything in this step starts in the background (run_in_background: true) so the workflow proceeds without waiting. Results are reconciled in STEP 10.
Skip anything already green this session. Only run what's genuinely uncertain.
When validation IS needed:
Run build first:
build (no flags - covers backend AND frontend; backend changes can break the frontend build via API contracts)build --frontendbuild --cliAfter build, in parallel (with --no-build where applicable):
aspire-restart - service / Aspire wiring changedformat --<target>, lint --<target> - for each target whose code changedtest --no-build - backend changee2e - frontend or shared E2E-covered code changed; use --smoke for low-impact changes (judgment)Use judgment to decide which target a file belongs to (e.g. project / manifest / lock files affect their owning build, even when the extension isn't obvious). Each item runs only if needed and not already green.
Three checks - all read-only at this stage; renames happen in STEP 8.
worktree- prefix. Local-only convention; never push it.fix-login-bug whose commits do a refactor), draft a new name.If either check 1 or check 3 fires, stash the proposed new name; STEP 4 will ask the user to confirm.
Ask everything upfront so the user doesn't wait through slow research/drafting just to be prompted at the end. Single AskUserQuestion call, up to four questions:
Enhancement, Bug, Deploy to Staging.[ ] item from .github/PULL_REQUEST_TEMPLATE.md in present-tense (e.g. for the current template: "Confirm you have added tests, done manual regression tests, and updated the documentation"). The alternative is "Leave checklist items unchecked".<current> to <proposed>?" with options Yes / No / Use a different name (free-text).Stash the answers; consumed in STEP 6, 7, 8, 11.
Look up .claude/reference/product-management/[PRODUCT_MANAGEMENT_TOOL].md for [Task] ID format and MCP tools.
Parse [Task] ID from branch name. The exact pattern depends on the configured [PRODUCT_MANAGEMENT_TOOL] — check .claude/reference/product-management/[PRODUCT_MANAGEMENT_TOOL].md. Strip worktree- first if present.
If [Task] detected, fetch via MCP. Use its title, description, and parent [Feature] to validate the draft in STEP 6 and spot drift.
Detect unrelated commits (rare). If some commits clearly belong to a different scope, offer to create a new [Task] as future follow-up - written as a fresh problem statement (future tense, what needs to happen). [Feature] choice: parent [Feature] of current branch's [Task] -> [Feature] with [Active] status -> ask.
If no [Task] in the branch name, ask: "No [Task] detected. Create one for this pull request?". If yes, draft a [Task] from the diff (problem statement, not what was done) and create it via MCP. Suggest a [Feature] using the same rules as above.
Write a fresh title based on the actual diff, commits, and [Task] context - not the branch name (branch names are often abbreviated and won't make a good title).
Use the official template at .github/PULL_REQUEST_TEMPLATE.md:
[ ] as [x] if the user picked "Mark all checklist items..." in STEP 4; otherwise leave them as [ ].Save the rendered title (as a level-1 heading) + body to .workspace/<branch-name>/pull-request.md. Use the un-prefixed branch name if STEP 3 stripped worktree-.
If the user picked "Show me before pushing" in STEP 4:
Otherwise skip this step.
If STEP 4 confirmed a rename, rename the branch and verify. Safe in a worktree (directory path is independent of branch name). The push step sets the new upstream.
git rev-parse @{u} 2>/dev/null.git push --set-upstream origin "$(git branch --show-current)").git log --oneline @{u}..HEAD (local-ahead)git log --oneline HEAD..@{u} (remote-ahead)git push.Check the status of the background tasks started in STEP 2.
Pre-flight: gh auth status. If not authenticated, surface and stop.
Use the existing pull request check result from STEP 1.
If an open pull request already exists for this branch:
gh pr edit <number> \
--title "<title>" \
--body-file ".workspace/<branch>/pull-request.md" \
--add-label "<each-selected-label>"
(Strip the level-1 heading from the body file before passing.) Tell the user the pull request was updated, not newly created. Don't change draft/ready state without an explicit ask.
If no pull request exists:
gh pr create \
--title "<title>" \
--body-file ".workspace/<branch>/pull-request.md" \
--base main \
--assignee @me
Append --label "<name>" per label from STEP 4. @me resolves to the authenticated user. Don't pass --draft; this workflow opens ready-for-review.
Capture the pull request URL from gh's output for STEP 12.
Print:
End with a clickable link to the saved file.
# DO: imperative, sentence case, no period
Add user profile image upload functionality
Fix data protection key sharing between self-contained systems
Upgrade dependency versions to latest stable releases
# DON'T: past tense, period, title case, prefixes
Added User Profile Image Upload Functionality.
PR: Implement new feature
Updating dependencies
### Summary & Motivation
Add data protection key sharing between self-contained systems to fix antiforgery token validation failures. Previously, each self-contained system had isolated encryption keys, causing tokens generated in one system to be invalid in another.
- Configure a common application name for all self-contained systems
- Store keys in a user-accessible directory on disk
# DO: stop here - no closing benefit summary
### Checklist
- [x] I have added tests, or done manual regression tests
- [ ] I have updated the documentation, if necessary
### Summary
# DON'T: personal pronouns, past tense, "pull request" term, vague descriptions
In this pull request we fixed a bug causing issues in our scs's.
- We added some configuration.
- Fixed a bug.
These changes make the system more robust and maintainable. # DON'T: closing summary
worktree- prefixLocal: worktree-fix-login-redirect -> propose fix-login-redirect (rename in STEP 8, push in STEP 9).
Local: fix-login-redirect. Actual work: refactored the login command and added auto-redirect.
Propose refactor-login-command-with-auto-redirect. Confirm in STEP 4; rename in STEP 8.
Branch: fix-login-redirect. Commits: the redirect fix + an unrelated typo fix in README.
Surface the typo commit. Offer to create a new [Task]: "Fix typo in README troubleshooting section" (problem statement, future tense). The pull request continues with both commits.
Pull request opened: https://github.com/<owner>/<repo>/pull/123
Title: Fix login redirect after OTP verification
Labels: Bug, Deploy to Staging
[Task]: linked via branch name (auto-detected by [PRODUCT_MANAGEMENT_TOOL])
Description: /absolute/path/to/repo/.workspace/fix-login-redirect/pull-request.md