forgecraft-mcp 1.3.2 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/README.md +2 -2
  2. package/dist/analyzers/anchors/anchor-loader.d.ts +47 -0
  3. package/dist/analyzers/anchors/anchor-loader.d.ts.map +1 -0
  4. package/dist/analyzers/anchors/anchor-loader.js +113 -0
  5. package/dist/analyzers/anchors/anchor-loader.js.map +1 -0
  6. package/dist/analyzers/anti-pattern.d.ts.map +1 -1
  7. package/dist/analyzers/anti-pattern.js +38 -26
  8. package/dist/analyzers/anti-pattern.js.map +1 -1
  9. package/dist/analyzers/completeness-helpers.d.ts +5 -0
  10. package/dist/analyzers/completeness-helpers.d.ts.map +1 -1
  11. package/dist/analyzers/completeness-helpers.js +17 -0
  12. package/dist/analyzers/completeness-helpers.js.map +1 -1
  13. package/dist/analyzers/completeness.d.ts.map +1 -1
  14. package/dist/analyzers/completeness.js +4 -4
  15. package/dist/analyzers/completeness.js.map +1 -1
  16. package/dist/analyzers/gs-scorer.d.ts +3 -1
  17. package/dist/analyzers/gs-scorer.d.ts.map +1 -1
  18. package/dist/analyzers/gs-scorer.js +5 -2
  19. package/dist/analyzers/gs-scorer.js.map +1 -1
  20. package/dist/analyzers/scorers/composable-scorer.d.ts +4 -2
  21. package/dist/analyzers/scorers/composable-scorer.d.ts.map +1 -1
  22. package/dist/analyzers/scorers/composable-scorer.js +50 -2
  23. package/dist/analyzers/scorers/composable-scorer.js.map +1 -1
  24. package/dist/analyzers/scorers/executable-scorer.d.ts +3 -2
  25. package/dist/analyzers/scorers/executable-scorer.d.ts.map +1 -1
  26. package/dist/analyzers/scorers/executable-scorer.js +64 -4
  27. package/dist/analyzers/scorers/executable-scorer.js.map +1 -1
  28. package/dist/analyzers/scorers/scorer-utils.d.ts +5 -3
  29. package/dist/analyzers/scorers/scorer-utils.d.ts.map +1 -1
  30. package/dist/analyzers/scorers/scorer-utils.js +34 -9
  31. package/dist/analyzers/scorers/scorer-utils.js.map +1 -1
  32. package/dist/analyzers/scorers/self-describing-scorer.d.ts +7 -4
  33. package/dist/analyzers/scorers/self-describing-scorer.d.ts.map +1 -1
  34. package/dist/analyzers/scorers/self-describing-scorer.js +17 -18
  35. package/dist/analyzers/scorers/self-describing-scorer.js.map +1 -1
  36. package/dist/artifacts/commit-hooks.d.ts +1 -1
  37. package/dist/artifacts/commit-hooks.d.ts.map +1 -1
  38. package/dist/artifacts/commit-hooks.js +2 -0
  39. package/dist/artifacts/commit-hooks.js.map +1 -1
  40. package/dist/cli/commands.d.ts +35 -1
  41. package/dist/cli/commands.d.ts.map +1 -1
  42. package/dist/cli/commands.js +109 -2
  43. package/dist/cli/commands.js.map +1 -1
  44. package/dist/cli/help.d.ts.map +1 -1
  45. package/dist/cli/help.js +7 -0
  46. package/dist/cli/help.js.map +1 -1
  47. package/dist/cli.d.ts.map +1 -1
  48. package/dist/cli.js +10 -1
  49. package/dist/cli.js.map +1 -1
  50. package/dist/disciplines/catalog.d.ts +16 -0
  51. package/dist/disciplines/catalog.d.ts.map +1 -0
  52. package/dist/disciplines/catalog.js +196 -0
  53. package/dist/disciplines/catalog.js.map +1 -0
  54. package/dist/disciplines/runner.d.ts +13 -0
  55. package/dist/disciplines/runner.d.ts.map +1 -0
  56. package/dist/disciplines/runner.js +35 -0
  57. package/dist/disciplines/runner.js.map +1 -0
  58. package/dist/registry/remote-gates.js +1 -1
  59. package/dist/registry/remote-gates.js.map +1 -1
  60. package/dist/sentinel/detect.d.ts +41 -0
  61. package/dist/sentinel/detect.d.ts.map +1 -0
  62. package/dist/sentinel/detect.js +122 -0
  63. package/dist/sentinel/detect.js.map +1 -0
  64. package/dist/sentinel/write.d.ts +54 -0
  65. package/dist/sentinel/write.d.ts.map +1 -0
  66. package/dist/sentinel/write.js +75 -0
  67. package/dist/sentinel/write.js.map +1 -0
  68. package/dist/shared/cnt-health.d.ts.map +1 -1
  69. package/dist/shared/cnt-health.js +12 -4
  70. package/dist/shared/cnt-health.js.map +1 -1
  71. package/dist/shared/config.d.ts +8 -0
  72. package/dist/shared/config.d.ts.map +1 -1
  73. package/dist/shared/config.js +23 -0
  74. package/dist/shared/config.js.map +1 -1
  75. package/dist/shared/project-gates-helpers.d.ts +9 -0
  76. package/dist/shared/project-gates-helpers.d.ts.map +1 -1
  77. package/dist/shared/project-gates-helpers.js +35 -0
  78. package/dist/shared/project-gates-helpers.js.map +1 -1
  79. package/dist/shared/result-utils.d.ts +27 -0
  80. package/dist/shared/result-utils.d.ts.map +1 -0
  81. package/dist/shared/result-utils.js +41 -0
  82. package/dist/shared/result-utils.js.map +1 -0
  83. package/dist/shared/types/config.d.ts +7 -1
  84. package/dist/shared/types/config.d.ts.map +1 -1
  85. package/dist/shared/types/gates.d.ts +28 -0
  86. package/dist/shared/types/gates.d.ts.map +1 -1
  87. package/dist/shared/types/project.d.ts +66 -0
  88. package/dist/shared/types/project.d.ts.map +1 -1
  89. package/dist/shared/types/project.js.map +1 -1
  90. package/dist/shared/types/verify.d.ts +51 -1
  91. package/dist/shared/types/verify.d.ts.map +1 -1
  92. package/dist/shared/types/verify.js +37 -1
  93. package/dist/shared/types/verify.js.map +1 -1
  94. package/dist/tools/advise-session-advisor.d.ts +16 -0
  95. package/dist/tools/advise-session-advisor.d.ts.map +1 -0
  96. package/dist/tools/advise-session-advisor.js +89 -0
  97. package/dist/tools/advise-session-advisor.js.map +1 -0
  98. package/dist/tools/advise-session-signals.d.ts +21 -0
  99. package/dist/tools/advise-session-signals.d.ts.map +1 -0
  100. package/dist/tools/advise-session-signals.js +113 -0
  101. package/dist/tools/advise-session-signals.js.map +1 -0
  102. package/dist/tools/advise-session.d.ts +22 -0
  103. package/dist/tools/advise-session.d.ts.map +1 -0
  104. package/dist/tools/advise-session.js +31 -0
  105. package/dist/tools/advise-session.js.map +1 -0
  106. package/dist/tools/change-request.d.ts +53 -0
  107. package/dist/tools/change-request.d.ts.map +1 -0
  108. package/dist/tools/change-request.js +375 -0
  109. package/dist/tools/change-request.js.map +1 -0
  110. package/dist/tools/check-cascade-contracts.d.ts +13 -0
  111. package/dist/tools/check-cascade-contracts.d.ts.map +1 -1
  112. package/dist/tools/check-cascade-contracts.js +73 -2
  113. package/dist/tools/check-cascade-contracts.js.map +1 -1
  114. package/dist/tools/check-cascade.d.ts +4 -3
  115. package/dist/tools/check-cascade.d.ts.map +1 -1
  116. package/dist/tools/check-cascade.js +30 -12
  117. package/dist/tools/check-cascade.js.map +1 -1
  118. package/dist/tools/check-spec-consistency.d.ts +25 -0
  119. package/dist/tools/check-spec-consistency.d.ts.map +1 -0
  120. package/dist/tools/check-spec-consistency.js +339 -0
  121. package/dist/tools/check-spec-consistency.js.map +1 -0
  122. package/dist/tools/check-t4.d.ts +54 -0
  123. package/dist/tools/check-t4.d.ts.map +1 -0
  124. package/dist/tools/check-t4.js +305 -0
  125. package/dist/tools/check-t4.js.map +1 -0
  126. package/dist/tools/close-cycle-helpers.d.ts +21 -2
  127. package/dist/tools/close-cycle-helpers.d.ts.map +1 -1
  128. package/dist/tools/close-cycle-helpers.js +66 -10
  129. package/dist/tools/close-cycle-helpers.js.map +1 -1
  130. package/dist/tools/close-cycle.d.ts +2 -2
  131. package/dist/tools/close-cycle.d.ts.map +1 -1
  132. package/dist/tools/close-cycle.js +342 -4
  133. package/dist/tools/close-cycle.js.map +1 -1
  134. package/dist/tools/consolidate-status.d.ts +112 -0
  135. package/dist/tools/consolidate-status.d.ts.map +1 -0
  136. package/dist/tools/consolidate-status.js +356 -0
  137. package/dist/tools/consolidate-status.js.map +1 -0
  138. package/dist/tools/executable-gates.d.ts +52 -0
  139. package/dist/tools/executable-gates.d.ts.map +1 -0
  140. package/dist/tools/executable-gates.js +332 -0
  141. package/dist/tools/executable-gates.js.map +1 -0
  142. package/dist/tools/forgecraft-dispatch-extended.d.ts.map +1 -1
  143. package/dist/tools/forgecraft-dispatch-extended.js +75 -0
  144. package/dist/tools/forgecraft-dispatch-extended.js.map +1 -1
  145. package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
  146. package/dist/tools/forgecraft-dispatch.js +21 -0
  147. package/dist/tools/forgecraft-dispatch.js.map +1 -1
  148. package/dist/tools/forgecraft-router.d.ts +8 -0
  149. package/dist/tools/forgecraft-router.d.ts.map +1 -1
  150. package/dist/tools/forgecraft-router.js +21 -1
  151. package/dist/tools/forgecraft-router.js.map +1 -1
  152. package/dist/tools/forgecraft-schema-params.d.ts +61 -4
  153. package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
  154. package/dist/tools/forgecraft-schema-params.js +95 -0
  155. package/dist/tools/forgecraft-schema-params.js.map +1 -1
  156. package/dist/tools/forgecraft-schema.d.ts +62 -5
  157. package/dist/tools/forgecraft-schema.d.ts.map +1 -1
  158. package/dist/tools/forgecraft-schema.js +24 -0
  159. package/dist/tools/forgecraft-schema.js.map +1 -1
  160. package/dist/tools/gate-violations.d.ts +59 -0
  161. package/dist/tools/gate-violations.d.ts.map +1 -0
  162. package/dist/tools/gate-violations.js +152 -0
  163. package/dist/tools/gate-violations.js.map +1 -0
  164. package/dist/tools/generate-adr.js +6 -6
  165. package/dist/tools/generate-adr.js.map +1 -1
  166. package/dist/tools/generate-env-probe.d.ts +49 -0
  167. package/dist/tools/generate-env-probe.d.ts.map +1 -0
  168. package/dist/tools/generate-env-probe.js +365 -0
  169. package/dist/tools/generate-env-probe.js.map +1 -0
  170. package/dist/tools/generate-harness.d.ts +52 -0
  171. package/dist/tools/generate-harness.d.ts.map +1 -0
  172. package/dist/tools/generate-harness.js +333 -0
  173. package/dist/tools/generate-harness.js.map +1 -0
  174. package/dist/tools/generate-roadmap.d.ts +1 -1
  175. package/dist/tools/generate-roadmap.d.ts.map +1 -1
  176. package/dist/tools/generate-roadmap.js +38 -4
  177. package/dist/tools/generate-roadmap.js.map +1 -1
  178. package/dist/tools/generate-session-prompt.d.ts +4 -4
  179. package/dist/tools/generate-session-prompt.d.ts.map +1 -1
  180. package/dist/tools/generate-session-prompt.js +66 -16
  181. package/dist/tools/generate-session-prompt.js.map +1 -1
  182. package/dist/tools/generate-slo-probe.d.ts +53 -0
  183. package/dist/tools/generate-slo-probe.d.ts.map +1 -0
  184. package/dist/tools/generate-slo-probe.js +366 -0
  185. package/dist/tools/generate-slo-probe.js.map +1 -0
  186. package/dist/tools/layer-status-gates.d.ts +24 -0
  187. package/dist/tools/layer-status-gates.d.ts.map +1 -0
  188. package/dist/tools/layer-status-gates.js +151 -0
  189. package/dist/tools/layer-status-gates.js.map +1 -0
  190. package/dist/tools/layer-status.d.ts +133 -0
  191. package/dist/tools/layer-status.d.ts.map +1 -0
  192. package/dist/tools/layer-status.js +593 -0
  193. package/dist/tools/layer-status.js.map +1 -0
  194. package/dist/tools/postcondition-coverage.d.ts +57 -0
  195. package/dist/tools/postcondition-coverage.d.ts.map +1 -0
  196. package/dist/tools/postcondition-coverage.js +256 -0
  197. package/dist/tools/postcondition-coverage.js.map +1 -0
  198. package/dist/tools/probe-runners.d.ts +21 -0
  199. package/dist/tools/probe-runners.d.ts.map +1 -0
  200. package/dist/tools/probe-runners.js +246 -0
  201. package/dist/tools/probe-runners.js.map +1 -0
  202. package/dist/tools/probe-templates.d.ts +27 -0
  203. package/dist/tools/probe-templates.d.ts.map +1 -0
  204. package/dist/tools/probe-templates.js +279 -0
  205. package/dist/tools/probe-templates.js.map +1 -0
  206. package/dist/tools/propose-session.d.ts +28 -0
  207. package/dist/tools/propose-session.d.ts.map +1 -0
  208. package/dist/tools/propose-session.js +333 -0
  209. package/dist/tools/propose-session.js.map +1 -0
  210. package/dist/tools/roadmap-builder.d.ts +34 -1
  211. package/dist/tools/roadmap-builder.d.ts.map +1 -1
  212. package/dist/tools/roadmap-builder.js +153 -11
  213. package/dist/tools/roadmap-builder.js.map +1 -1
  214. package/dist/tools/run-env-probe.d.ts +57 -0
  215. package/dist/tools/run-env-probe.d.ts.map +1 -0
  216. package/dist/tools/run-env-probe.js +270 -0
  217. package/dist/tools/run-env-probe.js.map +1 -0
  218. package/dist/tools/run-harness.d.ts +52 -0
  219. package/dist/tools/run-harness.d.ts.map +1 -0
  220. package/dist/tools/run-harness.js +279 -0
  221. package/dist/tools/run-harness.js.map +1 -0
  222. package/dist/tools/run-slo-probe.d.ts +50 -0
  223. package/dist/tools/run-slo-probe.d.ts.map +1 -0
  224. package/dist/tools/run-slo-probe.js +281 -0
  225. package/dist/tools/run-slo-probe.js.map +1 -0
  226. package/dist/tools/scaffold-writer.d.ts.map +1 -1
  227. package/dist/tools/scaffold-writer.js +4 -0
  228. package/dist/tools/scaffold-writer.js.map +1 -1
  229. package/dist/tools/session-prompt-builders.d.ts +20 -0
  230. package/dist/tools/session-prompt-builders.d.ts.map +1 -1
  231. package/dist/tools/session-prompt-builders.js +111 -14
  232. package/dist/tools/session-prompt-builders.js.map +1 -1
  233. package/dist/tools/session-prompt-sections.d.ts +4 -2
  234. package/dist/tools/session-prompt-sections.d.ts.map +1 -1
  235. package/dist/tools/session-prompt-sections.js +22 -10
  236. package/dist/tools/session-prompt-sections.js.map +1 -1
  237. package/dist/tools/setup-monitoring.d.ts +41 -0
  238. package/dist/tools/setup-monitoring.d.ts.map +1 -0
  239. package/dist/tools/setup-monitoring.js +364 -0
  240. package/dist/tools/setup-monitoring.js.map +1 -0
  241. package/dist/tools/verify-formatter.d.ts.map +1 -1
  242. package/dist/tools/verify-formatter.js +15 -1
  243. package/dist/tools/verify-formatter.js.map +1 -1
  244. package/dist/tools/verify.d.ts.map +1 -1
  245. package/dist/tools/verify.js +3 -0
  246. package/dist/tools/verify.js.map +1 -1
  247. package/package.json +11 -2
  248. package/templates/api/harness/uc-template.hurl +20 -0
  249. package/templates/docs-manifest.yaml +224 -0
  250. package/templates/game/harness/uc-template.sim.ts +29 -0
  251. package/templates/universal/claude-md-blocks/layer-navigation.md +20 -0
  252. package/templates/universal/claude-md-blocks/nfr-contracts.md +22 -0
  253. package/templates/universal/hooks.yaml +212 -20
  254. package/templates/web-react/harness/uc-template.spec.ts +35 -0
@@ -0,0 +1,305 @@
1
+ /**
2
+ * check_t4 tool handler.
3
+ *
4
+ * Surfaces pending T4 production signals at session start. Reads
5
+ * .forgecraft/t4-signals.json written by forgecraft-eye, formats each
6
+ * signal as a spec update candidate, and guides the practitioner through
7
+ * the diagnosis → spec update → rederivation cycle.
8
+ *
9
+ * Run at the start of any development session to check whether production
10
+ * has produced specification-level diagnoses since the last session.
11
+ */
12
+ import { z } from "zod";
13
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
14
+ import { join, resolve } from "node:path";
15
+ // ── Schema ───────────────────────────────────────────────────────────
16
+ export const checkT4Schema = z.object({
17
+ project_dir: z.string().describe("Absolute path to the project root."),
18
+ acknowledge: z
19
+ .string()
20
+ .optional()
21
+ .describe("Signal ID to mark as acknowledged (e.g., 'sig-20260424-143022-001')."),
22
+ resolve: z
23
+ .string()
24
+ .optional()
25
+ .describe("Signal ID to mark as resolved (spec update applied and deployed)."),
26
+ show_resolved: z
27
+ .boolean()
28
+ .optional()
29
+ .describe("Include resolved signals in output. Default: false."),
30
+ });
31
+ // ── Queue helpers ─────────────────────────────────────────────────────
32
+ function queuePath(projectDir) {
33
+ return join(projectDir, ".forgecraft", "t4-signals.json");
34
+ }
35
+ function readQueue(projectDir) {
36
+ const path = queuePath(projectDir);
37
+ if (!existsSync(path))
38
+ return { signals: [] };
39
+ try {
40
+ const raw = readFileSync(path, "utf-8");
41
+ return JSON.parse(raw);
42
+ }
43
+ catch {
44
+ return { signals: [] };
45
+ }
46
+ }
47
+ function writeQueue(projectDir, queue) {
48
+ const path = queuePath(projectDir);
49
+ const updated = {
50
+ ...queue,
51
+ last_updated: new Date().toISOString(),
52
+ };
53
+ writeFileSync(path, JSON.stringify(updated, null, 2), "utf-8");
54
+ }
55
+ // ── Formatters ────────────────────────────────────────────────────────
56
+ function severityIcon(severity) {
57
+ switch (severity) {
58
+ case "critical":
59
+ return "🔴";
60
+ case "warning":
61
+ return "🟡";
62
+ case "info":
63
+ return "🔵";
64
+ }
65
+ }
66
+ function statusIcon(status) {
67
+ switch (status) {
68
+ case "pending":
69
+ return "⏳ pending";
70
+ case "acknowledged":
71
+ return "👁 acknowledged";
72
+ case "resolved":
73
+ return "✅ resolved";
74
+ }
75
+ }
76
+ function isGitHubIssueSignal(signal) {
77
+ return (signal.environment === "github" &&
78
+ typeof signal.correlation_id === "string" &&
79
+ signal.correlation_id.startsWith("gh-issue-#"));
80
+ }
81
+ function githubIssueUrl(signal) {
82
+ if (!isGitHubIssueSignal(signal) ||
83
+ !signal.service ||
84
+ !signal.correlation_id) {
85
+ return undefined;
86
+ }
87
+ const num = signal.correlation_id.replace(/^gh-issue-#/, "");
88
+ return `https://github.com/${signal.service}/issues/${num}`;
89
+ }
90
+ function formatSignal(signal, index) {
91
+ const isIssue = isGitHubIssueSignal(signal);
92
+ const heading = isIssue
93
+ ? `### Issue ${index + 1}: ${severityIcon(signal.severity)} ${signal.exception_class} (${signal.correlation_id})`
94
+ : `### Signal ${index + 1}: ${severityIcon(signal.severity)} ${signal.exception_class}`;
95
+ const lines = [
96
+ heading,
97
+ "",
98
+ `**ID:** \`${signal.id}\` **Status:** ${statusIcon(signal.status)}`,
99
+ `**Timestamp:** ${signal.timestamp}${signal.service ? ` **Service:** ${signal.service}` : ""}`,
100
+ "",
101
+ ];
102
+ if (isIssue) {
103
+ const url = githubIssueUrl(signal);
104
+ if (url)
105
+ lines.push(`**Issue URL:** ${url}`, "");
106
+ lines.push("**Source:** Human-filed GitHub issue (treat as authoritative).", "**Protocol:** Follow the BIOISO branch convention in `CLAUDE.md` —", "create `bioiso/gen{N}/{domain}-{description}`, fix, PR, link to issue.", "");
107
+ }
108
+ else {
109
+ lines.push(`**GS Property Violated:** ${signal.gs_property}`, `**Spec Location:** \`${signal.spec_ref}\``, "");
110
+ }
111
+ lines.push("**Diagnosis:**", `> ${signal.diagnosis}`, "", "**Suggested Spec Update:**", `> ${signal.suggested_update}`, "");
112
+ if (!isIssue && signal.correlation_id) {
113
+ lines.push(`**Correlation ID:** \`${signal.correlation_id}\``, "");
114
+ }
115
+ if (signal.status === "pending") {
116
+ lines.push("**Actions:**", `- To acknowledge: \`forgecraft check_t4 acknowledge="${signal.id}"\``, `- To resolve after ${isIssue ? "PR merged + deployed" : "spec update"}: \`forgecraft check_t4 resolve="${signal.id}"\``, "");
117
+ }
118
+ lines.push("---", "");
119
+ return lines;
120
+ }
121
+ function buildChronicleQuery(projectName) {
122
+ return [
123
+ "## Chronicle Query (if configured)",
124
+ "",
125
+ "If forgecraft-eye is writing to Chronicle, retrieve signals with:",
126
+ "```",
127
+ "chronicle recall",
128
+ ` query: "t4 signal specification violation"`,
129
+ ` tags: ["t4-signal", "${projectName}"]`,
130
+ ' memory_types: ["architectural"]',
131
+ ' tiers: ["core"]',
132
+ "```",
133
+ "",
134
+ ].join("\n");
135
+ }
136
+ // ── Handler ───────────────────────────────────────────────────────────
137
+ export async function checkT4Handler(args) {
138
+ const projectDir = resolve(args.project_dir);
139
+ const showResolved = args.show_resolved ?? false;
140
+ const queue = readQueue(projectDir);
141
+ const projectName = projectDir.split(/[\\/]/).pop() ?? "project";
142
+ // Handle acknowledge action
143
+ if (args.acknowledge) {
144
+ const signal = queue.signals.find((s) => s.id === args.acknowledge);
145
+ if (!signal) {
146
+ return {
147
+ content: [
148
+ {
149
+ type: "text",
150
+ text: `Signal \`${args.acknowledge}\` not found in queue.`,
151
+ },
152
+ ],
153
+ };
154
+ }
155
+ signal.status = "acknowledged";
156
+ signal.acknowledged_at = new Date().toISOString();
157
+ writeQueue(projectDir, queue);
158
+ return {
159
+ content: [
160
+ {
161
+ type: "text",
162
+ text: [
163
+ `✅ Signal \`${args.acknowledge}\` marked as acknowledged.`,
164
+ "",
165
+ "The diagnosis is noted. After updating the specification and redeploying:",
166
+ `\`forgecraft check_t4 resolve="${args.acknowledge}"\``,
167
+ ].join("\n"),
168
+ },
169
+ ],
170
+ };
171
+ }
172
+ // Handle resolve action
173
+ if (args.resolve) {
174
+ const signal = queue.signals.find((s) => s.id === args.resolve);
175
+ if (!signal) {
176
+ return {
177
+ content: [
178
+ {
179
+ type: "text",
180
+ text: `Signal \`${args.resolve}\` not found in queue.`,
181
+ },
182
+ ],
183
+ };
184
+ }
185
+ signal.status = "resolved";
186
+ signal.resolved_at = new Date().toISOString();
187
+ writeQueue(projectDir, queue);
188
+ return {
189
+ content: [
190
+ {
191
+ type: "text",
192
+ text: [
193
+ `✅ Signal \`${args.resolve}\` marked as resolved.`,
194
+ "",
195
+ "The T4 loop is complete for this signal:",
196
+ "production exception → spec diagnosis → spec update → rederivation → verified deployment.",
197
+ ].join("\n"),
198
+ },
199
+ ],
200
+ };
201
+ }
202
+ // No queue file at all
203
+ if (!existsSync(queuePath(projectDir))) {
204
+ return {
205
+ content: [
206
+ {
207
+ type: "text",
208
+ text: [
209
+ "## T4 Signal Check",
210
+ "",
211
+ "No signal queue found at `.forgecraft/t4-signals.json`.",
212
+ "",
213
+ "This means either:",
214
+ "- forgecraft-eye has not yet been deployed to production",
215
+ "- No qualifying exceptions have fired since deployment",
216
+ "- The queue was already cleared",
217
+ "",
218
+ "## Setup forgecraft-eye",
219
+ "",
220
+ "1. Generate the monitoring contract and eye config:",
221
+ " ```",
222
+ " forgecraft setup_monitoring",
223
+ " ```",
224
+ "",
225
+ "2. Install the diagnostic agent:",
226
+ " ```bash",
227
+ " npm install forgecraft-eye",
228
+ " ```",
229
+ "",
230
+ "3. Pipe production logs through it:",
231
+ " ```bash",
232
+ " my-service 2>&1 | npx forgecraft-eye",
233
+ " ```",
234
+ " Or use programmatically:",
235
+ " ```typescript",
236
+ " import { runEyeFromConfig } from 'forgecraft-eye';",
237
+ " await runEyeFromConfig(projectDir);",
238
+ " ```",
239
+ "",
240
+ "4. Signals are written to `.forgecraft/t4-signals.json`.",
241
+ " Run `forgecraft check_t4` at the next session start.",
242
+ "",
243
+ "npm: https://www.npmjs.com/package/forgecraft-eye",
244
+ "Source: https://github.com/jghiringhelli/forgecraft-eye",
245
+ "",
246
+ buildChronicleQuery(projectName),
247
+ ].join("\n"),
248
+ },
249
+ ],
250
+ };
251
+ }
252
+ const visibleSignals = showResolved
253
+ ? queue.signals
254
+ : queue.signals.filter((s) => s.status !== "resolved");
255
+ const pending = queue.signals.filter((s) => s.status === "pending");
256
+ const acknowledged = queue.signals.filter((s) => s.status === "acknowledged");
257
+ const resolved = queue.signals.filter((s) => s.status === "resolved");
258
+ const critical = pending.filter((s) => s.severity === "critical");
259
+ const lines = [
260
+ "## T4 Signal Check",
261
+ "",
262
+ `**Queue:** ${pending.length} pending / ${acknowledged.length} acknowledged / ${resolved.length} resolved`,
263
+ ];
264
+ if (queue.last_updated) {
265
+ lines.push(`**Last updated:** ${queue.last_updated}`);
266
+ }
267
+ lines.push("");
268
+ if (critical.length > 0) {
269
+ lines.push(`> 🔴 **${critical.length} critical signal${critical.length === 1 ? "" : "s"} require immediate spec attention.**`, "");
270
+ }
271
+ if (visibleSignals.length === 0) {
272
+ lines.push("No pending signals. Production is behaving within specification.", "", resolved.length > 0
273
+ ? `(${resolved.length} resolved signals hidden. Pass \`show_resolved: true\` to display.)`
274
+ : "");
275
+ }
276
+ else {
277
+ lines.push("The following production signals require specification updates.", "Each signal represents a gap in the specification — not a code bug.", "Update the spec first; the AI derives the fix.", "");
278
+ for (const [i, signal] of visibleSignals.entries()) {
279
+ lines.push(...formatSignal(signal, i));
280
+ }
281
+ }
282
+ // Monitoring spec status
283
+ const monitoringSpecPath = join(projectDir, "docs", "monitoring-spec.md");
284
+ if (!existsSync(monitoringSpecPath)) {
285
+ lines.push("---", "", "⚠️ `docs/monitoring-spec.md` not found.", "Run `forgecraft setup_monitoring` to generate the production contract.", "");
286
+ }
287
+ lines.push(buildChronicleQuery(projectName));
288
+ // Cycle guidance if signals present
289
+ if (pending.length > 0) {
290
+ const pendingIssues = pending.filter(isGitHubIssueSignal);
291
+ const pendingRuntime = pending.filter((s) => !isGitHubIssueSignal(s));
292
+ if (pendingRuntime.length > 0) {
293
+ lines.push("## The T4 → T1 Cycle (runtime signals)", "", "For each pending runtime signal:", "1. Read the diagnosis and suggested spec update above", "2. Open the referenced spec file (`spec_ref`) and apply the update", "3. Run `forgecraft generate_session_prompt` to derive the fix from the updated spec", "4. Let the AI derive the code change — do not patch directly", "5. Run the harness: `forgecraft run_harness`", '6. Deploy and verify the T4 loop closed: `forgecraft check_t4 resolve="<id>"`', "");
294
+ }
295
+ if (pendingIssues.length > 0) {
296
+ lines.push("## BIOISO Issue Workflow (GitHub issue signals)", "", "Issue signals come from human-filed GitHub issues — treat as authoritative.", "For each pending issue signal:", "1. Read the issue (URL above) for full reproduction context", "2. Open the referenced files in the issue body — verify against current code", "3. Create a branch following the BIOISO convention: `bioiso/gen{N}/{domain}-{description}`", "4. Apply the fix; run the project's test suite + type check", "5. Open a PR linking the issue (`Closes #N`); wait for human review", '6. After merge + deploy: `forgecraft check_t4 resolve="<id>"`', "", "Cross-reference: `CLAUDE.md` *Invellum BIOISO Protocol* section (or your project's equivalent).");
297
+ }
298
+ }
299
+ return {
300
+ content: [
301
+ { type: "text", text: lines.filter((l) => l !== undefined).join("\n") },
302
+ ],
303
+ };
304
+ }
305
+ //# sourceMappingURL=check-t4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-t4.js","sourceRoot":"","sources":["../../src/tools/check-t4.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,15 @@ export interface CloseCycleResult {
34
34
  /** Experiment id when experiment mode is active — gates are auto-contributed */
35
35
  readonly experimentId?: string;
36
36
  }
37
+ /** A single item parsed from docs/roadmap.md. */
38
+ export interface RoadmapItem {
39
+ readonly id: string;
40
+ readonly title: string;
41
+ /** IDs that must be status:done before this item can be started. Empty array = no deps. */
42
+ readonly dependsOn: ReadonlyArray<string>;
43
+ readonly status: "pending" | "in-progress" | "done";
44
+ readonly promptPath: string;
45
+ }
37
46
  /**
38
47
  * Derive the test command from project configuration files.
39
48
  * Returns undefined when no recognizable project file is found.
@@ -52,10 +61,19 @@ export declare function deriveTestCommand(projectRoot: string): string | undefin
52
61
  */
53
62
  export declare function findCodeseekerGates(projectRoot: string): string[];
54
63
  /**
55
- * Find the first pending roadmap item from docs/roadmap.md.
64
+ * Parse all roadmap items from docs/roadmap.md content.
65
+ * Handles both the legacy 4-column format (ID | Title | Status | Prompt)
66
+ * and the current 5-column format (ID | Title | Depends On | Status | Prompt).
67
+ *
68
+ * @param content - Raw roadmap.md file content
69
+ * @returns Parsed items in document order
70
+ */
71
+ export declare function parseRoadmapItems(content: string): ReadonlyArray<RoadmapItem>;
72
+ /**
73
+ * Find the first pending roadmap item whose DAG dependencies are all done.
56
74
  *
57
75
  * @param projectDir - Absolute path to project root
58
- * @returns The first pending item ID and title, or null if none found
76
+ * @returns The first unblocked pending item, or null if none exists
59
77
  */
60
78
  export declare function findNextRoadmapItem(projectDir: string): {
61
79
  readonly id: string;
@@ -63,6 +81,7 @@ export declare function findNextRoadmapItem(projectDir: string): {
63
81
  } | null;
64
82
  /**
65
83
  * Mark a roadmap item as done in docs/roadmap.md.
84
+ * Works for both 4-column (legacy) and 5-column (current) formats.
66
85
  *
67
86
  * @param projectDir - Absolute path to project root
68
87
  * @param itemId - Roadmap item ID, e.g. "RM-001"
@@ -1 +1 @@
1
- {"version":3,"file":"close-cycle-helpers.d.ts","sourceRoot":"","sources":["../../src/tools/close-cycle-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,eAAe,CAAC,EAAE;QACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,gFAAgF;IAChF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAID;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkCzE;AA6CD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CASjE;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,GACjB;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUxD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAc5E;AAID;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA8FvE"}
1
+ {"version":3,"file":"close-cycle-helpers.d.ts","sourceRoot":"","sources":["../../src/tools/close-cycle-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,eAAe,CAAC,EAAE;QACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,gFAAgF;IAChF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAID,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAID;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAsCzE;AA6CD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CASjE;AAID;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CA4C7E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,GACjB;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAcxD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAU5E;AAID;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA8FvE"}
@@ -39,6 +39,9 @@ export function deriveTestCommand(projectRoot) {
39
39
  // Fall through
40
40
  }
41
41
  }
42
+ if (existsSync(join(projectRoot, "Cargo.toml"))) {
43
+ return "cargo test";
44
+ }
42
45
  if (existsSync(join(projectRoot, "go.mod"))) {
43
46
  return "go test ./...";
44
47
  }
@@ -96,23 +99,78 @@ export function findCodeseekerGates(projectRoot) {
96
99
  }
97
100
  // ── Roadmap Helpers ──────────────────────────────────────────────────
98
101
  /**
99
- * Find the first pending roadmap item from docs/roadmap.md.
102
+ * Parse all roadmap items from docs/roadmap.md content.
103
+ * Handles both the legacy 4-column format (ID | Title | Status | Prompt)
104
+ * and the current 5-column format (ID | Title | Depends On | Status | Prompt).
105
+ *
106
+ * @param content - Raw roadmap.md file content
107
+ * @returns Parsed items in document order
108
+ */
109
+ export function parseRoadmapItems(content) {
110
+ const items = [];
111
+ for (const line of content.split("\n")) {
112
+ const cells = line
113
+ .split("|")
114
+ .map((c) => c.trim())
115
+ .filter((c) => c !== "");
116
+ if (cells.length < 4)
117
+ continue;
118
+ const id = cells[0];
119
+ if (!/^RM-\d+$/.test(id))
120
+ continue;
121
+ let dependsOnRaw;
122
+ let statusRaw;
123
+ let promptPath;
124
+ if (cells.length >= 5) {
125
+ // 5-column: ID | Title | Depends On | Status | Prompt
126
+ dependsOnRaw = cells[2];
127
+ statusRaw = cells[3];
128
+ promptPath = cells[4];
129
+ }
130
+ else {
131
+ // 4-column legacy: ID | Title | Status | Prompt
132
+ dependsOnRaw = "—";
133
+ statusRaw = cells[2];
134
+ promptPath = cells[3];
135
+ }
136
+ const status = ["pending", "in-progress", "done"].includes(statusRaw)
137
+ ? statusRaw
138
+ : "pending";
139
+ const dependsOn = dependsOnRaw === "—" || dependsOnRaw === ""
140
+ ? []
141
+ : dependsOnRaw
142
+ .split(",")
143
+ .map((d) => d.trim())
144
+ .filter((d) => d.length > 0);
145
+ items.push({ id, title: cells[1], dependsOn, status, promptPath });
146
+ }
147
+ return items;
148
+ }
149
+ /**
150
+ * Find the first pending roadmap item whose DAG dependencies are all done.
100
151
  *
101
152
  * @param projectDir - Absolute path to project root
102
- * @returns The first pending item ID and title, or null if none found
153
+ * @returns The first unblocked pending item, or null if none exists
103
154
  */
104
155
  export function findNextRoadmapItem(projectDir) {
105
156
  const roadmapPath = join(projectDir, "docs", "roadmap.md");
106
157
  if (!existsSync(roadmapPath))
107
158
  return null;
108
159
  const content = readFileSync(roadmapPath, "utf-8");
109
- const match = content.match(/\|\s*(RM-\d+)\s*\|\s*([^|]+)\s*\|\s*pending\s*\|/);
110
- if (!match)
111
- return null;
112
- return { id: match[1].trim(), title: match[2].trim() };
160
+ const items = parseRoadmapItems(content);
161
+ const doneIds = new Set(items.filter((i) => i.status === "done").map((i) => i.id));
162
+ for (const item of items) {
163
+ if (item.status !== "pending")
164
+ continue;
165
+ const blocked = item.dependsOn.some((dep) => !doneIds.has(dep));
166
+ if (!blocked)
167
+ return { id: item.id, title: item.title };
168
+ }
169
+ return null;
113
170
  }
114
171
  /**
115
172
  * Mark a roadmap item as done in docs/roadmap.md.
173
+ * Works for both 4-column (legacy) and 5-column (current) formats.
116
174
  *
117
175
  * @param projectDir - Absolute path to project root
118
176
  * @param itemId - Roadmap item ID, e.g. "RM-001"
@@ -123,11 +181,9 @@ export function markRoadmapItemDone(projectDir, itemId) {
123
181
  return;
124
182
  const content = readFileSync(roadmapPath, "utf-8");
125
183
  const escapedId = itemId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
126
- const rowRegex = new RegExp(`(\\|\\s*${escapedId}\\s*\\|[^|]+\\|\\s*)pending(\\s*\\|)`, "g");
127
- const updated = content.replace(rowRegex, "$1done$2");
128
- if (updated !== content) {
184
+ const updated = content.replace(new RegExp(`(\\|\\s*${escapedId}\\s*\\|[^\\n]*)\\bpending\\b`, "g"), "$1done");
185
+ if (updated !== content)
129
186
  writeFileSync(roadmapPath, updated, "utf-8");
130
- }
131
187
  }
132
188
  // ── Result Formatting ────────────────────────────────────────────────
133
189
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"close-cycle-helpers.js","sourceRoot":"","sources":["../../src/tools/close-cycle-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"close-cycle-helpers.js","sourceRoot":"","sources":["../../src/tools/close-cycle-helpers.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,8 @@
8
8
  * 4. Calls contributeGates() for generalizable gates and promotes them
9
9
  * 5. Detects CodeSeeker gates that need to be run
10
10
  */
11
- export type { CloseCycleOptions, CloseCycleResult } from "./close-cycle-helpers.js";
12
- export { deriveTestCommand, findNextRoadmapItem, markRoadmapItemDone, formatCloseCycleResult, findCodeseekerGates, } from "./close-cycle-helpers.js";
11
+ export type { CloseCycleOptions, CloseCycleResult, } from "./close-cycle-helpers.js";
12
+ export { deriveTestCommand, findNextRoadmapItem, parseRoadmapItems, markRoadmapItemDone, formatCloseCycleResult, findCodeseekerGates, } from "./close-cycle-helpers.js";
13
13
  export { suggestVersionBump, appendChangelogEntry, readCommitsSinceLastTag, } from "./close-cycle-versioning.js";
14
14
  /**
15
15
  * Run the close-cycle gate logic.
@@ -1 +1 @@
1
- {"version":3,"file":"close-cycle.d.ts","sourceRoot":"","sources":["../../src/tools/close-cycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkCH,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAIrC;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,OAAO,0BAA0B,EAAE,iBAAiB,GAC5D,OAAO,CAAC,OAAO,0BAA0B,EAAE,gBAAgB,CAAC,CAkK9D;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAwB7D"}
1
+ {"version":3,"file":"close-cycle.d.ts","sourceRoot":"","sources":["../../src/tools/close-cycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoCH,YAAY,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAIrC;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,OAAO,0BAA0B,EAAE,iBAAiB,GAC5D,OAAO,CAAC,OAAO,0BAA0B,EAAE,gBAAgB,CAAC,CA4L9D;AA6ZD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6C7D"}