@clemrig/factory 0.6.0 → 0.7.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 (68) hide show
  1. package/README.md +61 -23
  2. package/dist/app/define.js +1 -1
  3. package/dist/app/define.js.map +1 -1
  4. package/dist/app/init.d.ts +1 -0
  5. package/dist/app/init.js +1 -0
  6. package/dist/app/init.js.map +1 -1
  7. package/dist/app/run.d.ts +2 -1
  8. package/dist/app/run.js +16 -4
  9. package/dist/app/run.js.map +1 -1
  10. package/dist/app/workflows/implement.d.ts +1 -1
  11. package/dist/app/workflows/implement.js +332 -132
  12. package/dist/app/workflows/implement.js.map +1 -1
  13. package/dist/app/workflows/issue-save.js +16 -14
  14. package/dist/app/workflows/issue-save.js.map +1 -1
  15. package/dist/cli/help.d.ts +1 -1
  16. package/dist/cli/help.js +4 -2
  17. package/dist/cli/help.js.map +1 -1
  18. package/dist/cli/init.d.ts +3 -2
  19. package/dist/cli/init.js +10 -3
  20. package/dist/cli/init.js.map +1 -1
  21. package/dist/cli/run.js +1 -1
  22. package/dist/cli/run.js.map +1 -1
  23. package/dist/domain/definition.d.ts +2 -0
  24. package/dist/domain/definition.js +1 -0
  25. package/dist/domain/definition.js.map +1 -1
  26. package/dist/domain/description.d.ts +51 -0
  27. package/dist/domain/description.js +78 -0
  28. package/dist/domain/description.js.map +1 -0
  29. package/dist/domain/plan.d.ts +2 -0
  30. package/dist/domain/plan.js +15 -0
  31. package/dist/domain/plan.js.map +1 -1
  32. package/dist/domain/pull-request.d.ts +42 -8
  33. package/dist/domain/pull-request.js +287 -24
  34. package/dist/domain/pull-request.js.map +1 -1
  35. package/dist/domain/review.d.ts +19 -11
  36. package/dist/domain/review.js +42 -21
  37. package/dist/domain/review.js.map +1 -1
  38. package/dist/domain/spec.js +12 -4
  39. package/dist/domain/spec.js.map +1 -1
  40. package/dist/domain/verification.d.ts +0 -2
  41. package/dist/domain/verification.js.map +1 -1
  42. package/dist/system/browser.d.ts +29 -0
  43. package/dist/system/browser.js +84 -0
  44. package/dist/system/browser.js.map +1 -0
  45. package/dist/system/checks.d.ts +5 -6
  46. package/dist/system/checks.js +3 -3
  47. package/dist/system/checks.js.map +1 -1
  48. package/dist/system/git.d.ts +9 -15
  49. package/dist/system/git.js +92 -100
  50. package/dist/system/git.js.map +1 -1
  51. package/dist/system/github.d.ts +15 -0
  52. package/dist/system/github.js +36 -2
  53. package/dist/system/github.js.map +1 -1
  54. package/dist/system/issues.d.ts +5 -2
  55. package/dist/system/issues.js +5 -3
  56. package/dist/system/issues.js.map +1 -1
  57. package/dist/system/run-files.d.ts +22 -2
  58. package/dist/system/run-files.js +78 -4
  59. package/dist/system/run-files.js.map +1 -1
  60. package/dist/system/templates.d.ts +3 -2
  61. package/dist/system/templates.js +8 -3
  62. package/dist/system/templates.js.map +1 -1
  63. package/package.json +3 -3
  64. package/prompts/implement/describe.md +74 -0
  65. package/prompts/implement/implement.md +25 -8
  66. package/prompts/implement/plan.md +35 -7
  67. package/prompts/implement/review.md +43 -16
  68. package/templates/init/factory.ts +23 -5
@@ -1,36 +1,299 @@
1
1
  import { isBlocking, natureLabel, } from "./review.js";
2
2
  import { seconds } from "./verification.js";
3
+ /** The first `gh` that attaches images to a pull request (`--attach`). */
4
+ export const minimumGhVersion = "2.99.0";
5
+ /** Why this `gh` cannot open the pull request, if it cannot. */
6
+ export function ghVersionProblem(version) {
7
+ const parts = (text) => text.split(".").map(Number);
8
+ const [major = 0, minor = 0, patch = 0] = parts(version);
9
+ const [needMajor = 0, needMinor = 0, needPatch = 0] = parts(minimumGhVersion);
10
+ const recent = major !== needMajor
11
+ ? major > needMajor
12
+ : minor !== needMinor
13
+ ? minor > needMinor
14
+ : patch >= needPatch;
15
+ return recent
16
+ ? undefined
17
+ : `gh ${minimumGhVersion} or later is required to attach screenshots (found ${version}): upgrade gh`;
18
+ }
19
+ /** Below GitHub's limit for a pull request's body (65,536 characters), with room for the screenshots' links. */
20
+ export const maxBodyLength = 60_000;
21
+ /** Agent text on one line. */
22
+ function line(text) {
23
+ return text.replace(/\s*\n\s*/g, " ");
24
+ }
25
+ /**
26
+ * Text shown as prose, from the spec or an agent: nothing in it opens a code
27
+ * block or a comment, which would swallow the rest of the body.
28
+ */
29
+ function inert(text) {
30
+ return text
31
+ .replaceAll("```", "\\`\\`\\`")
32
+ .replaceAll("~~~", "\\~\\~\\~")
33
+ .replaceAll("<!--", "&lt;!--");
34
+ }
3
35
  /** Agent text inside a table cell: one line, no column separator. */
4
36
  function cell(text) {
5
- return text.replace(/\s*\n\s*/g, " ").replaceAll("|", "\\|");
37
+ return inert(line(text)).replaceAll("|", "\\|");
6
38
  }
7
- /** Everything needed to approve the change without opening the run. */
8
- export function pullRequestBody(facts) {
9
- const { implementation, review } = facts;
10
- const criteria = facts.criteria.map(({ id, text }) => {
11
- const judged = review.criteria.find((criterion) => criterion.id === id);
12
- const status = judged?.status === "met" ? "Met" : "Not met";
13
- return `| ${cell(`${id}: ${text}`)} | ${status} | ${cell(judged?.evidence ?? "")} |`;
39
+ /** A list item whose text may hold several lines. */
40
+ function item(text) {
41
+ return `- ${inert(text.trim()).replace(/\n/g, "\n ")}`;
42
+ }
43
+ /** Agent text as HTML, in a folded section's title. */
44
+ function html(text) {
45
+ return line(text)
46
+ .replaceAll("&", "&amp;")
47
+ .replaceAll("<", "&lt;")
48
+ .replaceAll(">", "&gt;");
49
+ }
50
+ /** Agent text as an image's alternative text: one line, no bracket to end it. */
51
+ function alt(text) {
52
+ return line(text).replace(/[\\[\]]/g, "\\$&");
53
+ }
54
+ function plural(count, noun) {
55
+ return `${count} ${noun}${count === 1 ? "" : "s"}`;
56
+ }
57
+ /** Content folded under its title until the reader opens it. */
58
+ function folded(title, content) {
59
+ return `<details><summary>${title}</summary>\n\n${content}\n\n</details>`;
60
+ }
61
+ /** Above this many files, the review guide folds each group's list. */
62
+ const foldedFiles = 10;
63
+ /** A changed file with its added and removed lines, as the review guide lists it. */
64
+ function changedFile(file) {
65
+ const name = file.from
66
+ ? `\`${file.from}\` → \`${file.path}\``
67
+ : `\`${file.path}\``;
68
+ return file.added === undefined || file.removed === undefined
69
+ ? `${name} (binary)`
70
+ : `${name} (+${file.added} -${file.removed})`;
71
+ }
72
+ /** A review's finding, as the pull request lists it: where, what, and its nature. */
73
+ function finding({ nature, file, summary, }) {
74
+ const label = natureLabel(nature);
75
+ return item(`${file ? `\`${file}\` — ` : ""}${summary.trim()} _${label[0]?.toUpperCase()}${label.slice(1)}_`);
76
+ }
77
+ /** What the review still asks for, which the operator accepted to deliver. */
78
+ function openItems({ review, acceptedReview }) {
79
+ if (!acceptedReview)
80
+ return [];
81
+ return [
82
+ ...review.criteria
83
+ .filter(({ status }) => status === "not_met")
84
+ .map(({ id, evidence }) => item(`${id} is not met — ${evidence.trim()}`)),
85
+ ...review.findings.filter(({ nature }) => isBlocking(nature)).map(finding),
86
+ ];
87
+ }
88
+ /** The criteria the last review found met. */
89
+ function metCriteria({ criteria, review }) {
90
+ return criteria.filter(({ id }) => review.criteria.find((criterion) => criterion.id === id)?.status ===
91
+ "met").length;
92
+ }
93
+ /** How the review ended, after how many rounds of changes. */
94
+ function rounds(facts) {
95
+ const after = facts.reviewRounds === 0
96
+ ? "at the first review"
97
+ : `after ${plural(facts.reviewRounds, "round")} of changes`;
98
+ return openItems(facts).length > 0
99
+ ? `Delivered by the operator ${after}`
100
+ : `Approved ${after}`;
101
+ }
102
+ /** The pull request at a glance: its scope, its danger, its proof and its review. */
103
+ function glance(facts) {
104
+ const { files, links, runId, description, checks, skippedChecks } = facts;
105
+ const sum = (key) => files.reduce((total, file) => total + (file[key] ?? 0), 0);
106
+ const { danger, screenshots } = description;
107
+ const open = openItems(facts).length;
108
+ const nonBlocking = facts.review.findings.filter(({ nature }) => !isBlocking(nature)).length;
109
+ const proof = [
110
+ `${metCriteria(facts)} / ${facts.criteria.length} criteria`,
111
+ ...(checks.length > 0
112
+ ? [`${checks.map(({ name }) => name).join(", ")} passed`]
113
+ : []),
114
+ ...(skippedChecks.length > 0
115
+ ? [`${skippedChecks.join(", ")} skipped`]
116
+ : []),
117
+ screenshots.length > 0
118
+ ? plural(screenshots.length, "screenshot")
119
+ : "no screenshots",
120
+ ];
121
+ const review = [
122
+ rounds(facts),
123
+ ...(open > 0 ? [`${open} open`] : []),
124
+ ...(nonBlocking > 0 ? [plural(nonBlocking, "non-blocking finding")] : []),
125
+ ...(facts.resolved.length > 0
126
+ ? [`${facts.resolved.length} fixed during review`]
127
+ : []),
128
+ ...(facts.deviations.length > 0
129
+ ? [`${plural(facts.deviations.length, "deviation")} from the plan`]
130
+ : []),
131
+ ];
132
+ return [
133
+ `| **Scope** | ${plural(files.length, "file")}, +${sum("added")} −${sum("removed")} · [spec](${links.spec}) · [plan](${links.plan}) · run \`${runId}\` |`,
134
+ "|:--|:--|",
135
+ `| **Merge** | ${danger.door === "one_way" ? "**One-way door**" : "Two-way door"} · blast radius **${cell(danger.blastRadius)}** |`,
136
+ `| **Proof** | ${proof.join(" · ")} |`,
137
+ `| **Review** | ${review.join(" · ")} |`,
138
+ ].join("\n");
139
+ }
140
+ /** A code block around `content`, its fence longer than any it holds. */
141
+ function codeBlock(kind, content) {
142
+ const longest = Math.max(0, ...[...content.matchAll(/`+/g)].map(([run]) => run.length));
143
+ const fence = "`".repeat(Math.max(3, longest + 1));
144
+ return `${fence}${kind}\n${content.trimEnd()}\n${fence}`;
145
+ }
146
+ function howItWorks({ visuals }) {
147
+ if (visuals.length === 0)
148
+ return "The change needs no diagram.";
149
+ return visuals
150
+ .map(({ caption, kind, content }) => `${inert(caption.trim())}\n\n${codeBlock(kind, content)}`)
151
+ .join("\n\n");
152
+ }
153
+ function mergeDanger({ danger }) {
154
+ const afterMerge = danger.afterMerge.length > 0
155
+ ? danger.afterMerge
156
+ .map((action, index) => `${index + 1}. ${cell(action)}`)
157
+ .join("<br>")
158
+ : "Nothing.";
159
+ return [
160
+ `| **Door** | **${danger.door === "one_way" ? "One-way" : "Two-way"}.** ${cell(danger.reason)} |`,
161
+ "|:--|:--|",
162
+ `| **Blast radius** | **${cell(danger.blastRadius)}.** ${cell(danger.ramifications)} |`,
163
+ `| **Rollback** | ${cell(danger.rollback)} |`,
164
+ `| **After merge** | ${afterMerge} |`,
165
+ ].join("\n");
166
+ }
167
+ function reviewGuide({ description, files }) {
168
+ const { start, groups } = description.guide;
169
+ const byPath = new Map(files.map((file) => [file.path, file]));
170
+ const listed = (paths) => paths.flatMap((path) => {
171
+ const file = byPath.get(path);
172
+ return file ? [`- ${changedFile(file)}`] : [];
14
173
  });
15
- const checks = [
16
- ...facts.checks.map(({ name, command, durationMs }) => `- ${name}: \`${command.join(" ")}\` passed in ${seconds(durationMs)}`),
17
- ...facts.skippedChecks.map((name) => `- ${name}: skipped, no change matches its files`),
174
+ const grouped = new Set(groups.flatMap((group) => group.files));
175
+ const others = files.filter(({ path }) => !grouped.has(path));
176
+ const sections = [
177
+ ...groups.map(({ title, files: paths }, index) => ({
178
+ title: `${index + 1}. ${title.trim()}`,
179
+ lines: listed(paths),
180
+ })),
181
+ ...(others.length > 0
182
+ ? [
183
+ {
184
+ title: groups.length > 0 ? "Other files" : "Files",
185
+ lines: others.map((file) => `- ${changedFile(file)}`),
186
+ },
187
+ ]
188
+ : []),
18
189
  ];
19
- const rounds = facts.reviewRounds === 0
20
- ? "Approved at the first review."
21
- : `Approved after ${facts.reviewRounds} round${facts.reviewRounds === 1 ? "" : "s"} of changes.`;
22
- const minor = review.findings
190
+ // A large change shows its groups, each list folded.
191
+ const fold = files.length > foldedFiles;
192
+ return [
193
+ `Start with \`${start.file}\`: ${inert(start.why.trim())}`,
194
+ ...sections.map(({ title, lines }) => fold
195
+ ? folded(`<b>${html(title)}</b> · ${plural(lines.length, "file")}`, lines.join("\n"))
196
+ : `**${inert(line(title))}**\n${lines.join("\n")}`),
197
+ ].join("\n\n");
198
+ }
199
+ function judgment(facts) {
200
+ const open = openItems(facts);
201
+ const findings = facts.review.findings
23
202
  .filter(({ nature }) => !isBlocking(nature))
24
- .map(({ nature, file, summary }) => `- ${file ? `\`${file}\`: ` : ""}${summary} (${natureLabel(nature)})`);
25
- const deviations = implementation.deviations.map((deviation) => `- ${deviation}`);
203
+ .map(finding);
204
+ const lists = [
205
+ ["Open, accepted by the operator", open],
206
+ ["Non-blocking findings", findings],
207
+ ["Deviations from the plan", facts.deviations.map(item)],
208
+ ];
209
+ const shown = lists
210
+ .filter(([, items]) => items.length > 0)
211
+ .map(([title, items]) => `**${title}**\n${items.join("\n")}`);
212
+ const fixed = facts.resolved.length > 0
213
+ ? [
214
+ folded(`Fixed during the review rounds · ${facts.resolved.length}`, facts.resolved
215
+ .map(({ summary, evidence }) => item(`${summary.trim()} Proof: ${evidence.trim()}`))
216
+ .join("\n")),
217
+ ]
218
+ : [];
219
+ const assumptions = facts.assumptions.length > 0
220
+ ? [
221
+ folded(`The plan's ${plural(facts.assumptions.length, "assumption")}`, facts.assumptions.map(item).join("\n")),
222
+ ]
223
+ : [];
224
+ const sections = [...shown, ...fixed, ...assumptions];
225
+ if (sections.length === 0)
226
+ return `${rounds(facts)}. No non-blocking finding, deviation from the plan or assumption.`;
227
+ const left = open.length > 0 ? ", with what it still asked for left open" : "";
228
+ return [`${rounds(facts)}${left}.`, ...sections].join("\n\n");
229
+ }
230
+ function screenshots({ description, screenshotsPending, }) {
231
+ const shots = description.screenshots;
232
+ if (shots.length === 0)
233
+ return `No screenshots: ${inert(description.noScreenshots?.trim() ?? "")}`;
234
+ if (screenshotsPending)
235
+ return `_Attaching ${plural(shots.length, "screenshot")}…_`;
236
+ return shots
237
+ .map(({ file, caption }) =>
238
+ // A backslash would escape the closing underscore. Each image is a
239
+ // paragraph of its own, as gh attached them in a real run; a line
240
+ // that starts with `![` or `_` opens no code block or comment.
241
+ `![${alt(caption)}](${file})\n\n_${line(caption).replaceAll("\\", "\\\\")}_`)
242
+ .join("\n\n");
243
+ }
244
+ function evidence(facts) {
245
+ const met = metCriteria(facts);
246
+ const total = facts.criteria.length;
247
+ const checks = [
248
+ ...(facts.checks.length > 0
249
+ ? [
250
+ `passed: ${facts.checks.map(({ name, command, durationMs }) => `${name} (\`${command.join(" ")}\`, ${seconds(durationMs)})`).join(", ")}`,
251
+ ]
252
+ : []),
253
+ ...(facts.skippedChecks.length > 0
254
+ ? [
255
+ `skipped, no change matching their files: ${facts.skippedChecks.join(", ")}`,
256
+ ]
257
+ : []),
258
+ ];
259
+ const criteria = facts.criteria.map(({ id, text }) => {
260
+ const judged = facts.review.criteria.find((criterion) => criterion.id === id);
261
+ const unmet = judged?.status === "not_met" ? "Not met: " : "";
262
+ return `| ${cell(`${id}: ${text}`)} | ${cell(`${unmet}${judged?.evidence ?? ""}`)} |`;
263
+ });
264
+ return [
265
+ screenshots(facts),
266
+ `**${met} / ${total} ${total === 1 ? "criterion" : "criteria"} met**, checked by an independent review${met < total ? "; the others are open, accepted by the operator" : ""}.`,
267
+ `Checks ${checks.join("; ")}.`,
268
+ folded("Each criterion and the review's evidence", `| Criterion | Evidence |\n|---|---|\n${criteria.join("\n")}`),
269
+ ].join("\n\n");
270
+ }
271
+ /** Everything needed to review the change without remembering its issue or opening the run. */
272
+ export function pullRequestBody(facts) {
273
+ const { description } = facts;
274
+ const { danger } = description;
275
+ const open = openItems(facts).length;
26
276
  return `${[
27
- `## Summary\n\n${implementation.summary}`,
28
- `## Acceptance criteria\n\n| Criterion | Review | Evidence |\n|---|---|---|\n${criteria.join("\n")}`,
29
- `## Verification\n\n${checks.join("\n")}`,
30
- `## Review\n\n${rounds}\n\n${minor.length > 0 ? `Minor findings:\n${minor.join("\n")}` : "No minor findings."}`,
31
- `## Deviations from plan\n\n${deviations.length > 0 ? deviations.join("\n") : "None."}`,
32
- "---",
33
- `Spec: \`${facts.specPath}\` at ${facts.baseCommit.slice(0, 7)} · Plan: \`${facts.planPath}\` · Run: ${facts.runId}`,
277
+ ...(open > 0
278
+ ? [
279
+ `> [!WARNING]\n> **Delivered with ${plural(open, "open review finding")}**, accepted by the operator: see Needs your judgment.`,
280
+ ]
281
+ : []),
282
+ ...(danger.door === "one_way"
283
+ ? [`> [!CAUTION]\n> **One-way door:** ${cell(danger.reason)}`]
284
+ : []),
285
+ glance(facts),
286
+ `## Why\n\n${inert(facts.objective.trim())}`,
287
+ `## What changes\n\n${description.changes.map(item).join("\n")}`,
288
+ `## How it works\n\n${howItWorks(description)}`,
289
+ `## Merge danger\n\n${mergeDanger(description)}`,
290
+ `## Review guide\n\n${reviewGuide(facts)}`,
291
+ `### Needs your judgment\n\n${judgment(facts)}`,
292
+ `## Evidence\n\n${evidence(facts)}`,
34
293
  ].join("\n\n")}\n`;
35
294
  }
295
+ /** The danger of merging, as the terminal shows it once the pull request is open. */
296
+ export function mergeDangerLine({ danger }) {
297
+ return `Merge danger: ${danger.door === "one_way" ? "one-way" : "two-way"} door, blast radius ${danger.blastRadius}`;
298
+ }
36
299
  //# sourceMappingURL=pull-request.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull-request.js","sourceRoot":"","sources":["../../src/domain/pull-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull-request.js","sourceRoot":"","sources":["../../src/domain/pull-request.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,UAAU,EACV,WAAW,GAEZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAAoB,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE9D,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAEzC,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC9E,MAAM,MAAM,GACV,KAAK,KAAK,SAAS;QACjB,CAAC,CAAC,KAAK,GAAG,SAAS;QACnB,CAAC,CAAC,KAAK,KAAK,SAAS;YACnB,CAAC,CAAC,KAAK,GAAG,SAAS;YACnB,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC;IAC3B,OAAO,MAAM;QACX,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,gBAAgB,sDAAsD,OAAO,eAAe,CAAC;AACzG,CAAC;AAED,gHAAgH;AAChH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC;AAoCpC,8BAA8B;AAC9B,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,IAAI;SACR,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;SAC9B,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;SAC9B,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,qEAAqE;AACrE,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,qDAAqD;AACrD,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,uDAAuD;AACvD,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC;SACd,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,iFAAiF;AACjF,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,IAAY;IACzC,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACrD,CAAC;AAED,gEAAgE;AAChE,SAAS,MAAM,CAAC,KAAa,EAAE,OAAe;IAC5C,OAAO,qBAAqB,KAAK,iBAAiB,OAAO,gBAAgB,CAAC;AAC5E,CAAC;AAED,uEAAuE;AACvE,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,qFAAqF;AACrF,SAAS,WAAW,CAAC,IAAiB;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;QACpB,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,IAAI;QACvC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;IACvB,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAC3D,CAAC,CAAC,GAAG,IAAI,WAAW;QACpB,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC;AAClD,CAAC;AAED,qFAAqF;AACrF,SAAS,OAAO,CAAC,EACf,MAAM,EACN,IAAI,EACJ,OAAO,GACoB;IAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,IAAI,CACT,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CACjG,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,EAAoB;IAC7D,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO;QACL,GAAG,MAAM,CAAC,QAAQ;aACf,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC;aAC5C,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3E,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,8CAA8C;AAC9C,SAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAoB;IACzD,OAAO,QAAQ,CAAC,MAAM,CACpB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CACT,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM;QAChE,KAAK,CACR,CAAC,MAAM,CAAC;AACX,CAAC;AAED,8DAA8D;AAC9D,SAAS,MAAM,CAAC,KAAuB;IACrC,MAAM,KAAK,GACT,KAAK,CAAC,YAAY,KAAK,CAAC;QACtB,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC;IAChE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;QAChC,CAAC,CAAC,6BAA6B,KAAK,EAAE;QACtC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,qFAAqF;AACrF,SAAS,MAAM,CAAC,KAAuB;IACrC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAC1E,MAAM,GAAG,GAAG,CAAC,GAAwB,EAAE,EAAE,CACvC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;IAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IACrC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAC9C,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CACpC,CAAC,MAAM,CAAC;IACT,MAAM,KAAK,GAAG;QACZ,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,WAAW;QAC3D,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACnB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACzD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YAC1B,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YACzC,CAAC,CAAC,EAAE,CAAC;QACP,WAAW,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC;YAC1C,CAAC,CAAC,gBAAgB;KACrB,CAAC;IACF,MAAM,MAAM,GAAG;QACb,MAAM,CAAC,KAAK,CAAC;QACb,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC3B,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,sBAAsB,CAAC;YAClD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAC7B,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,gBAAgB,CAAC;YACnE,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,OAAO;QACL,iBAAiB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,aAAa,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,IAAI,aAAa,KAAK,MAAM;QACzJ,WAAW;QACX,iBAAiB,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,qBAAqB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM;QACnI,iBAAiB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;QACtC,kBAAkB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;KACzC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,yEAAyE;AACzE,SAAS,SAAS,CAAC,IAAY,EAAE,OAAe;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,CAAC,EACD,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAC3D,CAAC;IACF,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,GAAG,KAAK,GAAG,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,KAAK,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,OAAO,EAAe;IAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,8BAA8B,CAAC;IAChE,OAAO,OAAO;SACX,GAAG,CACF,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAC7B,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAC5D;SACA,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,MAAM,EAAe;IAC1C,MAAM,UAAU,GACd,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,MAAM,CAAC,UAAU;aACd,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;aACvD,IAAI,CAAC,MAAM,CAAC;QACjB,CAAC,CAAC,UAAU,CAAC;IACjB,OAAO;QACL,kBAAkB,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;QACjG,WAAW;QACX,0BAA0B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI;QACvF,oBAAoB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI;QAC7C,uBAAuB,UAAU,IAAI;KACtC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,WAAW,EAAE,KAAK,EAAoB;IAC3D,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,CAAC,KAAe,EAAE,EAAE,CACjC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IACL,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG;QACf,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACjD,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,EAAE;YACtC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;SACrB,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACnB,CAAC,CAAC;gBACE;oBACE,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO;oBAClD,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;iBACtD;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,qDAAqD;IACrD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;IACxC,OAAO;QACL,gBAAgB,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE;QAC1D,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CACnC,IAAI;YACF,CAAC,CAAC,MAAM,CACJ,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EACzD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CACjB;YACH,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrD;KACF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAuB;IACvC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ;SACnC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SAC3C,GAAG,CAAC,OAAO,CAAC,CAAC;IAChB,MAAM,KAAK,GAAG;QACZ,CAAC,gCAAgC,EAAE,IAAI,CAAC;QACxC,CAAC,uBAAuB,EAAE,QAAQ,CAAC;QACnC,CAAC,0BAA0B,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAChD,CAAC;IACX,MAAM,KAAK,GAAG,KAAK;SAChB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChE,MAAM,KAAK,GACT,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QACvB,CAAC,CAAC;YACE,MAAM,CACJ,oCAAoC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,EAC3D,KAAK,CAAC,QAAQ;iBACX,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC7B,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CACpD;iBACA,IAAI,CAAC,IAAI,CAAC,CACd;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,WAAW,GACf,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC;YACE,MAAM,CACJ,cAAc,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAC9D,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACvC;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,WAAW,CAAC,CAAC;IACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QACvB,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,mEAAmE,CAAC;IAC7F,MAAM,IAAI,GACR,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,WAAW,EACX,kBAAkB,GACD;IACjB,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QACpB,OAAO,mBAAmB,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC7E,IAAI,kBAAkB;QACpB,OAAO,cAAc,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC;IAC9D,OAAO,KAAK;SACT,GAAG,CACF,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;IACpB,mEAAmE;IACnE,kEAAkE;IAClE,+DAA+D;IAC/D,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAC/E;SACA,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAuB;IACvC,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;IACpC,MAAM,MAAM,GAAG;QACb,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACzB,CAAC,CAAC;gBACE,WAAW,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC1I;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YAChC,CAAC,CAAC;gBACE,4CAA4C,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC7E;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CACvC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CACnC,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,GAAG,MAAM,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACxF,CAAC,CAAC,CAAC;IACH,OAAO;QACL,WAAW,CAAC,KAAK,CAAC;QAClB,KAAK,GAAG,MAAM,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,2CAA2C,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,EAAE,GAAG;QAC/K,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAC9B,MAAM,CACJ,0CAA0C,EAC1C,wCAAwC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9D;KACF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,eAAe,CAAC,KAAuB;IACrD,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;IAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,GAAG;QACR,GAAG,CAAC,IAAI,GAAG,CAAC;YACV,CAAC,CAAC;gBACE,oCAAoC,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,wDAAwD;aAChI;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;YAC3B,CAAC,CAAC,CAAC,qCAAqC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,CAAC,KAAK,CAAC;QACb,aAAa,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE;QAC5C,sBAAsB,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAChE,sBAAsB,UAAU,CAAC,WAAW,CAAC,EAAE;QAC/C,sBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE;QAChD,sBAAsB,WAAW,CAAC,KAAK,CAAC,EAAE;QAC1C,8BAA8B,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC/C,kBAAkB,QAAQ,CAAC,KAAK,CAAC,EAAE;KACpC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAAC,EAAE,MAAM,EAAe;IACrD,OAAO,iBAAiB,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,uBAAuB,MAAM,CAAC,WAAW,EAAE,CAAC;AACvH,CAAC"}
@@ -11,16 +11,6 @@ export declare const implementationOutput: z.ZodObject<{
11
11
  }, z.core.$strict>;
12
12
  export type Implementation = z.output<typeof implementationOutput>;
13
13
  export declare function implementationProblem(implementation: Implementation, criteria: Criterion[]): string | undefined;
14
- /**
15
- * What a finding is. Its severity follows from it in code, never from the
16
- * reviewer's own judgment: the first six block the change, the others do not.
17
- */
18
- export declare const findingNatures: readonly ["incorrect_behavior", "data_loss", "outage", "security", "regression", "spec_violation", "weak_test", "maintainability", "documentation"];
19
- export type FindingNature = (typeof findingNatures)[number];
20
- /** Whether a finding of this nature blocks the change. */
21
- export declare function isBlocking(nature: FindingNature): boolean;
22
- /** A nature as people read it: `incorrect_behavior` is "incorrect behavior". */
23
- export declare function natureLabel(nature: FindingNature): string;
24
14
  /** Above this many lines of diff, a change is large: its reviewer reads the diff from a file and may split the review. */
25
15
  export declare const largeChangeLines = 1500;
26
16
  /** A changed file and its added and removed lines; none for a binary file. */
@@ -42,6 +32,16 @@ export type Changes = {
42
32
  large: true;
43
33
  diffFile: string;
44
34
  });
35
+ /**
36
+ * What a finding is. Its severity follows from it in code, never from the
37
+ * reviewer's own judgment.
38
+ */
39
+ export declare const findingNatures: readonly ["incorrect_behavior", "data_loss", "outage", "security", "regression", "spec_violation", "weak_test", "maintainability", "documentation"];
40
+ export type FindingNature = (typeof findingNatures)[number];
41
+ /** Whether a finding of this nature blocks the change. */
42
+ export declare function isBlocking(nature: FindingNature): boolean;
43
+ /** A nature as people read it: `incorrect_behavior` is "incorrect behavior". */
44
+ export declare function natureLabel(nature: FindingNature): string;
45
45
  /** The reviewer's response: its approval follows from these facts alone. */
46
46
  export declare const reviewOutput: z.ZodObject<{
47
47
  criteria: z.ZodArray<z.ZodObject<{
@@ -67,8 +67,16 @@ export declare const reviewOutput: z.ZodObject<{
67
67
  file: z.ZodOptional<z.ZodString>;
68
68
  summary: z.ZodString;
69
69
  }, z.core.$strict>>;
70
+ resolved: z.ZodOptional<z.ZodArray<z.ZodObject<{
71
+ summary: z.ZodString;
72
+ evidence: z.ZodString;
73
+ }, z.core.$strict>>>;
70
74
  }, z.core.$strict>;
71
75
  export type Review = z.output<typeof reviewOutput>;
72
76
  export declare function reviewProblem(review: Review, criteria: Criterion[]): string | undefined;
73
- /** The correction sent to the implementing agent, or nothing when every criterion is met and nothing blocks. */
77
+ /**
78
+ * The correction sent to the implementing agent, or nothing when every
79
+ * criterion is met and nothing blocks. Once a round of changes is needed, the
80
+ * findings that do not block go with it, to fix when that is safe.
81
+ */
74
82
  export declare function reviewChanges(review: Review): string | undefined;
@@ -11,39 +11,35 @@ export const implementationOutput = z.strictObject({
11
11
  export function implementationProblem(implementation, criteria) {
12
12
  return citationProblem(implementation.criteria.map(({ id }) => id), criteria, true);
13
13
  }
14
- /**
15
- * What a finding is. Its severity follows from it in code, never from the
16
- * reviewer's own judgment: the first six block the change, the others do not.
17
- */
18
- export const findingNatures = [
14
+ /** Above this many lines of diff, a change is large: its reviewer reads the diff from a file and may split the review. */
15
+ export const largeChangeLines = 1500;
16
+ /** Natures of the findings that block the change. */
17
+ const blockingNatures = [
19
18
  "incorrect_behavior",
20
19
  "data_loss",
21
20
  "outage",
22
21
  "security",
23
22
  "regression",
24
23
  "spec_violation",
24
+ ];
25
+ /**
26
+ * What a finding is. Its severity follows from it in code, never from the
27
+ * reviewer's own judgment.
28
+ */
29
+ export const findingNatures = [
30
+ ...blockingNatures,
25
31
  "weak_test",
26
32
  "maintainability",
27
33
  "documentation",
28
34
  ];
29
- const blockingNatures = new Set([
30
- "incorrect_behavior",
31
- "data_loss",
32
- "outage",
33
- "security",
34
- "regression",
35
- "spec_violation",
36
- ]);
37
35
  /** Whether a finding of this nature blocks the change. */
38
36
  export function isBlocking(nature) {
39
- return blockingNatures.has(nature);
37
+ return blockingNatures.some((blocking) => blocking === nature);
40
38
  }
41
39
  /** A nature as people read it: `incorrect_behavior` is "incorrect behavior". */
42
40
  export function natureLabel(nature) {
43
41
  return nature.replaceAll("_", " ");
44
42
  }
45
- /** Above this many lines of diff, a change is large: its reviewer reads the diff from a file and may split the review. */
46
- export const largeChangeLines = 1500;
47
43
  /** The reviewer's response: its approval follows from these facts alone. */
48
44
  export const reviewOutput = z.strictObject({
49
45
  criteria: z.array(z.strictObject({
@@ -57,22 +53,47 @@ export const reviewOutput = z.strictObject({
57
53
  /** The trigger, then its consequence. */
58
54
  summary: text,
59
55
  })),
56
+ /**
57
+ * What the previous review asked for that the change now fixes, each with
58
+ * its proof; given when the reviewer received that review.
59
+ */
60
+ resolved: z
61
+ .array(z.strictObject({ summary: text, evidence: text }))
62
+ .optional(),
60
63
  });
61
64
  export function reviewProblem(review, criteria) {
62
65
  return citationProblem(review.criteria.map(({ id }) => id), criteria, true);
63
66
  }
64
- /** The correction sent to the implementing agent, or nothing when every criterion is met and nothing blocks. */
67
+ /**
68
+ * The correction sent to the implementing agent, or nothing when every
69
+ * criterion is met and nothing blocks. Once a round of changes is needed, the
70
+ * findings that do not block go with it, to fix when that is safe.
71
+ */
65
72
  export function reviewChanges(review) {
73
+ const where = (file) => (file ? ` (${file})` : "");
66
74
  const changes = [
67
75
  ...review.criteria
68
76
  .filter(({ status }) => status === "not_met")
69
77
  .map(({ id, evidence }) => `- ${id} is not met: ${evidence}`),
70
78
  ...review.findings
71
79
  .filter(({ nature }) => isBlocking(nature))
72
- .map(({ nature, file, summary }) => `- Blocking, ${natureLabel(nature)}${file ? ` (${file})` : ""}: ${summary}`),
80
+ .map(({ nature, file, summary }) => `- Blocking, ${natureLabel(nature)}${where(file)}: ${summary}`),
73
81
  ];
74
- return changes.length > 0
75
- ? ["The review requires changes:", ...changes].join("\n")
76
- : undefined;
82
+ if (changes.length === 0)
83
+ return undefined;
84
+ const minor = review.findings
85
+ .filter(({ nature }) => !isBlocking(nature))
86
+ .map(({ nature, file, summary }) => `- ${natureLabel(nature)}${where(file)}: ${summary}`);
87
+ return [
88
+ "The review requires changes:",
89
+ ...changes,
90
+ ...(minor.length > 0
91
+ ? [
92
+ "",
93
+ "Fix these findings too when the fix is safe and stays within the spec; otherwise say why in your summary:",
94
+ ...minor,
95
+ ]
96
+ : []),
97
+ ].join("\n");
77
98
  }
78
99
  //# sourceMappingURL=review.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/domain/review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/domain/review.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,11 @@ const sectionHeadings = [
7
7
  "Constraints",
8
8
  "Dependencies",
9
9
  ];
10
+ /** How to write the items of the sections that hold them, as their problems recall it. */
11
+ const itemFormats = {
12
+ "Acceptance criteria": 'write "- AC<n>: <criterion>"',
13
+ Dependencies: 'write "- <slug>" for each issue this one depends on, or None.',
14
+ };
10
15
  /** Reads issue `slug`'s spec.md: a `# ` title, then exactly the six sections, in order. */
11
16
  export function parseSpec(text, slug) {
12
17
  const [first = "", ...lines] = text.trim().split(/\r?\n/);
@@ -63,7 +68,10 @@ function sectionProblems(headings) {
63
68
  const problems = [
64
69
  ...[...new Set(unknown)].map((heading) => `Unknown section: ## ${heading}`),
65
70
  ...duplicate.map((heading) => `Duplicate section: ## ${heading}`),
66
- ...missing.map((heading) => `Missing section: ## ${heading}${heading === "Dependencies" ? " (the slugs of the issues this one depends on, or None.)" : ""}`),
71
+ ...missing.map((heading) => {
72
+ const format = itemFormats[heading];
73
+ return `Missing section: ## ${heading}${format ? ` (${format})` : ""}`;
74
+ }),
67
75
  ];
68
76
  if (problems.length === 0 &&
69
77
  headings.join("\n") !== sectionHeadings.join("\n"))
@@ -97,7 +105,7 @@ function parseCriteria(lines) {
97
105
  open.text = `${open.text} ${line.trim()}`.trim();
98
106
  else {
99
107
  close();
100
- problems.push(`Acceptance criteria: unexpected line "${line.trim()}" (write "- AC<n>: <criterion>")`);
108
+ problems.push(`Acceptance criteria: unexpected line "${line.trim()}" (${itemFormats["Acceptance criteria"]})`);
101
109
  }
102
110
  }
103
111
  close();
@@ -113,11 +121,11 @@ function parseDependencies(lines, slug) {
113
121
  for (const line of items) {
114
122
  const dependency = /^- (.*)$/.exec(line)?.[1]?.trim();
115
123
  if (dependency === undefined)
116
- problems.push(`Dependencies: unexpected line "${line}" (write "- <slug>" for each issue, or None.)`);
124
+ problems.push(`Dependencies: unexpected line "${line}" (${itemFormats.Dependencies})`);
117
125
  else if (!isSlug(dependency))
118
126
  problems.push(`Dependencies: "${dependency}" is not an issue slug`);
119
127
  else if (dependency === slug)
120
- problems.push(`Dependencies: the issue cannot depend on itself`);
128
+ problems.push("Dependencies: the issue cannot depend on itself");
121
129
  else if (dependencies.includes(dependency))
122
130
  problems.push(`Dependencies: ${dependency} is listed twice`);
123
131
  else
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/domain/spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/domain/spec.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,6 @@ export interface CheckResult {
11
11
  name: string;
12
12
  command: string[];
13
13
  durationMs: number;
14
- /** Where the run kept what the check wrote, for the review. */
15
- outputFile?: string;
16
14
  }
17
15
  /** The correction sent to the implementing agent: the failed check, its cause and the end of its output. */
18
16
  export declare function failureFeedback(check: VerifyCommand, cause: string, output: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/domain/verification.ts"],"names":[],"mappings":"AAkBA,4GAA4G;AAC5G,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,KAAa,EACb,MAAc;IAEd,MAAM,MAAM,GAAG,wBAAwB,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC;IAChG,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,wBAAwB,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACjE,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,OAAO,CAAC,UAAkB;IACxC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/domain/verification.ts"],"names":[],"mappings":"AAgBA,4GAA4G;AAC5G,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,KAAa,EACb,MAAc;IAEd,MAAM,MAAM,GAAG,wBAAwB,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC;IAChG,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,wBAAwB,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACjE,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,OAAO,CAAC,UAAkB;IACxC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;AAC9C,CAAC"}