@llm4ts/flow 2.32.0 → 2.34.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.
package/dist/Port.js ADDED
@@ -0,0 +1,345 @@
1
+ // Porting a code base file by file (ADR 0028): the manifest, its batches, the
2
+ // deterministic target path, the machine-readable PORT STATUS trailer every
3
+ // draft ends with, and the pilot report. Pure; the flows own the seats.
4
+ import { basename, dirname, extname } from "node:path";
5
+ import * as Schema from "effect/Schema";
6
+ import { DraftApprovalMarker } from "./Approval.js";
7
+ export class PortEntry extends Schema.Class("PortEntry")({
8
+ /** Repo-relative source path; also the queue item id. */
9
+ id: Schema.String,
10
+ source: Schema.String,
11
+ target: Schema.String,
12
+ loc: Schema.Int
13
+ }) {
14
+ }
15
+ /**
16
+ * The target path of a source, from the pack's `target:` template:
17
+ * `{{dir}}` (the source's directory, "" at the root), `{{base}}` (its name
18
+ * without extension), `{{ext}}` (the extension without the dot), `{{path}}`
19
+ * (the whole source path).
20
+ */
21
+ export const targetPathOf = (template, source) => {
22
+ const dir = dirname(source);
23
+ const ext = extname(source);
24
+ const rendered = template
25
+ .replaceAll("{{dir}}", dir === "." ? "" : dir)
26
+ .replaceAll("{{base}}", basename(source, ext))
27
+ .replaceAll("{{ext}}", ext.replace(/^\./u, ""))
28
+ .replaceAll("{{path}}", source);
29
+ return rendered.replace(/^\/+/u, "").replaceAll("//", "/");
30
+ };
31
+ export const linesOf = (text) => text.length === 0 ? 0 : text.split(/\r?\n/u).filter((line) => line.trim().length > 0).length;
32
+ /** Contiguous batches of the manifest; a batch led by a big file is small (the Bun rule). */
33
+ export const batchesOf = (entries, policy = {}) => {
34
+ const files = Math.max(1, policy.files ?? 100);
35
+ const bigLoc = policy.bigLoc ?? 2_200;
36
+ const small = Math.max(1, policy.small ?? 6);
37
+ const batches = [];
38
+ let index = 0;
39
+ while (index < entries.length) {
40
+ const first = entries[index];
41
+ const size = first !== undefined && first.loc > bigLoc ? small : files;
42
+ batches.push(entries.slice(index, index + size));
43
+ index += size;
44
+ }
45
+ return batches;
46
+ };
47
+ export const PortConfidence = Schema.Literals(["high", "medium", "low"]);
48
+ const statusWindow = 40;
49
+ /**
50
+ * The PORT STATUS trailer of a draft: in any comment syntax, within the last
51
+ * lines of the file, `confidence: high|medium|low`, `todos: <n>`, `notes: …`.
52
+ * All undefined when the draft has no trailer.
53
+ */
54
+ export const portStatusIn = (text) => {
55
+ const lines = text.split(/\r?\n/u);
56
+ const tail = lines.slice(Math.max(0, lines.length - statusWindow));
57
+ const start = tail.findIndex((line) => /PORT STATUS/u.test(line));
58
+ if (start < 0) {
59
+ return { confidence: undefined, todos: undefined, notes: undefined };
60
+ }
61
+ const block = tail.slice(start).join("\n");
62
+ const confidence = /confidence:\s*(high|medium|low)\b/iu.exec(block)?.[1]?.toLowerCase();
63
+ const todos = /todos?:\s*(\d+)/iu.exec(block)?.[1];
64
+ const notes = /notes?:\s*(.+)$/imu.exec(block)?.[1]?.trim();
65
+ return {
66
+ confidence: confidence === "high" || confidence === "medium" || confidence === "low"
67
+ ? confidence
68
+ : undefined,
69
+ todos: todos === undefined ? undefined : Number.parseInt(todos, 10),
70
+ notes: notes === undefined || notes.length === 0 ? undefined : notes.replace(/\s*\*\/\s*$/u, "")
71
+ };
72
+ };
73
+ /** The instruction every implementer gets: how to end the file. */
74
+ export const portStatusInstruction = (comment) => [
75
+ `End the file with a machine-readable trailer in ${comment} comments, exactly this shape:`,
76
+ `${comment} PORT STATUS`,
77
+ `${comment} source: <the source path>`,
78
+ `${comment} confidence: high | medium | low`,
79
+ `${comment} todos: <number of TODO(port) markers you left>`,
80
+ `${comment} notes: <one line: what you could not translate faithfully, or "none">`,
81
+ "`confidence: low` means the logic is probably wrong and must be re-read against the source."
82
+ ].join("\n");
83
+ const minutes = (ms) => `${(ms / 60_000).toFixed(1)} min`;
84
+ /** The pilot report (R7 of the plan): rates measured, totals extrapolated, an approval to continue. */
85
+ export const renderPilotReport = (facts) => {
86
+ const done = facts.outcomes.filter((outcome) => outcome.status === "done");
87
+ const failed = facts.outcomes.filter((outcome) => outcome.status === "failed");
88
+ const count = (level) => done.filter((outcome) => outcome.confidence === level).length;
89
+ const todos = done.reduce((sum, outcome) => sum + (outcome.todos ?? 0), 0);
90
+ const perItemMs = facts.piloted === 0 ? 0 : facts.elapsedMs / facts.piloted;
91
+ const perItemCost = facts.estimatedCostUsd === undefined || facts.piloted === 0
92
+ ? undefined
93
+ : facts.estimatedCostUsd / facts.piloted;
94
+ return [
95
+ "# Port pilot",
96
+ "",
97
+ `- piloted: ${facts.piloted} file(s), ${done.length} done, ${failed.length} failed, in ${minutes(facts.elapsedMs)}`,
98
+ `- confidence: ${count("high")} high, ${count("medium")} medium, ${count("low")} low; ${todos} TODO(port) marker(s)`,
99
+ ...(perItemCost === undefined
100
+ ? []
101
+ : [
102
+ `- cost: ~$${(facts.estimatedCostUsd ?? 0).toFixed(2)} (~$${perItemCost.toFixed(3)} per file)`
103
+ ]),
104
+ `- remaining: ${facts.remaining} file(s) → about ${minutes(perItemMs * facts.remaining)} at this rate${perItemCost === undefined ? "" : ` and ~$${(perItemCost * facts.remaining).toFixed(2)}`}`,
105
+ "",
106
+ ...(failed.length === 0
107
+ ? []
108
+ : [
109
+ "## Failed",
110
+ "",
111
+ ...failed.map((outcome) => `- ${outcome.id}: ${outcome.note ?? ""}`),
112
+ ""
113
+ ]),
114
+ "Read the drafted files beside their sources, then tick the box to let the next run",
115
+ "port the rest; edit `prompts/porting.md` in the pack first if the drafts show a",
116
+ "pattern the rulebook should settle.",
117
+ "",
118
+ DraftApprovalMarker,
119
+ ""
120
+ ].join("\n");
121
+ };
122
+ /** A whole new file rendered as a unified diff of additions, for reviewers that judge diffs. */
123
+ export const asAddedFileDiff = (path, content) => {
124
+ const lines = content.split(/\r?\n/u);
125
+ return [
126
+ `diff --git a/${path} b/${path}`,
127
+ "new file mode 100644",
128
+ "--- /dev/null",
129
+ `+++ b/${path}`,
130
+ `@@ -0,0 +1,${lines.length} @@`,
131
+ ...lines.map((line) => `+${line}`)
132
+ ].join("\n");
133
+ };
134
+ // ---- Ledger (port-ledger) --------------------------------------------------------------
135
+ /** One classified unit of a source file, with the line that proves it. */
136
+ export class LedgerRow extends Schema.Class("LedgerRow")({
137
+ file: Schema.String,
138
+ unit: Schema.String,
139
+ class: Schema.String,
140
+ /** `file:line` of the statement the classification rests on. */
141
+ evidence: Schema.String,
142
+ confidence: PortConfidence
143
+ }) {
144
+ }
145
+ const tsvEscape = (value) => value.replaceAll("\t", " ").replaceAll("\n", " ");
146
+ /** The ledger as a TSV with a header: `file unit class evidence confidence`. */
147
+ export const renderLedger = (rows) => [
148
+ "file\tunit\tclass\tevidence\tconfidence",
149
+ ...rows.map((row) => [row.file, row.unit, row.class, row.evidence, row.confidence].map(tsvEscape).join("\t"))
150
+ ].join("\n") + "\n";
151
+ export const parseLedger = (text) => text
152
+ .split(/\r?\n/u)
153
+ .slice(1)
154
+ .filter((line) => line.trim().length > 0)
155
+ .flatMap((line) => {
156
+ const [file, unit, klass, evidence, confidence] = line.split("\t");
157
+ return file === undefined || unit === undefined || klass === undefined
158
+ ? []
159
+ : [
160
+ LedgerRow.make({
161
+ file,
162
+ unit,
163
+ class: klass,
164
+ evidence: evidence ?? "",
165
+ confidence: confidence === "high" || confidence === "medium" || confidence === "low"
166
+ ? confidence
167
+ : "low"
168
+ })
169
+ ];
170
+ });
171
+ /** The rows of one source file, rendered for its implementer ("trust the table over local guessing"). */
172
+ export const ledgerRowsFor = (rows, file) => {
173
+ const mine = rows.filter((row) => row.file === file);
174
+ return mine.length === 0
175
+ ? undefined
176
+ : mine
177
+ .map((row) => `- ${row.unit}: ${row.class} (${row.evidence}; ${row.confidence})`)
178
+ .join("\n");
179
+ };
180
+ /** The units a pack's `## Ledger` regex names in a source file, each once. */
181
+ export const unitsIn = (text, unitRegex) => {
182
+ const pattern = new RegExp(unitRegex, "gmu");
183
+ const units = [];
184
+ for (let match = pattern.exec(text); match !== null; match = pattern.exec(text)) {
185
+ const name = match.slice(1).find((group) => group !== undefined && group.length > 0);
186
+ if (name !== undefined && !units.includes(name))
187
+ units.push(name);
188
+ if (match[0].length === 0)
189
+ pattern.lastIndex += 1;
190
+ }
191
+ return units;
192
+ };
193
+ // ---- Refutes (port-guide, port-ledger) ----------------------------------------------------
194
+ /** A claim stands unless a majority of its refuters reject it (the Bun port's 3-vote refute). */
195
+ export const standsAfterRefutes = (votes) => {
196
+ const rejected = votes.filter((holds) => !holds).length;
197
+ return votes.length === 0 ? true : rejected * 2 < votes.length;
198
+ };
199
+ // ---- Guide audit (port-guide) -------------------------------------------------------------
200
+ export class GuideFinding extends Schema.Class("GuideFinding")({
201
+ dimension: Schema.String,
202
+ finding: Schema.String,
203
+ /** A rulebook line, a sample source line, or a draft line that shows it. */
204
+ evidence: Schema.String,
205
+ /** The rule the rulebook should gain or change, one line. */
206
+ proposedRule: Schema.String
207
+ }) {
208
+ }
209
+ export const defaultAuditDimensions = [
210
+ "error model",
211
+ "ownership and memory",
212
+ "collections and strings",
213
+ "control flow and compile-time constructs",
214
+ "API shape and naming",
215
+ "concurrency and resources",
216
+ "build, test and tooling idioms",
217
+ "what not to translate"
218
+ ];
219
+ export const renderGuideAudit = (facts) => [
220
+ `# Rulebook audit — pack ${facts.pack}`,
221
+ "",
222
+ `- sample files: ${facts.sample.join(", ") || "none"}`,
223
+ `- findings kept after the refute: ${facts.kept.length}; dropped: ${facts.dropped.length}`,
224
+ "",
225
+ ...(facts.kept.length === 0
226
+ ? ["No finding survived: the rulebook stands as written.", ""]
227
+ : [
228
+ "## Proposed rules",
229
+ "",
230
+ "Each is an `append-rule` to `prompts/porting.md`, applied on the next run once approved.",
231
+ "",
232
+ ...facts.kept.flatMap((finding) => [
233
+ `### ${finding.dimension}`,
234
+ "",
235
+ `**Finding.** ${finding.finding.trim()}`,
236
+ "",
237
+ `**Evidence.** ${finding.evidence.trim()}`,
238
+ "",
239
+ "```diff",
240
+ `+ - ${finding.proposedRule.trim()}`,
241
+ "```",
242
+ ""
243
+ ])
244
+ ]),
245
+ ...(facts.trial.length === 0
246
+ ? []
247
+ : [
248
+ "## Trial port: where the native port and the rulebook port differ",
249
+ "",
250
+ ...facts.trial.map((line) => `- ${line}`),
251
+ ""
252
+ ]),
253
+ ...(facts.dropped.length === 0
254
+ ? []
255
+ : [
256
+ "## Dropped by the refute",
257
+ "",
258
+ ...facts.dropped.map((finding) => `- ${finding.dimension}: ${finding.finding.trim()}`),
259
+ ""
260
+ ]),
261
+ DraftApprovalMarker,
262
+ ""
263
+ ].join("\n");
264
+ // ---- Differential (port-tests) ------------------------------------------------------------
265
+ export const DiffClass = Schema.Literals(["pass", "diverge", "crash", "hang", "legacy-red"]);
266
+ export class DiffVerdict extends Schema.Class("DiffVerdict")({
267
+ file: Schema.String,
268
+ class: DiffClass,
269
+ legacyPassed: Schema.optionalKey(Schema.Int),
270
+ targetPassed: Schema.optionalKey(Schema.Int),
271
+ detail: Schema.String
272
+ }) {
273
+ }
274
+ /**
275
+ * The Bun test swarm's verdict: a test file passes when the target exits 0
276
+ * AND its pass count equals the legacy baseline's (when both are known). A
277
+ * legacy run that is red itself is no evidence about the target.
278
+ */
279
+ export const diffVerdict = (file, legacy, target, roots = []) => {
280
+ const strip = (text) => roots.reduce((acc, root) => acc.replaceAll(`${root}/`, ""), text);
281
+ const legacyPassed = legacy.passed;
282
+ const targetPassed = target.passed;
283
+ const counts = {
284
+ ...(legacyPassed === undefined ? {} : { legacyPassed }),
285
+ ...(targetPassed === undefined ? {} : { targetPassed })
286
+ };
287
+ if (!legacy.isClean) {
288
+ return DiffVerdict.make({
289
+ file,
290
+ class: "legacy-red",
291
+ ...counts,
292
+ detail: "the legacy build fails this file too; nothing to compare"
293
+ });
294
+ }
295
+ const gate = target.issues.find((issue) => issue.gateClass !== undefined);
296
+ if (gate?.gateClass === "hang") {
297
+ return DiffVerdict.make({ file, class: "hang", ...counts, detail: strip(gate.description) });
298
+ }
299
+ if (gate?.gateClass === "crash") {
300
+ return DiffVerdict.make({ file, class: "crash", ...counts, detail: strip(gate.description) });
301
+ }
302
+ if (!target.isClean) {
303
+ return DiffVerdict.make({
304
+ file,
305
+ class: "diverge",
306
+ ...counts,
307
+ detail: strip(target.issues.map((issue) => issue.description).join("\n"))
308
+ });
309
+ }
310
+ if (legacyPassed !== undefined && targetPassed !== undefined && targetPassed !== legacyPassed) {
311
+ return DiffVerdict.make({
312
+ file,
313
+ class: "diverge",
314
+ ...counts,
315
+ detail: `${targetPassed} test(s) pass on the target, ${legacyPassed} on the legacy build`
316
+ });
317
+ }
318
+ return DiffVerdict.make({ file, class: "pass", ...counts, detail: "" });
319
+ };
320
+ /** The `.diag` a fixer reads as its only runtime evidence. */
321
+ export const renderDiag = (verdict, tailChars = 4_000) => [
322
+ `# ${verdict.file}: ${verdict.class}`,
323
+ "",
324
+ `- legacy passed: ${verdict.legacyPassed ?? "unknown"}; target passed: ${verdict.targetPassed ?? "unknown"}`,
325
+ "",
326
+ "## Target output (tail)",
327
+ "",
328
+ "```",
329
+ verdict.detail.length > tailChars ? `…${verdict.detail.slice(-tailChars)}` : verdict.detail,
330
+ "```",
331
+ ""
332
+ ].join("\n");
333
+ export const renderDifferentialReport = (round, verdicts) => {
334
+ const by = (klass) => verdicts.filter((verdict) => verdict.class === klass);
335
+ return [
336
+ `# Differential tests, round ${round}`,
337
+ "",
338
+ `- files: ${verdicts.length}; pass ${by("pass").length}, diverge ${by("diverge").length}, crash ${by("crash").length}, hang ${by("hang").length}, legacy-red ${by("legacy-red").length}`,
339
+ "",
340
+ ...["diverge", "crash", "hang"].flatMap((klass) => by(klass).length === 0
341
+ ? []
342
+ : [`## ${klass}`, "", ...by(klass).map((verdict) => `- ${verdict.file}`), ""])
343
+ ].join("\n");
344
+ };
345
+ //# sourceMappingURL=Port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Port.js","sourceRoot":"","sources":["../src/Port.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Retro.d.ts","sourceRoot":"","sources":["../src/Retro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Retro.d.ts","sourceRoot":"","sources":["../src/Retro.ts"],"names":[],"mappings":"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"}
package/dist/Retro.js CHANGED
@@ -9,7 +9,7 @@
9
9
  * tasks appended to a story's plan, or a story entry edited in the epic
10
10
  * plan (which restarts that story). Nothing is applied unreviewed.
11
11
  */
12
- import { join } from "node:path";
12
+ import { join, resolve, sep } from "node:path";
13
13
  import * as Effect from "effect/Effect";
14
14
  import * as Option from "effect/Option";
15
15
  import * as Schema from "effect/Schema";
@@ -942,7 +942,14 @@ export const applyApprovedRetros = Effect.fn("@llm4ts/flow/Retro.apply")(functio
942
942
  yield* say(`${runId}: rule edit to ${edit.target} is not allowed; skipped`);
943
943
  continue;
944
944
  }
945
- const path = join(options.rulesRoot, edit.target);
945
+ const root = resolve(options.rulesRoot);
946
+ const path = resolve(root, edit.target);
947
+ // The allowlist already rejects absolute paths and `..`; this keeps the
948
+ // resolved file under the repository root whatever the string looked like.
949
+ if (path !== root && !path.startsWith(`${root}${sep}`)) {
950
+ yield* say(`${runId}: rule edit to ${edit.target} resolves outside the repository; skipped`);
951
+ continue;
952
+ }
946
953
  const existing = yield* files.read(path).pipe(Effect.catch(() => Effect.succeed(undefined)));
947
954
  const next = applyRuleEdit(existing, edit);
948
955
  if (next === undefined) {