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.
Files changed (119) hide show
  1. vstack/__init__.py +5 -0
  2. vstack/__main__.py +5 -0
  3. vstack/_templates/agents/_partials/agent-skill-boundary.md +5 -0
  4. vstack/_templates/agents/architect/config.yaml +38 -0
  5. vstack/_templates/agents/architect/template.md +84 -0
  6. vstack/_templates/agents/designer/config.yaml +36 -0
  7. vstack/_templates/agents/designer/template.md +99 -0
  8. vstack/_templates/agents/engineer/config.yaml +36 -0
  9. vstack/_templates/agents/engineer/template.md +88 -0
  10. vstack/_templates/agents/product/config.yaml +37 -0
  11. vstack/_templates/agents/product/template.md +87 -0
  12. vstack/_templates/agents/release/config.yaml +35 -0
  13. vstack/_templates/agents/release/template.md +86 -0
  14. vstack/_templates/agents/tester/config.yaml +41 -0
  15. vstack/_templates/agents/tester/template.md +90 -0
  16. vstack/_templates/instructions/git/config.yaml +4 -0
  17. vstack/_templates/instructions/git/template.md +36 -0
  18. vstack/_templates/instructions/python/config.yaml +4 -0
  19. vstack/_templates/instructions/python/template.md +37 -0
  20. vstack/_templates/prompts/code-review/config.yaml +10 -0
  21. vstack/_templates/prompts/code-review/template.md +39 -0
  22. vstack/_templates/skills/_partials/base-branch.md +8 -0
  23. vstack/_templates/skills/_partials/observability-checklist.md +36 -0
  24. vstack/_templates/skills/_partials/run-tests.md +22 -0
  25. vstack/_templates/skills/_partials/skill-context.md +21 -0
  26. vstack/_templates/skills/adr/config.yaml +17 -0
  27. vstack/_templates/skills/adr/template.md +167 -0
  28. vstack/_templates/skills/analyse/config.yaml +16 -0
  29. vstack/_templates/skills/analyse/template.md +188 -0
  30. vstack/_templates/skills/architecture/config.yaml +18 -0
  31. vstack/_templates/skills/architecture/template.md +213 -0
  32. vstack/_templates/skills/cicd/config.yaml +16 -0
  33. vstack/_templates/skills/cicd/template.md +169 -0
  34. vstack/_templates/skills/code-review/config.yaml +16 -0
  35. vstack/_templates/skills/code-review/template.md +180 -0
  36. vstack/_templates/skills/concise/config.yaml +16 -0
  37. vstack/_templates/skills/concise/template.md +128 -0
  38. vstack/_templates/skills/consult/config.yaml +18 -0
  39. vstack/_templates/skills/consult/template.md +195 -0
  40. vstack/_templates/skills/container/config.yaml +17 -0
  41. vstack/_templates/skills/container/template.md +122 -0
  42. vstack/_templates/skills/debug/config.yaml +16 -0
  43. vstack/_templates/skills/debug/template.md +247 -0
  44. vstack/_templates/skills/dependency/config.yaml +18 -0
  45. vstack/_templates/skills/dependency/template.md +293 -0
  46. vstack/_templates/skills/design/config.yaml +16 -0
  47. vstack/_templates/skills/design/template.md +231 -0
  48. vstack/_templates/skills/docs/config.yaml +17 -0
  49. vstack/_templates/skills/docs/template.md +128 -0
  50. vstack/_templates/skills/explore/config.yaml +17 -0
  51. vstack/_templates/skills/explore/template.md +188 -0
  52. vstack/_templates/skills/guardrails/config.yaml +16 -0
  53. vstack/_templates/skills/guardrails/template.md +45 -0
  54. vstack/_templates/skills/incident/config.yaml +17 -0
  55. vstack/_templates/skills/incident/template.md +293 -0
  56. vstack/_templates/skills/inspect/config.yaml +16 -0
  57. vstack/_templates/skills/inspect/template.md +105 -0
  58. vstack/_templates/skills/migrate/config.yaml +17 -0
  59. vstack/_templates/skills/migrate/template.md +298 -0
  60. vstack/_templates/skills/onboard/config.yaml +18 -0
  61. vstack/_templates/skills/onboard/template.md +289 -0
  62. vstack/_templates/skills/openapi/config.yaml +17 -0
  63. vstack/_templates/skills/openapi/template.md +382 -0
  64. vstack/_templates/skills/performance/config.yaml +15 -0
  65. vstack/_templates/skills/performance/template.md +198 -0
  66. vstack/_templates/skills/pr/config.yaml +15 -0
  67. vstack/_templates/skills/pr/template.md +108 -0
  68. vstack/_templates/skills/refactor/config.yaml +18 -0
  69. vstack/_templates/skills/refactor/template.md +283 -0
  70. vstack/_templates/skills/release-notes/config.yaml +16 -0
  71. vstack/_templates/skills/release-notes/template.md +127 -0
  72. vstack/_templates/skills/requirements/config.yaml +17 -0
  73. vstack/_templates/skills/requirements/template.md +187 -0
  74. vstack/_templates/skills/security/config.yaml +17 -0
  75. vstack/_templates/skills/security/template.md +256 -0
  76. vstack/_templates/skills/verify/config.yaml +17 -0
  77. vstack/_templates/skills/verify/template.md +201 -0
  78. vstack/_templates/skills/vision/config.yaml +19 -0
  79. vstack/_templates/skills/vision/template.md +169 -0
  80. vstack/agents/__init__.py +5 -0
  81. vstack/agents/config.py +67 -0
  82. vstack/agents/constants.py +14 -0
  83. vstack/agents/generator.py +20 -0
  84. vstack/artifacts/__init__.py +17 -0
  85. vstack/artifacts/config.py +111 -0
  86. vstack/artifacts/constants.py +6 -0
  87. vstack/artifacts/generator.py +406 -0
  88. vstack/artifacts/models.py +55 -0
  89. vstack/artifacts/protocol.py +50 -0
  90. vstack/cli/__init__.py +3 -0
  91. vstack/cli/commands.py +596 -0
  92. vstack/cli/constants.py +33 -0
  93. vstack/cli/manifest.py +166 -0
  94. vstack/cli/parser.py +156 -0
  95. vstack/constants.py +84 -0
  96. vstack/frontmatter/__init__.py +8 -0
  97. vstack/frontmatter/parser.py +272 -0
  98. vstack/frontmatter/schema.py +142 -0
  99. vstack/frontmatter/serializer.py +208 -0
  100. vstack/instructions/__init__.py +5 -0
  101. vstack/instructions/config.py +21 -0
  102. vstack/instructions/constants.py +9 -0
  103. vstack/instructions/generator.py +13 -0
  104. vstack/main.py +71 -0
  105. vstack/models.py +35 -0
  106. vstack/prompts/__init__.py +5 -0
  107. vstack/prompts/config.py +21 -0
  108. vstack/prompts/constants.py +9 -0
  109. vstack/prompts/generator.py +13 -0
  110. vstack/skills/__init__.py +5 -0
  111. vstack/skills/config.py +58 -0
  112. vstack/skills/constants.py +17 -0
  113. vstack/skills/generator.py +20 -0
  114. vstack/skills/models.py +15 -0
  115. vstack-0.0.0.dist-info/METADATA +725 -0
  116. vstack-0.0.0.dist-info/RECORD +119 -0
  117. vstack-0.0.0.dist-info/WHEEL +4 -0
  118. vstack-0.0.0.dist-info/entry_points.txt +3 -0
  119. 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