@miller-tech/uap 1.170.1 → 1.172.1

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 (77) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/bin/cli.js +26 -0
  3. package/dist/bin/cli.js.map +1 -1
  4. package/dist/browser/web-browser.d.ts +17 -0
  5. package/dist/browser/web-browser.d.ts.map +1 -1
  6. package/dist/browser/web-browser.js +36 -0
  7. package/dist/browser/web-browser.js.map +1 -1
  8. package/dist/cli/interaction.d.ts +29 -0
  9. package/dist/cli/interaction.d.ts.map +1 -0
  10. package/dist/cli/interaction.js +217 -0
  11. package/dist/cli/interaction.js.map +1 -0
  12. package/dist/cli/verify.d.ts +6 -0
  13. package/dist/cli/verify.d.ts.map +1 -1
  14. package/dist/cli/verify.js +112 -7
  15. package/dist/cli/verify.js.map +1 -1
  16. package/dist/delivery/execution-gate.d.ts +7 -0
  17. package/dist/delivery/execution-gate.d.ts.map +1 -1
  18. package/dist/delivery/execution-gate.js +42 -1
  19. package/dist/delivery/execution-gate.js.map +1 -1
  20. package/dist/delivery/fidelity.d.ts +16 -0
  21. package/dist/delivery/fidelity.d.ts.map +1 -1
  22. package/dist/delivery/fidelity.js +7 -0
  23. package/dist/delivery/fidelity.js.map +1 -1
  24. package/dist/delivery/interaction/driver.d.ts +60 -0
  25. package/dist/delivery/interaction/driver.d.ts.map +1 -0
  26. package/dist/delivery/interaction/driver.js +18 -0
  27. package/dist/delivery/interaction/driver.js.map +1 -0
  28. package/dist/delivery/interaction/manifest.d.ts +84 -0
  29. package/dist/delivery/interaction/manifest.d.ts.map +1 -0
  30. package/dist/delivery/interaction/manifest.js +241 -0
  31. package/dist/delivery/interaction/manifest.js.map +1 -0
  32. package/dist/delivery/interaction/mine.d.ts +54 -0
  33. package/dist/delivery/interaction/mine.d.ts.map +1 -0
  34. package/dist/delivery/interaction/mine.js +218 -0
  35. package/dist/delivery/interaction/mine.js.map +1 -0
  36. package/dist/delivery/interaction/runner.d.ts +61 -0
  37. package/dist/delivery/interaction/runner.d.ts.map +1 -0
  38. package/dist/delivery/interaction/runner.js +359 -0
  39. package/dist/delivery/interaction/runner.js.map +1 -0
  40. package/dist/delivery/interaction/types.d.ts +223 -0
  41. package/dist/delivery/interaction/types.d.ts.map +1 -0
  42. package/dist/delivery/interaction/types.js +19 -0
  43. package/dist/delivery/interaction/types.js.map +1 -0
  44. package/dist/delivery/interaction/verdict.d.ts +26 -0
  45. package/dist/delivery/interaction/verdict.d.ts.map +1 -0
  46. package/dist/delivery/interaction/verdict.js +139 -0
  47. package/dist/delivery/interaction/verdict.js.map +1 -0
  48. package/dist/delivery/interaction/watchdog.d.ts +82 -0
  49. package/dist/delivery/interaction/watchdog.d.ts.map +1 -0
  50. package/dist/delivery/interaction/watchdog.js +210 -0
  51. package/dist/delivery/interaction/watchdog.js.map +1 -0
  52. package/dist/delivery/interaction/web-driver.d.ts +102 -0
  53. package/dist/delivery/interaction/web-driver.d.ts.map +1 -0
  54. package/dist/delivery/interaction/web-driver.js +306 -0
  55. package/dist/delivery/interaction/web-driver.js.map +1 -0
  56. package/dist/delivery/interaction-gate.d.ts +45 -0
  57. package/dist/delivery/interaction-gate.d.ts.map +1 -0
  58. package/dist/delivery/interaction-gate.js +255 -0
  59. package/dist/delivery/interaction-gate.js.map +1 -0
  60. package/dist/delivery/mission-acceptance.d.ts +2 -0
  61. package/dist/delivery/mission-acceptance.d.ts.map +1 -1
  62. package/dist/delivery/mission-acceptance.js +23 -0
  63. package/dist/delivery/mission-acceptance.js.map +1 -1
  64. package/dist/delivery/vision-judge.d.ts +21 -0
  65. package/dist/delivery/vision-judge.d.ts.map +1 -1
  66. package/dist/delivery/vision-judge.js +96 -0
  67. package/dist/delivery/vision-judge.js.map +1 -1
  68. package/dist/delivery/visual-gate.js.map +1 -1
  69. package/dist/types/config.d.ts +20 -0
  70. package/dist/types/config.d.ts.map +1 -1
  71. package/dist/types/config.js +7 -0
  72. package/dist/types/config.js.map +1 -1
  73. package/package.json +1 -1
  74. package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
  75. package/src/policies/enforcers/enforcement_self_protect.py +96 -5
  76. package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
  77. package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
@@ -0,0 +1,217 @@
1
+ /**
2
+ * `uap interaction` — mine probes from the requirements, then play the artifact
3
+ * through them.
4
+ *
5
+ * `mine` derive a manifest from the requirements + source and write it to
6
+ * .uap/interaction/manifest.json
7
+ * `run` execute the manifest against the built artifact and report
8
+ * `status` show what is covered and whether the manifest still matches the
9
+ * requirements it was mined from
10
+ */
11
+ import chalk from 'chalk';
12
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
13
+ import { extname, join, relative } from 'node:path';
14
+ import { detectArtifactType, findWebEntry } from '../delivery/execution-gate.js';
15
+ import { runInteractionGate, interactionSummary } from '../delivery/interaction-gate.js';
16
+ import { coverageOf, loadManifest, manifestIsStale, manifestPath, saveManifest, } from '../delivery/interaction/manifest.js';
17
+ import { mineManifest } from '../delivery/interaction/mine.js';
18
+ import { resolveAcceptanceSpecAuto } from './verify.js';
19
+ const SOURCE_EXTS = new Set(['.js', '.mjs', '.ts', '.jsx', '.tsx', '.html']);
20
+ const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', 'build', '.uap', 'coverage']);
21
+ /**
22
+ * A digest of the artifact's source so the miner writes probes against REAL
23
+ * identifiers. Without it the model invents plausible-looking observables that
24
+ * do not exist, and every probe then fails as a phantom defect.
25
+ */
26
+ export function collectSourceDigest(root, budget = 24_000) {
27
+ const parts = [];
28
+ let used = 0;
29
+ const walk = (dir, depth) => {
30
+ if (depth > 4 || used >= budget)
31
+ return;
32
+ let entries;
33
+ try {
34
+ entries = readdirSync(dir);
35
+ }
36
+ catch {
37
+ return;
38
+ }
39
+ for (const name of entries) {
40
+ if (used >= budget)
41
+ return;
42
+ if (SKIP_DIRS.has(name) || name.startsWith('.'))
43
+ continue;
44
+ const full = join(dir, name);
45
+ let st;
46
+ try {
47
+ st = statSync(full);
48
+ }
49
+ catch {
50
+ continue;
51
+ }
52
+ if (st.isDirectory()) {
53
+ walk(full, depth + 1);
54
+ continue;
55
+ }
56
+ if (!SOURCE_EXTS.has(extname(name)))
57
+ continue;
58
+ try {
59
+ const text = readFileSync(full, 'utf-8');
60
+ const slice = text.slice(0, Math.max(0, Math.min(6_000, budget - used)));
61
+ parts.push(`\n--- ${relative(root, full)} ---\n${slice}`);
62
+ used += slice.length;
63
+ }
64
+ catch {
65
+ /* unreadable file → skipped */
66
+ }
67
+ }
68
+ };
69
+ walk(root, 0);
70
+ return parts.join('\n');
71
+ }
72
+ async function buildExecutor(modelPreset, endpoint) {
73
+ try {
74
+ const { OpenAICompatClient } = await import('../models/openai-compat-client.js');
75
+ const { ModelPresets } = await import('../models/types.js');
76
+ const presetId = modelPreset ?? process.env.UAP_DELIVER_MODEL ?? 'qwen35-a3b';
77
+ const model = ModelPresets[presetId];
78
+ if (!model)
79
+ return null;
80
+ const resolved = endpoint ? { ...model, endpoint } : model;
81
+ const client = new OpenAICompatClient();
82
+ return async (prompt) => (await client.complete(resolved, prompt, { temperature: 0.1 })).content;
83
+ }
84
+ catch {
85
+ // No model is not an error: mining falls back to the deterministic baseline.
86
+ return null;
87
+ }
88
+ }
89
+ function parseModes(raw) {
90
+ if (!raw)
91
+ return ['core'];
92
+ const valid = ['core', 'soak', 'accelerated'];
93
+ const picked = raw
94
+ .split(',')
95
+ .map((s) => s.trim())
96
+ .filter((s) => valid.includes(s));
97
+ return picked.length > 0 ? picked : ['core'];
98
+ }
99
+ export async function interactionCommand(action, options = {}) {
100
+ const dir = options.dir ?? process.cwd();
101
+ const verb = action ?? 'status';
102
+ if (verb === 'mine') {
103
+ const specText = options.spec
104
+ ? (() => {
105
+ try {
106
+ return readFileSync(options.spec, 'utf-8');
107
+ }
108
+ catch {
109
+ return '';
110
+ }
111
+ })()
112
+ : (resolveAcceptanceSpecAuto(dir) ?? '');
113
+ if (!specText.trim()) {
114
+ process.stderr.write('uap interaction mine: no requirements found. Pass --spec <file>, or add ' +
115
+ '.uap/acceptance.md / REQUIREMENTS.md so probes can be derived from something.\n');
116
+ process.exit(2);
117
+ return;
118
+ }
119
+ // `detectArtifactType` returns 'web' | 'node' | 'cli' | 'lib' — a straight
120
+ // cast to ArtifactKind would write `kind: 'lib'`, which never validates, so
121
+ // the manifest would fail to load forever and the gate would report "no
122
+ // manifest" (i.e. pass) on every run afterwards.
123
+ const detected = detectArtifactType(dir);
124
+ const web = findWebEntry(dir);
125
+ const kind = web ? 'web' : detected === 'cli' ? 'cli' : null;
126
+ if (!kind) {
127
+ process.stderr.write(`uap interaction mine: no interactive artifact found in ${dir} ` +
128
+ `(detected: ${detected ?? 'nothing'}). The interaction gate needs a web entry point.\n`);
129
+ process.exit(2);
130
+ return;
131
+ }
132
+ const executor = await buildExecutor(options.model, options.endpoint);
133
+ let manifest;
134
+ try {
135
+ manifest = await mineManifest({
136
+ projectRoot: dir,
137
+ kind,
138
+ // Never hardcode index.html: findWebEntry supports any .html, and
139
+ // keying off index.html alone makes the driver request a path the
140
+ // server 404s, which then reads as an artifact defect.
141
+ entry: web?.entry ?? 'index.html',
142
+ specText,
143
+ sourceDigest: collectSourceDigest(web?.dir ?? dir),
144
+ ...(executor ? { executor } : {}),
145
+ });
146
+ }
147
+ catch (e) {
148
+ process.stderr.write(`uap interaction mine: ${String(e)}\n`);
149
+ process.exit(1);
150
+ return;
151
+ }
152
+ const path = saveManifest(dir, manifest);
153
+ const ledger = coverageOf(manifest);
154
+ if (options.json) {
155
+ process.stdout.write(`${JSON.stringify({ path, manifest, coverage: ledger }, null, 2)}\n`);
156
+ return;
157
+ }
158
+ process.stdout.write(`${chalk.green('✓')} mined ${manifest.probes.length} probe(s) for ${manifest.requirements.length} requirement(s) → ${path}\n`);
159
+ if (!executor) {
160
+ process.stdout.write(chalk.yellow(' no model available — wrote the deterministic baseline only. ' +
161
+ 'Artifact-specific probes need a model preset (-m).\n'));
162
+ }
163
+ if (ledger.uncovered.length > 0) {
164
+ process.stdout.write(chalk.yellow(` ${ledger.uncovered.length} requirement(s) have no probe — they are unverified.\n`));
165
+ }
166
+ return;
167
+ }
168
+ if (verb === 'run') {
169
+ const verdict = await runInteractionGate(dir, {
170
+ modes: parseModes(options.modes),
171
+ ...(options.strictCoverage ? { strictCoverage: true } : {}),
172
+ });
173
+ if (options.json) {
174
+ process.stdout.write(`${JSON.stringify(verdict, null, 2)}\n`);
175
+ }
176
+ else {
177
+ process.stdout.write(`${verdict.feedback}\n`);
178
+ }
179
+ // Exit non-zero on a real behavioural failure so CI and hooks can gate on
180
+ // it; a skip (no manifest, no browser) stays 0 and says so.
181
+ process.exit(verdict.passed || verdict.skipped ? 0 : 1);
182
+ return;
183
+ }
184
+ // status
185
+ const manifest = loadManifest(dir);
186
+ if (!manifest) {
187
+ const path = manifestPath(dir);
188
+ const exists = existsSync(path);
189
+ process.stdout.write(exists
190
+ ? `${chalk.red('✗')} ${path} exists but is invalid — re-run \`uap interaction mine\`.\n`
191
+ : `${chalk.dim('·')} no interaction manifest. Run \`uap interaction mine\` to derive probes from the requirements.\n`);
192
+ process.exit(exists ? 1 : 0);
193
+ return;
194
+ }
195
+ const ledger = coverageOf(manifest);
196
+ const specText = resolveAcceptanceSpecAuto(dir);
197
+ const stale = specText ? manifestIsStale(manifest, specText) : false;
198
+ if (options.json) {
199
+ process.stdout.write(`${JSON.stringify({ manifest, coverage: ledger, stale }, null, 2)}\n`);
200
+ return;
201
+ }
202
+ process.stdout.write(`${chalk.bold('interaction manifest')} — ${manifest.probes.length} probe(s), ` +
203
+ `requirements covered ${ledger.covered}/${ledger.total}\n`);
204
+ for (const p of manifest.probes) {
205
+ process.stdout.write(` ${chalk.dim(p.mode.padEnd(11))} ${p.id} — ${p.description}\n`);
206
+ }
207
+ if (ledger.uncovered.length > 0) {
208
+ process.stdout.write(chalk.yellow(`\n unverified requirements:\n`));
209
+ for (const r of ledger.uncovered)
210
+ process.stdout.write(` ${r.id}: ${r.text}\n`);
211
+ }
212
+ if (stale) {
213
+ process.stdout.write(chalk.yellow('\n ⚠ the requirements changed since these probes were mined — re-run `uap interaction mine`.\n'));
214
+ }
215
+ }
216
+ export { interactionSummary };
217
+ //# sourceMappingURL=interaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.js","sourceRoot":"","sources":["../../src/cli/interaction.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@
11
11
  import { type GateRung, type LadderResult } from '../delivery/verifier-ladder.js';
12
12
  import { type AcceptanceResult } from '../delivery/acceptance-judge.js';
13
13
  import { type VisualVerdict } from '../delivery/visual-gate.js';
14
+ import type { InteractionVerdict } from '../delivery/interaction/types.js';
14
15
  import { type ResolvedFidelity } from '../delivery/fidelity.js';
15
16
  import type { LoopExecutor } from '../delivery/convergence-loop.js';
16
17
  /**
@@ -54,6 +55,8 @@ export interface VerifyOptions {
54
55
  * and the last report is missing/stale/failed for the CURRENT tree. A
55
56
  * fresh-pass report (code unchanged since validation) skips the cost. */
56
57
  userPathsAuto?: boolean;
58
+ /** Run the interaction gate (default: on when a manifest exists). */
59
+ interaction?: boolean;
57
60
  }
58
61
  export interface VerifyResult {
59
62
  passed: boolean;
@@ -65,6 +68,9 @@ export interface VerifyResult {
65
68
  rungs: GateRung[];
66
69
  acceptance?: AcceptanceResult;
67
70
  visual?: VisualVerdict;
71
+ interaction?: InteractionVerdict;
72
+ /** Which gates blocked, for machine consumers of the JSON output. */
73
+ blockedBy?: string[];
68
74
  }
69
75
  /** Core verify logic — pure-ish (no process.exit), so it is unit-testable. */
70
76
  export declare function runVerify(opts?: VerifyOptions): Promise<VerifyResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAwC,KAAK,QAAQ,EAAiB,KAAK,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACvI,OAAO,EAA6C,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACnG,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AASjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAIpE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAmCtD;AAED,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sEAAsE;IACtE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uFAAuF;IACvF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,YAAY,CAAC;IAClC;;6BAEyB;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,oFAAoF;IACpF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;mFAC+E;IAC/E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;6EAGyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,8EAA8E;AAC9E,wBAAsB,SAAS,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6P/E;AAmDD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkCpE;AAED,uEAAuE;AACvE,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAChH,OAAO,CAAC,IAAI,CAAC,CAmDf"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAwC,KAAK,QAAQ,EAAiB,KAAK,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACvI,OAAO,EAA6C,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEnG,OAAO,KAAK,EAAE,kBAAkB,EAAa,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AASjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAIpE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAmCtD;AAED,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sEAAsE;IACtE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uFAAuF;IACvF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,YAAY,CAAC;IAClC;;6BAEyB;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,oFAAoF;IACpF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;mFAC+E;IAC/E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;6EAGyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,8EAA8E;AAC9E,wBAAsB,SAAS,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAyW/E;AAmDD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkCpE;AAED,uEAAuE;AACvE,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAChH,OAAO,CAAC,IAAI,CAAC,CAwDf"}
@@ -11,6 +11,7 @@
11
11
  import { detectRungs, runTieredLadder, tierOf } from '../delivery/verifier-ladder.js';
12
12
  import { runAcceptanceGate, formatAcceptanceReport } from '../delivery/acceptance-judge.js';
13
13
  import { runVisualGate, discoverEntryPages } from '../delivery/visual-gate.js';
14
+ import { runInteractionGate, interactionSummary } from '../delivery/interaction-gate.js';
14
15
  import { resolveFidelity } from '../delivery/fidelity.js';
15
16
  import { checkUserValidationFreshness, createUserValidationRunner, resolveUserValidationMode, synthesizeUserValidationRung, } from '../delivery/user-validation.js';
16
17
  import { loadUapConfigRaw } from '../utils/config-loader.js';
@@ -172,8 +173,52 @@ export async function runVerify(opts = {}) {
172
173
  // notes for a game that had NO render loop at all. It also wastes a headless
173
174
  // browser pass plus a vision-model call on every failing turn.
174
175
  const ladderGreen = ladder.passed;
175
- const visualSkippedForLadder = visualWanted && hasEntryPages && !ladderGreen;
176
- if (visualWanted && hasEntryPages && ladderGreen) {
176
+ // ── Interaction gate ──────────────────────────────────────────────────────
177
+ // Between "it runs" and "it looks right": does it DO what it promised, under
178
+ // real input? Runs only once the ladder is green (driving a build that does
179
+ // not compile proves nothing) and BEFORE the visual/vision pass, because a
180
+ // vision judge grades a frame and a frozen frame is indistinguishable from a
181
+ // working one — a broken build can collect a passing aesthetic score, and the
182
+ // fix loop then chases palette notes instead of the defect. Observed live
183
+ // (octopus_invaders_v3, 2026-07-25): visual gate `passed: true` on a build
184
+ // whose render loop died three seconds in.
185
+ let interaction;
186
+ // Excluded from --runtime-only for the same reason as the visual gate: that is
187
+ // the Stop hook's CHEAP path, run under a 120s kill, and driving a real
188
+ // browser through a probe suite is not cheap. Without this exclusion, merely
189
+ // having a manifest turns every session-end check into a browser run that the
190
+ // outer timeout kills mid-probe — skipping the teardown that reaps Chromium.
191
+ const interactionWanted = opts.interaction !== false && (!opts.runtimeOnly || fidelity.max);
192
+ if (ladderGreen && interactionWanted && hasEntryPages) {
193
+ // Max fidelity runs every mode — including the soak probes that prove the
194
+ // artifact survives sustained use, which is where "playable for many levels"
195
+ // is actually decided.
196
+ interaction = await runInteractionGate(dir, {
197
+ ...(fidelity.max
198
+ ? { modes: ['core', 'accelerated', 'soak'], strictCoverage: true }
199
+ : {}),
200
+ // Keep the whole gate inside the Stop hook's budget when max fidelity
201
+ // forces it onto the runtime-only path.
202
+ ...(opts.runtimeOnly ? { budgetMs: 60_000, probeTimeoutMs: 20_000 } : {}),
203
+ });
204
+ }
205
+ // Standard: a missing manifest / unavailable driver fails OPEN (advisory).
206
+ // Max: an artifact whose promised behaviour was never exercised is NOT
207
+ // verified, so the skip fails CLOSED.
208
+ //
209
+ // Tested on `skipped` DIRECTLY rather than on `!passed`: skipped verdicts
210
+ // carry passed:true, so the obvious `!passed && (max || !skipped)` spelling
211
+ // makes the max-fidelity clause unreachable and the gate silently fails open
212
+ // at exactly the fidelity where it is meant to be strictest.
213
+ const interactionBlocks = Boolean(interaction && (interaction.skipped ? fidelity.max : !interaction.passed));
214
+ const interactionReport = interaction
215
+ ? `\n${interaction.passed && !interaction.skipped ? interactionSummary(interaction) : interaction.feedback}`
216
+ : '';
217
+ // A build that does not behave gets no aesthetic review: grading the pixels of
218
+ // a game that cannot be played sends the next turn after the wrong defect.
219
+ const interactionGreen = !interaction || interaction.passed || interaction.skipped;
220
+ const visualSkippedForLadder = visualWanted && hasEntryPages && (!ladderGreen || !interactionGreen);
221
+ if (visualWanted && hasEntryPages && ladderGreen && interactionGreen) {
177
222
  visual = await runVisualGate(dir);
178
223
  }
179
224
  // Standard: a no-browser SKIP fails open. Max: fail CLOSED — a project with
@@ -183,8 +228,14 @@ export async function runVerify(opts = {}) {
183
228
  // Say plainly that rendering was NOT checked — silence here would read as
184
229
  // "the visuals are fine" on exactly the runs where nothing was observed.
185
230
  if (visualSkippedForLadder) {
186
- visualReport +=
187
- '\nvisual + aesthetic review SKIPPED the build/run gates must pass first. ' +
231
+ // Name the ACTUAL cause. Telling an agent "the build/run gates must pass
232
+ // first" when the build compiled and ran fine, and it was the BEHAVIOUR that
233
+ // failed, points it at the wrong gate — the misdirected-feedback failure
234
+ // this whole subsystem exists to prevent.
235
+ visualReport += ladderGreen
236
+ ? '\nvisual + aesthetic review SKIPPED — the artifact does not yet behave as promised. ' +
237
+ 'Fix the interaction failures above; how it looks is only judged once it works.'
238
+ : '\nvisual + aesthetic review SKIPPED — the build/run gates must pass first. ' +
188
239
  'Fix the failing gate above; rendering is only judged once the artifact compiles and runs.';
189
240
  }
190
241
  // Visual regression baselines. --approve-visual pins the current look; otherwise
@@ -228,10 +279,43 @@ export async function runVerify(opts = {}) {
228
279
  if (visionJudgeConfigured()) {
229
280
  const shots = visual.pages.flatMap((pg) => pg.screenshots.slice(-1));
230
281
  const verdict = await judgeScreenshots(shots, opts.acceptanceSpec ?? 'A polished, working application UI.', readDesignContext(dir));
282
+ // Corroborate before reporting: asked for a `findings` list the judge
283
+ // fills it whether or not defects exist, and a single still frame
284
+ // invites claims about animation and hit-feedback it cannot show. Each
285
+ // finding goes back with the image and is dropped unless the model can
286
+ // point to what shows it.
287
+ if (verdict && verdict.findings.length > 0) {
288
+ try {
289
+ const { corroborateFindings } = await import('../delivery/vision-judge.js');
290
+ const { kept, dropped } = await corroborateFindings(verdict.findings, shots);
291
+ verdict.findings = kept;
292
+ if (dropped.length > 0) {
293
+ visualReport += `\n(${dropped.length} vision finding(s) discarded — the model could not point to anything in the frame that shows them.)`;
294
+ }
295
+ }
296
+ catch {
297
+ /* corroboration is best-effort; fall back to the raw findings */
298
+ }
299
+ }
231
300
  const summary = visionSummary(verdict);
232
301
  if (summary)
233
302
  visualReport += `\n${summary}`;
234
- if (fidelity.max && verdict && verdict.score < fidelity.visionMinScore) {
303
+ // A low score that did NOT block must say so — silence here reads as
304
+ // "the look was approved" on exactly the runs where it was not.
305
+ if (fidelity.max &&
306
+ fidelity.visionBlocking !== 'block' &&
307
+ verdict &&
308
+ verdict.score < fidelity.visionMinScore) {
309
+ visualReport +=
310
+ `\n⚠ aesthetic score ${verdict.score}/10 is below the ${fidelity.visionMinScore} threshold, ` +
311
+ `reported but NOT blocking (fidelity.visionBlocking = advisory). This judge has been measured ` +
312
+ `producing confident findings that are false against the frame it graded, so it reviews rather ` +
313
+ `than gates. Set fidelity.visionBlocking = "block" to make it gate again.`;
314
+ }
315
+ if (fidelity.max &&
316
+ fidelity.visionBlocking === 'block' &&
317
+ verdict &&
318
+ verdict.score < fidelity.visionMinScore) {
235
319
  visionBlocks = true;
236
320
  visualReport += `\n✗ max fidelity: aesthetic score ${verdict.score}/10 is below the ${fidelity.visionMinScore} threshold.`;
237
321
  // Canvas apps score low most often because the render loop is gated on an
@@ -278,13 +362,18 @@ export async function runVerify(opts = {}) {
278
362
  // (a broken-but-loading UI). Printing "VERIFIED ✓" then problems + exit 1 is
279
363
  // exactly how an agent mis-reads a failure as success and claims done.
280
364
  const blockedBy = [
365
+ interactionBlocks && 'promised behaviour under real input',
281
366
  visualBlocks && 'visual/behavioral render',
282
367
  visionBlocks && 'aesthetic score',
283
368
  baselineBlocks && 'visual regression',
284
369
  acceptanceBlocks && 'acceptance criteria',
285
370
  ].filter(Boolean);
286
371
  const overallPassed = ladder.passed && blockedBy.length === 0;
287
- const report = formatReport(ladder, overallPassed, blockedBy) + untestedReport + visualReport + acceptanceReport;
372
+ const report = formatReport(ladder, overallPassed, blockedBy) +
373
+ untestedReport +
374
+ interactionReport +
375
+ visualReport +
376
+ acceptanceReport;
288
377
  // Exit-code contract for the Stop hook: 0 = verified, 1 = a REAL gate failure
289
378
  // (the code is broken), 3 = INFRA failure (gate timed out / could not spawn /
290
379
  // killed by signal). The hook hard-blocks only on 1; 3 fails OPEN so a flaky
@@ -302,8 +391,17 @@ export async function runVerify(opts = {}) {
302
391
  // regression drift) gate the same way.
303
392
  if ((visualBlocks || visionBlocks || baselineBlocks) && exitCode === 0)
304
393
  exitCode = 1;
394
+ // A behavioural failure is a REAL failure — the artifact ran and did not do
395
+ // what it promised — so it gates like broken code rather than failing open.
396
+ if (interactionBlocks && exitCode === 0)
397
+ exitCode = 1;
305
398
  return {
306
- passed: ladder.passed && !acceptanceBlocks && !visualBlocks && !visionBlocks && !baselineBlocks,
399
+ passed: ladder.passed &&
400
+ !acceptanceBlocks &&
401
+ !interactionBlocks &&
402
+ !visualBlocks &&
403
+ !visionBlocks &&
404
+ !baselineBlocks,
307
405
  exitCode,
308
406
  empty: false,
309
407
  report,
@@ -311,6 +409,8 @@ export async function runVerify(opts = {}) {
311
409
  rungs,
312
410
  acceptance,
313
411
  visual,
412
+ interaction,
413
+ blockedBy,
314
414
  };
315
415
  }
316
416
  function formatReport(ladder, overallPassed, blockedBy = []) {
@@ -449,6 +549,11 @@ export async function verifyCommand(options) {
449
549
  score: result.ladder?.score ?? null,
450
550
  results: result.ladder?.results ?? [],
451
551
  acceptance: result.acceptance ?? null,
552
+ // Without these a CI consumer sees `passed: false` and has nothing
553
+ // machine-readable saying which gate blocked or why.
554
+ interaction: result.interaction ?? null,
555
+ visual: result.visual ?? null,
556
+ blockedBy: result.blockedBy ?? [],
452
557
  }, null, 2) + '\n');
453
558
  }
454
559
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"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"}
@@ -74,6 +74,13 @@ export declare function findWebEntry(projectRoot: string): {
74
74
  export declare function findWebEntryDir(projectRoot: string): string | null;
75
75
  /** Best-effort classification of what kind of artifact lives in the project. */
76
76
  export declare function detectArtifactType(projectRoot: string): ArtifactType | null;
77
+ /**
78
+ * True when a request path touches a dotfile or a dependency/VCS directory.
79
+ *
80
+ * Checked per SEGMENT so `/.uap/proxy.env`, `/x/../.env` and `/sub/.git/config`
81
+ * are all refused, while ordinary assets are unaffected.
82
+ */
83
+ export declare function isDeniedPath(rel: string): boolean;
77
84
  export declare function startStaticServer(dir: string, entry?: string): Promise<{
78
85
  url: string;
79
86
  close: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"execution-gate.d.ts","sourceRoot":"","sources":["../../src/delivery/execution-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution-gate.d.ts","sourceRoot":"","sources":["../../src/delivery/execution-gate.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@
17
17
  import { spawnSync } from 'child_process';
18
18
  import { createServer } from 'http';
19
19
  import { createReadStream, existsSync, readdirSync, readFileSync, realpathSync, statSync } from 'fs';
20
- import { extname, join, resolve, sep } from 'path';
20
+ import { extname, join, relative, resolve, sep } from 'path';
21
21
  import { fileURLToPath } from 'url';
22
22
  import vm from 'vm';
23
23
  import { sanitizedEnv } from './sanitized-env.js';
@@ -215,6 +215,26 @@ export function detectArtifactType(projectRoot) {
215
215
  // Static file server (web path) — no python dependency, binds to an ephemeral
216
216
  // loopback port and serves a single directory.
217
217
  // ---------------------------------------------------------------------------
218
+ /** Path segments the gate server never serves, whatever the artifact asks for. */
219
+ const DENIED_SEGMENTS = new Set(['node_modules', '.git', '.uap', '.worktrees']);
220
+ /**
221
+ * True when a request path touches a dotfile or a dependency/VCS directory.
222
+ *
223
+ * Checked per SEGMENT so `/.uap/proxy.env`, `/x/../.env` and `/sub/.git/config`
224
+ * are all refused, while ordinary assets are unaffected.
225
+ */
226
+ export function isDeniedPath(rel) {
227
+ return rel
228
+ // Split on BOTH separators: on Windows `sub\\.git\\config` is one segment
229
+ // to a '/'-only split, matches neither rule, and then resolve() treats the
230
+ // backslashes as separators anyway.
231
+ .split(/[\\/]/)
232
+ .filter(Boolean)
233
+ // Lowercased: `node_modules` is the only entry not already covered by the
234
+ // dotfile rule, so a case-insensitive filesystem (macOS, Windows) serving
235
+ // `/NODE_MODULES/pkg/x` would be the entire gap.
236
+ .some((seg) => seg.startsWith('.') || DENIED_SEGMENTS.has(seg.toLowerCase()));
237
+ }
218
238
  const MIME = {
219
239
  '.html': 'text/html',
220
240
  '.js': 'text/javascript',
@@ -257,6 +277,17 @@ export function startStaticServer(dir, entry = 'index.html') {
257
277
  return;
258
278
  }
259
279
  const rel = urlPath === '/' ? 'index.html' : urlPath.replace(/^\/+/, '');
280
+ // Dotfile / dependency-tree denylist. The server roots at the PROJECT
281
+ // directory, so without this `/.uap/proxy.env` (this project's own
282
+ // convention for the proxy secret), `/.env` and `/.git/config` are all
283
+ // 200s on the SAME ORIGIN as the artifact — and the page's JavaScript
284
+ // is written by the model being graded, which can fetch and exfiltrate
285
+ // them. Nothing an artifact legitimately needs lives behind a dot.
286
+ if (isDeniedPath(rel)) {
287
+ response.statusCode = 403;
288
+ response.end('forbidden');
289
+ return;
290
+ }
260
291
  const target = resolve(rootReal, rel);
261
292
  // Lexical path-escape guard.
262
293
  if (target !== rootReal && !target.startsWith(rootReal + '/')) {
@@ -285,6 +316,16 @@ export function startStaticServer(dir, entry = 'index.html') {
285
316
  response.end('forbidden');
286
317
  return;
287
318
  }
319
+ // Re-apply the denylist to the RESOLVED path. Checking only the
320
+ // request path leaves the whole control bypassable by one symlink:
321
+ // `ln -s .uap/proxy.env notes.txt` inside the served root makes
322
+ // `/notes.txt` pass the request check, resolve to an in-tree
323
+ // protected file, and stream the secret to model-authored page JS.
324
+ if (isDeniedPath(relative(rootReal, realTarget))) {
325
+ response.statusCode = 403;
326
+ response.end('forbidden');
327
+ return;
328
+ }
288
329
  response.setHeader('Content-Type', MIME[extname(realTarget).toLowerCase()] ?? 'application/octet-stream');
289
330
  createReadStream(realTarget).pipe(response);
290
331
  }