create-agentic-pdlc 2.3.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/.agentic-pdlc/metrics/raw/2026-W22.jsonl +114 -0
- package/.claude/settings.json +18 -0
- package/.coderabbit.yaml +35 -0
- package/.github/ISSUE_TEMPLATE/bug.md +53 -0
- package/.github/ISSUE_TEMPLATE/feature.md +54 -0
- package/.github/ISSUE_TEMPLATE/task.md +33 -0
- package/.github/workflows/add-to-board.yml +1 -1
- package/.github/workflows/agent-trigger.yml +4 -4
- package/.github/workflows/ci.yml +1 -1
- package/.github/workflows/npm-publish.yml +2 -2
- package/.github/workflows/pdlc-health-check.yml +1 -1
- package/.github/workflows/pdlc-stage-gate.yml +2 -2
- package/.github/workflows/project-automation.yml +25 -40
- package/AGENTS.md +50 -8
- package/CLAUDE.md +3 -1
- package/README.md +33 -32
- package/SETUP.md +2 -1
- package/adapters/claude-code/skill.md +39 -14
- package/adapters/hooks/pdlc-stage-gate.sh +3 -8
- package/bin/cli.js +555 -194
- package/docs/pdlc.md +5 -5
- package/docs/superpowers/plans/2026-05-28-jules-label-pat-split.md +240 -0
- package/docs/superpowers/plans/2026-05-29-agentic-pulse-rework-taxonomy.md +474 -0
- package/docs/superpowers/plans/2026-05-29-qa-gate-enforcement.md +354 -0
- 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-05-29-agentic-pulse-rework-taxonomy-design.md +122 -0
- package/docs/superpowers/specs/2026-06-04-spec-format-issue-template-design.md +46 -0
- package/package.json +2 -2
- package/templates/.github/ISSUE_TEMPLATE/bug.md +53 -0
- package/templates/.github/ISSUE_TEMPLATE/feature.md +54 -0
- package/templates/.github/ISSUE_TEMPLATE/task.md +33 -0
- package/templates/.github/workflows/add-to-board.yml +4 -4
- package/templates/.github/workflows/agent-trigger.yml +22 -13
- package/{.agentic-pdlc/templates → templates}/.github/workflows/agentic-metrics.yml +150 -27
- package/templates/.github/workflows/ci.yml +1 -1
- package/templates/.github/workflows/pdlc-health-check.yml +1 -1
- package/templates/.github/workflows/pdlc-stage-gate.yml +2 -2
- package/templates/.github/workflows/project-automation.yml +71 -32
- package/templates/.github/workflows/qa-agent.yml +32 -18
- package/templates/.github/workflows/qa-gate.yml +51 -0
- package/templates/full/AGENTS.md +143 -0
- package/templates/full/CLAUDE.md +30 -0
- package/templates/{docs → full/docs}/pdlc.md +4 -4
- package/templates/lite/AGENTS.md +121 -0
- package/templates/lite/CLAUDE.md +44 -0
- package/tests/cli.test.js +32 -0
- package/.agentic-pdlc/templates/.github/CODEOWNERS +0 -5
- package/.agentic-pdlc/templates/.github/copilot-instructions.md +0 -12
- package/.agentic-pdlc/templates/.github/workflows/add-to-board.yml +0 -38
- package/.agentic-pdlc/templates/.github/workflows/agent-trigger.yml +0 -146
- package/.agentic-pdlc/templates/.github/workflows/auto-approve.yml +0 -16
- package/.agentic-pdlc/templates/.github/workflows/ci.yml +0 -54
- package/.agentic-pdlc/templates/.github/workflows/pdlc-health-check.yml +0 -121
- package/.agentic-pdlc/templates/.github/workflows/pdlc-stage-gate.yml +0 -51
- package/.agentic-pdlc/templates/.github/workflows/project-automation.yml +0 -274
- package/.agentic-pdlc/templates/.github/workflows/protect-workflows.yml +0 -21
- package/.agentic-pdlc/templates/.github/workflows/qa-agent.yml +0 -128
- package/.agentic-pdlc/templates/AGENTS.md +0 -104
- package/.agentic-pdlc/templates/docs/pdlc.md +0 -123
- package/.github/workflows/agentic-metrics.yml +0 -422
- package/.github/workflows/qa-agent.yml +0 -128
- package/templates/AGENTS.md +0 -115
|
@@ -1,39 +1,66 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# PDLC Stage Gate — blocks gh pr create without
|
|
2
|
+
# PDLC Stage Gate — blocks gh pr create and file edits without spec:approved on linked issue.
|
|
3
3
|
# Bypass: branch prefix hotfix/ skips all checks.
|
|
4
4
|
|
|
5
5
|
INPUT=$(cat)
|
|
6
6
|
COMMAND=$(echo "$INPUT" | node -e "const d=JSON.parse(require('fs').readFileSync(0)); console.log(d.command || '')" 2>/dev/null || echo "")
|
|
7
|
+
FILE_PATH=$(echo "$INPUT" | node -e "const d=JSON.parse(require('fs').readFileSync(0)); console.log(d.file_path || '')" 2>/dev/null || echo "")
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
IS_PR_CREATE=false
|
|
10
|
+
IS_FILE_EDIT=false
|
|
11
|
+
|
|
12
|
+
if echo "$COMMAND" | grep -q "gh pr create"; then
|
|
13
|
+
IS_PR_CREATE=true
|
|
14
|
+
elif [ -n "$FILE_PATH" ]; then
|
|
15
|
+
IS_FILE_EDIT=true
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
if [ "$IS_PR_CREATE" != "true" ] && [ "$IS_FILE_EDIT" != "true" ]; then
|
|
9
19
|
exit 0
|
|
10
20
|
fi
|
|
11
21
|
|
|
12
22
|
BRANCH=$(git branch --show-current 2>/dev/null || echo "")
|
|
13
23
|
|
|
14
24
|
if echo "$BRANCH" | grep -qE "^hotfix/"; then
|
|
15
|
-
echo "✅ PDLC: Hotfix branch — stage gate bypassed."
|
|
16
25
|
exit 0
|
|
17
26
|
fi
|
|
18
27
|
|
|
19
28
|
ISSUE_NUM=$(echo "$BRANCH" | grep -oE '[0-9]+' | head -1)
|
|
20
29
|
|
|
21
30
|
if [ -z "$ISSUE_NUM" ]; then
|
|
31
|
+
if [ "$IS_FILE_EDIT" = "true" ]; then
|
|
32
|
+
exit 0
|
|
33
|
+
fi
|
|
22
34
|
echo "❌ PDLC Stage Gate: Cannot determine issue from branch '$BRANCH'."
|
|
23
35
|
echo " Use: feat/<issue-number>-<description> or hotfix/<issue-number>-<description>"
|
|
24
36
|
exit 1
|
|
25
37
|
fi
|
|
26
38
|
|
|
27
|
-
LABELS=$(gh issue view "$ISSUE_NUM" --json labels --jq '[.labels[].name] | join(" ")' 2>/dev/null
|
|
39
|
+
LABELS=$(gh issue view "$ISSUE_NUM" --json labels --jq '[.labels[].name] | join(" ")' 2>/dev/null)
|
|
40
|
+
if [ $? -ne 0 ] || [ -z "$LABELS" ]; then
|
|
41
|
+
echo "❌ PDLC Stage Gate: Could not fetch labels for issue #$ISSUE_NUM."
|
|
42
|
+
echo " Missing condition: spec:approved"
|
|
43
|
+
echo " Next step: verify gh auth and issue number, then have PM add spec:approved."
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
28
46
|
|
|
29
|
-
if echo "$LABELS" | grep -qw "
|
|
30
|
-
echo "✅ PDLC: Issue #$ISSUE_NUM approved — gate passed."
|
|
47
|
+
if echo "$LABELS" | grep -qw "spec:approved"; then
|
|
31
48
|
exit 0
|
|
32
49
|
fi
|
|
33
50
|
|
|
34
51
|
STAGE=$(echo "$LABELS" | tr ' ' '\n' | grep "^stage:" | head -1 || echo "none")
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
echo "
|
|
38
|
-
echo "
|
|
52
|
+
|
|
53
|
+
if [ "$IS_PR_CREATE" = "true" ]; then
|
|
54
|
+
echo "❌ PDLC Stage Gate: PR creation blocked — issue #$ISSUE_NUM missing spec:approved."
|
|
55
|
+
echo " Current stage: $STAGE"
|
|
56
|
+
echo " Missing condition: spec:approved (set by PM after reviewing spec in issue body)"
|
|
57
|
+
echo " Next step: complete spec → stage:approval → wait for PM to add spec:approved."
|
|
58
|
+
echo " Emergency bypass: rename branch to hotfix/<issue-number>-<description>."
|
|
59
|
+
else
|
|
60
|
+
echo "❌ PDLC Stage Gate: File edit blocked — issue #$ISSUE_NUM missing spec:approved."
|
|
61
|
+
echo " Current stage: $STAGE"
|
|
62
|
+
echo " Missing condition: spec:approved (set by PM after reviewing spec in issue body)"
|
|
63
|
+
echo " Next step: complete spec → stage:approval → wait for PM to add spec:approved."
|
|
64
|
+
echo " Emergency bypass: rename branch to hotfix/<issue-number>-<description>."
|
|
65
|
+
fi
|
|
39
66
|
exit 1
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
{"issueNumber":84,"stage":"stage:brainstorming","durationDays":0}
|
|
2
|
+
{"issueNumber":84,"stage":"stage:detailing","durationDays":0}
|
|
3
|
+
{"issueNumber":84,"stage":"stage:approval","durationDays":0}
|
|
4
|
+
{"issueNumber":84,"stage":"stage:development","durationDays":0}
|
|
5
|
+
{"issueNumber":85,"stage":"stage:brainstorming","durationDays":0}
|
|
6
|
+
{"issueNumber":85,"stage":"stage:detailing","durationDays":0}
|
|
7
|
+
{"issueNumber":85,"stage":"stage:approval","durationDays":0}
|
|
8
|
+
{"issueNumber":85,"stage":"stage:approval","durationDays":0}
|
|
9
|
+
{"issueNumber":87,"stage":"stage:approval","durationDays":0}
|
|
10
|
+
{"issueNumber":87,"stage":"stage:development","durationDays":0}
|
|
11
|
+
{"issueNumber":87,"stage":"stage:brainstorming","durationDays":0}
|
|
12
|
+
{"issueNumber":87,"stage":"stage:detailing","durationDays":0}
|
|
13
|
+
{"issueNumber":87,"stage":"stage:approval","durationDays":0}
|
|
14
|
+
{"issueNumber":88,"stage":"stage:brainstorming","durationDays":0}
|
|
15
|
+
{"issueNumber":88,"stage":"stage:detailing","durationDays":0}
|
|
16
|
+
{"issueNumber":88,"stage":"stage:approval","durationDays":0}
|
|
17
|
+
{"issueNumber":88,"stage":"stage:development","durationDays":0}
|
|
18
|
+
{"issueNumber":89,"stage":"stage:brainstorming","durationDays":0}
|
|
19
|
+
{"issueNumber":90,"stage":"stage:brainstorming","durationDays":0}
|
|
20
|
+
{"issueNumber":90,"stage":"stage:detailing","durationDays":0}
|
|
21
|
+
{"issueNumber":90,"stage":"stage:approval","durationDays":0}
|
|
22
|
+
{"issueNumber":90,"stage":"stage:approval","durationDays":0}
|
|
23
|
+
{"issueNumber":91,"stage":"stage:brainstorming","durationDays":0}
|
|
24
|
+
{"issueNumber":91,"stage":"stage:detailing","durationDays":0}
|
|
25
|
+
{"issueNumber":91,"stage":"stage:approval","durationDays":0}
|
|
26
|
+
{"issueNumber":91,"stage":"stage:development","durationDays":0}
|
|
27
|
+
{"issueNumber":92,"stage":"stage:brainstorming","durationDays":0}
|
|
28
|
+
{"issueNumber":92,"stage":"stage:detailing","durationDays":0}
|
|
29
|
+
{"issueNumber":92,"stage":"stage:approval","durationDays":0}
|
|
30
|
+
{"issueNumber":92,"stage":"stage:development","durationDays":0}
|
|
31
|
+
{"issueNumber":93,"stage":"stage:brainstorming","durationDays":0}
|
|
32
|
+
{"issueNumber":93,"stage":"stage:detailing","durationDays":0}
|
|
33
|
+
{"issueNumber":93,"stage":"stage:approval","durationDays":0}
|
|
34
|
+
{"issueNumber":93,"stage":"stage:development","durationDays":0}
|
|
35
|
+
{"issueNumber":94,"stage":"stage:brainstorming","durationDays":0}
|
|
36
|
+
{"issueNumber":94,"stage":"stage:detailing","durationDays":0}
|
|
37
|
+
{"issueNumber":94,"stage":"stage:approval","durationDays":0}
|
|
38
|
+
{"issueNumber":96,"stage":"stage:brainstorming","durationDays":0}
|
|
39
|
+
{"issueNumber":96,"stage":"stage:detailing","durationDays":0}
|
|
40
|
+
{"issueNumber":96,"stage":"stage:approval","durationDays":0}
|
|
41
|
+
{"issueNumber":96,"stage":"stage:development","durationDays":0}
|
|
42
|
+
{"issueNumber":97,"stage":"stage:brainstorming","durationDays":0}
|
|
43
|
+
{"issueNumber":97,"stage":"stage:detailing","durationDays":0}
|
|
44
|
+
{"issueNumber":97,"stage":"stage:approval","durationDays":0}
|
|
45
|
+
{"issueNumber":109,"stage":"stage:brainstorming","durationDays":0}
|
|
46
|
+
{"issueNumber":109,"stage":"stage:detailing","durationDays":0}
|
|
47
|
+
{"issueNumber":109,"stage":"stage:approval","durationDays":0}
|
|
48
|
+
{"issueNumber":109,"stage":"stage:development","durationDays":0}
|
|
49
|
+
{"issueNumber":110,"stage":"stage:brainstorming","durationDays":0}
|
|
50
|
+
{"issueNumber":110,"stage":"stage:detailing","durationDays":0}
|
|
51
|
+
{"issueNumber":110,"stage":"stage:approval","durationDays":0.3}
|
|
52
|
+
{"issueNumber":110,"stage":"stage:development","durationDays":0}
|
|
53
|
+
{"issueNumber":110,"stage":"stage:testing","durationDays":0}
|
|
54
|
+
{"issueNumber":111,"stage":"stage:brainstorming","durationDays":0}
|
|
55
|
+
{"issueNumber":111,"stage":"stage:detailing","durationDays":0}
|
|
56
|
+
{"issueNumber":111,"stage":"stage:approval","durationDays":0.3}
|
|
57
|
+
{"issueNumber":111,"stage":"stage:development","durationDays":0}
|
|
58
|
+
{"issueNumber":111,"stage":"stage:testing","durationDays":0}
|
|
59
|
+
{"issueNumber":113,"stage":"stage:brainstorming","durationDays":0}
|
|
60
|
+
{"issueNumber":113,"stage":"stage:detailing","durationDays":0}
|
|
61
|
+
{"issueNumber":113,"stage":"stage:approval","durationDays":0}
|
|
62
|
+
{"issueNumber":113,"stage":"stage:development","durationDays":0}
|
|
63
|
+
{"issueNumber":116,"stage":"stage:brainstorming","durationDays":3.7}
|
|
64
|
+
{"issueNumber":116,"stage":"stage:detailing","durationDays":0}
|
|
65
|
+
{"issueNumber":116,"stage":"stage:approval","durationDays":0}
|
|
66
|
+
{"issueNumber":116,"stage":"stage:development","durationDays":0}
|
|
67
|
+
{"issueNumber":119,"stage":"stage:brainstorming","durationDays":0}
|
|
68
|
+
{"issueNumber":119,"stage":"stage:detailing","durationDays":0}
|
|
69
|
+
{"issueNumber":119,"stage":"stage:approval","durationDays":0}
|
|
70
|
+
{"issueNumber":119,"stage":"stage:approval","durationDays":0.3}
|
|
71
|
+
{"issueNumber":119,"stage":"stage:development","durationDays":0}
|
|
72
|
+
{"issueNumber":120,"stage":"stage:brainstorming","durationDays":0}
|
|
73
|
+
{"issueNumber":120,"stage":"stage:detailing","durationDays":0}
|
|
74
|
+
{"issueNumber":120,"stage":"stage:approval","durationDays":0}
|
|
75
|
+
{"issueNumber":120,"stage":"stage:development","durationDays":0}
|
|
76
|
+
{"issueNumber":122,"stage":"stage:brainstorming","durationDays":0.1}
|
|
77
|
+
{"issueNumber":122,"stage":"stage:detailing","durationDays":0}
|
|
78
|
+
{"issueNumber":122,"stage":"stage:approval","durationDays":0}
|
|
79
|
+
{"issueNumber":122,"stage":"stage:development","durationDays":0}
|
|
80
|
+
{"issueNumber":125,"stage":"stage:brainstorming","durationDays":0}
|
|
81
|
+
{"issueNumber":125,"stage":"stage:detailing","durationDays":0}
|
|
82
|
+
{"issueNumber":125,"stage":"stage:approval","durationDays":0.1}
|
|
83
|
+
{"issueNumber":125,"stage":"stage:development","durationDays":0}
|
|
84
|
+
{"issueNumber":128,"stage":"stage:brainstorming","durationDays":0.6}
|
|
85
|
+
{"issueNumber":128,"stage":"stage:detailing","durationDays":0}
|
|
86
|
+
{"issueNumber":128,"stage":"stage:approval","durationDays":0}
|
|
87
|
+
{"issueNumber":128,"stage":"stage:development","durationDays":0}
|
|
88
|
+
{"issueNumber":130,"stage":"stage:brainstorming","durationDays":0}
|
|
89
|
+
{"issueNumber":130,"stage":"stage:detailing","durationDays":0}
|
|
90
|
+
{"issueNumber":130,"stage":"stage:approval","durationDays":0}
|
|
91
|
+
{"issueNumber":130,"stage":"stage:development","durationDays":0}
|
|
92
|
+
{"issueNumber":132,"stage":"stage:brainstorming","durationDays":0}
|
|
93
|
+
{"issueNumber":132,"stage":"stage:detailing","durationDays":0}
|
|
94
|
+
{"issueNumber":132,"stage":"stage:approval","durationDays":0}
|
|
95
|
+
{"issueNumber":132,"stage":"stage:development","durationDays":0}
|
|
96
|
+
{"issueNumber":132,"stage":"stage:testing","durationDays":0}
|
|
97
|
+
{"issueNumber":135,"stage":"stage:brainstorming","durationDays":0}
|
|
98
|
+
{"issueNumber":135,"stage":"stage:detailing","durationDays":0}
|
|
99
|
+
{"issueNumber":135,"stage":"stage:approval","durationDays":0}
|
|
100
|
+
{"issueNumber":135,"stage":"stage:development","durationDays":0}
|
|
101
|
+
{"issueNumber":136,"stage":"stage:brainstorming","durationDays":0}
|
|
102
|
+
{"issueNumber":136,"stage":"stage:detailing","durationDays":0}
|
|
103
|
+
{"issueNumber":136,"stage":"stage:approval","durationDays":0}
|
|
104
|
+
{"issueNumber":136,"stage":"stage:development","durationDays":0}
|
|
105
|
+
{"issueNumber":136,"stage":"stage:testing","durationDays":0.1}
|
|
106
|
+
{"issueNumber":137,"stage":"stage:brainstorming","durationDays":0}
|
|
107
|
+
{"issueNumber":137,"stage":"stage:detailing","durationDays":0}
|
|
108
|
+
{"issueNumber":137,"stage":"stage:approval","durationDays":0}
|
|
109
|
+
{"issueNumber":137,"stage":"stage:development","durationDays":0}
|
|
110
|
+
{"issueNumber":137,"stage":"stage:testing","durationDays":0}
|
|
111
|
+
{"issueNumber":141,"stage":"stage:brainstorming","durationDays":0}
|
|
112
|
+
{"issueNumber":142,"stage":"stage:brainstorming","durationDays":0}
|
|
113
|
+
{"issueNumber":142,"stage":"stage:detailing","durationDays":0}
|
|
114
|
+
{"issueNumber":142,"stage":"stage:approval","durationDays":0}
|
package/.claude/settings.json
CHANGED
|
@@ -9,6 +9,24 @@
|
|
|
9
9
|
"command": "bash .agentic-pdlc/hooks/pdlc-stage-gate.sh"
|
|
10
10
|
}
|
|
11
11
|
]
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"matcher": "Edit",
|
|
15
|
+
"hooks": [
|
|
16
|
+
{
|
|
17
|
+
"type": "command",
|
|
18
|
+
"command": "bash .agentic-pdlc/hooks/pdlc-stage-gate.sh"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"matcher": "Write",
|
|
24
|
+
"hooks": [
|
|
25
|
+
{
|
|
26
|
+
"type": "command",
|
|
27
|
+
"command": "bash .agentic-pdlc/hooks/pdlc-stage-gate.sh"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
12
30
|
}
|
|
13
31
|
]
|
|
14
32
|
}
|
package/.coderabbit.yaml
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
language: "en-US"
|
|
2
|
+
reviews:
|
|
3
|
+
profile: "chill"
|
|
4
|
+
request_changes_workflow: false
|
|
5
|
+
high_level_summary: true
|
|
6
|
+
poem: false
|
|
7
|
+
auto_review:
|
|
8
|
+
enabled: true
|
|
9
|
+
drafts: false
|
|
10
|
+
base_branches:
|
|
11
|
+
- main
|
|
12
|
+
path_instructions:
|
|
13
|
+
- path: ".github/workflows/**"
|
|
14
|
+
instructions: >
|
|
15
|
+
Pay close attention to GitHub Actions syntax correctness, trigger
|
|
16
|
+
semantics (push/pull_request/workflow_run events and their filters),
|
|
17
|
+
expression syntax (${{ }}), and shell quoting in run steps.
|
|
18
|
+
Flag any logic that could cause silent failures or unintended trigger
|
|
19
|
+
behavior.
|
|
20
|
+
review_status: true
|
|
21
|
+
auto_apply_labels: true
|
|
22
|
+
labeling_instructions:
|
|
23
|
+
- label: "architecture-violation"
|
|
24
|
+
instructions: >
|
|
25
|
+
Apply when the PR introduces runtime behavior that violates documented
|
|
26
|
+
architectural invariants: code that bypasses the PDLC stage gate at runtime,
|
|
27
|
+
application code that programmatically sets or removes labels reserved for
|
|
28
|
+
automation (stage:*, spec:approved, qa:*) outside of their designated
|
|
29
|
+
automation workflows, business logic added directly to templates instead of
|
|
30
|
+
the CLI, or behavior that directly contradicts invariants in AGENTS.md or
|
|
31
|
+
CLAUDE.md. Do NOT apply for configuration changes to tools (e.g., updating
|
|
32
|
+
.coderabbit.yaml, GitHub Actions workflows, or CI config files) — those are
|
|
33
|
+
infrastructure, not invariant violations.
|
|
34
|
+
chat:
|
|
35
|
+
auto_reply: true
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug
|
|
3
|
+
about: Broken behavior with root cause and fix criteria
|
|
4
|
+
title: 'bug: '
|
|
5
|
+
labels: type:bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Problem
|
|
10
|
+
|
|
11
|
+
<!-- What fails. Who affected. Measured impact. -->
|
|
12
|
+
|
|
13
|
+
## Root Cause
|
|
14
|
+
|
|
15
|
+
<!-- Why it fails. Link to code/config if known. -->
|
|
16
|
+
|
|
17
|
+
## Reproduction Steps
|
|
18
|
+
|
|
19
|
+
1.
|
|
20
|
+
2.
|
|
21
|
+
3.
|
|
22
|
+
|
|
23
|
+
**Expected:**
|
|
24
|
+
**Actual:**
|
|
25
|
+
|
|
26
|
+
## Acceptance Criteria
|
|
27
|
+
|
|
28
|
+
<!-- agent fills during detailing -->
|
|
29
|
+
|
|
30
|
+
**AC1 — [name]**
|
|
31
|
+
- Given
|
|
32
|
+
- When
|
|
33
|
+
- Then
|
|
34
|
+
|
|
35
|
+
## Edge Cases
|
|
36
|
+
|
|
37
|
+
<!-- agent fills during detailing -->
|
|
38
|
+
- EC1: [condition] → [expected behavior]
|
|
39
|
+
|
|
40
|
+
## Out of Scope
|
|
41
|
+
|
|
42
|
+
<!-- agent fills during detailing -->
|
|
43
|
+
-
|
|
44
|
+
|
|
45
|
+
## Non-Functional Requirements
|
|
46
|
+
|
|
47
|
+
<!-- agent fills during detailing — omit if pure docs/markdown -->
|
|
48
|
+
- Reliability: idempotent — safe to re-run
|
|
49
|
+
|
|
50
|
+
## Files to Modify
|
|
51
|
+
|
|
52
|
+
<!-- agent fills during detailing -->
|
|
53
|
+
- `path/to/file` — what changes
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature
|
|
3
|
+
about: New capability with spec scaffold for detailing agent
|
|
4
|
+
title: 'feat: '
|
|
5
|
+
labels: type:feature
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Problem
|
|
10
|
+
|
|
11
|
+
<!-- What fails or is missing. Who affected. Measured impact. -->
|
|
12
|
+
|
|
13
|
+
## Sprint Goal / Success Metrics
|
|
14
|
+
|
|
15
|
+
<!-- agent fills during detailing -->
|
|
16
|
+
|
|
17
|
+
| Metric | Baseline | Target | When |
|
|
18
|
+
|--------|----------|--------|------|
|
|
19
|
+
| | | | |
|
|
20
|
+
|
|
21
|
+
## Solution
|
|
22
|
+
|
|
23
|
+
<!-- agent fills during detailing — behavioral description, no implementation details -->
|
|
24
|
+
|
|
25
|
+
## Acceptance Criteria
|
|
26
|
+
|
|
27
|
+
<!-- agent fills during detailing -->
|
|
28
|
+
|
|
29
|
+
**AC1 — [name]**
|
|
30
|
+
- Given
|
|
31
|
+
- When
|
|
32
|
+
- Then
|
|
33
|
+
|
|
34
|
+
## Edge Cases
|
|
35
|
+
|
|
36
|
+
<!-- agent fills during detailing -->
|
|
37
|
+
- EC1: [condition] → [expected behavior]
|
|
38
|
+
|
|
39
|
+
## Out of Scope
|
|
40
|
+
|
|
41
|
+
<!-- agent fills during detailing -->
|
|
42
|
+
-
|
|
43
|
+
|
|
44
|
+
## Non-Functional Requirements
|
|
45
|
+
|
|
46
|
+
<!-- agent fills during detailing — omit if pure docs/markdown -->
|
|
47
|
+
- Performance:
|
|
48
|
+
- Security:
|
|
49
|
+
- Reliability:
|
|
50
|
+
|
|
51
|
+
## Files to Modify
|
|
52
|
+
|
|
53
|
+
<!-- agent fills during detailing -->
|
|
54
|
+
- `path/to/file` — what changes
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Task
|
|
3
|
+
about: Defined work unit with clear done criteria
|
|
4
|
+
title: 'task: '
|
|
5
|
+
labels: type:task
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Objective
|
|
10
|
+
|
|
11
|
+
<!-- What must be done and why. -->
|
|
12
|
+
|
|
13
|
+
## Steps
|
|
14
|
+
|
|
15
|
+
<!-- agent fills during detailing -->
|
|
16
|
+
1.
|
|
17
|
+
2.
|
|
18
|
+
|
|
19
|
+
## Acceptance Criteria
|
|
20
|
+
|
|
21
|
+
<!-- agent fills during detailing -->
|
|
22
|
+
- [ ]
|
|
23
|
+
- [ ]
|
|
24
|
+
|
|
25
|
+
## Out of Scope
|
|
26
|
+
|
|
27
|
+
<!-- agent fills during detailing -->
|
|
28
|
+
-
|
|
29
|
+
|
|
30
|
+
## Files to Modify
|
|
31
|
+
|
|
32
|
+
<!-- agent fills during detailing -->
|
|
33
|
+
- `path/to/file` — what changes
|
|
@@ -18,7 +18,7 @@ jobs:
|
|
|
18
18
|
steps:
|
|
19
19
|
- name: Add issue to project board
|
|
20
20
|
if: ${{ env.PROJECT_TOKEN != '' && env.PROJECT_ID != '{{PROJECT_ID}}' }}
|
|
21
|
-
uses: actions/github-script@
|
|
21
|
+
uses: actions/github-script@v8
|
|
22
22
|
with:
|
|
23
23
|
github-token: ${{ env.PROJECT_TOKEN }}
|
|
24
24
|
script: |
|
|
@@ -22,7 +22,7 @@ jobs:
|
|
|
22
22
|
STATUS_DEVELOPMENT: "2c9e78e6"
|
|
23
23
|
steps:
|
|
24
24
|
- name: Swap labels — stage:approval → stage:development
|
|
25
|
-
uses: actions/github-script@
|
|
25
|
+
uses: actions/github-script@v8
|
|
26
26
|
with:
|
|
27
27
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
28
28
|
script: |
|
|
@@ -44,13 +44,13 @@ jobs:
|
|
|
44
44
|
owner,
|
|
45
45
|
repo,
|
|
46
46
|
issue_number,
|
|
47
|
-
labels: ['stage:development'
|
|
47
|
+
labels: ['stage:development']
|
|
48
48
|
});
|
|
49
49
|
|
|
50
50
|
- name: Move board card to Development
|
|
51
51
|
if: ${{ env.PROJECT_TOKEN != '' }}
|
|
52
52
|
continue-on-error: true
|
|
53
|
-
uses: actions/github-script@
|
|
53
|
+
uses: actions/github-script@v8
|
|
54
54
|
with:
|
|
55
55
|
github-token: ${{ env.PROJECT_TOKEN }}
|
|
56
56
|
script: |
|
|
@@ -79,7 +79,7 @@ jobs:
|
|
|
79
79
|
contents: read
|
|
80
80
|
steps:
|
|
81
81
|
- name: Comment on issue
|
|
82
|
-
uses: actions/github-script@
|
|
82
|
+
uses: actions/github-script@v8
|
|
83
83
|
with:
|
|
84
84
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
85
85
|
script: |
|
package/.github/workflows/ci.yml
CHANGED
|
@@ -11,7 +11,7 @@ jobs:
|
|
|
11
11
|
name: Run tests and linters
|
|
12
12
|
runs-on: ubuntu-latest
|
|
13
13
|
steps:
|
|
14
|
-
- uses: actions/checkout@
|
|
14
|
+
- uses: actions/checkout@v5.0.1
|
|
15
15
|
|
|
16
16
|
- name: Setup environment
|
|
17
17
|
run: echo "Replace this with your language/toolchain setup (e.g., actions/setup-node)"
|
|
@@ -14,10 +14,10 @@ jobs:
|
|
|
14
14
|
|
|
15
15
|
steps:
|
|
16
16
|
- name: Checkout Code
|
|
17
|
-
uses: actions/checkout@
|
|
17
|
+
uses: actions/checkout@v5.0.1
|
|
18
18
|
|
|
19
19
|
- name: Setup Node.js
|
|
20
|
-
uses: actions/setup-node@
|
|
20
|
+
uses: actions/setup-node@v6.4.0
|
|
21
21
|
with:
|
|
22
22
|
node-version: '24'
|
|
23
23
|
registry-url: 'https://registry.npmjs.org'
|
|
@@ -27,7 +27,7 @@ jobs:
|
|
|
27
27
|
steps:
|
|
28
28
|
- name: Validate Board Configuration
|
|
29
29
|
if: ${{ env.PROJECT_TOKEN != '' && env.PROJECT_ID != '{{PROJECT_ID}}' }}
|
|
30
|
-
uses: actions/github-script@
|
|
30
|
+
uses: actions/github-script@v8
|
|
31
31
|
with:
|
|
32
32
|
github-token: ${{ env.PROJECT_TOKEN }}
|
|
33
33
|
script: |
|
|
@@ -37,12 +37,12 @@ jobs:
|
|
|
37
37
|
|
|
38
38
|
for NUM in $ISSUE_NUMS; do
|
|
39
39
|
LABELS=$(gh issue view "$NUM" --repo "$REPO" --json labels --jq '[.labels[].name] | join(" ")' 2>/dev/null || echo "")
|
|
40
|
-
if echo "$LABELS" | grep -qw "stage:approval" || echo "$LABELS" | grep -qw "spec:approved" || echo "$LABELS" | grep -qw "stage:development"; then
|
|
40
|
+
if echo "$LABELS" | grep -qw "stage:approval" || echo "$LABELS" | grep -qw "spec:approved" || echo "$LABELS" | grep -qw "stage:development" || echo "$LABELS" | grep -qw "stage:testing" || echo "$LABELS" | grep -qw "human-approved"; then
|
|
41
41
|
echo "✅ Issue #$NUM approved"
|
|
42
42
|
else
|
|
43
43
|
STAGE=$(echo "$LABELS" | tr ' ' '\n' | grep "^stage:" | head -1 || echo "none")
|
|
44
44
|
echo "❌ Issue #$NUM missing approval (current: $STAGE)"
|
|
45
|
-
echo " Required: stage:approval OR spec:approved OR stage:development label on the issue."
|
|
45
|
+
echo " Required: stage:approval OR spec:approved OR stage:development OR stage:testing OR human-approved label on the issue."
|
|
46
46
|
echo " Emergency bypass: add 'hotfix' label to this PR."
|
|
47
47
|
exit 1
|
|
48
48
|
fi
|