bemadralphy 2.0.0 → 2.0.1
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/dist/beads/adapter.js +6 -1
- package/dist/beads/adapter.js.map +1 -1
- package/dist/phases/sync.js +20 -7
- package/dist/phases/sync.js.map +1 -1
- package/dist/tasks/manager.js +8 -3
- package/dist/tasks/manager.js.map +1 -1
- package/dist/templates/architecture.prompt.md +26 -0
- package/dist/templates/execution/implementer.prompt.md +16 -0
- package/dist/templates/execution/quality-reviewer.prompt.md +15 -0
- package/dist/templates/execution/spec-reviewer.prompt.md +15 -0
- package/dist/templates/prd.prompt.md +26 -0
- package/dist/templates/product-brief.prompt.md +28 -0
- package/dist/templates/stories.prompt.md +33 -0
- package/package.json +4 -3
package/dist/beads/adapter.js
CHANGED
|
@@ -19,10 +19,15 @@ export async function storiesToBeads(storyPaths) {
|
|
|
19
19
|
else if (line.trim().toLowerCase().startsWith('- depends on:')) {
|
|
20
20
|
const value = line.split(':', 2)[1]?.trim() ?? '';
|
|
21
21
|
if (value) {
|
|
22
|
-
|
|
22
|
+
const parsed = value
|
|
23
23
|
.split(',')
|
|
24
24
|
.map((entry) => entry.trim())
|
|
25
25
|
.filter(Boolean);
|
|
26
|
+
for (const dependency of parsed) {
|
|
27
|
+
if (!currentDependencies.includes(dependency)) {
|
|
28
|
+
currentDependencies.push(dependency);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
26
31
|
}
|
|
27
32
|
}
|
|
28
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/beads/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAS5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAoB;IACvD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,mBAAmB,GAAa,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC;oBACT,OAAO,EAAE,SAAS,OAAO,EAAE,EAAE;oBAC7B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;oBAClC,WAAW,EAAE,kCAAkC;oBAC/C,YAAY,EAAE,mBAAmB;iBAClC,CAAC,CAAC;gBACH,mBAAmB,GAAG,EAAE,CAAC;YAC3B,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBAClD,IAAI,KAAK,EAAE,CAAC;oBACV,
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/beads/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAS5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAoB;IACvD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,mBAAmB,GAAa,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC;oBACT,OAAO,EAAE,SAAS,OAAO,EAAE,EAAE;oBAC7B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;oBAClC,WAAW,EAAE,kCAAkC;oBAC/C,YAAY,EAAE,mBAAmB;iBAClC,CAAC,CAAC;gBACH,mBAAmB,GAAG,EAAE,CAAC;YAC3B,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBAClD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,MAAM,GAAG,KAAK;yBACjB,KAAK,CAAC,GAAG,CAAC;yBACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;yBAC5B,MAAM,CAAC,OAAO,CAAC,CAAC;oBACnB,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;wBAChC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;4BAC9C,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACvC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/phases/sync.js
CHANGED
|
@@ -12,13 +12,26 @@ export async function syncPhase(ctx) {
|
|
|
12
12
|
throw new Error('sync: no tasks parsed from stories file');
|
|
13
13
|
}
|
|
14
14
|
const manager = await TaskManager.create(ctx.projectRoot);
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
const existingByStoryAndTitle = new Map(manager.getAll().map((task) => [`${task.storyId}\u0000${task.title}`, task]));
|
|
16
|
+
const created = tasks.map((task) => {
|
|
17
|
+
const key = `${task.storyId}\u0000${task.title}`;
|
|
18
|
+
const existing = existingByStoryAndTitle.get(key);
|
|
19
|
+
if (existing) {
|
|
20
|
+
for (const dep of task.dependencies) {
|
|
21
|
+
manager.addDependency(existing.id, dep);
|
|
22
|
+
}
|
|
23
|
+
return manager.get(existing.id) ?? existing;
|
|
24
|
+
}
|
|
25
|
+
const inserted = manager.create({
|
|
26
|
+
storyId: task.storyId,
|
|
27
|
+
title: task.title,
|
|
28
|
+
description: task.description,
|
|
29
|
+
dependencies: task.dependencies,
|
|
30
|
+
status: 'open',
|
|
31
|
+
});
|
|
32
|
+
existingByStoryAndTitle.set(key, inserted);
|
|
33
|
+
return inserted;
|
|
34
|
+
});
|
|
22
35
|
const tasksMd = renderTasksMarkdown(created.map((task) => ({ id: task.id, title: task.title, status: task.status })));
|
|
23
36
|
await writeFile(path.join(ctx.projectRoot, 'tasks.md'), tasksMd, 'utf-8');
|
|
24
37
|
logInfo(`sync: created ${created.length} tasks in .bemadralphy/tasks.db`);
|
package/dist/phases/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/phases/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAoB;IAClD,OAAO,CAAC,iDAAiD,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/phases/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAoB;IAClD,OAAO,CAAC,iDAAiD,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,uBAAuB,GAAG,IAAI,GAAG,CACrC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAC7E,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC;QAC9C,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACtH,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAE1E,OAAO,CAAC,iBAAiB,OAAO,CAAC,MAAM,iCAAiC,CAAC,CAAC;IAE1E,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/tasks/manager.js
CHANGED
|
@@ -9,7 +9,7 @@ export class TaskManager {
|
|
|
9
9
|
}
|
|
10
10
|
create(task) {
|
|
11
11
|
const now = new Date().toISOString();
|
|
12
|
-
const id = task.id ?? generateTaskId(task.title);
|
|
12
|
+
const id = task.id ?? generateTaskId(task.storyId, task.title);
|
|
13
13
|
this.db
|
|
14
14
|
.prepare(`INSERT INTO tasks (
|
|
15
15
|
id, story_id, title, description, status, assignee, output, error, created_at, updated_at
|
|
@@ -155,12 +155,17 @@ export class TaskManager {
|
|
|
155
155
|
};
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
|
-
function generateTaskId(title) {
|
|
158
|
+
function generateTaskId(storyId, title) {
|
|
159
159
|
const normalized = title
|
|
160
160
|
.toLowerCase()
|
|
161
161
|
.replace(/[^a-z0-9]+/g, '-')
|
|
162
162
|
.replace(/^-+|-+$/g, '');
|
|
163
|
-
const
|
|
163
|
+
const source = `${storyId}:${title}`.toLowerCase();
|
|
164
|
+
let hash = 5381;
|
|
165
|
+
for (let index = 0; index < source.length; index += 1) {
|
|
166
|
+
hash = (hash * 33) ^ source.charCodeAt(index);
|
|
167
|
+
}
|
|
168
|
+
const suffix = (hash >>> 0).toString(36).padStart(6, '0').slice(-6);
|
|
164
169
|
return `${normalized || 'task'}-${suffix}`;
|
|
165
170
|
}
|
|
166
171
|
//# sourceMappingURL=manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/tasks/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AA4B3C,MAAM,OAAO,WAAW;IACL,EAAE,CAAe;IAElC,YAAoB,EAAgB;QAClC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAmB;QACrC,OAAO,IAAI,WAAW,CAAC,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,IAAa;QAClB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/tasks/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architecture
|
|
3
|
+
persona: Winston
|
|
4
|
+
---
|
|
5
|
+
# Role
|
|
6
|
+
You are Winston, a pragmatic software architect.
|
|
7
|
+
|
|
8
|
+
# Goal
|
|
9
|
+
Generate a practical architecture document from the PRD.
|
|
10
|
+
|
|
11
|
+
# Input
|
|
12
|
+
{{prd}}
|
|
13
|
+
|
|
14
|
+
# Requirements
|
|
15
|
+
- Prefer simple and boring technologies.
|
|
16
|
+
- Include deployment, observability, and failure handling.
|
|
17
|
+
- Call out trade-offs and why they were chosen.
|
|
18
|
+
|
|
19
|
+
# Output format
|
|
20
|
+
Return markdown only with:
|
|
21
|
+
1. `# Architecture`
|
|
22
|
+
2. `## System Overview`
|
|
23
|
+
3. `## Components`
|
|
24
|
+
4. `## Data Flow`
|
|
25
|
+
5. `## Operational Concerns`
|
|
26
|
+
6. `## Trade-offs`
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Implementer Prompt
|
|
2
|
+
|
|
3
|
+
You are implementing a single task. Follow these rules:
|
|
4
|
+
|
|
5
|
+
1. NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST.
|
|
6
|
+
2. Red-Green-Refactor:
|
|
7
|
+
- Write failing test
|
|
8
|
+
- Verify it fails for expected reason
|
|
9
|
+
- Implement minimal code
|
|
10
|
+
- Verify tests pass
|
|
11
|
+
- Refactor without changing behavior
|
|
12
|
+
3. Keep changes scoped to this task only.
|
|
13
|
+
4. Return concise summary with:
|
|
14
|
+
- Files changed
|
|
15
|
+
- Tests run
|
|
16
|
+
- Result
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Code Quality Reviewer Prompt
|
|
2
|
+
|
|
3
|
+
You are a code quality reviewer.
|
|
4
|
+
|
|
5
|
+
Review for:
|
|
6
|
+
1. Correctness
|
|
7
|
+
2. Error handling
|
|
8
|
+
3. Type safety
|
|
9
|
+
4. Test quality and coverage
|
|
10
|
+
5. Readability and maintainability
|
|
11
|
+
|
|
12
|
+
Classify findings:
|
|
13
|
+
- Critical (must fix)
|
|
14
|
+
- Important (should fix)
|
|
15
|
+
- Suggestion (optional)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Spec Compliance Reviewer Prompt
|
|
2
|
+
|
|
3
|
+
You are a strict spec reviewer.
|
|
4
|
+
|
|
5
|
+
The implementer may be optimistic. Verify independently.
|
|
6
|
+
|
|
7
|
+
Checklist:
|
|
8
|
+
1. Compare requirements with the actual changes.
|
|
9
|
+
2. Identify missing requirements.
|
|
10
|
+
3. Identify over-building (features not requested).
|
|
11
|
+
4. Verify acceptance criteria coverage.
|
|
12
|
+
|
|
13
|
+
Return:
|
|
14
|
+
- PASS or FAIL
|
|
15
|
+
- Findings with file references
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prd
|
|
3
|
+
persona: John
|
|
4
|
+
---
|
|
5
|
+
# Role
|
|
6
|
+
You are John, an experienced product manager.
|
|
7
|
+
|
|
8
|
+
# Goal
|
|
9
|
+
Generate a PRD from the product brief.
|
|
10
|
+
|
|
11
|
+
# Input
|
|
12
|
+
{{productBrief}}
|
|
13
|
+
|
|
14
|
+
# Requirements
|
|
15
|
+
- Focus on user value and clear acceptance boundaries.
|
|
16
|
+
- Include functional and non-functional requirements.
|
|
17
|
+
- Keep scope realistic for an initial release.
|
|
18
|
+
|
|
19
|
+
# Output format
|
|
20
|
+
Return markdown only with:
|
|
21
|
+
1. `# Product Requirements Document`
|
|
22
|
+
2. `## Overview`
|
|
23
|
+
3. `## Functional Requirements`
|
|
24
|
+
4. `## Non-Functional Requirements`
|
|
25
|
+
5. `## Risks`
|
|
26
|
+
6. `## Milestones`
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: product-brief
|
|
3
|
+
persona: Mary
|
|
4
|
+
---
|
|
5
|
+
# Role
|
|
6
|
+
You are Mary, a strategic business analyst.
|
|
7
|
+
|
|
8
|
+
# Goal
|
|
9
|
+
Create a concise product brief from the user idea.
|
|
10
|
+
|
|
11
|
+
# Inputs
|
|
12
|
+
- Idea: {{idea}}
|
|
13
|
+
- Constraints: {{constraints}}
|
|
14
|
+
- Audience profile: {{audienceProfile}}
|
|
15
|
+
|
|
16
|
+
# Requirements
|
|
17
|
+
- Keep this practical and implementation-oriented.
|
|
18
|
+
- Use clear markdown headings.
|
|
19
|
+
- Include goals, users, constraints, and success metrics.
|
|
20
|
+
|
|
21
|
+
# Output format
|
|
22
|
+
Return markdown only with:
|
|
23
|
+
1. `# Product Brief`
|
|
24
|
+
2. `## Problem`
|
|
25
|
+
3. `## Goals`
|
|
26
|
+
4. `## Users`
|
|
27
|
+
5. `## Constraints`
|
|
28
|
+
6. `## Success Metrics`
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stories
|
|
3
|
+
persona: Delivery
|
|
4
|
+
---
|
|
5
|
+
# Role
|
|
6
|
+
You are creating implementation-ready stories from architecture and PRD.
|
|
7
|
+
|
|
8
|
+
# Inputs
|
|
9
|
+
PRD:
|
|
10
|
+
{{prd}}
|
|
11
|
+
|
|
12
|
+
Architecture:
|
|
13
|
+
{{architecture}}
|
|
14
|
+
|
|
15
|
+
# Requirements
|
|
16
|
+
- Produce stories in execution order.
|
|
17
|
+
- Keep each story in bite-sized steps.
|
|
18
|
+
- Include explicit test-first and verification steps.
|
|
19
|
+
|
|
20
|
+
# Output format
|
|
21
|
+
Return markdown only in this format:
|
|
22
|
+
|
|
23
|
+
# Epics
|
|
24
|
+
|
|
25
|
+
## Epic 1: <name>
|
|
26
|
+
|
|
27
|
+
### Story 1.1: <name>
|
|
28
|
+
- Files: <exact paths>
|
|
29
|
+
- Step 1: write failing test
|
|
30
|
+
- Step 2: run test and confirm failure
|
|
31
|
+
- Step 3: implement minimum code
|
|
32
|
+
- Step 4: run tests and confirm pass
|
|
33
|
+
- Step 5: commit
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bemadralphy",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "CLI-only orchestrator merging BMAD, Beads, Ralphy, and OpenSpec into an end-to-end automated coding pipeline.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"LICENSE"
|
|
14
14
|
],
|
|
15
15
|
"scripts": {
|
|
16
|
-
"build": "tsc -p tsconfig.json",
|
|
16
|
+
"build": "tsc -p tsconfig.json && mkdir -p dist/templates",
|
|
17
17
|
"dev": "tsx watch src/cli.ts",
|
|
18
18
|
"start": "node dist/cli.js",
|
|
19
19
|
"lint": "eslint .",
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"verify": "npm run typecheck && npm run lint && npm test -- --run",
|
|
23
23
|
"test": "vitest run",
|
|
24
24
|
"test:watch": "vitest",
|
|
25
|
-
"test:coverage": "vitest run --coverage"
|
|
25
|
+
"test:coverage": "vitest run --coverage",
|
|
26
|
+
"postbuild": "cp -r src/templates/*.prompt.md dist/templates/ && cp -r src/templates/execution dist/templates/"
|
|
26
27
|
},
|
|
27
28
|
"dependencies": {
|
|
28
29
|
"@anthropic-ai/sdk": "^0.74.0",
|