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.
@@ -1 +1 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAiB,MAAM,SAAS,CAAC;AAkEnD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAQtD;AAsBD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CA6DxD"}
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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"}
@@ -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,CAmEzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAgBxD"}
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.
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAMH,oCA0BC;AAeD,sCAmEC;AAMD,oCAgBC;AAtID;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiEP,WAAW,EAAE,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,WAAmB;IAC9C,OAAO;;;;;;;;;;;;;;EAcP,WAAW,EAAE,CAAC;AAChB,CAAC"}
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;
@@ -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;AAErB,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"}
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;
@@ -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;CAChB;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,CAqCzD"}
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 {
@@ -1 +1 @@
1
- {"version":3,"file":"verdict.js","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAyBH,oCAqCC;AA5CD,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,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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nimai-core",
3
- "version": "0.3.8",
3
+ "version": "0.3.10",
4
4
  "description": "Nimai core library — template loading, lint engine, context extraction. No LLM dependencies.",
5
5
  "keywords": [
6
6
  "nimai",