-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path_graph.yaml
More file actions
221 lines (199 loc) · 9.2 KB
/
_graph.yaml
File metadata and controls
221 lines (199 loc) · 9.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# pmstack skill graph
#
# Declarative handoff map. Tells skills which prior outputs are useful
# context (not required — skills still work standalone) and what default
# orchestrators (like /sprint) should chain.
#
# This file is read by:
# - /sprint (chains skills in sequence with confirmation gates)
# - skill prompts themselves (each skill should glob outputs/ for relevant prior artifacts and use them as context)
# - decisions-log.md auto-append logic
#
# Edit if you want to change the canonical PM workflow.
version: 0.5.0
# ─────────────────────────────────────────────────────────────────────────────
# Skill graph — for each skill, what prior outputs help it do better work
# ─────────────────────────────────────────────────────────────────────────────
edges:
# /prd reads /competitive output if present (positioning informs problem framing)
prd:
reads_from:
- skill: competitive
glob: "outputs/competitive-*.md"
when: "if a positioning analysis exists for this market, use it for the Target Audience section"
# /metrics reads the most recent /prd
metrics:
reads_from:
- skill: prd
glob: "outputs/prd-*.md"
when: "always — North Star metric should align with the PRD's Success Metrics section"
# /eval reads /prd + /metrics
eval:
reads_from:
- skill: prd
glob: "outputs/prd-*.md"
when: "always — eval failure modes should map to PRD risks"
- skill: metrics
glob: "outputs/metrics-*.md"
when: "always — eval metrics should reuse the measurement framework"
# /brief can summarize any of the above
brief:
reads_from:
- skill: any
glob: "outputs/{prd,metrics,eval,competitive,compare}-*"
when: "the brief should reference the source artifacts so stakeholders can dig in"
# /compare produces both a plan and an eval YAML; eval YAML feeds /run-eval
compare:
feeds_to:
- run-eval
# /run-eval is terminal — produces summary.md per run
run-eval:
reads_from:
- skill: eval
glob: "outputs/eval-*.yaml"
when: "input — the eval design to execute"
feeds_to:
- transcript-review
# /vibe-test is the layer-1 ritual — read transcripts before writing the eval.
# Implements Anthropic Steps 0–1 (Demystifying Evals for AI Agents).
vibe-test:
reads_from:
- skill: any
glob: "outputs/transcripts/**"
when: "if a transcripts/ folder exists locally, sample from it"
- skill: prd
glob: "outputs/prd-*.md"
when: "PRD provides the 'what should this do' frame"
feeds_to:
- eval
# /transcript-review is the post-run companion — Anthropic Step 6.
# Walks every failed trial asking: model mistake, grader mistake, or task-spec error?
transcript-review:
reads_from:
- skill: run-eval
glob: "outputs/eval-runs/*/summary.md"
when: "input — the run summary to triage"
- skill: run-eval
glob: "outputs/eval-runs/*/cases/*.json"
when: "per-trial detail for the diagnostic walk"
feeds_to:
- eval # rubric + task updates feed back into /eval
# ───── Default routines (v0.5+) ─────
# /premortem reads a target PRD and (optionally) same-domain competitive + eval
premortem:
reads_from:
- skill: prd
glob: "outputs/prd-*.md"
when: "always — the target PRD; required input"
- skill: competitive
glob: "outputs/competitive-*.md"
when: "if same-topic competitive scan exists, sharpens the failure stories"
- skill: eval
glob: "outputs/eval-*.yaml"
when: "if same-topic eval exists, leading indicators can borrow eval cases"
feeds_to:
- prd # mutates the PRD's Risks section on confirmation
# /weekly synthesizes the last 7 days of decisions-log + outputs/
weekly:
reads_from:
- skill: any
glob: "outputs/*"
when: "filter to last 7 days; group decisions by skill"
- skill: any
glob: "decisions-log.md"
when: "delta on the log is the canonical source for 'decisions made'"
# /launch-readiness reads the full artifact graph for one feature
launch-readiness:
reads_from:
- skill: prd
glob: "outputs/prd-<feature>-*.md"
when: "required — verdict is NO-GO without a matching PRD"
- skill: metrics
glob: "outputs/metrics-<feature>-*.md"
- skill: eval
glob: "outputs/eval-<feature>-*.yaml"
- skill: run-eval
glob: "outputs/eval-runs/*<feature>*/summary.md"
- skill: premortem
glob: "outputs/premortem-<feature>-*.md"
- skill: eval-drift
glob: "outputs/eval-drift-*.md"
when: "most recent — flags P0 regression"
- skill: brief
glob: "outputs/brief-<feature>-*.md"
# /lint reads the entire artifact corpus + this graph
lint:
reads_from:
- skill: any
glob: "outputs/*"
when: "walks every artifact for graph gaps + cross-artifact drift + staleness"
- skill: any
glob: "skills/_graph.yaml"
when: "this file — defines expected downstream edges"
# /eval-drift reads prior eval runs to compute a delta
eval-drift:
reads_from:
- skill: eval-self
glob: "evals/results/*.json"
when: "self-eval baseline for drift detection"
- skill: run-eval
glob: "outputs/eval-runs/*/summary.md"
when: "user-eval baselines for drift detection"
feeds_to:
- brief # writes a release-blocker brief on regression
# /onboarding is the entry-point tutorial; reads the example walkthrough
onboarding:
reads_from:
- skill: any
glob: "examples/walkthrough-code-review/*"
when: "uses the bundled walkthrough as comparison reference"
# ─────────────────────────────────────────────────────────────────────────────
# Default orchestrators — chains a higher-level command can run
# ─────────────────────────────────────────────────────────────────────────────
orchestrators:
sprint:
description: "Customer signal → ready-to-ship-to-stakeholders artifacts"
chain: [prd, metrics, eval, brief]
confirm_between_steps: true
compare-and-run:
description: "Compare two products, then execute the resulting eval"
chain: [compare, run-eval]
confirm_between_steps: true
onboarding:
description: "Interactive tutorial for new pmstack users"
chain: [prd, competitive, premortem, metrics, eval, run-eval, lint, launch-readiness, brief, weekly, eval-drift]
confirm_between_steps: true
# ─────────────────────────────────────────────────────────────────────────────
# Default routines — five recurring patterns that compose existing skills.
# Each is runnable as a one-shot slash command AND schedulable via /loop.
# ─────────────────────────────────────────────────────────────────────────────
default_routines:
eval-drift:
trigger: loop-only
cadence: 7d
purpose: "Weekly drift watch over an AI feature; release-blocker on regression"
premortem:
trigger: slash-only
purpose: "Stress-test a draft PRD with 3 failure stories + mutation gate"
weekly:
trigger: both
cadence: 7d
purpose: "Monday self-snapshot — decisions, open loops, changed-mind"
launch-readiness:
trigger: slash-only
purpose: "Pre-launch GO/NO-GO/CONDITIONAL verdict over the artifact graph"
lint:
trigger: both
cadence: 7d
purpose: "Workspace audit — graph gaps, cross-artifact drift, stale candidates"
# ─────────────────────────────────────────────────────────────────────────────
# Decision log — every skill that ships an artifact should append here
# ─────────────────────────────────────────────────────────────────────────────
decision_log:
path: "decisions-log.md"
format: |
- YYYY-MM-DD — <skill>: <topic> — <relative-artifact-path>
rationale: >
Skills run statelessly. The decision log gives Claude (and you) one place
to look up what's already been decided, so a future skill knows the
PRD already exists, the metrics are already locked in, etc.