vstack 0.0.0__py3-none-any.whl
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.
- vstack/__init__.py +5 -0
- vstack/__main__.py +5 -0
- vstack/_templates/agents/_partials/agent-skill-boundary.md +5 -0
- vstack/_templates/agents/architect/config.yaml +38 -0
- vstack/_templates/agents/architect/template.md +84 -0
- vstack/_templates/agents/designer/config.yaml +36 -0
- vstack/_templates/agents/designer/template.md +99 -0
- vstack/_templates/agents/engineer/config.yaml +36 -0
- vstack/_templates/agents/engineer/template.md +88 -0
- vstack/_templates/agents/product/config.yaml +37 -0
- vstack/_templates/agents/product/template.md +87 -0
- vstack/_templates/agents/release/config.yaml +35 -0
- vstack/_templates/agents/release/template.md +86 -0
- vstack/_templates/agents/tester/config.yaml +41 -0
- vstack/_templates/agents/tester/template.md +90 -0
- vstack/_templates/instructions/git/config.yaml +4 -0
- vstack/_templates/instructions/git/template.md +36 -0
- vstack/_templates/instructions/python/config.yaml +4 -0
- vstack/_templates/instructions/python/template.md +37 -0
- vstack/_templates/prompts/code-review/config.yaml +10 -0
- vstack/_templates/prompts/code-review/template.md +39 -0
- vstack/_templates/skills/_partials/base-branch.md +8 -0
- vstack/_templates/skills/_partials/observability-checklist.md +36 -0
- vstack/_templates/skills/_partials/run-tests.md +22 -0
- vstack/_templates/skills/_partials/skill-context.md +21 -0
- vstack/_templates/skills/adr/config.yaml +17 -0
- vstack/_templates/skills/adr/template.md +167 -0
- vstack/_templates/skills/analyse/config.yaml +16 -0
- vstack/_templates/skills/analyse/template.md +188 -0
- vstack/_templates/skills/architecture/config.yaml +18 -0
- vstack/_templates/skills/architecture/template.md +213 -0
- vstack/_templates/skills/cicd/config.yaml +16 -0
- vstack/_templates/skills/cicd/template.md +169 -0
- vstack/_templates/skills/code-review/config.yaml +16 -0
- vstack/_templates/skills/code-review/template.md +180 -0
- vstack/_templates/skills/concise/config.yaml +16 -0
- vstack/_templates/skills/concise/template.md +128 -0
- vstack/_templates/skills/consult/config.yaml +18 -0
- vstack/_templates/skills/consult/template.md +195 -0
- vstack/_templates/skills/container/config.yaml +17 -0
- vstack/_templates/skills/container/template.md +122 -0
- vstack/_templates/skills/debug/config.yaml +16 -0
- vstack/_templates/skills/debug/template.md +247 -0
- vstack/_templates/skills/dependency/config.yaml +18 -0
- vstack/_templates/skills/dependency/template.md +293 -0
- vstack/_templates/skills/design/config.yaml +16 -0
- vstack/_templates/skills/design/template.md +231 -0
- vstack/_templates/skills/docs/config.yaml +17 -0
- vstack/_templates/skills/docs/template.md +128 -0
- vstack/_templates/skills/explore/config.yaml +17 -0
- vstack/_templates/skills/explore/template.md +188 -0
- vstack/_templates/skills/guardrails/config.yaml +16 -0
- vstack/_templates/skills/guardrails/template.md +45 -0
- vstack/_templates/skills/incident/config.yaml +17 -0
- vstack/_templates/skills/incident/template.md +293 -0
- vstack/_templates/skills/inspect/config.yaml +16 -0
- vstack/_templates/skills/inspect/template.md +105 -0
- vstack/_templates/skills/migrate/config.yaml +17 -0
- vstack/_templates/skills/migrate/template.md +298 -0
- vstack/_templates/skills/onboard/config.yaml +18 -0
- vstack/_templates/skills/onboard/template.md +289 -0
- vstack/_templates/skills/openapi/config.yaml +17 -0
- vstack/_templates/skills/openapi/template.md +382 -0
- vstack/_templates/skills/performance/config.yaml +15 -0
- vstack/_templates/skills/performance/template.md +198 -0
- vstack/_templates/skills/pr/config.yaml +15 -0
- vstack/_templates/skills/pr/template.md +108 -0
- vstack/_templates/skills/refactor/config.yaml +18 -0
- vstack/_templates/skills/refactor/template.md +283 -0
- vstack/_templates/skills/release-notes/config.yaml +16 -0
- vstack/_templates/skills/release-notes/template.md +127 -0
- vstack/_templates/skills/requirements/config.yaml +17 -0
- vstack/_templates/skills/requirements/template.md +187 -0
- vstack/_templates/skills/security/config.yaml +17 -0
- vstack/_templates/skills/security/template.md +256 -0
- vstack/_templates/skills/verify/config.yaml +17 -0
- vstack/_templates/skills/verify/template.md +201 -0
- vstack/_templates/skills/vision/config.yaml +19 -0
- vstack/_templates/skills/vision/template.md +169 -0
- vstack/agents/__init__.py +5 -0
- vstack/agents/config.py +67 -0
- vstack/agents/constants.py +14 -0
- vstack/agents/generator.py +20 -0
- vstack/artifacts/__init__.py +17 -0
- vstack/artifacts/config.py +111 -0
- vstack/artifacts/constants.py +6 -0
- vstack/artifacts/generator.py +406 -0
- vstack/artifacts/models.py +55 -0
- vstack/artifacts/protocol.py +50 -0
- vstack/cli/__init__.py +3 -0
- vstack/cli/commands.py +596 -0
- vstack/cli/constants.py +33 -0
- vstack/cli/manifest.py +166 -0
- vstack/cli/parser.py +156 -0
- vstack/constants.py +84 -0
- vstack/frontmatter/__init__.py +8 -0
- vstack/frontmatter/parser.py +272 -0
- vstack/frontmatter/schema.py +142 -0
- vstack/frontmatter/serializer.py +208 -0
- vstack/instructions/__init__.py +5 -0
- vstack/instructions/config.py +21 -0
- vstack/instructions/constants.py +9 -0
- vstack/instructions/generator.py +13 -0
- vstack/main.py +71 -0
- vstack/models.py +35 -0
- vstack/prompts/__init__.py +5 -0
- vstack/prompts/config.py +21 -0
- vstack/prompts/constants.py +9 -0
- vstack/prompts/generator.py +13 -0
- vstack/skills/__init__.py +5 -0
- vstack/skills/config.py +58 -0
- vstack/skills/constants.py +17 -0
- vstack/skills/generator.py +20 -0
- vstack/skills/models.py +15 -0
- vstack-0.0.0.dist-info/METADATA +725 -0
- vstack-0.0.0.dist-info/RECORD +119 -0
- vstack-0.0.0.dist-info/WHEEL +4 -0
- vstack-0.0.0.dist-info/entry_points.txt +3 -0
- vstack-0.0.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
{{SKILL_CONTEXT}}
|
|
2
|
+
|
|
3
|
+
# pr — Commit, Push & Open Pull Request
|
|
4
|
+
|
|
5
|
+
Push the current branch and open a PR targeting main. This is the final step
|
|
6
|
+
before CI/CD takes over.
|
|
7
|
+
|
|
8
|
+
## Out of scope
|
|
9
|
+
|
|
10
|
+
- Running tests (use `verify`)
|
|
11
|
+
- Writing release notes (use `release-notes`)
|
|
12
|
+
- Merging or deploying — CI/CD handles that after merge
|
|
13
|
+
|
|
14
|
+
## Deliverable and artifact policy
|
|
15
|
+
|
|
16
|
+
- Primary deliverable: release pull request targeting main
|
|
17
|
+
- Baseline-first default: use existing branch artifacts directly; do not create parallel release records outside baseline docs.
|
|
18
|
+
- PR body source: `docs/releases/{date}.md` when present
|
|
19
|
+
- Before merge: ensure release artifact references in the PR body reflect final baseline files.
|
|
20
|
+
|
|
21
|
+
______________________________________________________________________
|
|
22
|
+
|
|
23
|
+
## Step 1: Pre-flight
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Confirm not on main
|
|
27
|
+
BRANCH=$(git branch --show-current)
|
|
28
|
+
if [ "$BRANCH" = "main" ] || [ "$BRANCH" = "master" ]; then
|
|
29
|
+
echo "ERROR: on $BRANCH — create a feature branch first"
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
echo "Branch: $BRANCH"
|
|
33
|
+
|
|
34
|
+
# Check release notes exist
|
|
35
|
+
DATE=$(date +%Y-%m-%d)
|
|
36
|
+
RELEASE_FILE="docs/releases/${DATE}.md"
|
|
37
|
+
[ -f "$RELEASE_FILE" ] || echo "WARN: $RELEASE_FILE not found — PR body will be empty"
|
|
38
|
+
|
|
39
|
+
# Show what will be included
|
|
40
|
+
git status --short
|
|
41
|
+
git log origin/main..HEAD --oneline
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
______________________________________________________________________
|
|
45
|
+
|
|
46
|
+
## Step 2: Commit
|
|
47
|
+
|
|
48
|
+
Stage and commit any uncommitted changes:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git add -A
|
|
52
|
+
git diff --cached --stat
|
|
53
|
+
|
|
54
|
+
# Only commit if there are staged changes
|
|
55
|
+
git diff --cached --quiet || git commit -m "release: $(date +%Y-%m-%d)"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
______________________________________________________________________
|
|
59
|
+
|
|
60
|
+
## Step 3: Push
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
git push --set-upstream origin "$BRANCH"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
______________________________________________________________________
|
|
67
|
+
|
|
68
|
+
## Step 4: Open PR
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
DATE=$(date +%Y-%m-%d)
|
|
72
|
+
RELEASE_FILE="docs/releases/${DATE}.md"
|
|
73
|
+
BODY=""
|
|
74
|
+
[ -f "$RELEASE_FILE" ] && BODY=$(cat "$RELEASE_FILE")
|
|
75
|
+
|
|
76
|
+
gh pr create \
|
|
77
|
+
--base main \
|
|
78
|
+
--title "release: ${DATE}" \
|
|
79
|
+
--body "$BODY"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
If `gh` is not available:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
echo "Open PR manually:"
|
|
86
|
+
echo " Title: release: $(date +%Y-%m-%d)"
|
|
87
|
+
echo " Base: main"
|
|
88
|
+
echo " Head: $BRANCH"
|
|
89
|
+
echo " URL: https://github.com/<org>/<repo>/compare/main...$BRANCH"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
______________________________________________________________________
|
|
93
|
+
|
|
94
|
+
## Step 5: Report to user
|
|
95
|
+
|
|
96
|
+
Report the PR URL and next steps:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
PR created: <url>
|
|
100
|
+
|
|
101
|
+
CI/CD will now:
|
|
102
|
+
- Run tests and security scan
|
|
103
|
+
- Build and publish container image
|
|
104
|
+
- Determine version (semantic-release / conventional commits)
|
|
105
|
+
- Deploy after approval and merge
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
______________________________________________________________________
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: refactor
|
|
2
|
+
version: 1.0.1
|
|
3
|
+
description: |
|
|
4
|
+
Structured refactoring for backend services, APIs, and libraries. Identifies
|
|
5
|
+
code smells, plans incremental changes, executes without altering observable
|
|
6
|
+
behavior, and verifies correctness. Use when asked to "refactor this",
|
|
7
|
+
"clean up this module", "reduce duplication", or "improve structure without
|
|
8
|
+
changing behavior". Never changes behavior — if behavior must change, stop
|
|
9
|
+
and use the engineering role.
|
|
10
|
+
argument-hint: '[module, file, or area to refactor]'
|
|
11
|
+
|
|
12
|
+
license: MIT
|
|
13
|
+
compatibility: Requires a skills-compatible agent with repository file access and terminal command execution when needed.
|
|
14
|
+
metadata:
|
|
15
|
+
owner: vstack
|
|
16
|
+
maturity: stable
|
|
17
|
+
user-invocable: true
|
|
18
|
+
disable-model-invocation: false
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
{{SKILL_CONTEXT}}
|
|
2
|
+
|
|
3
|
+
{{BASE_BRANCH}}
|
|
4
|
+
|
|
5
|
+
# refactor — Structured Refactoring
|
|
6
|
+
|
|
7
|
+
Improve the internal structure of code without changing its observable behavior.
|
|
8
|
+
Refactoring is not rewriting. Every step must leave tests green.
|
|
9
|
+
|
|
10
|
+
## Out of scope
|
|
11
|
+
|
|
12
|
+
- Fixing bugs (use `debug`)
|
|
13
|
+
- Adding features (engineering role)
|
|
14
|
+
- Performance optimizations that change behavior (use `performance`)
|
|
15
|
+
- Architecture redesign (use `architecture`)
|
|
16
|
+
- Security fixes (use `security`)
|
|
17
|
+
|
|
18
|
+
**Golden rule: If all tests pass before and after each step, the refactor is
|
|
19
|
+
correct. If behavior changes, stop — that is a feature or bug fix, not a refactor.**
|
|
20
|
+
|
|
21
|
+
______________________________________________________________________
|
|
22
|
+
|
|
23
|
+
## Step 0: Define the Scope
|
|
24
|
+
|
|
25
|
+
> **Question:** What needs refactoring and why?
|
|
26
|
+
>
|
|
27
|
+
> - Which file(s), module(s), or area(s)?
|
|
28
|
+
> - What is the motivation? (duplication, complexity, naming, coupling, size)
|
|
29
|
+
> - What must NOT change? (public API, behavior, performance characteristics)
|
|
30
|
+
> **Default:** Identify smells in the specified area and propose a plan.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Understand the current state
|
|
34
|
+
git log --oneline -10
|
|
35
|
+
git diff <base> --stat 2>/dev/null | head -20
|
|
36
|
+
|
|
37
|
+
# Find the files to refactor
|
|
38
|
+
# Read the area before touching anything
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Document:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
Scope: [file(s) or module(s)]
|
|
45
|
+
Motivation: [duplication | complexity | naming | coupling | size | other]
|
|
46
|
+
Constraints: [what must not change]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
______________________________________________________________________
|
|
50
|
+
|
|
51
|
+
## Step 1: Establish a Baseline
|
|
52
|
+
|
|
53
|
+
**Never start refactoring without a green test baseline.**
|
|
54
|
+
|
|
55
|
+
{{RUN_TESTS}}
|
|
56
|
+
|
|
57
|
+
If tests are red before you start:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
⛔ STOP: Tests are failing before the refactor begins.
|
|
61
|
+
Fix failing tests first, or confirm with the user that the failures are
|
|
62
|
+
pre-existing and unrelated to this refactor scope.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Record the baseline:
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
Baseline:
|
|
69
|
+
Tests: [N passed, N failed, N skipped]
|
|
70
|
+
Coverage: [N%]
|
|
71
|
+
Lint: [clean | N warnings]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
______________________________________________________________________
|
|
75
|
+
|
|
76
|
+
## Step 2: Identify Code Smells
|
|
77
|
+
|
|
78
|
+
Scan the target area for common smells:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Long files
|
|
82
|
+
wc -l $(find . -name '*.py' -o -name '*.ts' -o -name '*.go' \
|
|
83
|
+
2>/dev/null | grep -v node_modules | grep -v .venv) 2>/dev/null | sort -rn | head -20
|
|
84
|
+
|
|
85
|
+
# Duplicated patterns
|
|
86
|
+
grep -r -n "TODO\|FIXME\|HACK\|XXX" \
|
|
87
|
+
--include='*.py' --include='*.ts' --include='*.go' \
|
|
88
|
+
--exclude-dir=node_modules --exclude-dir=.venv --exclude-dir=.git \
|
|
89
|
+
. 2>/dev/null | head -20
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
| Smell | Description | Refactoring |
|
|
93
|
+
| ----------------------- | ------------------------------------- | --------------------------- |
|
|
94
|
+
| Long function | > 30 lines, multiple responsibilities | Extract function |
|
|
95
|
+
| Long file | > 300 lines | Extract module |
|
|
96
|
+
| Duplicate code | Same logic in 2+ places | Extract shared function |
|
|
97
|
+
| Magic numbers/strings | Unnamed literals | Named constant |
|
|
98
|
+
| Deep nesting | > 3 levels | Early return / guard clause |
|
|
99
|
+
| Long parameter list | > 4 parameters | Parameter object |
|
|
100
|
+
| Inappropriate naming | Misleading or vague names | Rename |
|
|
101
|
+
| Dead code | Unused functions/variables | Remove |
|
|
102
|
+
| Comment explaining code | Code needs a comment to be understood | Rewrite the code |
|
|
103
|
+
| Mutable global state | Module-level mutable variables | Encapsulate |
|
|
104
|
+
|
|
105
|
+
Produce a prioritized smell list:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
Smells found:
|
|
109
|
+
P1 (high impact): [smell] — [location]
|
|
110
|
+
P2 (medium): [smell] — [location]
|
|
111
|
+
P3 (low): [smell] — [location]
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
______________________________________________________________________
|
|
115
|
+
|
|
116
|
+
## Step 3: Plan the Refactoring
|
|
117
|
+
|
|
118
|
+
Break the refactoring into small, independent steps. Each step must:
|
|
119
|
+
|
|
120
|
+
1. Change exactly one thing
|
|
121
|
+
1. Leave tests green
|
|
122
|
+
1. Be reviewable in isolation
|
|
123
|
+
|
|
124
|
+
```text
|
|
125
|
+
Refactoring plan:
|
|
126
|
+
Step 1: [specific change] — [file] — [smell addressed]
|
|
127
|
+
Step 2: [specific change] — [file] — [smell addressed]
|
|
128
|
+
Step 3: ...
|
|
129
|
+
|
|
130
|
+
Estimated scope: [N files, N functions]
|
|
131
|
+
Risk: [Low | Medium — reason]
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Stop and confirm with user if:**
|
|
135
|
+
|
|
136
|
+
- The plan requires changing a public API or exported interface
|
|
137
|
+
- The plan requires changing database schema
|
|
138
|
+
- More than 10 files are affected
|
|
139
|
+
|
|
140
|
+
______________________________________________________________________
|
|
141
|
+
|
|
142
|
+
## Step 4: Execute — One Step at a Time
|
|
143
|
+
|
|
144
|
+
For each planned step:
|
|
145
|
+
|
|
146
|
+
1. Make the change
|
|
147
|
+
1. Run tests immediately
|
|
148
|
+
1. Confirm green before moving to the next step
|
|
149
|
+
|
|
150
|
+
{{RUN_TESTS}}
|
|
151
|
+
|
|
152
|
+
### Common refactoring patterns
|
|
153
|
+
|
|
154
|
+
**Extract function (Python):**
|
|
155
|
+
|
|
156
|
+
```python
|
|
157
|
+
# Before
|
|
158
|
+
def process_order(order):
|
|
159
|
+
# validate
|
|
160
|
+
if not order.get("id"):
|
|
161
|
+
raise ValueError("missing id")
|
|
162
|
+
if order.get("amount", 0) <= 0:
|
|
163
|
+
raise ValueError("amount must be positive")
|
|
164
|
+
# process
|
|
165
|
+
...
|
|
166
|
+
|
|
167
|
+
# After
|
|
168
|
+
def _validate_order(order: dict) -> None:
|
|
169
|
+
if not order.get("id"):
|
|
170
|
+
raise ValueError("missing id")
|
|
171
|
+
if order.get("amount", 0) <= 0:
|
|
172
|
+
raise ValueError("amount must be positive")
|
|
173
|
+
|
|
174
|
+
def process_order(order: dict) -> None:
|
|
175
|
+
_validate_order(order)
|
|
176
|
+
...
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**Guard clause (replace nested conditionals):**
|
|
180
|
+
|
|
181
|
+
```python
|
|
182
|
+
# Before
|
|
183
|
+
def process(item):
|
|
184
|
+
if item is not None:
|
|
185
|
+
if item.active:
|
|
186
|
+
if item.value > 0:
|
|
187
|
+
return item.value * 2
|
|
188
|
+
return None
|
|
189
|
+
|
|
190
|
+
# After
|
|
191
|
+
def process(item):
|
|
192
|
+
if item is None:
|
|
193
|
+
return None
|
|
194
|
+
if not item.active:
|
|
195
|
+
return None
|
|
196
|
+
if item.value <= 0:
|
|
197
|
+
return None
|
|
198
|
+
return item.value * 2
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Named constant:**
|
|
202
|
+
|
|
203
|
+
```python
|
|
204
|
+
# Before
|
|
205
|
+
if status_code == 429:
|
|
206
|
+
time.sleep(60)
|
|
207
|
+
|
|
208
|
+
# After
|
|
209
|
+
HTTP_TOO_MANY_REQUESTS = 429
|
|
210
|
+
RATE_LIMIT_BACKOFF_SECONDS = 60
|
|
211
|
+
|
|
212
|
+
if status_code == HTTP_TOO_MANY_REQUESTS:
|
|
213
|
+
time.sleep(RATE_LIMIT_BACKOFF_SECONDS)
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Parameter object:**
|
|
217
|
+
|
|
218
|
+
```python
|
|
219
|
+
# Before
|
|
220
|
+
def create_user(name, email, role, department, manager_id, start_date):
|
|
221
|
+
...
|
|
222
|
+
|
|
223
|
+
# After
|
|
224
|
+
@dataclass
|
|
225
|
+
class CreateUserRequest:
|
|
226
|
+
name: str
|
|
227
|
+
email: str
|
|
228
|
+
role: str
|
|
229
|
+
department: str
|
|
230
|
+
manager_id: str
|
|
231
|
+
start_date: date
|
|
232
|
+
|
|
233
|
+
def create_user(request: CreateUserRequest) -> User:
|
|
234
|
+
...
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
______________________________________________________________________
|
|
238
|
+
|
|
239
|
+
## Step 5: Verify
|
|
240
|
+
|
|
241
|
+
After all steps are complete, run the full verification suite:
|
|
242
|
+
|
|
243
|
+
{{RUN_TESTS}}
|
|
244
|
+
|
|
245
|
+
Check:
|
|
246
|
+
|
|
247
|
+
- [ ] All tests still pass (same count as baseline)
|
|
248
|
+
- [ ] Coverage has not dropped
|
|
249
|
+
- [ ] No new lint warnings introduced
|
|
250
|
+
- [ ] No public interfaces changed (unless explicitly in scope)
|
|
251
|
+
- [ ] No behavior changes (verify with diff)
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
# Review what changed
|
|
255
|
+
git diff --stat
|
|
256
|
+
git diff
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
______________________________________________________________________
|
|
260
|
+
|
|
261
|
+
## Output
|
|
262
|
+
|
|
263
|
+
```text
|
|
264
|
+
Refactoring Summary
|
|
265
|
+
═══════════════════
|
|
266
|
+
|
|
267
|
+
Scope: [file(s) / module(s)]
|
|
268
|
+
Smells: [N identified]
|
|
269
|
+
Steps: [N completed]
|
|
270
|
+
|
|
271
|
+
Changes made:
|
|
272
|
+
✅ [Step 1 description] — [file]
|
|
273
|
+
✅ [Step 2 description] — [file]
|
|
274
|
+
...
|
|
275
|
+
|
|
276
|
+
Result:
|
|
277
|
+
Tests: [N passed — same as baseline]
|
|
278
|
+
Coverage: [N% — unchanged or improved]
|
|
279
|
+
Lint: [clean]
|
|
280
|
+
|
|
281
|
+
Public API changed: No
|
|
282
|
+
Behavior changed: No
|
|
283
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: release-notes
|
|
2
|
+
version: 1.0.2
|
|
3
|
+
description: |
|
|
4
|
+
Prepare release artifacts: verify all docs are present, write release notes,
|
|
5
|
+
own CHANGELOG.md updates, and produce docs/releases/{date}.md.
|
|
6
|
+
Use when asked to "write release notes", "update the changelog", or
|
|
7
|
+
"prepare release artifacts".
|
|
8
|
+
argument-hint: '[version or changes to release]'
|
|
9
|
+
|
|
10
|
+
license: MIT
|
|
11
|
+
compatibility: Requires a skills-compatible agent with repository file access and terminal command execution when needed.
|
|
12
|
+
metadata:
|
|
13
|
+
owner: vstack
|
|
14
|
+
maturity: stable
|
|
15
|
+
user-invocable: true
|
|
16
|
+
disable-model-invocation: false
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{{SKILL_CONTEXT}}
|
|
2
|
+
|
|
3
|
+
# release-notes — Release Artifact Preparation
|
|
4
|
+
|
|
5
|
+
Verify all artifacts are complete, write release notes, and update the changelog.
|
|
6
|
+
|
|
7
|
+
This skill owns both `docs/releases/{date}.md` and `CHANGELOG.md` updates.
|
|
8
|
+
|
|
9
|
+
## Out of scope
|
|
10
|
+
|
|
11
|
+
- Running tests or audits (use `verify`, `security`, `performance`)
|
|
12
|
+
- Creating the PR (use `pr`)
|
|
13
|
+
- Deployment — CI/CD takes over after merge
|
|
14
|
+
|
|
15
|
+
## Deliverable and artifact policy
|
|
16
|
+
|
|
17
|
+
- Primary deliverables: `docs/releases/{date}.md`, `CHANGELOG.md`
|
|
18
|
+
- Baseline-first default: write final release artifacts directly to baseline docs on the feature branch.
|
|
19
|
+
- Optional WIP area for complex/uncertain efforts: `docs/delta/{id}/RELEASE_DELTA.md`
|
|
20
|
+
- Before merge: consolidate final release summary and changelog entries into baseline artifacts.
|
|
21
|
+
|
|
22
|
+
______________________________________________________________________
|
|
23
|
+
|
|
24
|
+
## Step 1: Artifact checklist
|
|
25
|
+
|
|
26
|
+
Verify these files exist and are not empty:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
for f in docs/product/requirements.md docs/architecture/architecture.md docs/design/design.md \
|
|
30
|
+
docs/test-report.md docs/security-report.md CHANGELOG.md; do
|
|
31
|
+
[ -f "$f" ] && echo "✓ $f" || echo "✗ MISSING: $f"
|
|
32
|
+
done
|
|
33
|
+
|
|
34
|
+
# Scope-conditional artifacts
|
|
35
|
+
[ -f docs/performance-baseline.md ] && echo "✓ docs/performance-baseline.md" || echo "i docs/performance-baseline.md (optional unless performance validation is in scope)"
|
|
36
|
+
[ -f docs/observability-baseline.md ] && echo "✓ docs/observability-baseline.md" || echo "i docs/observability-baseline.md (optional; observability evidence may be in docs/test-report.md)"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If any required artifact is missing: **STOP and report**. Do not proceed.
|
|
40
|
+
If performance validation is in scope and `docs/performance-baseline.md` is missing: **STOP and report**.
|
|
41
|
+
|
|
42
|
+
______________________________________________________________________
|
|
43
|
+
|
|
44
|
+
## Step 2: Summarise changes
|
|
45
|
+
|
|
46
|
+
Review what changed on this branch vs main:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
git log origin/main..HEAD --oneline
|
|
50
|
+
git diff origin/main --stat | head -30
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Identify:
|
|
54
|
+
|
|
55
|
+
- New features
|
|
56
|
+
- Bug fixes
|
|
57
|
+
- Breaking changes (if any)
|
|
58
|
+
- Internal/infrastructure changes
|
|
59
|
+
|
|
60
|
+
______________________________________________________________________
|
|
61
|
+
|
|
62
|
+
## Step 3: Write `docs/releases/{date}.md`
|
|
63
|
+
|
|
64
|
+
Date format: `YYYY-MM-DD` (today). Never overwrite an existing file.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
DATE=$(date +%Y-%m-%d)
|
|
68
|
+
RELEASE_FILE="docs/releases/${DATE}.md"
|
|
69
|
+
[ -f "$RELEASE_FILE" ] && echo "ERROR: $RELEASE_FILE already exists" && exit 1
|
|
70
|
+
mkdir -p docs/releases
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Write the file with this structure:
|
|
74
|
+
|
|
75
|
+
```markdown
|
|
76
|
+
# Release {date}
|
|
77
|
+
|
|
78
|
+
## summary
|
|
79
|
+
[1–3 sentences: what changed and why it matters to users]
|
|
80
|
+
|
|
81
|
+
## what's new
|
|
82
|
+
- [user-visible feature or fix — lead with what the user can now DO]
|
|
83
|
+
|
|
84
|
+
## fixed
|
|
85
|
+
- [bug fixes]
|
|
86
|
+
|
|
87
|
+
## internal
|
|
88
|
+
- [infra, tooling, tests — optional]
|
|
89
|
+
|
|
90
|
+
## artifacts reviewed
|
|
91
|
+
| artifact | status |
|
|
92
|
+
|----------|--------|
|
|
93
|
+
| docs/product/requirements.md | ✓ |
|
|
94
|
+
| docs/architecture/architecture.md | ✓ |
|
|
95
|
+
| docs/design/design.md | ✓ |
|
|
96
|
+
| docs/test-report.md | ✓ |
|
|
97
|
+
| docs/security-report.md | ✓ |
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Rules:
|
|
101
|
+
|
|
102
|
+
- Write for users, not contributors
|
|
103
|
+
- No internal tracking references
|
|
104
|
+
- Every entry should make someone think "oh nice, I want that"
|
|
105
|
+
|
|
106
|
+
______________________________________________________________________
|
|
107
|
+
|
|
108
|
+
## Step 4: Update `CHANGELOG.md`
|
|
109
|
+
|
|
110
|
+
Prepend a new entry at the top of `CHANGELOG.md`:
|
|
111
|
+
|
|
112
|
+
```markdown
|
|
113
|
+
## {date}
|
|
114
|
+
|
|
115
|
+
### What's new
|
|
116
|
+
- [user-visible changes]
|
|
117
|
+
|
|
118
|
+
### Fixed
|
|
119
|
+
- [bug fixes]
|
|
120
|
+
|
|
121
|
+
### Internal
|
|
122
|
+
- [optional]
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Keep existing entries intact.
|
|
126
|
+
|
|
127
|
+
______________________________________________________________________
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
name: requirements
|
|
2
|
+
version: 1.0.2
|
|
3
|
+
description: |
|
|
4
|
+
Collaborative requirements gathering and documentation. Clarifies what must be
|
|
5
|
+
built, defines success criteria, constraints, and non-functional requirements.
|
|
6
|
+
Produces a requirements.md document. Use when asked to "gather requirements",
|
|
7
|
+
"write the requirements", "define the spec", or "what are we building?".
|
|
8
|
+
Runs before architecture and design work begins.
|
|
9
|
+
argument-hint: '[feature or system to document]'
|
|
10
|
+
|
|
11
|
+
license: MIT
|
|
12
|
+
compatibility: Requires a skills-compatible agent with repository file access and terminal command execution when needed.
|
|
13
|
+
metadata:
|
|
14
|
+
owner: vstack
|
|
15
|
+
maturity: stable
|
|
16
|
+
user-invocable: true
|
|
17
|
+
disable-model-invocation: false
|