murmur8 4.7.2 → 4.7.3
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/README.md +2 -0
- package/REFINE_SKILL.md +230 -0
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# murmur8
|
|
2
2
|
|
|
3
|
+

|
|
4
|
+
|
|
3
5
|
AI coding tools can be a black box. You describe what you want, magic happens, and code appears. If it's wrong, you describe it again and hope for better. There's no process, no trail, no shared understanding of why decisions were made.
|
|
4
6
|
|
|
5
7
|
murmur8 is different. Agents Alex, Cass, Nigel, and Codey run a structured, documented pipeline — the kind a good engineering team would run naturally. Each agent produces real, readable artefacts: a feature spec, user stories, a test plan, an implementation. You can read every one of them, understand the reasoning, and step in at any point. It's not magic. It's a repeatable process that happens to move very fast.
|
package/REFINE_SKILL.md
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# /refine-feature Skill
|
|
2
|
+
|
|
3
|
+
Refine an existing feature by conversing with Alex, then propagating changes through stories, tests, and implementation.
|
|
4
|
+
|
|
5
|
+
## Invocation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
/refine-feature [slug]
|
|
9
|
+
/refine-feature "user-auth" # Refine a specific feature
|
|
10
|
+
/refine-feature "user-auth" --no-commit # Skip auto-commit
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
|
|
15
|
+
Use `/refine-feature` after `/implement-feature` when:
|
|
16
|
+
- The implementation doesn't match your intent
|
|
17
|
+
- Requirements changed since the original run
|
|
18
|
+
- Tests pass but behaviour is wrong
|
|
19
|
+
- You have new information that changes scope
|
|
20
|
+
|
|
21
|
+
## Pipeline
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
/refine-feature "slug"
|
|
25
|
+
│
|
|
26
|
+
▼
|
|
27
|
+
┌────────────────────────────────────────┐
|
|
28
|
+
│ 1. Load context │
|
|
29
|
+
│ Read existing spec, stories, tests │
|
|
30
|
+
│ and pipeline history for slug │
|
|
31
|
+
└────────────────────────────────────────┘
|
|
32
|
+
│
|
|
33
|
+
▼
|
|
34
|
+
┌────────────────────────────────────────┐
|
|
35
|
+
│ 2. Alex — Conversation + Spec Diff │
|
|
36
|
+
│ User provides feedback (freeform) │
|
|
37
|
+
│ Alex proposes spec diff │
|
|
38
|
+
│ User approves or requests revision │
|
|
39
|
+
│ Alex writes updated FEATURE_SPEC.md │
|
|
40
|
+
└────────────────────────────────────────┘
|
|
41
|
+
│
|
|
42
|
+
▼
|
|
43
|
+
┌────────────────────────────────────────┐
|
|
44
|
+
│ 3. Cass — Story Propagation │
|
|
45
|
+
│ (skipped for technical features) │
|
|
46
|
+
│ Updates affected story files │
|
|
47
|
+
│ Writes story-changes.md │
|
|
48
|
+
└────────────────────────────────────────┘
|
|
49
|
+
│
|
|
50
|
+
▼
|
|
51
|
+
┌────────────────────────────────────────┐
|
|
52
|
+
│ 4. Nigel — Test Propagation │
|
|
53
|
+
│ Updates affected test cases │
|
|
54
|
+
│ Writes test-changes.md │
|
|
55
|
+
└────────────────────────────────────────┘
|
|
56
|
+
│
|
|
57
|
+
▼
|
|
58
|
+
┌────────────────────────────────────────┐
|
|
59
|
+
│ *** MANDATORY PAUSE *** │
|
|
60
|
+
│ User reviews: spec diff, story │
|
|
61
|
+
│ changes, test changes │
|
|
62
|
+
│ Must confirm before Codey runs │
|
|
63
|
+
└────────────────────────────────────────┘
|
|
64
|
+
│
|
|
65
|
+
▼
|
|
66
|
+
┌────────────────────────────────────────┐
|
|
67
|
+
│ 5. Codey — Implement │
|
|
68
|
+
│ Test-first, incremental │
|
|
69
|
+
│ Iterates until tests pass │
|
|
70
|
+
│ Auto-commit (unless --no-commit) │
|
|
71
|
+
└────────────────────────────────────────┘
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Rules
|
|
75
|
+
|
|
76
|
+
- **featureId is always preserved** — never changes across refinements
|
|
77
|
+
- **Mandatory pause before Codey** — no flag can bypass this gate
|
|
78
|
+
- **Cass skipped for technical features** — if no story-*.md files exist
|
|
79
|
+
- **Telemetry lineage** — each refinement records `parentRunId` pointing to the run being refined; `type: "refinement"`
|
|
80
|
+
|
|
81
|
+
## Telemetry Lineage
|
|
82
|
+
|
|
83
|
+
Every refinement is linked to the run it refines:
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
run-1 (original /implement-feature)
|
|
87
|
+
└── run-2 (first /refine-feature, parentRunId: run-1)
|
|
88
|
+
└── run-3 (second /refine-feature, parentRunId: run-2)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
All runs share the same `featureId`. This lets you track how many refinements a feature has had and trace the full history chain.
|
|
92
|
+
|
|
93
|
+
## Implementation Prompt
|
|
94
|
+
|
|
95
|
+
You are the `/refine-feature` orchestrator.
|
|
96
|
+
|
|
97
|
+
### Step 1: Load Context
|
|
98
|
+
|
|
99
|
+
```javascript
|
|
100
|
+
const { loadRefinementContext, linkParentRun } = require('./src/refine');
|
|
101
|
+
const ctx = await loadRefinementContext(slug, process.cwd());
|
|
102
|
+
// ctx: { slug, featureId, spec, stories, history, lastRunStatus }
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Display to user:
|
|
106
|
+
```
|
|
107
|
+
Feature: {slug}
|
|
108
|
+
Stories: {count} found
|
|
109
|
+
Last run: {status or "no history"}
|
|
110
|
+
Feature ID: {featureId}
|
|
111
|
+
|
|
112
|
+
What needs to change?
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Step 2: Alex — Conversation + Spec Diff
|
|
116
|
+
|
|
117
|
+
Use the Task tool with `subagent_type="general-purpose"`:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
You are Alex, the System Specification Agent, in REFINEMENT mode.
|
|
121
|
+
|
|
122
|
+
## Context
|
|
123
|
+
- Feature: {slug}
|
|
124
|
+
- Feature ID: {featureId} (MUST be preserved)
|
|
125
|
+
- Current spec: {spec content}
|
|
126
|
+
- Stories: {story list}
|
|
127
|
+
- Last run status: {status}
|
|
128
|
+
|
|
129
|
+
## User Feedback
|
|
130
|
+
{user's freeform feedback}
|
|
131
|
+
|
|
132
|
+
## Task
|
|
133
|
+
1. Analyse what needs to change in the spec based on the feedback
|
|
134
|
+
2. Present a proposed diff (show OLD vs NEW for changed sections)
|
|
135
|
+
3. Wait for user approval
|
|
136
|
+
4. On approval: update FEATURE_SPEC.md preserving featureId in YAML frontmatter
|
|
137
|
+
5. Write .blueprint/features/feature_{slug}/story-changes.md listing which stories are affected and why
|
|
138
|
+
|
|
139
|
+
## Rules
|
|
140
|
+
- featureId MUST remain unchanged in the frontmatter
|
|
141
|
+
- Present diff before writing — do not write until approved
|
|
142
|
+
- Keep changes minimal — only what the feedback requires
|
|
143
|
+
- If feedback is unclear, ask a clarifying question
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Step 3: Cass — Story Propagation (if user-facing)
|
|
147
|
+
|
|
148
|
+
Use the Task tool with `subagent_type="general-purpose"`:
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
You are Cass, the Story Writer Agent, in REFINEMENT mode.
|
|
152
|
+
|
|
153
|
+
## Context
|
|
154
|
+
- Feature: {slug}
|
|
155
|
+
- story-changes.md: {path}
|
|
156
|
+
|
|
157
|
+
## Task
|
|
158
|
+
1. Read story-changes.md to understand which stories are affected
|
|
159
|
+
2. Update ONLY the affected story files
|
|
160
|
+
3. Preserve all unaffected stories as-is
|
|
161
|
+
4. Write a brief note at the top of each updated story: "Refined: {date} — {reason}"
|
|
162
|
+
|
|
163
|
+
## Rules
|
|
164
|
+
- Do NOT rewrite stories that are not in story-changes.md
|
|
165
|
+
- Keep acceptance criteria testable and explicit
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Step 4: Nigel — Test Propagation
|
|
169
|
+
|
|
170
|
+
Use the Task tool with `subagent_type="general-purpose"`:
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
You are Nigel, the Tester Agent, in REFINEMENT mode.
|
|
174
|
+
|
|
175
|
+
## Context
|
|
176
|
+
- Feature: {slug}
|
|
177
|
+
- story-changes.md: {path} (or spec diff if no stories)
|
|
178
|
+
- Existing tests: test/feature_{slug}.test.js
|
|
179
|
+
|
|
180
|
+
## Task
|
|
181
|
+
1. Identify which tests are affected by the story/spec changes
|
|
182
|
+
2. Update ONLY the affected test cases
|
|
183
|
+
3. Write test-changes.md documenting what changed and why
|
|
184
|
+
|
|
185
|
+
## Rules
|
|
186
|
+
- Do NOT modify tests for unaffected stories
|
|
187
|
+
- New test IDs must not collide with existing ones
|
|
188
|
+
- Write test-changes.md to .blueprint/features/feature_{slug}/
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Step 5: Mandatory Pause
|
|
192
|
+
|
|
193
|
+
Display to user:
|
|
194
|
+
```
|
|
195
|
+
--- Changes ready for review ---
|
|
196
|
+
|
|
197
|
+
Spec: .blueprint/features/feature_{slug}/FEATURE_SPEC.md
|
|
198
|
+
Stories updated: {list or "none (technical feature)"}
|
|
199
|
+
Tests updated: {count} test cases
|
|
200
|
+
|
|
201
|
+
Review the changes above.
|
|
202
|
+
|
|
203
|
+
Proceed with Codey implementation? [y/n]
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**Wait for explicit "y" or "yes". No flag bypasses this.**
|
|
207
|
+
|
|
208
|
+
### Step 6: Codey — Implement
|
|
209
|
+
|
|
210
|
+
Use the Task tool with `subagent_type="general-purpose"` (same prompt as main pipeline Codey implement stage).
|
|
211
|
+
|
|
212
|
+
### Step 7: Record Telemetry
|
|
213
|
+
|
|
214
|
+
```javascript
|
|
215
|
+
const { linkParentRun, buildRefinementPayload } = require('./src/refine');
|
|
216
|
+
const lineage = linkParentRun(slug, ctx.history);
|
|
217
|
+
// lineage: { parentRunId, type: 'refinement', featureId }
|
|
218
|
+
// Include in telemetry payload alongside standard run fields
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Step 8: Commit (unless --no-commit)
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
git add .blueprint/features/feature_{slug}/ test/
|
|
225
|
+
git commit -m "refine({slug}): {brief description of change}
|
|
226
|
+
|
|
227
|
+
parentRunId: {lineage.parentRunId}
|
|
228
|
+
|
|
229
|
+
Co-Authored-By: Claude <noreply@anthropic.com>"
|
|
230
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "murmur8",
|
|
3
|
-
"version": "4.7.
|
|
3
|
+
"version": "4.7.3",
|
|
4
4
|
"description": "Multi-agent workflow framework for automated feature development",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"url": "git+https://github.com/NewmanJustice/murmur8.git"
|
|
25
25
|
},
|
|
26
26
|
"license": "MIT",
|
|
27
|
+
"logo": ".github/assets/murmur8-npm-icon.svg",
|
|
27
28
|
"engines": {
|
|
28
29
|
"node": ">=18.0.0"
|
|
29
30
|
},
|
|
@@ -32,6 +33,7 @@
|
|
|
32
33
|
"src",
|
|
33
34
|
".blueprint",
|
|
34
35
|
".business_context",
|
|
35
|
-
"SKILL.md"
|
|
36
|
+
"SKILL.md",
|
|
37
|
+
"REFINE_SKILL.md"
|
|
36
38
|
]
|
|
37
39
|
}
|