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,298 @@
|
|
|
1
|
+
{{SKILL_CONTEXT}}
|
|
2
|
+
|
|
3
|
+
{{BASE_BRANCH}}
|
|
4
|
+
|
|
5
|
+
# migrate — Database Migration Review & Authoring
|
|
6
|
+
|
|
7
|
+
Review or write database migrations for safety, correctness, and zero-downtime
|
|
8
|
+
deployability. No migration ships without a rollback plan.
|
|
9
|
+
|
|
10
|
+
## Out of scope
|
|
11
|
+
|
|
12
|
+
- ORM model design (use `design`)
|
|
13
|
+
- Performance benchmarking of queries (use `performance`)
|
|
14
|
+
- Full security audit (use `security`)
|
|
15
|
+
- Architecture decisions (use `architecture` + `adr`)
|
|
16
|
+
|
|
17
|
+
**Golden rule: Every migration must be reversible or explicitly documented as
|
|
18
|
+
irreversible with a data-recovery plan.**
|
|
19
|
+
|
|
20
|
+
______________________________________________________________________
|
|
21
|
+
|
|
22
|
+
## Step 0: Understand the Change
|
|
23
|
+
|
|
24
|
+
Before reviewing or writing anything, gather context:
|
|
25
|
+
|
|
26
|
+
> **Question:** What schema change is needed and why?
|
|
27
|
+
>
|
|
28
|
+
> - What table(s) / collection(s) are affected?
|
|
29
|
+
> - Approximate row count and data size?
|
|
30
|
+
> - Is this service actively serving production traffic?
|
|
31
|
+
> - What deployment strategy is used (blue/green, rolling, big-bang)?
|
|
32
|
+
> **Default:** Assume rolling deployment, production traffic, safety-first.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Find existing migration files
|
|
36
|
+
find . -type f \( -name '*.sql' -o -name '*migration*' -o -name '*migrate*' \) \
|
|
37
|
+
--exclude-dir=.venv --exclude-dir=node_modules --exclude-dir=dist --exclude-dir=build \
|
|
38
|
+
2>/dev/null | sort | tail -20
|
|
39
|
+
|
|
40
|
+
# Show migration files changed in this branch
|
|
41
|
+
git diff <base> --stat -- '*.sql' '**migration**' '**migrate**' 2>/dev/null | head -20
|
|
42
|
+
|
|
43
|
+
# Check migration framework in use
|
|
44
|
+
[ -f alembic.ini ] && echo "alembic" || true
|
|
45
|
+
[ -f flyway.conf ] && echo "flyway" || true
|
|
46
|
+
grep -r "migrate\|liquibase\|goose\|dbmate" pyproject.toml package.json go.mod 2>/dev/null | head -5
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Document:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
Framework: [alembic | flyway | goose | dbmate | raw SQL | other]
|
|
53
|
+
Table: [affected table(s)]
|
|
54
|
+
Row estimate: [< 1k | 10k | 100k | 1M | 10M+ ]
|
|
55
|
+
Deployment: [rolling | blue-green | big-bang | maintenance window]
|
|
56
|
+
Direction: [new migration | review existing | both]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
______________________________________________________________________
|
|
60
|
+
|
|
61
|
+
## Step 1: Classify the Migration
|
|
62
|
+
|
|
63
|
+
Classify every DDL operation by risk level:
|
|
64
|
+
|
|
65
|
+
| Operation | Risk | Notes |
|
|
66
|
+
| ---------------------------------------- | --------------- | ---------------------------------- |
|
|
67
|
+
| `CREATE TABLE` | Low | Safe at any time |
|
|
68
|
+
| `ADD COLUMN` nullable, no default | Low | Safe in rolling deploy |
|
|
69
|
+
| `ADD COLUMN` with default (non-volatile) | Medium | May lock on large tables |
|
|
70
|
+
| `ADD COLUMN NOT NULL` without default | **High** | Breaks old app version |
|
|
71
|
+
| `DROP COLUMN` | **High** | Must remove all references first |
|
|
72
|
+
| `RENAME COLUMN` | **High** | Breaks old app version immediately |
|
|
73
|
+
| `ALTER COLUMN` type change | **High** | May require data rewrite |
|
|
74
|
+
| `CREATE INDEX CONCURRENTLY` | Low | Safe, non-blocking |
|
|
75
|
+
| `CREATE INDEX` (without CONCURRENTLY) | **High** | Full table lock |
|
|
76
|
+
| `DROP INDEX` | Low | Safe |
|
|
77
|
+
| `ADD CONSTRAINT` | **High** | Validates all existing rows |
|
|
78
|
+
| `TRUNCATE` / `DROP TABLE` | **Destructive** | Requires explicit confirmation |
|
|
79
|
+
|
|
80
|
+
Assign risk to each operation in the migration:
|
|
81
|
+
|
|
82
|
+
```text
|
|
83
|
+
Operations:
|
|
84
|
+
1. [operation] — [Low | Medium | High | Destructive]
|
|
85
|
+
2. ...
|
|
86
|
+
Overall risk: [Low | Medium | High | Destructive]
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
______________________________________________________________________
|
|
90
|
+
|
|
91
|
+
## Step 2: Zero-Downtime Analysis
|
|
92
|
+
|
|
93
|
+
**Rolling deployments require that the schema be compatible with BOTH the old and
|
|
94
|
+
new version of the application simultaneously.**
|
|
95
|
+
|
|
96
|
+
Check each operation:
|
|
97
|
+
|
|
98
|
+
- [ ] Old app version can read/write with the new schema
|
|
99
|
+
- [ ] New app version can read/write with the old schema (before migration runs)
|
|
100
|
+
- [ ] No `NOT NULL` columns added without a default or backfill step
|
|
101
|
+
- [ ] No column renames (use add → backfill → switch → drop in separate deploys)
|
|
102
|
+
- [ ] No type changes that are incompatible with existing data
|
|
103
|
+
|
|
104
|
+
**Expand/Contract pattern (required for breaking changes):**
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
Phase 1 — Expand: Add new column/table alongside old one
|
|
108
|
+
Phase 2 — Migrate: Backfill data; dual-write in application
|
|
109
|
+
Phase 3 — Switch: Application reads from new column
|
|
110
|
+
Phase 4 — Contract: Drop old column in a separate deploy
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
If the migration violates zero-downtime, flag it:
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
⚠ ZERO-DOWNTIME VIOLATION
|
|
117
|
+
Operation: [operation]
|
|
118
|
+
Problem: [what breaks]
|
|
119
|
+
Fix: [expand/contract steps or maintenance window required]
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
______________________________________________________________________
|
|
123
|
+
|
|
124
|
+
## Step 3: Rollback Plan
|
|
125
|
+
|
|
126
|
+
Every migration must have a defined rollback:
|
|
127
|
+
|
|
128
|
+
```sql
|
|
129
|
+
-- Forward migration
|
|
130
|
+
ALTER TABLE orders ADD COLUMN discount_cents INTEGER;
|
|
131
|
+
|
|
132
|
+
-- Rollback
|
|
133
|
+
ALTER TABLE orders DROP COLUMN discount_cents;
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
For destructive operations (DROP, TRUNCATE), rollback is not possible — document this explicitly:
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
⚠ IRREVERSIBLE OPERATION
|
|
140
|
+
Operation: DROP TABLE legacy_sessions
|
|
141
|
+
Pre-condition: Confirm legacy_sessions is unused (grep all references)
|
|
142
|
+
Backup required: Yes — take a snapshot before deploying
|
|
143
|
+
Recovery: Restore from snapshot (RTO: [estimate])
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
______________________________________________________________________
|
|
147
|
+
|
|
148
|
+
## Step 4: Data Integrity
|
|
149
|
+
|
|
150
|
+
Check:
|
|
151
|
+
|
|
152
|
+
- [ ] Foreign key constraints are correct and indexed
|
|
153
|
+
- [ ] `NOT NULL` columns have sensible defaults for existing rows
|
|
154
|
+
- [ ] `UNIQUE` constraints won't fail on existing duplicates
|
|
155
|
+
- [ ] `CHECK` constraints won't reject existing data
|
|
156
|
+
- [ ] Enum additions are safe (additions OK; removals break existing data)
|
|
157
|
+
- [ ] Cascade behavior is intentional (`ON DELETE CASCADE` vs `RESTRICT`)
|
|
158
|
+
|
|
159
|
+
```sql
|
|
160
|
+
-- Before adding a NOT NULL column: verify no NULLs exist
|
|
161
|
+
SELECT COUNT(*) FROM table WHERE column IS NULL;
|
|
162
|
+
|
|
163
|
+
-- Before adding UNIQUE constraint: verify no duplicates
|
|
164
|
+
SELECT column, COUNT(*) FROM table GROUP BY column HAVING COUNT(*) > 1;
|
|
165
|
+
|
|
166
|
+
-- Before adding CHECK constraint: verify no violations
|
|
167
|
+
SELECT COUNT(*) FROM table WHERE NOT (constraint_expression);
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
______________________________________________________________________
|
|
171
|
+
|
|
172
|
+
## Step 5: Index Safety
|
|
173
|
+
|
|
174
|
+
**Never create an index without `CONCURRENTLY` on a live table.**
|
|
175
|
+
|
|
176
|
+
```sql
|
|
177
|
+
-- BAD: acquires ACCESS EXCLUSIVE lock
|
|
178
|
+
CREATE INDEX idx_orders_user_id ON orders(user_id);
|
|
179
|
+
|
|
180
|
+
-- GOOD: non-blocking, runs in background
|
|
181
|
+
CREATE INDEX CONCURRENTLY idx_orders_user_id ON orders(user_id);
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Caveats for `CONCURRENTLY`:
|
|
185
|
+
|
|
186
|
+
- Cannot run inside a transaction block
|
|
187
|
+
- Takes longer to build
|
|
188
|
+
- May fail if the table is modified heavily during build
|
|
189
|
+
|
|
190
|
+
Check:
|
|
191
|
+
|
|
192
|
+
- [ ] All new indexes use `CONCURRENTLY` (unless in a migration transaction that can afford a lock)
|
|
193
|
+
- [ ] Composite index column order matches query patterns
|
|
194
|
+
- [ ] No redundant indexes (subset of existing composite index)
|
|
195
|
+
- [ ] Partial indexes considered for filtered queries
|
|
196
|
+
|
|
197
|
+
______________________________________________________________________
|
|
198
|
+
|
|
199
|
+
## Step 6: Performance on Large Tables
|
|
200
|
+
|
|
201
|
+
For tables with > 100k rows:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
# Estimate table size
|
|
205
|
+
# PostgreSQL:
|
|
206
|
+
psql -c "SELECT pg_size_pretty(pg_total_relation_size('table_name'));" 2>/dev/null || true
|
|
207
|
+
# MySQL:
|
|
208
|
+
# SELECT table_name, ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)'
|
|
209
|
+
# FROM information_schema.TABLES WHERE table_schema = DATABASE();
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
For large tables, prefer:
|
|
213
|
+
|
|
214
|
+
- **Online DDL** (MySQL 8+, PostgreSQL with `CONCURRENTLY`)
|
|
215
|
+
- **Batched backfills** instead of single `UPDATE` statements
|
|
216
|
+
- **Maintenance window** for operations that cannot be made non-blocking
|
|
217
|
+
|
|
218
|
+
Batched backfill pattern:
|
|
219
|
+
|
|
220
|
+
```sql
|
|
221
|
+
-- Backfill in batches to avoid long-running locks
|
|
222
|
+
DO $$
|
|
223
|
+
DECLARE
|
|
224
|
+
batch_size INT := 10000;
|
|
225
|
+
offset_val INT := 0;
|
|
226
|
+
rows_updated INT;
|
|
227
|
+
BEGIN
|
|
228
|
+
LOOP
|
|
229
|
+
UPDATE table SET new_col = <expr>
|
|
230
|
+
WHERE id IN (
|
|
231
|
+
SELECT id FROM table WHERE new_col IS NULL LIMIT batch_size
|
|
232
|
+
);
|
|
233
|
+
GET DIAGNOSTICS rows_updated = ROW_COUNT;
|
|
234
|
+
EXIT WHEN rows_updated = 0;
|
|
235
|
+
PERFORM pg_sleep(0.1); -- brief pause between batches
|
|
236
|
+
END LOOP;
|
|
237
|
+
END $$;
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
______________________________________________________________________
|
|
241
|
+
|
|
242
|
+
## Step 7: Testing
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# Run migration tests
|
|
246
|
+
# Framework-specific:
|
|
247
|
+
alembic upgrade head && alembic downgrade -1 2>/dev/null || true
|
|
248
|
+
flyway migrate && flyway undo 2>/dev/null || true
|
|
249
|
+
|
|
250
|
+
# Verify the schema matches models
|
|
251
|
+
# (adjust for your ORM)
|
|
252
|
+
python -c "from app.models import Base; Base.metadata.create_all(engine)" 2>/dev/null || true
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Check:
|
|
256
|
+
|
|
257
|
+
- [ ] Migration applies cleanly on a fresh database
|
|
258
|
+
- [ ] Migration applies cleanly on a database with production-representative data
|
|
259
|
+
- [ ] Rollback/downgrade works cleanly
|
|
260
|
+
- [ ] Application tests pass with the new schema
|
|
261
|
+
- [ ] No model/schema drift detected
|
|
262
|
+
|
|
263
|
+
______________________________________________________________________
|
|
264
|
+
|
|
265
|
+
## Output
|
|
266
|
+
|
|
267
|
+
Produce a structured migration review:
|
|
268
|
+
|
|
269
|
+
```text
|
|
270
|
+
Migration Review
|
|
271
|
+
════════════════
|
|
272
|
+
|
|
273
|
+
File: [migration filename]
|
|
274
|
+
Framework: [framework]
|
|
275
|
+
Risk level: [Low | Medium | High | Destructive]
|
|
276
|
+
|
|
277
|
+
Operations:
|
|
278
|
+
1. [operation] — [risk] — [safe / unsafe for rolling deploy]
|
|
279
|
+
2. ...
|
|
280
|
+
|
|
281
|
+
Zero-downtime: [SAFE | UNSAFE — reason]
|
|
282
|
+
Rollback: [SQL rollback statement | IRREVERSIBLE — reason]
|
|
283
|
+
|
|
284
|
+
Issues found:
|
|
285
|
+
🔴 CRITICAL: [issue + fix]
|
|
286
|
+
🟡 WARNING: [issue + recommendation]
|
|
287
|
+
🟢 OK: [what is correct]
|
|
288
|
+
|
|
289
|
+
Recommended migration:
|
|
290
|
+
[corrected or approved SQL]
|
|
291
|
+
|
|
292
|
+
Pre-deploy checklist:
|
|
293
|
+
[ ] Backup taken
|
|
294
|
+
[ ] Migration tested on staging with production data volume
|
|
295
|
+
[ ] Rollback script validated
|
|
296
|
+
[ ] Feature flag in place (if needed for expand/contract)
|
|
297
|
+
[ ] Monitoring alert set for migration duration
|
|
298
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: onboard
|
|
2
|
+
version: 1.0.1
|
|
3
|
+
description: |
|
|
4
|
+
Generate a contributor onboarding guide for a repository. Covers project
|
|
5
|
+
purpose, architecture overview, local dev setup, test commands, contribution
|
|
6
|
+
workflow, and first-task suggestions. Use when asked to "write an onboarding
|
|
7
|
+
guide", "create a contributor guide", "help new devs get started", or
|
|
8
|
+
"document how to contribute". Produces or updates CONTRIBUTING.md and
|
|
9
|
+
supplements README with a dev setup section.
|
|
10
|
+
argument-hint: '[repository or service to document]'
|
|
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,289 @@
|
|
|
1
|
+
{{SKILL_CONTEXT}}
|
|
2
|
+
|
|
3
|
+
# onboard — Contributor Onboarding Guide
|
|
4
|
+
|
|
5
|
+
Generate or update onboarding documentation so a new contributor can go from
|
|
6
|
+
clone to first PR with zero tribal knowledge required.
|
|
7
|
+
|
|
8
|
+
## Out of scope
|
|
9
|
+
|
|
10
|
+
- API design documentation (use `design` or `openapi`)
|
|
11
|
+
- Architecture documentation (use `architecture`)
|
|
12
|
+
- Release notes (use `release-notes`)
|
|
13
|
+
- Test execution (use `verify`)
|
|
14
|
+
|
|
15
|
+
**Golden rule: If a new contributor needs to ask a question that isn't answered
|
|
16
|
+
by the docs, that is a documentation gap — not a knowledge problem.**
|
|
17
|
+
|
|
18
|
+
______________________________________________________________________
|
|
19
|
+
|
|
20
|
+
## Step 0: Audit Existing Documentation
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Find existing contributor docs
|
|
24
|
+
ls -la README.md CONTRIBUTING.md DEVELOPMENT.md docs/ 2>/dev/null
|
|
25
|
+
|
|
26
|
+
# Check for setup scripts
|
|
27
|
+
ls -la Makefile scripts/ bin/ 2>/dev/null
|
|
28
|
+
|
|
29
|
+
# Check what tooling is defined
|
|
30
|
+
cat Makefile 2>/dev/null | grep -E '^[a-z].*:' | head -20
|
|
31
|
+
|
|
32
|
+
# Detect tech stack
|
|
33
|
+
ls pyproject.toml package.json go.mod Cargo.toml pom.xml 2>/dev/null
|
|
34
|
+
cat pyproject.toml 2>/dev/null | head -30
|
|
35
|
+
cat package.json 2>/dev/null | grep -E '"scripts"' -A 20 | head -25
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Document gaps:
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
Existing docs: [list of files found]
|
|
42
|
+
Missing: [what's absent — setup steps, test commands, etc.]
|
|
43
|
+
Tech stack: [Python | Node | Go | other]
|
|
44
|
+
Build tool: [Poetry | npm | make | other]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
______________________________________________________________________
|
|
48
|
+
|
|
49
|
+
## Step 1: Understand the Project
|
|
50
|
+
|
|
51
|
+
Read the codebase to extract onboarding-relevant facts:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Project purpose
|
|
55
|
+
head -50 README.md 2>/dev/null
|
|
56
|
+
|
|
57
|
+
# Project structure
|
|
58
|
+
find . -maxdepth 3 -type d \
|
|
59
|
+
| grep -v node_modules | grep -v .venv | grep -v __pycache__ \
|
|
60
|
+
| grep -v .git | grep -v dist | grep -v build \
|
|
61
|
+
| sort | head -40
|
|
62
|
+
|
|
63
|
+
# Dependencies and Python version
|
|
64
|
+
cat pyproject.toml 2>/dev/null | grep -E 'python|requires|dependencies' | head -20
|
|
65
|
+
cat .python-version 2>/dev/null
|
|
66
|
+
cat .nvmrc 2>/dev/null
|
|
67
|
+
cat .node-version 2>/dev/null
|
|
68
|
+
|
|
69
|
+
# CI configuration — what does CI run?
|
|
70
|
+
cat .github/workflows/*.yml 2>/dev/null | grep -E 'run:|uses:' | head -30
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
______________________________________________________________________
|
|
74
|
+
|
|
75
|
+
## Step 2: Verify the Setup Steps Work
|
|
76
|
+
|
|
77
|
+
Before documenting setup steps, verify they actually work:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Attempt setup from scratch perspective
|
|
81
|
+
# (Do not actually destroy the current environment — read and verify commands)
|
|
82
|
+
|
|
83
|
+
# Check prerequisites are documented
|
|
84
|
+
which python3 || which python && python --version
|
|
85
|
+
which poetry && poetry --version
|
|
86
|
+
which node && node --version
|
|
87
|
+
which make && make --version
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
For each setup step, confirm:
|
|
91
|
+
|
|
92
|
+
- [ ] The command exists and works
|
|
93
|
+
- [ ] Dependencies are version-pinned or constrained
|
|
94
|
+
- [ ] Environment variables are documented (use `.env.example` if present)
|
|
95
|
+
- [ ] The setup completes in < 5 minutes on a fresh machine
|
|
96
|
+
|
|
97
|
+
______________________________________________________________________
|
|
98
|
+
|
|
99
|
+
## Step 3: Extract Test Commands
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# Find all test commands
|
|
103
|
+
cat Makefile 2>/dev/null | grep -E 'test|lint|check|verify' | head -20
|
|
104
|
+
cat pyproject.toml 2>/dev/null | grep -E '\[tool\.' -A 5 | head -40
|
|
105
|
+
cat package.json 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); [print(k,':',v) for k,v in d.get('scripts',{}).items()]" 2>/dev/null
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Document the minimal set a contributor needs:
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
Quick check (before every commit): [command]
|
|
112
|
+
Full test suite: [command]
|
|
113
|
+
Lint only: [command]
|
|
114
|
+
Type check only: [command]
|
|
115
|
+
Single test: [command pattern]
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
______________________________________________________________________
|
|
119
|
+
|
|
120
|
+
## Step 4: Identify "Good First Issues"
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Find TODOs and FIXMEs
|
|
124
|
+
grep -r -n "TODO\|FIXME\|HACK\|good.first" \
|
|
125
|
+
--include='*.py' --include='*.ts' --include='*.go' --include='*.md' \
|
|
126
|
+
--exclude-dir=node_modules --exclude-dir=.venv --exclude-dir=.git \
|
|
127
|
+
. 2>/dev/null | head -20
|
|
128
|
+
|
|
129
|
+
# Check GitHub issues if available
|
|
130
|
+
# (manual step — list any open "good first issue" labels)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
______________________________________________________________________
|
|
134
|
+
|
|
135
|
+
## Step 5: Write the Onboarding Guide
|
|
136
|
+
|
|
137
|
+
Produce or update `CONTRIBUTING.md` with the following sections:
|
|
138
|
+
|
|
139
|
+
______________________________________________________________________
|
|
140
|
+
|
|
141
|
+
````markdown
|
|
142
|
+
# Contributing to [Project Name]
|
|
143
|
+
|
|
144
|
+
Welcome. This guide gets you from zero to a merged PR.
|
|
145
|
+
|
|
146
|
+
## Prerequisites
|
|
147
|
+
|
|
148
|
+
| Tool | Version | Install |
|
|
149
|
+
|------|---------|---------|
|
|
150
|
+
| Python | >= X.Y | [pyenv](https://github.com/pyenv/pyenv) |
|
|
151
|
+
| Poetry | >= X.Y | `pip install poetry` |
|
|
152
|
+
| make | any | system package manager |
|
|
153
|
+
|
|
154
|
+
## Setup
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
git clone https://github.com/org/repo
|
|
158
|
+
cd repo
|
|
159
|
+
[setup command — e.g. make bootstrap or poetry install]
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Verify setup:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
[verify command — e.g. make check or poetry run pytest]
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Expected output: `[N tests passed]`
|
|
169
|
+
|
|
170
|
+
## Project Structure
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
[directory tree — top 2 levels with brief descriptions]
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Development Workflow
|
|
177
|
+
|
|
178
|
+
### Making changes
|
|
179
|
+
|
|
180
|
+
1. Create a branch: `git checkout -b [type]/[short-description]`
|
|
181
|
+
- `feat/` — new feature
|
|
182
|
+
- `fix/` — bug fix
|
|
183
|
+
- `chore/` — maintenance
|
|
184
|
+
1. Make your change
|
|
185
|
+
1. Run checks: `[check command]`
|
|
186
|
+
1. Commit: `git commit -m "[type]: [description]"`
|
|
187
|
+
1. Push and open a PR
|
|
188
|
+
|
|
189
|
+
### Before every commit
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
[pre-commit or check command]
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
This runs: [lint, type check, tests — describe what is checked]
|
|
196
|
+
|
|
197
|
+
## Testing
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# Run all tests
|
|
201
|
+
[full test command]
|
|
202
|
+
|
|
203
|
+
# Run a single test file
|
|
204
|
+
[single test command]
|
|
205
|
+
|
|
206
|
+
# Run with coverage
|
|
207
|
+
[coverage command]
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Tests live in `tests/`. Mirror the source structure: `src/foo/bar.py` → `tests/foo/test_bar.py`.
|
|
211
|
+
|
|
212
|
+
## Environment Variables
|
|
213
|
+
|
|
214
|
+
Copy `.env.example` to `.env` and fill in values:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
cp .env.example .env
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
| Variable | Required | Description |
|
|
221
|
+
| ---------- | -------- | ------------- |
|
|
222
|
+
| `VAR_NAME` | Yes | [description] |
|
|
223
|
+
|
|
224
|
+
## Architecture Overview
|
|
225
|
+
|
|
226
|
+
\[2–4 sentences describing the main components and how they interact.
|
|
227
|
+
Link to docs/architecture/architecture.md for details.\]
|
|
228
|
+
|
|
229
|
+
## Good First Issues
|
|
230
|
+
|
|
231
|
+
\[List 3–5 concrete starting points:
|
|
232
|
+
|
|
233
|
+
- A TODO in the code
|
|
234
|
+
- A missing test
|
|
235
|
+
- A documentation gap
|
|
236
|
+
- A small enhancement\]
|
|
237
|
+
|
|
238
|
+
## Getting Help
|
|
239
|
+
|
|
240
|
+
[Slack channel / GitHub Discussions / email — whatever is appropriate]
|
|
241
|
+
|
|
242
|
+
````
|
|
243
|
+
|
|
244
|
+
______________________________________________________________________
|
|
245
|
+
|
|
246
|
+
______________________________________________________________________
|
|
247
|
+
|
|
248
|
+
## Step 6: Supplement README (if needed)
|
|
249
|
+
|
|
250
|
+
If README lacks a dev setup section, add a minimal one linking to CONTRIBUTING.md:
|
|
251
|
+
|
|
252
|
+
````markdown
|
|
253
|
+
## development
|
|
254
|
+
|
|
255
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for setup, testing, and contribution guidelines.
|
|
256
|
+
|
|
257
|
+
Quick start:
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
[one-liner setup command]
|
|
261
|
+
[one-liner test command]
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
````
|
|
265
|
+
|
|
266
|
+
______________________________________________________________________
|
|
267
|
+
|
|
268
|
+
## Output
|
|
269
|
+
|
|
270
|
+
```text
|
|
271
|
+
Onboarding Guide Summary
|
|
272
|
+
════════════════════════
|
|
273
|
+
|
|
274
|
+
Files produced/updated:
|
|
275
|
+
✅ CONTRIBUTING.md — [new | updated]
|
|
276
|
+
✅ README.md — [updated dev section | no change needed]
|
|
277
|
+
|
|
278
|
+
Coverage:
|
|
279
|
+
[ ] Prerequisites documented
|
|
280
|
+
[ ] Setup steps verified
|
|
281
|
+
[ ] Test commands documented
|
|
282
|
+
[ ] Environment variables documented
|
|
283
|
+
[ ] Project structure explained
|
|
284
|
+
[ ] Contribution workflow explained
|
|
285
|
+
[ ] Good first issues listed
|
|
286
|
+
|
|
287
|
+
Gaps remaining (if any):
|
|
288
|
+
[anything that could not be determined automatically]
|
|
289
|
+
```
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
name: openapi
|
|
2
|
+
version: 1.0.1
|
|
3
|
+
description: |
|
|
4
|
+
Write and review OpenAPI 3.1 specifications. Covers resource naming, HTTP
|
|
5
|
+
method semantics, status codes, error conventions, pagination, versioning,
|
|
6
|
+
security schemes, and schema validation. Use when asked to "write an OpenAPI
|
|
7
|
+
spec", "review this API spec", "add an endpoint to the spec", or "validate
|
|
8
|
+
this OpenAPI file".
|
|
9
|
+
argument-hint: '[API or spec file to write or review]'
|
|
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
|