vector-cadence-skills 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/CONTRIBUTING.md +69 -0
- package/DOCUMENTATION.md +1081 -0
- package/README.md +146 -0
- package/examples/bug-debug-lifecycle.md +39 -0
- package/examples/feature-lifecycle.md +54 -0
- package/examples/harness-subagent-plan.md +39 -0
- package/examples/vertical-slices.md +43 -0
- package/package.json +39 -0
- package/references/architecture-overview.md +279 -0
- package/references/artifact-model.md +20 -0
- package/references/final-skill-quality-bar.md +33 -0
- package/references/minimal-mode.md +50 -0
- package/references/source-integration-map.md +159 -0
- package/references/subagent-policy.md +30 -0
- package/references/tiering.md +23 -0
- package/scripts/validate-skills.mjs +187 -0
- package/skills/vc-align/SKILL.md +124 -0
- package/skills/vc-architecture/SKILL.md +131 -0
- package/skills/vc-debug/SKILL.md +154 -0
- package/skills/vc-execute/SKILL.md +166 -0
- package/skills/vc-handoff/SKILL.md +127 -0
- package/skills/vc-harness-architect/SKILL.md +138 -0
- package/skills/vc-learn/SKILL.md +123 -0
- package/skills/vc-orient/SKILL.md +108 -0
- package/skills/vc-plan/SKILL.md +156 -0
- package/skills/vc-prototype/SKILL.md +103 -0
- package/skills/vc-review/SKILL.md +156 -0
- package/skills/vc-setup/SKILL.md +126 -0
- package/skills/vc-skill-author/SKILL.md +131 -0
- package/skills/vc-slice/SKILL.md +121 -0
- package/skills/vc-triage/SKILL.md +149 -0
- package/skills.json +98 -0
- package/templates/AGENTS.md +82 -0
- package/templates/CONTEXT.md +23 -0
- package/templates/vc-budget.yml +4 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Minimal Vector Cadence Mode
|
|
2
|
+
|
|
3
|
+
Vector Cadence should not feel heavy for small tasks. Use the minimum process that makes the work safe.
|
|
4
|
+
|
|
5
|
+
## For tiny known changes
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
vc-execute → optional vc-review
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Examples:
|
|
12
|
+
|
|
13
|
+
- copy tweak,
|
|
14
|
+
- obvious one-file bug,
|
|
15
|
+
- mechanical rename,
|
|
16
|
+
- small config change with known validation.
|
|
17
|
+
|
|
18
|
+
## For unfamiliar code
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
vc-orient → vc-execute → optional vc-review
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Use orientation only long enough to avoid guessing.
|
|
25
|
+
|
|
26
|
+
## For meaningful features
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
vc-align → vc-plan → vc-execute → vc-review → optional vc-learn
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Add `vc-slice` and `vc-triage` when work becomes a queue of issues or AFK tasks.
|
|
33
|
+
|
|
34
|
+
## For bugs
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
vc-debug → vc-execute → vc-review → optional vc-learn
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Do not start with planning when the root cause is unknown.
|
|
41
|
+
|
|
42
|
+
## When not to use the full lifecycle
|
|
43
|
+
|
|
44
|
+
Skip full Vector Cadence for:
|
|
45
|
+
|
|
46
|
+
- typos,
|
|
47
|
+
- formatting-only changes,
|
|
48
|
+
- obvious dependency bumps,
|
|
49
|
+
- throwaway experiments,
|
|
50
|
+
- changes where the user supplied exact instructions and validation is clear.
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Source Integration Map
|
|
2
|
+
|
|
3
|
+
This document explains which upstream skill ideas were preserved, replaced, or integrated in the Vector Cadence skill suite.
|
|
4
|
+
|
|
5
|
+
## Summary table
|
|
6
|
+
|
|
7
|
+
| Vector Cadence skill | Pocock source | Compound source | Decision |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| `vc-setup` | `setup-matt-pocock-skills` | `ce-setup`, `ce-work` assumptions | Integrate |
|
|
10
|
+
| `vc-orient` | `zoom-out` | repo research agents | Integrate, Pocock lightweight posture |
|
|
11
|
+
| `vc-align` | `grill-me`, `grill-with-docs`, `ubiquitous-language` | `ce-brainstorm`, `ce-strategy` ideas | Integrate, Compound shell + Pocock discipline |
|
|
12
|
+
| `vc-plan` | `to-prd`, architecture/testability prompts | `ce-plan`, `ce-doc-review` | Compound base, Pocock quality bar |
|
|
13
|
+
| `vc-slice` | `to-issues` | plan U-IDs/test scenarios | Pocock base, Compound metadata |
|
|
14
|
+
| `vc-triage` | `triage` | issue/debug handoff patterns | Pocock base, Vector Cadence gates |
|
|
15
|
+
| `vc-prototype` | `prototype` | frontend proof/demo ideas | Pocock base |
|
|
16
|
+
| `vc-execute` | `tdd` | `ce-work` | Compound shell + Pocock inner loop |
|
|
17
|
+
| `vc-debug` | `diagnose` | `ce-debug` | Integrated equally |
|
|
18
|
+
| `vc-review` | `review` Standards-vs-Spec | `ce-code-review`, `ce-doc-review` | Compound base |
|
|
19
|
+
| `vc-architecture` | `improve-codebase-architecture`, `design-an-interface` | `ce-agent-native-architecture`, `ce-agent-native-audit` | Route by architecture type |
|
|
20
|
+
| `vc-learn` | ADR/glossary discipline | `ce-compound`, `ce-compound-refresh` | Compound base, Pocock artifact discipline |
|
|
21
|
+
| `vc-handoff` | `handoff` | workflow handoffs | Pocock base, Compound trace IDs |
|
|
22
|
+
| `vc-harness-architect` | setup/TDD/vertical-slice habits | agent-native architecture | Compound + harness strategy |
|
|
23
|
+
| `vc-skill-author` | `write-a-skill` | package/harness needs | Pocock base |
|
|
24
|
+
|
|
25
|
+
## Key integration decisions
|
|
26
|
+
|
|
27
|
+
### 1. Alignment is not planning
|
|
28
|
+
|
|
29
|
+
Pocock grilling and Compound brainstorming both live upstream, but they answer slightly different questions.
|
|
30
|
+
|
|
31
|
+
- Compound asks: what are we building and why?
|
|
32
|
+
- Pocock asks: are we using the right concepts and have we resolved the hard branches?
|
|
33
|
+
|
|
34
|
+
Vector Cadence Align integrates these into one alignment workflow. It does not immediately create implementation units. That is planning’s job.
|
|
35
|
+
|
|
36
|
+
### 2. Planning uses Compound structure, not Pocock PRD as-is
|
|
37
|
+
|
|
38
|
+
Pocock `to-prd` is strong at synthesizing conversation into a product doc, but Compound `ce-plan` is stronger for technical handoff because it includes:
|
|
39
|
+
|
|
40
|
+
- U-IDs,
|
|
41
|
+
- repo-relative files,
|
|
42
|
+
- test scenarios,
|
|
43
|
+
- dependencies,
|
|
44
|
+
- implementation posture,
|
|
45
|
+
- verification criteria.
|
|
46
|
+
|
|
47
|
+
Vector Cadence Plan therefore uses Compound as the shell. Pocock contributes domain grounding, no-code planning discipline, public-interface testing bias, and deep-module awareness.
|
|
48
|
+
|
|
49
|
+
### 3. Issue slicing remains Pocock-dominant
|
|
50
|
+
|
|
51
|
+
Compound implementation units are not the same as issue tracker slices. An implementation unit can be atomic but still not independently shippable.
|
|
52
|
+
|
|
53
|
+
Pocock `to-issues` has the stronger rule: every issue should be a tracer bullet through the system.
|
|
54
|
+
|
|
55
|
+
Vector Cadence Slice therefore uses Pocock as the base and imports Compound metadata from plans.
|
|
56
|
+
|
|
57
|
+
### 4. Execution uses Compound orchestration but Pocock TDD
|
|
58
|
+
|
|
59
|
+
Compound `ce-work` is the better executor because it handles:
|
|
60
|
+
|
|
61
|
+
- branch/worktree setup,
|
|
62
|
+
- task lists,
|
|
63
|
+
- subagent strategies,
|
|
64
|
+
- incremental commits,
|
|
65
|
+
- continuous tests,
|
|
66
|
+
- shipping workflow.
|
|
67
|
+
|
|
68
|
+
But Pocock `tdd` has the better coding discipline:
|
|
69
|
+
|
|
70
|
+
- one behavior at a time,
|
|
71
|
+
- public interface tests,
|
|
72
|
+
- no horizontal test/code phases,
|
|
73
|
+
- refactor only while green.
|
|
74
|
+
|
|
75
|
+
Vector Cadence Execute embeds Pocock TDD inside Compound orchestration.
|
|
76
|
+
|
|
77
|
+
### 5. Debugging needs both sources
|
|
78
|
+
|
|
79
|
+
Pocock `diagnose` has the strongest feedback-loop-first message: build a deterministic loop or stop.
|
|
80
|
+
|
|
81
|
+
Compound `ce-debug` has the strongest causal-chain and environment discipline.
|
|
82
|
+
|
|
83
|
+
Vector Cadence Debug combines them because a feedback loop without causal rigor can still patch symptoms, and causal rigor without a loop can become code-reading theater.
|
|
84
|
+
|
|
85
|
+
### 6. Review is Compound-dominant
|
|
86
|
+
|
|
87
|
+
Compound `ce-code-review` is much more operationally complete than Pocock review:
|
|
88
|
+
|
|
89
|
+
- personas,
|
|
90
|
+
- severity,
|
|
91
|
+
- confidence,
|
|
92
|
+
- deduplication,
|
|
93
|
+
- validators,
|
|
94
|
+
- autofix routing,
|
|
95
|
+
- residual handoff.
|
|
96
|
+
|
|
97
|
+
Pocock’s useful contribution is the Standards-vs-Spec lens. Vector Cadence Review preserves that lens while using Compound’s machinery.
|
|
98
|
+
|
|
99
|
+
### 7. Architecture is split by problem type
|
|
100
|
+
|
|
101
|
+
Pocock wins for normal code architecture because the deep-module vocabulary is precise and actionable.
|
|
102
|
+
|
|
103
|
+
Compound wins for agent-native/harness architecture because it has concepts Pocock does not cover:
|
|
104
|
+
|
|
105
|
+
- action parity,
|
|
106
|
+
- primitive tools,
|
|
107
|
+
- dynamic context injection,
|
|
108
|
+
- shared workspace,
|
|
109
|
+
- agent-native testing,
|
|
110
|
+
- self-modification.
|
|
111
|
+
|
|
112
|
+
Vector Cadence Architecture routes instead of forcing one framework to cover both.
|
|
113
|
+
|
|
114
|
+
### 8. Learning is Compound-dominant but artifact-disciplined
|
|
115
|
+
|
|
116
|
+
Compound’s compounding system is the best source for solved-problem memory.
|
|
117
|
+
|
|
118
|
+
But without Pocock’s artifact discipline, it can bloat docs. Vector Cadence Learn keeps:
|
|
119
|
+
|
|
120
|
+
- domain terms in `CONTEXT.md`,
|
|
121
|
+
- decisions in ADRs,
|
|
122
|
+
- solved problems in `docs/solutions/`,
|
|
123
|
+
- lifecycle reality in `docs/knowledge/`,
|
|
124
|
+
- trivial work undocumented.
|
|
125
|
+
|
|
126
|
+
## What was intentionally not copied
|
|
127
|
+
|
|
128
|
+
### Deprecated Pocock skills as standalone commands
|
|
129
|
+
|
|
130
|
+
- `ubiquitous-language` was folded into `vc-align` and `vc-setup` using `CONTEXT.md`.
|
|
131
|
+
- `design-an-interface` was folded into `vc-architecture` as a subroutine.
|
|
132
|
+
- `request-refactor-plan` was folded into `vc-architecture` + `vc-plan` + `vc-slice`.
|
|
133
|
+
|
|
134
|
+
### Compound specialty skills not needed yet
|
|
135
|
+
|
|
136
|
+
Many Compound skills are valuable but not part of the initial integrated suite:
|
|
137
|
+
|
|
138
|
+
- release notes,
|
|
139
|
+
- Slack research,
|
|
140
|
+
- demo reels,
|
|
141
|
+
- Xcode/browser specialty tests,
|
|
142
|
+
- Rails-specific style,
|
|
143
|
+
- beta dogfood flows,
|
|
144
|
+
- image generation,
|
|
145
|
+
- product pulse.
|
|
146
|
+
|
|
147
|
+
They can remain optional extensions later. Including all of them now would recreate the “pile of blocks” problem.
|
|
148
|
+
|
|
149
|
+
## Design rule for future additions
|
|
150
|
+
|
|
151
|
+
Before adding a new Vector Cadence skill, answer:
|
|
152
|
+
|
|
153
|
+
1. Is this a distinct lifecycle responsibility?
|
|
154
|
+
2. Does it need a new user-facing command, or is it a subroutine of an existing skill?
|
|
155
|
+
3. Is it prompt-only, extension-backed, or wrapper-level?
|
|
156
|
+
4. What artifact does it read or write?
|
|
157
|
+
5. What upstream skill discipline is actually better for this responsibility?
|
|
158
|
+
|
|
159
|
+
If the answer is “it is just another checklist,” do not add a top-level skill.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Vector Cadence Subagent Policy
|
|
2
|
+
|
|
3
|
+
Subagents are a harness capability, not a markdown-only feature.
|
|
4
|
+
|
|
5
|
+
## Rollout stages
|
|
6
|
+
|
|
7
|
+
1. Read-only research/review subagents.
|
|
8
|
+
2. Test-running subagents with bounded commands.
|
|
9
|
+
3. Serial implementation subagents.
|
|
10
|
+
4. Parallel write subagents with isolated worktrees or disjoint file scopes.
|
|
11
|
+
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
- Parent orchestrator owns final merge and final validation.
|
|
15
|
+
- Review/research subagents are read-only by default.
|
|
16
|
+
- Shared-checkout subagents must not stage, commit, or run whole-suite tests concurrently.
|
|
17
|
+
- Parallel write subagents require isolation or provably disjoint scopes.
|
|
18
|
+
- Every subagent needs a bounded task and output contract.
|
|
19
|
+
|
|
20
|
+
## Suggested output contract
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"status": "success | failed | timeout",
|
|
25
|
+
"summary": "...",
|
|
26
|
+
"filesTouched": [],
|
|
27
|
+
"evidence": [],
|
|
28
|
+
"rawLogPath": "..."
|
|
29
|
+
}
|
|
30
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Vector Cadence Tiering
|
|
2
|
+
|
|
3
|
+
Tiering matches process and cost to risk.
|
|
4
|
+
|
|
5
|
+
| Tier | Use for | Process |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| T1 | known, low-risk, small blast radius | lean execution and focused validation |
|
|
8
|
+
| T2 | moderate ambiguity or unfamiliar area | alignment, plan, focused research, review gate |
|
|
9
|
+
| T3 | high-risk or cross-cutting | gated deep research, doc review, human pause, deep review |
|
|
10
|
+
|
|
11
|
+
## T3 signals
|
|
12
|
+
|
|
13
|
+
- auth or permissions,
|
|
14
|
+
- payments or billing,
|
|
15
|
+
- PII, privacy, or compliance,
|
|
16
|
+
- data migrations or backfills,
|
|
17
|
+
- public APIs or CLI contracts,
|
|
18
|
+
- multi-service behavior,
|
|
19
|
+
- harness agent loop,
|
|
20
|
+
- subagent write behavior,
|
|
21
|
+
- cache-first provider architecture.
|
|
22
|
+
|
|
23
|
+
Do not over-process T1 work. Do not under-research T3 work.
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import process from "node:process";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
|
|
7
|
+
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const root = path.resolve(scriptDir, "..");
|
|
9
|
+
const indexPath = path.join(root, "skills.json");
|
|
10
|
+
const errors = [];
|
|
11
|
+
const warnings = [];
|
|
12
|
+
|
|
13
|
+
function read(file) {
|
|
14
|
+
return fs.readFileSync(file, "utf8");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function exists(file) {
|
|
18
|
+
return fs.existsSync(file);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function rel(file) {
|
|
22
|
+
return path.relative(root, file).replaceAll(path.sep, "/");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function parseFrontmatter(text, file) {
|
|
26
|
+
const normalized = text.replace(/^\uFEFF/, "").replaceAll("\r\n", "\n");
|
|
27
|
+
if (!normalized.startsWith("---\n")) {
|
|
28
|
+
errors.push(`${rel(file)}: missing opening frontmatter delimiter`);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const end = normalized.indexOf("\n---\n", 4);
|
|
32
|
+
if (end === -1) {
|
|
33
|
+
errors.push(`${rel(file)}: missing closing frontmatter delimiter`);
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const raw = normalized.slice(4, end).trim();
|
|
37
|
+
const data = {};
|
|
38
|
+
for (const line of raw.split(/\r?\n/)) {
|
|
39
|
+
const match = line.match(/^([A-Za-z0-9_-]+):\s*(.*)$/);
|
|
40
|
+
if (!match) {
|
|
41
|
+
errors.push(`${rel(file)}: invalid frontmatter line: ${line}`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
data[match[1]] = match[2].trim().replace(/^['"]|['"]$/g, "");
|
|
45
|
+
}
|
|
46
|
+
return data;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function checkLinks(file, text) {
|
|
50
|
+
const dir = path.dirname(file);
|
|
51
|
+
const linkPattern = /\[[^\]]+\]\(([^)]+)\)/g;
|
|
52
|
+
for (const match of text.matchAll(linkPattern)) {
|
|
53
|
+
const target = match[1].trim();
|
|
54
|
+
if (!target || target.startsWith("#") || /^[a-z]+:/i.test(target)) continue;
|
|
55
|
+
const clean = target.split("#")[0];
|
|
56
|
+
if (!clean) continue;
|
|
57
|
+
const resolved = path.resolve(dir, clean);
|
|
58
|
+
if (!exists(resolved)) {
|
|
59
|
+
errors.push(`${rel(file)}: broken link to ${target}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (!exists(indexPath)) {
|
|
65
|
+
errors.push("skills.json missing");
|
|
66
|
+
} else {
|
|
67
|
+
let index;
|
|
68
|
+
try {
|
|
69
|
+
index = JSON.parse(read(indexPath));
|
|
70
|
+
} catch (error) {
|
|
71
|
+
errors.push(`skills.json invalid JSON: ${error.message}`);
|
|
72
|
+
}
|
|
73
|
+
if (index) {
|
|
74
|
+
if (!Array.isArray(index.skills))
|
|
75
|
+
errors.push("skills.json: skills must be an array");
|
|
76
|
+
for (const entry of index.skills || []) {
|
|
77
|
+
if (!entry.name || !entry.path) {
|
|
78
|
+
errors.push("skills.json: every skill entry needs name and path");
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const file = path.join(root, entry.path);
|
|
82
|
+
if (!exists(file)) {
|
|
83
|
+
errors.push(`skills.json: missing ${entry.path}`);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const dirName = path.basename(path.dirname(file));
|
|
87
|
+
if (dirName !== entry.name) {
|
|
88
|
+
errors.push(
|
|
89
|
+
`${entry.path}: directory name ${dirName} does not match index name ${entry.name}`,
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const skillsRoot = path.join(root, "skills");
|
|
97
|
+
const skillFiles = fs
|
|
98
|
+
.readdirSync(skillsRoot, { withFileTypes: true })
|
|
99
|
+
.filter((d) => d.isDirectory())
|
|
100
|
+
.map((d) => path.join(skillsRoot, d.name, "SKILL.md"));
|
|
101
|
+
|
|
102
|
+
if (skillFiles.length === 0) errors.push("No vc-*/SKILL.md files found");
|
|
103
|
+
|
|
104
|
+
const bannedRuntimePatterns = [
|
|
105
|
+
{
|
|
106
|
+
pattern: /Integrated source decision/i,
|
|
107
|
+
label: "Integrated source decision",
|
|
108
|
+
},
|
|
109
|
+
{ pattern: /\/ce-[A-Za-z0-9_-]+/, label: "legacy /ce-* command" },
|
|
110
|
+
{ pattern: /\/grill-with-docs|\/grill-me/, label: "legacy grill command" },
|
|
111
|
+
{
|
|
112
|
+
pattern: /\/to-issues|\/to-prd|\/triage|\/tdd|\/diagnose/,
|
|
113
|
+
label: "legacy Pocock slash command",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
pattern: /\/vc-spec|\/vc-run|\/vc-judge/,
|
|
117
|
+
label: "old Vector Cadence command name",
|
|
118
|
+
},
|
|
119
|
+
];
|
|
120
|
+
|
|
121
|
+
for (const file of skillFiles) {
|
|
122
|
+
if (!exists(file)) {
|
|
123
|
+
errors.push(`${rel(file)} missing`);
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const text = read(file);
|
|
127
|
+
const lines = text.split(/\r?\n/).length;
|
|
128
|
+
const fm = parseFrontmatter(text, file);
|
|
129
|
+
const dirName = path.basename(path.dirname(file));
|
|
130
|
+
|
|
131
|
+
if (fm) {
|
|
132
|
+
if (fm.name !== dirName)
|
|
133
|
+
errors.push(
|
|
134
|
+
`${rel(file)}: name ${fm.name || "<missing>"} does not match directory ${dirName}`,
|
|
135
|
+
);
|
|
136
|
+
if (!fm.description) errors.push(`${rel(file)}: missing description`);
|
|
137
|
+
if (fm.description && fm.description.length > 1024)
|
|
138
|
+
errors.push(`${rel(file)}: description exceeds 1024 chars`);
|
|
139
|
+
if (fm.description && !/Use when/i.test(fm.description))
|
|
140
|
+
warnings.push(
|
|
141
|
+
`${rel(file)}: description should include "Use when" trigger language`,
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (lines > 170)
|
|
146
|
+
warnings.push(
|
|
147
|
+
`${rel(file)}: ${lines} lines; consider shortening below 170`,
|
|
148
|
+
);
|
|
149
|
+
if (!/^## Purpose/m.test(text))
|
|
150
|
+
warnings.push(`${rel(file)}: missing ## Purpose`);
|
|
151
|
+
if (!/^## When to use/m.test(text))
|
|
152
|
+
warnings.push(`${rel(file)}: missing ## When to use`);
|
|
153
|
+
if (!/^## When to skip/m.test(text))
|
|
154
|
+
warnings.push(`${rel(file)}: missing ## When to skip`);
|
|
155
|
+
if (!/^## Workflow/m.test(text))
|
|
156
|
+
warnings.push(`${rel(file)}: missing ## Workflow`);
|
|
157
|
+
if (!/^## Output/m.test(text))
|
|
158
|
+
warnings.push(`${rel(file)}: missing ## Output`);
|
|
159
|
+
if (!/^## Guardrails/m.test(text))
|
|
160
|
+
warnings.push(`${rel(file)}: missing ## Guardrails`);
|
|
161
|
+
|
|
162
|
+
for (const { pattern, label } of bannedRuntimePatterns) {
|
|
163
|
+
if (pattern.test(text))
|
|
164
|
+
errors.push(`${rel(file)}: banned runtime phrase found: ${label}`);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
checkLinks(file, text);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
for (const file of fs.readdirSync(root, { recursive: true })) {
|
|
171
|
+
const full = path.join(root, file.toString());
|
|
172
|
+
if (exists(full) && fs.statSync(full).isFile() && full.endsWith(".md")) {
|
|
173
|
+
checkLinks(full, read(full));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
console.log(`Checked ${skillFiles.length} skills.`);
|
|
178
|
+
if (warnings.length) {
|
|
179
|
+
console.log(`\nWarnings (${warnings.length}):`);
|
|
180
|
+
for (const warning of warnings) console.log(`- ${warning}`);
|
|
181
|
+
}
|
|
182
|
+
if (errors.length) {
|
|
183
|
+
console.error(`\nErrors (${errors.length}):`);
|
|
184
|
+
for (const error of errors) console.error(`- ${error}`);
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
console.log("\nValidation passed.");
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vc-align
|
|
3
|
+
description: Align feature, fix, refactor, or harness intent before technical planning by clarifying scope, domain language, risks, and rejected alternatives. Use when starting meaningful work, when scope is fuzzy, when terminology matters, or when a plan needs pressure-testing before implementation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Vector Cadence Align
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Clarify what should be built and why before technical planning begins. This skill turns fuzzy intent into shared product/domain understanding, without writing implementation code.
|
|
11
|
+
|
|
12
|
+
## Operating model
|
|
13
|
+
|
|
14
|
+
Use a right-sized alignment conversation: inspect existing code/docs first, ask one focused question at a time, sharpen domain language, compare real alternatives, and capture both clean requirements and messy guardrails.
|
|
15
|
+
|
|
16
|
+
## When to use
|
|
17
|
+
|
|
18
|
+
Use for:
|
|
19
|
+
|
|
20
|
+
- new features or meaningful product changes,
|
|
21
|
+
- non-trivial fixes where expected behavior is unclear,
|
|
22
|
+
- refactors with user-visible or architectural consequences,
|
|
23
|
+
- harness, tool, provider, or subagent design ideas,
|
|
24
|
+
- requests like “grill this”, “stress-test this”, “is this architecture right?”, or “help me scope this”.
|
|
25
|
+
|
|
26
|
+
## When to skip
|
|
27
|
+
|
|
28
|
+
Skip or keep extremely lightweight for:
|
|
29
|
+
|
|
30
|
+
- typos and mechanical edits,
|
|
31
|
+
- obvious one-file changes,
|
|
32
|
+
- work with an already reviewed requirements document,
|
|
33
|
+
- bugs that first need root-cause diagnosis with `vc-debug`.
|
|
34
|
+
|
|
35
|
+
## Inputs
|
|
36
|
+
|
|
37
|
+
Use what exists:
|
|
38
|
+
|
|
39
|
+
- user prompt or issue,
|
|
40
|
+
- `STRATEGY.md`,
|
|
41
|
+
- `CONTEXT.md` or `CONTEXT-MAP.md`,
|
|
42
|
+
- relevant ADRs,
|
|
43
|
+
- previous requirements/plans/knowledge docs,
|
|
44
|
+
- code paths that can verify claims.
|
|
45
|
+
|
|
46
|
+
## Workflow
|
|
47
|
+
|
|
48
|
+
### 1. Classify depth
|
|
49
|
+
|
|
50
|
+
| Depth | Signals | Behavior |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| Lightweight | clear low-risk change | short scan, 0-2 questions, concise summary |
|
|
53
|
+
| Standard | feature or meaningful ambiguity | context scan, pressure test, requirements/align notes |
|
|
54
|
+
| Deep | architecture, security, privacy, payments, harness loop | deeper alternatives, explicit risks, ADR candidates |
|
|
55
|
+
|
|
56
|
+
### 2. Scan existing context
|
|
57
|
+
|
|
58
|
+
Before asking, inspect what the repo can answer:
|
|
59
|
+
|
|
60
|
+
1. Read strategy if present.
|
|
61
|
+
2. Read domain glossary and relevant ADRs.
|
|
62
|
+
3. Search for similar code or artifacts.
|
|
63
|
+
4. Verify checkable claims in code.
|
|
64
|
+
5. Label anything inferred or unverified.
|
|
65
|
+
|
|
66
|
+
Never ask the user a question the repo can answer.
|
|
67
|
+
|
|
68
|
+
### 3. Pressure-test the idea
|
|
69
|
+
|
|
70
|
+
Probe only gaps that actually exist:
|
|
71
|
+
|
|
72
|
+
- evidence: what proves this matters?
|
|
73
|
+
- specificity: who exactly benefits?
|
|
74
|
+
- counterfactual: what happens if nothing ships?
|
|
75
|
+
- attachment: is the proposed shape the smallest useful shape?
|
|
76
|
+
- durability: what future shift could break this bet?
|
|
77
|
+
|
|
78
|
+
Ask one question at a time. Provide a recommended answer when useful.
|
|
79
|
+
|
|
80
|
+
### 4. Explore alternatives
|
|
81
|
+
|
|
82
|
+
When multiple directions are plausible, present 2-3 concrete approaches that differ in product or mechanism shape. For each, include:
|
|
83
|
+
|
|
84
|
+
- what it is,
|
|
85
|
+
- when it works best,
|
|
86
|
+
- what it simplifies,
|
|
87
|
+
- what it complicates,
|
|
88
|
+
- risks or unknowns.
|
|
89
|
+
|
|
90
|
+
Then recommend one and ask for confirmation.
|
|
91
|
+
|
|
92
|
+
### 5. Capture decisions
|
|
93
|
+
|
|
94
|
+
Write only artifacts that earn their carrying cost:
|
|
95
|
+
|
|
96
|
+
- update `CONTEXT.md` for durable domain terms only,
|
|
97
|
+
- offer an ADR only for hard-to-reverse, surprising, trade-off decisions,
|
|
98
|
+
- write `docs/align-notes/<slug>-grilled.md` for rejected alternatives, anxiety points, assumptions, and open questions,
|
|
99
|
+
- write `docs/brainstorms/YYYY-MM-DD-<topic>-requirements.md` when durable requirements are useful.
|
|
100
|
+
|
|
101
|
+
## Output
|
|
102
|
+
|
|
103
|
+
End with:
|
|
104
|
+
|
|
105
|
+
```markdown
|
|
106
|
+
## Alignment Summary
|
|
107
|
+
|
|
108
|
+
**Intent:** ...
|
|
109
|
+
**Target user / actor:** ...
|
|
110
|
+
**Success looks like:** ...
|
|
111
|
+
**Chosen approach:** ...
|
|
112
|
+
**Rejected alternatives:** ...
|
|
113
|
+
**Key risks / assumptions:** ...
|
|
114
|
+
**Artifacts updated:** ...
|
|
115
|
+
**Recommended next skill:** vc-plan | vc-prototype | vc-debug
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Guardrails
|
|
119
|
+
|
|
120
|
+
- Do not write implementation code.
|
|
121
|
+
- Do not turn `CONTEXT.md` into a spec or task list.
|
|
122
|
+
- Do not create ADRs for obvious or reversible choices.
|
|
123
|
+
- Do not publish issues from this skill.
|
|
124
|
+
- Preserve messy guardrails in align notes instead of flattening them into clean requirements.
|