feat: cascade merge — auto-create PRs to downstream branches after merge (#460) #710

Merged
jmiller merged 4 commits from feature/cascade-merge into dev 2026-06-28 08:52:29 +00:00
Owner

Summary\n\n- Adds configurable cascade merge rules per repository\n- When a PR merges into a source branch, the system auto-creates PRs to each configured target branch\n- Skips if a matching PR already exists (dedup by head+base branch)\n- Hooks into both manual merge and auto-merge notifications\n\n## Implementation\n\n- Model: CascadeMergeRule with repo_id, source_branch, target_branch, enabled, auto_merge\n- Migration v362: Creates cascade_merge_rule table\n- Notifier: services/cascade/notifier.go — listens to MergePullRequest/AutoMergePullRequest events\n- API: CRUD at /repos/{owner}/{repo}/cascade_rules (admin only)\n- Init: Registered in routers/init.go\n\n## API Endpoints\n\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /api/v1/repos/{owner}/{repo}/cascade_rules | List all rules |\n| POST | /api/v1/repos/{owner}/{repo}/cascade_rules | Create rule |\n| GET | /api/v1/repos/{owner}/{repo}/cascade_rules/{id} | Get rule |\n| PATCH | /api/v1/repos/{owner}/{repo}/cascade_rules/{id} | Edit rule |\n| DELETE | /api/v1/repos/{owner}/{repo}/cascade_rules/{id} | Delete rule |\n\n## Test plan\n\n- [ ] Create cascade rule via API (main → dev)\n- [ ] Merge a PR to main, verify cascade PR auto-created to dev\n- [ ] Verify duplicate PR is not created on second merge\n- [ ] Verify disabled rules are skipped\n- [ ] Verify rule CRUD operations work correctly\n\nCloses #460\n\nhttps://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd

## Summary\n\n- Adds configurable cascade merge rules per repository\n- When a PR merges into a source branch, the system auto-creates PRs to each configured target branch\n- Skips if a matching PR already exists (dedup by head+base branch)\n- Hooks into both manual merge and auto-merge notifications\n\n## Implementation\n\n- **Model**: `CascadeMergeRule` with repo_id, source_branch, target_branch, enabled, auto_merge\n- **Migration v362**: Creates `cascade_merge_rule` table\n- **Notifier**: `services/cascade/notifier.go` — listens to MergePullRequest/AutoMergePullRequest events\n- **API**: CRUD at `/repos/{owner}/{repo}/cascade_rules` (admin only)\n- **Init**: Registered in `routers/init.go`\n\n## API Endpoints\n\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | `/api/v1/repos/{owner}/{repo}/cascade_rules` | List all rules |\n| POST | `/api/v1/repos/{owner}/{repo}/cascade_rules` | Create rule |\n| GET | `/api/v1/repos/{owner}/{repo}/cascade_rules/{id}` | Get rule |\n| PATCH | `/api/v1/repos/{owner}/{repo}/cascade_rules/{id}` | Edit rule |\n| DELETE | `/api/v1/repos/{owner}/{repo}/cascade_rules/{id}` | Delete rule |\n\n## Test plan\n\n- [ ] Create cascade rule via API (main → dev)\n- [ ] Merge a PR to main, verify cascade PR auto-created to dev\n- [ ] Verify duplicate PR is not created on second merge\n- [ ] Verify disabled rules are skipped\n- [ ] Verify rule CRUD operations work correctly\n\nCloses #460\n\nhttps://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd
jmiller added 1 commit 2026-06-28 07:07:36 +00:00
feat: cascade merge — auto-create PRs to downstream branches after merge (#460)
Universal: Auto Version Bump / Version Bump (push) Successful in 19s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
PR RC Release / Build RC Release (pull_request) Successful in 4s
Universal: PR Check / Validate PR (pull_request) Failing after 9s
Generic: Project CI / Lint & Validate (pull_request) Successful in 30s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m7s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
f627219ca8
Adds configurable cascade rules per repo. When a PR merges into a
source branch, the system auto-creates PRs to each configured target
branch. Skips if a matching PR already exists.

- Model: CascadeMergeRule (repo_id, source, target, enabled, auto_merge)
- Migration v362 creates cascade_merge_rule table
- Notifier hooks into MergePullRequest/AutoMergePullRequest events
- API: CRUD at /repos/{owner}/{repo}/cascade_rules (admin only)

Claude-Session: https://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd
jmiller added 1 commit 2026-06-28 07:29:43 +00:00
fix: remove leaked security scanning routes from cascade-merge branch
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
PR RC Release / Build RC Release (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Failing after 9s
Generic: Project CI / Lint & Validate (pull_request) Successful in 30s
Universal: PR Check / Secret Scan (pull_request) Successful in 57s
Universal: Auto Version Bump / Version Bump (push) Has been cancelled
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
805c566615
The security route group belongs to feature/secret-scanning (#692) and
was accidentally committed here during parallel agent work.

Claude-Session: https://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd
jmiller added 1 commit 2026-06-28 08:49:14 +00:00
merge: incorporate dev changes into feature/cascade-merge
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
PR RC Release / Build RC Release (pull_request) Successful in 4s
Universal: PR Check / Validate PR (pull_request) Failing after 15s
Generic: Project CI / Lint & Validate (pull_request) Successful in 41s
Universal: Auto Version Bump / Version Bump (push) Successful in 22s
Universal: PR Check / Secret Scan (pull_request) Successful in 3m33s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
5a25068d81
Resolve CHANGELOG.md and api.go conflicts — keep both cascade_rules
and security route groups.

Claude-Session: https://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd
jmiller added 1 commit 2026-06-28 08:51:57 +00:00
merge: incorporate latest dev (post status-presets merge) into cascade-merge
PR RC Release / Build RC Release (pull_request) Successful in 4s
Generic: Project CI / Lint & Validate (pull_request) Successful in 42s
Universal: Auto Version Bump / Version Bump (push) Successful in 18s
Generic: Project CI / Tests (pull_request) Has been cancelled
98301bc92b
Resolve CHANGELOG conflict, restore issue_metadata.go from dev.

Claude-Session: https://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd
jmiller merged commit 7913a05285 into dev 2026-06-28 08:52:29 +00:00
Sign in to join this conversation.