nimai-core 0.3.8 → 0.3.10
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/lint.d.ts.map +1 -1
- package/dist/lint.js +172 -0
- package/dist/lint.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +15 -0
- package/dist/prompts.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/verdict.d.ts +7 -0
- package/dist/verdict.d.ts.map +1 -1
- package/dist/verdict.js +2 -0
- package/dist/verdict.js.map +1 -1
- package/package.json +1 -1
package/dist/lint.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAiB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAiB,MAAM,SAAS,CAAC;AAqGnD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAQtD;AAsBD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CAiFxD"}
|
package/dist/lint.js
CHANGED
|
@@ -44,6 +44,39 @@ const NHFI_RE = /\[NEEDS HUMAN INPUT/i;
|
|
|
44
44
|
const PRE_CHECKED_AC_RE = /^[-*]\s+\[x\]/im;
|
|
45
45
|
// Matches the nimai-spec marker (with or without date)
|
|
46
46
|
const NIMAI_MARKER_RE = /<!--\s*nimai-spec[\s:]/;
|
|
47
|
+
// Unresolved mechanism detection — two-tier:
|
|
48
|
+
// Pattern A (high confidence, flagged anywhere): parenthetical "(e.g., X or Y)"
|
|
49
|
+
const UNRESOLVED_PAREN_RE = /\(e\.g\.,?\s+[^)\n]+\bor\b[^)\n]*\)/i;
|
|
50
|
+
// Pattern B (context-sensitive, only inside critical sections):
|
|
51
|
+
// "e.g., X or Y" / "such as X or Y" / "for example X or Y"
|
|
52
|
+
// "could/might use/implement X or Y"
|
|
53
|
+
const UNRESOLVED_INLINE_RE = /(?:(?:e\.g\.|such as|for example)\s+\w[^\n.;]*\bor\b|\b(?:could|might)\s+(?:use|implement|be\s+(?:used|implemented?))\s+\w[^\n.;]*\bor\b)/i;
|
|
54
|
+
// Headings that introduce critical sections where a single mechanism must be chosen.
|
|
55
|
+
// No trailing \b so that plurals/suffixes like "Constraints", "Implementation", "Tasks" all match.
|
|
56
|
+
const CRITICAL_SECTION_RE = /\b(?:deliverable|scope|constraints?|must|sub-?tasks?|tasks?|implement\w*|pipeline|mechanism|architect\w*|approach)/i;
|
|
57
|
+
const HEADING_LINE_RE = /^#{1,6}\s+(.+)/;
|
|
58
|
+
/** Return 1-based line numbers where unresolved mechanism patterns are found. */
|
|
59
|
+
function detectUnresolvedMechanisms(lines) {
|
|
60
|
+
const matches = [];
|
|
61
|
+
let inCritical = false;
|
|
62
|
+
for (let i = 0; i < lines.length; i++) {
|
|
63
|
+
const headingMatch = lines[i].match(HEADING_LINE_RE);
|
|
64
|
+
if (headingMatch) {
|
|
65
|
+
inCritical = CRITICAL_SECTION_RE.test(headingMatch[1]);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
// Pattern A: parenthetical "(e.g., X or Y)" — high enough confidence to flag anywhere
|
|
69
|
+
if (UNRESOLVED_PAREN_RE.test(lines[i])) {
|
|
70
|
+
matches.push(i + 1);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// Pattern B: inline options — only inside critical sections to avoid prose false-positives
|
|
74
|
+
if (inCritical && UNRESOLVED_INLINE_RE.test(lines[i])) {
|
|
75
|
+
matches.push(i + 1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return matches;
|
|
79
|
+
}
|
|
47
80
|
// Required top-level sections (by heading text, case-insensitive)
|
|
48
81
|
const REQUIRED_SECTIONS = [
|
|
49
82
|
'pre-flight',
|
|
@@ -154,7 +187,23 @@ function lintContent(content) {
|
|
|
154
187
|
if (!NIMAI_MARKER_RE.test(content)) {
|
|
155
188
|
issues.push(advisoryIssue(0, 'missing_marker', 'No <!-- nimai-spec --> marker found — add it so nimai can discover this spec automatically (nimai new stamps it)'));
|
|
156
189
|
}
|
|
190
|
+
// Unresolved mechanism — spec offers options instead of committing to one path.
|
|
191
|
+
// Hard-fail for medium/high risk specs; advisory for low/unknown.
|
|
157
192
|
const riskTier = detectRiskTier(content);
|
|
193
|
+
const unresolvedMatches = detectUnresolvedMechanisms(lines);
|
|
194
|
+
for (const lineNum of unresolvedMatches) {
|
|
195
|
+
const isHard = riskTier === 'medium' || riskTier === 'high';
|
|
196
|
+
const msg = `Unresolved mechanism on line ${lineNum} — spec must commit to a single implementation path, not offer options (e.g. "e.g., X or Y")`;
|
|
197
|
+
issues.push(isHard
|
|
198
|
+
? issue(lineNum, 'unresolved_mechanism', msg)
|
|
199
|
+
: advisoryIssue(lineNum, 'unresolved_mechanism', msg));
|
|
200
|
+
}
|
|
201
|
+
// Mechanism Decision section — deterministic contract lock
|
|
202
|
+
issues.push(...mechanismDecisionIssues(content, lines, riskTier));
|
|
203
|
+
// Spec Convergence section — GO gate: zero open questions, zero ambiguities
|
|
204
|
+
issues.push(...convergenceIssues(content, lines, riskTier));
|
|
205
|
+
// Edge Cases and Failure Modes — adversarial gap check (Option 3)
|
|
206
|
+
issues.push(...edgeCasesIssues(lines, riskTier));
|
|
158
207
|
const coding = isCodingSpec(content);
|
|
159
208
|
for (const rule of ADVISORY_RULES) {
|
|
160
209
|
const found = rule.keywords.some(kw => lower.includes(kw.toLowerCase()));
|
|
@@ -172,6 +221,129 @@ function lintContent(content) {
|
|
|
172
221
|
}
|
|
173
222
|
return issues;
|
|
174
223
|
}
|
|
224
|
+
/**
|
|
225
|
+
* Validate the Mechanism Decision section contract.
|
|
226
|
+
* - If absent on a medium/high spec: hard-fail. Advisory on low/unknown.
|
|
227
|
+
* - If present: all four required fields must be non-blank; "Chosen approach" must not contain
|
|
228
|
+
* option language. Validation is scoped to the section, not the whole file.
|
|
229
|
+
*/
|
|
230
|
+
function mechanismDecisionIssues(content, lines, riskTier) {
|
|
231
|
+
const result = [];
|
|
232
|
+
const sectionStartIdx = lines.findIndex(l => /^#{1,3}\s+.*mechanism\s*decision/i.test(l));
|
|
233
|
+
if (sectionStartIdx === -1) {
|
|
234
|
+
const msg = 'No "Mechanism Decision" section found — add one with "Chosen approach:", "Rejected alternatives:", "Why rejected:", "Impact on ACs:" for each core mechanism (prevents builder drift in multi-agent workflows)';
|
|
235
|
+
const isHard = riskTier === 'medium' || riskTier === 'high';
|
|
236
|
+
result.push(isHard ? issue(0, 'missing_mechanism_decision', msg) : advisoryIssue(0, 'missing_mechanism_decision', msg));
|
|
237
|
+
return result;
|
|
238
|
+
}
|
|
239
|
+
// Determine section end: next heading at same or higher level (fewer #s), or EOF
|
|
240
|
+
const headingLevel = (lines[sectionStartIdx].match(/^(#{1,6})/) ?? ['', '#'])[1].length;
|
|
241
|
+
let sectionEndIdx = lines.length;
|
|
242
|
+
for (let i = sectionStartIdx + 1; i < lines.length; i++) {
|
|
243
|
+
const m = lines[i].match(/^(#{1,6})\s+/);
|
|
244
|
+
if (m && m[1].length <= headingLevel) {
|
|
245
|
+
sectionEndIdx = i;
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const sectionLines = lines.slice(sectionStartIdx, sectionEndIdx);
|
|
250
|
+
// All four required fields must be present and non-blank (N/A is accepted)
|
|
251
|
+
const REQUIRED_FIELDS = [
|
|
252
|
+
{ key: 'chosen approach:', label: 'Chosen approach' },
|
|
253
|
+
{ key: 'rejected alternatives:', label: 'Rejected alternatives' },
|
|
254
|
+
{ key: 'why rejected:', label: 'Why rejected' },
|
|
255
|
+
{ key: 'impact on acs:', label: 'Impact on ACs' },
|
|
256
|
+
];
|
|
257
|
+
for (const { key, label } of REQUIRED_FIELDS) {
|
|
258
|
+
const lineIdx = sectionLines.findIndex(l => l.trim().toLowerCase().startsWith(key));
|
|
259
|
+
if (lineIdx === -1) {
|
|
260
|
+
result.push(issue(sectionStartIdx + 1, 'ambiguous_chosen_approach', `Mechanism Decision section is missing required field "${label}:" — add it for every core mechanism`));
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
const absLine = sectionStartIdx + lineIdx + 1;
|
|
264
|
+
const colonPos = sectionLines[lineIdx].indexOf(':');
|
|
265
|
+
const value = sectionLines[lineIdx].slice(colonPos + 1).trim();
|
|
266
|
+
if (!value || /_{3,}/.test(value)) {
|
|
267
|
+
result.push(issue(absLine, 'ambiguous_chosen_approach', `"${label}" on line ${absLine} is blank — fill it in or write "N/A" with justification`));
|
|
268
|
+
}
|
|
269
|
+
else if (key === 'chosen approach:' &&
|
|
270
|
+
/\b(?:or|could|might)\b|\be\.g\.|\bsuch as\b|\bfor example\b/i.test(value)) {
|
|
271
|
+
result.push(issue(absLine, 'ambiguous_chosen_approach', `"Chosen approach" on line ${absLine} contains option language ("or/could/might/e.g./such as/for example") — must commit to one mechanism, not offer choices`));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return result;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Enforce the Edge Cases and Failure Modes section.
|
|
278
|
+
* Requires the spec author to do adversarial thinking before handing off.
|
|
279
|
+
* - Absent on medium/high risk: hard-fail.
|
|
280
|
+
* - Absent on low/unknown: advisory.
|
|
281
|
+
* Content completeness (blank fields) is caught separately by the blank_field rule.
|
|
282
|
+
*/
|
|
283
|
+
function edgeCasesIssues(lines, riskTier) {
|
|
284
|
+
const found = lines.some(l => /^#{1,3}\s+.*(?:edge\s*cases|failure\s*modes)/i.test(l));
|
|
285
|
+
if (found)
|
|
286
|
+
return [];
|
|
287
|
+
const msg = 'No "Edge Cases and Failure Modes" section found — add one to red-team the spec before builder handoff (scope creep, hallucinated completion, intent drift, domain-specific edge cases)';
|
|
288
|
+
const isHard = riskTier === 'medium' || riskTier === 'high';
|
|
289
|
+
return [isHard ? issue(0, 'missing_edge_cases', msg) : advisoryIssue(0, 'missing_edge_cases', msg)];
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Validate the Spec Convergence section — the formal GO declaration.
|
|
293
|
+
* - If absent on a medium/high spec: hard-fail. Advisory on low/unknown.
|
|
294
|
+
* - If present: open_questions and ambiguities_remaining must both be "0".
|
|
295
|
+
* ready_for_build: "no" is always a hard-fail (explicit NO_GO declaration).
|
|
296
|
+
*/
|
|
297
|
+
function convergenceIssues(content, lines, riskTier) {
|
|
298
|
+
const result = [];
|
|
299
|
+
const sectionStartIdx = lines.findIndex(l => /^#{1,3}\s+.*spec\s*convergence/i.test(l));
|
|
300
|
+
if (sectionStartIdx === -1) {
|
|
301
|
+
const msg = 'No "Spec Convergence" section found — add one with "open_questions: 0", "ambiguities_remaining: 0", and "ready_for_build: yes" to declare the spec is agent-ready';
|
|
302
|
+
const isHard = riskTier === 'medium' || riskTier === 'high';
|
|
303
|
+
result.push(isHard ? issue(0, 'missing_convergence_section', msg) : advisoryIssue(0, 'missing_convergence_section', msg));
|
|
304
|
+
return result;
|
|
305
|
+
}
|
|
306
|
+
// Determine section end: next heading at same or higher level (fewer #s), or EOF
|
|
307
|
+
const headingLevel = (lines[sectionStartIdx].match(/^(#{1,6})/) ?? ['', '#'])[1].length;
|
|
308
|
+
let sectionEndIdx = lines.length;
|
|
309
|
+
for (let i = sectionStartIdx + 1; i < lines.length; i++) {
|
|
310
|
+
const m = lines[i].match(/^(#{1,6})\s+/);
|
|
311
|
+
if (m && m[1].length <= headingLevel) {
|
|
312
|
+
sectionEndIdx = i;
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
const sectionLines = lines.slice(sectionStartIdx, sectionEndIdx);
|
|
317
|
+
// Check required integer fields — must be present and equal "0"
|
|
318
|
+
const INTEGER_FIELDS = [
|
|
319
|
+
{ key: 'open_questions:', label: 'open_questions' },
|
|
320
|
+
{ key: 'ambiguities_remaining:', label: 'ambiguities_remaining' },
|
|
321
|
+
];
|
|
322
|
+
for (const { key, label } of INTEGER_FIELDS) {
|
|
323
|
+
const lineIdx = sectionLines.findIndex(l => l.trim().toLowerCase().startsWith(key));
|
|
324
|
+
if (lineIdx === -1) {
|
|
325
|
+
result.push(issue(sectionStartIdx + 1, 'unresolved_convergence', `Spec Convergence section is missing required field "${label}:" — add it and set it to 0 when all issues are resolved`));
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
const absLine = sectionStartIdx + lineIdx + 1;
|
|
329
|
+
const colonPos = sectionLines[lineIdx].indexOf(':');
|
|
330
|
+
const value = sectionLines[lineIdx].slice(colonPos + 1).trim();
|
|
331
|
+
if (value !== '0') {
|
|
332
|
+
result.push(issue(absLine, 'unresolved_convergence', `"${label}" on line ${absLine} is "${value}" — must be 0 before handoff to builder`));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Check ready_for_build — explicit "no" is always a hard-fail
|
|
336
|
+
const rfbLineIdx = sectionLines.findIndex(l => l.trim().toLowerCase().startsWith('ready_for_build:'));
|
|
337
|
+
if (rfbLineIdx !== -1) {
|
|
338
|
+
const absLine = sectionStartIdx + rfbLineIdx + 1;
|
|
339
|
+
const colonPos = sectionLines[rfbLineIdx].indexOf(':');
|
|
340
|
+
const value = sectionLines[rfbLineIdx].slice(colonPos + 1).trim().toLowerCase();
|
|
341
|
+
if (value === 'no') {
|
|
342
|
+
result.push(issue(absLine, 'unresolved_convergence', `"ready_for_build" on line ${absLine} is "no" — spec is explicitly declared not ready for build`));
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return result;
|
|
346
|
+
}
|
|
175
347
|
function issue(line, type, message) {
|
|
176
348
|
return { line, type, message };
|
|
177
349
|
}
|
package/dist/lint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
|
package/dist/prompts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CA0B5E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CA0B5E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAkFzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAgBxD"}
|
package/dist/prompts.js
CHANGED
|
@@ -71,6 +71,9 @@ A verdict without citation is treated as NO_GO — do not assert PASS without ev
|
|
|
71
71
|
4. **Decomposition realism** — can each sub-task be completed within the stated 2-hour limit by a skilled agent? Check that sub-task dependencies are stated explicitly (if task B requires task A's output, that must be documented).
|
|
72
72
|
5. **Start-without-clarification viability** — can an agent begin immediately with the context provided, without asking the human for more information?
|
|
73
73
|
6. **Internal consistency** — are terms, names, and concepts used consistently throughout the spec? Flag any case where the same entity is described differently in different sections (e.g., "webhook event" in scope, "push notification" in ACs — are these the same thing?).
|
|
74
|
+
7. **Mechanism lock** — does every core flow (data pipeline, primary algorithm, key architecture choice) commit to exactly ONE implementation approach? Scan for "e.g.", "or", "could", "might", "such as" in Deliverable, Scope, Constraints, and Task decomposition sections. If any of these offer multiple options without making an explicit decision, that is a HARD_FAIL — a spec that leaves the mechanism unresolved forces the builder to choose architecture, creating drift in multi-builder workflows.
|
|
75
|
+
8. **Convergence declaration** — does the spec include a \`## Spec Convergence\` section with \`open_questions: 0\` and \`ambiguities_remaining: 0\`? If the section is absent, or either value is non-zero, or \`ready_for_build\` is "no", that is a HARD_FAIL. This is the formal GO gate — a spec with declared open questions is not agent-ready regardless of how well the other sections are written.
|
|
76
|
+
9. **Adversarial gap scan** — does the spec include an \`## Edge Cases and Failure Modes\` section that is substantively filled? Steelman the spec as a builder who will follow it exactly: what will you hit mid-execution that the spec does not answer? What implicit assumption is baked in but undeclared? What failure mode from the FORGE taxonomy (scope creep, hallucinated completion, intent drift, context collapse, runaway cost, overconfident output) does the spec not address? An absent or blank section is a HARD_FAIL for medium/high risk specs. Placeholder-only content (\`___\`) is treated as absent.
|
|
74
77
|
|
|
75
78
|
## Severity classification
|
|
76
79
|
|
|
@@ -90,6 +93,18 @@ Then write a consolidated remediation list for all FAIL dimensions.
|
|
|
90
93
|
|
|
91
94
|
Note: implementation correctness is explicitly out of scope for this review.
|
|
92
95
|
|
|
96
|
+
## Re-review closure requirement
|
|
97
|
+
|
|
98
|
+
If this spec was previously reviewed and returned FAIL, the spec must include a closure map before you evaluate it.
|
|
99
|
+
Look for a section like:
|
|
100
|
+
|
|
101
|
+
> ## Review Closure
|
|
102
|
+
> | Issue | fixed_in_section | exact_text_changed | proof |
|
|
103
|
+
|
|
104
|
+
**If any previously reported HARD_FAIL issue has no corresponding closure entry — passed: false, automatically.**
|
|
105
|
+
Do not evaluate the other dimensions until you confirm closure entries exist for all prior HARD_FAILs.
|
|
106
|
+
If this is a first review (no prior verdict), skip this check.
|
|
107
|
+
|
|
93
108
|
## Important
|
|
94
109
|
|
|
95
110
|
Always end your response with the following verdict block as the **final section**, regardless of pass/fail outcome.
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAMH,oCA0BC;AAeD,
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAMH,oCA0BC;AAeD,sCAkFC;AAMD,oCAgBC;AArJD;;;GAGG;AACH,SAAgB,YAAY,CAAC,OAAe,EAAE,cAAsB;IAClE,OAAO;;;;;;;;;;;;;;;;;;;;;EAqBP,cAAc,IAAI,6BAA6B;;;iBAGhC,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,aAAa,CAAC,WAAmB;IAC/C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgFP,WAAW,EAAE,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,WAAmB;IAC9C,OAAO;;;;;;;;;;;;;;EAcP,WAAW,EAAE,CAAC;AAChB,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type LintIssueType = 'blank_field' | 'needs_human_input' | 'missing_section' | 'missing_module_boundary' | 'missing_interface_contract' | 'missing_non_goals' | 'missing_change_surface' | 'missing_dependency_direction' | 'pre_checked_ac' | 'missing_marker';
|
|
1
|
+
export type LintIssueType = 'blank_field' | 'needs_human_input' | 'missing_section' | 'missing_module_boundary' | 'missing_interface_contract' | 'missing_non_goals' | 'missing_change_surface' | 'missing_dependency_direction' | 'pre_checked_ac' | 'missing_marker' | 'unresolved_mechanism' | 'missing_mechanism_decision' | 'ambiguous_chosen_approach' | 'missing_convergence_section' | 'unresolved_convergence' | 'missing_edge_cases';
|
|
2
2
|
export interface LintIssue {
|
|
3
3
|
line: number;
|
|
4
4
|
type: LintIssueType;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,mBAAmB,GACnB,iBAAiB,GACjB,yBAAyB,GACzB,4BAA4B,GAC5B,mBAAmB,GACnB,wBAAwB,GACxB,8BAA8B,GAC9B,gBAAgB,GAChB,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,mBAAmB,GACnB,iBAAiB,GACjB,yBAAyB,GACzB,4BAA4B,GAC5B,mBAAmB,GACnB,wBAAwB,GACxB,8BAA8B,GAC9B,gBAAgB,GAChB,gBAAgB,GAChB,sBAAsB,GACtB,4BAA4B,GAC5B,2BAA2B,GAC3B,6BAA6B,GAC7B,wBAAwB,GACxB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
package/dist/verdict.d.ts
CHANGED
|
@@ -22,6 +22,13 @@ export interface VerdictIssue {
|
|
|
22
22
|
severity?: 'HARD_FAIL' | 'SOFT_FAIL' | 'NOTE';
|
|
23
23
|
/** Human-readable description of the issue */
|
|
24
24
|
detail: string;
|
|
25
|
+
/**
|
|
26
|
+
* On re-review, the reviewing LLM sets this to true when all prior HARD_FAIL
|
|
27
|
+
* issues have a corresponding closure entry in the spec's ## Review Closure section.
|
|
28
|
+
* Enforcement is prompt-level (the LLM checks; the parser preserves the signal).
|
|
29
|
+
* Absent on first reviews.
|
|
30
|
+
*/
|
|
31
|
+
closure_verified?: boolean;
|
|
25
32
|
}
|
|
26
33
|
export interface Verdict {
|
|
27
34
|
passed: boolean;
|
package/dist/verdict.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verdict.d.ts","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;IAC9C,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"verdict.d.ts","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;IAC9C,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAE,OAA4G,CAAC;AAE7I;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAsCzD"}
|
package/dist/verdict.js
CHANGED
|
@@ -56,6 +56,8 @@ function parseVerdict(llmResponse) {
|
|
|
56
56
|
if (item.severity === 'HARD_FAIL' || item.severity === 'SOFT_FAIL' || item.severity === 'NOTE') {
|
|
57
57
|
vi.severity = item.severity;
|
|
58
58
|
}
|
|
59
|
+
if (typeof item.closure_verified === 'boolean')
|
|
60
|
+
vi.closure_verified = item.closure_verified;
|
|
59
61
|
issues.push(vi);
|
|
60
62
|
}
|
|
61
63
|
else {
|
package/dist/verdict.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verdict.js","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;
|
|
1
|
+
{"version":3,"file":"verdict.js","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAgCH,oCAsCC;AA7CD,8DAA8D;AACjD,QAAA,iBAAiB,GAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,yDAAyD,EAAE,CAAC,EAAE,CAAC;AAE7I;;;GAGG;AACH,SAAgB,YAAY,CAAC,WAAmB;IAC9C,MAAM,SAAS,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,SAAS;QAAE,OAAO,yBAAiB,CAAC;IAEzC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,yBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,yBAAiB,CAAC;IAClD,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,yBAAiB,CAAC;IAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,yBAAiB,CAAC;IAEzD,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,0BAA0B;YAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAClE,+CAA+C;YAC/C,MAAM,EAAE,GAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACjD,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;gBAAE,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACtE,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC/F,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,gBAAgB,KAAK,SAAS;gBAAE,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC5F,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,2DAA2D;YAC3D,OAAO,yBAAiB,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IACxD,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ;QAAE,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;IACxF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAChF,SAAS,oBAAoB,CAAC,IAAY;IACxC,uDAAuD;IACvD,MAAM,EAAE,GAAG,0BAA0B,CAAC;IACtC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC"}
|