patchwork-os 1.2.0-beta.2.canary.604 → 1.2.0-beta.2.canary.606
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/runStore/dualWriteRunRepository.d.ts +79 -0
- package/dist/runStore/dualWriteRunRepository.js +230 -0
- package/dist/runStore/dualWriteRunRepository.js.map +1 -0
- package/dist/runStore/runRepository.d.ts +15 -0
- package/dist/runStore/sqliteRunRepository.js +7 -1
- package/dist/runStore/sqliteRunRepository.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
query(q?: RunQuery): RecipeRun[];
|
|
76
|
+
getBySeq(seq: number): RecipeRun | null;
|
|
77
|
+
getChildSeqs(parentSeq: number): number[];
|
|
78
|
+
size(): number;
|
|
79
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
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
|
+
query(q = {}) {
|
|
135
|
+
const primary = this.primary.query(q);
|
|
136
|
+
if (!this.comparing)
|
|
137
|
+
return primary;
|
|
138
|
+
const mirror = this.safely("query", () => this.mirror.query(q));
|
|
139
|
+
if (mirror === undefined)
|
|
140
|
+
return primary;
|
|
141
|
+
if (primary.length !== mirror.length) {
|
|
142
|
+
this.report({
|
|
143
|
+
operation: "query",
|
|
144
|
+
detail: `row count: primary=${primary.length} mirror=${mirror.length}`,
|
|
145
|
+
});
|
|
146
|
+
return primary;
|
|
147
|
+
}
|
|
148
|
+
// Compare by taskId rather than by position: a pure ORDER difference is
|
|
149
|
+
// worth knowing about, but it must not masquerade as every row differing.
|
|
150
|
+
const byId = new Map(mirror.map((r) => [r.taskId, r]));
|
|
151
|
+
for (const p of primary) {
|
|
152
|
+
const m = byId.get(p.taskId);
|
|
153
|
+
if (!m) {
|
|
154
|
+
this.report({
|
|
155
|
+
operation: "query",
|
|
156
|
+
taskId: p.taskId,
|
|
157
|
+
detail: "present in primary, absent from mirror",
|
|
158
|
+
});
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
for (const d of diffRun(p, m)) {
|
|
162
|
+
this.report({ operation: "query", taskId: p.taskId, detail: d });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const orderPrimary = primary.map((r) => r.taskId).join(",");
|
|
166
|
+
const orderMirror = mirror.map((r) => r.taskId).join(",");
|
|
167
|
+
if (orderPrimary !== orderMirror) {
|
|
168
|
+
this.report({
|
|
169
|
+
operation: "query",
|
|
170
|
+
detail: "same rows, different order",
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return primary;
|
|
174
|
+
}
|
|
175
|
+
getBySeq(seq) {
|
|
176
|
+
const primary = this.primary.getBySeq(seq);
|
|
177
|
+
if (!this.comparing)
|
|
178
|
+
return primary;
|
|
179
|
+
const mirror = this.safely("getBySeq", () => this.mirror.getBySeq(seq));
|
|
180
|
+
if (mirror === undefined)
|
|
181
|
+
return primary;
|
|
182
|
+
if (primary && mirror) {
|
|
183
|
+
for (const d of diffRun(primary, mirror)) {
|
|
184
|
+
this.report({
|
|
185
|
+
operation: "getBySeq",
|
|
186
|
+
taskId: primary.taskId,
|
|
187
|
+
detail: d,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else if (primary !== mirror) {
|
|
192
|
+
this.report({
|
|
193
|
+
operation: "getBySeq",
|
|
194
|
+
detail: `presence: primary=${primary ? "found" : "null"} mirror=${mirror ? "found" : "null"}`,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
return primary;
|
|
198
|
+
}
|
|
199
|
+
getChildSeqs(parentSeq) {
|
|
200
|
+
const primary = this.primary.getChildSeqs(parentSeq);
|
|
201
|
+
if (!this.comparing)
|
|
202
|
+
return primary;
|
|
203
|
+
const mirror = this.safely("getChildSeqs", () => this.mirror.getChildSeqs(parentSeq));
|
|
204
|
+
if (mirror === undefined)
|
|
205
|
+
return primary;
|
|
206
|
+
const a = [...primary].sort((x, y) => x - y).join(",");
|
|
207
|
+
const b = [...mirror].sort((x, y) => x - y).join(",");
|
|
208
|
+
if (a !== b) {
|
|
209
|
+
this.report({
|
|
210
|
+
operation: "getChildSeqs",
|
|
211
|
+
detail: `children of ${parentSeq}: primary=[${a}] mirror=[${b}]`,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
return primary;
|
|
215
|
+
}
|
|
216
|
+
size() {
|
|
217
|
+
const primary = this.primary.size();
|
|
218
|
+
if (!this.comparing)
|
|
219
|
+
return primary;
|
|
220
|
+
const mirror = this.safely("size", () => this.mirror.size());
|
|
221
|
+
if (mirror !== undefined && mirror !== primary) {
|
|
222
|
+
this.report({
|
|
223
|
+
operation: "size",
|
|
224
|
+
detail: `primary=${primary} mirror=${mirror}`,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
return primary;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# 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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"}
|
|
@@ -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 {
|
|
@@ -227,7 +227,13 @@ export class SqliteRunRepository {
|
|
|
227
227
|
return run;
|
|
228
228
|
}
|
|
229
229
|
startRun(input) {
|
|
230
|
-
|
|
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)
|
|
@@ -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.
|
|
3
|
+
"version": "1.2.0-beta.2.canary.606",
|
|
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",
|