patchwork-os 1.2.0-beta.2.canary.605 → 1.2.0-beta.2.canary.607

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.
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Dual-write with shadow reads — ADR-0022 step 1 of the migration.
3
+ *
4
+ * The primary (JSONL) stays the source of truth and answers every read. The
5
+ * mirror (SQLite) receives every write and is read only to be COMPARED. When
6
+ * the two disagree, that is reported; it never changes the answer.
7
+ *
8
+ * ## Why not just cut over
9
+ *
10
+ * The migration's safety argument is "the new store behaves like the one we
11
+ * already trust". A test suite can only check that against cases someone
12
+ * thought to write. This checks it against YOUR ACTUAL TRAFFIC, in production,
13
+ * while the store being replaced is still authoritative — including through
14
+ * the first rotation, which on this installation has never once executed
15
+ * (`runs.jsonl.1` has never been written) and is the moment the old store is
16
+ * most likely to lose something.
17
+ *
18
+ * ## Two rules that make this safe
19
+ *
20
+ * 1. **The mirror can never break the primary.** Every mirror call is wrapped;
21
+ * a failure is reported and swallowed. A migration aid that can take down
22
+ * the system it is de-risking is worse than no migration aid.
23
+ *
24
+ * 2. **The mirror can never change an answer.** Reads return the primary's
25
+ * result, always, even when the mirror looks more correct. The moment
26
+ * divergence could alter behaviour, this stops being an observation and
27
+ * becomes an untested cutover.
28
+ *
29
+ * The point at which those rules relax is the flip, and the flip has an
30
+ * explicit gate: #1324, #1340 and rotation loss replayed against both stores,
31
+ * with JSONL visibly LOSING all three (ADR-0022 §4).
32
+ */
33
+ import type { RecipeRun, RunQuery, RunStepResult } from "../runLog.js";
34
+ import type { CompleteRunInput, RunRepository, StartRunInput } from "./runRepository.js";
35
+ /** One observed disagreement between the two stores. */
36
+ export interface Divergence {
37
+ /** Which read surfaced it. */
38
+ operation: "query" | "getBySeq" | "getChildSeqs" | "size";
39
+ /** Machine-usable summary — what differed, in one short phrase. */
40
+ detail: string;
41
+ /** The run the disagreement concerns, when it concerns one. */
42
+ taskId?: string;
43
+ }
44
+ /** One mirror-side failure. Reported, never thrown. */
45
+ export interface MirrorFailure {
46
+ operation: string;
47
+ message: string;
48
+ }
49
+ export interface DualWriteOptions {
50
+ /** Called for every observed disagreement. Must not throw. */
51
+ onDivergence?: (d: Divergence) => void;
52
+ /** Called when a mirror operation fails. Must not throw. */
53
+ onMirrorFailure?: (f: MirrorFailure) => void;
54
+ /**
55
+ * Compare reads. Default true. Turning it off keeps the mirror populated
56
+ * without paying the comparison cost — useful once agreement is
57
+ * established and you only want the data present for the flip.
58
+ */
59
+ compareReads?: boolean;
60
+ }
61
+ /** Differences between one run as each store remembers it. Empty ⇒ agreement. */
62
+ export declare function diffRun(primary: RecipeRun, mirror: RecipeRun): string[];
63
+ export declare class DualWriteRunRepository implements RunRepository {
64
+ private readonly primary;
65
+ private readonly mirror;
66
+ private readonly opts;
67
+ constructor(primary: RunRepository, mirror: RunRepository, opts?: DualWriteOptions);
68
+ /** Run a mirror operation. Never throws; a failure is reported and dropped. */
69
+ private safely;
70
+ private report;
71
+ private get comparing();
72
+ startRun(input: StartRunInput): number;
73
+ updateRunSteps(seq: number, stepResults: RunStepResult[]): void;
74
+ completeRun(seq: number, input: CompleteRunInput): void;
75
+ appendDirect(run: Omit<RecipeRun, "seq">): void;
76
+ query(q?: RunQuery): RecipeRun[];
77
+ getBySeq(seq: number): RecipeRun | null;
78
+ getChildSeqs(parentSeq: number): number[];
79
+ size(): number;
80
+ }
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Dual-write with shadow reads — ADR-0022 step 1 of the migration.
3
+ *
4
+ * The primary (JSONL) stays the source of truth and answers every read. The
5
+ * mirror (SQLite) receives every write and is read only to be COMPARED. When
6
+ * the two disagree, that is reported; it never changes the answer.
7
+ *
8
+ * ## Why not just cut over
9
+ *
10
+ * The migration's safety argument is "the new store behaves like the one we
11
+ * already trust". A test suite can only check that against cases someone
12
+ * thought to write. This checks it against YOUR ACTUAL TRAFFIC, in production,
13
+ * while the store being replaced is still authoritative — including through
14
+ * the first rotation, which on this installation has never once executed
15
+ * (`runs.jsonl.1` has never been written) and is the moment the old store is
16
+ * most likely to lose something.
17
+ *
18
+ * ## Two rules that make this safe
19
+ *
20
+ * 1. **The mirror can never break the primary.** Every mirror call is wrapped;
21
+ * a failure is reported and swallowed. A migration aid that can take down
22
+ * the system it is de-risking is worse than no migration aid.
23
+ *
24
+ * 2. **The mirror can never change an answer.** Reads return the primary's
25
+ * result, always, even when the mirror looks more correct. The moment
26
+ * divergence could alter behaviour, this stops being an observation and
27
+ * becomes an untested cutover.
28
+ *
29
+ * The point at which those rules relax is the flip, and the flip has an
30
+ * explicit gate: #1324, #1340 and rotation loss replayed against both stores,
31
+ * with JSONL visibly LOSING all three (ADR-0022 §4).
32
+ */
33
+ /**
34
+ * Fields compared between stores.
35
+ *
36
+ * Deliberately explicit rather than a deep-equal over the whole record. A
37
+ * blanket comparison would flag differences that carry no meaning — key order,
38
+ * an absent optional versus an explicit `undefined` — and a report full of
39
+ * those is one nobody reads. Every field here is one whose disagreement would
40
+ * mean the stores genuinely remember different things.
41
+ */
42
+ const COMPARED = [
43
+ "taskId",
44
+ "seq",
45
+ "recipeName",
46
+ "trigger",
47
+ "status",
48
+ "createdAt",
49
+ "doneAt",
50
+ "durationMs",
51
+ "errorMessage",
52
+ "parentSeq",
53
+ "manualRunId",
54
+ "hadStepErrors",
55
+ ];
56
+ function stepIds(steps) {
57
+ return (steps ?? [])
58
+ .map((s) => s?.id)
59
+ .filter(Boolean)
60
+ .join(",");
61
+ }
62
+ /** Differences between one run as each store remembers it. Empty ⇒ agreement. */
63
+ export function diffRun(primary, mirror) {
64
+ const out = [];
65
+ for (const k of COMPARED) {
66
+ const a = primary[k];
67
+ const b = mirror[k];
68
+ // `undefined` and absent mean the same thing to every reader of this data,
69
+ // so treat them as equal rather than manufacturing a difference.
70
+ if ((a ?? undefined) !== (b ?? undefined)) {
71
+ out.push(`${k}: primary=${String(a)} mirror=${String(b)}`);
72
+ }
73
+ }
74
+ const pa = stepIds(primary.stepResults);
75
+ const pb = stepIds(mirror.stepResults);
76
+ if (pa !== pb)
77
+ out.push(`stepResults: primary=[${pa}] mirror=[${pb}]`);
78
+ return out;
79
+ }
80
+ export class DualWriteRunRepository {
81
+ primary;
82
+ mirror;
83
+ opts;
84
+ constructor(primary, mirror, opts = {}) {
85
+ this.primary = primary;
86
+ this.mirror = mirror;
87
+ this.opts = opts;
88
+ }
89
+ /** Run a mirror operation. Never throws; a failure is reported and dropped. */
90
+ safely(operation, fn) {
91
+ try {
92
+ return fn();
93
+ }
94
+ catch (err) {
95
+ try {
96
+ this.opts.onMirrorFailure?.({
97
+ operation,
98
+ message: err instanceof Error ? err.message : String(err),
99
+ });
100
+ }
101
+ catch {
102
+ // A reporting callback that throws must not become the outage the
103
+ // mirror was forbidden from causing.
104
+ }
105
+ return undefined;
106
+ }
107
+ }
108
+ report(d) {
109
+ try {
110
+ this.opts.onDivergence?.(d);
111
+ }
112
+ catch {
113
+ // Same reasoning as above.
114
+ }
115
+ }
116
+ get comparing() {
117
+ return this.opts.compareReads !== false;
118
+ }
119
+ startRun(input) {
120
+ const seq = this.primary.startRun(input);
121
+ // Mirror adopts the primary's seq — see StartRunInput.seq. Without this
122
+ // every mirrored row differs on `seq` and the comparison is all noise.
123
+ this.safely("startRun", () => this.mirror.startRun({ ...input, seq }));
124
+ return seq;
125
+ }
126
+ updateRunSteps(seq, stepResults) {
127
+ this.primary.updateRunSteps(seq, stepResults);
128
+ this.safely("updateRunSteps", () => this.mirror.updateRunSteps(seq, stepResults));
129
+ }
130
+ completeRun(seq, input) {
131
+ this.primary.completeRun(seq, input);
132
+ this.safely("completeRun", () => this.mirror.completeRun(seq, input));
133
+ }
134
+ appendDirect(run) {
135
+ this.primary.appendDirect(run);
136
+ // No seq to mirror here: each store allocates its own for this path. They
137
+ // agree because both counters advance in lockstep over the same call
138
+ // sequence — and if they ever stop agreeing, the comparison says so
139
+ // instead of the mismatch hiding.
140
+ this.safely("appendDirect", () => this.mirror.appendDirect(run));
141
+ }
142
+ query(q = {}) {
143
+ const primary = this.primary.query(q);
144
+ if (!this.comparing)
145
+ return primary;
146
+ const mirror = this.safely("query", () => this.mirror.query(q));
147
+ if (mirror === undefined)
148
+ return primary;
149
+ if (primary.length !== mirror.length) {
150
+ this.report({
151
+ operation: "query",
152
+ detail: `row count: primary=${primary.length} mirror=${mirror.length}`,
153
+ });
154
+ return primary;
155
+ }
156
+ // Compare by taskId rather than by position: a pure ORDER difference is
157
+ // worth knowing about, but it must not masquerade as every row differing.
158
+ const byId = new Map(mirror.map((r) => [r.taskId, r]));
159
+ for (const p of primary) {
160
+ const m = byId.get(p.taskId);
161
+ if (!m) {
162
+ this.report({
163
+ operation: "query",
164
+ taskId: p.taskId,
165
+ detail: "present in primary, absent from mirror",
166
+ });
167
+ continue;
168
+ }
169
+ for (const d of diffRun(p, m)) {
170
+ this.report({ operation: "query", taskId: p.taskId, detail: d });
171
+ }
172
+ }
173
+ const orderPrimary = primary.map((r) => r.taskId).join(",");
174
+ const orderMirror = mirror.map((r) => r.taskId).join(",");
175
+ if (orderPrimary !== orderMirror) {
176
+ this.report({
177
+ operation: "query",
178
+ detail: "same rows, different order",
179
+ });
180
+ }
181
+ return primary;
182
+ }
183
+ getBySeq(seq) {
184
+ const primary = this.primary.getBySeq(seq);
185
+ if (!this.comparing)
186
+ return primary;
187
+ const mirror = this.safely("getBySeq", () => this.mirror.getBySeq(seq));
188
+ if (mirror === undefined)
189
+ return primary;
190
+ if (primary && mirror) {
191
+ for (const d of diffRun(primary, mirror)) {
192
+ this.report({
193
+ operation: "getBySeq",
194
+ taskId: primary.taskId,
195
+ detail: d,
196
+ });
197
+ }
198
+ }
199
+ else if (primary !== mirror) {
200
+ this.report({
201
+ operation: "getBySeq",
202
+ detail: `presence: primary=${primary ? "found" : "null"} mirror=${mirror ? "found" : "null"}`,
203
+ });
204
+ }
205
+ return primary;
206
+ }
207
+ getChildSeqs(parentSeq) {
208
+ const primary = this.primary.getChildSeqs(parentSeq);
209
+ if (!this.comparing)
210
+ return primary;
211
+ const mirror = this.safely("getChildSeqs", () => this.mirror.getChildSeqs(parentSeq));
212
+ if (mirror === undefined)
213
+ return primary;
214
+ const a = [...primary].sort((x, y) => x - y).join(",");
215
+ const b = [...mirror].sort((x, y) => x - y).join(",");
216
+ if (a !== b) {
217
+ this.report({
218
+ operation: "getChildSeqs",
219
+ detail: `children of ${parentSeq}: primary=[${a}] mirror=[${b}]`,
220
+ });
221
+ }
222
+ return primary;
223
+ }
224
+ size() {
225
+ const primary = this.primary.size();
226
+ if (!this.comparing)
227
+ return primary;
228
+ const mirror = this.safely("size", () => this.mirror.size());
229
+ if (mirror !== undefined && mirror !== primary) {
230
+ this.report({
231
+ operation: "size",
232
+ detail: `primary=${primary} mirror=${mirror}`,
233
+ });
234
+ }
235
+ return primary;
236
+ }
237
+ }
238
+ //# sourceMappingURL=dualWriteRunRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dualWriteRunRepository.js","sourceRoot":"","sources":["../../src/runStore/dualWriteRunRepository.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export declare class JsonlRunRepository implements RunRepository {
20
20
  static open(opts: RunLogOptions): JsonlRunRepository;
21
21
  /**
22
22
  * Escape hatch for callers still reaching for `RecipeRunLog`-only methods
23
- * (`record`, `appendDirect`, `readArchive`). Those are deliberately absent
23
+ * (`record`, `readArchive`). Those are deliberately absent
24
24
  * from `RunRepository` — `readArchive` in particular is a JSONL rotation
25
25
  * detail with no meaning in a store that does not rotate by bytes.
26
26
  *
@@ -30,6 +30,7 @@ export declare class JsonlRunRepository implements RunRepository {
30
30
  startRun(input: StartRunInput): number;
31
31
  updateRunSteps(seq: number, stepResults: RunStepResult[]): void;
32
32
  completeRun(seq: number, input: CompleteRunInput): void;
33
+ appendDirect(run: Omit<RecipeRun, "seq">): void;
33
34
  query(q?: RunQuery): RecipeRun[];
34
35
  getBySeq(seq: number): RecipeRun | null;
35
36
  getChildSeqs(parentSeq: number): number[];
@@ -22,7 +22,7 @@ export class JsonlRunRepository {
22
22
  }
23
23
  /**
24
24
  * Escape hatch for callers still reaching for `RecipeRunLog`-only methods
25
- * (`record`, `appendDirect`, `readArchive`). Those are deliberately absent
25
+ * (`record`, `readArchive`). Those are deliberately absent
26
26
  * from `RunRepository` — `readArchive` in particular is a JSONL rotation
27
27
  * detail with no meaning in a store that does not rotate by bytes.
28
28
  *
@@ -40,6 +40,9 @@ export class JsonlRunRepository {
40
40
  completeRun(seq, input) {
41
41
  this.log.completeRun(seq, input);
42
42
  }
43
+ appendDirect(run) {
44
+ this.log.appendDirect(run);
45
+ }
43
46
  query(q = {}) {
44
47
  return this.log.query(q);
45
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jsonlRunRepository.js","sourceRoot":"","sources":["../../src/runStore/jsonlRunRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AAOhE,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,GAAiB;QAAjB,QAAG,GAAH,GAAG,CAAc;IAAG,CAAC;IAElD,sEAAsE;IACtE,MAAM,CAAC,IAAI,CAAC,IAAmB;QAC7B,OAAO,IAAI,kBAAkB,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,KAAoB;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,cAAc,CAAC,GAAW,EAAE,WAA4B;QACtD,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW,CAAC,GAAW,EAAE,KAAuB;QAC9C,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAc,EAAE;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"jsonlRunRepository.js","sourceRoot":"","sources":["../../src/runStore/jsonlRunRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AAOhE,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,GAAiB;QAAjB,QAAG,GAAH,GAAG,CAAc;IAAG,CAAC;IAElD,sEAAsE;IACtE,MAAM,CAAC,IAAI,CAAC,IAAmB;QAC7B,OAAO,IAAI,kBAAkB,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,KAAoB;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,cAAc,CAAC,GAAW,EAAE,WAA4B;QACtD,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW,CAAC,GAAW,EAAE,KAAuB;QAC9C,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,YAAY,CAAC,GAA2B;QACtC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAc,EAAE;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -39,6 +39,21 @@ export interface StartRunInput {
39
39
  manualRunId?: string;
40
40
  /** Test seam — defaults to this process. See `RecipeRun.ownerPid`. */
41
41
  ownerPid?: number;
42
+ /**
43
+ * Adopt this `seq` instead of minting one. MIRRORING ONLY.
44
+ *
45
+ * Exists because dual-write is otherwise unusable: both stores mint their
46
+ * own per-instance counter, so a mirrored run would carry a different `seq`
47
+ * in each store, on every row. Comparison would then report a difference
48
+ * every single time — and a divergence signal that always fires is
49
+ * indistinguishable from one that never does. The noise would hide exactly
50
+ * the real disagreement the comparison exists to catch.
51
+ *
52
+ * Ordinary callers must not pass this. It is not a way to choose an id: the
53
+ * value is meaningless outside the process that minted it (#1324), which is
54
+ * precisely why `task_id` is the real identity.
55
+ */
56
+ seq?: number;
42
57
  }
43
58
  /** Arguments to {@link RunRepository.completeRun}. Mirrors `RecipeRunLog.completeRun`. */
44
59
  export interface CompleteRunInput {
@@ -76,6 +91,21 @@ export interface RunRepository {
76
91
  updateRunSteps(seq: number, stepResults: RunStepResult[]): void;
77
92
  /** Finish a run. Must be durable before returning. */
78
93
  completeRun(seq: number, input: CompleteRunInput): void;
94
+ /**
95
+ * Record an ALREADY-FINISHED run in one shot, allocating its `seq`.
96
+ *
97
+ * This is not a convenience wrapper around start+complete — it is the
98
+ * dominant production write path, used by the flat and chained runners and
99
+ * the CLI (5 call sites, versus 2 for `startRun`). Omitting it was a real
100
+ * design error in the first cut of this interface: dual-write would have
101
+ * silently missed every run written this way, and then reported divergence
102
+ * on all of them.
103
+ *
104
+ * Implementations must derive `hadStepErrors` from `stepResults` exactly as
105
+ * `completeRun` does, so a run recorded through this path is
106
+ * indistinguishable from one recorded through the lifecycle path.
107
+ */
108
+ appendDirect(run: Omit<RecipeRun, "seq">): void;
79
109
  /** Query runs, newest first. */
80
110
  query(q?: RunQuery): RecipeRun[];
81
111
  /**
@@ -85,6 +85,7 @@ export declare class SqliteRunRepository implements RunRepository {
85
85
  private taskIdForSeq;
86
86
  updateRunSteps(seq: number, stepResults: RunStepResult[]): void;
87
87
  completeRun(seq: number, input: CompleteRunInput): void;
88
+ appendDirect(run: Omit<RecipeRun, "seq">): void;
88
89
  query(q?: RunQuery): RecipeRun[];
89
90
  getBySeq(seq: number): RecipeRun | null;
90
91
  getChildSeqs(parentSeq: number): number[];
@@ -227,7 +227,13 @@ export class SqliteRunRepository {
227
227
  return run;
228
228
  }
229
229
  startRun(input) {
230
- const seq = ++this.seq;
230
+ // Adopt a mirrored seq when given one, so a dual-write pair agrees on
231
+ // every field instead of disagreeing on this one in every row. The
232
+ // counter still advances past it, so a later locally-minted seq cannot
233
+ // collide with one already adopted.
234
+ const seq = input.seq ?? ++this.seq;
235
+ if (input.seq !== undefined && input.seq > this.seq)
236
+ this.seq = input.seq;
231
237
  this.db
232
238
  .prepare(`INSERT INTO runs (task_id, seq, recipe_name, trigger, status, created_at,
233
239
  started_at, model, parent_seq, manual_run_id, owner_pid)
@@ -293,6 +299,32 @@ export class SqliteRunRepository {
293
299
  WHERE task_id=?`)
294
300
  .run(input.status, input.doneAt, input.durationMs, JSON.stringify(input.stepResults), input.outputTail ?? null, input.errorMessage ?? null, hadStepErrors ? 1 : 0, Object.keys(extra).length > 0 ? JSON.stringify(extra) : null, taskId);
295
301
  }
302
+ appendDirect(run) {
303
+ const seq = ++this.seq;
304
+ // Derived here, not trusted from the caller, and by the same rule
305
+ // `completeRun` uses — a run recorded through this path must be
306
+ // indistinguishable from one recorded through the lifecycle path.
307
+ const hadStepErrors = (run.stepResults ?? []).some((s) => s.status === "error");
308
+ const extra = {};
309
+ for (const k of EXTRA_KEYS) {
310
+ const v = run[k];
311
+ if (v !== undefined)
312
+ extra[k] = v;
313
+ }
314
+ this.db
315
+ .prepare(`INSERT INTO runs (task_id, seq, recipe_name, trigger, status, created_at,
316
+ started_at, done_at, duration_ms, model, output_tail,
317
+ error_message, parent_seq, manual_run_id, owner_pid,
318
+ had_step_errors, step_results, extra)
319
+ VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
320
+ ON CONFLICT(task_id) DO UPDATE SET
321
+ seq=excluded.seq, status=excluded.status, done_at=excluded.done_at,
322
+ duration_ms=excluded.duration_ms, output_tail=excluded.output_tail,
323
+ error_message=excluded.error_message,
324
+ had_step_errors=excluded.had_step_errors,
325
+ step_results=excluded.step_results, extra=excluded.extra`)
326
+ .run(run.taskId, seq, run.recipeName, run.trigger, run.status, run.createdAt, run.startedAt ?? null, run.doneAt ?? null, run.durationMs ?? null, run.model ?? null, run.outputTail ?? null, run.errorMessage ?? null, run.parentSeq ?? null, run.manualRunId ?? null, run.ownerPid ?? null, hadStepErrors ? 1 : 0, run.stepResults ? JSON.stringify(run.stepResults) : null, Object.keys(extra).length > 0 ? JSON.stringify(extra) : null);
327
+ }
296
328
  query(q = {}) {
297
329
  const where = [];
298
330
  const args = [];
@@ -1 +1 @@
1
- {"version":3,"file":"sqliteRunRepository.js","sourceRoot":"","sources":["../../src/runStore/sqliteRunRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqliteRunRepository.js","sourceRoot":"","sources":["../../src/runStore/sqliteRunRepository.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "patchwork-os",
3
- "version": "1.2.0-beta.2.canary.605",
3
+ "version": "1.2.0-beta.2.canary.607",
4
4
  "description": "Your personal AI runtime, local-first. Patchwork OS gives any AI model a consistent set of tools, YAML recipes, a delegation policy with approval queue, and a durable trace memory — all on your machine, all under your policy.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",