oh-my-customcodex 0.4.15 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/dist/cli/index.js +65 -20
- package/dist/index.js +40 -4
- package/package.json +1 -1
- package/templates/.claude/agents/mgr-gitnerd.md +4 -0
- package/templates/.claude/agents/mgr-sauron.md +5 -4
- package/templates/.claude/hooks/hooks.json +13 -0
- package/templates/.claude/hooks/scripts/context-budget-advisor.sh +40 -2
- package/templates/.claude/hooks/scripts/cost-cap-advisor.sh +8 -3
- package/templates/.claude/hooks/scripts/destructive-git-guard.sh +53 -0
- package/templates/.claude/hooks/scripts/omcustom-auto-update.sh +5 -5
- package/templates/.claude/hooks/scripts/session-env-check.sh +8 -6
- package/templates/.claude/hooks/scripts/stuck-detector.sh +2 -2
- package/templates/.claude/ontology/skills.yaml +3 -3
- package/templates/.claude/rules/MUST-agent-design.md +1 -0
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +6 -0
- package/templates/.claude/rules/MUST-safety.md +15 -0
- package/templates/.claude/rules/SHOULD-hud-statusline.md +2 -0
- package/templates/.claude/skills/gitlab/SKILL.md +346 -0
- package/templates/.claude/skills/goal/SKILL.md +5 -3
- package/templates/.claude/skills/harness-synthesizer/SKILL.md +32 -0
- package/templates/.claude/skills/help/SKILL.md +2 -2
- package/templates/.claude/skills/lists/SKILL.md +2 -2
- package/templates/.claude/skills/npm-version/SKILL.md +6 -0
- package/templates/.claude/skills/omcodex-release-notes/SKILL.md +5 -4
- package/templates/.claude/skills/post-release-followup/SKILL.md +1 -1
- package/templates/.claude/skills/status/SKILL.md +1 -1
- package/templates/.claude/statusline.sh +24 -3
- package/templates/AGENTS.md.en +5 -3
- package/templates/AGENTS.md.ko +5 -3
- package/templates/CLAUDE.md +12 -3
- package/templates/CLAUDE.md.en +12 -3
- package/templates/CLAUDE.md.ko +12 -3
- package/templates/guides/claude-code/04-agent-skills.md +16 -0
- package/templates/guides/claude-code/06-mcp.md +6 -0
- package/templates/guides/claude-code/13-cli-flags.md +13 -1
- package/templates/guides/claude-code/15-version-compatibility.md +59 -0
- package/templates/guides/claude-code/index.yaml +5 -0
- package/templates/guides/git-safety/README.md +44 -0
- package/templates/guides/hook-data-flow/README.md +16 -16
- package/templates/guides/index.yaml +6 -0
- package/templates/guides/professor-triage/phases.md +324 -0
- package/templates/manifest.json +3 -3
- package/templates/workflows/auto-dev.yaml +13 -1
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
# professor-triage — Phase Implementation Detail
|
|
2
|
+
|
|
3
|
+
Companion to `guides/professor-triage/README.md`. Detailed workflow for each phase.
|
|
4
|
+
|
|
5
|
+
## Phase 1: Gather
|
|
6
|
+
|
|
7
|
+
1. Parse arguments to determine target issues:
|
|
8
|
+
- If issue numbers provided: use those directly
|
|
9
|
+
- If `--label` provided: `gh issue list --label <label> --state <state> --json number`
|
|
10
|
+
- Default: `gh issue list --state open --json number` + exclude issues with `verify-done` label
|
|
11
|
+
- If `--since` provided: add `--search "created:>YYYY-MM-DD"` filter
|
|
12
|
+
|
|
13
|
+
2. For each issue, fetch full details:
|
|
14
|
+
```bash
|
|
15
|
+
gh issue view NNN --json number,title,body,comments,labels,createdAt
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
3. For batches >20 issues, prefer `gh api graphql` for batch fetching to respect GitHub API rate limits (5000/hour authenticated).
|
|
19
|
+
|
|
20
|
+
4. If filter returns 0 results: if `--label` was used, check label existence via `gh label list`. Report if label missing. If default filter, report "No open issues without verify-done label found."
|
|
21
|
+
|
|
22
|
+
## Phase 2: Codebase Analysis
|
|
23
|
+
|
|
24
|
+
For each issue, perform direct codebase analysis.
|
|
25
|
+
|
|
26
|
+
### 2A: Context Extraction
|
|
27
|
+
|
|
28
|
+
From issue title and body, extract:
|
|
29
|
+
- File paths mentioned (regex: backtick-wrapped paths, `:\d+` line refs, `(L\d+)`, `(lines \d+-\d+)`)
|
|
30
|
+
- Error messages or stack traces
|
|
31
|
+
- Keywords (function names, class names, config keys, module names)
|
|
32
|
+
- Component areas mentioned (e.g., "auth", "CI", "hooks")
|
|
33
|
+
|
|
34
|
+
### 2B: Codebase Search
|
|
35
|
+
|
|
36
|
+
Delegate to Explore agent(s):
|
|
37
|
+
- Search for extracted keywords using Grep across the codebase
|
|
38
|
+
- Find related files using Glob patterns derived from keywords
|
|
39
|
+
- For explicitly mentioned files, verify existence and read relevant sections
|
|
40
|
+
- For error messages, trace to source location
|
|
41
|
+
- Map import/dependency relationships for affected files
|
|
42
|
+
|
|
43
|
+
### 2C: Impact Assessment
|
|
44
|
+
|
|
45
|
+
For each relevant file found:
|
|
46
|
+
- Read current state of the code
|
|
47
|
+
- Check recent changes: `git log --since=<issue_created_date> --oneline -- <file>`
|
|
48
|
+
- Determine if the issue has already been addressed by recent commits
|
|
49
|
+
- Assess blast radius (what depends on this code, what does this code depend on)
|
|
50
|
+
|
|
51
|
+
### 2D: Structured Finding
|
|
52
|
+
|
|
53
|
+
Produce per-issue analysis:
|
|
54
|
+
|
|
55
|
+
| Field | Content |
|
|
56
|
+
|-------|---------|
|
|
57
|
+
| Affected files | List with status: `exists` ✅ / `missing` ❌ / `changed-since-issue` ⚠️ |
|
|
58
|
+
| Architecture impact | Breaking changes, dependency effects, scope of change |
|
|
59
|
+
| Implementation path | Concrete steps with file:line references from current codebase |
|
|
60
|
+
| Risk level | P1 (critical/security/breaking) / P2 (moderate/compat) / P3 (nice-to-have) |
|
|
61
|
+
| Size estimate | XS (<1h) / S (1-3h) / M (3-8h) / L (1-3d) / XL (>3d) |
|
|
62
|
+
| Already resolved? | Yes / No / Partial — with git evidence (commit hash, PR number) |
|
|
63
|
+
|
|
64
|
+
### Parallelization (R009/R018)
|
|
65
|
+
|
|
66
|
+
- 1-3 issues → single Explore agent per issue (parallel per R009)
|
|
67
|
+
- 4-10 issues → parallel Explore agents, max 4 concurrent (R009)
|
|
68
|
+
- 10+ issues or 3+ Explore agents needed → Agent Teams per R018
|
|
69
|
+
|
|
70
|
+
**Delegation**: All codebase search delegated to Explore agent(s) with `model: haiku`. Orchestrator collects and synthesizes results.
|
|
71
|
+
|
|
72
|
+
## Phase 3: Cross-Analyze
|
|
73
|
+
|
|
74
|
+
**R010 note**: This is a read-only analytical step — no file writes. Per R010 exception, the orchestrator may perform this directly. For batches >15 issues, delegate to a dedicated cross-analysis agent with model: opus.
|
|
75
|
+
|
|
76
|
+
Perform deep cross-analysis with full context from all issues:
|
|
77
|
+
|
|
78
|
+
1. **Common patterns** — Identify findings that appear across multiple issues (e.g., same file referenced, same recommendation theme)
|
|
79
|
+
2. **Duplicate/merge candidates** — Detect issues tracking the same underlying change:
|
|
80
|
+
- Same release series (e.g., alpha.3/5/6)
|
|
81
|
+
- Same upstream dependency
|
|
82
|
+
- Same affected component
|
|
83
|
+
3. **Conflicting findings** — Where findings disagree across issues, resolve based on:
|
|
84
|
+
- Codebase evidence (Phase 2 results)
|
|
85
|
+
- Specificity (concrete code-level finding > abstract observation)
|
|
86
|
+
- Recency (newer findings > older ones)
|
|
87
|
+
4. **Priority matrix** — Unified priority ranking:
|
|
88
|
+
- P1: Breaking changes, security issues, blocking bugs
|
|
89
|
+
- P2: Documentation gaps, compatibility updates, medium-risk items
|
|
90
|
+
- P3: Nice-to-have improvements, future considerations
|
|
91
|
+
5. **Action determination** — Per-issue decision:
|
|
92
|
+
- `Close (Already Resolved)`: Phase 2 found issue already fixed by recent commits
|
|
93
|
+
- `Close (Not Applicable)`: Issue is irrelevant (internal dependency tag, no impact)
|
|
94
|
+
- `Close (Duplicate of #NNN)`: Superseded by another issue in the batch
|
|
95
|
+
- `Open — action required`: Real work needed
|
|
96
|
+
- `Open — monitoring`: Waiting for external trigger (e.g., stable release)
|
|
97
|
+
- `New issue needed`: Cross-analysis discovered issue not yet tracked
|
|
98
|
+
|
|
99
|
+
## Phase 4: Multi-Perspective Analysis & Output
|
|
100
|
+
|
|
101
|
+
Generate multi-perspective analysis comments and artifacts for each analyzed issue.
|
|
102
|
+
|
|
103
|
+
### Parallelization (R009)
|
|
104
|
+
|
|
105
|
+
- Phase 4A + 4B: parallel (independent perspectives)
|
|
106
|
+
- Phase 4C: after 4A + 4B complete (synthesis requires both inputs)
|
|
107
|
+
- Phase 4D + 4E: parallel (independent outputs, both depend on 4C)
|
|
108
|
+
- Phase 4F: after all above (verification gate)
|
|
109
|
+
|
|
110
|
+
### Agent Selection Rationale
|
|
111
|
+
|
|
112
|
+
Phases 4A, 4B, 4C, 4E use `general-purpose` (NOT `arch-documenter`).
|
|
113
|
+
|
|
114
|
+
`arch-documenter` has `disallowedTools: [Bash]` → cannot execute `/tmp/*.sh` bypass pattern → falls back to Write tool → triggers Codex/Claude-compat sensitive-path guard on `.codex/outputs/`. `general-purpose` has Bash access and can use the `/tmp/*.sh` bypass. See #1043.
|
|
115
|
+
|
|
116
|
+
### 4A: Senior Architect Analysis
|
|
117
|
+
|
|
118
|
+
Delegate to general-purpose (model: sonnet). Post GitHub comment per issue:
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
## 🏛️ Senior Architect Analysis
|
|
122
|
+
|
|
123
|
+
### 아키텍처 영향
|
|
124
|
+
| 컴포넌트 | 영향 | 위험도 |
|
|
125
|
+
|----------|------|--------|
|
|
126
|
+
| {컴포넌트} | {설명} | {High/Medium/Low} |
|
|
127
|
+
|
|
128
|
+
### 코드 수준 분석
|
|
129
|
+
{Phase 2 코드베이스 분석의 구체적 file:line 참조}
|
|
130
|
+
|
|
131
|
+
### 전략적 평가
|
|
132
|
+
- **실현 가능성**: {근거가 포함된 평가}
|
|
133
|
+
- **우선순위 권장**: {P1/P2/P3 및 근거}
|
|
134
|
+
|
|
135
|
+
### 리스크 및 고려사항
|
|
136
|
+
| 리스크 | 가능성 | 완화 방안 |
|
|
137
|
+
|--------|--------|----------|
|
|
138
|
+
| {리스크} | {High/Medium/Low} | {완화 방안} |
|
|
139
|
+
|
|
140
|
+
**예상 작업량**: {XS/S/M/L/XL}
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
_🏛️ Senior Architect perspective — `/professor-triage` v2.3.0_
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 4B: Project Colleague Review
|
|
147
|
+
|
|
148
|
+
Delegate to general-purpose (model: sonnet). Post GitHub comment per issue:
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
## 🤝 Project Colleague Review
|
|
152
|
+
|
|
153
|
+
### 구현 아이디어
|
|
154
|
+
{구체적 코드 위치 및 file:line 참조가 포함된 변경 제안}
|
|
155
|
+
|
|
156
|
+
### 놓치기 쉬운 세부사항
|
|
157
|
+
- {이름 충돌, 유효성 검사 우회, 경쟁 조건, 엣지 케이스}
|
|
158
|
+
|
|
159
|
+
### 권장 다음 단계
|
|
160
|
+
1. {구체적 file/function 참조가 포함된 실행 가능한 단계}
|
|
161
|
+
2. {실행 가능한 단계}
|
|
162
|
+
3. {실행 가능한 단계}
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
_🤝 Project Colleague perspective — `/professor-triage` v2.3.0_
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Note**: Do NOT include a "First Impressions" (첫인상) section — explicitly excluded per user feedback.
|
|
169
|
+
|
|
170
|
+
### 4C: Professor Synthesis
|
|
171
|
+
|
|
172
|
+
Delegate to general-purpose (model: opus). Requires 4A and 4B results as input. Post GitHub comment per issue:
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
## 🎓 Professor Synthesis
|
|
176
|
+
|
|
177
|
+
### 코드베이스 검증
|
|
178
|
+
| 주장 (Architect/Colleague) | 검증 | 근거 |
|
|
179
|
+
|---------------------------|------|------|
|
|
180
|
+
| {주장} | ✅/⚠️/❌ | {file:line 또는 git 근거} |
|
|
181
|
+
|
|
182
|
+
### 합의 및 이견
|
|
183
|
+
| 주제 | Architect | Colleague | 판정 |
|
|
184
|
+
|------|-----------|-----------|------|
|
|
185
|
+
| {주제} | {입장} | {입장} | {종합 판단} |
|
|
186
|
+
|
|
187
|
+
### 우선순위 매트릭스
|
|
188
|
+
| 차원 | 평가 |
|
|
189
|
+
|------|------|
|
|
190
|
+
| 긴급성 | {High/Medium/Low} |
|
|
191
|
+
| 중요성 | {High/Medium/Low} |
|
|
192
|
+
| 규모 | {XS/S/M/L/XL} |
|
|
193
|
+
| 권장 순서 | {배치 내 N/M} |
|
|
194
|
+
|
|
195
|
+
### 누락된 관점
|
|
196
|
+
{Architect나 Colleague 모두 제기하지 않은 고려사항}
|
|
197
|
+
|
|
198
|
+
### 실행 로드맵
|
|
199
|
+
| 단계 | 작업 | 파일 | 의존성 |
|
|
200
|
+
|------|------|------|--------|
|
|
201
|
+
| 1 | {작업} | {파일} | — |
|
|
202
|
+
| 2 | {작업} | {파일} | 단계 1 |
|
|
203
|
+
|
|
204
|
+
### 최종 결론
|
|
205
|
+
{확정적 권장 사항이 포함된 2-3문장 종합}
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
_🎓 Professor Synthesis — `/professor-triage` v2.3.0_
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### 4D: Issue Triage Comment (MANDATORY)
|
|
212
|
+
|
|
213
|
+
Every analyzed issue MUST receive a triage comment. Skipping breaks the triage audit trail. Delegate to mgr-gitnerd:
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
## 🔬 Professor Triage — Codebase Analysis Result
|
|
217
|
+
|
|
218
|
+
**결정**: {Close (Already Resolved) | Close (Not Applicable) | Close (Duplicate of #NNN) | Open — action required | Open — monitoring}
|
|
219
|
+
**근거**: {코드베이스 분석 기반 1-2줄 요약}
|
|
220
|
+
**영향 파일**: {N}개 분석 — {N}✅ {N}⚠️ {N}❌
|
|
221
|
+
**리스크**: {P1/P2/P3} | **규모**: {XS/S/M/L/XL}
|
|
222
|
+
**전체 리포트**: {artifact path}
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
_`/professor-triage` v2.3.0에 의해 현재 코드베이스 대비 분석됨 — 관련 이슈 {N}개_
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 4E: Artifact Report
|
|
229
|
+
|
|
230
|
+
Delegate to general-purpose. Path: `.codex/outputs/sessions/YYYY-MM-DD/professor-triage-HHmmss.md`
|
|
231
|
+
|
|
232
|
+
**Sensitive-path compatibility note**: Write `.codex/outputs/` artifacts with the normal file-write path. Use `/tmp/professor-triage-<timestamp>.md` only as a legacy fallback when an older Claude Code runtime still prompts on `.claude/**` or `templates/.claude/**` compatibility paths, then verify the resulting diff.
|
|
233
|
+
|
|
234
|
+
Artifact template:
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
# Professor Triage リポート — YYYY-MM-DD
|
|
238
|
+
|
|
239
|
+
## 분석 대상
|
|
240
|
+
| # | 제목 | 라벨 | 생성일 |
|
|
241
|
+
|---|------|------|--------|
|
|
242
|
+
|
|
243
|
+
## 이슈별 분석
|
|
244
|
+
### #NNN — title
|
|
245
|
+
- **영향 파일**: N개 분석 — N✅ N⚠️ N❌
|
|
246
|
+
- **아키텍처 영향**: ...
|
|
247
|
+
- **구현 경로**: ...
|
|
248
|
+
- **리스크/우선순위**: P1/P2/P3
|
|
249
|
+
- **규모**: XS/S/M/L/XL
|
|
250
|
+
- **이미 해결됨?**: Yes/No/Partial — 근거
|
|
251
|
+
- **권장 조치**: ...
|
|
252
|
+
|
|
253
|
+
## 교차 분석
|
|
254
|
+
### 공통 패턴
|
|
255
|
+
### 중복/병합 후보
|
|
256
|
+
### 상충 발견사항 해결
|
|
257
|
+
### 우선순위 매트릭스
|
|
258
|
+
|
|
259
|
+
## 다관점 요약
|
|
260
|
+
### Architect 주요 사항
|
|
261
|
+
### Colleague 주요 사항
|
|
262
|
+
### Professor Synthesis 핵심 포인트
|
|
263
|
+
|
|
264
|
+
## 실행된 조치
|
|
265
|
+
| 이슈 | 조치 | 상태 |
|
|
266
|
+
|
|
267
|
+
## 보류 중인 조치 (확인 필요)
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### 4F: Comment Verification Gate
|
|
271
|
+
|
|
272
|
+
Before proceeding to Phase 5, verify ALL analyzed issues received all 4 comment types:
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
# For each issue NNN in the batch:
|
|
276
|
+
gh issue view NNN --json comments --jq '.comments | map(select(.body | contains("Professor Triage"))) | length'
|
|
277
|
+
# Must be >= 1 for every issue. If any is 0, go back and post.
|
|
278
|
+
|
|
279
|
+
gh issue view NNN --json comments --jq '.comments | map(select(.body | contains("Senior Architect"))) | length'
|
|
280
|
+
gh issue view NNN --json comments --jq '.comments | map(select(.body | contains("Project Colleague"))) | length'
|
|
281
|
+
gh issue view NNN --json comments --jq '.comments | map(select(.body | contains("Professor Synthesis"))) | length'
|
|
282
|
+
# All must be >= 1.
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## Phase 5: Act
|
|
286
|
+
|
|
287
|
+
Delegate ALL GitHub operations to mgr-gitnerd.
|
|
288
|
+
|
|
289
|
+
### Automatic (low-risk, reversible)
|
|
290
|
+
|
|
291
|
+
| Condition | Action |
|
|
292
|
+
|-----------|--------|
|
|
293
|
+
| Phase 2 found issue already resolved (with commit evidence) | `gh issue close --reason "completed"` + comment with resolving commit |
|
|
294
|
+
| Cross-analysis concludes "Not Applicable" / "no action needed" | `gh issue close --reason "not planned"` |
|
|
295
|
+
| Cross-analysis detects same-series duplicates | Keep latest, close others + `duplicate` label |
|
|
296
|
+
| All analysis complete | Add `verify-done` label |
|
|
297
|
+
| Priority assigned | Add `P1`/`P2`/`P3` label |
|
|
298
|
+
|
|
299
|
+
### Confirmation Required (high-risk)
|
|
300
|
+
|
|
301
|
+
Present to user and wait for approval before executing:
|
|
302
|
+
|
|
303
|
+
| Condition | Action | Reason |
|
|
304
|
+
|-----------|--------|--------|
|
|
305
|
+
| Reopen a closed issue | Propose reopen | Unintended notifications |
|
|
306
|
+
| New issue creation needed | Present draft title/body | Noise prevention |
|
|
307
|
+
| Epic/milestone linking | Propose link | Project structure change |
|
|
308
|
+
| Issue body modification | Present edit draft | Respect original author intent |
|
|
309
|
+
|
|
310
|
+
**Ensure `verify-done` label exists**: If not, create with `gh label create "verify-done" --color "0E8A16"`.
|
|
311
|
+
|
|
312
|
+
## Phase Notes Summary
|
|
313
|
+
|
|
314
|
+
| Phase | Owner | Model | R010 Exception? |
|
|
315
|
+
|-------|-------|-------|----------------|
|
|
316
|
+
| 1 | Orchestrator | — | Yes (read-only fetch) |
|
|
317
|
+
| 2 | Explore agents | haiku | No (delegated) |
|
|
318
|
+
| 3 | Orchestrator (opus for >15 issues) | sonnet/opus | Yes (read-only analysis) |
|
|
319
|
+
| 4A/4B | general-purpose | sonnet | No (delegated) |
|
|
320
|
+
| 4C | general-purpose | opus | No (delegated) |
|
|
321
|
+
| 4D | mgr-gitnerd | — | No (delegated) |
|
|
322
|
+
| 4E | general-purpose | — | No (delegated) |
|
|
323
|
+
| 4F | Orchestrator | — | Yes (verification read-only) |
|
|
324
|
+
| 5 | mgr-gitnerd | — | No (delegated) |
|
package/templates/manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.5.0",
|
|
3
3
|
"requiresCC": ">=2.1.121",
|
|
4
4
|
"claudeCode": {
|
|
5
5
|
"minimumVersion": "2.1.121",
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
"name": "skills",
|
|
24
24
|
"path": ".agents/skills",
|
|
25
25
|
"description": "Reusable skill modules (project-scoped repo skills)",
|
|
26
|
-
"files":
|
|
26
|
+
"files": 119
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"name": "guides",
|
|
30
30
|
"path": "guides",
|
|
31
31
|
"description": "Reference documentation",
|
|
32
|
-
"files":
|
|
32
|
+
"files": 48
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"name": "hooks",
|
|
@@ -51,7 +51,19 @@ steps:
|
|
|
51
51
|
description: Multi-angle release quality verification
|
|
52
52
|
|
|
53
53
|
- name: release
|
|
54
|
-
prompt:
|
|
54
|
+
prompt: |
|
|
55
|
+
Create release branch and pull request.
|
|
56
|
+
|
|
57
|
+
Before creating `release/v*`, check whether a local branch named exactly
|
|
58
|
+
`release` exists. Git stores refs as files/directories, so
|
|
59
|
+
`refs/heads/release` blocks `refs/heads/release/vX.Y.Z`.
|
|
60
|
+
|
|
61
|
+
Required preflight:
|
|
62
|
+
- `git branch --list release --format='%(refname:short)'`
|
|
63
|
+
- If present, prove it is merged or backed up before renaming/removing it.
|
|
64
|
+
- Prefer `git branch -m release releases-tracking` when preservation is
|
|
65
|
+
needed; do not run `git branch -D release` without explicit approval.
|
|
66
|
+
- Re-run the branch-list check before `git switch -c release/vX.Y.Z`.
|
|
55
67
|
description: Create release branch and pull request
|
|
56
68
|
|
|
57
69
|
- name: publish
|