patchwork-os 0.2.0-beta.13.canary.283 → 0.2.0-beta.13.canary.284
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/workers/runWorkerShadow.d.ts +3 -0
- package/dist/workers/runWorkerShadow.js +12 -2
- package/dist/workers/runWorkerShadow.js.map +1 -1
- package/dist/workers/shadowObserver.d.ts +28 -0
- package/dist/workers/shadowObserver.js +42 -0
- package/dist/workers/shadowObserver.js.map +1 -1
- package/dist/workers/shadowReport.d.ts +4 -1
- package/dist/workers/shadowReport.js +8 -2
- package/dist/workers/shadowReport.js.map +1 -1
- package/package.json +1 -1
|
@@ -15,6 +15,9 @@ export interface RunWorkerShadowOpts {
|
|
|
15
15
|
patchworkDir?: string;
|
|
16
16
|
/** ~/.claude/ide (activity-*.jsonl) override (tests). */
|
|
17
17
|
ideDir?: string;
|
|
18
|
+
/** Wall-clock override (tests) for durable-outcome labelling. Defaults to
|
|
19
|
+
* Date.now() — supplied here (the I/O entry) so the observer stays pure. */
|
|
20
|
+
now?: number;
|
|
18
21
|
}
|
|
19
22
|
export interface WorkerShadowData {
|
|
20
23
|
workers: WorkerShadowReport[];
|
|
@@ -121,7 +121,12 @@ export function getWorkerShadowData(opts = {}) {
|
|
|
121
121
|
: [];
|
|
122
122
|
const decisions = workers.length ? readDecisions(ideDir) : [];
|
|
123
123
|
return {
|
|
124
|
-
|
|
124
|
+
// `now` drives durable-outcome labelling (recent non-reversible successes
|
|
125
|
+
// are withheld until they survive the durability window). Real Date.now() in
|
|
126
|
+
// production; tests inject opts.now.
|
|
127
|
+
workers: buildShadowReport(workers, runs, decisions, undefined, {
|
|
128
|
+
now: opts.now ?? Date.now(),
|
|
129
|
+
}),
|
|
125
130
|
runsScanned: runs.length,
|
|
126
131
|
decisionsScanned: decisions.length,
|
|
127
132
|
workersDir,
|
|
@@ -143,7 +148,12 @@ export function loadWorkerTrustForRecipe(recipeName, opts = {}) {
|
|
|
143
148
|
const workers = loadWorkersFromDir(workersDir);
|
|
144
149
|
if (!workers.length)
|
|
145
150
|
return null;
|
|
146
|
-
|
|
151
|
+
// Same durable-outcome labelling as the dial (one source of truth): the live
|
|
152
|
+
// gate must not count a recent non-reversible success that could still be
|
|
153
|
+
// reverted. Real Date.now() in production; tests inject opts.now.
|
|
154
|
+
const observer = new WorkerShadowObserver(workers, {
|
|
155
|
+
now: opts.now ?? Date.now(),
|
|
156
|
+
});
|
|
147
157
|
const worker = observer.workerForRecipe(recipeName);
|
|
148
158
|
if (!worker)
|
|
149
159
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runWorkerShadow.js","sourceRoot":"","sources":["../../src/workers/runWorkerShadow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAGL,oBAAoB,GAErB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"runWorkerShadow.js","sourceRoot":"","sources":["../../src/workers/runWorkerShadow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Reversibility } from "./actionClass.js";
|
|
1
2
|
import { type GraduationConfig } from "./graduation.js";
|
|
2
3
|
import { type WorkerManifest } from "./worker.js";
|
|
3
4
|
import { type AuditEvent, type BoardRow, WorkerLevelStore } from "./workerLevelStore.js";
|
|
@@ -57,14 +58,41 @@ export interface WorkerShadowReport {
|
|
|
57
58
|
agreed: number;
|
|
58
59
|
divergences: Divergence[];
|
|
59
60
|
}
|
|
61
|
+
/** Default durability window — a non-reversible success must survive this long
|
|
62
|
+
* before it counts as earned trust. 24h is long enough to catch a revert /
|
|
63
|
+
* close-as-junk / rollback, short enough that a genuinely-good action graduates
|
|
64
|
+
* within a day. */
|
|
65
|
+
export declare const DEFAULT_DURABILITY_WINDOW_MS: number;
|
|
66
|
+
/**
|
|
67
|
+
* Durable-outcome label. `good = step.status:ok` is an OPTIMISTIC proxy: a PR
|
|
68
|
+
* that merged, an issue that filed — but a junk issue closed seconds later, or a
|
|
69
|
+
* commit reverted within the hour, "succeeded" at the moment yet is not earned
|
|
70
|
+
* trust. So a SUCCESS on a non-reversible (compensable/irreversible) action is
|
|
71
|
+
* "durable" — i.e. counts as evidence — only once it has survived the durability
|
|
72
|
+
* window. Reversible successes (undoable / re-runnable: reads, ledgered writes,
|
|
73
|
+
* local commits, CI) are always durable. Failures are unaffected (a failure is
|
|
74
|
+
* durable evidence of failure regardless of age).
|
|
75
|
+
*
|
|
76
|
+
* This only ever WITHHOLDS recent risky successes (reduces evidence → lower
|
|
77
|
+
* trust → more gating), so it never widens autonomy. See
|
|
78
|
+
* docs/worker-autonomy-policy-gate.md §3d.
|
|
79
|
+
*/
|
|
80
|
+
export declare function isDurableSuccess(reversibility: Reversibility, runAt: number, now: number, windowMs: number): boolean;
|
|
60
81
|
export declare class WorkerShadowObserver {
|
|
61
82
|
private readonly store;
|
|
62
83
|
private readonly cfg;
|
|
63
84
|
private readonly workers;
|
|
64
85
|
private readonly compare;
|
|
86
|
+
/** Wall-clock supplied by the I/O entry (the observer stays pure — no
|
|
87
|
+
* Date.now). When set, durable-outcome labelling is active; when undefined,
|
|
88
|
+
* the prior status-only behaviour is preserved (back-compat for pure tests). */
|
|
89
|
+
private readonly now?;
|
|
90
|
+
private readonly durabilityWindowMs;
|
|
65
91
|
constructor(workers: WorkerManifest[], opts?: {
|
|
66
92
|
store?: WorkerLevelStore;
|
|
67
93
|
cfg?: GraduationConfig;
|
|
94
|
+
now?: number;
|
|
95
|
+
durabilityWindowMs?: number;
|
|
68
96
|
});
|
|
69
97
|
/**
|
|
70
98
|
* The populated level store. Exposed so the LIVE worker-autonomy gate
|
|
@@ -4,15 +4,47 @@ import { DEFAULT_GRADUATION_CONFIG, } from "./graduation.js";
|
|
|
4
4
|
import { recommend } from "./shadowGate.js";
|
|
5
5
|
import { ownsAction, ownsClassKey, priorFor, } from "./worker.js";
|
|
6
6
|
import { WorkerLevelStore, } from "./workerLevelStore.js";
|
|
7
|
+
/** Default durability window — a non-reversible success must survive this long
|
|
8
|
+
* before it counts as earned trust. 24h is long enough to catch a revert /
|
|
9
|
+
* close-as-junk / rollback, short enough that a genuinely-good action graduates
|
|
10
|
+
* within a day. */
|
|
11
|
+
export const DEFAULT_DURABILITY_WINDOW_MS = 24 * 60 * 60 * 1000;
|
|
12
|
+
/**
|
|
13
|
+
* Durable-outcome label. `good = step.status:ok` is an OPTIMISTIC proxy: a PR
|
|
14
|
+
* that merged, an issue that filed — but a junk issue closed seconds later, or a
|
|
15
|
+
* commit reverted within the hour, "succeeded" at the moment yet is not earned
|
|
16
|
+
* trust. So a SUCCESS on a non-reversible (compensable/irreversible) action is
|
|
17
|
+
* "durable" — i.e. counts as evidence — only once it has survived the durability
|
|
18
|
+
* window. Reversible successes (undoable / re-runnable: reads, ledgered writes,
|
|
19
|
+
* local commits, CI) are always durable. Failures are unaffected (a failure is
|
|
20
|
+
* durable evidence of failure regardless of age).
|
|
21
|
+
*
|
|
22
|
+
* This only ever WITHHOLDS recent risky successes (reduces evidence → lower
|
|
23
|
+
* trust → more gating), so it never widens autonomy. See
|
|
24
|
+
* docs/worker-autonomy-policy-gate.md §3d.
|
|
25
|
+
*/
|
|
26
|
+
export function isDurableSuccess(reversibility, runAt, now, windowMs) {
|
|
27
|
+
if (reversibility === "reversible")
|
|
28
|
+
return true;
|
|
29
|
+
return runAt <= now - windowMs;
|
|
30
|
+
}
|
|
7
31
|
export class WorkerShadowObserver {
|
|
8
32
|
store;
|
|
9
33
|
cfg;
|
|
10
34
|
workers;
|
|
11
35
|
compare = new Map();
|
|
36
|
+
/** Wall-clock supplied by the I/O entry (the observer stays pure — no
|
|
37
|
+
* Date.now). When set, durable-outcome labelling is active; when undefined,
|
|
38
|
+
* the prior status-only behaviour is preserved (back-compat for pure tests). */
|
|
39
|
+
now;
|
|
40
|
+
durabilityWindowMs;
|
|
12
41
|
constructor(workers, opts = {}) {
|
|
13
42
|
this.workers = workers;
|
|
14
43
|
this.store = opts.store ?? new WorkerLevelStore();
|
|
15
44
|
this.cfg = opts.cfg ?? DEFAULT_GRADUATION_CONFIG;
|
|
45
|
+
this.now = opts.now;
|
|
46
|
+
this.durabilityWindowMs =
|
|
47
|
+
opts.durabilityWindowMs ?? DEFAULT_DURABILITY_WINDOW_MS;
|
|
16
48
|
}
|
|
17
49
|
/**
|
|
18
50
|
* The populated level store. Exposed so the LIVE worker-autonomy gate
|
|
@@ -50,6 +82,16 @@ export class WorkerShadowObserver {
|
|
|
50
82
|
if (step.status === "error" &&
|
|
51
83
|
categoriseHaltReason(step.haltReason) === "approval_rejected")
|
|
52
84
|
continue;
|
|
85
|
+
// Durable-outcome label: a recent SUCCESS on a non-reversible action is
|
|
86
|
+
// provisional (a filed issue / pushed commit / merged PR can be reverted
|
|
87
|
+
// or closed-as-junk minutes later), so it is NOT yet counted as evidence.
|
|
88
|
+
// Only active when `now` was supplied by the I/O entry; otherwise the prior
|
|
89
|
+
// status-only fold is used. Withholds evidence only → never widens.
|
|
90
|
+
if (this.now !== undefined && step.status === "ok") {
|
|
91
|
+
const ac = classifyActionClass(step.tool);
|
|
92
|
+
if (!isDurableSuccess(ac.reversibility, run.at, this.now, this.durabilityWindowMs))
|
|
93
|
+
continue; // pending — survives the window before it earns trust
|
|
94
|
+
}
|
|
53
95
|
this.store.apply(worker.id, { toolName: step.tool, good: step.status === "ok", at: run.at }, { prior, cfg: this.cfg });
|
|
54
96
|
}
|
|
55
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadowObserver.js","sourceRoot":"","sources":["../../src/workers/shadowObserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"shadowObserver.js","sourceRoot":"","sources":["../../src/workers/shadowObserver.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,5 +7,8 @@ import type { WorkerManifest } from "./worker.js";
|
|
|
7
7
|
* that moment (not the final state). Pure — the I/O entry (runWorkerShadow)
|
|
8
8
|
* supplies the records read from the real logs.
|
|
9
9
|
*/
|
|
10
|
-
export declare function buildShadowReport(workers: WorkerManifest[], runs: RunRecord[], decisions: DecisionRecord[], cfg?: GraduationConfig
|
|
10
|
+
export declare function buildShadowReport(workers: WorkerManifest[], runs: RunRecord[], decisions: DecisionRecord[], cfg?: GraduationConfig, opts?: {
|
|
11
|
+
now?: number;
|
|
12
|
+
durabilityWindowMs?: number;
|
|
13
|
+
}): WorkerShadowReport[];
|
|
11
14
|
export declare function formatShadowReport(reports: WorkerShadowReport[]): string;
|
|
@@ -5,8 +5,14 @@ import { WorkerShadowObserver, } from "./shadowObserver.js";
|
|
|
5
5
|
* that moment (not the final state). Pure — the I/O entry (runWorkerShadow)
|
|
6
6
|
* supplies the records read from the real logs.
|
|
7
7
|
*/
|
|
8
|
-
export function buildShadowReport(workers, runs, decisions, cfg) {
|
|
9
|
-
const obs = new WorkerShadowObserver(workers, {
|
|
8
|
+
export function buildShadowReport(workers, runs, decisions, cfg, opts = {}) {
|
|
9
|
+
const obs = new WorkerShadowObserver(workers, {
|
|
10
|
+
cfg,
|
|
11
|
+
...(opts.now !== undefined && { now: opts.now }),
|
|
12
|
+
...(opts.durabilityWindowMs !== undefined && {
|
|
13
|
+
durabilityWindowMs: opts.durabilityWindowMs,
|
|
14
|
+
}),
|
|
15
|
+
});
|
|
10
16
|
const merged = [
|
|
11
17
|
...runs.map((r) => ({ at: r.at, run: r })),
|
|
12
18
|
...decisions.map((d) => ({ at: d.at, dec: d })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadowReport.js","sourceRoot":"","sources":["../../src/workers/shadowReport.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,oBAAoB,GAErB,MAAM,qBAAqB,CAAC;AAG7B;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAyB,EACzB,IAAiB,EACjB,SAA2B,EAC3B,GAAsB;
|
|
1
|
+
{"version":3,"file":"shadowReport.js","sourceRoot":"","sources":["../../src/workers/shadowReport.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,oBAAoB,GAErB,MAAM,qBAAqB,CAAC;AAG7B;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAyB,EACzB,IAAiB,EACjB,SAA2B,EAC3B,GAAsB,EACtB,OAAsD,EAAE;IAExD,MAAM,GAAG,GAAG,IAAI,oBAAoB,CAAC,OAAO,EAAE;QAC5C,GAAG;QACH,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAChD,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS,IAAI;YAC3C,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;SAC5C,CAAC;KACH,CAAC,CAAC;IACH,MAAM,MAAM,GAAiE;QAC3E,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1C,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;KAChD,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,GAAG;YAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aAC3B,IAAI,CAAC,CAAC,GAAG;YAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA6B;IAC9D,MAAM,KAAK,GAAa;QACtB,6DAA6D;QAC7D,EAAE;KACH,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,2BAA2B,CAAC,CAAC,eAAe,EAAE,CACzE,CAAC;QACF,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CACR,kEAAkE,CACnE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxB,MAAM,MAAM,GACV,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,eAAe;oBACzB,CAAC,CAAC,kBAAkB,CAAC,CAAC,eAAe,YAAY;oBACjD,CAAC,CAAC,EAAE,CAAC;gBACT,sEAAsE;gBACtE,uEAAuE;gBACvE,sDAAsD;gBACtD,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAmC,CAAC;gBACpE,KAAK,CAAC,IAAI,CACR,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,KAAK,GAAG,MAAM,QAAQ,CAAC,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,QAAQ,EAAE,CACvI,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CACR,qBAAqB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,YAAY,CAAC,CAAC,WAAW,CAAC,MAAM,gBAAgB,CAC5F,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC1C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "patchwork-os",
|
|
3
|
-
"version": "0.2.0-beta.13.canary.
|
|
3
|
+
"version": "0.2.0-beta.13.canary.284",
|
|
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",
|