feat: issue status presets and cross-org migration (#507) #709

Merged
jmiller merged 4 commits from feature/status-presets into dev 2026-06-28 08:49:39 +00:00
Owner

Summary\n- 4 built-in status preset templates: default, software-development, support-tickets, bug-tracking\n- API: GET /orgs/{org}/issue-statuses/presets (list), POST .../presets/{name} (apply), POST .../copy/{source_org} (cross-org copy)\n- Web UI: preset dropdown on org issue statuses settings page with confirmation dialog\n- Presets deactivate existing non-required statuses and replace with template entries\n\n## Files changed (9)\n- models/issues/issue_status.go — preset definitions, ApplyStatusPreset(), CopyStatusesFromOrg()\n- modules/structs/issue.go — StatusPreset, StatusPresetEntry API structs\n- routers/api/v1/org/issue_metadata.go — ListIssueStatusPresets, ApplyIssueStatusPreset, CopyIssueStatusesFromOrg\n- routers/api/v1/api.go — route registration\n- routers/web/org/issue_statuses.go — SettingsIssueStatusesApplyPresetPost handler\n- routers/web/web.go — web route\n- templates/org/settings/issue_statuses.tmpl — preset selector UI\n- options/locale/locale_en-US.json — 5 new locale strings\n- CHANGELOG.md — entry\n\n## Test plan\n- [ ] Visit org settings > issue statuses — preset dropdown visible\n- [ ] Apply each preset — verify statuses replaced correctly\n- [ ] API: GET presets endpoint returns all 4 templates\n- [ ] API: POST apply preset replaces statuses\n- [ ] API: POST copy from another org works\n- [ ] Required statuses (Open/Closed) preserved across apply\n\nhttps://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd

## Summary\n- 4 built-in status preset templates: default, software-development, support-tickets, bug-tracking\n- API: GET /orgs/{org}/issue-statuses/presets (list), POST .../presets/{name} (apply), POST .../copy/{source_org} (cross-org copy)\n- Web UI: preset dropdown on org issue statuses settings page with confirmation dialog\n- Presets deactivate existing non-required statuses and replace with template entries\n\n## Files changed (9)\n- `models/issues/issue_status.go` — preset definitions, ApplyStatusPreset(), CopyStatusesFromOrg()\n- `modules/structs/issue.go` — StatusPreset, StatusPresetEntry API structs\n- `routers/api/v1/org/issue_metadata.go` — ListIssueStatusPresets, ApplyIssueStatusPreset, CopyIssueStatusesFromOrg\n- `routers/api/v1/api.go` — route registration\n- `routers/web/org/issue_statuses.go` — SettingsIssueStatusesApplyPresetPost handler\n- `routers/web/web.go` — web route\n- `templates/org/settings/issue_statuses.tmpl` — preset selector UI\n- `options/locale/locale_en-US.json` — 5 new locale strings\n- `CHANGELOG.md` — entry\n\n## Test plan\n- [ ] Visit org settings > issue statuses — preset dropdown visible\n- [ ] Apply each preset — verify statuses replaced correctly\n- [ ] API: GET presets endpoint returns all 4 templates\n- [ ] API: POST apply preset replaces statuses\n- [ ] API: POST copy from another org works\n- [ ] Required statuses (Open/Closed) preserved across apply\n\nhttps://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd
jmiller added 1 commit 2026-06-28 07:05:52 +00:00
feat: add issue status presets and cross-org migration (#507)
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
PR RC Release / Build RC Release (pull_request) Successful in 3s
Universal: PR Check / Validate PR (pull_request) Failing after 9s
Universal: Auto Version Bump / Version Bump (push) Successful in 14s
Generic: Project CI / Lint & Validate (pull_request) Successful in 46s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m16s
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
df9305758f
4 built-in presets: default, software-development, support-tickets,
bug-tracking. API endpoints to list presets, apply to org, and copy
statuses between orgs. Web UI dropdown on org settings page.

Claude-Session: https://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd
jmiller added 1 commit 2026-06-28 07:26:49 +00:00
fix: prevent IDOR in CopyStatusesFromOrg endpoint
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
PR RC Release / Build RC Release (pull_request) Successful in 3s
Universal: PR Check / Validate PR (pull_request) Failing after 10s
Generic: Project CI / Lint & Validate (pull_request) Successful in 43s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m46s
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
f53bc895ba
Add source org visibility + membership check before copying statuses.
Non-public source orgs now require the doer to be a member or site admin,
preventing unauthorized enumeration of private org statuses.

Claude-Session: https://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd
jmiller added 1 commit 2026-06-28 08:34:24 +00:00
fix: distinguish unknown preset from DB errors in ApplyIssueStatusPreset
PR RC Release / Build RC Release (pull_request) Successful in 3s
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Failing after 13s
Universal: Auto Version Bump / Version Bump (push) Successful in 18s
Generic: Project CI / Lint & Validate (pull_request) Successful in 35s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m11s
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
cf25eef480
db.ErrNotExist returns 404, other errors return 500 instead of
masking all errors as 404.

Claude-Session: https://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd
jmiller added 1 commit 2026-06-28 08:47:57 +00:00
merge: incorporate dev changes into feature/status-presets
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 12s
Generic: Project CI / Lint & Validate (pull_request) Successful in 1m7s
Branch Cleanup / Delete merged branch (pull_request) Failing after 4s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Universal: PR Check / Secret Scan (pull_request) Successful in 2m52s
Universal: Auto Version Bump / Version Bump (push) Successful in 18s
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
57894e25fd
Resolve CHANGELOG.md conflict — keep both status presets and
default teams entries.

Claude-Session: https://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd
jmiller merged commit c618ec9f87 into dev 2026-06-28 08:49:39 +00:00
jmiller deleted branch feature/status-presets 2026-06-28 08:49:44 +00:00
Sign in to join this conversation.