sdd-mcp-server 3.2.0 → 3.4.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.
Files changed (64) hide show
  1. package/README.md +63 -27
  2. package/dist/adapters/cli/SDDToolAdapter.d.ts +5 -1
  3. package/dist/adapters/cli/SDDToolAdapter.js +108 -15
  4. package/dist/adapters/cli/SDDToolAdapter.js.map +1 -1
  5. package/dist/application/services/ContextCompactionService.d.ts +39 -0
  6. package/dist/application/services/ContextCompactionService.js +253 -0
  7. package/dist/application/services/ContextCompactionService.js.map +1 -0
  8. package/dist/application/services/ProjectService.d.ts +7 -1
  9. package/dist/application/services/ProjectService.js +56 -1
  10. package/dist/application/services/ProjectService.js.map +1 -1
  11. package/dist/application/services/TemplateService.js +27 -5
  12. package/dist/application/services/TemplateService.js.map +1 -1
  13. package/dist/application/services/WorkflowEngineService.d.ts +3 -1
  14. package/dist/application/services/WorkflowEngineService.js +20 -5
  15. package/dist/application/services/WorkflowEngineService.js.map +1 -1
  16. package/dist/application/services/WorkflowService.js +8 -0
  17. package/dist/application/services/WorkflowService.js.map +1 -1
  18. package/dist/application/services/staticSteering.js +10 -9
  19. package/dist/application/services/staticSteering.js.map +1 -1
  20. package/dist/cli/install-skills.d.ts +10 -0
  21. package/dist/cli/install-skills.js +79 -64
  22. package/dist/cli/install-skills.js.map +1 -1
  23. package/dist/cli/sdd-mcp-cli.js +7 -0
  24. package/dist/cli/sdd-mcp-cli.js.map +1 -1
  25. package/dist/cli/tool-support/antigravity.d.ts +18 -0
  26. package/dist/cli/tool-support/antigravity.js +79 -0
  27. package/dist/cli/tool-support/antigravity.js.map +1 -0
  28. package/dist/cli/tool-support/codex.d.ts +43 -0
  29. package/dist/cli/tool-support/codex.js +91 -0
  30. package/dist/cli/tool-support/codex.js.map +1 -0
  31. package/dist/cli/tool-support/index.d.ts +4 -0
  32. package/dist/cli/tool-support/index.js +3 -0
  33. package/dist/cli/tool-support/index.js.map +1 -0
  34. package/dist/cli/utils/find-package-root.d.ts +23 -0
  35. package/dist/cli/utils/find-package-root.js +87 -0
  36. package/dist/cli/utils/find-package-root.js.map +1 -0
  37. package/dist/domain/services/DomainService.d.ts +1 -0
  38. package/dist/domain/services/DomainService.js +12 -2
  39. package/dist/domain/services/DomainService.js.map +1 -1
  40. package/dist/domain/types.d.ts +13 -0
  41. package/dist/domain/types.js.map +1 -1
  42. package/dist/domain/workflow/WorkflowStateMachine.js +7 -2
  43. package/dist/domain/workflow/WorkflowStateMachine.js.map +1 -1
  44. package/dist/index.js +341 -20
  45. package/dist/index.js.map +1 -1
  46. package/dist/infrastructure/di/container.js +4 -0
  47. package/dist/infrastructure/di/container.js.map +1 -1
  48. package/dist/infrastructure/di/types.d.ts +1 -0
  49. package/dist/infrastructure/di/types.js +1 -0
  50. package/dist/infrastructure/di/types.js.map +1 -1
  51. package/dist/infrastructure/mcp/ResourceManager.js +21 -1
  52. package/dist/infrastructure/mcp/ResourceManager.js.map +1 -1
  53. package/dist/infrastructure/mcp/ToolRegistry.js +34 -2
  54. package/dist/infrastructure/mcp/ToolRegistry.js.map +1 -1
  55. package/dist/infrastructure/schemas/project.schema.d.ts +47 -4
  56. package/dist/infrastructure/schemas/project.schema.js +39 -2
  57. package/dist/infrastructure/schemas/project.schema.js.map +1 -1
  58. package/dist/utils/sddPaths.d.ts +69 -0
  59. package/dist/utils/sddPaths.js +138 -0
  60. package/dist/utils/sddPaths.js.map +1 -0
  61. package/package.json +2 -2
  62. package/skills/sdd-implement/SKILL.md +6 -4
  63. package/skills/sdd-tasks/SKILL.md +20 -7
  64. package/templates/codex-AGENTS.md +22 -0
@@ -0,0 +1,79 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ /**
4
+ * Antigravity link name → install paths key mapping.
5
+ * Each entry maps an Antigravity directory name to the corresponding
6
+ * effective install path field.
7
+ */
8
+ const LINK_DEFS = [
9
+ { link: 'workflows', pathKey: 'skillsPath' },
10
+ { link: 'rules', pathKey: 'rulesPath' },
11
+ ];
12
+ /**
13
+ * Create `.agent/` symlinks pointing to component directories
14
+ * for Google Antigravity compatibility.
15
+ *
16
+ * Uses relative symlinks for portability — the project can be
17
+ * moved or cloned without breaking links.
18
+ *
19
+ * Symlink targets are derived from effective install paths,
20
+ * so custom `--path` / `--rules-path` flags are respected.
21
+ */
22
+ export async function createAntigravitySymlinks(projectRoot, paths = { skillsPath: '.claude/skills', rulesPath: '.claude/rules' }) {
23
+ const agentDir = path.join(projectRoot, '.agent');
24
+ // Warn on Windows where symlinks may require elevated privileges
25
+ if (process.platform === 'win32') {
26
+ console.log(' ⚠️ Symlinks on Windows may require administrator privileges');
27
+ }
28
+ // Create .agent/ directory if needed
29
+ if (!fs.existsSync(agentDir)) {
30
+ fs.mkdirSync(agentDir, { recursive: true });
31
+ }
32
+ for (const { link, pathKey } of LINK_DEFS) {
33
+ // Compute relative symlink target: from .agent/ back to project root, then to effective path
34
+ const target = path.join('..', paths[pathKey]);
35
+ const linkPath = path.join(agentDir, link);
36
+ // Check if something already exists at the link path
37
+ if (fs.existsSync(linkPath) || isSymlink(linkPath)) {
38
+ if (isSymlink(linkPath)) {
39
+ const existingTarget = fs.readlinkSync(linkPath);
40
+ if (existingTarget === target) {
41
+ console.log(` ⏭️ .agent/${link} symlink already exists, skipping`);
42
+ continue;
43
+ }
44
+ // Symlink points somewhere else — warn, remove, and recreate
45
+ console.log(` ⚠️ .agent/${link} symlink points to ${existingTarget}, replacing with ${target}`);
46
+ fs.unlinkSync(linkPath);
47
+ }
48
+ else {
49
+ console.log(` ⚠️ .agent/${link} exists as a regular directory, skipping`);
50
+ continue;
51
+ }
52
+ }
53
+ // Verify the target directory exists before creating the symlink
54
+ const resolvedTarget = path.resolve(agentDir, target);
55
+ if (!fs.existsSync(resolvedTarget)) {
56
+ console.log(` ⚠️ Target ${target} does not exist yet, creating symlink anyway`);
57
+ }
58
+ try {
59
+ fs.symlinkSync(target, linkPath, 'dir');
60
+ console.log(` ✅ Created .agent/${link} → ${target}`);
61
+ }
62
+ catch (error) {
63
+ console.error(` ❌ Failed to create .agent/${link} symlink:`, error.message);
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * Check if a path is a symlink (even if the target doesn't exist)
69
+ */
70
+ function isSymlink(filePath) {
71
+ try {
72
+ const stats = fs.lstatSync(filePath);
73
+ return stats.isSymbolicLink();
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ //# sourceMappingURL=antigravity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../src/cli/tool-support/antigravity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { SkillManager } from '../../skills/SkillManager.js';
2
+ import { RulesManager } from '../../rules/RulesManager.js';
3
+ import { AgentManager } from '../../agents/AgentManager.js';
4
+ /**
5
+ * References to manager instances needed for generating AGENTS.md
6
+ */
7
+ export interface ManagerRefs {
8
+ skillManager: SkillManager;
9
+ rulesManager: RulesManager;
10
+ agentManager: AgentManager;
11
+ listSteering: () => Promise<string[]>;
12
+ }
13
+ /**
14
+ * Effective install paths used by the installer.
15
+ * These may differ from defaults when the user passes --path, --rules-path, etc.
16
+ */
17
+ export interface InstallPaths {
18
+ skillsPath: string;
19
+ rulesPath: string;
20
+ agentsPath: string;
21
+ steeringPath: string;
22
+ }
23
+ /**
24
+ * Which component types were actually installed in this run.
25
+ * Only installed components are rendered in AGENTS.md.
26
+ */
27
+ export interface InstalledComponents {
28
+ skills: boolean;
29
+ rules: boolean;
30
+ agents: boolean;
31
+ steering: boolean;
32
+ }
33
+ /**
34
+ * Generate AGENTS.md in the project root for OpenAI Codex CLI.
35
+ *
36
+ * Produces a lightweight summary file containing component names,
37
+ * descriptions, and file path references. Codex CLI reads referenced
38
+ * files on demand — no content duplication needed.
39
+ *
40
+ * Only sections for actually-installed component types are included,
41
+ * and paths reflect the effective install targets (not hardcoded defaults).
42
+ */
43
+ export declare function generateCodexAgentsMd(projectRoot: string, managers: ManagerRefs, paths: InstallPaths, installed: InstalledComponents): Promise<void>;
@@ -0,0 +1,91 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { findTemplate } from '../utils/find-package-root.js';
4
+ /**
5
+ * Build a markdown table section for a component type.
6
+ * Returns the section string, or empty string if items is empty.
7
+ */
8
+ function buildTableSection(title, subtitle, basePath, items, pathFormatter) {
9
+ if (items.length === 0)
10
+ return '';
11
+ let section = `### ${title} (\`${basePath}/\`)\n\n`;
12
+ section += `${subtitle}\n\n`;
13
+ section += `| ${title.slice(0, -1)} | Description | Path |\n`;
14
+ section += '|-------|-------------|------|\n';
15
+ for (const item of items) {
16
+ section += `| ${item.name} | ${item.description || '—'} | \`${pathFormatter(item)}\` |\n`;
17
+ }
18
+ section += '\n';
19
+ return section;
20
+ }
21
+ /**
22
+ * Build a markdown bullet list section for steering docs.
23
+ */
24
+ function buildSteeringSection(basePath, docs) {
25
+ if (docs.length === 0)
26
+ return '';
27
+ let section = `### Steering (\`${basePath}/\`)\n\n`;
28
+ section += 'Project-specific context documents:\n\n';
29
+ for (const doc of docs) {
30
+ section += `- \`${basePath}/${doc}\`\n`;
31
+ }
32
+ section += '\n';
33
+ return section;
34
+ }
35
+ /**
36
+ * Load the template preamble for AGENTS.md
37
+ */
38
+ function loadPreamble() {
39
+ try {
40
+ const templatePath = findTemplate('codex-AGENTS.md');
41
+ if (templatePath) {
42
+ return fs.readFileSync(templatePath, 'utf-8');
43
+ }
44
+ console.log(' ⚠️ AGENTS.md template not found, using minimal header');
45
+ }
46
+ catch (error) {
47
+ console.error(' ⚠️ Failed to read AGENTS.md template:', error.message);
48
+ }
49
+ return '# AGENTS.md — Spec-Driven Development (SDD)\n\n';
50
+ }
51
+ /**
52
+ * Generate AGENTS.md in the project root for OpenAI Codex CLI.
53
+ *
54
+ * Produces a lightweight summary file containing component names,
55
+ * descriptions, and file path references. Codex CLI reads referenced
56
+ * files on demand — no content duplication needed.
57
+ *
58
+ * Only sections for actually-installed component types are included,
59
+ * and paths reflect the effective install targets (not hardcoded defaults).
60
+ */
61
+ export async function generateCodexAgentsMd(projectRoot, managers, paths, installed) {
62
+ const targetPath = path.join(projectRoot, 'AGENTS.md');
63
+ if (fs.existsSync(targetPath)) {
64
+ console.log(' ⏭️ AGENTS.md already exists, skipping');
65
+ return;
66
+ }
67
+ let content = loadPreamble();
68
+ try {
69
+ const [skills, rules, agents, steeringDocs] = await Promise.all([
70
+ installed.skills ? managers.skillManager.listSkills() : Promise.resolve([]),
71
+ installed.rules ? managers.rulesManager.listComponents() : Promise.resolve([]),
72
+ installed.agents ? managers.agentManager.listComponents() : Promise.resolve([]),
73
+ installed.steering ? managers.listSteering() : Promise.resolve([]),
74
+ ]);
75
+ content += buildTableSection('Skills', 'Workflow guidance invoked via slash commands:', paths.skillsPath, skills, (s) => `${paths.skillsPath}/${s.name}/`);
76
+ content += buildTableSection('Rules', 'Always-active coding standards:', paths.rulesPath, rules, (r) => `${paths.rulesPath}/${path.basename(r.path)}`);
77
+ content += buildTableSection('Agents', 'Specialized AI personas:', paths.agentsPath, agents, (a) => `${paths.agentsPath}/${path.basename(a.path)}`);
78
+ content += buildSteeringSection(paths.steeringPath, steeringDocs);
79
+ }
80
+ catch (error) {
81
+ console.error(' ⚠️ Failed to gather component metadata:', error.message);
82
+ }
83
+ try {
84
+ fs.writeFileSync(targetPath, content, 'utf-8');
85
+ console.log(' ✅ Created AGENTS.md for Codex CLI');
86
+ }
87
+ catch (error) {
88
+ console.error(' ❌ Failed to create AGENTS.md:', error.message);
89
+ }
90
+ }
91
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/cli/tool-support/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { generateCodexAgentsMd } from './codex.js';
2
+ export type { ManagerRefs, InstallPaths, InstalledComponents } from './codex.js';
3
+ export { createAntigravitySymlinks } from './antigravity.js';
4
+ export type { AntigravityPaths } from './antigravity.js';
@@ -0,0 +1,3 @@
1
+ export { generateCodexAgentsMd } from './codex.js';
2
+ export { createAntigravitySymlinks } from './antigravity.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/tool-support/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Walk up the directory tree from `startDir` looking for the
3
+ * sdd-mcp-server package root (a directory containing package.json
4
+ * with `name === 'sdd-mcp-server'`).
5
+ *
6
+ * @returns The package root directory, or null if not found.
7
+ */
8
+ export declare function findPackageRoot(startDir: string): string | null;
9
+ /**
10
+ * Resolve `dist/cli` within the sdd-mcp-server package.
11
+ *
12
+ * Tries multiple strategies to locate the package:
13
+ * 1. From the running script's real location (works with npx symlinks)
14
+ * 2. From process.cwd() (works in local dev)
15
+ * 3. Fallback to cwd-based path
16
+ */
17
+ export declare function getDistCliDir(): string;
18
+ /**
19
+ * Find a template file by name within the sdd-mcp-server package.
20
+ *
21
+ * @returns Absolute path to the template, or null if not found.
22
+ */
23
+ export declare function findTemplate(templateName: string): string | null;
@@ -0,0 +1,87 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ /**
4
+ * Walk up the directory tree from `startDir` looking for the
5
+ * sdd-mcp-server package root (a directory containing package.json
6
+ * with `name === 'sdd-mcp-server'`).
7
+ *
8
+ * @returns The package root directory, or null if not found.
9
+ */
10
+ export function findPackageRoot(startDir) {
11
+ let dir = startDir;
12
+ while (dir !== path.dirname(dir)) {
13
+ const pkgPath = path.join(dir, 'package.json');
14
+ if (fs.existsSync(pkgPath)) {
15
+ try {
16
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
17
+ if (pkg.name === 'sdd-mcp-server') {
18
+ return dir;
19
+ }
20
+ }
21
+ catch {
22
+ // Continue searching — invalid JSON, read error, etc.
23
+ }
24
+ }
25
+ dir = path.dirname(dir);
26
+ }
27
+ return null;
28
+ }
29
+ /**
30
+ * Resolve `dist/cli` within the sdd-mcp-server package.
31
+ *
32
+ * Tries multiple strategies to locate the package:
33
+ * 1. From the running script's real location (works with npx symlinks)
34
+ * 2. From process.cwd() (works in local dev)
35
+ * 3. Fallback to cwd-based path
36
+ */
37
+ export function getDistCliDir() {
38
+ // Strategy 1: From the running script's real location (works with npx)
39
+ if (process.argv[1]) {
40
+ try {
41
+ const realPath = fs.realpathSync(process.argv[1]);
42
+ const scriptDir = path.dirname(realPath);
43
+ const root = findPackageRoot(scriptDir);
44
+ if (root)
45
+ return path.join(root, 'dist', 'cli');
46
+ }
47
+ catch {
48
+ // If realpathSync fails, fall through to other strategies
49
+ }
50
+ }
51
+ // Strategy 2: From process.cwd() (works in local dev)
52
+ const root = findPackageRoot(process.cwd());
53
+ if (root)
54
+ return path.join(root, 'dist', 'cli');
55
+ // Strategy 3: Fallback to process.cwd() based path
56
+ return path.join(process.cwd(), 'dist', 'cli');
57
+ }
58
+ /**
59
+ * Find a template file by name within the sdd-mcp-server package.
60
+ *
61
+ * @returns Absolute path to the template, or null if not found.
62
+ */
63
+ export function findTemplate(templateName) {
64
+ const searchRoots = [];
65
+ // Strategy 1: From the running script's real location
66
+ if (process.argv[1]) {
67
+ try {
68
+ searchRoots.push(path.dirname(fs.realpathSync(process.argv[1])));
69
+ }
70
+ catch {
71
+ // Fall through
72
+ }
73
+ }
74
+ // Strategy 2: From cwd
75
+ searchRoots.push(process.cwd());
76
+ for (const startDir of searchRoots) {
77
+ const pkgRoot = findPackageRoot(startDir);
78
+ if (pkgRoot) {
79
+ const templatePath = path.join(pkgRoot, 'templates', templateName);
80
+ if (fs.existsSync(templatePath)) {
81
+ return templatePath;
82
+ }
83
+ }
84
+ }
85
+ return null;
86
+ }
87
+ //# sourceMappingURL=find-package-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-package-root.js","sourceRoot":"","sources":["../../../src/cli/utils/find-package-root.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { Project, WorkflowPhase, Task } from '../types.js';
2
2
  export declare class WorkflowDomainService {
3
+ static isTestCaseReviewSatisfied(project: Project): boolean;
3
4
  static canTransitionToPhase(project: Project, targetPhase: WorkflowPhase): boolean;
4
5
  static isReadyForImplementation(project: Project): boolean;
5
6
  static getRequiredApprovals(project: Project, targetPhase: WorkflowPhase): string[];
@@ -1,6 +1,10 @@
1
1
  // Domain services contain business logic that doesn't naturally fit within entities
2
2
  import { WorkflowPhase } from '../types.js';
3
3
  export class WorkflowDomainService {
4
+ static isTestCaseReviewSatisfied(project) {
5
+ const testCaseCheckpoint = project.metadata.checkpoints?.testCases;
6
+ return !testCaseCheckpoint?.required || testCaseCheckpoint.reviewed;
7
+ }
4
8
  static canTransitionToPhase(project, targetPhase) {
5
9
  const { phase, metadata } = project;
6
10
  const { approvals } = metadata;
@@ -14,7 +18,9 @@ export class WorkflowDomainService {
14
18
  case WorkflowPhase.TASKS:
15
19
  return approvals.design.generated && approvals.design.approved;
16
20
  case WorkflowPhase.IMPLEMENTATION:
17
- return approvals.tasks.generated && approvals.tasks.approved;
21
+ return approvals.tasks.generated &&
22
+ approvals.tasks.approved &&
23
+ this.isTestCaseReviewSatisfied(project);
18
24
  default:
19
25
  return false;
20
26
  }
@@ -23,7 +29,8 @@ export class WorkflowDomainService {
23
29
  const { approvals } = project.metadata;
24
30
  return approvals.requirements.approved &&
25
31
  approvals.design.approved &&
26
- approvals.tasks.approved;
32
+ approvals.tasks.approved &&
33
+ this.isTestCaseReviewSatisfied(project);
27
34
  }
28
35
  static getRequiredApprovals(project, targetPhase) {
29
36
  const missing = [];
@@ -41,6 +48,9 @@ export class WorkflowDomainService {
41
48
  if (!project.metadata.approvals.tasks.approved) {
42
49
  missing.push('tasks');
43
50
  }
51
+ if (!this.isTestCaseReviewSatisfied(project)) {
52
+ missing.push('test-cases');
53
+ }
44
54
  }
45
55
  return missing;
46
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DomainService.js","sourceRoot":"","sources":["../../../src/domain/services/DomainService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DomainService.js","sourceRoot":"","sources":["../../../src/domain/services/DomainService.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,8 @@ export interface ProjectMetadata {
10
10
  readonly updatedAt: Date;
11
11
  readonly language: string;
12
12
  readonly approvals: PhaseApprovals;
13
+ readonly workflowOptions?: WorkflowOptions;
14
+ readonly checkpoints?: WorkflowCheckpoints;
13
15
  }
14
16
  export interface PhaseApprovals {
15
17
  readonly requirements: ApprovalStatus;
@@ -20,6 +22,17 @@ export interface ApprovalStatus {
20
22
  readonly generated: boolean;
21
23
  readonly approved: boolean;
22
24
  }
25
+ export interface WorkflowOptions {
26
+ readonly reviewTestCases: boolean;
27
+ }
28
+ export interface WorkflowCheckpoints {
29
+ readonly testCases: ReviewCheckpoint;
30
+ }
31
+ export interface ReviewCheckpoint {
32
+ readonly required: boolean;
33
+ readonly reviewed: boolean;
34
+ readonly reviewedAt?: Date;
35
+ }
23
36
  export declare enum WorkflowPhase {
24
37
  INIT = "init",
25
38
  REQUIREMENTS = "requirements-generated",
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/domain/types.ts"],"names":[],"mappings":"AAAA,qCAAqC;AA4BrC,MAAM,CAAN,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,wDAAuC,CAAA;IACvC,4CAA2B,CAAA;IAC3B,0CAAyB,CAAA;IACzB,wDAAuC,CAAA;AACzC,CAAC,EANW,aAAa,KAAb,aAAa,QAMxB;AAED,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,4CAA2B,CAAA;IAC3B,wCAAuB,CAAA;IACvB,gCAAe,CAAA;AACjB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAgED,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,mCAAqB,CAAA;IACrB,iCAAmB,CAAA;AACrB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AASD,MAAM,CAAN,IAAY,SAMX;AAND,WAAY,SAAS;IACnB,sCAAyB,CAAA;IACzB,0CAA6B,CAAA;IAC7B,8CAAiC,CAAA;IACjC,gDAAmC,CAAA;IACnC,0CAA6B,CAAA;AAC/B,CAAC,EANW,SAAS,KAAT,SAAS,QAMpB;AAED,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,gCAAe,CAAA;IACf,oCAAmB,CAAA;IACnB,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAmBD,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,+BAAW,CAAA;IACX,iCAAa,CAAA;IACb,+BAAW,CAAA;IACX,uCAAmB,CAAA;AACrB,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/domain/types.ts"],"names":[],"mappings":"AAAA,qCAAqC;AA4CrC,MAAM,CAAN,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,wDAAuC,CAAA;IACvC,4CAA2B,CAAA;IAC3B,0CAAyB,CAAA;IACzB,wDAAuC,CAAA;AACzC,CAAC,EANW,aAAa,KAAb,aAAa,QAMxB;AAED,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,4CAA2B,CAAA;IAC3B,wCAAuB,CAAA;IACvB,gCAAe,CAAA;AACjB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAgED,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,mCAAqB,CAAA;IACrB,iCAAmB,CAAA;AACrB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AASD,MAAM,CAAN,IAAY,SAMX;AAND,WAAY,SAAS;IACnB,sCAAyB,CAAA;IACzB,0CAA6B,CAAA;IAC7B,8CAAiC,CAAA;IACjC,gDAAmC,CAAA;IACnC,0CAA6B,CAAA;AAC/B,CAAC,EANW,SAAS,KAAT,SAAS,QAMpB;AAED,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,gCAAe,CAAA;IACf,oCAAmB,CAAA;IACnB,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAmBD,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,+BAAW,CAAA;IACX,iCAAa,CAAA;IACb,+BAAW,CAAA;IACX,uCAAmB,CAAA;AACrB,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B"}
@@ -1,5 +1,6 @@
1
1
  // Domain model for SDD workflow state transitions
2
2
  import { WorkflowPhase } from '../types.js';
3
+ import { WorkflowDomainService } from '../services/DomainService.js';
3
4
  export class WorkflowStateMachine {
4
5
  transitions;
5
6
  auditLog = [];
@@ -46,8 +47,9 @@ export class WorkflowStateMachine {
46
47
  to: WorkflowPhase.IMPLEMENTATION,
47
48
  condition: {
48
49
  check: (project) => project.metadata.approvals.tasks.generated &&
49
- project.metadata.approvals.tasks.approved,
50
- errorMessage: 'Tasks must be generated and approved before implementation phase',
50
+ project.metadata.approvals.tasks.approved &&
51
+ WorkflowDomainService.isTestCaseReviewSatisfied(project),
52
+ errorMessage: 'Tasks must be generated and approved before implementation phase; test cases must be reviewed when that checkpoint is enabled',
51
53
  requiredApprovals: ['tasks']
52
54
  }
53
55
  },
@@ -276,6 +278,9 @@ export class WorkflowStateMachine {
276
278
  if (approvals.tasks.generated && !approvals.tasks.approved) {
277
279
  recommendations.push('Tasks are ready for review and approval');
278
280
  }
281
+ if (!WorkflowDomainService.isTestCaseReviewSatisfied(project)) {
282
+ recommendations.push('Review and approve TDD test cases before implementation');
283
+ }
279
284
  return {
280
285
  isValid: violations.length === 0,
281
286
  violations,
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowStateMachine.js","sourceRoot":"","sources":["../../../src/domain/workflow/WorkflowStateMachine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowStateMachine.js","sourceRoot":"","sources":["../../../src/domain/workflow/WorkflowStateMachine.ts"],"names":[],"mappings":"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"}