@miller-tech/uap 1.56.0 → 1.57.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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/bin/cli.js +6 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/cli/verify.d.ts +12 -1
- package/dist/cli/verify.d.ts.map +1 -1
- package/dist/cli/verify.js +60 -5
- package/dist/cli/verify.js.map +1 -1
- package/dist/delivery/acceptance-judge.d.ts +59 -0
- package/dist/delivery/acceptance-judge.d.ts.map +1 -0
- package/dist/delivery/acceptance-judge.js +203 -0
- package/dist/delivery/acceptance-judge.js.map +1 -0
- package/package.json +1 -1
- package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Acceptance judge — behavioral completeness, beyond "does it crash".
|
|
3
|
+
*
|
|
4
|
+
* The execution gate proves the artifact RUNS; it cannot tell whether the spec
|
|
5
|
+
* was actually implemented. A generated game can load cleanly yet never call
|
|
6
|
+
* particles.draw(), render octopi with smooth arcs instead of pixel grids, or
|
|
7
|
+
* skip the boss every 5 levels. This gate extracts the spec's explicit
|
|
8
|
+
* requirements and judges each against the produced code (+ an optional runtime
|
|
9
|
+
* note), via a text LLM — so it works with the local model (no vision needed).
|
|
10
|
+
*
|
|
11
|
+
* It is a JUDGMENT, not a deterministic check: callers treat it as advisory or
|
|
12
|
+
* gate on it explicitly. The executor is injected (a prompt→text function), so
|
|
13
|
+
* the logic is fully unit-testable with a mock.
|
|
14
|
+
*/
|
|
15
|
+
import { lstatSync, readdirSync, readFileSync } from 'fs';
|
|
16
|
+
import { join, relative } from 'path';
|
|
17
|
+
const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', 'build', 'out', 'coverage', '.uap', '.uap-deliver', 'agents', '.worktrees']);
|
|
18
|
+
const SRC_EXT = /\.(js|mjs|cjs|ts|tsx|jsx|html|css|json|py|go|rs|java|rb|md|txt)$/i;
|
|
19
|
+
/** Never ship likely-secret files into the LLM prompt (esp. for remote endpoints). */
|
|
20
|
+
const SECRET_FILE_RE = /(^\.env)|secret|credential|\.pem$|\.key$|id_rsa/i;
|
|
21
|
+
const DEFAULT_MAX_FILES = 40;
|
|
22
|
+
// Generous by default — modern local models have very large context windows
|
|
23
|
+
// (e.g. qwen3.6 ≈ 184K tokens), and truncating implementation files causes the
|
|
24
|
+
// judge to report implemented features as "not visible" (false MISS).
|
|
25
|
+
const DEFAULT_MAX_CHARS = 60_000;
|
|
26
|
+
const PER_FILE_CHARS = 20_000;
|
|
27
|
+
/** Bounded walk gathering source-file evidence (path-labelled, truncated). */
|
|
28
|
+
export function gatherEvidence(projectRoot, maxFiles = DEFAULT_MAX_FILES, maxChars = DEFAULT_MAX_CHARS) {
|
|
29
|
+
const root = projectRoot;
|
|
30
|
+
const files = [];
|
|
31
|
+
const walk = (dir, depth) => {
|
|
32
|
+
if (depth > 8 || files.length >= maxFiles)
|
|
33
|
+
return;
|
|
34
|
+
let entries;
|
|
35
|
+
try {
|
|
36
|
+
entries = readdirSync(dir);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
for (const e of entries) {
|
|
42
|
+
if (files.length >= maxFiles)
|
|
43
|
+
return;
|
|
44
|
+
if (SKIP_DIRS.has(e) || (e.startsWith('.') && e !== '.'))
|
|
45
|
+
continue;
|
|
46
|
+
const abs = join(dir, e);
|
|
47
|
+
let st;
|
|
48
|
+
try {
|
|
49
|
+
st = lstatSync(abs); // lstat: do NOT follow symlinks (avoid cycles + escaping projectRoot)
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (st.isSymbolicLink())
|
|
55
|
+
continue;
|
|
56
|
+
if (st.isDirectory())
|
|
57
|
+
walk(abs, depth + 1);
|
|
58
|
+
else if (st.isFile() && SRC_EXT.test(e) && e !== 'package-lock.json' && !SECRET_FILE_RE.test(e) && st.size <= 200_000)
|
|
59
|
+
files.push(abs);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
walk(root, 0);
|
|
63
|
+
let out = '';
|
|
64
|
+
let used = 0;
|
|
65
|
+
for (const abs of files) {
|
|
66
|
+
if (used >= maxChars)
|
|
67
|
+
break;
|
|
68
|
+
let content;
|
|
69
|
+
try {
|
|
70
|
+
content = readFileSync(abs, 'utf-8');
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const rel = relative(root, abs);
|
|
76
|
+
const budget = Math.min(content.length, maxChars - used, PER_FILE_CHARS);
|
|
77
|
+
out += `\n=== ${rel} ===\n${content.slice(0, budget)}\n`;
|
|
78
|
+
used += budget;
|
|
79
|
+
}
|
|
80
|
+
return out.trim();
|
|
81
|
+
}
|
|
82
|
+
function buildPrompt(spec, evidence, runtimeNote) {
|
|
83
|
+
return [
|
|
84
|
+
'You are a strict acceptance reviewer. Decide whether the IMPLEMENTATION satisfies',
|
|
85
|
+
'the EXPLICIT, checkable requirements in the SPEC. Judge ONLY from the code shown',
|
|
86
|
+
'(and the runtime note if given) — do not assume anything not visible.',
|
|
87
|
+
'',
|
|
88
|
+
'Extract each concrete, verifiable requirement from the spec (ignore vague aesthetic',
|
|
89
|
+
'wishes). For each, decide if the code clearly implements it. Be conservative: if the',
|
|
90
|
+
'code does not show it, mark it not met.',
|
|
91
|
+
'',
|
|
92
|
+
'=== SPEC ===',
|
|
93
|
+
spec.slice(0, 6_000),
|
|
94
|
+
'',
|
|
95
|
+
runtimeNote ? `=== RUNTIME OBSERVATION ===\n${runtimeNote}\n` : '',
|
|
96
|
+
'=== IMPLEMENTATION (code) ===',
|
|
97
|
+
evidence.slice(0, 64_000),
|
|
98
|
+
'',
|
|
99
|
+
'Respond with ONLY a JSON object, no prose, no code fences:',
|
|
100
|
+
'{"criteria":[{"requirement":"<short>","met":true|false,"reason":"<short>"}],"pass":true|false}',
|
|
101
|
+
'Set "pass" to true only if every important requirement is met.',
|
|
102
|
+
].join('\n');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Extract the first PARSEABLE balanced top-level JSON object from model text.
|
|
106
|
+
* If a balanced object fails to parse (e.g. a stray `{…}` fragment in the
|
|
107
|
+
* preamble), it resumes scanning from the next `{` rather than giving up.
|
|
108
|
+
*/
|
|
109
|
+
export function extractJsonObject(text) {
|
|
110
|
+
let from = text.indexOf('{');
|
|
111
|
+
while (from !== -1) {
|
|
112
|
+
let depth = 0;
|
|
113
|
+
let inStr = false;
|
|
114
|
+
let esc = false;
|
|
115
|
+
let end = -1;
|
|
116
|
+
for (let i = from; i < text.length; i++) {
|
|
117
|
+
const ch = text[i];
|
|
118
|
+
if (inStr) {
|
|
119
|
+
if (esc)
|
|
120
|
+
esc = false;
|
|
121
|
+
else if (ch === '\\')
|
|
122
|
+
esc = true;
|
|
123
|
+
else if (ch === '"')
|
|
124
|
+
inStr = false;
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (ch === '"')
|
|
128
|
+
inStr = true;
|
|
129
|
+
else if (ch === '{')
|
|
130
|
+
depth++;
|
|
131
|
+
else if (ch === '}') {
|
|
132
|
+
depth--;
|
|
133
|
+
if (depth === 0) {
|
|
134
|
+
end = i;
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (end === -1)
|
|
140
|
+
return null; // no balanced close — give up
|
|
141
|
+
try {
|
|
142
|
+
return JSON.parse(text.slice(from, end + 1));
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
from = text.indexOf('{', from + 1); // malformed — try the next candidate
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Run the acceptance gate. Fails OPEN (passed:true, parseError set) when the
|
|
152
|
+
* model output is unparseable or the executor throws — a judgment gate must
|
|
153
|
+
* never wedge delivery on its own nondeterminism.
|
|
154
|
+
*/
|
|
155
|
+
export async function runAcceptanceGate(opts) {
|
|
156
|
+
const evidence = opts.evidence ?? gatherEvidence(opts.projectRoot, opts.maxFiles, opts.maxChars);
|
|
157
|
+
if (!evidence.trim()) {
|
|
158
|
+
return { passed: true, score: 1, criteria: [], parseError: 'no source evidence found' };
|
|
159
|
+
}
|
|
160
|
+
let raw;
|
|
161
|
+
try {
|
|
162
|
+
raw = await opts.executor(buildPrompt(opts.spec, evidence, opts.runtimeNote));
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
return { passed: true, score: 1, criteria: [], parseError: `executor error: ${String(e).slice(0, 120)}` };
|
|
166
|
+
}
|
|
167
|
+
const parsed = extractJsonObject(raw);
|
|
168
|
+
const rawCriteria = Array.isArray(parsed?.criteria) ? parsed.criteria : null;
|
|
169
|
+
if (!parsed || !rawCriteria) {
|
|
170
|
+
return { passed: true, score: 1, criteria: [], parseError: 'unparseable judge verdict' };
|
|
171
|
+
}
|
|
172
|
+
const criteria = rawCriteria
|
|
173
|
+
.map((c) => {
|
|
174
|
+
const o = (c ?? {});
|
|
175
|
+
return {
|
|
176
|
+
requirement: String(o.requirement ?? o.text ?? '').slice(0, 300),
|
|
177
|
+
met: o.met === true,
|
|
178
|
+
reason: String(o.reason ?? '').slice(0, 300),
|
|
179
|
+
};
|
|
180
|
+
})
|
|
181
|
+
.filter((c) => c.requirement);
|
|
182
|
+
if (criteria.length === 0) {
|
|
183
|
+
return { passed: true, score: 1, criteria: [], parseError: 'no criteria extracted' };
|
|
184
|
+
}
|
|
185
|
+
const metCount = criteria.filter((c) => c.met).length;
|
|
186
|
+
const score = metCount / criteria.length;
|
|
187
|
+
// Ignore the model's self-reported "pass" (unreliable) and require every
|
|
188
|
+
// extracted criterion to be met — conservative, matching the gate's purpose.
|
|
189
|
+
const passed = metCount === criteria.length;
|
|
190
|
+
return { passed, score, criteria };
|
|
191
|
+
}
|
|
192
|
+
/** Render a short human report of an acceptance result. */
|
|
193
|
+
export function formatAcceptanceReport(result) {
|
|
194
|
+
if (result.parseError && result.criteria.length === 0) {
|
|
195
|
+
return `ACCEPTANCE: skipped (${result.parseError})`;
|
|
196
|
+
}
|
|
197
|
+
const head = result.passed
|
|
198
|
+
? `ACCEPTANCE ✓ (${result.criteria.length}/${result.criteria.length} requirements met)`
|
|
199
|
+
: `ACCEPTANCE ✗ (${result.criteria.filter((c) => c.met).length}/${result.criteria.length} requirements met)`;
|
|
200
|
+
const lines = result.criteria.map((c) => ` [${c.met ? 'MET ' : 'MISS'}] ${c.requirement}${c.met ? '' : ` — ${c.reason}`}`);
|
|
201
|
+
return [head, ...lines].join('\n');
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=acceptance-judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acceptance-judge.js","sourceRoot":"","sources":["../../src/delivery/acceptance-judge.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
Binary file
|