bmalph 2.7.1 → 2.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 +14 -4
- package/dist/commands/doctor-checks.js +17 -10
- package/dist/commands/doctor-checks.js.map +1 -1
- package/dist/commands/implement.js +28 -12
- package/dist/commands/implement.js.map +1 -1
- package/dist/run/ralph-process.js +101 -7
- package/dist/run/ralph-process.js.map +1 -1
- package/dist/transition/artifact-collection.js +74 -0
- package/dist/transition/artifact-collection.js.map +1 -0
- package/dist/transition/artifacts.js +12 -1
- package/dist/transition/artifacts.js.map +1 -1
- package/dist/transition/context.js +34 -28
- package/dist/transition/context.js.map +1 -1
- package/dist/transition/fix-plan.js +8 -3
- package/dist/transition/fix-plan.js.map +1 -1
- package/dist/transition/orchestration.js +177 -134
- package/dist/transition/orchestration.js.map +1 -1
- package/dist/transition/preflight.js +37 -19
- package/dist/transition/preflight.js.map +1 -1
- package/dist/transition/section-patterns.js +59 -0
- package/dist/transition/section-patterns.js.map +1 -0
- package/dist/transition/specs-index.js +5 -2
- package/dist/transition/specs-index.js.map +1 -1
- package/dist/transition/specs-sync.js +23 -0
- package/dist/transition/specs-sync.js.map +1 -0
- package/dist/transition/sprint-status.js +91 -0
- package/dist/transition/sprint-status.js.map +1 -0
- package/dist/transition/story-parsing.js +25 -12
- package/dist/transition/story-parsing.js.map +1 -1
- package/dist/transition/tech-stack.js +10 -10
- package/dist/transition/tech-stack.js.map +1 -1
- package/package.json +2 -2
- package/ralph/RALPH-REFERENCE.md +50 -46
- package/ralph/drivers/cursor-agent-wrapper.sh +13 -0
- package/ralph/drivers/cursor.sh +168 -7
- package/ralph/lib/circuit_breaker.sh +5 -5
- package/ralph/lib/enable_core.sh +10 -10
- package/ralph/ralph_import.sh +14 -10
- package/ralph/ralph_loop.sh +94 -57
- package/ralph/ralph_monitor.sh +4 -4
- package/ralph/templates/AGENT.md +7 -7
- package/ralph/templates/PROMPT.md +13 -13
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
function buildSpecPath(planningSpecsSubpath, fileName) {
|
|
2
|
+
const normalizedPath = [planningSpecsSubpath, fileName].filter(Boolean).join("/");
|
|
3
|
+
return `specs/${normalizedPath}`;
|
|
4
|
+
}
|
|
5
|
+
export function generateFixPlan(stories, storiesFileName, planningSpecsSubpath = "planning-artifacts") {
|
|
2
6
|
const lines = ["# Ralph Fix Plan", "", "## Stories to Implement", ""];
|
|
3
7
|
let currentEpic = "";
|
|
4
8
|
for (const story of stories) {
|
|
@@ -25,8 +29,9 @@ export function generateFixPlan(stories, storiesFileName) {
|
|
|
25
29
|
}
|
|
26
30
|
// Add spec-link for easy reference to full story details
|
|
27
31
|
const anchor = story.id.replace(".", "-");
|
|
28
|
-
const fileName = storiesFileName
|
|
29
|
-
|
|
32
|
+
const fileName = storiesFileName || story.sourceFile || "stories.md";
|
|
33
|
+
const specPath = buildSpecPath(planningSpecsSubpath, fileName);
|
|
34
|
+
lines.push(` > Spec: ${specPath}#story-${anchor}`);
|
|
30
35
|
}
|
|
31
36
|
lines.push("", "## Completed", "", "## Notes", "- Follow TDD methodology (red-green-refactor)", "- One story per Ralph loop iteration", "- Update this file after completing each story", "");
|
|
32
37
|
return lines.join("\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix-plan.js","sourceRoot":"","sources":["../../src/transition/fix-plan.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,
|
|
1
|
+
{"version":3,"file":"fix-plan.js","sourceRoot":"","sources":["../../src/transition/fix-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,77 +1,128 @@
|
|
|
1
|
-
import { readFile,
|
|
2
|
-
import { join } from "node:path";
|
|
1
|
+
import { readFile, rm, rename } from "node:fs/promises";
|
|
2
|
+
import { join, relative } from "node:path";
|
|
3
3
|
import { debug, info, warn } from "../utils/logger.js";
|
|
4
4
|
import { isEnoent, formatError } from "../utils/errors.js";
|
|
5
|
-
import { atomicWriteFile, exists } from "../utils/file-system.js";
|
|
5
|
+
import { atomicWriteFile, exists, getFilesRecursive } from "../utils/file-system.js";
|
|
6
6
|
import { readConfig } from "../utils/config.js";
|
|
7
7
|
import { readState, writeState } from "../utils/state.js";
|
|
8
8
|
import { parseStoriesWithWarnings } from "./story-parsing.js";
|
|
9
9
|
import { generateFixPlan, parseFixPlan, mergeFixPlanProgress, detectOrphanedCompletedStories, detectRenumberedStories, buildCompletedTitleMap, normalizeTitle, } from "./fix-plan.js";
|
|
10
10
|
import { detectTechStack, customizeAgentMd } from "./tech-stack.js";
|
|
11
|
-
import { findArtifactsDir } from "./artifacts.js";
|
|
12
|
-
import { runPreflight } from "./preflight.js";
|
|
11
|
+
import { findArtifactsDir, resolvePlanningSpecsSubpath } from "./artifacts.js";
|
|
12
|
+
import { runPreflight, PreflightValidationError } from "./preflight.js";
|
|
13
|
+
import { collectTransitionArtifacts, combineArtifactContents } from "./artifact-collection.js";
|
|
13
14
|
import { extractProjectContext, generateProjectContextMd, generatePrompt, detectTruncation, } from "./context.js";
|
|
14
15
|
import { generateSpecsChangelog, formatChangelog } from "./specs-changelog.js";
|
|
15
16
|
import { generateSpecsIndex, formatSpecsIndexMd } from "./specs-index.js";
|
|
17
|
+
import { parseSprintStatus } from "./sprint-status.js";
|
|
18
|
+
import { prepareSpecsDirectory } from "./specs-sync.js";
|
|
19
|
+
function compareStoryIds(left, right) {
|
|
20
|
+
const [leftEpic = 0, leftStory = 0] = left.split(".").map((part) => Number(part));
|
|
21
|
+
const [rightEpic = 0, rightStory = 0] = right.split(".").map((part) => Number(part));
|
|
22
|
+
if (leftEpic !== rightEpic) {
|
|
23
|
+
return leftEpic - rightEpic;
|
|
24
|
+
}
|
|
25
|
+
return leftStory - rightStory;
|
|
26
|
+
}
|
|
27
|
+
function ensureUniqueStoryIds(stories) {
|
|
28
|
+
const sourceById = new Map();
|
|
29
|
+
for (const story of stories) {
|
|
30
|
+
const existingSource = sourceById.get(story.id);
|
|
31
|
+
if (existingSource) {
|
|
32
|
+
throw new Error(`Duplicate story ID "${story.id}" found in ${existingSource} and ${story.sourceFile}`);
|
|
33
|
+
}
|
|
34
|
+
sourceById.set(story.id, story.sourceFile);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function resolveSprintStatusSource(projectDir, artifactsDir, collectedArtifacts, artifactContents) {
|
|
38
|
+
const canonicalCandidates = [
|
|
39
|
+
"_bmad-output/implementation-artifacts/sprint-status.yaml",
|
|
40
|
+
"_bmad-output/implementation_artifacts/sprint-status.yaml",
|
|
41
|
+
];
|
|
42
|
+
for (const candidate of canonicalCandidates) {
|
|
43
|
+
const candidatePath = join(projectDir, candidate);
|
|
44
|
+
if (!(await exists(candidatePath))) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
return {
|
|
49
|
+
displayPath: candidate,
|
|
50
|
+
content: await readFile(candidatePath, "utf-8"),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
return {
|
|
55
|
+
displayPath: candidate,
|
|
56
|
+
content: null,
|
|
57
|
+
readError: formatError(err),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (!collectedArtifacts.sprintStatusFile) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const artifactsRelativeDir = relative(projectDir, artifactsDir).replace(/\\/g, "/");
|
|
65
|
+
return {
|
|
66
|
+
displayPath: `${artifactsRelativeDir}/${collectedArtifacts.sprintStatusFile}`,
|
|
67
|
+
content: artifactContents.get(collectedArtifacts.sprintStatusFile) ?? null,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
16
70
|
export async function runTransition(projectDir, options) {
|
|
17
71
|
info("Locating BMAD artifacts...");
|
|
18
72
|
const artifactsDir = await findArtifactsDir(projectDir);
|
|
19
73
|
if (!artifactsDir) {
|
|
20
74
|
throw new Error("No BMAD artifacts found. Run BMAD planning phases first (at minimum: Create PRD, Create Architecture, Create Epics and Stories).");
|
|
21
75
|
}
|
|
22
|
-
|
|
23
|
-
const
|
|
76
|
+
const files = await getFilesRecursive(artifactsDir);
|
|
77
|
+
const collectedArtifacts = collectTransitionArtifacts(files);
|
|
24
78
|
// Read artifact contents early for preflight validation and later use
|
|
25
79
|
const artifactContents = new Map();
|
|
26
|
-
for (const file of files) {
|
|
27
|
-
if (
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
80
|
+
for (const file of collectedArtifacts.files) {
|
|
81
|
+
if (!/\.(?:md|ya?ml)$/i.test(file)) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const content = await readFile(join(artifactsDir, file), "utf-8");
|
|
86
|
+
artifactContents.set(file, content);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
warn(`Could not read artifact ${file}: ${formatError(err)}`);
|
|
35
90
|
}
|
|
36
91
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
debug(`Files in artifacts dir: ${files.join(", ")}`);
|
|
41
|
-
throw new Error(`No epics/stories file found in ${artifactsDir}. Available files: ${files.join(", ")}. Run 'CE' (Create Epics and Stories) first.`);
|
|
92
|
+
if (collectedArtifacts.storyFiles.length === 0) {
|
|
93
|
+
debug(`Files in artifacts dir: ${collectedArtifacts.files.join(", ")}`);
|
|
94
|
+
throw new Error(`No epics/stories file found in ${artifactsDir}. Available files: ${collectedArtifacts.files.join(", ")}. Run 'CE' (Create Epics and Stories) first.`);
|
|
42
95
|
}
|
|
43
|
-
debug(`Using stories
|
|
44
|
-
const storiesContent = await readFile(join(artifactsDir, storiesFile), "utf-8");
|
|
96
|
+
debug(`Using stories files: ${collectedArtifacts.storyFiles.join(", ")}`);
|
|
45
97
|
info("Parsing stories...");
|
|
46
|
-
const
|
|
98
|
+
const stories = [];
|
|
99
|
+
const parseWarnings = [];
|
|
100
|
+
for (const storyFile of collectedArtifacts.storyFiles) {
|
|
101
|
+
const storiesContent = artifactContents.get(storyFile);
|
|
102
|
+
if (!storiesContent) {
|
|
103
|
+
warn(`Could not read stories artifact ${storyFile}`);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const parsedStories = parseStoriesWithWarnings(storiesContent, storyFile);
|
|
107
|
+
stories.push(...parsedStories.stories);
|
|
108
|
+
parseWarnings.push(...parsedStories.warnings);
|
|
109
|
+
}
|
|
110
|
+
ensureUniqueStoryIds(stories);
|
|
111
|
+
stories.sort((left, right) => compareStoryIds(left.id, right.id) ||
|
|
112
|
+
left.sourceFile.localeCompare(right.sourceFile) ||
|
|
113
|
+
left.title.localeCompare(right.title));
|
|
47
114
|
if (stories.length === 0) {
|
|
48
|
-
throw new Error("No stories parsed from the epics
|
|
115
|
+
throw new Error("No stories parsed from the epics files. Ensure stories follow the format: ### Story N.M: Title");
|
|
49
116
|
}
|
|
50
117
|
// Pre-flight validation
|
|
51
118
|
info("Pre-flight validation...");
|
|
52
|
-
const preflightResult = runPreflight(artifactContents, files, stories, parseWarnings);
|
|
53
|
-
for (const issue of preflightResult.issues) {
|
|
54
|
-
if (issue.severity === "error") {
|
|
55
|
-
warn(` ERROR ${issue.id}: ${issue.message}`);
|
|
56
|
-
if (issue.suggestion)
|
|
57
|
-
warn(` ${issue.suggestion}`);
|
|
58
|
-
}
|
|
59
|
-
else if (issue.severity === "warning") {
|
|
60
|
-
warn(` WARN ${issue.id}: ${issue.message}`);
|
|
61
|
-
if (issue.suggestion)
|
|
62
|
-
warn(` ${issue.suggestion}`);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
info(` INFO ${issue.id}: ${issue.message}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
119
|
+
const preflightResult = runPreflight(artifactContents, collectedArtifacts.files, stories, parseWarnings);
|
|
68
120
|
if (!preflightResult.pass) {
|
|
69
121
|
if (options?.force) {
|
|
70
122
|
warn("Pre-flight validation has errors but --force was used, continuing...");
|
|
71
123
|
}
|
|
72
124
|
else {
|
|
73
|
-
|
|
74
|
-
throw new Error(`Pre-flight validation failed: ${errors.map((e) => e.message).join("; ")}. Use --force to override.`);
|
|
125
|
+
throw new PreflightValidationError(preflightResult.issues);
|
|
75
126
|
}
|
|
76
127
|
}
|
|
77
128
|
// Track generated files for summary output
|
|
@@ -79,13 +130,17 @@ export async function runTransition(projectDir, options) {
|
|
|
79
130
|
// Check existing fix_plan for completed items (smart merge)
|
|
80
131
|
let completedIds = new Set();
|
|
81
132
|
let existingItems = [];
|
|
133
|
+
let orphanWarnings = [];
|
|
134
|
+
let renumberWarnings = [];
|
|
135
|
+
const completionWarnings = [];
|
|
136
|
+
let useTitleBasedMerge = true;
|
|
137
|
+
let fixPlanPreserved = false;
|
|
82
138
|
const fixPlanPath = join(projectDir, ".ralph/@fix_plan.md");
|
|
83
139
|
const fixPlanExisted = await exists(fixPlanPath);
|
|
84
140
|
try {
|
|
85
141
|
const existingFixPlan = await readFile(fixPlanPath, "utf-8");
|
|
86
142
|
existingItems = parseFixPlan(existingFixPlan);
|
|
87
|
-
|
|
88
|
-
debug(`Found ${completedIds.size} completed stories in existing fix_plan`);
|
|
143
|
+
debug(`Found ${existingItems.filter((item) => item.completed).length} completed stories in existing fix_plan`);
|
|
89
144
|
}
|
|
90
145
|
catch (err) {
|
|
91
146
|
if (isEnoent(err)) {
|
|
@@ -95,92 +150,82 @@ export async function runTransition(projectDir, options) {
|
|
|
95
150
|
warn(`Could not read existing fix_plan: ${formatError(err)}`);
|
|
96
151
|
}
|
|
97
152
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
153
|
+
const sprintStatusSource = await resolveSprintStatusSource(projectDir, artifactsDir, collectedArtifacts, artifactContents);
|
|
154
|
+
if (sprintStatusSource) {
|
|
155
|
+
useTitleBasedMerge = false;
|
|
156
|
+
if (sprintStatusSource.readError) {
|
|
157
|
+
completionWarnings.push(`Sprint status file "${sprintStatusSource.displayPath}" could not be read: ${sprintStatusSource.readError}. All stories were left unchecked.`);
|
|
158
|
+
}
|
|
159
|
+
else if (!sprintStatusSource.content) {
|
|
160
|
+
completionWarnings.push(`Sprint status file "${sprintStatusSource.displayPath}" could not be read. All stories were left unchecked.`);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
const sprintStatus = parseSprintStatus(sprintStatusSource.content);
|
|
164
|
+
completionWarnings.push(...sprintStatus.warnings);
|
|
165
|
+
if (sprintStatus.valid) {
|
|
166
|
+
completedIds = new Set(stories
|
|
167
|
+
.filter((story) => sprintStatus.storyStatusById.get(story.id) === "done")
|
|
168
|
+
.map((story) => story.id));
|
|
169
|
+
fixPlanPreserved = completedIds.size > 0;
|
|
170
|
+
for (const story of stories) {
|
|
171
|
+
if (!sprintStatus.storyStatusById.has(story.id)) {
|
|
172
|
+
completionWarnings.push(`Sprint status is missing story ${story.id} (${story.title}); leaving it unchecked.`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
completedIds = new Set(existingItems.filter((item) => item.completed).map((item) => item.id));
|
|
180
|
+
fixPlanPreserved = completedIds.size > 0;
|
|
181
|
+
// Detect orphaned completed stories (Bug #2)
|
|
182
|
+
const newStoryIds = new Set(stories.map((story) => story.id));
|
|
183
|
+
orphanWarnings = detectOrphanedCompletedStories(existingItems, newStoryIds);
|
|
184
|
+
// Build title maps for title-based merge (Gap 3: renumbered story preservation)
|
|
185
|
+
const completedTitles = buildCompletedTitleMap(existingItems);
|
|
186
|
+
const newTitleMap = new Map(stories.map((story) => [story.id, story.title]));
|
|
187
|
+
// Detect which stories were preserved via title match (for renumber warning suppression)
|
|
188
|
+
const preservedIds = new Set();
|
|
189
|
+
for (const [id, title] of newTitleMap) {
|
|
190
|
+
if (!completedIds.has(id) && completedTitles.has(normalizeTitle(title))) {
|
|
191
|
+
preservedIds.add(id);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Detect renumbered stories (Bug #3), skipping auto-preserved ones
|
|
195
|
+
renumberWarnings = detectRenumberedStories(existingItems, stories, preservedIds);
|
|
103
196
|
}
|
|
104
|
-
// Build title maps for title-based merge (Gap 3: renumbered story preservation)
|
|
105
197
|
const completedTitles = buildCompletedTitleMap(existingItems);
|
|
106
|
-
const newTitleMap = new Map(stories.map((
|
|
198
|
+
const newTitleMap = new Map(stories.map((story) => [story.id, story.title]));
|
|
107
199
|
// Generate new fix_plan from current stories, preserving completion status
|
|
108
200
|
info(`Generating fix plan for ${stories.length} stories...`);
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
const preservedIds = new Set();
|
|
113
|
-
for (const [id, title] of newTitleMap) {
|
|
114
|
-
if (!completedIds.has(id) && completedTitles.has(normalizeTitle(title))) {
|
|
115
|
-
preservedIds.add(id);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// Detect renumbered stories (Bug #3), skipping auto-preserved ones
|
|
119
|
-
const renumberWarnings = detectRenumberedStories(existingItems, stories, preservedIds);
|
|
120
|
-
for (const w of renumberWarnings) {
|
|
121
|
-
warn(w);
|
|
122
|
-
}
|
|
201
|
+
const planningSpecsSubpath = resolvePlanningSpecsSubpath(projectDir, artifactsDir);
|
|
202
|
+
const newFixPlan = generateFixPlan(stories, undefined, planningSpecsSubpath);
|
|
203
|
+
const mergedFixPlan = mergeFixPlanProgress(newFixPlan, completedIds, useTitleBasedMerge ? newTitleMap : undefined, useTitleBasedMerge ? completedTitles : undefined);
|
|
123
204
|
await atomicWriteFile(fixPlanPath, mergedFixPlan);
|
|
124
205
|
generatedFiles.push({
|
|
125
206
|
path: ".ralph/@fix_plan.md",
|
|
126
207
|
action: fixPlanExisted ? "updated" : "created",
|
|
127
208
|
});
|
|
128
|
-
// Track whether progress was preserved for return value
|
|
129
|
-
const fixPlanPreserved = completedIds.size > 0;
|
|
130
|
-
// Generate changelog before overwriting specs/
|
|
131
209
|
const specsDir = join(projectDir, ".ralph/specs");
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
catch (err) {
|
|
145
|
-
warn(`Could not generate SPECS_CHANGELOG.md: ${formatError(err)}`);
|
|
210
|
+
const specsTmpDir = join(projectDir, ".ralph/specs.new");
|
|
211
|
+
info("Preparing specs tree...");
|
|
212
|
+
await prepareSpecsDirectory(projectDir, artifactsDir, collectedArtifacts.files, specsTmpDir);
|
|
213
|
+
try {
|
|
214
|
+
const changes = await generateSpecsChangelog(specsDir, specsTmpDir);
|
|
215
|
+
if (changes.length > 0) {
|
|
216
|
+
const changelog = formatChangelog(changes, new Date().toISOString());
|
|
217
|
+
await atomicWriteFile(join(projectDir, ".ralph/SPECS_CHANGELOG.md"), changelog);
|
|
218
|
+
generatedFiles.push({ path: ".ralph/SPECS_CHANGELOG.md", action: "updated" });
|
|
219
|
+
debug(`Generated SPECS_CHANGELOG.md with ${changes.length} changes`);
|
|
146
220
|
}
|
|
147
221
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
// Copy entire _bmad-output/ tree to .ralph/specs/ (preserving structure)
|
|
152
|
-
if (!bmadOutputExists) {
|
|
153
|
-
debug("_bmad-output not found, falling back to artifacts directory");
|
|
222
|
+
catch (err) {
|
|
223
|
+
warn(`Could not generate SPECS_CHANGELOG.md: ${formatError(err)}`);
|
|
154
224
|
}
|
|
155
225
|
info("Copying specs to .ralph/specs/...");
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
await rm(specsTmpDir, { recursive: true, force: true });
|
|
160
|
-
await mkdir(specsTmpDir, { recursive: true });
|
|
161
|
-
await cp(bmadOutputDir, specsTmpDir, { recursive: true, dereference: false });
|
|
162
|
-
// Verify the copy succeeded before swapping
|
|
163
|
-
await access(specsTmpDir);
|
|
164
|
-
await rm(specsDir, { recursive: true, force: true });
|
|
165
|
-
await rename(specsTmpDir, specsDir);
|
|
166
|
-
generatedFiles.push({ path: ".ralph/specs/", action: "updated" });
|
|
167
|
-
debug("Copied _bmad-output/ to .ralph/specs/ (atomic)");
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
// Fall back to just artifactsDir if _bmad-output root doesn't exist
|
|
171
|
-
await rm(specsTmpDir, { recursive: true, force: true });
|
|
172
|
-
await mkdir(specsTmpDir, { recursive: true });
|
|
173
|
-
for (const file of files) {
|
|
174
|
-
await cp(join(artifactsDir, file), join(specsTmpDir, file), {
|
|
175
|
-
recursive: true,
|
|
176
|
-
dereference: false,
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
await access(specsTmpDir);
|
|
180
|
-
await rm(specsDir, { recursive: true, force: true });
|
|
181
|
-
await rename(specsTmpDir, specsDir);
|
|
182
|
-
generatedFiles.push({ path: ".ralph/specs/", action: "updated" });
|
|
183
|
-
}
|
|
226
|
+
await rm(specsDir, { recursive: true, force: true });
|
|
227
|
+
await rename(specsTmpDir, specsDir);
|
|
228
|
+
generatedFiles.push({ path: ".ralph/specs/", action: "updated" });
|
|
184
229
|
// Generate SPECS_INDEX.md for intelligent spec reading
|
|
185
230
|
info("Generating SPECS_INDEX.md...");
|
|
186
231
|
const specsIndexPath = join(projectDir, ".ralph/SPECS_INDEX.md");
|
|
@@ -256,25 +301,22 @@ export async function runTransition(projectDir, options) {
|
|
|
256
301
|
await atomicWriteFile(join(projectDir, ".ralph/PROMPT.md"), prompt);
|
|
257
302
|
generatedFiles.push({ path: ".ralph/PROMPT.md", action: promptExisted ? "updated" : "created" });
|
|
258
303
|
// Customize @AGENT.md based on detected tech stack from architecture
|
|
259
|
-
const
|
|
260
|
-
if (
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
const
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
generatedFiles.push({ path: ".ralph/@AGENT.md", action: "updated" });
|
|
271
|
-
debug("Customized @AGENT.md with detected tech stack");
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
catch (err) {
|
|
275
|
-
warn(`Could not customize @AGENT.md: ${formatError(err)}`);
|
|
304
|
+
const combinedArchitectureContent = combineArtifactContents(collectedArtifacts.architectureFiles, artifactContents);
|
|
305
|
+
if (combinedArchitectureContent) {
|
|
306
|
+
try {
|
|
307
|
+
const stack = detectTechStack(combinedArchitectureContent);
|
|
308
|
+
if (stack) {
|
|
309
|
+
const agentPath = join(projectDir, ".ralph/@AGENT.md");
|
|
310
|
+
const agentTemplate = await readFile(agentPath, "utf-8");
|
|
311
|
+
const customized = customizeAgentMd(agentTemplate, stack);
|
|
312
|
+
await atomicWriteFile(agentPath, customized);
|
|
313
|
+
generatedFiles.push({ path: ".ralph/@AGENT.md", action: "updated" });
|
|
314
|
+
debug("Customized @AGENT.md with detected tech stack");
|
|
276
315
|
}
|
|
277
316
|
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
warn(`Could not customize @AGENT.md: ${formatError(err)}`);
|
|
319
|
+
}
|
|
278
320
|
}
|
|
279
321
|
// Collect warnings from all sources
|
|
280
322
|
const preflightWarnings = preflightResult.issues
|
|
@@ -287,6 +329,7 @@ export async function runTransition(projectDir, options) {
|
|
|
287
329
|
const warnings = [
|
|
288
330
|
...preflightWarnings,
|
|
289
331
|
...nonPreflightParseWarnings,
|
|
332
|
+
...completionWarnings,
|
|
290
333
|
...orphanWarnings,
|
|
291
334
|
...renumberWarnings,
|
|
292
335
|
...truncationWarnings,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestration.js","sourceRoot":"","sources":["../../src/transition/orchestration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"orchestration.js","sourceRoot":"","sources":["../../src/transition/orchestration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { extractFirstMatchingSection } from "./context.js";
|
|
2
|
+
import { FUNCTIONAL_REQUIREMENTS_SECTION_PATTERNS, NON_FUNCTIONAL_REQUIREMENTS_SECTION_PATTERNS, PRD_SCOPE_SECTION_PATTERNS, PROJECT_GOALS_SECTION_PATTERNS, } from "./section-patterns.js";
|
|
3
|
+
import { extractTechStackSource } from "./tech-stack.js";
|
|
4
|
+
import { collectTransitionArtifacts, combineArtifactContents } from "./artifact-collection.js";
|
|
2
5
|
function hasSection(content, patterns) {
|
|
3
|
-
return
|
|
6
|
+
return extractFirstMatchingSection(content, patterns) !== "";
|
|
7
|
+
}
|
|
8
|
+
export class PreflightValidationError extends Error {
|
|
9
|
+
issues;
|
|
10
|
+
constructor(issues) {
|
|
11
|
+
super(`Pre-flight validation failed: ${issues
|
|
12
|
+
.filter((issue) => issue.severity === "error")
|
|
13
|
+
.map((issue) => issue.message)
|
|
14
|
+
.join("; ")}. Use --force to override.`);
|
|
15
|
+
this.name = "PreflightValidationError";
|
|
16
|
+
this.issues = issues;
|
|
17
|
+
}
|
|
4
18
|
}
|
|
5
19
|
export function validatePrd(content) {
|
|
6
20
|
if (content === null) {
|
|
@@ -14,12 +28,7 @@ export function validatePrd(content) {
|
|
|
14
28
|
];
|
|
15
29
|
}
|
|
16
30
|
const issues = [];
|
|
17
|
-
if (!hasSection(content,
|
|
18
|
-
/^##\s+Executive Summary/m,
|
|
19
|
-
/^##\s+Vision/m,
|
|
20
|
-
/^##\s+Goals/m,
|
|
21
|
-
/^##\s+Project Goals/m,
|
|
22
|
-
])) {
|
|
31
|
+
if (!hasSection(content, PROJECT_GOALS_SECTION_PATTERNS)) {
|
|
23
32
|
issues.push({
|
|
24
33
|
id: "W3",
|
|
25
34
|
severity: "warning",
|
|
@@ -27,7 +36,7 @@ export function validatePrd(content) {
|
|
|
27
36
|
suggestion: "Ralph will lack project context — PROJECT_CONTEXT.md will have empty goals.",
|
|
28
37
|
});
|
|
29
38
|
}
|
|
30
|
-
if (!hasSection(content,
|
|
39
|
+
if (!hasSection(content, FUNCTIONAL_REQUIREMENTS_SECTION_PATTERNS)) {
|
|
31
40
|
issues.push({
|
|
32
41
|
id: "W4",
|
|
33
42
|
severity: "warning",
|
|
@@ -35,7 +44,7 @@ export function validatePrd(content) {
|
|
|
35
44
|
suggestion: "Ralph may miss key requirements during implementation.",
|
|
36
45
|
});
|
|
37
46
|
}
|
|
38
|
-
if (!hasSection(content,
|
|
47
|
+
if (!hasSection(content, NON_FUNCTIONAL_REQUIREMENTS_SECTION_PATTERNS)) {
|
|
39
48
|
issues.push({
|
|
40
49
|
id: "W5",
|
|
41
50
|
severity: "warning",
|
|
@@ -43,7 +52,7 @@ export function validatePrd(content) {
|
|
|
43
52
|
suggestion: "Ralph will not enforce performance, security, or quality constraints.",
|
|
44
53
|
});
|
|
45
54
|
}
|
|
46
|
-
if (!hasSection(content,
|
|
55
|
+
if (!hasSection(content, PRD_SCOPE_SECTION_PATTERNS)) {
|
|
47
56
|
issues.push({
|
|
48
57
|
id: "W6",
|
|
49
58
|
severity: "warning",
|
|
@@ -65,7 +74,7 @@ export function validateArchitecture(content) {
|
|
|
65
74
|
];
|
|
66
75
|
}
|
|
67
76
|
const issues = [];
|
|
68
|
-
if (
|
|
77
|
+
if (extractTechStackSource(content) === "") {
|
|
69
78
|
issues.push({
|
|
70
79
|
id: "W7",
|
|
71
80
|
severity: "warning",
|
|
@@ -135,14 +144,23 @@ export function validateReadiness(content) {
|
|
|
135
144
|
return [];
|
|
136
145
|
}
|
|
137
146
|
export function runPreflight(artifactContents, files, stories, parseWarnings) {
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
147
|
+
const collectedArtifacts = collectTransitionArtifacts(files);
|
|
148
|
+
const prdIssues = collectedArtifacts.prdDocuments.length === 0
|
|
149
|
+
? validatePrd(null)
|
|
150
|
+
: collectedArtifacts.prdDocuments.flatMap((prdDocument) => validatePrd(combineArtifactContents(prdDocument.files, artifactContents) || null).map((issue) => collectedArtifacts.prdDocuments.length > 1
|
|
151
|
+
? {
|
|
152
|
+
...issue,
|
|
153
|
+
message: `${issue.message} (${prdDocument.label})`,
|
|
154
|
+
}
|
|
155
|
+
: issue));
|
|
156
|
+
const archContent = collectedArtifacts.architectureFiles.length > 0
|
|
157
|
+
? combineArtifactContents(collectedArtifacts.architectureFiles, artifactContents)
|
|
158
|
+
: null;
|
|
159
|
+
const readinessContent = collectedArtifacts.readinessFiles.length > 0
|
|
160
|
+
? combineArtifactContents(collectedArtifacts.readinessFiles, artifactContents)
|
|
161
|
+
: null;
|
|
144
162
|
const issues = [
|
|
145
|
-
...
|
|
163
|
+
...prdIssues,
|
|
146
164
|
...validateArchitecture(archContent),
|
|
147
165
|
...validateStories(stories, parseWarnings),
|
|
148
166
|
...validateReadiness(readinessContent),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/transition/preflight.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/transition/preflight.ts"],"names":[],"mappings":"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"}
|