@mcp-graph-workflow/mcp-graph 5.1.5 → 5.2.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 (228) hide show
  1. package/dist/core/analyzer/ac-parser.d.ts +7 -0
  2. package/dist/core/analyzer/ac-parser.d.ts.map +1 -0
  3. package/dist/core/analyzer/ac-parser.js +67 -0
  4. package/dist/core/analyzer/ac-parser.js.map +1 -0
  5. package/dist/core/analyzer/ac-validator.d.ts +15 -0
  6. package/dist/core/analyzer/ac-validator.d.ts.map +1 -0
  7. package/dist/core/analyzer/ac-validator.js +142 -0
  8. package/dist/core/analyzer/ac-validator.js.map +1 -0
  9. package/dist/core/analyzer/definition-of-ready.d.ts +16 -0
  10. package/dist/core/analyzer/definition-of-ready.d.ts.map +1 -0
  11. package/dist/core/analyzer/definition-of-ready.js +107 -0
  12. package/dist/core/analyzer/definition-of-ready.js.map +1 -0
  13. package/dist/core/analyzer/prd-quality.d.ts +14 -0
  14. package/dist/core/analyzer/prd-quality.d.ts.map +1 -0
  15. package/dist/core/analyzer/prd-quality.js +156 -0
  16. package/dist/core/analyzer/prd-quality.js.map +1 -0
  17. package/dist/core/analyzer/risk-assessment.d.ts +11 -0
  18. package/dist/core/analyzer/risk-assessment.d.ts.map +1 -0
  19. package/dist/core/analyzer/risk-assessment.js +97 -0
  20. package/dist/core/analyzer/risk-assessment.js.map +1 -0
  21. package/dist/core/analyzer/scope-analyzer.d.ts +7 -0
  22. package/dist/core/analyzer/scope-analyzer.d.ts.map +1 -0
  23. package/dist/core/analyzer/scope-analyzer.js +99 -0
  24. package/dist/core/analyzer/scope-analyzer.js.map +1 -0
  25. package/dist/core/config/ai-memory-generator.d.ts.map +1 -1
  26. package/dist/core/config/ai-memory-generator.js +8 -11
  27. package/dist/core/config/ai-memory-generator.js.map +1 -1
  28. package/dist/core/context/context-assembler.d.ts +3 -0
  29. package/dist/core/context/context-assembler.d.ts.map +1 -1
  30. package/dist/core/context/context-assembler.js +5 -2
  31. package/dist/core/context/context-assembler.js.map +1 -1
  32. package/dist/core/context/rag-context.d.ts +4 -2
  33. package/dist/core/context/rag-context.d.ts.map +1 -1
  34. package/dist/core/context/rag-context.js +8 -5
  35. package/dist/core/context/rag-context.js.map +1 -1
  36. package/dist/core/designer/adr-validator.d.ts +8 -0
  37. package/dist/core/designer/adr-validator.d.ts.map +1 -0
  38. package/dist/core/designer/adr-validator.js +61 -0
  39. package/dist/core/designer/adr-validator.js.map +1 -0
  40. package/dist/core/designer/coupling-analyzer.d.ts +7 -0
  41. package/dist/core/designer/coupling-analyzer.d.ts.map +1 -0
  42. package/dist/core/designer/coupling-analyzer.js +59 -0
  43. package/dist/core/designer/coupling-analyzer.js.map +1 -0
  44. package/dist/core/designer/definition-of-ready.d.ts +8 -0
  45. package/dist/core/designer/definition-of-ready.d.ts.map +1 -0
  46. package/dist/core/designer/definition-of-ready.js +146 -0
  47. package/dist/core/designer/definition-of-ready.js.map +1 -0
  48. package/dist/core/designer/interface-checker.d.ts +7 -0
  49. package/dist/core/designer/interface-checker.d.ts.map +1 -0
  50. package/dist/core/designer/interface-checker.js +53 -0
  51. package/dist/core/designer/interface-checker.js.map +1 -0
  52. package/dist/core/designer/tech-risk-assessor.d.ts +7 -0
  53. package/dist/core/designer/tech-risk-assessor.d.ts.map +1 -0
  54. package/dist/core/designer/tech-risk-assessor.js +95 -0
  55. package/dist/core/designer/tech-risk-assessor.js.map +1 -0
  56. package/dist/core/designer/traceability-matrix.d.ts +8 -0
  57. package/dist/core/designer/traceability-matrix.d.ts.map +1 -0
  58. package/dist/core/designer/traceability-matrix.js +67 -0
  59. package/dist/core/designer/traceability-matrix.js.map +1 -0
  60. package/dist/core/events/event-types.d.ts +11 -1
  61. package/dist/core/events/event-types.d.ts.map +1 -1
  62. package/dist/core/handoff/delivery-checklist.d.ts +10 -0
  63. package/dist/core/handoff/delivery-checklist.d.ts.map +1 -0
  64. package/dist/core/handoff/delivery-checklist.js +148 -0
  65. package/dist/core/handoff/delivery-checklist.js.map +1 -0
  66. package/dist/core/handoff/doc-completeness.d.ts +7 -0
  67. package/dist/core/handoff/doc-completeness.d.ts.map +1 -0
  68. package/dist/core/handoff/doc-completeness.js +19 -0
  69. package/dist/core/handoff/doc-completeness.js.map +1 -0
  70. package/dist/core/implementer/definition-of-done.d.ts +11 -0
  71. package/dist/core/implementer/definition-of-done.d.ts.map +1 -0
  72. package/dist/core/implementer/definition-of-done.js +158 -0
  73. package/dist/core/implementer/definition-of-done.js.map +1 -0
  74. package/dist/core/implementer/sprint-progress.d.ts +11 -0
  75. package/dist/core/implementer/sprint-progress.d.ts.map +1 -0
  76. package/dist/core/implementer/sprint-progress.js +80 -0
  77. package/dist/core/implementer/sprint-progress.js.map +1 -0
  78. package/dist/core/implementer/tdd-checker.d.ts +15 -0
  79. package/dist/core/implementer/tdd-checker.d.ts.map +1 -0
  80. package/dist/core/implementer/tdd-checker.js +132 -0
  81. package/dist/core/implementer/tdd-checker.js.map +1 -0
  82. package/dist/core/listener/backlog-health.d.ts +7 -0
  83. package/dist/core/listener/backlog-health.d.ts.map +1 -0
  84. package/dist/core/listener/backlog-health.js +64 -0
  85. package/dist/core/listener/backlog-health.js.map +1 -0
  86. package/dist/core/listener/feedback-readiness.d.ts +11 -0
  87. package/dist/core/listener/feedback-readiness.d.ts.map +1 -0
  88. package/dist/core/listener/feedback-readiness.js +124 -0
  89. package/dist/core/listener/feedback-readiness.js.map +1 -0
  90. package/dist/core/planner/lifecycle-phase.d.ts.map +1 -1
  91. package/dist/core/planner/lifecycle-phase.js +78 -50
  92. package/dist/core/planner/lifecycle-phase.js.map +1 -1
  93. package/dist/core/rag/phase-metadata.d.ts +23 -0
  94. package/dist/core/rag/phase-metadata.d.ts.map +1 -0
  95. package/dist/core/rag/phase-metadata.js +72 -0
  96. package/dist/core/rag/phase-metadata.js.map +1 -0
  97. package/dist/core/rag/phase-summary.d.ts +17 -0
  98. package/dist/core/rag/phase-summary.d.ts.map +1 -0
  99. package/dist/core/rag/phase-summary.js +104 -0
  100. package/dist/core/rag/phase-summary.js.map +1 -0
  101. package/dist/core/rag/prd-indexer.d.ts +16 -0
  102. package/dist/core/rag/prd-indexer.d.ts.map +1 -0
  103. package/dist/core/rag/prd-indexer.js +37 -0
  104. package/dist/core/rag/prd-indexer.js.map +1 -0
  105. package/dist/core/reviewer/review-readiness.d.ts +8 -0
  106. package/dist/core/reviewer/review-readiness.d.ts.map +1 -0
  107. package/dist/core/reviewer/review-readiness.js +159 -0
  108. package/dist/core/reviewer/review-readiness.js.map +1 -0
  109. package/dist/core/store/knowledge-store.d.ts +9 -0
  110. package/dist/core/store/knowledge-store.d.ts.map +1 -1
  111. package/dist/core/store/knowledge-store.js +22 -0
  112. package/dist/core/store/knowledge-store.js.map +1 -1
  113. package/dist/core/validator/definition-of-ready.d.ts +8 -0
  114. package/dist/core/validator/definition-of-ready.d.ts.map +1 -0
  115. package/dist/core/validator/definition-of-ready.js +155 -0
  116. package/dist/core/validator/definition-of-ready.js.map +1 -0
  117. package/dist/core/validator/done-integrity-checker.d.ts +7 -0
  118. package/dist/core/validator/done-integrity-checker.d.ts.map +1 -0
  119. package/dist/core/validator/done-integrity-checker.js +38 -0
  120. package/dist/core/validator/done-integrity-checker.js.map +1 -0
  121. package/dist/core/validator/status-flow-checker.d.ts +7 -0
  122. package/dist/core/validator/status-flow-checker.d.ts.map +1 -0
  123. package/dist/core/validator/status-flow-checker.js +26 -0
  124. package/dist/core/validator/status-flow-checker.js.map +1 -0
  125. package/dist/mcp/lifecycle-wrapper.d.ts +9 -0
  126. package/dist/mcp/lifecycle-wrapper.d.ts.map +1 -1
  127. package/dist/mcp/lifecycle-wrapper.js +27 -2
  128. package/dist/mcp/lifecycle-wrapper.js.map +1 -1
  129. package/dist/mcp/tools/{stats.d.ts → analyze.d.ts} +2 -2
  130. package/dist/mcp/tools/analyze.d.ts.map +1 -0
  131. package/dist/mcp/tools/analyze.js +272 -0
  132. package/dist/mcp/tools/analyze.js.map +1 -0
  133. package/dist/mcp/tools/import-prd.d.ts.map +1 -1
  134. package/dist/mcp/tools/import-prd.js +15 -1
  135. package/dist/mcp/tools/import-prd.js.map +1 -1
  136. package/dist/mcp/tools/index.d.ts.map +1 -1
  137. package/dist/mcp/tools/index.js +6 -10
  138. package/dist/mcp/tools/index.js.map +1 -1
  139. package/dist/mcp/tools/{velocity.d.ts → metrics.d.ts} +2 -2
  140. package/dist/mcp/tools/metrics.d.ts.map +1 -0
  141. package/dist/mcp/tools/metrics.js +69 -0
  142. package/dist/mcp/tools/metrics.js.map +1 -0
  143. package/dist/mcp/tools/next.d.ts.map +1 -1
  144. package/dist/mcp/tools/next.js +19 -5
  145. package/dist/mcp/tools/next.js.map +1 -1
  146. package/dist/mcp/tools/plan-sprint.d.ts.map +1 -1
  147. package/dist/mcp/tools/plan-sprint.js +20 -0
  148. package/dist/mcp/tools/plan-sprint.js.map +1 -1
  149. package/dist/mcp/tools/rag-context.d.ts.map +1 -1
  150. package/dist/mcp/tools/rag-context.js +20 -5
  151. package/dist/mcp/tools/rag-context.js.map +1 -1
  152. package/dist/mcp/tools/set-phase.d.ts.map +1 -1
  153. package/dist/mcp/tools/set-phase.js +16 -1
  154. package/dist/mcp/tools/set-phase.js.map +1 -1
  155. package/dist/mcp/tools/update-status.d.ts.map +1 -1
  156. package/dist/mcp/tools/update-status.js +21 -6
  157. package/dist/mcp/tools/update-status.js.map +1 -1
  158. package/dist/mcp/tools/{decompose.d.ts → validate-ac.d.ts} +2 -2
  159. package/dist/mcp/tools/validate-ac.d.ts.map +1 -0
  160. package/dist/mcp/tools/validate-ac.js +23 -0
  161. package/dist/mcp/tools/validate-ac.js.map +1 -0
  162. package/dist/schemas/ac-quality-schema.d.ts +90 -0
  163. package/dist/schemas/ac-quality-schema.d.ts.map +1 -0
  164. package/dist/schemas/ac-quality-schema.js +34 -0
  165. package/dist/schemas/ac-quality-schema.js.map +1 -0
  166. package/dist/schemas/analyzer-schema.d.ts +160 -0
  167. package/dist/schemas/analyzer-schema.d.ts.map +1 -0
  168. package/dist/schemas/analyzer-schema.js +74 -0
  169. package/dist/schemas/analyzer-schema.js.map +1 -0
  170. package/dist/schemas/designer-schema.d.ts +259 -0
  171. package/dist/schemas/designer-schema.d.ts.map +1 -0
  172. package/dist/schemas/designer-schema.js +102 -0
  173. package/dist/schemas/designer-schema.js.map +1 -0
  174. package/dist/schemas/handoff-schema.d.ts +49 -0
  175. package/dist/schemas/handoff-schema.d.ts.map +1 -0
  176. package/dist/schemas/handoff-schema.js +28 -0
  177. package/dist/schemas/handoff-schema.js.map +1 -0
  178. package/dist/schemas/implementer-schema.d.ts +187 -0
  179. package/dist/schemas/implementer-schema.d.ts.map +1 -0
  180. package/dist/schemas/implementer-schema.js +80 -0
  181. package/dist/schemas/implementer-schema.js.map +1 -0
  182. package/dist/schemas/knowledge.schema.d.ts +8 -0
  183. package/dist/schemas/knowledge.schema.d.ts.map +1 -1
  184. package/dist/schemas/knowledge.schema.js +1 -1
  185. package/dist/schemas/knowledge.schema.js.map +1 -1
  186. package/dist/schemas/listener-schema.d.ts +62 -0
  187. package/dist/schemas/listener-schema.d.ts.map +1 -0
  188. package/dist/schemas/listener-schema.js +35 -0
  189. package/dist/schemas/listener-schema.js.map +1 -0
  190. package/dist/schemas/reviewer-schema.d.ts +34 -0
  191. package/dist/schemas/reviewer-schema.d.ts.map +1 -0
  192. package/dist/schemas/reviewer-schema.js +17 -0
  193. package/dist/schemas/reviewer-schema.js.map +1 -0
  194. package/dist/schemas/validator-schema.d.ts +79 -0
  195. package/dist/schemas/validator-schema.d.ts.map +1 -0
  196. package/dist/schemas/validator-schema.js +43 -0
  197. package/dist/schemas/validator-schema.js.map +1 -0
  198. package/dist/web/dashboard/dist/assets/{benchmark-tab-DzYj_lJO.js → benchmark-tab-DE6hAHVG.js} +1 -1
  199. package/dist/web/dashboard/dist/assets/{gitnexus-tab-B16kDpcc.js → gitnexus-tab-DsBjJHx8.js} +1 -1
  200. package/dist/web/dashboard/dist/assets/graph-tab-C09DzeZ_.js +1 -0
  201. package/dist/web/dashboard/dist/assets/{graph-utils-CETPf3Qj.js → graph-utils-D4LFspTf.js} +5 -5
  202. package/dist/web/dashboard/dist/assets/{index-DLehETrJ.js → index-B2fTJ4AS.js} +2 -2
  203. package/dist/web/dashboard/dist/assets/index-CkqEqKiH.css +1 -0
  204. package/dist/web/dashboard/dist/assets/{insights-tab-MkpvetqF.js → insights-tab-Bm7CDckb.js} +1 -1
  205. package/dist/web/dashboard/dist/assets/{logs-tab-BPDyVj2B.js → logs-tab-Cxpcv_ni.js} +1 -1
  206. package/dist/web/dashboard/dist/assets/{prd-backlog-tab-DbnFo6Ve.js → prd-backlog-tab-X84Rj-IB.js} +1 -1
  207. package/dist/web/dashboard/dist/assets/{serena-tab-CLJOpG5i.js → serena-tab-BunULNvw.js} +1 -1
  208. package/dist/web/dashboard/dist/index.html +2 -2
  209. package/package.json +1 -1
  210. package/dist/mcp/tools/bulk-update-status.d.ts +0 -4
  211. package/dist/mcp/tools/bulk-update-status.d.ts.map +0 -1
  212. package/dist/mcp/tools/bulk-update-status.js +0 -22
  213. package/dist/mcp/tools/bulk-update-status.js.map +0 -1
  214. package/dist/mcp/tools/decompose.d.ts.map +0 -1
  215. package/dist/mcp/tools/decompose.js +0 -25
  216. package/dist/mcp/tools/decompose.js.map +0 -1
  217. package/dist/mcp/tools/dependencies.d.ts +0 -4
  218. package/dist/mcp/tools/dependencies.d.ts.map +0 -1
  219. package/dist/mcp/tools/dependencies.js +0 -47
  220. package/dist/mcp/tools/dependencies.js.map +0 -1
  221. package/dist/mcp/tools/stats.d.ts.map +0 -1
  222. package/dist/mcp/tools/stats.js +0 -46
  223. package/dist/mcp/tools/stats.js.map +0 -1
  224. package/dist/mcp/tools/velocity.d.ts.map +0 -1
  225. package/dist/mcp/tools/velocity.js +0 -25
  226. package/dist/mcp/tools/velocity.js.map +0 -1
  227. package/dist/web/dashboard/dist/assets/graph-tab-bgRao3Qi.js +0 -1
  228. package/dist/web/dashboard/dist/assets/index-D4nxPvv8.css +0 -1
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Phase Summary Generator — creates a knowledge document summarizing
3
+ * what was accomplished during a lifecycle phase when transitioning out.
4
+ */
5
+ import { logger } from "../utils/logger.js";
6
+ const TASK_TYPES = new Set(["task", "subtask"]);
7
+ const DESIGN_TYPES = new Set(["decision", "constraint", "risk", "acceptance_criteria"]);
8
+ /**
9
+ * Generate and index a phase summary document into the knowledge store.
10
+ * Captures key metrics and decisions from the completed phase.
11
+ */
12
+ export function generateAndIndexPhaseSummary(knowledgeStore, doc, fromPhase, toPhase) {
13
+ const summaryText = buildPhaseSummaryText(doc, fromPhase, toPhase);
14
+ const sourceId = `phase_summary:${fromPhase}:${new Date().toISOString()}`;
15
+ try {
16
+ knowledgeStore.insert({
17
+ sourceType: "phase_summary",
18
+ sourceId,
19
+ title: `Phase ${fromPhase} Summary → ${toPhase}`,
20
+ content: summaryText,
21
+ metadata: {
22
+ phase: fromPhase,
23
+ transitionTo: toPhase,
24
+ transitionedAt: new Date().toISOString(),
25
+ },
26
+ });
27
+ logger.info("Phase summary indexed", { fromPhase, toPhase });
28
+ return { indexed: true, summaryText };
29
+ }
30
+ catch (err) {
31
+ logger.warn("Phase summary indexing failed", { error: String(err) });
32
+ return { indexed: false, summaryText };
33
+ }
34
+ }
35
+ /**
36
+ * Build a human-readable summary of what happened during a phase.
37
+ */
38
+ function buildPhaseSummaryText(doc, fromPhase, toPhase) {
39
+ const { nodes, edges } = doc;
40
+ const tasks = nodes.filter((n) => TASK_TYPES.has(n.type));
41
+ const doneTasks = tasks.filter((n) => n.status === "done");
42
+ const inProgressTasks = tasks.filter((n) => n.status === "in_progress");
43
+ const designNodes = nodes.filter((n) => DESIGN_TYPES.has(n.type));
44
+ const sections = [];
45
+ sections.push(`Phase ${fromPhase} completed. Transitioning to ${toPhase}.`);
46
+ sections.push(`Total nodes: ${nodes.length}. Edges: ${edges.length}.`);
47
+ if (tasks.length > 0) {
48
+ sections.push(`Tasks: ${tasks.length} total, ${doneTasks.length} done, ${inProgressTasks.length} in progress, ${tasks.length - doneTasks.length - inProgressTasks.length} remaining.`);
49
+ }
50
+ // Phase-specific summaries
51
+ switch (fromPhase) {
52
+ case "ANALYZE": {
53
+ const requirements = nodes.filter((n) => n.type === "requirement");
54
+ const epics = nodes.filter((n) => n.type === "epic");
55
+ sections.push(`Requirements defined: ${requirements.length}. Epics: ${epics.length}.`);
56
+ break;
57
+ }
58
+ case "DESIGN": {
59
+ const decisions = designNodes.filter((n) => n.type === "decision");
60
+ const constraints = designNodes.filter((n) => n.type === "constraint");
61
+ const risks = designNodes.filter((n) => n.type === "risk");
62
+ sections.push(`Decisions: ${decisions.length}. Constraints: ${constraints.length}. Risks: ${risks.length}.`);
63
+ if (decisions.length > 0) {
64
+ const decisionTitles = decisions.map((d) => d.title).slice(0, 5);
65
+ sections.push(`Key decisions: ${decisionTitles.join("; ")}.`);
66
+ }
67
+ break;
68
+ }
69
+ case "PLAN": {
70
+ const sprintTasks = tasks.filter((n) => n.sprint != null);
71
+ const sprints = new Set(sprintTasks.map((n) => n.sprint));
72
+ sections.push(`Sprint-assigned tasks: ${sprintTasks.length} across ${sprints.size} sprint(s).`);
73
+ break;
74
+ }
75
+ case "IMPLEMENT": {
76
+ sections.push(`Tasks completed: ${doneTasks.length}/${tasks.length}.`);
77
+ const acNodes = nodes.filter((n) => n.type === "acceptance_criteria");
78
+ if (acNodes.length > 0) {
79
+ sections.push(`Acceptance criteria nodes: ${acNodes.length}.`);
80
+ }
81
+ break;
82
+ }
83
+ case "VALIDATE": {
84
+ const tasksWithAc = tasks.filter((n) => n.acceptanceCriteria && n.acceptanceCriteria.length > 0);
85
+ sections.push(`Tasks with acceptance criteria: ${tasksWithAc.length}/${tasks.length}.`);
86
+ break;
87
+ }
88
+ case "REVIEW": {
89
+ sections.push(`All tasks done: ${doneTasks.length === tasks.length ? "yes" : "no"}.`);
90
+ break;
91
+ }
92
+ case "HANDOFF": {
93
+ sections.push(`Handoff completed. ${doneTasks.length} tasks delivered.`);
94
+ break;
95
+ }
96
+ case "LISTENING": {
97
+ const feedbackNodes = nodes.filter((n) => n.type === "requirement" || n.type === "risk");
98
+ sections.push(`Feedback items collected: ${feedbackNodes.length}.`);
99
+ break;
100
+ }
101
+ }
102
+ return sections.join("\n");
103
+ }
104
+ //# sourceMappingURL=phase-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-summary.js","sourceRoot":"","sources":["../../../src/core/rag/phase-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * PRD Indexer — indexes PRD text content into the knowledge store
3
+ * so that original requirements can be queried in later lifecycle phases.
4
+ */
5
+ import { KnowledgeStore } from "../store/knowledge-store.js";
6
+ import type { LifecyclePhase } from "../planner/lifecycle-phase.js";
7
+ export interface PrdIndexResult {
8
+ documentsIndexed: number;
9
+ sourceFile: string;
10
+ }
11
+ /**
12
+ * Index PRD text content into the knowledge store.
13
+ * Chunks the content and stores with source_type='prd'.
14
+ */
15
+ export declare function indexPrdContent(knowledgeStore: KnowledgeStore, content: string, sourceFile: string, phase?: LifecyclePhase): PrdIndexResult;
16
+ //# sourceMappingURL=prd-indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prd-indexer.d.ts","sourceRoot":"","sources":["../../../src/core/rag/prd-indexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,cAAc,GACrB,cAAc,CAiChB"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * PRD Indexer — indexes PRD text content into the knowledge store
3
+ * so that original requirements can be queried in later lifecycle phases.
4
+ */
5
+ import { chunkText } from "./chunk-text.js";
6
+ import { logger } from "../utils/logger.js";
7
+ /**
8
+ * Index PRD text content into the knowledge store.
9
+ * Chunks the content and stores with source_type='prd'.
10
+ */
11
+ export function indexPrdContent(knowledgeStore, content, sourceFile, phase) {
12
+ const chunks = chunkText(content);
13
+ if (chunks.length === 0) {
14
+ logger.info("No content to index from PRD", { sourceFile });
15
+ return { documentsIndexed: 0, sourceFile };
16
+ }
17
+ const sourceId = `prd:${sourceFile}`;
18
+ // Remove previous version to re-index fresh content
19
+ knowledgeStore.deleteBySource("prd", sourceId);
20
+ const docs = knowledgeStore.insertChunks(chunks.map((chunk) => ({
21
+ sourceType: "prd",
22
+ sourceId,
23
+ title: chunks.length > 1
24
+ ? `PRD: ${sourceFile} [${chunk.index + 1}/${chunks.length}]`
25
+ : `PRD: ${sourceFile}`,
26
+ content: chunk.content,
27
+ chunkIndex: chunk.index,
28
+ metadata: {
29
+ sourceFile,
30
+ phase: phase ?? "ANALYZE",
31
+ indexedAt: new Date().toISOString(),
32
+ },
33
+ })));
34
+ logger.info("PRD content indexed", { sourceFile, chunks: docs.length });
35
+ return { documentsIndexed: docs.length, sourceFile };
36
+ }
37
+ //# sourceMappingURL=prd-indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prd-indexer.js","sourceRoot":"","sources":["../../../src/core/rag/prd-indexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,cAA8B,EAC9B,OAAe,EACf,UAAkB,EAClB,KAAsB;IAEtB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,OAAO,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,UAAU,EAAE,CAAC;IAErC,oDAAoD;IACpD,cAAc,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE/C,MAAM,IAAI,GAAG,cAAc,CAAC,YAAY,CACtC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,UAAU,EAAE,KAAc;QAC1B,QAAQ;QACR,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,QAAQ,UAAU,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG;YAC5D,CAAC,CAAC,QAAQ,UAAU,EAAE;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,KAAK;QACvB,QAAQ,EAAE;YACR,UAAU;YACV,KAAK,EAAE,KAAK,IAAI,SAAS;YACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC;KACF,CAAC,CAAC,CACJ,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAExE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;AACvD,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Review Readiness — composite gate for VALIDATE→REVIEW transition.
3
+ * 100% reuse of existing analyzers, no new helper modules.
4
+ */
5
+ import type { GraphDocument } from "../graph/graph-types.js";
6
+ import type { ReviewReadinessReport } from "../../schemas/reviewer-schema.js";
7
+ export declare function checkReviewReadiness(doc: GraphDocument): ReviewReadinessReport;
8
+ //# sourceMappingURL=review-readiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-readiness.d.ts","sourceRoot":"","sources":["../../../src/core/reviewer/review-readiness.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAwB,MAAM,kCAAkC,CAAC;AAoBpG,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,qBAAqB,CA6J9E"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Review Readiness — composite gate for VALIDATE→REVIEW transition.
3
+ * 100% reuse of existing analyzers, no new helper modules.
4
+ */
5
+ import { analyzeScope } from "../analyzer/scope-analyzer.js";
6
+ import { assessRisks } from "../analyzer/risk-assessment.js";
7
+ import { detectBottlenecks } from "../insights/bottleneck-detector.js";
8
+ import { validateAcQuality } from "../analyzer/ac-validator.js";
9
+ import { calculateVelocity } from "../planner/velocity.js";
10
+ import { detectCycles } from "../planner/dependency-chain.js";
11
+ import { logger } from "../utils/logger.js";
12
+ const TASK_TYPES = new Set(["task", "subtask"]);
13
+ function scoreToGrade(score) {
14
+ if (score >= 90)
15
+ return "A";
16
+ if (score >= 75)
17
+ return "B";
18
+ if (score >= 60)
19
+ return "C";
20
+ if (score >= 40)
21
+ return "D";
22
+ return "F";
23
+ }
24
+ export function checkReviewReadiness(doc) {
25
+ const checks = [];
26
+ const tasks = doc.nodes.filter((n) => TASK_TYPES.has(n.type));
27
+ const doneTasks = tasks.filter((n) => n.status === "done");
28
+ const completionRate = tasks.length > 0 ? (doneTasks.length / tasks.length) * 100 : 0;
29
+ // Reuse results from expensive calls
30
+ const bottlenecks = detectBottlenecks(doc);
31
+ const scopeAnalysis = analyzeScope(doc);
32
+ // ── Required checks ──
33
+ // 1. completion_rate — ≥80% tasks done
34
+ const enough = completionRate >= 80;
35
+ checks.push({
36
+ name: "completion_rate",
37
+ passed: enough,
38
+ details: enough
39
+ ? `${Math.round(completionRate)}% tasks done (meta: 80%)`
40
+ : `Apenas ${Math.round(completionRate)}% tasks done (meta: 80%)`,
41
+ severity: "required",
42
+ });
43
+ // 2. no_blocked_tasks — zero blocked tasks
44
+ const blockedCount = bottlenecks.blockedTasks.length;
45
+ const noBlocked = blockedCount === 0;
46
+ checks.push({
47
+ name: "no_blocked_tasks",
48
+ passed: noBlocked,
49
+ details: noBlocked
50
+ ? "Nenhuma task bloqueada"
51
+ : `${blockedCount} task(s) bloqueada(s)`,
52
+ severity: "required",
53
+ });
54
+ // 3. ac_coverage — ≥70% done tasks with AC
55
+ const doneWithAC = doneTasks.filter((t) => (t.acceptanceCriteria && t.acceptanceCriteria.length > 0));
56
+ const acCoverage = doneTasks.length > 0 ? Math.round((doneWithAC.length / doneTasks.length) * 100) : 100;
57
+ const acCoveragePass = acCoverage >= 70;
58
+ checks.push({
59
+ name: "ac_coverage",
60
+ passed: acCoveragePass,
61
+ details: `${acCoverage}% done tasks com AC (meta: 70%)`,
62
+ severity: "required",
63
+ });
64
+ // 4. no_cycles — no dependency cycles
65
+ const cycles = detectCycles(doc);
66
+ const noCycles = cycles.length === 0;
67
+ checks.push({
68
+ name: "no_cycles",
69
+ passed: noCycles,
70
+ details: noCycles
71
+ ? "Nenhum ciclo de dependência detectado"
72
+ : `${cycles.length} ciclo(s) detectado(s)`,
73
+ severity: "required",
74
+ });
75
+ // 5. risks_addressed — zero critical/high unmitigated risks
76
+ const riskMatrix = assessRisks(doc);
77
+ const unmitigatedCritical = riskMatrix.risks.filter((r) => (r.level === "critical" || r.level === "high") && r.mitigationStatus === "unmitigated");
78
+ const risksPass = unmitigatedCritical.length === 0;
79
+ checks.push({
80
+ name: "risks_addressed",
81
+ passed: risksPass,
82
+ details: risksPass
83
+ ? "Todos riscos critical/high endereçados"
84
+ : `${unmitigatedCritical.length} risco(s) critical/high sem mitigação`,
85
+ severity: "required",
86
+ });
87
+ // ── Recommended checks ──
88
+ // 6. velocity_stable — coefficient of variation < 1.0 (≥2 sprints)
89
+ const velocity = calculateVelocity(doc);
90
+ let velocityPass = true;
91
+ let velocityDetails = "Dados insuficientes para avaliar estabilidade";
92
+ if (velocity.sprints.length >= 2) {
93
+ const points = velocity.sprints.map((s) => s.totalPoints);
94
+ const avg = points.reduce((a, b) => a + b, 0) / points.length;
95
+ const variance = points.reduce((sum, p) => sum + Math.pow(p - avg, 2), 0) / points.length;
96
+ const stdDev = Math.sqrt(variance);
97
+ const cv = avg > 0 ? stdDev / avg : 0;
98
+ velocityPass = cv < 1.0;
99
+ velocityDetails = `Coeficiente de variação: ${cv.toFixed(2)} (meta: < 1.0)`;
100
+ }
101
+ checks.push({
102
+ name: "velocity_stable",
103
+ passed: velocityPass,
104
+ details: velocityDetails,
105
+ severity: "recommended",
106
+ });
107
+ // 7. no_orphan_tasks — zero orphan tasks
108
+ const orphanTasks = scopeAnalysis.orphans.filter((o) => TASK_TYPES.has(o.type));
109
+ const noOrphans = orphanTasks.length === 0;
110
+ checks.push({
111
+ name: "no_orphan_tasks",
112
+ passed: noOrphans,
113
+ details: noOrphans
114
+ ? "Nenhuma task órfã"
115
+ : `${orphanTasks.length} task(s) órfã(s)`,
116
+ severity: "recommended",
117
+ });
118
+ // 8. no_oversized_tasks — no tasks >120min without subtasks
119
+ const noOversized = bottlenecks.oversizedTasks.length === 0;
120
+ checks.push({
121
+ name: "no_oversized_tasks",
122
+ passed: noOversized,
123
+ details: noOversized
124
+ ? "Nenhuma task oversized"
125
+ : `${bottlenecks.oversizedTasks.length} task(s) >120min sem decomposição`,
126
+ severity: "recommended",
127
+ });
128
+ // 9. scope_integrity — no scope conflicts
129
+ const noConflicts = scopeAnalysis.conflicts.length === 0;
130
+ checks.push({
131
+ name: "scope_integrity",
132
+ passed: noConflicts,
133
+ details: noConflicts
134
+ ? "Sem conflitos de escopo"
135
+ : `${scopeAnalysis.conflicts.length} conflito(s) de escopo`,
136
+ severity: "recommended",
137
+ });
138
+ // 10. ac_quality — AC quality score ≥ 60
139
+ const acReport = validateAcQuality(doc);
140
+ const acQualityPass = acReport.overallScore >= 60;
141
+ checks.push({
142
+ name: "ac_quality",
143
+ passed: acQualityPass,
144
+ details: `AC quality score: ${acReport.overallScore} (meta: 60)`,
145
+ severity: "recommended",
146
+ });
147
+ // ── Scoring ──
148
+ const totalChecks = checks.length;
149
+ const passedChecks = checks.filter((c) => c.passed).length;
150
+ const score = Math.round((passedChecks / totalChecks) * 100);
151
+ const grade = scoreToGrade(score);
152
+ const ready = checks.filter((c) => c.severity === "required").every((c) => c.passed);
153
+ const summary = ready
154
+ ? `Review Ready (${grade}): ${passedChecks}/${totalChecks} checks passed, score ${score}`
155
+ : `Review Not Ready: ${checks.filter((c) => c.severity === "required" && !c.passed).map((c) => c.name).join(", ")} failed`;
156
+ logger.info("review-readiness", { ready, score, grade, passed: passedChecks, total: totalChecks });
157
+ return { checks, ready, score, grade, summary };
158
+ }
159
+ //# sourceMappingURL=review-readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-readiness.js","sourceRoot":"","sources":["../../../src/core/reviewer/review-readiness.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
  import type Database from "better-sqlite3";
7
7
  import type { KnowledgeDocument, KnowledgeSourceType } from "../../schemas/knowledge.schema.js";
8
+ import type { LifecyclePhase } from "../planner/lifecycle-phase.js";
8
9
  export interface InsertKnowledgeDoc {
9
10
  sourceType: KnowledgeSourceType;
10
11
  sourceId: string;
@@ -48,6 +49,14 @@ export declare class KnowledgeStore {
48
49
  search(query: string, limit?: number): Array<KnowledgeDocument & {
49
50
  score: number;
50
51
  }>;
52
+ /**
53
+ * Search knowledge documents with phase-aware boosting.
54
+ * Documents tagged with phases relevant to the current phase are ranked higher.
55
+ */
56
+ searchWithPhaseBoost(query: string, currentPhase: LifecyclePhase, limit?: number): Array<KnowledgeDocument & {
57
+ score: number;
58
+ phaseBoost: number;
59
+ }>;
51
60
  /**
52
61
  * Delete a knowledge document by ID.
53
62
  */
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-store.d.ts","sourceRoot":"","sources":["../../../src/core/store/knowledge-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAKhG,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,mBAAmB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AA8BD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,kBAAkB,GAAG,iBAAiB;IAqClD;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,iBAAiB,EAAE;IAY7D;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAO7C;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,mBAAmB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB,EAAE;IAqB1G;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,KAAK,CAAC,iBAAiB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBvF;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAO3B;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQzE;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAAE,mBAAmB,GAAG,MAAM;IAc/C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOnC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE;CAMrD"}
1
+ {"version":3,"file":"knowledge-store.d.ts","sourceRoot":"","sources":["../../../src/core/store/knowledge-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAKhG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,mBAAmB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AA8BD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,kBAAkB,GAAG,iBAAiB;IAqClD;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,iBAAiB,EAAE;IAY7D;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAO7C;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,mBAAmB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB,EAAE;IAqB1G;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,KAAK,CAAC,iBAAiB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBvF;;;OAGG;IACH,oBAAoB,CAClB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,cAAc,EAC5B,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC,iBAAiB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBnE;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAO3B;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQzE;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAAE,mBAAmB,GAAG,MAAM;IAc/C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOnC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE;CAMrD"}
@@ -7,6 +7,7 @@ import { createHash } from "node:crypto";
7
7
  import { generateId } from "../utils/id.js";
8
8
  import { now } from "../utils/time.js";
9
9
  import { logger } from "../utils/logger.js";
10
+ import { getPhaseBoost, applyPhaseBoost } from "../rag/phase-metadata.js";
10
11
  function rowToDoc(row) {
11
12
  return {
12
13
  id: row.id,
@@ -110,6 +111,27 @@ export class KnowledgeStore {
110
111
  score: row.score,
111
112
  }));
112
113
  }
114
+ /**
115
+ * Search knowledge documents with phase-aware boosting.
116
+ * Documents tagged with phases relevant to the current phase are ranked higher.
117
+ */
118
+ searchWithPhaseBoost(query, currentPhase, limit = 20) {
119
+ // Fetch more results than needed to allow re-ranking
120
+ const rawResults = this.search(query, limit * 2);
121
+ const boosted = rawResults.map((result) => {
122
+ const docPhase = result.metadata?.phase;
123
+ const boost = getPhaseBoost(currentPhase, docPhase);
124
+ const boostedScore = applyPhaseBoost(result.score, boost);
125
+ return {
126
+ ...result,
127
+ score: boostedScore,
128
+ phaseBoost: boost,
129
+ };
130
+ });
131
+ // Re-sort by boosted score (BM25: closer to 0 = better)
132
+ boosted.sort((a, b) => b.score - a.score);
133
+ return boosted.slice(0, limit);
134
+ }
113
135
  /**
114
136
  * Delete a knowledge document by ID.
115
137
  */
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-store.js","sourceRoot":"","sources":["../../../src/core/store/knowledge-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"knowledge-store.js","sourceRoot":"","sources":["../../../src/core/store/knowledge-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Validation Definition of Ready — composite gate for IMPLEMENT→VALIDATE transition.
3
+ * Aggregates completion, AC quality, done integrity, and risk checks.
4
+ */
5
+ import type { GraphDocument } from "../graph/graph-types.js";
6
+ import type { ValidationReadinessReport } from "../../schemas/validator-schema.js";
7
+ export declare function checkValidationReadiness(doc: GraphDocument): ValidationReadinessReport;
8
+ //# sourceMappingURL=definition-of-ready.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-of-ready.d.ts","sourceRoot":"","sources":["../../../src/core/validator/definition-of-ready.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,yBAAyB,EAA4B,MAAM,mCAAmC,CAAC;AAqB7G,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,aAAa,GAAG,yBAAyB,CAgKtF"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Validation Definition of Ready — composite gate for IMPLEMENT→VALIDATE transition.
3
+ * Aggregates completion, AC quality, done integrity, and risk checks.
4
+ */
5
+ import { validateAcQuality } from "../analyzer/ac-validator.js";
6
+ import { assessRisks } from "../analyzer/risk-assessment.js";
7
+ import { detectBottlenecks } from "../insights/bottleneck-detector.js";
8
+ import { calculateMetrics } from "../insights/metrics-calculator.js";
9
+ import { detectCycles } from "../planner/dependency-chain.js";
10
+ import { checkDoneIntegrity } from "./done-integrity-checker.js";
11
+ import { checkStatusFlow } from "./status-flow-checker.js";
12
+ import { logger } from "../utils/logger.js";
13
+ const TASK_TYPES = new Set(["task", "subtask"]);
14
+ function scoreToGrade(score) {
15
+ if (score >= 90)
16
+ return "A";
17
+ if (score >= 75)
18
+ return "B";
19
+ if (score >= 60)
20
+ return "C";
21
+ if (score >= 40)
22
+ return "D";
23
+ return "F";
24
+ }
25
+ export function checkValidationReadiness(doc) {
26
+ const checks = [];
27
+ const tasks = doc.nodes.filter((n) => TASK_TYPES.has(n.type));
28
+ const doneTasks = tasks.filter((n) => n.status === "done");
29
+ const completionRate = tasks.length > 0 ? (doneTasks.length / tasks.length) * 100 : 0;
30
+ // ── Required checks ──
31
+ // 1. completion_threshold — ≥50% tasks done
32
+ const halfDone = completionRate >= 50;
33
+ checks.push({
34
+ name: "completion_threshold",
35
+ passed: halfDone,
36
+ details: halfDone
37
+ ? `${Math.round(completionRate)}% tasks done (meta: 50%)`
38
+ : `Apenas ${Math.round(completionRate)}% tasks done (meta: 50%)`,
39
+ severity: "required",
40
+ });
41
+ // 2. ac_defined — done tasks have AC
42
+ const hasAC = doc.nodes.some((n) => n.type === "acceptance_criteria" || (n.acceptanceCriteria && n.acceptanceCriteria.length > 0));
43
+ checks.push({
44
+ name: "ac_defined",
45
+ passed: hasAC,
46
+ details: hasAC
47
+ ? "Acceptance criteria definidos"
48
+ : "Nenhum acceptance criteria encontrado",
49
+ severity: "required",
50
+ });
51
+ // 3. ac_quality — AC quality score ≥ 60
52
+ const acReport = validateAcQuality(doc);
53
+ const acQualityPass = acReport.overallScore >= 60;
54
+ checks.push({
55
+ name: "ac_quality",
56
+ passed: acQualityPass,
57
+ details: `AC quality score: ${acReport.overallScore} (meta: 60)`,
58
+ severity: "required",
59
+ });
60
+ // 4. done_integrity — no done tasks with integrity issues
61
+ const integrityReport = checkDoneIntegrity(doc);
62
+ checks.push({
63
+ name: "done_integrity",
64
+ passed: integrityReport.passed,
65
+ details: integrityReport.passed
66
+ ? "Todas tasks done com integridade verificada"
67
+ : `${integrityReport.issues.length} problema(s) de integridade em tasks done`,
68
+ severity: "required",
69
+ });
70
+ // 5. no_cycles — no dependency cycles
71
+ const cycles = detectCycles(doc);
72
+ const noCycles = cycles.length === 0;
73
+ checks.push({
74
+ name: "no_cycles",
75
+ passed: noCycles,
76
+ details: noCycles
77
+ ? "Nenhum ciclo de dependência detectado"
78
+ : `${cycles.length} ciclo(s) detectado(s)`,
79
+ severity: "required",
80
+ });
81
+ // ── Recommended checks ──
82
+ // 6. ac_coverage_global — ≥80% of ALL tasks have AC
83
+ const tasksWithAC = tasks.filter((t) => (t.acceptanceCriteria && t.acceptanceCriteria.length > 0) ||
84
+ doc.nodes.some((n) => n.type === "acceptance_criteria" && doc.edges.some((e) => (e.from === n.id && e.to === t.id) || (e.from === t.id && e.to === n.id))));
85
+ const acCoverageRate = tasks.length > 0 ? Math.round((tasksWithAC.length / tasks.length) * 100) : 100;
86
+ const acCoveragePass = acCoverageRate >= 80;
87
+ checks.push({
88
+ name: "ac_coverage_global",
89
+ passed: acCoveragePass,
90
+ details: `${acCoverageRate}% tasks com AC (meta: 80%)`,
91
+ severity: "recommended",
92
+ });
93
+ // 7. no_oversized_remaining — no incomplete tasks >120min without subtasks
94
+ const bottlenecks = detectBottlenecks(doc);
95
+ const oversizedRemaining = bottlenecks.oversizedTasks.filter((ot) => {
96
+ const node = doc.nodes.find((n) => n.id === ot.id);
97
+ return node && node.status !== "done";
98
+ });
99
+ const noOversized = oversizedRemaining.length === 0;
100
+ checks.push({
101
+ name: "no_oversized_remaining",
102
+ passed: noOversized,
103
+ details: noOversized
104
+ ? "Nenhuma task incompleta oversized"
105
+ : `${oversizedRemaining.length} task(s) incompleta(s) >120min sem decomposição`,
106
+ severity: "recommended",
107
+ });
108
+ // 8. risks_mitigated — high/critical risks with mitigation
109
+ const riskMatrix = assessRisks(doc);
110
+ const unmitigatedHighRisks = riskMatrix.risks.filter((r) => (r.level === "high" || r.level === "critical") && r.mitigationStatus === "unmitigated");
111
+ const risksPass = unmitigatedHighRisks.length === 0;
112
+ checks.push({
113
+ name: "risks_mitigated",
114
+ passed: risksPass,
115
+ details: risksPass
116
+ ? "Todos riscos high/critical com mitigação"
117
+ : `${unmitigatedHighRisks.length} risco(s) high/critical sem mitigação`,
118
+ severity: "recommended",
119
+ });
120
+ // 9. status_flow_compliance — done tasks went through in_progress
121
+ const flowReport = checkStatusFlow(doc);
122
+ const flowPass = flowReport.complianceRate >= 80;
123
+ checks.push({
124
+ name: "status_flow_compliance",
125
+ passed: flowPass,
126
+ details: `Taxa de compliance do fluxo de status: ${flowReport.complianceRate}% (meta: 80%)`,
127
+ severity: "recommended",
128
+ });
129
+ // 10. sprint_progress — current sprint ≥ 70% completion
130
+ const metrics = calculateMetrics(doc);
131
+ const currentSprint = metrics.sprintProgress.length > 0
132
+ ? metrics.sprintProgress[metrics.sprintProgress.length - 1]
133
+ : null;
134
+ const sprintPass = currentSprint ? currentSprint.percentage >= 70 : true;
135
+ checks.push({
136
+ name: "sprint_progress",
137
+ passed: sprintPass,
138
+ details: currentSprint
139
+ ? `Sprint "${currentSprint.sprint}": ${currentSprint.percentage}% (meta: 70%)`
140
+ : "Nenhum sprint ativo",
141
+ severity: "recommended",
142
+ });
143
+ // ── Scoring ──
144
+ const totalChecks = checks.length;
145
+ const passedChecks = checks.filter((c) => c.passed).length;
146
+ const score = Math.round((passedChecks / totalChecks) * 100);
147
+ const grade = scoreToGrade(score);
148
+ const ready = checks.filter((c) => c.severity === "required").every((c) => c.passed);
149
+ const summary = ready
150
+ ? `Validation Ready (${grade}): ${passedChecks}/${totalChecks} checks passed, score ${score}`
151
+ : `Validation Not Ready: ${checks.filter((c) => c.severity === "required" && !c.passed).map((c) => c.name).join(", ")} failed`;
152
+ logger.info("validation-readiness", { ready, score, grade, passed: passedChecks, total: totalChecks });
153
+ return { checks, ready, score, grade, summary };
154
+ }
155
+ //# sourceMappingURL=definition-of-ready.js.map