@miller-tech/uap 2.20.0 → 2.21.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 (51) hide show
  1. package/config/model-profiles/qwen38.json +2 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/benchmarks/benchmark.d.ts +6 -6
  4. package/dist/bin/cli.js +15 -0
  5. package/dist/bin/cli.js.map +1 -1
  6. package/dist/cli/deliver.d.ts +9 -0
  7. package/dist/cli/deliver.d.ts.map +1 -1
  8. package/dist/cli/deliver.js +41 -1
  9. package/dist/cli/deliver.js.map +1 -1
  10. package/dist/delivery/agentic-executor.d.ts +13 -1
  11. package/dist/delivery/agentic-executor.d.ts.map +1 -1
  12. package/dist/delivery/agentic-executor.js +61 -10
  13. package/dist/delivery/agentic-executor.js.map +1 -1
  14. package/dist/delivery/applier.d.ts +37 -1
  15. package/dist/delivery/applier.d.ts.map +1 -1
  16. package/dist/delivery/applier.js +49 -7
  17. package/dist/delivery/applier.js.map +1 -1
  18. package/dist/delivery/convergence-loop.d.ts +48 -0
  19. package/dist/delivery/convergence-loop.d.ts.map +1 -1
  20. package/dist/delivery/convergence-loop.js +161 -14
  21. package/dist/delivery/convergence-loop.js.map +1 -1
  22. package/dist/delivery/failing-files.d.ts +48 -0
  23. package/dist/delivery/failing-files.d.ts.map +1 -0
  24. package/dist/delivery/failing-files.js +112 -0
  25. package/dist/delivery/failing-files.js.map +1 -0
  26. package/dist/delivery/gate-spawn.d.ts +66 -0
  27. package/dist/delivery/gate-spawn.d.ts.map +1 -0
  28. package/dist/delivery/gate-spawn.js +192 -0
  29. package/dist/delivery/gate-spawn.js.map +1 -0
  30. package/dist/delivery/pending-intents.d.ts +37 -4
  31. package/dist/delivery/pending-intents.d.ts.map +1 -1
  32. package/dist/delivery/pending-intents.js +178 -20
  33. package/dist/delivery/pending-intents.js.map +1 -1
  34. package/dist/delivery/prescribed-replay.d.ts +53 -0
  35. package/dist/delivery/prescribed-replay.d.ts.map +1 -0
  36. package/dist/delivery/prescribed-replay.js +196 -0
  37. package/dist/delivery/prescribed-replay.js.map +1 -0
  38. package/dist/delivery/self-gate.d.ts +29 -0
  39. package/dist/delivery/self-gate.d.ts.map +1 -1
  40. package/dist/delivery/self-gate.js +149 -13
  41. package/dist/delivery/self-gate.js.map +1 -1
  42. package/dist/delivery/verifier-ladder.d.ts +7 -0
  43. package/dist/delivery/verifier-ladder.d.ts.map +1 -1
  44. package/dist/delivery/verifier-ladder.js +13 -4
  45. package/dist/delivery/verifier-ladder.js.map +1 -1
  46. package/package.json +1 -1
  47. package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
  48. package/src/policies/enforcers/__pycache__/expert_review_required.cpython-312.pyc +0 -0
  49. package/src/policies/enforcers/__pycache__/quality_metrics_gate.cpython-312.pyc +0 -0
  50. package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
  51. package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
@@ -42,8 +42,36 @@ export interface PendingApplyResult {
42
42
  reason: string;
43
43
  }>;
44
44
  }
45
- /** Read all recorded intents, oldest first. Unparseable lines are ignored. */
45
+ /**
46
+ * An intent plus the log it was read from. The pending log lives at the repo
47
+ * level the DELIVERY GATE was enforcing, while a deliver mission's projectRoot
48
+ * can sit deeper (a crate inside a monorepo). Observed live (run
49
+ * 20261006T042017): the mission prescribed replaying
50
+ * `.uap/pending-deliver.jsonl`, the intents lived at the MONOREPO root's
51
+ * `.uap/`, and a crate-rooted lookup found nothing — the executor then
52
+ * hand-wrote a broken 19KB replacement for content that was already recorded.
53
+ */
54
+ export interface RootedIntent {
55
+ root: string;
56
+ intent: PendingIntent;
57
+ }
58
+ /**
59
+ * Directories from projectRoot up to (and including) the git root whose
60
+ * `.uap/pending-deliver.jsonl` exists. Closest first.
61
+ */
62
+ export declare function pendingLogRoots(projectRoot: string): string[];
63
+ /**
64
+ * Read all recorded intents, oldest first, merging every pending log from
65
+ * projectRoot up to the git root and deduping identical intents recorded at
66
+ * more than one level. Unparseable lines are ignored.
67
+ */
46
68
  export declare function readPendingIntents(projectRoot: string): PendingIntent[];
69
+ /**
70
+ * The archived (already-applied) intents, newest last, from every log level —
71
+ * the restore source for a mission that prescribes recorded content the tree
72
+ * has since clobbered (see prescribed-replay.ts).
73
+ */
74
+ export declare function readAppliedIntents(projectRoot: string): RootedIntent[];
47
75
  /**
48
76
  * Deterministically apply the recorded intents for `file` (or every file when
49
77
  * omitted). Replace-intents require the old_string to match EXACTLY ONCE in
@@ -51,9 +79,14 @@ export declare function readPendingIntents(projectRoot: string): PendingIntent[]
51
79
  * the blocked Write would have done). Multiple intents for one file apply in
52
80
  * recorded order, so a sequence of blocked Edits replays faithfully.
53
81
  *
54
- * Applied (and detected-already-applied) intents are consumed from the log —
55
- * replay is idempotent across runs. Stale-anchor and pre-D1 skips are NOT
56
- * consumed: they stay visible until an operator resolves or clears them.
82
+ * Intents are read from EVERY pending log between projectRoot and the git
83
+ * root (see pendingLogRoots) — the delivery gate records at the level it was
84
+ * enforcing, which may be above a mission's projectRoot.
85
+ *
86
+ * Applied (and detected-already-applied) intents are consumed from the log
87
+ * they were read from — replay is idempotent across runs. Stale-anchor and
88
+ * pre-D1 skips are NOT consumed: they stay visible until an operator resolves
89
+ * or clears them.
57
90
  */
58
91
  export declare function applyPendingIntents(projectRoot: string, file?: string): PendingApplyResult;
59
92
  //# sourceMappingURL=pending-intents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pending-intents.d.ts","sourceRoot":"","sources":["../../src/delivery/pending-intents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACxE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9D;AAKD,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,EAAE,CAevE;AAuCD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAgE1F"}
1
+ {"version":3,"file":"pending-intents.d.ts","sourceRoot":"","sources":["../../src/delivery/pending-intents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACxE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9D;AAKD;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAsB7D;AAmBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,EAAE,CAevE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE,CAmBtE;AAuCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAoI1F"}
@@ -19,17 +19,47 @@
19
19
  * hook-detached + manual runs. Stale-anchor skips stay in the log so they
20
20
  * remain loudly visible.
21
21
  */
22
- import { existsSync, readFileSync, writeFileSync, appendFileSync } from 'fs';
23
- import { join, resolve, relative, isAbsolute } from 'path';
22
+ import { existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, writeFileSync, appendFileSync } from 'fs';
23
+ import { join, resolve, relative, isAbsolute, dirname } from 'path';
24
+ import { protectedWritePathReason } from './applier.js';
24
25
  const PENDING_LOG = '.uap/pending-deliver.jsonl';
25
26
  const APPLIED_LOG = '.uap/pending-deliver.applied.jsonl';
26
- /** Read all recorded intents, oldest first. Unparseable lines are ignored. */
27
- export function readPendingIntents(projectRoot) {
28
- const log = join(projectRoot, PENDING_LOG);
29
- if (!existsSync(log))
27
+ /**
28
+ * Directories from projectRoot up to (and including) the git root whose
29
+ * `.uap/pending-deliver.jsonl` exists. Closest first.
30
+ */
31
+ export function pendingLogRoots(projectRoot) {
32
+ const start = resolve(projectRoot);
33
+ const roots = [];
34
+ let dir = start;
35
+ let foundGit = false;
36
+ for (let hops = 0; hops < 16; hops++) {
37
+ if (existsSync(join(dir, PENDING_LOG)))
38
+ roots.push(dir);
39
+ if (existsSync(join(dir, '.git'))) {
40
+ foundGit = true;
41
+ break; // the git root is the boundary
42
+ }
43
+ const parent = dirname(dir);
44
+ if (parent === dir)
45
+ break;
46
+ dir = parent;
47
+ }
48
+ // No git boundary anywhere in reach (review X5/arch F5): the climb was about
49
+ // to walk straight out of the project into unrelated ancestors — $HOME/.uap
50
+ // pending logs from OTHER projects would merge into this run's replay set.
51
+ // Keep only the project root's own log; crossing repos is the git boundary's
52
+ // job, and there is none.
53
+ if (!foundGit)
54
+ return roots.filter((r) => r === start);
55
+ return roots;
56
+ }
57
+ /** Parse one log file into intents (tolerating garbage lines). */
58
+ function parseIntentsFile(path) {
59
+ if (!existsSync(path))
30
60
  return [];
31
61
  const intents = [];
32
- for (const line of readFileSync(log, 'utf-8').split('\n')) {
62
+ for (const line of readFileSync(path, 'utf-8').split('\n')) {
33
63
  const t = line.trim();
34
64
  if (!t)
35
65
  continue;
@@ -44,6 +74,57 @@ export function readPendingIntents(projectRoot) {
44
74
  }
45
75
  return intents;
46
76
  }
77
+ /**
78
+ * Read all recorded intents, oldest first, merging every pending log from
79
+ * projectRoot up to the git root and deduping identical intents recorded at
80
+ * more than one level. Unparseable lines are ignored.
81
+ */
82
+ export function readPendingIntents(projectRoot) {
83
+ const seen = new Set();
84
+ const merged = [];
85
+ const rooted = [];
86
+ for (const root of pendingLogRoots(projectRoot)) {
87
+ for (const intent of parseIntentsFile(join(root, PENDING_LOG))) {
88
+ const key = intentKey(intent);
89
+ if (seen.has(key))
90
+ continue;
91
+ seen.add(key);
92
+ rooted.push({ root, intent });
93
+ }
94
+ }
95
+ rooted.sort((a, b) => a.intent.ts - b.intent.ts);
96
+ for (const r of rooted)
97
+ merged.push(r.intent);
98
+ return merged;
99
+ }
100
+ /**
101
+ * The archived (already-applied) intents, newest last, from every log level —
102
+ * the restore source for a mission that prescribes recorded content the tree
103
+ * has since clobbered (see prescribed-replay.ts).
104
+ */
105
+ export function readAppliedIntents(projectRoot) {
106
+ const seen = new Set();
107
+ const out = [];
108
+ let dir = resolve(projectRoot);
109
+ for (let hops = 0; hops < 16; hops++) {
110
+ if (existsSync(join(dir, APPLIED_LOG))) {
111
+ for (const intent of parseIntentsFile(join(dir, APPLIED_LOG))) {
112
+ const key = intentKey(intent);
113
+ if (seen.has(key))
114
+ continue;
115
+ seen.add(key);
116
+ out.push({ root: dir, intent });
117
+ }
118
+ }
119
+ if (existsSync(join(dir, '.git')))
120
+ break;
121
+ const parent = dirname(dir);
122
+ if (parent === dir)
123
+ break;
124
+ dir = parent;
125
+ }
126
+ return out;
127
+ }
47
128
  /** Stable identity for consume-filtering (ts + file + exact edit content). */
48
129
  function intentKey(i) {
49
130
  return JSON.stringify({ ts: i.ts, file_path: i.file_path, edit: i.edit ?? null });
@@ -87,17 +168,67 @@ function consumeIntents(root, consumed) {
87
168
  * the blocked Write would have done). Multiple intents for one file apply in
88
169
  * recorded order, so a sequence of blocked Edits replays faithfully.
89
170
  *
90
- * Applied (and detected-already-applied) intents are consumed from the log —
91
- * replay is idempotent across runs. Stale-anchor and pre-D1 skips are NOT
92
- * consumed: they stay visible until an operator resolves or clears them.
171
+ * Intents are read from EVERY pending log between projectRoot and the git
172
+ * root (see pendingLogRoots) — the delivery gate records at the level it was
173
+ * enforcing, which may be above a mission's projectRoot.
174
+ *
175
+ * Applied (and detected-already-applied) intents are consumed from the log
176
+ * they were read from — replay is idempotent across runs. Stale-anchor and
177
+ * pre-D1 skips are NOT consumed: they stay visible until an operator resolves
178
+ * or clears them.
93
179
  */
94
180
  export function applyPendingIntents(projectRoot, file) {
95
181
  const root = resolve(projectRoot);
96
182
  const wanted = file ? resolve(root, file) : null;
97
183
  const result = { applied: [], skipped: [] };
98
- const consumed = [];
99
- for (const intent of readPendingIntents(root)) {
100
- const abs = isAbsolute(intent.file_path) ? intent.file_path : resolve(root, intent.file_path);
184
+ const consumedByRoot = new Map();
185
+ // Merged oldest-first across levels, so a lower log cannot reorder history.
186
+ const seen = new Set();
187
+ const rooted = [];
188
+ for (const logRoot of pendingLogRoots(root)) {
189
+ for (const intent of parseIntentsFile(join(logRoot, PENDING_LOG))) {
190
+ const key = intentKey(intent);
191
+ if (seen.has(key))
192
+ continue;
193
+ seen.add(key);
194
+ rooted.push({ root: logRoot, intent });
195
+ }
196
+ }
197
+ rooted.sort((a, b) => a.intent.ts - b.intent.ts);
198
+ const markConsumed = (logRoot, intent) => {
199
+ const bucket = consumedByRoot.get(logRoot) ?? [];
200
+ bucket.push(intent);
201
+ consumedByRoot.set(logRoot, bucket);
202
+ };
203
+ /**
204
+ * Deterministic replay gets the SAME write protections the model's writes
205
+ * get (review X1, CRITICAL): a planted `.uap/pending-deliver.jsonl` line
206
+ * previously landed its content in `.git/hooks/`, `.github/workflows/` or
207
+ * through a symlinked path with zero review, because replay used raw
208
+ * writeFileSync with only a lexical containment bound. Replay is the
209
+ * STRONGER trust case, not a weaker one — nothing looked at these bytes.
210
+ */
211
+ const replayWriteRefusal = (abs, rel) => {
212
+ const reason = protectedWritePathReason(rel);
213
+ if (reason)
214
+ return `protected path — ${reason}`;
215
+ try {
216
+ if (existsSync(abs) && lstatSync(abs).isSymbolicLink())
217
+ return 'target is a symlink';
218
+ const realRoot = realpathSync(root);
219
+ const realParent = realpathSync(dirname(abs));
220
+ if (realParent !== realRoot && !realParent.startsWith(realRoot + '/')) {
221
+ return 'path resolves outside the project root via a symlink';
222
+ }
223
+ }
224
+ catch {
225
+ // Parent not on disk yet — the plain write below will create it (or fail
226
+ // loudly, caught per-intent).
227
+ }
228
+ return null;
229
+ };
230
+ for (const { root: logRoot, intent } of rooted) {
231
+ const abs = isAbsolute(intent.file_path) ? intent.file_path : resolve(logRoot, intent.file_path);
101
232
  if (wanted && resolve(abs) !== wanted)
102
233
  continue;
103
234
  const rel = relative(root, abs);
@@ -105,6 +236,11 @@ export function applyPendingIntents(projectRoot, file) {
105
236
  result.skipped.push({ file: intent.file_path, ts: intent.ts, reason: 'outside project root' });
106
237
  continue;
107
238
  }
239
+ const refusal = replayWriteRefusal(abs, rel.split('\\').join('/'));
240
+ if (refusal) {
241
+ result.skipped.push({ file: rel, ts: intent.ts, reason: refusal });
242
+ continue; // NOT consumed — a protected write stays visible for an operator to resolve
243
+ }
108
244
  const edit = intent.edit;
109
245
  if (!edit || (typeof edit.content !== 'string' && typeof edit.old_string !== 'string')) {
110
246
  result.skipped.push({ file: rel, ts: intent.ts, reason: 'no replayable content recorded (pre-D1 intent)' });
@@ -113,12 +249,23 @@ export function applyPendingIntents(projectRoot, file) {
113
249
  if (typeof edit.content === 'string') {
114
250
  if (existsSync(abs) && readFileSync(abs, 'utf-8') === edit.content) {
115
251
  result.skipped.push({ file: rel, ts: intent.ts, reason: 'already applied (content identical)' });
116
- consumed.push(intent);
252
+ markConsumed(logRoot, intent);
117
253
  continue;
118
254
  }
119
- writeFileSync(abs, edit.content, 'utf-8');
255
+ try {
256
+ mkdirSync(dirname(abs), { recursive: true });
257
+ writeFileSync(abs, edit.content, 'utf-8');
258
+ }
259
+ catch (err) {
260
+ result.skipped.push({
261
+ file: rel,
262
+ ts: intent.ts,
263
+ reason: `write failed: ${err instanceof Error ? err.message : String(err)}`,
264
+ });
265
+ continue; // not consumed — stays visible
266
+ }
120
267
  result.applied.push({ file: rel, ts: intent.ts, kind: 'write' });
121
- consumed.push(intent);
268
+ markConsumed(logRoot, intent);
122
269
  continue;
123
270
  }
124
271
  if (!existsSync(abs)) {
@@ -136,7 +283,7 @@ export function applyPendingIntents(projectRoot, file) {
136
283
  // contained in new).
137
284
  if (newStr && newStr.includes(oldStr) && current.includes(newStr)) {
138
285
  result.skipped.push({ file: rel, ts: intent.ts, reason: 'already applied (new content present)' });
139
- consumed.push(intent);
286
+ markConsumed(logRoot, intent);
140
287
  continue;
141
288
  }
142
289
  const count = current.split(oldStr).length - 1;
@@ -148,11 +295,22 @@ export function applyPendingIntents(projectRoot, file) {
148
295
  });
149
296
  continue;
150
297
  }
151
- writeFileSync(abs, current.replace(oldStr, newStr), 'utf-8');
298
+ try {
299
+ writeFileSync(abs, current.replace(oldStr, newStr), 'utf-8');
300
+ }
301
+ catch (err) {
302
+ result.skipped.push({
303
+ file: rel,
304
+ ts: intent.ts,
305
+ reason: `write failed: ${err instanceof Error ? err.message : String(err)}`,
306
+ });
307
+ continue; // not consumed — stays visible
308
+ }
152
309
  result.applied.push({ file: rel, ts: intent.ts, kind: 'replace' });
153
- consumed.push(intent);
310
+ markConsumed(logRoot, intent);
154
311
  }
155
- consumeIntents(root, consumed);
312
+ for (const [logRoot, consumed] of consumedByRoot)
313
+ consumeIntents(logRoot, consumed);
156
314
  return result;
157
315
  }
158
316
  //# sourceMappingURL=pending-intents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pending-intents.js","sourceRoot":"","sources":["../../src/delivery/pending-intents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pending-intents.js","sourceRoot":"","sources":["../../src/delivery/pending-intents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Prescribed-replay preflight (U2)
3
+ *
4
+ * Some missions EXPLICITLY prescribe the deterministic mechanism: "the
5
+ * intended content is recorded as a replayable intent in
6
+ * .uap/pending-deliver.jsonl — replay it with `uap deliver --pending` rather
7
+ * than rewriting it". Executors ignore that instruction: the live failure
8
+ * (run 20261006T042017, rust-pg-ext M1 bench) spent its entire 12-round budget
9
+ * hand-rewriting a broken 19KB bench.rs while the recorded content sat in the
10
+ * pending/applied logs. A model told to replay can choose not to; the runner
11
+ * doing it before turn 1 leaves nothing to chance.
12
+ *
13
+ * Two sources, in order:
14
+ * 1. PENDING intents (never consumed) — replayed via applyPendingIntents.
15
+ * 2. APPLIED intents — when nothing is pending for a mission-named file but
16
+ * the tree's current content differs from the newest recorded intent
17
+ * content, the tree has clobbered the prescribed content (an earlier
18
+ * executor's rewrite). RESTORE it, loudly. Only fires on a fresh run
19
+ * (never a resume — resumed state may legitimately contain newer work) and
20
+ * only for files the mission text names. Opt out with
21
+ * UAP_DELIVER_NO_INTENT_RESTORE=1.
22
+ */
23
+ export interface PrescribedReplayResult {
24
+ /** True when the mission text prescribes the pending-intent mechanism. */
25
+ triggered: boolean;
26
+ /** Pending intents replayed this preflight. */
27
+ applied: Array<{
28
+ file: string;
29
+ kind: 'replace' | 'write';
30
+ }>;
31
+ /** Files restored from the applied log (tree had clobbered them). */
32
+ restored: string[];
33
+ /** Human-readable actions, printed by the CLI. */
34
+ notes: string[];
35
+ }
36
+ /**
37
+ * Does the mission prescribe the pending-intent replay mechanism? Prose that
38
+ * merely MENTIONS the log ("do not touch .uap/pending-deliver.jsonl") must not
39
+ * trigger a tree-mutating preflight (review arch F12 / quality F12): the
40
+ * trigger requires the prescriptive shape — a replay/recorded verb on the
41
+ * same line as the log path, or the imperative `uap deliver --pending` form.
42
+ */
43
+ export declare function missionPrescribesReplay(instruction: string): boolean;
44
+ /**
45
+ * Run the preflight for a mission against projectRoot. Safe to call when the
46
+ * mission does not prescribe the mechanism (returns {triggered: false} without
47
+ * touching anything) and fail-soft on every IO error — a preflight must never
48
+ * block a run it was meant to help.
49
+ */
50
+ export declare function prescribedReplayPreflight(projectRoot: string, instruction: string, opts?: {
51
+ resume?: boolean;
52
+ }): PrescribedReplayResult;
53
+ //# sourceMappingURL=prescribed-replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prescribed-replay.d.ts","sourceRoot":"","sources":["../../src/delivery/prescribed-replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAWH,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,SAAS,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5D,qEAAqE;IACrE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kDAAkD;IAClD,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAMpE;AA+DD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,sBAAsB,CA8ExB"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Prescribed-replay preflight (U2)
3
+ *
4
+ * Some missions EXPLICITLY prescribe the deterministic mechanism: "the
5
+ * intended content is recorded as a replayable intent in
6
+ * .uap/pending-deliver.jsonl — replay it with `uap deliver --pending` rather
7
+ * than rewriting it". Executors ignore that instruction: the live failure
8
+ * (run 20261006T042017, rust-pg-ext M1 bench) spent its entire 12-round budget
9
+ * hand-rewriting a broken 19KB bench.rs while the recorded content sat in the
10
+ * pending/applied logs. A model told to replay can choose not to; the runner
11
+ * doing it before turn 1 leaves nothing to chance.
12
+ *
13
+ * Two sources, in order:
14
+ * 1. PENDING intents (never consumed) — replayed via applyPendingIntents.
15
+ * 2. APPLIED intents — when nothing is pending for a mission-named file but
16
+ * the tree's current content differs from the newest recorded intent
17
+ * content, the tree has clobbered the prescribed content (an earlier
18
+ * executor's rewrite). RESTORE it, loudly. Only fires on a fresh run
19
+ * (never a resume — resumed state may legitimately contain newer work) and
20
+ * only for files the mission text names. Opt out with
21
+ * UAP_DELIVER_NO_INTENT_RESTORE=1.
22
+ */
23
+ import { existsSync, lstatSync, readFileSync, realpathSync, writeFileSync } from 'fs';
24
+ import { basename, dirname, isAbsolute, relative, resolve } from 'path';
25
+ import { protectedWritePathReason } from './applier.js';
26
+ import { applyPendingIntents, readAppliedIntents, } from './pending-intents.js';
27
+ /**
28
+ * Does the mission prescribe the pending-intent replay mechanism? Prose that
29
+ * merely MENTIONS the log ("do not touch .uap/pending-deliver.jsonl") must not
30
+ * trigger a tree-mutating preflight (review arch F12 / quality F12): the
31
+ * trigger requires the prescriptive shape — a replay/recorded verb on the
32
+ * same line as the log path, or the imperative `uap deliver --pending` form.
33
+ */
34
+ export function missionPrescribesReplay(instruction) {
35
+ return (/(?:replay\w*|recorded)[^\n]{0,200}pending-deliver|pending-deliver[^\n]{0,200}(?:replay\w*|recorded)/.test(instruction) || /uap\s+deliver\s+--pending/.test(instruction));
36
+ }
37
+ /**
38
+ * Mission-named path tokens (full slash paths and bare basenames). The
39
+ * restore bound matches on PATH TAILS, not bare basenames (review X4/arch
40
+ * F3): a mission naming `src/bench.rs` must not authorize restoring
41
+ * `vendor/bench.rs`. A bare basename in the mission (no directory part) still
42
+ * falls back to basename matching — the mission gave us nothing narrower.
43
+ */
44
+ function missionPathTokens(mission) {
45
+ const tails = new Set();
46
+ const bases = new Set();
47
+ for (const m of mission.matchAll(/[\w.@-]+(?:\/[\w.@-]+)+/g)) {
48
+ const t = m[0].replace(/[.,;:)]+$/, '');
49
+ if (t.includes('//') || t.startsWith('http'))
50
+ continue;
51
+ if (!t.split('/').pop()?.includes('.'))
52
+ continue;
53
+ // Slash paths seed TAILS ONLY (review X4): seeding the bare-basename
54
+ // fallback from them too would let a mission naming `src/bench.rs`
55
+ // authorize every `*/bench.rs` in the tree.
56
+ tails.add(t.toLowerCase());
57
+ }
58
+ // Bare basenames: matched only on text with every SLASH PATH removed —
59
+ // otherwise `bench.rs` inside `src/bench.rs` seeds the basename fallback and
60
+ // defeats the tail bound (review X4).
61
+ const bareText = mission.replace(/[\w.@-]+(?:\/[\w.@-]+)+/g, ' ');
62
+ for (const m of bareText.matchAll(/\b[\w-]+\.(?:html|css|md|js|mjs|cjs|ts|tsx|json|py|rs|go)\b/g)) {
63
+ bases.add(m[0].toLowerCase());
64
+ }
65
+ return { tails, bases };
66
+ }
67
+ /** Does the mission name this project-relative path (tail or bare basename)? */
68
+ function missionNamesPath(relPosix, tokens) {
69
+ const rel = relPosix.toLowerCase();
70
+ for (const tail of tokens.tails) {
71
+ if (rel === tail || rel.endsWith('/' + tail))
72
+ return true;
73
+ }
74
+ return tokens.bases.has(basename(rel));
75
+ }
76
+ /**
77
+ * The same write protections the applier enforces (review X1, CRITICAL): the
78
+ * restore path used raw writeFileSync, so a planted applied-log line could
79
+ * land content in `.git/hooks/`, `.github/workflows/` or through a symlink.
80
+ * Restore is deterministic — nothing reviews these bytes — so it gets the
81
+ * STRONGER guard, not a weaker one.
82
+ */
83
+ function restoreWriteRefusal(root, abs, relPosix) {
84
+ const reason = protectedWritePathReason(relPosix);
85
+ if (reason)
86
+ return `protected path — ${reason}`;
87
+ try {
88
+ if (existsSync(abs) && lstatSync(abs).isSymbolicLink())
89
+ return 'target is a symlink';
90
+ const realRoot = realpathSync(root);
91
+ const realParent = realpathSync(dirname(abs));
92
+ if (realParent !== realRoot && !realParent.startsWith(realRoot + '/')) {
93
+ return 'path resolves outside the project root via a symlink';
94
+ }
95
+ }
96
+ catch {
97
+ return null; // parent missing — the write below creates it or fails loudly
98
+ }
99
+ return null;
100
+ }
101
+ /**
102
+ * Run the preflight for a mission against projectRoot. Safe to call when the
103
+ * mission does not prescribe the mechanism (returns {triggered: false} without
104
+ * touching anything) and fail-soft on every IO error — a preflight must never
105
+ * block a run it was meant to help.
106
+ */
107
+ export function prescribedReplayPreflight(projectRoot, instruction, opts) {
108
+ const out = { triggered: false, applied: [], restored: [], notes: [] };
109
+ if (!missionPrescribesReplay(instruction))
110
+ return out;
111
+ out.triggered = true;
112
+ const root = resolve(projectRoot);
113
+ // 1. Replay pending intents (multi-level lookup is inside).
114
+ try {
115
+ const res = applyPendingIntents(root);
116
+ for (const a of res.applied) {
117
+ out.applied.push({ file: a.file, kind: a.kind });
118
+ out.notes.push(`replayed recorded intent (${a.kind}): ${a.file}`);
119
+ }
120
+ for (const s of res.skipped) {
121
+ if (s.reason.startsWith('already applied'))
122
+ continue; // idempotent — not news
123
+ out.notes.push(`intent skipped: ${s.file} (${s.reason})`);
124
+ }
125
+ }
126
+ catch (err) {
127
+ out.notes.push(`pending-intent replay error (continuing): ${err instanceof Error ? err.message : String(err)}`);
128
+ }
129
+ // 2. Restore clobbered prescribed content from the applied log — only on a
130
+ // fresh run, only for mission-named files, only with recorded CONTENT
131
+ // (replace-intents are stale by construction once applied and moved).
132
+ if (opts?.resume || process.env.UAP_DELIVER_NO_INTENT_RESTORE === '1')
133
+ return out;
134
+ try {
135
+ const tokens = missionPathTokens(instruction);
136
+ if (tokens.bases.size === 0 && tokens.tails.size === 0)
137
+ return out;
138
+ // Newest recorded intent per file, across all levels.
139
+ const latest = new Map();
140
+ for (const ri of readAppliedIntents(root)) {
141
+ const edit = ri.intent.edit;
142
+ if (!edit || typeof edit.content !== 'string')
143
+ continue;
144
+ // Relative paths are relative to the LOG they were recorded in (the
145
+ // delivery gate records at the level it enforced), not to cwd.
146
+ const abs = isAbsolute(ri.intent.file_path)
147
+ ? ri.intent.file_path
148
+ : resolve(ri.root, ri.intent.file_path);
149
+ const rel = relative(root, abs);
150
+ if (rel.startsWith('..'))
151
+ continue;
152
+ const relPosix = rel.split('\\').join('/');
153
+ if (!missionNamesPath(relPosix, tokens))
154
+ continue;
155
+ const prev = latest.get(rel);
156
+ if (!prev || prev.intent.ts <= ri.intent.ts)
157
+ latest.set(rel, ri);
158
+ }
159
+ for (const [rel, ri] of latest) {
160
+ const abs = resolve(root, rel);
161
+ const relPosix = rel.split('\\').join('/');
162
+ if (!existsSync(abs))
163
+ continue; // gone entirely — gates will say so
164
+ const refusal = restoreWriteRefusal(root, abs, relPosix);
165
+ if (refusal) {
166
+ out.notes.push(`restore of ${relPosix} refused (${refusal})`);
167
+ continue;
168
+ }
169
+ let current;
170
+ try {
171
+ current = readFileSync(abs, 'utf-8');
172
+ }
173
+ catch (err) {
174
+ out.notes.push(`restore of ${relPosix} skipped (unreadable: ${err instanceof Error ? err.message : String(err)})`);
175
+ continue;
176
+ }
177
+ const recorded = String(ri.intent.edit?.content);
178
+ if (current === recorded)
179
+ continue;
180
+ try {
181
+ writeFileSync(abs, recorded, 'utf-8');
182
+ }
183
+ catch (err) {
184
+ out.notes.push(`restore of ${relPosix} failed (write error: ${err instanceof Error ? err.message : String(err)})`);
185
+ continue;
186
+ }
187
+ out.restored.push(relPosix);
188
+ out.notes.push(`restored ${relPosix} from the recorded intent (ts ${ri.intent.ts}) — the tree had clobbered the prescribed content`);
189
+ }
190
+ }
191
+ catch (err) {
192
+ out.notes.push(`applied-intent restore skipped (continuing): ${err instanceof Error ? err.message : String(err)}`);
193
+ }
194
+ return out;
195
+ }
196
+ //# sourceMappingURL=prescribed-replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prescribed-replay.js","sourceRoot":"","sources":["../../src/delivery/prescribed-replay.ts"],"names":[],"mappings":"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"}