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,247 @@
|
|
|
1
|
+
{{SKILL_CONTEXT}}
|
|
2
|
+
|
|
3
|
+
# debug — Systematic Root-Cause Investigation
|
|
4
|
+
|
|
5
|
+
Investigate and fix bugs using the scientific method. No patches without understanding
|
|
6
|
+
the root cause first.
|
|
7
|
+
|
|
8
|
+
## Out of scope
|
|
9
|
+
|
|
10
|
+
- Full code review (use `code-review`)
|
|
11
|
+
- Performance benchmarking (use `performance`)
|
|
12
|
+
- Architecture design (use `architecture`)
|
|
13
|
+
- Security audit (use `security`)
|
|
14
|
+
|
|
15
|
+
**Golden rule: No fixes without root cause. A patch without understanding creates two bugs.**
|
|
16
|
+
|
|
17
|
+
Follow the scientific method:
|
|
18
|
+
|
|
19
|
+
1. **Observe** — Gather all available evidence
|
|
20
|
+
1. **Hypothesize** — Form ranked hypotheses
|
|
21
|
+
1. **Test** — Write a reproducer, then eliminate hypotheses
|
|
22
|
+
1. **Conclude** — Identify root cause with evidence
|
|
23
|
+
1. **Fix** — Minimal change that addresses root cause
|
|
24
|
+
1. **Prevent** — Add a test that would have caught this
|
|
25
|
+
|
|
26
|
+
______________________________________________________________________
|
|
27
|
+
|
|
28
|
+
## Step 0: Understand the Problem
|
|
29
|
+
|
|
30
|
+
Before touching any code, gather complete context:
|
|
31
|
+
|
|
32
|
+
**What exactly is failing?**
|
|
33
|
+
|
|
34
|
+
> **Question:** Describe the problem completely.
|
|
35
|
+
>
|
|
36
|
+
> - What is the expected behavior?
|
|
37
|
+
> - What is the actual behavior?
|
|
38
|
+
> - When did it start failing? (sudden vs gradual)
|
|
39
|
+
> - What was the last change before it started failing?
|
|
40
|
+
> - Is it reproducible? Always, or intermittent?
|
|
41
|
+
> **Options:** A) Answer inline | B) I'll share logs/errors in the next message
|
|
42
|
+
|
|
43
|
+
**Gather evidence:**
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Recent git history
|
|
47
|
+
git log --oneline -20
|
|
48
|
+
|
|
49
|
+
# Recent changes to the relevant area
|
|
50
|
+
git log --oneline --follow -- path/to/suspect/file 2>/dev/null | head -10
|
|
51
|
+
|
|
52
|
+
# Check for stashed work
|
|
53
|
+
git stash list
|
|
54
|
+
|
|
55
|
+
# Check for recent dependency changes
|
|
56
|
+
git diff HEAD~10 -- package.json package-lock.json go.mod go.sum pyproject.toml 2>/dev/null | head -40
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
______________________________________________________________________
|
|
60
|
+
|
|
61
|
+
## Step 1: Reproduce
|
|
62
|
+
|
|
63
|
+
**First, reproduce the bug reliably before attempting any fix.**
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Attempt to reproduce with minimal case
|
|
67
|
+
# Run the specific failing test or command
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
If intermittent:
|
|
71
|
+
|
|
72
|
+
- Run N times: `for i in $(seq 1 10); do [command]; done`
|
|
73
|
+
- Check for: time-dependent behavior, race conditions, external dependency flakiness
|
|
74
|
+
|
|
75
|
+
Document the reproducer:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
Reproducer:
|
|
79
|
+
Command: [exact command to run]
|
|
80
|
+
Expected: [what should happen]
|
|
81
|
+
Actual: [what actually happens]
|
|
82
|
+
Frequency: [always / N% of the time]
|
|
83
|
+
Environment: [local / CI / staging / prod]
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
______________________________________________________________________
|
|
87
|
+
|
|
88
|
+
## Step 2: Gather Evidence
|
|
89
|
+
|
|
90
|
+
**Read all available logs and error output:**
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Application logs (recent)
|
|
94
|
+
# Adjust for your platform:
|
|
95
|
+
journalctl -u service-name --since "1 hour ago" 2>/dev/null | tail -100 || true
|
|
96
|
+
docker logs container-name 2>/dev/null | tail -100 || true
|
|
97
|
+
kubectl logs deployment/service-name --tail=100 2>/dev/null || true
|
|
98
|
+
cat /var/log/app.log 2>/dev/null | tail -100 || true
|
|
99
|
+
|
|
100
|
+
# Check for correlated errors at the same timestamp
|
|
101
|
+
# Check for system-level issues (disk full, OOM, network)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Read the failing code:**
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Read the relevant source files
|
|
108
|
+
# Read the test that's failing (if applicable)
|
|
109
|
+
# Read recent changes: git show HEAD
|
|
110
|
+
git diff HEAD~3 -- relevant-files
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
______________________________________________________________________
|
|
114
|
+
|
|
115
|
+
## Step 3: Form Hypotheses
|
|
116
|
+
|
|
117
|
+
Based on evidence, list hypotheses in order of likelihood:
|
|
118
|
+
|
|
119
|
+
```text
|
|
120
|
+
Hypotheses (most likely first):
|
|
121
|
+
1. [Hypothesis] — Evidence for: [X] — Evidence against: [Y]
|
|
122
|
+
2. [Hypothesis] — Evidence for: [X] — Evidence against: [Y]
|
|
123
|
+
3. [Hypothesis] — Evidence for: [X] — Evidence against: [Y]
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Common backend bug categories to consider:**
|
|
127
|
+
|
|
128
|
+
- **Race condition / concurrency:** Multiple goroutines/threads/processes modifying shared state
|
|
129
|
+
- **Nil/null dereference:** Unhandled nil case in a code path
|
|
130
|
+
- **Off-by-one:** Boundary condition in loop, pagination, or slice
|
|
131
|
+
- **Type coercion:** Implicit type conversion causing unexpected behavior
|
|
132
|
+
- **State mutation:** Object modified unexpectedly (shared reference, closure)
|
|
133
|
+
- **Async/await:** Missing await, unhandled promise rejection
|
|
134
|
+
- **Database:** N+1 query, missing index, transaction isolation, stale connection
|
|
135
|
+
- **Network:** Timeout, connection pool exhaustion, DNS resolution failure
|
|
136
|
+
- **Configuration:** Wrong env var, missing config key, schema mismatch after migration
|
|
137
|
+
- **Dependency version:** Introduced by a dependency upgrade (check lockfile changes)
|
|
138
|
+
- **Memory:** Leak, fragmentation, GC pressure
|
|
139
|
+
- **Timing:** TTL expiry, clock skew, eventual consistency window
|
|
140
|
+
|
|
141
|
+
______________________________________________________________________
|
|
142
|
+
|
|
143
|
+
## Step 4: Test Each Hypothesis
|
|
144
|
+
|
|
145
|
+
For each hypothesis in rank order:
|
|
146
|
+
|
|
147
|
+
1. Design a test that would prove or disprove it
|
|
148
|
+
1. Run the test
|
|
149
|
+
1. Update the hypothesis ranking based on results
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Example: test for race condition
|
|
153
|
+
go test -race ./... 2>/dev/null || true
|
|
154
|
+
|
|
155
|
+
# Example: test for nil path
|
|
156
|
+
# Add temporary logging at the suspected nil path
|
|
157
|
+
|
|
158
|
+
# Example: test for database issue
|
|
159
|
+
# Examine query plans, check for missing indexes
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Eliminate hypotheses one by one until only one remains.
|
|
163
|
+
|
|
164
|
+
______________________________________________________________________
|
|
165
|
+
|
|
166
|
+
## Step 5: Root Cause Identification
|
|
167
|
+
|
|
168
|
+
State the root cause with precision:
|
|
169
|
+
|
|
170
|
+
```text
|
|
171
|
+
Root Cause:
|
|
172
|
+
Location: path/to/file.ts:line
|
|
173
|
+
Mechanism: [exact description of what is happening]
|
|
174
|
+
Trigger: [exact conditions that trigger the bug]
|
|
175
|
+
Timeline: [when was this introduced? git log shows...]
|
|
176
|
+
Scope: [Which environments? Which users? How often?]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
______________________________________________________________________
|
|
180
|
+
|
|
181
|
+
## Step 6: Fix
|
|
182
|
+
|
|
183
|
+
Design the minimal fix:
|
|
184
|
+
|
|
185
|
+
1. Identify the smallest change that correctly fixes the root cause
|
|
186
|
+
1. Consider side effects
|
|
187
|
+
1. Consider whether the fix introduces new edge cases
|
|
188
|
+
1. Implement
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# Apply the fix
|
|
192
|
+
# Run the reproducer to confirm it's fixed
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
______________________________________________________________________
|
|
196
|
+
|
|
197
|
+
## Step 7: Regression Test
|
|
198
|
+
|
|
199
|
+
Add a test that would have caught this bug:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Write the test
|
|
203
|
+
# Run it on the broken state to confirm it catches the bug
|
|
204
|
+
git stash # temporarily revert fix
|
|
205
|
+
[run test] # should fail
|
|
206
|
+
git stash pop # restore fix
|
|
207
|
+
[run test] # should pass
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Commit test + fix atomically:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
git add -A
|
|
214
|
+
git commit -m "fix: [description of what was wrong]
|
|
215
|
+
|
|
216
|
+
Root cause: [one sentence]
|
|
217
|
+
Reproducer: [if non-obvious]
|
|
218
|
+
Test: [test file added/updated]"
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
______________________________________________________________________
|
|
222
|
+
|
|
223
|
+
## Step 8: Prevent Recurrence
|
|
224
|
+
|
|
225
|
+
Consider:
|
|
226
|
+
|
|
227
|
+
1. Is this a systemic pattern that could occur elsewhere?
|
|
228
|
+
1. Should there be a linting rule or code review checklist item?
|
|
229
|
+
1. Should a runbook be updated?
|
|
230
|
+
1. Should an alert be added to catch this class of failure in production?
|
|
231
|
+
1. Should TODOS.md be updated with related improvements?
|
|
232
|
+
|
|
233
|
+
______________________________________________________________________
|
|
234
|
+
|
|
235
|
+
## Debug Summary
|
|
236
|
+
|
|
237
|
+
```text
|
|
238
|
+
## Debug Report — [bug description] — [date]
|
|
239
|
+
|
|
240
|
+
Reproducer: [command or steps]
|
|
241
|
+
Root cause: [one paragraph explanation]
|
|
242
|
+
Fix: [change made in commit SHA]
|
|
243
|
+
Regression test: [test file:function]
|
|
244
|
+
Prevention: [any follow-up items]
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
______________________________________________________________________
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: dependency
|
|
2
|
+
version: 1.0.1
|
|
3
|
+
description: |
|
|
4
|
+
Dependency health audit. Covers vulnerability scanning, outdated packages,
|
|
5
|
+
licence compliance, transitive risk, pinning policy, and supply chain hygiene.
|
|
6
|
+
Goes beyond the vulnerability gate in `security` — covers upgrade strategy,
|
|
7
|
+
licence obligations, and long-term dependency health. Use when asked to
|
|
8
|
+
"audit dependencies", "check for outdated packages", "licence compliance",
|
|
9
|
+
"pin versions", or "dependency health check".
|
|
10
|
+
argument-hint: '[project or package manifest to audit]'
|
|
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,293 @@
|
|
|
1
|
+
{{SKILL_CONTEXT}}
|
|
2
|
+
|
|
3
|
+
# dependency — Dependency Health Audit
|
|
4
|
+
|
|
5
|
+
Audit the health, security, and compliance of project dependencies. Covers
|
|
6
|
+
vulnerability scanning, outdated packages, licence obligations, transitive
|
|
7
|
+
risk, pinning policy, and supply chain hygiene.
|
|
8
|
+
|
|
9
|
+
## Scope vs related skills
|
|
10
|
+
|
|
11
|
+
- **This skill** — full dependency health: vulnerabilities, freshness, licences,
|
|
12
|
+
pinning policy, supply chain
|
|
13
|
+
- **`security`** — includes a lightweight vulnerability gate as part of OWASP A06;
|
|
14
|
+
for a full dependency audit use this skill instead
|
|
15
|
+
- **`verify`** — includes a quick vuln check in the quality gate loop; escalates
|
|
16
|
+
to this skill for deeper investigation
|
|
17
|
+
|
|
18
|
+
**Golden rule: A dependency is owned code you didn't write. Treat it with the
|
|
19
|
+
same scrutiny as your own code.**
|
|
20
|
+
|
|
21
|
+
______________________________________________________________________
|
|
22
|
+
|
|
23
|
+
## Step 0: Detect the Stack
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Identify package manifests
|
|
27
|
+
ls pyproject.toml poetry.lock requirements*.txt \
|
|
28
|
+
package.json package-lock.json yarn.lock pnpm-lock.yaml \
|
|
29
|
+
go.mod go.sum Cargo.toml Cargo.lock \
|
|
30
|
+
pom.xml build.gradle Gemfile Gemfile.lock 2>/dev/null
|
|
31
|
+
|
|
32
|
+
# Detect Python version and package manager
|
|
33
|
+
cat pyproject.toml 2>/dev/null | grep -E 'requires-python|tool\.poetry' | head -5
|
|
34
|
+
cat .python-version 2>/dev/null
|
|
35
|
+
which poetry && poetry --version 2>/dev/null || true
|
|
36
|
+
which pip-audit && pip-audit --version 2>/dev/null || true
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Document:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
Stack: [Python | Node | Go | Rust | Java | other]
|
|
43
|
+
Manager: [Poetry | pip | npm | yarn | pnpm | cargo | go modules | other]
|
|
44
|
+
Manifests: [list of files found]
|
|
45
|
+
Lock file: [present | absent — flag if absent]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
______________________________________________________________________
|
|
49
|
+
|
|
50
|
+
## Part 1: Vulnerability Scan
|
|
51
|
+
|
|
52
|
+
Run the appropriate scanner for each detected stack:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Python — pip-audit (preferred) or safety
|
|
56
|
+
if [ -f pyproject.toml ] || [ -f requirements.txt ]; then
|
|
57
|
+
pip-audit 2>/dev/null \
|
|
58
|
+
|| safety check --full-report 2>/dev/null \
|
|
59
|
+
|| echo "No Python vuln scanner found — install pip-audit: pip install pip-audit"
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# Node
|
|
63
|
+
[ -f package.json ] && npm audit --json 2>/dev/null | head -100
|
|
64
|
+
|
|
65
|
+
# Go
|
|
66
|
+
if [ -f go.mod ]; then
|
|
67
|
+
govulncheck ./... 2>/dev/null \
|
|
68
|
+
|| echo "govulncheck not found — install: go install golang.org/x/vuln/cmd/govulncheck@latest"
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
# Rust
|
|
72
|
+
if [ -f Cargo.toml ]; then
|
|
73
|
+
cargo audit 2>/dev/null \
|
|
74
|
+
|| echo "cargo-audit not found — install: cargo install cargo-audit"
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
# Java (Maven)
|
|
78
|
+
[ -f pom.xml ] && mvn dependency-check:check -q 2>/dev/null || true
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Triage findings by severity:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
Vulnerabilities found:
|
|
85
|
+
🔴 CRITICAL / HIGH: [package] [version] — [CVE] — [description]
|
|
86
|
+
🟡 MEDIUM: [package] [version] — [CVE] — [description]
|
|
87
|
+
🟢 LOW / INFO: [count] low-severity findings
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Remediation rule:** CRITICAL and HIGH must be resolved before release. MEDIUM
|
|
91
|
+
should be tracked and resolved within the sprint. LOW may be deferred with
|
|
92
|
+
documented rationale.
|
|
93
|
+
|
|
94
|
+
______________________________________________________________________
|
|
95
|
+
|
|
96
|
+
## Part 2: Outdated Packages
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Python (Poetry)
|
|
100
|
+
poetry show --outdated 2>/dev/null | head -40
|
|
101
|
+
|
|
102
|
+
# Python (pip)
|
|
103
|
+
pip list --outdated 2>/dev/null | head -40
|
|
104
|
+
|
|
105
|
+
# Node
|
|
106
|
+
npm outdated 2>/dev/null | head -40
|
|
107
|
+
|
|
108
|
+
# Go — check go.sum and go.mod for pinned versions
|
|
109
|
+
go list -m -u all 2>/dev/null | grep '\[' | head -30
|
|
110
|
+
|
|
111
|
+
# Rust
|
|
112
|
+
cargo outdated 2>/dev/null | head -30
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Classify each outdated package:
|
|
116
|
+
|
|
117
|
+
| Package | Current | Latest | Type | Action |
|
|
118
|
+
| ------- | ------- | ------ | ----- | ------------------------- |
|
|
119
|
+
| `foo` | 1.2.0 | 1.2.5 | patch | update now |
|
|
120
|
+
| `bar` | 2.1.0 | 3.0.0 | major | evaluate breaking changes |
|
|
121
|
+
| `baz` | 0.9.0 | 0.9.8 | patch | update now |
|
|
122
|
+
|
|
123
|
+
**Update priority:**
|
|
124
|
+
|
|
125
|
+
- Patch updates: update immediately (no breaking changes expected)
|
|
126
|
+
- Minor updates: update soon (check changelog for deprecations)
|
|
127
|
+
- Major updates: plan upgrade (read migration guide, test thoroughly)
|
|
128
|
+
|
|
129
|
+
______________________________________________________________________
|
|
130
|
+
|
|
131
|
+
## Part 3: Licence Compliance
|
|
132
|
+
|
|
133
|
+
Check licence obligations for all direct and transitive dependencies:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Python
|
|
137
|
+
if pip-licenses --version >/dev/null 2>&1; then
|
|
138
|
+
pip-licenses --format=markdown --with-urls 2>/dev/null | head -60
|
|
139
|
+
elif python3 -m pip_licenses --help >/dev/null 2>&1; then
|
|
140
|
+
python3 -m pip_licenses 2>/dev/null | head -60
|
|
141
|
+
else
|
|
142
|
+
echo "Install pip-licenses: pip install pip-licenses"
|
|
143
|
+
fi
|
|
144
|
+
|
|
145
|
+
# Node
|
|
146
|
+
npx license-checker --summary 2>/dev/null | head -40
|
|
147
|
+
|
|
148
|
+
# Go
|
|
149
|
+
if go-licenses --help >/dev/null 2>&1; then
|
|
150
|
+
go-licenses report ./... 2>/dev/null | head -40
|
|
151
|
+
else
|
|
152
|
+
echo "Install go-licenses: go install github.com/google/go-licenses@latest"
|
|
153
|
+
fi
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Classify licences by risk:
|
|
157
|
+
|
|
158
|
+
| Risk | Licences | Requirement |
|
|
159
|
+
| ------ | ---------------------------------- | -------------------------------------------------- |
|
|
160
|
+
| Low | MIT, BSD-2, BSD-3, Apache-2.0, ISC | Can use freely, attribution in docs |
|
|
161
|
+
| Medium | LGPL-2.1, LGPL-3.0 | Dynamic linking OK; static linking requires review |
|
|
162
|
+
| High | GPL-2.0, GPL-3.0, AGPL-3.0 | May require open-sourcing your code |
|
|
163
|
+
| Review | Commercial, proprietary, unknown | Requires legal review before use |
|
|
164
|
+
|
|
165
|
+
Flag any High or Review licences:
|
|
166
|
+
|
|
167
|
+
```text
|
|
168
|
+
Licence issues:
|
|
169
|
+
🔴 [package] — [licence] — [risk] — [recommendation]
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
______________________________________________________________________
|
|
173
|
+
|
|
174
|
+
## Part 4: Pinning Policy
|
|
175
|
+
|
|
176
|
+
A healthy dependency policy requires reproducible builds:
|
|
177
|
+
|
|
178
|
+
**Check for lock files:**
|
|
179
|
+
|
|
180
|
+
- [ ] `poetry.lock` / `package-lock.json` / `yarn.lock` / `Cargo.lock` / `go.sum` exists
|
|
181
|
+
- [ ] Lock file is committed to version control
|
|
182
|
+
- [ ] Lock file is up to date with the manifest
|
|
183
|
+
|
|
184
|
+
**Check for version constraints:**
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# Python — look for unpinned deps
|
|
188
|
+
cat pyproject.toml 2>/dev/null | grep -E '^\s+[a-z]' | grep -v '^#' | head -30
|
|
189
|
+
|
|
190
|
+
# Flag overly loose constraints (e.g. "*", ">=1.0" with no upper bound in prod deps)
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
| Pattern | Risk | Recommendation |
|
|
194
|
+
| --------------------------- | ------ | -------------------------------------------- |
|
|
195
|
+
| `package = "*"` | High | Pin to a compatible range |
|
|
196
|
+
| `package = ">=1.0"` | Medium | Add upper bound: `>=1.0,<3.0` |
|
|
197
|
+
| `package = "^1.0"` (Poetry) | Low | Acceptable for non-critical deps |
|
|
198
|
+
| `package = "1.2.3"` (exact) | Low | Fine for direct deps; brittle for transitive |
|
|
199
|
+
| No lock file | High | Add lock file and commit it |
|
|
200
|
+
|
|
201
|
+
______________________________________________________________________
|
|
202
|
+
|
|
203
|
+
## Part 5: Transitive Risk
|
|
204
|
+
|
|
205
|
+
Identify high-risk transitive (indirect) dependencies:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# Python — show full dependency tree
|
|
209
|
+
if poetry --version >/dev/null 2>&1; then
|
|
210
|
+
poetry show --tree 2>/dev/null | head -60
|
|
211
|
+
else
|
|
212
|
+
pip install pipdeptree 2>/dev/null && pipdeptree 2>/dev/null | head -60
|
|
213
|
+
fi
|
|
214
|
+
|
|
215
|
+
# Node
|
|
216
|
+
npm list --depth=2 2>/dev/null | head -60
|
|
217
|
+
|
|
218
|
+
# Go
|
|
219
|
+
go mod graph 2>/dev/null | head -40
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Flags to look for:
|
|
223
|
+
|
|
224
|
+
- [ ] No single dependency with > 20 transitive deps (blast radius risk)
|
|
225
|
+
- [ ] No abandoned packages (last release > 2 years, no recent commits)
|
|
226
|
+
- [ ] No packages with a single maintainer for critical functionality
|
|
227
|
+
- [ ] Core dependencies have active security policies (CVE response time < 30 days)
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# Check for abandoned packages — look at last release dates
|
|
231
|
+
# (manual step: check PyPI / npm registry for each critical dep)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
______________________________________________________________________
|
|
235
|
+
|
|
236
|
+
## Part 6: Supply Chain Hygiene
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# Python — check if packages are installed from PyPI or custom source
|
|
240
|
+
cat pyproject.toml 2>/dev/null | grep -E '\[\[tool\.poetry\.source\]\]' -A 5
|
|
241
|
+
|
|
242
|
+
# Node — check for private registry config
|
|
243
|
+
cat .npmrc 2>/dev/null
|
|
244
|
+
cat package.json 2>/dev/null | grep -E '"registry"'
|
|
245
|
+
|
|
246
|
+
# Check for dependency confusion risk (private package names published on public registry)
|
|
247
|
+
# (manual step: search PyPI/npm for any internal package names)
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Check:
|
|
251
|
+
|
|
252
|
+
- [ ] All packages sourced from trusted, official registries
|
|
253
|
+
- [ ] No `--extra-index-url` pointing to untrusted sources (Python)
|
|
254
|
+
- [ ] Private package names are not also available on public registries (confusion attack)
|
|
255
|
+
- [ ] `pip install` / `npm install` output reviewed for unexpected packages
|
|
256
|
+
- [ ] CI pipeline pins the package manager version itself
|
|
257
|
+
|
|
258
|
+
______________________________________________________________________
|
|
259
|
+
|
|
260
|
+
## Output
|
|
261
|
+
|
|
262
|
+
```text
|
|
263
|
+
Dependency Audit Report
|
|
264
|
+
═══════════════════════
|
|
265
|
+
|
|
266
|
+
Stack: [stack + manager]
|
|
267
|
+
Scanned: [N direct, N transitive dependencies]
|
|
268
|
+
|
|
269
|
+
Vulnerabilities:
|
|
270
|
+
🔴 Critical/High: [N] — [list or "none"]
|
|
271
|
+
🟡 Medium: [N] — [list or "none"]
|
|
272
|
+
🟢 Low: [N]
|
|
273
|
+
|
|
274
|
+
Outdated:
|
|
275
|
+
Patch updates available: [N packages]
|
|
276
|
+
Minor updates available: [N packages]
|
|
277
|
+
Major updates available: [N packages]
|
|
278
|
+
|
|
279
|
+
Licence issues:
|
|
280
|
+
🔴 High-risk licences: [list or "none"]
|
|
281
|
+
🟡 Review required: [list or "none"]
|
|
282
|
+
|
|
283
|
+
Pinning:
|
|
284
|
+
Lock file: [present | absent]
|
|
285
|
+
Loose pins: [list or "none"]
|
|
286
|
+
|
|
287
|
+
Supply chain:
|
|
288
|
+
[clean | issues found — details]
|
|
289
|
+
|
|
290
|
+
Action items (priority order):
|
|
291
|
+
1. [action] — [package] — [severity]
|
|
292
|
+
2. ...
|
|
293
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: design
|
|
2
|
+
version: 1.0.2
|
|
3
|
+
description: |
|
|
4
|
+
Build a complete API design or service design from scratch. Produces OpenAPI
|
|
5
|
+
specs, error conventions, naming standards, pagination patterns, and versioning
|
|
6
|
+
policies. Use when asked to "design the API", "create a design system for this
|
|
7
|
+
service", "define the API standards", or "design this service interface".
|
|
8
|
+
argument-hint: '[API or service to design]'
|
|
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
|