mirror of https://github.com/garrytan/gstack.git
* feat: add bin/gstack-pr-title-rewrite.sh shared helper Single source of truth for "rewrite a PR title to start with v<VERSION>". Three cases: already correct (no-op), different prefix (replace), no prefix (prepend). Rejects malformed VERSION (anything outside ^[0-9]+(\.[0-9]+)*$) with exit code 2. Uses literal case prefix match instead of bash's pattern- matching # operator so a VERSION with glob metacharacters cannot mismatch. Free bun test covers the four branches plus malformed-input rejection, plain-words-not-stripped, single-segment-not-stripped, idempotence, and missing-args. 9 tests, ~400ms. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * feat(skills): /ship and /document-release always prefix PR titles with v<VERSION> ship/SKILL.md.tmpl Step 19: idempotency block now always rewrites titles to start with v$NEW_VERSION via the new helper. Removes the "custom title kept intentionally" loophole that let unprefixed titles persist forever. Adds a post-edit self-check that re-fetches the title and retries once if the edit didn't stick. Inline comments on the create-PR snippets at lines 867 and 876 make the rule unmissable. document-release/SKILL.md.tmpl Step 9: new "PR/MR title sync" sub-step calls the same helper after the body update. Catches the case where Step 8 bumped VERSION after /ship had already created the PR — title now follows VERSION instead of going stale. Golden fixtures regenerated for claude/codex/factory ship variants. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * feat(ci): pr-title-sync rewrites titles unconditionally Drops the "eligible only if already prefixed" gate. Sources the new shared helper, rewrites unconditionally on every VERSION change. Defense-in-depth backstop for PRs opened outside the skills (manual gh pr create, web UI). Uses env: for OLD_TITLE so YAML expression injection cannot reach run:. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * chore: bump version and changelog (v1.23.0.0) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| chrome-cdp | ||
| dev-setup | ||
| dev-teardown | ||
| gstack-analytics | ||
| gstack-brain-consumer | ||
| gstack-brain-enqueue | ||
| gstack-brain-init | ||
| gstack-brain-reader | ||
| gstack-brain-restore | ||
| gstack-brain-sync | ||
| gstack-brain-uninstall | ||
| gstack-builder-profile | ||
| gstack-codex-probe | ||
| gstack-community-dashboard | ||
| gstack-config | ||
| gstack-developer-profile | ||
| gstack-diff-scope | ||
| gstack-extension | ||
| gstack-gbrain-detect | ||
| gstack-gbrain-install | ||
| gstack-gbrain-lib.sh | ||
| gstack-gbrain-repo-policy | ||
| gstack-gbrain-source-wireup | ||
| gstack-gbrain-supabase-provision | ||
| gstack-gbrain-supabase-verify | ||
| gstack-global-discover.ts | ||
| gstack-jsonl-merge | ||
| gstack-learnings-log | ||
| gstack-learnings-search | ||
| gstack-model-benchmark | ||
| gstack-next-version | ||
| gstack-open-url | ||
| gstack-patch-names | ||
| gstack-platform-detect | ||
| gstack-pr-title-rewrite.sh | ||
| gstack-question-log | ||
| gstack-question-preference | ||
| gstack-relink | ||
| gstack-repo-mode | ||
| gstack-review-log | ||
| gstack-review-read | ||
| gstack-security-dashboard | ||
| gstack-session-update | ||
| gstack-settings-hook | ||
| gstack-slug | ||
| gstack-specialist-stats | ||
| gstack-taste-update | ||
| gstack-team-init | ||
| gstack-telemetry-log | ||
| gstack-telemetry-sync | ||
| gstack-timeline-log | ||
| gstack-timeline-read | ||
| gstack-uninstall | ||
| gstack-update-check | ||