@specverse/engines 6.42.3 → 6.60.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 (143) hide show
  1. package/dist/ai/analyse-runner.d.ts.map +1 -1
  2. package/dist/ai/analyse-runner.js +53 -1
  3. package/dist/ai/analyse-runner.js.map +1 -1
  4. package/dist/ai/prompt-runner.d.ts +39 -1
  5. package/dist/ai/prompt-runner.d.ts.map +1 -1
  6. package/dist/ai/prompt-runner.js +44 -3
  7. package/dist/ai/prompt-runner.js.map +1 -1
  8. package/dist/ai/providers/claude-cli.d.ts.map +1 -1
  9. package/dist/ai/providers/claude-cli.js +8 -1
  10. package/dist/ai/providers/claude-cli.js.map +1 -1
  11. package/dist/ai/skill-loader.d.ts +50 -0
  12. package/dist/ai/skill-loader.d.ts.map +1 -0
  13. package/dist/ai/skill-loader.js +96 -0
  14. package/dist/ai/skill-loader.js.map +1 -0
  15. package/dist/analyse-prepass/adapters/index.d.ts +2 -0
  16. package/dist/analyse-prepass/adapters/index.d.ts.map +1 -1
  17. package/dist/analyse-prepass/adapters/index.js +2 -0
  18. package/dist/analyse-prepass/adapters/index.js.map +1 -1
  19. package/dist/analyse-prepass/adapters/module-functions.d.ts +95 -0
  20. package/dist/analyse-prepass/adapters/module-functions.d.ts.map +1 -0
  21. package/dist/analyse-prepass/adapters/module-functions.js +358 -0
  22. package/dist/analyse-prepass/adapters/module-functions.js.map +1 -0
  23. package/dist/analyse-prepass/adapters/naming-convention-fks.d.ts +90 -0
  24. package/dist/analyse-prepass/adapters/naming-convention-fks.d.ts.map +1 -0
  25. package/dist/analyse-prepass/adapters/naming-convention-fks.js +181 -0
  26. package/dist/analyse-prepass/adapters/naming-convention-fks.js.map +1 -0
  27. package/dist/analyse-prepass/index.d.ts +8 -0
  28. package/dist/analyse-prepass/index.d.ts.map +1 -1
  29. package/dist/analyse-prepass/index.js +130 -0
  30. package/dist/analyse-prepass/index.js.map +1 -1
  31. package/dist/libs/instance-factories/cli/templates/commander/cli-entry-generator.js +11 -12
  32. package/dist/libs/instance-factories/cli/templates/commander/command-generator.js +2 -2
  33. package/dist/libs/instance-factories/controllers/templates/fastify/routes-generator.js +29 -10
  34. package/dist/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.js +10 -9
  35. package/dist/libs/instance-factories/services/templates/prisma/behavior-generator.js +24 -2
  36. package/dist/libs/instance-factories/services/templates/prisma/controller-generator.js +28 -20
  37. package/dist/normalise/index.d.ts +14 -0
  38. package/dist/normalise/index.d.ts.map +1 -0
  39. package/dist/normalise/index.js +14 -0
  40. package/dist/normalise/index.js.map +1 -0
  41. package/dist/normalise/load-overrides.d.ts +43 -0
  42. package/dist/normalise/load-overrides.d.ts.map +1 -0
  43. package/dist/normalise/load-overrides.js +121 -0
  44. package/dist/normalise/load-overrides.js.map +1 -0
  45. package/dist/normalise/normalise-rules.d.ts +181 -0
  46. package/dist/normalise/normalise-rules.d.ts.map +1 -0
  47. package/dist/normalise/normalise-rules.js +79 -0
  48. package/dist/normalise/normalise-rules.js.map +1 -0
  49. package/dist/normalise/rules/cluster-module-functions.d.ts +31 -0
  50. package/dist/normalise/rules/cluster-module-functions.d.ts.map +1 -0
  51. package/dist/normalise/rules/cluster-module-functions.js +238 -0
  52. package/dist/normalise/rules/cluster-module-functions.js.map +1 -0
  53. package/dist/normalise/rules/crud-into-curved.d.ts +117 -0
  54. package/dist/normalise/rules/crud-into-curved.d.ts.map +1 -0
  55. package/dist/normalise/rules/crud-into-curved.js +303 -0
  56. package/dist/normalise/rules/crud-into-curved.js.map +1 -0
  57. package/dist/normalise/rules/drop-trivial-passthrough.d.ts +92 -0
  58. package/dist/normalise/rules/drop-trivial-passthrough.d.ts.map +1 -0
  59. package/dist/normalise/rules/drop-trivial-passthrough.js +217 -0
  60. package/dist/normalise/rules/drop-trivial-passthrough.js.map +1 -0
  61. package/dist/normalise/runner.d.ts +58 -0
  62. package/dist/normalise/runner.d.ts.map +1 -0
  63. package/dist/normalise/runner.js +114 -0
  64. package/dist/normalise/runner.js.map +1 -0
  65. package/dist/parser/import-resolver/resolver.js +1 -1
  66. package/dist/parser/import-resolver/resolver.js.map +1 -1
  67. package/dist/realize/engines/typescript-engine.js +1 -1
  68. package/dist/realize/engines/typescript-engine.js.map +1 -1
  69. package/dist/realize/index.d.ts.map +1 -1
  70. package/dist/realize/index.js +221 -88
  71. package/dist/realize/index.js.map +1 -1
  72. package/dist/realize/library/library.js +1 -1
  73. package/dist/realize/library/library.js.map +1 -1
  74. package/dist/realize/library/resolver.d.ts.map +1 -1
  75. package/dist/realize/library/resolver.js +14 -1
  76. package/dist/realize/library/resolver.js.map +1 -1
  77. package/dist/realize/owner-emit-shared.d.ts +114 -0
  78. package/dist/realize/owner-emit-shared.d.ts.map +1 -0
  79. package/dist/realize/owner-emit-shared.js +227 -0
  80. package/dist/realize/owner-emit-shared.js.map +1 -0
  81. package/dist/realize/per-action-recovery.d.ts +74 -0
  82. package/dist/realize/per-action-recovery.d.ts.map +1 -0
  83. package/dist/realize/per-action-recovery.js +268 -0
  84. package/dist/realize/per-action-recovery.js.map +1 -0
  85. package/dist/realize/per-owner-emit.d.ts +7 -58
  86. package/dist/realize/per-owner-emit.d.ts.map +1 -1
  87. package/dist/realize/per-owner-emit.js +67 -215
  88. package/dist/realize/per-owner-emit.js.map +1 -1
  89. package/dist/realize/per-owner-runner.d.ts +24 -4
  90. package/dist/realize/per-owner-runner.d.ts.map +1 -1
  91. package/dist/realize/per-owner-runner.js +77 -19
  92. package/dist/realize/per-owner-runner.js.map +1 -1
  93. package/dist/realize/post-emit-verify/diagnostics.d.ts +107 -0
  94. package/dist/realize/post-emit-verify/diagnostics.d.ts.map +1 -0
  95. package/dist/realize/post-emit-verify/diagnostics.js +148 -0
  96. package/dist/realize/post-emit-verify/diagnostics.js.map +1 -0
  97. package/dist/realize/post-emit-verify/feedback-runner.d.ts +123 -0
  98. package/dist/realize/post-emit-verify/feedback-runner.d.ts.map +1 -0
  99. package/dist/realize/post-emit-verify/feedback-runner.js +232 -0
  100. package/dist/realize/post-emit-verify/feedback-runner.js.map +1 -0
  101. package/dist/realize/post-emit-verify/index.d.ts +19 -0
  102. package/dist/realize/post-emit-verify/index.d.ts.map +1 -0
  103. package/dist/realize/post-emit-verify/index.js +18 -0
  104. package/dist/realize/post-emit-verify/index.js.map +1 -0
  105. package/dist/realize/post-emit-verify/reemit.d.ts +82 -0
  106. package/dist/realize/post-emit-verify/reemit.d.ts.map +1 -0
  107. package/dist/realize/post-emit-verify/reemit.js +124 -0
  108. package/dist/realize/post-emit-verify/reemit.js.map +1 -0
  109. package/dist/realize/post-emit-verify/types.d.ts +187 -0
  110. package/dist/realize/post-emit-verify/types.d.ts.map +1 -0
  111. package/dist/realize/post-emit-verify/types.js +28 -0
  112. package/dist/realize/post-emit-verify/types.js.map +1 -0
  113. package/dist/realize/post-emit-verify/verifier-manifest.d.ts +29 -0
  114. package/dist/realize/post-emit-verify/verifier-manifest.d.ts.map +1 -0
  115. package/dist/realize/post-emit-verify/verifier-manifest.js +57 -0
  116. package/dist/realize/post-emit-verify/verifier-manifest.js.map +1 -0
  117. package/dist/realize/post-emit-verify/verifiers/stub-completeness.d.ts +85 -0
  118. package/dist/realize/post-emit-verify/verifiers/stub-completeness.d.ts.map +1 -0
  119. package/dist/realize/post-emit-verify/verifiers/stub-completeness.js +298 -0
  120. package/dist/realize/post-emit-verify/verifiers/stub-completeness.js.map +1 -0
  121. package/dist/realize/post-emit-verify/verifiers/tsc.d.ts +24 -0
  122. package/dist/realize/post-emit-verify/verifiers/tsc.d.ts.map +1 -0
  123. package/dist/realize/post-emit-verify/verifiers/tsc.js +148 -0
  124. package/dist/realize/post-emit-verify/verifiers/tsc.js.map +1 -0
  125. package/dist/realize/realize-context-snapshot.d.ts +70 -0
  126. package/dist/realize/realize-context-snapshot.d.ts.map +1 -0
  127. package/dist/realize/realize-context-snapshot.js +96 -0
  128. package/dist/realize/realize-context-snapshot.js.map +1 -0
  129. package/dist/realize/realize-rules.d.ts +113 -0
  130. package/dist/realize/realize-rules.d.ts.map +1 -0
  131. package/dist/realize/realize-rules.js +271 -0
  132. package/dist/realize/realize-rules.js.map +1 -0
  133. package/dist/realize/structural-validator.d.ts +36 -2
  134. package/dist/realize/structural-validator.d.ts.map +1 -1
  135. package/dist/realize/structural-validator.js +50 -7
  136. package/dist/realize/structural-validator.js.map +1 -1
  137. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.ts +11 -12
  138. package/libs/instance-factories/cli/templates/commander/command-generator.ts +2 -2
  139. package/libs/instance-factories/controllers/templates/fastify/routes-generator.ts +49 -15
  140. package/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.ts +19 -3
  141. package/libs/instance-factories/services/templates/prisma/behavior-generator.ts +62 -2
  142. package/libs/instance-factories/services/templates/prisma/controller-generator.ts +47 -20
  143. package/package.json +9 -1
@@ -34,8 +34,9 @@ import { fileURLToPath } from 'url';
34
34
  import { createRequire } from 'module';
35
35
  import yaml from 'js-yaml';
36
36
  import { loadPrompt, runPrompt as runPromptFn, assembleSystem, assembleUser, } from '../ai/prompt-runner.js';
37
- import { validateLlmOutputPreservesConventions, } from './structural-validator.js';
38
- import { extractTypescriptBlock } from './per-action-llm-emit.js';
37
+ import { validateLlmOutputPreservesConventions, DEFAULT_STRUCTURAL_DROP_THRESHOLD, } from './structural-validator.js';
38
+ import { extractTypescriptBlock, } from './owner-emit-shared.js';
39
+ import { rulesApplicableTo, forbiddenApisForRuntime, renderConstraintsForPrompt, } from './realize-rules.js';
39
40
  const require = createRequire(import.meta.url);
40
41
  /**
41
42
  * Build a {@link PerOwnerEmitFn} for use in per-owner realize emission.
@@ -93,6 +94,13 @@ export function createRealizeOwnerLlmEmit(opts = {}) {
93
94
  model: opts.model,
94
95
  timeoutMs,
95
96
  userPrefix,
97
+ // The `realize-emit` skill carries the per-owner emission
98
+ // CONSTRAINTS / GUIDANCE / EXAMPLE. claude-cli auto-loads it
99
+ // via filesystem-based skill resolution; other providers
100
+ // (anthropic, openai-compatible, stub) have no such mechanism
101
+ // — prompt-runner inlines the skill content into the system
102
+ // prompt for them. Single source of truth, two delivery paths.
103
+ skills: ['realize-emit'],
96
104
  };
97
105
  runResult = await callRunPromptWithFallback(runPrompt, runOpts, loadPromptResolved);
98
106
  }
@@ -116,74 +124,60 @@ export function createRealizeOwnerLlmEmit(opts = {}) {
116
124
  }
117
125
  return null;
118
126
  }
119
- // 5. Structural validator — DR3. A rewritten pre-baked snippet
120
- // is a LOUD failure (not a silent retry).
121
- const structural = validateLlmOutputPreservesConventions(fileContents, prebakedSnippets);
127
+ // 5. Structural validator — DR3. A MAJORITY of rewritten pre-baked
128
+ // snippets is a LOUD failure ( γ-fallback). A minority is
129
+ // tolerated and surfaced as a warning: the owner's output is
130
+ // kept and rides the normal tsc + stub-completeness gates.
131
+ // Threshold tunable via SPECVERSE_REALIZE_STRUCTURAL_DROP_THRESHOLD
132
+ // (Phase 5 first target — see structural-validator.ts header).
133
+ const dropThresholdRaw = process.env.SPECVERSE_REALIZE_STRUCTURAL_DROP_THRESHOLD;
134
+ const dropThreshold = dropThresholdRaw !== undefined && !Number.isNaN(parseFloat(dropThresholdRaw))
135
+ ? parseFloat(dropThresholdRaw)
136
+ : DEFAULT_STRUCTURAL_DROP_THRESHOLD;
137
+ const structural = validateLlmOutputPreservesConventions(fileContents, prebakedSnippets, dropThreshold);
122
138
  if (structural.ok === false) {
123
139
  throw new Error(`[realize-owner] structural-preservation failed for ${request.ownerName}:\n${structural.reason}`);
124
140
  }
125
- // 5b. Runtime-API rejection. The realize-owner prompt declares
126
- // the TARGET RUNTIME up-front (e.g. "Node.js (backend)").
127
- // APIs that don't exist in that runtime are forbidden. The
128
- // LLM treats this as a soft constraint in practice and
129
- // occasionally emits browser APIs anyway when the spec's
130
- // step text strongly references them (e.g. SaveGameService
131
- // in idle-meta — extracted from browser code, spec mentions
132
- // localStorage repeatedly). This validator hard-enforces:
133
- // scan the body for forbidden symbols; on violation,
134
- // surgical-retry once with explicit correction, then fall
135
- // through to γ stub if the LLM still emits a violation.
136
- // Runtime-specific forbidden symbols come from
137
- // `forbiddenApisForRuntime(targetRuntime)`.
138
- const runtimeViolations = checkForbiddenRuntimeApis(fileContents, request.targetRuntime);
139
- if (runtimeViolations.length > 0) {
140
- if (process.env.SPECVERSE_VERBOSE) {
141
- const head = runtimeViolations.slice(0, 3).join(', ');
142
- console.error(` ✗ per-owner LLM emit used forbidden runtime APIs for ` +
143
- `${request.ownerName} (target=${request.targetRuntime ?? 'Node.js'}): ${head}`);
144
- }
145
- if (attempt < maxAttempts - 1) {
146
- // Refire with strong correction.
147
- lastParseError = buildRuntimeViolationCorrectionMessage(runtimeViolations, request.targetRuntime);
148
- continue;
149
- }
150
- // Out of retries — fall through; caller emits γ stub.
151
- return null;
141
+ if (structural.warnings && structural.warnings.length > 0 && process.env.SPECVERSE_VERBOSE) {
142
+ const steps = structural.warnings.map((w) => w.stepNum).join(', ');
143
+ console.error(` ⚠ per-owner LLM emit [${request.ownerName}] tolerated ${structural.warnings.length} ` +
144
+ `dropped pre-baked snippet(s) under threshold (steps: ${steps})`);
152
145
  }
153
- // 5c-pre. Missing `.js` extensions on relative imports. NodeNext
154
- // module resolution requires explicit `.js` (or `.ts`/`.mts`/
155
- // `.json`) on every relative path. The LLM treats rule 1 as
156
- // soft; this validator hard-enforces.
157
- const extViolations = checkMissingJsExtensions(fileContents);
158
- if (extViolations.length > 0) {
159
- if (process.env.SPECVERSE_VERBOSE) {
160
- const head = extViolations.slice(0, 3).join(', ');
161
- console.error(` ✗ per-owner LLM emit missing .js on relative imports for ` +
162
- `${request.ownerName}: ${head}`);
163
- }
164
- if (attempt < maxAttempts - 1) {
165
- lastParseError = buildExtensionCorrectionMessage(extViolations);
146
+ // 5b. RULES manifest pipeline. Each rule in `realize-rules.ts`
147
+ // declares its own detect() + correction() + ordering. We
148
+ // iterate in pipeline order; first violating rule wins (one
149
+ // correction per surgical-retry pass). On exhausted retries
150
+ // we return null and the caller emits the γ stub.
151
+ //
152
+ // Adding a new constraint is one place: append to RULES.
153
+ // See `2026-05-12-VALIDATOR-MANIFEST-AND-TEST-CORPUS.md`.
154
+ const ruleCtx = {
155
+ ownerName: request.ownerName,
156
+ targetRuntime: request.targetRuntime,
157
+ };
158
+ let ruleViolated = false;
159
+ let ruleOutOfRetries = false;
160
+ for (const rule of rulesApplicableTo(ruleCtx)) {
161
+ const violations = rule.detect(fileContents, ruleCtx);
162
+ if (violations.length === 0)
166
163
  continue;
167
- }
168
- return null;
169
- }
170
- // 5c. Sibling-.ai import rejection. Prompt rule 2 forbids
171
- // importing `./<X>.ai` from another .ai.ts file — those
172
- // modules don't aggregate-export at the path the LLM
173
- // guesses. Same hard-enforcement pattern as 5b.
174
- const siblingAiViolations = checkSiblingAiImports(fileContents);
175
- if (siblingAiViolations.length > 0) {
176
164
  if (process.env.SPECVERSE_VERBOSE) {
177
- const head = siblingAiViolations.slice(0, 3).join(', ');
178
- console.error(` ✗ per-owner LLM emit imported sibling .ai modules for ` +
179
- `${request.ownerName}: ${head}`);
165
+ const head = violations.slice(0, 3).join(', ');
166
+ console.error(` ✗ per-owner LLM emit [${rule.id}] for ${request.ownerName}: ${head}`);
180
167
  }
181
168
  if (attempt < maxAttempts - 1) {
182
- lastParseError = buildSiblingAiCorrectionMessage(siblingAiViolations);
183
- continue;
169
+ lastParseError = rule.correction(violations, ruleCtx);
170
+ ruleViolated = true;
184
171
  }
185
- return null;
172
+ else {
173
+ ruleOutOfRetries = true;
174
+ }
175
+ break;
186
176
  }
177
+ if (ruleOutOfRetries)
178
+ return null;
179
+ if (ruleViolated)
180
+ continue;
187
181
  // 6. esbuild parse check — surgical retry once on parse failure.
188
182
  const parseError = await parseCheck(fileContents);
189
183
  if (parseError === null) {
@@ -337,6 +331,10 @@ function buildPromptValues(request) {
337
331
  availableSpecSurface: request.availableSpecSurface ?? '(no other services / controllers in this spec)',
338
332
  targetRuntime: request.targetRuntime ?? 'Node.js (backend)',
339
333
  forbiddenRuntimeApis: describeForbiddenApis(request.targetRuntime),
334
+ constraints: renderConstraintsForPrompt({
335
+ ownerName: request.ownerName,
336
+ targetRuntime: request.targetRuntime,
337
+ }),
340
338
  processContext: request.processContext ?? '(no related processes)',
341
339
  };
342
340
  }
@@ -346,8 +344,11 @@ function yamlDumpOwner(ownerSpec, ownerName) {
346
344
  return yaml.dump({ [ownerName]: ownerSpec }, { lineWidth: 100, noRefs: true });
347
345
  }
348
346
  /** Build the per-action scaffolding block. One section per action,
349
- * listing its steps with [PRE-BAKED] / [WRITE] markers. */
350
- function buildPerActionScaffolding(actions) {
347
+ * listing its steps with [PRE-BAKED] / [WRITE] markers. Exported for
348
+ * reuse by the realize-context-snapshot module (Phase 3 of
349
+ * 2026-05-13-VERIFIER-DIAGNOSTIC-TREATMENT-SPLIT) — the reemit prompt
350
+ * embeds the same scaffolding the original per-owner prompt used. */
351
+ export function buildPerActionScaffolding(actions) {
351
352
  if (actions.length === 0)
352
353
  return '(no actions on this owner)';
353
354
  const sections = [];
@@ -413,83 +414,12 @@ function buildSurgicalRetryPrefix(parseError, ownerName) {
413
414
  '',
414
415
  ].join('\n');
415
416
  }
416
- // ─── Runtime-API rejection (TODO #60 follow-up) ──────────────────────
417
- /**
418
- * Map a target-runtime label to its forbidden-API symbol set.
419
- *
420
- * Runtime targets are stated at the top of the realize-owner prompt
421
- * (`targetRuntime` slot) so the LLM knows up-front which APIs are off
422
- * limits. This function returns the same set the validator enforces.
423
- * Targets supported:
424
- * - "Node.js (backend)" (default) — browser globals are forbidden
425
- * - "Browser (DOM)" — Node builtins are forbidden
426
- * - Unknown / unset — treat as Node.js backend (the realize default)
427
- *
428
- * Returning an empty array means "no runtime-API rejection" — the
429
- * caller skips this check entirely (test fixtures use this).
430
- */
431
- export function forbiddenApisForRuntime(targetRuntime) {
432
- const t = (targetRuntime ?? 'Node.js (backend)').toLowerCase();
433
- if (t.includes('browser') && !t.includes('backend')) {
434
- // Browser target: forbid Node builtins.
435
- return ['process.env', 'require(', 'Buffer', '__dirname', '__filename', 'node:'];
436
- }
437
- // Default — Node.js backend.
438
- return [
439
- 'localStorage',
440
- 'sessionStorage',
441
- 'window.',
442
- 'document.',
443
- 'navigator.',
444
- 'location.',
445
- 'history.',
446
- 'alert(',
447
- 'prompt(',
448
- 'confirm(',
449
- ];
450
- }
451
- /**
452
- * Scan the LLM-emitted file contents for forbidden runtime symbols.
453
- * Returns the list of distinct violations found (truncated to avoid
454
- * runaway output). Empty array = no violations.
455
- *
456
- * The scan is intentionally simple: substring presence test. False
457
- * positives are rare (these symbols don't legitimately appear in
458
- * backend code or vice versa) and the consequence of a false positive
459
- * is one surgical retry — cheap.
460
- */
461
- export function checkForbiddenRuntimeApis(fileContents, targetRuntime) {
462
- const forbidden = forbiddenApisForRuntime(targetRuntime);
463
- const violations = new Set();
464
- for (const symbol of forbidden) {
465
- if (fileContents.includes(symbol))
466
- violations.add(symbol);
467
- }
468
- return Array.from(violations).slice(0, 8);
469
- }
470
- /**
471
- * Build the user-prefix string for the surgical-retry call after a
472
- * runtime-API violation. Frames the violation concretely so the LLM
473
- * understands exactly which symbols to remove.
474
- */
475
- export function buildRuntimeViolationCorrectionMessage(violations, targetRuntime) {
476
- const runtime = targetRuntime ?? 'Node.js (backend)';
477
- return [
478
- `Your previous emission used runtime APIs that are NOT available in ${runtime}:`,
479
- '',
480
- ...violations.map((v) => ` - ${v}`),
481
- '',
482
- `Re-emit the entire file WITHOUT those symbols. If a specific action's`,
483
- `step text references browser-only behaviour (e.g. "save to localStorage"),`,
484
- `use the γ-stub form for THAT action explaining the spec/runtime mismatch,`,
485
- `not the browser API. Other actions in the file should still be implemented`,
486
- `fully. Preserve all [PRE-BAKED] snippets verbatim.`,
487
- '',
488
- ].join('\n');
489
- }
417
+ // ─── Prompt rendering helpers ────────────────────────────────────────
490
418
  /**
491
419
  * Human-readable description of the forbidden-API set for a given
492
- * runtime, suitable for the prompt's TARGET RUNTIME section.
420
+ * runtime, suitable for the prompt's TARGET RUNTIME section. Consults
421
+ * the same source-of-truth (`forbiddenApisForRuntime` in realize-rules)
422
+ * that the `no-forbidden-runtime-apis` validator uses.
493
423
  */
494
424
  function describeForbiddenApis(targetRuntime) {
495
425
  const list = forbiddenApisForRuntime(targetRuntime);
@@ -497,82 +427,4 @@ function describeForbiddenApis(targetRuntime) {
497
427
  return '(none — all APIs available)';
498
428
  return list.map((s) => ` - ${s}`).join('\n');
499
429
  }
500
- /**
501
- * Detect sibling-.ai import violations in the LLM-emitted file.
502
- * Each .ai.ts file is supposed to be self-contained; importing
503
- * another `<Sibling>.ai` produces TS2307 because realize emits
504
- * per-action exports only, not aggregate types. The prompt's rule
505
- * 2 forbids this; this validator hard-enforces it the same way
506
- * `checkForbiddenRuntimeApis` enforces rule 3.
507
- *
508
- * Returns the list of distinct violating import specifiers
509
- * (e.g. `'./GameStateService.ai'`). Empty array = no violations.
510
- */
511
- export function checkSiblingAiImports(fileContents) {
512
- const violations = new Set();
513
- // Match `from '<path>.ai'` (with or without .js suffix) on any line.
514
- const re = /from\s+['"](\.\.?\/[^'"]+\.ai)(?:\.js)?['"]/g;
515
- let m;
516
- while ((m = re.exec(fileContents)) !== null) {
517
- violations.add(m[1]);
518
- }
519
- return Array.from(violations).slice(0, 8);
520
- }
521
- /**
522
- * Detect relative imports that are missing a `.js` extension.
523
- * NodeNext module resolution requires explicit extensions for relative
524
- * specifiers (`./foo`, `../bar`). Bare-package imports (`@prisma/client`)
525
- * don't need extensions; only relative paths.
526
- *
527
- * Returns the list of offending specifiers (e.g. `'../services/Auth'`).
528
- */
529
- export function checkMissingJsExtensions(fileContents) {
530
- const violations = new Set();
531
- // Match `from '<rel-path>'` where the path is relative and lacks
532
- // an extension matching .js / .jsx / .ts / .tsx / .mjs / .mts / .json.
533
- const re = /from\s+['"](\.\.?\/[^'"]*?)['"]/g;
534
- let m;
535
- while ((m = re.exec(fileContents)) !== null) {
536
- const specifier = m[1];
537
- if (!/\.(m?[jt]sx?|json)$/.test(specifier)) {
538
- violations.add(specifier);
539
- }
540
- }
541
- return Array.from(violations).slice(0, 8);
542
- }
543
- /** Surgical-retry correction message for missing-.js violations. */
544
- export function buildExtensionCorrectionMessage(violations) {
545
- return [
546
- `Your previous emission used relative imports WITHOUT the required`,
547
- `\`.js\` extension. NodeNext module resolution (this project's setting)`,
548
- `requires explicit extensions on relative paths:`,
549
- '',
550
- ...violations.map((v) => ` - '${v}' → '${v}.js'`),
551
- '',
552
- `Re-emit the entire file with \`.js\` appended to every relative-path`,
553
- `import. Bare-package imports (e.g. '@prisma/client') do NOT need an`,
554
- `extension — only relative paths starting with './' or '../'. Preserve`,
555
- `all [PRE-BAKED] snippets verbatim.`,
556
- '',
557
- ].join('\n');
558
- }
559
- /** Surgical-retry correction message for sibling-.ai violations. */
560
- export function buildSiblingAiCorrectionMessage(violations) {
561
- return [
562
- `Your previous emission imported sibling .ai.ts modules, which is forbidden:`,
563
- '',
564
- ...violations.map((v) => ` - ${v}`),
565
- '',
566
- `Each <Owner>.ai.ts is self-contained — those modules export per-action`,
567
- `functions, NOT the entity types or service instances you can use here.`,
568
- '',
569
- `Re-emit the entire file WITHOUT importing any sibling .ai modules.`,
570
- `For cross-service calls, import from the service / controller class file`,
571
- `instead (e.g. \`import { AuthService } from '../services/AuthService.js'\`).`,
572
- `If a step requires logic that lives in a sibling .ai, emit the γ-stub for`,
573
- `THAT specific action explaining the cross-owner gap. Preserve all`,
574
- `[PRE-BAKED] snippets verbatim.`,
575
- '',
576
- ].join('\n');
577
- }
578
430
  //# sourceMappingURL=per-owner-emit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"per-owner-emit.js","sourceRoot":"","sources":["../../src/realize/per-owner-emit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"per-owner-emit.js","sourceRoot":"","sources":["../../src/realize/per-owner-emit.ts"],"names":[],"mappings":"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"}
@@ -19,9 +19,9 @@
19
19
  * action) → no consumer-interface change. The downstream controller
20
20
  * still does `import * as aiBehaviors from '../behaviors/X.ai.js'`.
21
21
  */
22
- import { buildAvailableClientsByOwner } from './per-action-runner.js';
23
- import type { MatcherFn, SharedConvention } from './per-action-emitter.js';
22
+ import { buildAvailableClientsByOwner, type MatcherFn, type SharedConvention } from './owner-emit-shared.js';
24
23
  import type { PerOwnerEmitFn } from './per-owner-emit.js';
24
+ import type { PerActionRecoveryFn } from './per-action-recovery.js';
25
25
  /** Options for {@link runPerOwnerEmission}. */
26
26
  export interface RunPerOwnerEmissionOptions {
27
27
  /** Full inferred spec. */
@@ -35,6 +35,22 @@ export interface RunPerOwnerEmissionOptions {
35
35
  /** Per-owner LLM emit hook. Required — the whole point of this
36
36
  * runner is to drive it once per owner. */
37
37
  perOwnerEmit: PerOwnerEmitFn;
38
+ /** Tier 2 recovery hook (Phase 5a of
39
+ * `2026-05-14-PER-ACTION-RECOVERY-TIER.md`). When `perOwnerEmit`
40
+ * fails for an owner, this is tried before the γ-stub placeholder:
41
+ * it re-emits the owner action-by-action with full owner context.
42
+ * Optional — when absent, a Tier-1 failure goes straight to Tier 3
43
+ * (the pre-5a behaviour). Disabled at runtime via
44
+ * `SPECVERSE_REALIZE_NO_RECOVERY_TIER=1`; skipped for owners with
45
+ * more actions than `SPECVERSE_REALIZE_RECOVERY_MAX_ACTIONS`
46
+ * (default 40 — a guard against truly pathological owners, not a
47
+ * routine gate. The 5a trial showed the original cap of 12 excluded
48
+ * `MongoDBAdapter` (15 actions) — exactly the kind of large owner
49
+ * that fails Tier 1 and most needs decomposition. A big owner that
50
+ * already failed whole-owner emit is MORE worth decomposing, not
51
+ * less; the context-resend cost is bounded because it's only the
52
+ * hard tail). */
53
+ perActionRecovery?: PerActionRecoveryFn;
38
54
  /** Pre-built availableClients map (from buildAvailableClientsByOwner). */
39
55
  availableClientsByOwner?: Map<string, string>;
40
56
  /** Manifest capability mappings text (NEW vs per-action runner).
@@ -61,9 +77,13 @@ export interface RunPerOwnerEmissionResult {
61
77
  ownerCount: number;
62
78
  /** Number of actions across all owners. */
63
79
  actionCount: number;
64
- /** Owners whose LLM emit produced a usable file. */
80
+ /** Owners whose emit produced a usable file (Tier 1 whole-owner
81
+ * emit OR Tier 2 per-action recovery — both count as LLM-emitted). */
65
82
  ownersEmittedByLLM: number;
66
- /** Owners whose LLM emit failed; runner fell back to a
83
+ /** Owners that produced a usable file specifically via the Tier 2
84
+ * per-action recovery path (subset of `ownersEmittedByLLM`). */
85
+ ownersRecoveredByTier2: number;
86
+ /** Owners whose emit failed at every tier; runner fell back to a
67
87
  * deterministic placeholder file. */
68
88
  ownersFellBack: number;
69
89
  };
@@ -1 +1 @@
1
- {"version":3,"file":"per-owner-runner.d.ts","sourceRoot":"","sources":["../../src/realize/per-owner-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAEL,4BAA4B,EAE7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAGV,SAAS,EACT,gBAAgB,EAGjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,qBAAqB,CAAC;AAE7B,+CAA+C;AAC/C,MAAM,WAAW,0BAA0B;IACzC,0BAA0B;IAC1B,IAAI,EAAE,GAAG,CAAC;IACV,wFAAwF;IACxF,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wCAAwC;IACxC,WAAW,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC9C;gDAC4C;IAC5C,YAAY,EAAE,cAAc,CAAC;IAC7B,0EAA0E;IAC1E,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C;;gFAE4E;IAC5E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mDAAmD;IACnD,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;gCAC4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,6CAA6C;AAC7C,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,2DAA2D;IAC3D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0BAA0B;IAC1B,MAAM,EAAE;QACN,+BAA+B;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,2CAA2C;QAC3C,WAAW,EAAE,MAAM,CAAC;QACpB,oDAAoD;QACpD,kBAAkB,EAAE,MAAM,CAAC;QAC3B;8CACsC;QACtC,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB;8DAC0D;IAC1D,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,yBAAyB,CAAC,CAkHpC;AAgLD;;;;;;;;;;GAUG;AACH,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAYtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAuCtF;AA+DD,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
1
+ {"version":3,"file":"per-owner-runner.d.ts","sourceRoot":"","sources":["../../src/realize/per-owner-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAEL,4BAA4B,EAI5B,KAAK,SAAS,EACd,KAAK,gBAAgB,EAGtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,+CAA+C;AAC/C,MAAM,WAAW,0BAA0B;IACzC,0BAA0B;IAC1B,IAAI,EAAE,GAAG,CAAC;IACV,wFAAwF;IACxF,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wCAAwC;IACxC,WAAW,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC9C;gDAC4C;IAC5C,YAAY,EAAE,cAAc,CAAC;IAC7B;;;;;;;;;;;;;;sBAckB;IAClB,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;IACxC,0EAA0E;IAC1E,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C;;gFAE4E;IAC5E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mDAAmD;IACnD,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;gCAC4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,6CAA6C;AAC7C,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,2DAA2D;IAC3D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0BAA0B;IAC1B,MAAM,EAAE;QACN,+BAA+B;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,2CAA2C;QAC3C,WAAW,EAAE,MAAM,CAAC;QACpB;+EACuE;QACvE,kBAAkB,EAAE,MAAM,CAAC;QAC3B;yEACiE;QACjE,sBAAsB,EAAE,MAAM,CAAC;QAC/B;8CACsC;QACtC,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB;8DAC0D;IAC1D,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,yBAAyB,CAAC,CAkLpC;AAgLD;;;;;;;;;;GAUG;AACH,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAYtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAuCtF;AA+DD,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
@@ -21,7 +21,9 @@
21
21
  */
22
22
  import { existsSync, mkdirSync, writeFileSync } from 'fs';
23
23
  import { dirname, join } from 'path';
24
- import { collectActions, buildAvailableClientsByOwner, } from './per-action-runner.js';
24
+ import { collectActions, buildAvailableClientsByOwner, } from './owner-emit-shared.js';
25
+ import { buildPerActionScaffolding } from './per-owner-emit.js';
26
+ import { writeContextSnapshot } from './realize-context-snapshot.js';
25
27
  /**
26
28
  * Run per-owner LLM emission across every controller / service the
27
29
  * spec declares. For each owner:
@@ -40,8 +42,16 @@ export async function runPerOwnerEmission(opts) {
40
42
  ownerCount: 0,
41
43
  actionCount: 0,
42
44
  ownersEmittedByLLM: 0,
45
+ ownersRecoveredByTier2: 0,
43
46
  ownersFellBack: 0,
44
47
  };
48
+ // Tier 2 (per-action recovery) runtime gates. Read once.
49
+ const recoveryTierEnabled = opts.perActionRecovery !== undefined &&
50
+ process.env.SPECVERSE_REALIZE_NO_RECOVERY_TIER !== '1';
51
+ const recoveryMaxActionsRaw = process.env.SPECVERSE_REALIZE_RECOVERY_MAX_ACTIONS;
52
+ const recoveryMaxActions = recoveryMaxActionsRaw !== undefined && !Number.isNaN(parseInt(recoveryMaxActionsRaw, 10))
53
+ ? parseInt(recoveryMaxActionsRaw, 10)
54
+ : 40;
45
55
  // Matcher must be supplied by the caller — the libs/ step-matching
46
56
  // module sits OUTSIDE engines/src/'s tsconfig rootDir and can't be
47
57
  // statically imported here. realize/index.ts already resolves the
@@ -81,25 +91,28 @@ export async function runPerOwnerEmission(opts) {
81
91
  // yet got skipped. Each owner's success is independent — catch
82
92
  // here, fall back to the deterministic placeholder file, log to
83
93
  // stderr (gated by SPECVERSE_VERBOSE), and keep walking.
94
+ // Shared request object — Tier 1 (whole-owner) and Tier 2
95
+ // (per-action recovery) both take the SAME owner context. Per-owner
96
+ // emit ALWAYS targets the backend tree
97
+ // (`backend/src/behaviors/<Owner>.ai.ts`); stating the runtime
98
+ // upfront makes the constraint technology-explicit.
99
+ const emitRequest = {
100
+ ownerName,
101
+ ownerKind: actions[0]?.ownerKind ?? 'model',
102
+ ownerSpec,
103
+ actions: collectedOwnerActions,
104
+ availableClients: opts.availableClientsByOwner?.get(ownerName),
105
+ availableCapabilities: opts.availableCapabilities,
106
+ availableSpecSurface: buildAvailableSpecSurface(opts.spec, ownerName),
107
+ targetRuntime: 'Node.js (backend)',
108
+ processContext: opts.processContextByOwner?.get(ownerName),
109
+ };
110
+ // Tier 1 — whole-owner emit. Isolate failures so a single owner's
111
+ // throw (e.g. structural-validator rejection) doesn't kill emission
112
+ // for the other owners — catch here, fall through to Tier 2/3.
84
113
  let fileContents = null;
85
114
  try {
86
- fileContents = await opts.perOwnerEmit({
87
- ownerName,
88
- ownerKind: actions[0]?.ownerKind ?? 'model',
89
- ownerSpec,
90
- actions: collectedOwnerActions,
91
- availableClients: opts.availableClientsByOwner?.get(ownerName),
92
- availableCapabilities: opts.availableCapabilities,
93
- availableSpecSurface: buildAvailableSpecSurface(opts.spec, ownerName),
94
- // Per-owner emit ALWAYS targets the backend tree
95
- // (`backend/src/behaviors/<Owner>.ai.ts`). Stating the runtime
96
- // upfront makes the constraint technology-explicit instead of
97
- // burying "no browser APIs" inside import-rule prose. Future:
98
- // derive from manifest.capabilityMappings → factory.technology
99
- // when a non-Node target ever ships (e.g. edge runtime).
100
- targetRuntime: 'Node.js (backend)',
101
- processContext: opts.processContextByOwner?.get(ownerName),
102
- });
115
+ fileContents = await opts.perOwnerEmit(emitRequest);
103
116
  }
104
117
  catch (e) {
105
118
  if (process.env.SPECVERSE_VERBOSE) {
@@ -110,6 +123,29 @@ export async function runPerOwnerEmission(opts) {
110
123
  }
111
124
  fileContents = null;
112
125
  }
126
+ // Tier 2 — per-action recovery. When whole-owner emit failed, retry
127
+ // the owner action-by-action with full owner context before
128
+ // dropping to a γ-stub. Gated by env + an action-count cap.
129
+ let recoveredByTier2 = false;
130
+ if (fileContents === null &&
131
+ recoveryTierEnabled &&
132
+ opts.perActionRecovery &&
133
+ actions.length <= recoveryMaxActions) {
134
+ try {
135
+ const recovered = await opts.perActionRecovery(emitRequest);
136
+ if (recovered !== null) {
137
+ fileContents = recovered;
138
+ recoveredByTier2 = true;
139
+ }
140
+ }
141
+ catch (e) {
142
+ if (process.env.SPECVERSE_VERBOSE) {
143
+ const head = String((e && e.message) || e).slice(0, 240).replace(/\s+/g, ' ');
144
+ console.error(` ✗ per-action recovery threw for ${ownerName}: ${head}`);
145
+ }
146
+ }
147
+ }
148
+ // Tier 3 — deterministic γ-stub placeholder file.
113
149
  const finalContents = fileContents ?? renderFallbackPlaceholderFile(ownerName, actions);
114
150
  const llmEmitted = fileContents !== null;
115
151
  owners.push({
@@ -124,13 +160,35 @@ export async function runPerOwnerEmission(opts) {
124
160
  totals.ownersEmittedByLLM += 1;
125
161
  else
126
162
  totals.ownersFellBack += 1;
163
+ if (recoveredByTier2)
164
+ totals.ownersRecoveredByTier2 += 1;
127
165
  if (!opts.dryRun) {
128
166
  const filePath = writeOwnerAiFile(opts.outputDir, ownerName, finalContents);
129
167
  filesWritten.push(filePath);
130
168
  if (!opts.silent) {
131
- const tag = llmEmitted ? 'LLM' : 'placeholder';
169
+ const tag = recoveredByTier2
170
+ ? 'per-action recovery'
171
+ : llmEmitted
172
+ ? 'LLM'
173
+ : 'placeholder';
132
174
  console.log(` ✅ Per-owner AI behaviors: ${ownerName}.ai.ts (${actions.length} action${actions.length === 1 ? '' : 's'}, ${tag})`);
133
175
  }
176
+ // Phase 3 of 2026-05-13-VERIFIER-DIAGNOSTIC-TREATMENT-SPLIT:
177
+ // snapshot the per-owner realize context so the post-emit
178
+ // feedback runner's reemit prompt has the same TARGET RUNTIME /
179
+ // [PRE-BAKED] / cross-service / capabilities the original
180
+ // per-owner emit had. Best-effort — failure here doesn't block
181
+ // realize.
182
+ writeContextSnapshot(opts.outputDir, {
183
+ ownerName,
184
+ targetRuntime: 'Node.js (backend)',
185
+ perActionScaffolding: buildPerActionScaffolding(collectedOwnerActions),
186
+ availableSpecSurface: buildAvailableSpecSurface(opts.spec, ownerName) ||
187
+ '(no other services / controllers in this spec)',
188
+ availableCapabilities: opts.availableCapabilities ??
189
+ '(none — only `input: any` is available)',
190
+ availableClients: opts.availableClientsByOwner?.get(ownerName) ?? '(none)',
191
+ });
134
192
  }
135
193
  }
136
194
  return { owners, filesWritten, totals };