create-agentic-pdlc 2.4.0 → 3.0.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/.agentic-pdlc/hooks/pdlc-stage-gate.sh +37 -10
- package/.claude/settings.json +18 -0
- package/.coderabbit.yaml +35 -0
- package/.github/workflows/project-automation.yml +13 -67
- package/CLAUDE.md +1 -1
- package/README.md +33 -32
- package/adapters/claude-code/skill.md +7 -3
- package/bin/cli.js +549 -209
- package/docs/superpowers/plans/2026-06-04-spec-format-issue-template.md +160 -0
- package/docs/superpowers/plans/2026-06-04-two-tier-installer.md +1056 -0
- package/docs/superpowers/specs/2026-06-04-spec-format-issue-template-design.md +46 -0
- package/package.json +2 -2
- package/templates/full/CLAUDE.md +30 -0
- package/templates/lite/AGENTS.md +121 -0
- package/templates/lite/CLAUDE.md +44 -0
- package/tests/cli.test.js +32 -0
- package/.github/workflows/agentic-metrics.yml +0 -545
- package/.github/workflows/qa-agent.yml +0 -139
- package/.github/workflows/qa-gate.yml +0 -51
- /package/templates/{AGENTS.md → full/AGENTS.md} +0 -0
- /package/templates/{docs → full/docs}/pdlc.md +0 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Spec-Format Issue Template Installation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
4
|
+
|
|
5
|
+
**Goal:** Make `npx create-agentic-pdlc` install `.github/ISSUE_TEMPLATE/` directly into the target project so GitHub shows the spec-format template when users create issues.
|
|
6
|
+
|
|
7
|
+
**Architecture:** Single change in `bin/cli.js` — inside `runSetup()`, after the existing template copy block, add a `copyDirSync` call that copies `templates/.github/ISSUE_TEMPLATE/` directly to `targetDir/.github/ISSUE_TEMPLATE/`. No placeholder substitution needed.
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** Node.js, `fs`, `path` — all already imported. No new dependencies.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
### Task 1: Add i18n string
|
|
14
|
+
|
|
15
|
+
**Files:**
|
|
16
|
+
- Modify: `bin/cli.js:77` (inside `i18n` object, before the closing `}`)
|
|
17
|
+
|
|
18
|
+
No test infrastructure exists in this project — verification is manual (Task 2).
|
|
19
|
+
|
|
20
|
+
- [ ] **Step 1: Add the i18n string**
|
|
21
|
+
|
|
22
|
+
In [bin/cli.js](bin/cli.js), on line 77 (right before the closing `};` of the `i18n` object), add:
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
protection_warn: t('⚠️ Branch protection could not be set automatically.\n Set required checks manually: Settings → Branches → main → Required status checks.\n Required: "PDLC Stage Gate" and "QA Gate"', '⚠️ Proteção de branch não pôde ser configurada automaticamente.\n Configure manualmente: Settings → Branches → main → Required status checks.\n Obrigatórios: "PDLC Stage Gate" e "QA Gate"', '⚠️ No se pudo configurar la protección de rama automáticamente.\n Configúralo en: Settings → Branches → main → Required status checks.\n Requeridos: "PDLC Stage Gate" y "QA Gate"'),
|
|
26
|
+
issue_templates_copied: t(
|
|
27
|
+
'✅ Issue templates copied to .github/ISSUE_TEMPLATE/',
|
|
28
|
+
'✅ Issue templates copiados para .github/ISSUE_TEMPLATE/',
|
|
29
|
+
'✅ Issue templates copiados a .github/ISSUE_TEMPLATE/'
|
|
30
|
+
),
|
|
31
|
+
};
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
(Replace the existing `protection_warn` line + closing `};` with the block above — adds the new key before `};`.)
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
### Task 2: Add copyDirSync call in runSetup()
|
|
39
|
+
|
|
40
|
+
**Files:**
|
|
41
|
+
- Modify: `bin/cli.js:387` (inside `if (fs.existsSync(sourceTemplates))` block, after the `templates_copied` log line)
|
|
42
|
+
|
|
43
|
+
- [ ] **Step 1: Add the copy block**
|
|
44
|
+
|
|
45
|
+
In [bin/cli.js](bin/cli.js), after line 387 (`console.log(`${i18n.templates_copied}`)`), insert:
|
|
46
|
+
|
|
47
|
+
```js
|
|
48
|
+
// Copy issue templates directly to .github/ISSUE_TEMPLATE/ so GitHub picks them up
|
|
49
|
+
const sourceIssueTemplates = path.join(sourceDir, 'templates', '.github', 'ISSUE_TEMPLATE');
|
|
50
|
+
const targetIssueTemplates = path.join(targetDir, '.github', 'ISSUE_TEMPLATE');
|
|
51
|
+
if (fs.existsSync(sourceIssueTemplates)) {
|
|
52
|
+
copyDirSync(sourceIssueTemplates, targetIssueTemplates);
|
|
53
|
+
console.log(i18n.issue_templates_copied);
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The result in context should look like:
|
|
58
|
+
|
|
59
|
+
```js
|
|
60
|
+
if (fs.existsSync(sourceTemplates)) {
|
|
61
|
+
copyDirSync(sourceTemplates, targetTemplates);
|
|
62
|
+
console.log(`${i18n.templates_copied}`);
|
|
63
|
+
|
|
64
|
+
// Copy issue templates directly to .github/ISSUE_TEMPLATE/ so GitHub picks them up
|
|
65
|
+
const sourceIssueTemplates = path.join(sourceDir, 'templates', '.github', 'ISSUE_TEMPLATE');
|
|
66
|
+
const targetIssueTemplates = path.join(targetDir, '.github', 'ISSUE_TEMPLATE');
|
|
67
|
+
if (fs.existsSync(sourceIssueTemplates)) {
|
|
68
|
+
copyDirSync(sourceIssueTemplates, targetIssueTemplates);
|
|
69
|
+
console.log(i18n.issue_templates_copied);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Substitute values in docs/pdlc.md automatically
|
|
73
|
+
const pdlcDest = path.join(targetTemplates, 'docs', 'pdlc.md');
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
- [ ] **Step 2: Verify syntax is valid**
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
node --check bin/cli.js
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Expected: no output (exit code 0). Any output means a syntax error — fix before continuing.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### Task 3: Manual verification
|
|
87
|
+
|
|
88
|
+
- [ ] **Step 1: Create a temp target directory and run the copy logic in isolation**
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
node -e "
|
|
92
|
+
const fs = require('fs');
|
|
93
|
+
const path = require('path');
|
|
94
|
+
const sourceDir = '.';
|
|
95
|
+
const targetDir = '/tmp/pdlc-test-157';
|
|
96
|
+
|
|
97
|
+
function copyDirSync(src, dest) {
|
|
98
|
+
if (!fs.existsSync(dest)) fs.mkdirSync(dest, { recursive: true });
|
|
99
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
100
|
+
const s = path.join(src, entry.name);
|
|
101
|
+
const d = path.join(dest, entry.name);
|
|
102
|
+
entry.isDirectory() ? copyDirSync(s, d) : fs.copyFileSync(s, d);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const sourceIssueTemplates = path.join(sourceDir, 'templates', '.github', 'ISSUE_TEMPLATE');
|
|
107
|
+
const targetIssueTemplates = path.join(targetDir, '.github', 'ISSUE_TEMPLATE');
|
|
108
|
+
if (fs.existsSync(sourceIssueTemplates)) {
|
|
109
|
+
copyDirSync(sourceIssueTemplates, targetIssueTemplates);
|
|
110
|
+
console.log('copied');
|
|
111
|
+
} else {
|
|
112
|
+
console.log('source not found');
|
|
113
|
+
}
|
|
114
|
+
"
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Expected output: `copied`
|
|
118
|
+
|
|
119
|
+
- [ ] **Step 2: Verify files are in the right place**
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
ls /tmp/pdlc-test-157/.github/ISSUE_TEMPLATE/
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Expected output:
|
|
126
|
+
```
|
|
127
|
+
bug.md
|
|
128
|
+
feature.md
|
|
129
|
+
task.md
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
- [ ] **Step 3: Verify .github/ was created recursively (didn't exist before)**
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
ls /tmp/pdlc-test-157/.github/
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Expected output:
|
|
139
|
+
```
|
|
140
|
+
ISSUE_TEMPLATE
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
- [ ] **Step 4: Clean up**
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
rm -rf /tmp/pdlc-test-157
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
### Task 4: Commit
|
|
152
|
+
|
|
153
|
+
- [ ] **Step 1: Stage and commit**
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
git add bin/cli.js
|
|
157
|
+
git commit -m "feat(cli): install issue templates to .github/ISSUE_TEMPLATE/ during setup
|
|
158
|
+
|
|
159
|
+
Closes #157"
|
|
160
|
+
```
|