oh-my-customcode 0.68.1 → 0.69.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 +141 -11
- package/dist/index.js +2518 -12
- package/package.json +1 -1
- package/templates/.claude/skills/intent-detection/patterns/agent-triggers.yaml +1 -1
- package/templates/.claude/skills/professor-triage/SKILL.md +196 -89
- package/templates/manifest.json +1 -1
- package/templates/workflows/auto-dev.yaml +1 -1
package/package.json
CHANGED
|
@@ -427,7 +427,7 @@ agents:
|
|
|
427
427
|
file_patterns: []
|
|
428
428
|
actions: [review, analyze]
|
|
429
429
|
base_confidence: 85
|
|
430
|
-
routing_rule: "MUST use professor-triage skill for
|
|
430
|
+
routing_rule: "MUST use professor-triage skill for codebase-driven issue analysis and automated triage"
|
|
431
431
|
|
|
432
432
|
rtk-exec:
|
|
433
433
|
keywords:
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: professor-triage
|
|
3
|
-
description:
|
|
3
|
+
description: Analyze GitHub issues against current codebase and perform automated triage with priority assessment
|
|
4
4
|
scope: harness
|
|
5
|
-
version: 1.0
|
|
5
|
+
version: 2.1.0
|
|
6
6
|
user-invocable: true
|
|
7
7
|
effort: high
|
|
8
8
|
context: fork
|
|
9
9
|
argument-hint: "[issue-numbers...] [--label <label>] [--state <state>] [--since <date>]"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
# /professor-triage —
|
|
12
|
+
# /professor-triage — Codebase-Driven Issue Triage
|
|
13
13
|
|
|
14
14
|
## Purpose
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Analyzes GitHub issues directly against the current codebase. For each issue, searches relevant code, assesses impact and blast radius, determines whether the issue has already been resolved, and performs automated triage with priority and size estimation. Produces a cross-analysis report and executes low-risk triage actions automatically.
|
|
17
17
|
|
|
18
18
|
## Usage
|
|
19
19
|
|
|
20
20
|
```
|
|
21
|
-
/professor-triage # Default: --
|
|
21
|
+
/professor-triage # Default: --state open (excludes verify-done)
|
|
22
22
|
/professor-triage 587 589 590 591 592 # Direct issue numbers
|
|
23
23
|
/professor-triage --label codex-release # Custom label filter
|
|
24
24
|
/professor-triage --since 2026-03-20 # Date filter
|
|
@@ -31,7 +31,7 @@ Cross-analyzes GitHub issues containing `omc_issue_analyzer` comments (Architect
|
|
|
31
31
|
1. Parse arguments to determine target issues:
|
|
32
32
|
- If issue numbers provided: use those directly
|
|
33
33
|
- If `--label` provided: `gh issue list --label <label> --state <state> --json number`
|
|
34
|
-
- Default: `gh issue list --
|
|
34
|
+
- Default: `gh issue list --state open --json number` + exclude issues with `verify-done` label
|
|
35
35
|
- If `--since` provided: add `--search "created:>YYYY-MM-DD"` filter
|
|
36
36
|
|
|
37
37
|
2. For each issue, fetch full details:
|
|
@@ -41,62 +41,50 @@ gh issue view NNN --json number,title,body,comments,labels,createdAt
|
|
|
41
41
|
|
|
42
42
|
3. For batches >20 issues, prefer `gh api graphql` for batch fetching to respect GitHub API rate limits (5000/hour authenticated).
|
|
43
43
|
|
|
44
|
-
4. If
|
|
44
|
+
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."
|
|
45
45
|
|
|
46
|
-
### Phase 2:
|
|
46
|
+
### Phase 2: Codebase Analysis
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
For each issue, perform direct codebase analysis:
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
**2A: Context Extraction** — From issue title and body, extract:
|
|
51
|
+
- File paths mentioned (regex: backtick-wrapped paths, `:\d+` line refs, `(L\d+)`, `(lines \d+-\d+)`)
|
|
52
|
+
- Error messages or stack traces
|
|
53
|
+
- Keywords (function names, class names, config keys, module names)
|
|
54
|
+
- Component areas mentioned (e.g., "auth", "CI", "hooks")
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
- **Disagreement points** where analyses differ
|
|
56
|
+
**2B: Codebase Search** — Delegate to Explore agent(s):
|
|
57
|
+
- Search for extracted keywords using Grep across the codebase
|
|
58
|
+
- Find related files using Glob patterns derived from keywords
|
|
59
|
+
- For explicitly mentioned files, verify existence and read relevant sections
|
|
60
|
+
- For error messages, trace to source location
|
|
61
|
+
- Map import/dependency relationships for affected files
|
|
63
62
|
|
|
64
|
-
|
|
63
|
+
**2C: Impact Assessment** — For each relevant file found:
|
|
64
|
+
- Read current state of the code
|
|
65
|
+
- Check recent changes: `git log --since=<issue_created_date> --oneline -- <file>`
|
|
66
|
+
- Determine if the issue has already been addressed by recent commits
|
|
67
|
+
- Assess blast radius (what depends on this code, what does this code depend on)
|
|
65
68
|
|
|
66
|
-
|
|
69
|
+
**2D: Structured Finding** — Produce per-issue analysis:
|
|
67
70
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
|
73
|
-
|
|
74
|
-
|
|
|
75
|
-
|
|
|
76
|
-
| Freshness | Changed since comment was written | `git log --since=<comment_date> -- <file>` |
|
|
77
|
-
|
|
78
|
-
**Result classification:**
|
|
79
|
-
|
|
80
|
-
| Status | Meaning | Marker |
|
|
81
|
-
|--------|---------|--------|
|
|
82
|
-
| `verified` | File exists + content matches | ✅ |
|
|
83
|
-
| `stale-still-valid` | File changed but recommendation still applies | ⚠️ |
|
|
84
|
-
| `stale-invalidated` | File changed and recommendation is moot | ⚠️❌ |
|
|
85
|
-
| `missing` | File/path not found | ❌ |
|
|
86
|
-
| `unchecked` | No specific path to verify | ➖ |
|
|
87
|
-
|
|
88
|
-
**No limits**: All mentioned file paths are verified exhaustively. Quality over token cost.
|
|
89
|
-
|
|
90
|
-
**Shared verification**: If the same file is mentioned across multiple issues, verify once and share the result.
|
|
71
|
+
| Field | Content |
|
|
72
|
+
|-------|---------|
|
|
73
|
+
| Affected files | List with status: `exists` ✅ / `missing` ❌ / `changed-since-issue` ⚠️ |
|
|
74
|
+
| Architecture impact | Breaking changes, dependency effects, scope of change |
|
|
75
|
+
| Implementation path | Concrete steps with file:line references from current codebase |
|
|
76
|
+
| Risk level | P1 (critical/security/breaking) / P2 (moderate/compat) / P3 (nice-to-have) |
|
|
77
|
+
| Size estimate | XS (<1h) / S (1-3h) / M (3-8h) / L (1-3d) / XL (>3d) |
|
|
78
|
+
| Already resolved? | Yes / No / Partial — with git evidence (commit hash, PR number) |
|
|
91
79
|
|
|
92
80
|
**Parallelization (R009/R018):**
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
81
|
+
- 1-3 issues → single Explore agent per issue (parallel per R009)
|
|
82
|
+
- 4-10 issues → parallel Explore agents, max 4 concurrent (R009)
|
|
83
|
+
- 10+ issues or 3+ Explore agents needed → Agent Teams per R018
|
|
96
84
|
|
|
97
|
-
**Delegation**:
|
|
85
|
+
**Delegation**: All codebase search delegated to Explore agent(s) with `model: haiku`. Orchestrator collects and synthesizes results.
|
|
98
86
|
|
|
99
|
-
### Phase
|
|
87
|
+
### Phase 3: Cross-Analyze
|
|
100
88
|
|
|
101
89
|
**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.
|
|
102
90
|
|
|
@@ -107,24 +95,137 @@ Perform deep cross-analysis with full context from all issues:
|
|
|
107
95
|
- Same release series (e.g., alpha.3/5/6)
|
|
108
96
|
- Same upstream dependency
|
|
109
97
|
- Same affected component
|
|
110
|
-
3. **Conflicting
|
|
111
|
-
- Codebase
|
|
112
|
-
- Specificity (concrete code-level
|
|
113
|
-
- Recency (newer
|
|
98
|
+
3. **Conflicting findings** — Where findings disagree across issues, resolve based on:
|
|
99
|
+
- Codebase evidence (Phase 2 results)
|
|
100
|
+
- Specificity (concrete code-level finding > abstract observation)
|
|
101
|
+
- Recency (newer findings > older ones)
|
|
114
102
|
4. **Priority matrix** — Unified priority ranking:
|
|
115
103
|
- P1: Breaking changes, security issues, blocking bugs
|
|
116
104
|
- P2: Documentation gaps, compatibility updates, medium-risk items
|
|
117
105
|
- P3: Nice-to-have improvements, future considerations
|
|
118
106
|
5. **Action determination** — Per-issue decision:
|
|
107
|
+
- `Close (Already Resolved)`: Phase 2 found issue already fixed by recent commits
|
|
119
108
|
- `Close (Not Applicable)`: Issue is irrelevant (internal dependency tag, no impact)
|
|
120
109
|
- `Close (Duplicate of #NNN)`: Superseded by another issue in the batch
|
|
121
110
|
- `Open — action required`: Real work needed
|
|
122
111
|
- `Open — monitoring`: Waiting for external trigger (e.g., stable release)
|
|
123
112
|
- `New issue needed`: Cross-analysis discovered issue not yet tracked
|
|
124
113
|
|
|
125
|
-
### Phase
|
|
114
|
+
### Phase 4: Multi-Perspective Analysis & Output
|
|
115
|
+
|
|
116
|
+
For each analyzed issue, generate multi-perspective analysis comments and artifacts.
|
|
117
|
+
|
|
118
|
+
**Parallelization (R009):**
|
|
119
|
+
- Phase 4A + 4B: parallel (independent perspectives)
|
|
120
|
+
- Phase 4C: after 4A + 4B complete (synthesis requires both inputs)
|
|
121
|
+
- Phase 4D + 4E: parallel (independent outputs, both depend on 4C)
|
|
122
|
+
- Phase 4F: after all above (verification gate)
|
|
123
|
+
|
|
124
|
+
**4A: 🏛️ Senior Architect Analysis** — Delegate to arch-documenter (model: sonnet) to post GitHub comment:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
## 🏛️ Senior Architect Analysis
|
|
128
|
+
|
|
129
|
+
### Architecture Impact
|
|
130
|
+
| Component | Impact | Risk |
|
|
131
|
+
|-----------|--------|------|
|
|
132
|
+
| {component} | {description} | {High/Medium/Low} |
|
|
133
|
+
|
|
134
|
+
### Code-Level Analysis
|
|
135
|
+
{Specific file:line references from Phase 2 codebase analysis}
|
|
136
|
+
|
|
137
|
+
### Strategic Assessment
|
|
138
|
+
- **Feasibility**: {assessment with evidence}
|
|
139
|
+
- **Priority recommendation**: {P1/P2/P3 with rationale}
|
|
140
|
+
|
|
141
|
+
### Risk & Considerations
|
|
142
|
+
| Risk | Likelihood | Mitigation |
|
|
143
|
+
|------|-----------|------------|
|
|
144
|
+
| {risk} | {High/Medium/Low} | {mitigation} |
|
|
145
|
+
|
|
146
|
+
**Estimated effort**: {XS/S/M/L/XL}
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
_🏛️ Senior Architect perspective — `/professor-triage` v2.1.0_
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**4B: 🤝 Project Colleague Review** — Delegate to arch-documenter (model: sonnet) to post GitHub comment:
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
## 🤝 Project Colleague Review
|
|
156
|
+
|
|
157
|
+
### Implementation Ideas
|
|
158
|
+
{Concrete code locations and change suggestions with file:line references}
|
|
159
|
+
|
|
160
|
+
### Easy-to-Miss Details
|
|
161
|
+
- {Name collisions, validation bypasses, race conditions, edge cases}
|
|
162
|
+
|
|
163
|
+
### Suggested Next Steps
|
|
164
|
+
1. {Actionable step with specific file/function reference}
|
|
165
|
+
2. {Actionable step}
|
|
166
|
+
3. {Actionable step}
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
_🤝 Project Colleague perspective — `/professor-triage` v2.1.0_
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Note: Do NOT include a "First Impressions" (첫인상) section in the Colleague Review — this was explicitly excluded per user feedback.
|
|
173
|
+
|
|
174
|
+
**4C: 🎓 Professor Synthesis** — Delegate to arch-documenter (model: opus) to post GitHub comment. This phase requires 4A and 4B results as input:
|
|
126
175
|
|
|
127
|
-
|
|
176
|
+
```
|
|
177
|
+
## 🎓 Professor Synthesis
|
|
178
|
+
|
|
179
|
+
### Codebase Verification
|
|
180
|
+
| Claim (from Architect/Colleague) | Verified | Evidence |
|
|
181
|
+
|----------------------------------|----------|----------|
|
|
182
|
+
| {claim} | ✅/⚠️/❌ | {file:line or git evidence} |
|
|
183
|
+
|
|
184
|
+
### Consensus & Divergence
|
|
185
|
+
| Topic | Architect | Colleague | Verdict |
|
|
186
|
+
|-------|-----------|-----------|---------|
|
|
187
|
+
| {topic} | {position} | {position} | {synthesized judgment} |
|
|
188
|
+
|
|
189
|
+
### Priority Matrix
|
|
190
|
+
| Dimension | Assessment |
|
|
191
|
+
|-----------|-----------|
|
|
192
|
+
| Urgency | {High/Medium/Low} |
|
|
193
|
+
| Importance | {High/Medium/Low} |
|
|
194
|
+
| Size | {XS/S/M/L/XL} |
|
|
195
|
+
| Recommended order | {N of M in batch} |
|
|
196
|
+
|
|
197
|
+
### Missed Perspectives
|
|
198
|
+
{Considerations neither Architect nor Colleague raised}
|
|
199
|
+
|
|
200
|
+
### Execution Roadmap
|
|
201
|
+
| Phase | Task | Files | Depends on |
|
|
202
|
+
|-------|------|-------|-----------|
|
|
203
|
+
| 1 | {task} | {files} | — |
|
|
204
|
+
| 2 | {task} | {files} | Phase 1 |
|
|
205
|
+
|
|
206
|
+
### Final Conclusion
|
|
207
|
+
{2-3 sentence synthesis with definitive recommendation}
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
_🎓 Professor Synthesis — `/professor-triage` v2.1.0_
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**4D: Issue Triage Comment (MANDATORY)** — Every analyzed issue MUST receive a triage comment. This is not optional — even for issues created in the same session or with existing analysis. Skipping comments breaks the triage audit trail. Delegate to mgr-gitnerd to post on each analyzed issue:
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
## 🔬 Professor Triage — Codebase Analysis Result
|
|
217
|
+
|
|
218
|
+
**Decision**: {Close (Already Resolved) | Close (Not Applicable) | Close (Duplicate of #NNN) | Open — action required | Open — monitoring}
|
|
219
|
+
**Rationale**: {1-2 line summary based on codebase findings}
|
|
220
|
+
**Affected files**: {N} analyzed — {N}✅ {N}⚠️ {N}❌
|
|
221
|
+
**Risk**: {P1/P2/P3} | **Size**: {XS/S/M/L/XL}
|
|
222
|
+
**Full report**: {artifact path}
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
_Analyzed by `/professor-triage` v2.1.0 against current codebase with {N} related issues_
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**4E: Artifact Report** — Delegate to arch-documenter to write:
|
|
128
229
|
|
|
129
230
|
Path: `.claude/outputs/sessions/YYYY-MM-DD/professor-triage-HHmmss.md`
|
|
130
231
|
|
|
@@ -135,51 +236,52 @@ Template:
|
|
|
135
236
|
# Professor Triage Report — YYYY-MM-DD
|
|
136
237
|
|
|
137
238
|
## Analysis Target
|
|
138
|
-
| # | Title | Labels |
|
|
139
|
-
|
|
239
|
+
| # | Title | Labels | Created |
|
|
240
|
+
|---|-------|--------|---------|
|
|
140
241
|
|
|
141
|
-
## Per-Issue
|
|
242
|
+
## Per-Issue Analysis
|
|
142
243
|
### #NNN — title
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
-
|
|
244
|
+
- **Affected files**: N analyzed — N✅ N⚠️ N❌
|
|
245
|
+
- **Architecture impact**: ...
|
|
246
|
+
- **Implementation path**: ...
|
|
247
|
+
- **Risk/Priority**: P1/P2/P3
|
|
248
|
+
- **Size**: XS/S/M/L/XL
|
|
249
|
+
- **Already resolved?**: Yes/No/Partial — evidence
|
|
250
|
+
- **Recommended action**: ...
|
|
146
251
|
|
|
147
252
|
## Cross-Analysis
|
|
148
253
|
### Common Patterns
|
|
149
254
|
### Duplicate/Merge Candidates
|
|
150
|
-
### Conflicting
|
|
255
|
+
### Conflicting Findings Resolution
|
|
151
256
|
### Priority Matrix
|
|
152
257
|
|
|
258
|
+
## Multi-Perspective Summary
|
|
259
|
+
### Architect Highlights
|
|
260
|
+
### Colleague Highlights
|
|
261
|
+
### Professor Synthesis Key Points
|
|
262
|
+
|
|
153
263
|
## Executed Actions
|
|
154
264
|
| Issue | Action | Status |
|
|
155
265
|
|
|
156
266
|
## Pending Actions (Confirmation Required)
|
|
157
267
|
```
|
|
158
268
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
```
|
|
162
|
-
## 🔬 Professor Triage — Cross-Analysis Result
|
|
269
|
+
### Phase 4F: Comment Verification Gate
|
|
163
270
|
|
|
164
|
-
|
|
165
|
-
**Rationale**: {1-2 line summary}
|
|
166
|
-
**Verification**: {N}✅ {N}⚠️ {N}❌
|
|
167
|
-
**Full report**: {artifact path}
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
_Cross-analyzed by `/professor-triage` with {N} related issues_
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### Phase 5C: Comment Verification Gate
|
|
174
|
-
|
|
175
|
-
Before proceeding to Phase 6, verify ALL analyzed issues received comments:
|
|
271
|
+
Before proceeding to Phase 5, verify ALL analyzed issues received the full set of comments (Architect + Colleague + Professor Synthesis + Triage):
|
|
176
272
|
```bash
|
|
177
273
|
# For each issue NNN in the batch:
|
|
178
274
|
gh issue view NNN --json comments --jq '.comments | map(select(.body | contains("Professor Triage"))) | length'
|
|
179
|
-
# Must be >= 1 for every issue. If any is 0,
|
|
275
|
+
# Must be >= 1 for every issue. If any is 0, go back and post.
|
|
276
|
+
|
|
277
|
+
# Also verify multi-perspective comments:
|
|
278
|
+
gh issue view NNN --json comments --jq '.comments | map(select(.body | contains("Senior Architect"))) | length'
|
|
279
|
+
gh issue view NNN --json comments --jq '.comments | map(select(.body | contains("Project Colleague"))) | length'
|
|
280
|
+
gh issue view NNN --json comments --jq '.comments | map(select(.body | contains("Professor Synthesis"))) | length'
|
|
281
|
+
# All must be >= 1. If any is 0, the corresponding Phase 4A/4B/4C was skipped — go back and post.
|
|
180
282
|
```
|
|
181
283
|
|
|
182
|
-
### Phase
|
|
284
|
+
### Phase 5: Act
|
|
183
285
|
|
|
184
286
|
Delegate ALL GitHub operations to mgr-gitnerd.
|
|
185
287
|
|
|
@@ -187,10 +289,11 @@ Delegate ALL GitHub operations to mgr-gitnerd.
|
|
|
187
289
|
|
|
188
290
|
| Condition | Action |
|
|
189
291
|
|-----------|--------|
|
|
190
|
-
|
|
|
292
|
+
| Phase 2 found issue already resolved (with commit evidence) | `gh issue close --reason "completed"` + comment with resolving commit |
|
|
293
|
+
| Cross-analysis concludes "Not Applicable" / "no action needed" | `gh issue close --reason "not planned"` |
|
|
191
294
|
| Cross-analysis detects same-series duplicates | Keep latest, close others + `duplicate` label |
|
|
192
295
|
| All analysis complete | Add `verify-done` label |
|
|
193
|
-
|
|
|
296
|
+
| Priority assigned | Add `P1`/`P2`/`P3` label |
|
|
194
297
|
|
|
195
298
|
**Confirmation required (high-risk):**
|
|
196
299
|
|
|
@@ -207,8 +310,12 @@ Present to user and wait for approval before executing:
|
|
|
207
310
|
|
|
208
311
|
## Notes
|
|
209
312
|
|
|
210
|
-
- Phase
|
|
211
|
-
- Phase
|
|
212
|
-
- Phase
|
|
213
|
-
- Phase
|
|
214
|
-
- Phase
|
|
313
|
+
- Phase 1: Orchestrator fetches issues directly (no agent needed)
|
|
314
|
+
- Phase 2: Explore agents with `model: haiku` for codebase search; orchestrator synthesizes findings
|
|
315
|
+
- Phase 3: Orchestrator directly (read-only, R010 exception); opus agent for >15 issues
|
|
316
|
+
- Phase 4A/4B: `arch-documenter` (sonnet) for Architect/Colleague analysis comments (parallel)
|
|
317
|
+
- Phase 4C: `arch-documenter` (opus) for Professor Synthesis comment (requires 4A+4B)
|
|
318
|
+
- Phase 4D: `mgr-gitnerd` for triage comment; Phase 4E: `arch-documenter` for artifact report (parallel)
|
|
319
|
+
- Phase 4F: Verification gate for all 4 comment types
|
|
320
|
+
- Phase 5: `mgr-gitnerd` for all GitHub operations
|
|
321
|
+
- No external dependencies (omc_issue_analyzer removed in v2.0.0, multi-perspective analysis restored in v2.1.0)
|
package/templates/manifest.json
CHANGED
|
@@ -14,7 +14,7 @@ steps:
|
|
|
14
14
|
|
|
15
15
|
- name: triage
|
|
16
16
|
skill: professor-triage
|
|
17
|
-
description:
|
|
17
|
+
description: Analyze verify-done issues against current codebase and perform automated triage
|
|
18
18
|
|
|
19
19
|
- name: plan
|
|
20
20
|
skill: release-plan
|