@nac3/forge-cli 1.18.0 → 1.19.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 (181) hide show
  1. package/dist/bin/yf.d.ts.map +1 -1
  2. package/dist/bin/yf.js +4 -0
  3. package/dist/bin/yf.js.map +1 -1
  4. package/dist/chat/doctrine_digest.d.ts.map +1 -1
  5. package/dist/chat/doctrine_digest.js +11 -0
  6. package/dist/chat/doctrine_digest.js.map +1 -1
  7. package/dist/chat/panel.d.ts.map +1 -1
  8. package/dist/chat/panel.js +235 -2
  9. package/dist/chat/panel.js.map +1 -1
  10. package/dist/chat/project_slug.d.ts.map +1 -1
  11. package/dist/chat/project_slug.js +29 -0
  12. package/dist/chat/project_slug.js.map +1 -1
  13. package/dist/chat/server.d.ts.map +1 -1
  14. package/dist/chat/server.js +108 -2
  15. package/dist/chat/server.js.map +1 -1
  16. package/dist/chat/tools/evidence.d.ts +30 -0
  17. package/dist/chat/tools/evidence.d.ts.map +1 -0
  18. package/dist/chat/tools/evidence.js +74 -0
  19. package/dist/chat/tools/evidence.js.map +1 -0
  20. package/dist/chat/tools/pending.d.ts +3 -0
  21. package/dist/chat/tools/pending.d.ts.map +1 -1
  22. package/dist/chat/tools/pending.js +71 -1
  23. package/dist/chat/tools/pending.js.map +1 -1
  24. package/dist/chat/tools/urazuke.d.ts +22 -0
  25. package/dist/chat/tools/urazuke.d.ts.map +1 -0
  26. package/dist/chat/tools/urazuke.js +54 -0
  27. package/dist/chat/tools/urazuke.js.map +1 -0
  28. package/dist/chat/tools/workflow.d.ts.map +1 -1
  29. package/dist/chat/tools/workflow.js +5 -3
  30. package/dist/chat/tools/workflow.js.map +1 -1
  31. package/dist/chat/tools.d.ts.map +1 -1
  32. package/dist/chat/tools.js +22 -0
  33. package/dist/chat/tools.js.map +1 -1
  34. package/dist/chat/urazuke_section.d.ts +8 -0
  35. package/dist/chat/urazuke_section.d.ts.map +1 -0
  36. package/dist/chat/urazuke_section.js +42 -0
  37. package/dist/chat/urazuke_section.js.map +1 -0
  38. package/dist/commands/pending.d.ts +1 -0
  39. package/dist/commands/pending.d.ts.map +1 -1
  40. package/dist/commands/pending.js +82 -8
  41. package/dist/commands/pending.js.map +1 -1
  42. package/dist/commands/start.d.ts +60 -0
  43. package/dist/commands/start.d.ts.map +1 -0
  44. package/dist/commands/start.js +265 -0
  45. package/dist/commands/start.js.map +1 -0
  46. package/dist/commands/urazuke.d.ts +17 -0
  47. package/dist/commands/urazuke.d.ts.map +1 -0
  48. package/dist/commands/urazuke.js +541 -0
  49. package/dist/commands/urazuke.js.map +1 -0
  50. package/dist/commands/workflow.js +4 -4
  51. package/dist/commands/workflow.js.map +1 -1
  52. package/dist/core/brain_config.d.ts +4 -0
  53. package/dist/core/brain_config.d.ts.map +1 -1
  54. package/dist/core/brain_config.js +2 -0
  55. package/dist/core/brain_config.js.map +1 -1
  56. package/dist/core/forge_embed.d.ts.map +1 -1
  57. package/dist/core/forge_embed.js +10 -0
  58. package/dist/core/forge_embed.js.map +1 -1
  59. package/dist/core/native_dialogs.d.ts +13 -0
  60. package/dist/core/native_dialogs.d.ts.map +1 -0
  61. package/dist/core/native_dialogs.js +111 -0
  62. package/dist/core/native_dialogs.js.map +1 -0
  63. package/dist/core/projects.d.ts +6 -0
  64. package/dist/core/projects.d.ts.map +1 -1
  65. package/dist/core/projects.js +1 -1
  66. package/dist/core/projects.js.map +1 -1
  67. package/dist/docs/doctrine/urazuke.md +38 -0
  68. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  69. package/dist/nac3/internal_manifest.js +96 -2
  70. package/dist/nac3/internal_manifest.js.map +1 -1
  71. package/dist/pending/store.d.ts +8 -1
  72. package/dist/pending/store.d.ts.map +1 -1
  73. package/dist/pending/store.js +8 -1
  74. package/dist/pending/store.js.map +1 -1
  75. package/dist/pending/types.d.ts +41 -1
  76. package/dist/pending/types.d.ts.map +1 -1
  77. package/dist/pending/types.js.map +1 -1
  78. package/dist/urazuke/catalog.d.ts +109 -0
  79. package/dist/urazuke/catalog.d.ts.map +1 -0
  80. package/dist/urazuke/catalog.js +459 -0
  81. package/dist/urazuke/catalog.js.map +1 -0
  82. package/dist/urazuke/close_gate.d.ts +36 -0
  83. package/dist/urazuke/close_gate.d.ts.map +1 -0
  84. package/dist/urazuke/close_gate.js +48 -0
  85. package/dist/urazuke/close_gate.js.map +1 -0
  86. package/dist/urazuke/current.d.ts +55 -0
  87. package/dist/urazuke/current.d.ts.map +1 -0
  88. package/dist/urazuke/current.js +125 -0
  89. package/dist/urazuke/current.js.map +1 -0
  90. package/dist/urazuke/cycle.d.ts +91 -0
  91. package/dist/urazuke/cycle.d.ts.map +1 -0
  92. package/dist/urazuke/cycle.js +310 -0
  93. package/dist/urazuke/cycle.js.map +1 -0
  94. package/dist/urazuke/enabled.d.ts +31 -0
  95. package/dist/urazuke/enabled.d.ts.map +1 -0
  96. package/dist/urazuke/enabled.js +51 -0
  97. package/dist/urazuke/enabled.js.map +1 -0
  98. package/dist/urazuke/evidence.d.ts +45 -0
  99. package/dist/urazuke/evidence.d.ts.map +1 -0
  100. package/dist/urazuke/evidence.js +264 -0
  101. package/dist/urazuke/evidence.js.map +1 -0
  102. package/dist/urazuke/gate.d.ts +68 -0
  103. package/dist/urazuke/gate.d.ts.map +1 -0
  104. package/dist/urazuke/gate.js +249 -0
  105. package/dist/urazuke/gate.js.map +1 -0
  106. package/dist/urazuke/probes.d.ts +13 -0
  107. package/dist/urazuke/probes.d.ts.map +1 -0
  108. package/dist/urazuke/probes.js +87 -0
  109. package/dist/urazuke/probes.js.map +1 -0
  110. package/dist/urazuke/prompts.generated.d.ts +12 -0
  111. package/dist/urazuke/prompts.generated.d.ts.map +1 -0
  112. package/dist/urazuke/prompts.generated.js +135 -0
  113. package/dist/urazuke/prompts.generated.js.map +1 -0
  114. package/dist/urazuke/prompts_client.d.ts +44 -0
  115. package/dist/urazuke/prompts_client.d.ts.map +1 -0
  116. package/dist/urazuke/prompts_client.js +151 -0
  117. package/dist/urazuke/prompts_client.js.map +1 -0
  118. package/dist/urazuke/quality.d.ts +99 -0
  119. package/dist/urazuke/quality.d.ts.map +1 -0
  120. package/dist/urazuke/quality.js +269 -0
  121. package/dist/urazuke/quality.js.map +1 -0
  122. package/dist/urazuke/receipts.d.ts +90 -0
  123. package/dist/urazuke/receipts.d.ts.map +1 -0
  124. package/dist/urazuke/receipts.js +171 -0
  125. package/dist/urazuke/receipts.js.map +1 -0
  126. package/dist/urazuke/report.d.ts +23 -0
  127. package/dist/urazuke/report.d.ts.map +1 -0
  128. package/dist/urazuke/report.js +62 -0
  129. package/dist/urazuke/report.js.map +1 -0
  130. package/dist/urazuke/retro.d.ts +52 -0
  131. package/dist/urazuke/retro.d.ts.map +1 -0
  132. package/dist/urazuke/retro.js +145 -0
  133. package/dist/urazuke/retro.js.map +1 -0
  134. package/dist/urazuke/section.d.ts +43 -0
  135. package/dist/urazuke/section.d.ts.map +1 -0
  136. package/dist/urazuke/section.js +64 -0
  137. package/dist/urazuke/section.js.map +1 -0
  138. package/dist/urazuke/stacks.d.ts +42 -0
  139. package/dist/urazuke/stacks.d.ts.map +1 -0
  140. package/dist/urazuke/stacks.js +264 -0
  141. package/dist/urazuke/stacks.js.map +1 -0
  142. package/dist/urazuke/workflow.d.ts +23 -0
  143. package/dist/urazuke/workflow.d.ts.map +1 -0
  144. package/dist/urazuke/workflow.js +64 -0
  145. package/dist/urazuke/workflow.js.map +1 -0
  146. package/dist/version.d.ts +1 -1
  147. package/dist/version.js +1 -1
  148. package/dist/workflow/config.d.ts +9 -4
  149. package/dist/workflow/config.d.ts.map +1 -1
  150. package/dist/workflow/config.js +4 -1
  151. package/dist/workflow/config.js.map +1 -1
  152. package/dist/workflow/definitions.d.ts +20 -4
  153. package/dist/workflow/definitions.d.ts.map +1 -1
  154. package/dist/workflow/definitions.js +16 -3
  155. package/dist/workflow/definitions.js.map +1 -1
  156. package/dist/workflow/instances.d.ts.map +1 -1
  157. package/dist/workflow/instances.js +6 -0
  158. package/dist/workflow/instances.js.map +1 -1
  159. package/dist/workflow/orchestrator.d.ts +10 -1
  160. package/dist/workflow/orchestrator.d.ts.map +1 -1
  161. package/dist/workflow/orchestrator.js +54 -7
  162. package/dist/workflow/orchestrator.js.map +1 -1
  163. package/dist/workflow/select.d.ts +5 -1
  164. package/dist/workflow/select.d.ts.map +1 -1
  165. package/dist/workflow/select.js +16 -5
  166. package/dist/workflow/select.js.map +1 -1
  167. package/dist/workflow/state.d.ts +3 -2
  168. package/dist/workflow/state.d.ts.map +1 -1
  169. package/dist/workflow/state.js.map +1 -1
  170. package/docs/doctrine/urazuke.md +38 -0
  171. package/package.json +18 -20
  172. package/src/i18n/catalogs/ar.json +550 -542
  173. package/src/i18n/catalogs/de.json +550 -542
  174. package/src/i18n/catalogs/en.json +550 -542
  175. package/src/i18n/catalogs/es.json +550 -542
  176. package/src/i18n/catalogs/fr.json +550 -542
  177. package/src/i18n/catalogs/hi.json +550 -542
  178. package/src/i18n/catalogs/it.json +550 -542
  179. package/src/i18n/catalogs/ja.json +550 -542
  180. package/src/i18n/catalogs/pt.json +550 -542
  181. package/src/i18n/catalogs/zh.json +550 -542
@@ -0,0 +1,249 @@
1
+ /**
2
+ * URAZUKE GATE -- the mechanical evaluator of each step.
3
+ *
4
+ * One rule: the evaluator never asks the brain. It reads the project root
5
+ * (artifacts by path, CI definitions), the Forge registries (sizing,
6
+ * pendings, evidence receipts) and nothing else. A step is GREEN when every
7
+ * check passes, RED when at least one fails, and OWNER when the method
8
+ * leaves the verification to the owner (nothing mechanical to look at).
9
+ *
10
+ * The result is consumed by three places: the prompt section (so the brain
11
+ * knows what is red BEFORE it claims a step is done), the close gate of
12
+ * workflow tasks (a red step cannot be closed without a written override)
13
+ * and the CLI / panel (so the owner reads the ladder without reading code).
14
+ *
15
+ * ASCII-only.
16
+ */
17
+ import fs from 'node:fs/promises';
18
+ import path from 'node:path';
19
+ import { URAZUKE_STEPS, URAZUKE_LEGACY_STATIONS, } from './catalog.js';
20
+ const DEFAULT_MIN_BYTES = 200;
21
+ const DAY_MS = 24 * 60 * 60 * 1000;
22
+ /* ---------------- filesystem helpers ---------------- */
23
+ async function listDir(dir) {
24
+ try {
25
+ return await fs.readdir(dir);
26
+ }
27
+ catch {
28
+ return [];
29
+ }
30
+ }
31
+ /** Resolve an artifact path (maybe with a `*` in the basename) to the
32
+ * matching files, newest first. */
33
+ async function resolveArtifact(root, rel) {
34
+ const dir = path.join(root, path.dirname(rel));
35
+ const base = path.basename(rel);
36
+ const names = base.includes('*')
37
+ ? (await listDir(dir)).filter((n) => globMatch(base, n))
38
+ : [base];
39
+ const out = [];
40
+ for (const n of names) {
41
+ const f = path.join(dir, n);
42
+ try {
43
+ const st = await fs.stat(f);
44
+ if (st.isFile())
45
+ out.push({ file: f, mtime: st.mtimeMs, size: st.size });
46
+ }
47
+ catch { /* missing */ }
48
+ }
49
+ out.sort((a, b) => b.mtime - a.mtime);
50
+ return out;
51
+ }
52
+ function globMatch(pattern, name) {
53
+ const re = new RegExp('^' + pattern.split('*').map(escapeRe).join('.*') + '$', 'i');
54
+ return re.test(name);
55
+ }
56
+ function escapeRe(s) {
57
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
58
+ }
59
+ async function checkArtifact(root, a, now) {
60
+ const label = a.label ?? a.path;
61
+ const matches = await resolveArtifact(root, a.path);
62
+ const newest = matches[0];
63
+ if (!newest)
64
+ return { label, status: 'fail', detail: a.path + ' missing' };
65
+ const minBytes = a.min_bytes ?? DEFAULT_MIN_BYTES;
66
+ if (newest.size < minBytes) {
67
+ return { label, status: 'fail', detail: path.relative(root, newest.file) + ' is a stub (' + newest.size + ' bytes < ' + minBytes + ')' };
68
+ }
69
+ if (a.fresh_days != null) {
70
+ const ageDays = (now - newest.mtime) / DAY_MS;
71
+ if (ageDays > a.fresh_days) {
72
+ return { label, status: 'fail', detail: path.relative(root, newest.file) + ' is ' + Math.floor(ageDays) + ' days old (> ' + a.fresh_days + ')' };
73
+ }
74
+ }
75
+ if (a.must_contain?.length) {
76
+ let body = '';
77
+ try {
78
+ body = await fs.readFile(newest.file, 'utf8');
79
+ }
80
+ catch {
81
+ body = '';
82
+ }
83
+ for (const src of a.must_contain) {
84
+ if (!new RegExp(src, 'i').test(body)) {
85
+ return { label, status: 'fail', detail: path.relative(root, newest.file) + ' does not mention /' + src + '/' };
86
+ }
87
+ }
88
+ }
89
+ let notice = '';
90
+ if (a.should_contain?.length) {
91
+ let body = '';
92
+ try {
93
+ body = await fs.readFile(newest.file, 'utf8');
94
+ }
95
+ catch {
96
+ body = '';
97
+ }
98
+ for (const src of a.should_contain) {
99
+ if (!new RegExp(src, 'im').test(body)) {
100
+ notice = ' -- aviso: no declara /' + src.replace(/\\\\/g, '\\') + '/ (D-040: el informe deberia empezar diciendo quien lo hizo, sesion y modelo)';
101
+ break;
102
+ }
103
+ }
104
+ }
105
+ return { label, status: 'ok', detail: path.relative(root, newest.file) + ' (' + newest.size + ' bytes)' + notice };
106
+ }
107
+ /** CI definition present: GitHub Actions, GitLab, Azure, Jenkins, CircleCI,
108
+ * Bitbucket, or a generic ci/ directory. */
109
+ export async function detectCi(root) {
110
+ const gha = (await listDir(path.join(root, '.github', 'workflows'))).filter((n) => /\.ya?ml$/i.test(n));
111
+ if (gha.length)
112
+ return { ok: true, detail: '.github/workflows/' + gha[0] + (gha.length > 1 ? ' (+' + (gha.length - 1) + ')' : '') };
113
+ for (const f of ['.gitlab-ci.yml', 'azure-pipelines.yml', 'Jenkinsfile', 'bitbucket-pipelines.yml', '.circleci/config.yml', '.drone.yml']) {
114
+ try {
115
+ await fs.stat(path.join(root, f));
116
+ return { ok: true, detail: f };
117
+ }
118
+ catch { /* next */ }
119
+ }
120
+ return { ok: false, detail: 'no CI definition found (.github/workflows, .gitlab-ci.yml, ...)' };
121
+ }
122
+ /** Step 7: a meter script with its test. Looks for scripts/meter-* or
123
+ * tools/measure_* and a test file that names it. */
124
+ async function detectMeters(root) {
125
+ const meters = [];
126
+ for (const [dir, re] of [['scripts', /^meter[-_]/i], ['tools', /^measure[-_]/i], ['scripts', /^measure[-_]/i]]) {
127
+ for (const n of await listDir(path.join(root, dir)))
128
+ if (re.test(n))
129
+ meters.push(dir + '/' + n);
130
+ }
131
+ if (!meters.length)
132
+ return [{ label: 'medidor en el repositorio', status: 'fail', detail: 'no scripts/meter-* nor tools/measure_* found' }];
133
+ const tests = [];
134
+ for (const dir of ['tests', 'test', '__tests__', 'spec']) {
135
+ for (const n of await listDir(path.join(root, dir)))
136
+ if (/meter|measure/i.test(n))
137
+ tests.push(dir + '/' + n);
138
+ }
139
+ const out = [{ label: 'medidor en el repositorio', status: 'ok', detail: meters.slice(0, 3).join(', ') }];
140
+ out.push(tests.length
141
+ ? { label: 'el medidor tiene su test', status: 'ok', detail: tests.slice(0, 3).join(', ') }
142
+ : { label: 'el medidor tiene su test', status: 'fail', detail: 'no test file names the meter (tests/*meter*|*measure*)' });
143
+ return out;
144
+ }
145
+ /* ---------------- the evaluator ---------------- */
146
+ async function registryChecks(evaluator, probes, root) {
147
+ switch (evaluator) {
148
+ case 'sizing': {
149
+ if (!probes?.sizingOk)
150
+ return [{ label: 'registro de dimensionamiento (G9)', status: 'skip', detail: 'no probe' }];
151
+ const r = await probes.sizingOk();
152
+ return [{ label: 'registro de dimensionamiento (G9)', status: r.ok ? 'ok' : 'fail', detail: r.detail }];
153
+ }
154
+ case 'ci': {
155
+ const ci = await detectCi(root);
156
+ return [{ label: 'integracion continua definida', status: ci.ok ? 'ok' : 'fail', detail: ci.detail }];
157
+ }
158
+ case 'pendings_spec': {
159
+ if (!probes?.pendingsSpec)
160
+ return [{ label: 'pendientes con especificacion', status: 'skip', detail: 'no probe' }];
161
+ const r = await probes.pendingsSpec();
162
+ if (r.with_spec === 0 && r.without_spec === 0) {
163
+ return [{ label: 'pendientes con especificacion', status: 'fail', detail: 'no open pendings: the plan is empty' }];
164
+ }
165
+ return [{
166
+ label: 'pendientes con especificacion',
167
+ status: r.without_spec === 0 ? 'ok' : 'fail',
168
+ detail: r.with_spec + ' with spec, ' + r.without_spec + ' without (acceptance + how_verified)',
169
+ }];
170
+ }
171
+ case 'receipts': {
172
+ if (!probes?.receipts)
173
+ return [{ label: 'recibos de evidencia', status: 'skip', detail: 'no probe' }];
174
+ const r = await probes.receipts();
175
+ const ok = r.red_proofs > 0 && r.greens > 0;
176
+ return [{
177
+ label: 'recibos de evidencia (rojo probado, verde)',
178
+ status: ok ? 'ok' : 'fail',
179
+ detail: r.red_proofs + ' red proofs, ' + r.greens + ' greens, ' + r.e2e + ' e2e' + (ok ? '' : ' -- no receipt means no step'),
180
+ }];
181
+ }
182
+ case 'reports': {
183
+ if (!probes?.reports)
184
+ return [{ label: 'reportes honestos en los cierres', status: 'skip', detail: 'no probe' }];
185
+ const r = await probes.reports();
186
+ if (r.with_report === 0 && r.without_report === 0) {
187
+ return [{ label: 'reportes honestos en los cierres', status: 'fail', detail: 'no plan item closed with shipped yet' }];
188
+ }
189
+ return [{
190
+ label: 'reportes honestos en los cierres',
191
+ status: r.without_report === 0 ? 'ok' : 'fail',
192
+ detail: r.with_report + ' closes with report, ' + r.without_report + ' without (verified / believed / blind spots)',
193
+ }];
194
+ }
195
+ case 'meters':
196
+ return detectMeters(root);
197
+ default:
198
+ return [];
199
+ }
200
+ }
201
+ function statusOf(evaluator, checks) {
202
+ if (evaluator === 'owner' && !checks.length)
203
+ return 'owner';
204
+ const real = checks.filter((c) => c.status !== 'skip');
205
+ if (!real.length)
206
+ return 'owner';
207
+ return real.every((c) => c.status === 'ok') ? 'green' : 'red';
208
+ }
209
+ async function evaluate(def, opts) {
210
+ const now = opts.now ?? Date.now();
211
+ const inputs = [];
212
+ for (const a of def.inputs ?? [])
213
+ inputs.push(await checkArtifact(opts.projectRoot, a, now));
214
+ const checks = [];
215
+ for (const a of def.artifacts)
216
+ checks.push(await checkArtifact(opts.projectRoot, a, now));
217
+ checks.push(...await registryChecks(def.evaluator, opts.probes, opts.projectRoot));
218
+ return { num: def.num, id: def.id, title: def.title, status: statusOf(def.evaluator, checks), inputs, checks };
219
+ }
220
+ /** Evaluate one step of the new-project ladder. */
221
+ export async function evaluateStep(step, opts) {
222
+ return evaluate(step, opts);
223
+ }
224
+ /** Evaluate one station of the legacy normalisation path. */
225
+ export async function evaluateStation(station, opts) {
226
+ return evaluate({ ...station, inputs: [] }, opts);
227
+ }
228
+ /** The whole ladder, in order. */
229
+ export async function evaluateLadder(opts) {
230
+ const out = [];
231
+ for (const s of URAZUKE_STEPS)
232
+ out.push(await evaluate(s, opts));
233
+ return out;
234
+ }
235
+ /** The whole legacy path, in order. */
236
+ export async function evaluateLegacyPath(opts) {
237
+ const out = [];
238
+ for (const s of URAZUKE_LEGACY_STATIONS)
239
+ out.push(await evaluate({ ...s, inputs: [] }, opts));
240
+ return out;
241
+ }
242
+ /** One line per step, for the CLI and the prompt: `[x] 08 Tests ...`. */
243
+ export function renderLadderLine(r) {
244
+ const mark = r.status === 'green' ? '[x]' : r.status === 'red' ? '[ ]' : '[~]';
245
+ const n = String(r.num).padStart(2, '0');
246
+ const failing = r.checks.filter((c) => c.status === 'fail').map((c) => c.detail);
247
+ return mark + ' ' + n + ' ' + r.title + (failing.length ? ' -- ' + failing[0] : '');
248
+ }
249
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/urazuke/gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,aAAa,EAAE,uBAAuB,GAEvC,MAAM,cAAc,CAAC;AA4CtB,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC,0DAA0D;AAE1D,KAAK,UAAU,OAAO,CAAC,GAAW;IAChC,IAAI,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AAC5D,CAAC;AAED;oCACoC;AACpC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,GAAW;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC9B,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACX,MAAM,GAAG,GAAoD,EAAE,CAAC;IAChE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,EAAE,CAAC,MAAM,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,IAAY;IAC9C,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IACpF,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,CAAkB,EAAE,GAAW;IACxE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,GAAG,UAAU,EAAE,CAAC;IAC3E,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,IAAI,iBAAiB,CAAC;IAClD,IAAI,MAAM,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,GAAG,MAAM,CAAC,IAAI,GAAG,WAAW,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC;IAC3I,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QAC9C,IAAI,OAAO,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;YAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QACnJ,CAAC;IACH,CAAC;IACD,IAAI,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC;YAAC,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,IAAI,GAAG,EAAE,CAAC;QAAC,CAAC;QAC3E,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,qBAAqB,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;YACjH,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QAC7B,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC;YAAC,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,IAAI,GAAG,EAAE,CAAC;QAAC,CAAC;QAC3E,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAC,MAAM,GAAG,yBAAyB,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,+EAA+E,CAAC;gBAAC,MAAM;YAAC,CAAC;QACtM,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;AACrH,CAAC;AAED;6CAC6C;AAC7C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,MAAM,GAAG,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACxG,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACpI,KAAK,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE,CAAC;QAC1I,IAAI,CAAC;YAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iEAAiE,EAAE,CAAC;AAClG,CAAC;AAED;qDACqD;AACrD,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,CAAU,EAAE,CAAC;QACxH,KAAK,MAAM,CAAC,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC,CAAC;IAC5I,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;QACzD,KAAK,MAAM,CAAC,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAAE,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/G,CAAC;IACD,MAAM,GAAG,GAAmB,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1H,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;QACnB,CAAC,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC3F,CAAC,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,wDAAwD,EAAE,CAAC,CAAC;IAC7H,OAAO,GAAG,CAAC;AACb,CAAC;AAED,qDAAqD;AAErD,KAAK,UAAU,cAAc,CAC3B,SAA2B,EAAE,MAAiC,EAAE,IAAY;IAE5E,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,MAAM,EAAE,QAAQ;gBAAE,OAAO,CAAC,EAAE,KAAK,EAAE,mCAAmC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YACnH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClC,OAAO,CAAC,EAAE,KAAK,EAAE,mCAAmC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1G,CAAC;QACD,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QACxG,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,MAAM,EAAE,YAAY;gBAAE,OAAO,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YACnH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;gBAC9C,OAAO,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC,CAAC;YACrH,CAAC;YACD,OAAO,CAAC;oBACN,KAAK,EAAE,+BAA+B;oBACtC,MAAM,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;oBAC5C,MAAM,EAAE,CAAC,CAAC,SAAS,GAAG,cAAc,GAAG,CAAC,CAAC,YAAY,GAAG,sCAAsC;iBAC/F,CAAC,CAAC;QACL,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,MAAM,EAAE,QAAQ;gBAAE,OAAO,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YACtG,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5C,OAAO,CAAC;oBACN,KAAK,EAAE,4CAA4C;oBACnD,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;oBAC1B,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,eAAe,GAAG,CAAC,CAAC,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC;iBAC9H,CAAC,CAAC;QACL,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,EAAE,OAAO;gBAAE,OAAO,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YACjH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;gBAClD,OAAO,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC,CAAC;YACzH,CAAC;YACD,OAAO,CAAC;oBACN,KAAK,EAAE,kCAAkC;oBACzC,MAAM,EAAE,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;oBAC9C,MAAM,EAAE,CAAC,CAAC,WAAW,GAAG,uBAAuB,GAAG,CAAC,CAAC,cAAc,GAAG,8CAA8C;iBACpH,CAAC,CAAC;QACL,CAAC;QACD,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,SAA2B,EAAE,MAAsB;IACnE,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,GAAsI,EACtI,IAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACnC,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1F,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACnF,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACjH,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAiB,EAAE,IAAwB;IAC5E,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAuB,EAAE,IAAwB;IACrF,OAAO,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,kCAAkC;AAClC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAwB;IAC3D,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,aAAa;QAAE,GAAG,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACjE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAwB;IAC/D,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,uBAAuB;QAAE,GAAG,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9F,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,gBAAgB,CAAC,CAAoB;IACnD,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/E,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACjF,OAAO,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACtF,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { UrazukeProbes } from './gate.js';
2
+ export declare function realProbes(slug: string): UrazukeProbes;
3
+ /** A spec counts when it has at least one acceptance criterion and says
4
+ * how it is verified. */
5
+ export declare function hasSpec(spec: {
6
+ acceptance?: string[];
7
+ how_verified?: string;
8
+ } | undefined): boolean;
9
+ /** A project "built with the method" leaves these behind. Used to route an
10
+ * existing codebase to maintenance (corrective/evolutive, entering the loop
11
+ * at step 5) instead of the legacy normalisation path. */
12
+ export declare function hasMethodArtifacts(projectRoot: string): Promise<boolean>;
13
+ //# sourceMappingURL=probes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../../src/urazuke/probes.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CA8CtD;AAED;0BAC0B;AAC1B,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAAG,OAAO,CAInG;AAED;;2DAE2D;AAC3D,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ9E"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * The REAL registry probes for the Urazuke gate: sizing (G9), pendings
3
+ * with spec, evidence receipts. gate.ts stays pure; this file binds it to
4
+ * ~/.yujin-forge. Every probe is best-effort and never throws: a probe that
5
+ * cannot read its registry reports the step as NOT satisfied, which is the
6
+ * fail-closed answer.
7
+ *
8
+ * ASCII-only.
9
+ */
10
+ import fs from 'node:fs/promises';
11
+ import path from 'node:path';
12
+ export function realProbes(slug) {
13
+ return {
14
+ sizingOk: async () => {
15
+ try {
16
+ const { sizingGate } = await import('../sizing/store.js');
17
+ const g = await sizingGate(slug, { construction: true });
18
+ return { ok: g.state === 'ok', detail: g.state.toUpperCase() + (g.reason ? ' -- ' + g.reason : '') };
19
+ }
20
+ catch (e) {
21
+ return { ok: false, detail: 'sizing registry unreadable: ' + (e instanceof Error ? e.message : String(e)) };
22
+ }
23
+ },
24
+ pendingsSpec: async () => {
25
+ try {
26
+ const { listPending } = await import('../pending/store.js');
27
+ const open = await listPending(slug, { status: 'open' });
28
+ /* Canonical workflow tasks are the ladder itself, not the plan;
29
+ * the plan is every other open item. */
30
+ const plan = open.filter((p) => !p.workflow || p.workflow.ad_hoc);
31
+ const withSpec = plan.filter((p) => hasSpec(p.spec)).length;
32
+ return { with_spec: withSpec, without_spec: plan.length - withSpec };
33
+ }
34
+ catch {
35
+ return { with_spec: 0, without_spec: 0 };
36
+ }
37
+ },
38
+ reports: async () => {
39
+ try {
40
+ const { listPending } = await import('../pending/store.js');
41
+ const closed = await listPending(slug, { status: 'closed' });
42
+ const shipped = closed.filter((p) => p.closed_reason === 'shipped' && (!p.workflow || p.workflow.ad_hoc));
43
+ const withReport = shipped.filter((p) => !!p.implementation?.report).length;
44
+ return { with_report: withReport, without_report: shipped.length - withReport };
45
+ }
46
+ catch {
47
+ return { with_report: 0, without_report: 0 };
48
+ }
49
+ },
50
+ receipts: async () => {
51
+ try {
52
+ const { readReceipts, summarizeReceipts } = await import('./receipts.js');
53
+ const f = await readReceipts(slug);
54
+ const s = summarizeReceipts(f.items);
55
+ return { red_proofs: s.red_proofs, greens: s.greens, e2e: s.e2e, ...(s.last_at ? { last_at: s.last_at } : {}) };
56
+ }
57
+ catch {
58
+ return { red_proofs: 0, greens: 0, e2e: 0 };
59
+ }
60
+ },
61
+ };
62
+ }
63
+ /** A spec counts when it has at least one acceptance criterion and says
64
+ * how it is verified. */
65
+ export function hasSpec(spec) {
66
+ if (!spec)
67
+ return false;
68
+ const acc = Array.isArray(spec.acceptance) ? spec.acceptance.filter((a) => String(a).trim().length > 10) : [];
69
+ return acc.length > 0 && String(spec.how_verified ?? '').trim().length > 10;
70
+ }
71
+ /** A project "built with the method" leaves these behind. Used to route an
72
+ * existing codebase to maintenance (corrective/evolutive, entering the loop
73
+ * at step 5) instead of the legacy normalisation path. */
74
+ export async function hasMethodArtifacts(projectRoot) {
75
+ for (const rel of ['docs/WORKING_AGREEMENT.md', 'docs/SEMANTIC_TREE.md', 'docs/GATES.md']) {
76
+ try {
77
+ const st = await fs.stat(path.join(projectRoot, rel));
78
+ if (!st.isFile() || st.size < 100)
79
+ return false;
80
+ }
81
+ catch {
82
+ return false;
83
+ }
84
+ }
85
+ return true;
86
+ }
87
+ //# sourceMappingURL=probes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probes.js","sourceRoot":"","sources":["../../src/urazuke/probes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * GENERATED by scripts/sync_urazuke_prompts.mjs -- do not edit by hand.
3
+ *
4
+ * The Urazuke prompts, English, one array per step contract (and one for
5
+ * the legacy normalisation path). Source: pkuschnirof/urazuke @ e1b236e,
6
+ * files prompts/*.en.md. 70 prompts.
7
+ *
8
+ * ASCII-only (non-ASCII escaped).
9
+ */
10
+ export declare const URAZUKE_PROMPTS_SOURCE = "pkuschnirof/urazuke@e1b236e";
11
+ export declare const URAZUKE_PROMPTS: Record<string, readonly string[]>;
12
+ //# sourceMappingURL=prompts.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.generated.d.ts","sourceRoot":"","sources":["../../src/urazuke/prompts.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AAEpE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CA2H7D,CAAC"}