@specverse/engines 6.53.1 → 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 (55) hide show
  1. package/dist/libs/instance-factories/controllers/templates/fastify/routes-generator.js +29 -10
  2. package/dist/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.js +10 -9
  3. package/dist/libs/instance-factories/services/templates/prisma/controller-generator.js +1 -1
  4. package/dist/realize/index.d.ts.map +1 -1
  5. package/dist/realize/index.js +91 -10
  6. package/dist/realize/index.js.map +1 -1
  7. package/dist/realize/per-action-recovery.d.ts +74 -0
  8. package/dist/realize/per-action-recovery.d.ts.map +1 -0
  9. package/dist/realize/per-action-recovery.js +268 -0
  10. package/dist/realize/per-action-recovery.js.map +1 -0
  11. package/dist/realize/per-owner-emit.d.ts +6 -0
  12. package/dist/realize/per-owner-emit.d.ts.map +1 -1
  13. package/dist/realize/per-owner-emit.js +22 -6
  14. package/dist/realize/per-owner-emit.js.map +1 -1
  15. package/dist/realize/per-owner-runner.d.ts +23 -2
  16. package/dist/realize/per-owner-runner.d.ts.map +1 -1
  17. package/dist/realize/per-owner-runner.js +76 -18
  18. package/dist/realize/per-owner-runner.js.map +1 -1
  19. package/dist/realize/post-emit-verify/diagnostics.d.ts +107 -0
  20. package/dist/realize/post-emit-verify/diagnostics.d.ts.map +1 -0
  21. package/dist/realize/post-emit-verify/diagnostics.js +148 -0
  22. package/dist/realize/post-emit-verify/diagnostics.js.map +1 -0
  23. package/dist/realize/post-emit-verify/feedback-runner.d.ts +40 -1
  24. package/dist/realize/post-emit-verify/feedback-runner.d.ts.map +1 -1
  25. package/dist/realize/post-emit-verify/feedback-runner.js +61 -6
  26. package/dist/realize/post-emit-verify/feedback-runner.js.map +1 -1
  27. package/dist/realize/post-emit-verify/index.d.ts +4 -2
  28. package/dist/realize/post-emit-verify/index.d.ts.map +1 -1
  29. package/dist/realize/post-emit-verify/index.js +3 -1
  30. package/dist/realize/post-emit-verify/index.js.map +1 -1
  31. package/dist/realize/post-emit-verify/reemit.d.ts +22 -1
  32. package/dist/realize/post-emit-verify/reemit.d.ts.map +1 -1
  33. package/dist/realize/post-emit-verify/reemit.js +20 -18
  34. package/dist/realize/post-emit-verify/reemit.js.map +1 -1
  35. package/dist/realize/post-emit-verify/types.d.ts +49 -0
  36. package/dist/realize/post-emit-verify/types.d.ts.map +1 -1
  37. package/dist/realize/post-emit-verify/verifier-manifest.d.ts.map +1 -1
  38. package/dist/realize/post-emit-verify/verifier-manifest.js +2 -0
  39. package/dist/realize/post-emit-verify/verifier-manifest.js.map +1 -1
  40. package/dist/realize/post-emit-verify/verifiers/stub-completeness.d.ts +85 -0
  41. package/dist/realize/post-emit-verify/verifiers/stub-completeness.d.ts.map +1 -0
  42. package/dist/realize/post-emit-verify/verifiers/stub-completeness.js +298 -0
  43. package/dist/realize/post-emit-verify/verifiers/stub-completeness.js.map +1 -0
  44. package/dist/realize/realize-context-snapshot.d.ts +70 -0
  45. package/dist/realize/realize-context-snapshot.d.ts.map +1 -0
  46. package/dist/realize/realize-context-snapshot.js +96 -0
  47. package/dist/realize/realize-context-snapshot.js.map +1 -0
  48. package/dist/realize/structural-validator.d.ts +36 -2
  49. package/dist/realize/structural-validator.d.ts.map +1 -1
  50. package/dist/realize/structural-validator.js +50 -7
  51. package/dist/realize/structural-validator.js.map +1 -1
  52. package/libs/instance-factories/controllers/templates/fastify/routes-generator.ts +49 -15
  53. package/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.ts +19 -3
  54. package/libs/instance-factories/services/templates/prisma/controller-generator.ts +6 -1
  55. package/package.json +1 -1
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Per-action recovery tier — Phase 5a of
3
+ * `2026-05-14-PER-ACTION-RECOVERY-TIER.md`.
4
+ *
5
+ * The realize per-owner runner has three tiers:
6
+ *
7
+ * Tier 1 — whole-owner emit (`per-owner-emit.ts`). One LLM call emits
8
+ * the entire `<Owner>.ai.ts`. Works for the easy majority.
9
+ * Tier 2 — THIS MODULE. When Tier 1 fails (structural-preservation
10
+ * reject, parse failure, LLM decline), instead of dropping
11
+ * straight to a γ-stub file, retry the owner ACTION-BY-ACTION
12
+ * — but with the FULL owner context in every call.
13
+ * Tier 3 — γ-stub placeholder file (`renderFallbackPlaceholderFile`
14
+ * in `per-owner-runner.ts`). Only reached if Tier 2 produced
15
+ * ZERO real bodies.
16
+ *
17
+ * "Wide context, narrow output" — the distinction from the abandoned
18
+ * Realize L3 per-action emit: L3 gave the LLM NARROW context (one
19
+ * action's steps, no class shell, no capabilities) and it starved
20
+ * (29/94 actions came back as throw-stubs). This keeps the FULL owner
21
+ * context — every action's [PRE-BAKED] scaffolding, the target runtime,
22
+ * manifest capabilities, V2 clients, cross-service operation surface —
23
+ * in every per-action call, and only narrows the OUTPUT to one function
24
+ * body. The reasoning load per call drops (the model holds one function
25
+ * in its head, not all of them) without re-introducing context
26
+ * starvation.
27
+ *
28
+ * Motivation (Phase 3 trial, 2026-05-14): the quant-fidelity gap between
29
+ * Ollama (Q4 GGUF) and MarrBox (FP8) — SAME model, Qwen3-Coder-30B-A3B
30
+ * — localized to the single hardest owner (`ReactiveStateEngine`, 7
31
+ * interrelated functions). The Mac Mini's 24GB RAM structurally pins it
32
+ * at ~Q4 (Q6/Q8 don't fit), so "run a better quant" is closed. This
33
+ * makes the TASK easier instead.
34
+ *
35
+ * Phase 5a scope: declaration-order emission, full owner SCAFFOLDING
36
+ * context per call. Phase 5b adds dependency-ordered emission +
37
+ * already-emitted siblings shown as concrete code. Phase 5c adds the
38
+ * action-count cap telemetry.
39
+ */
40
+ import { generateText } from 'ai';
41
+ import { assembleSystemWithSkills } from '../ai/prompt-runner.js';
42
+ import { resolveProviderId } from '../ai/model-resolver.js';
43
+ import { buildPerActionScaffolding, } from './per-owner-emit.js';
44
+ import { validateLlmOutputPreservesConventions, DEFAULT_STRUCTURAL_DROP_THRESHOLD, } from './structural-validator.js';
45
+ import { extractTypescriptBlock } from './owner-emit-shared.js';
46
+ /** Reserved words that can't appear as `export async function <name>`.
47
+ * Mirrors `per-owner-runner.ts`'s TS_RESERVED_WORDS — kept local to
48
+ * avoid a cross-module dependency for a 5a-scoped concern; a future
49
+ * cleanup could hoist both to `owner-emit-shared.ts`. */
50
+ const TS_RESERVED_WORDS = new Set([
51
+ 'delete', 'class', 'function', 'return', 'void', 'typeof',
52
+ 'instanceof', 'new', 'this', 'throw', 'try', 'catch', 'finally',
53
+ 'if', 'else', 'for', 'while', 'do', 'switch', 'case', 'break',
54
+ 'continue', 'default', 'var', 'let', 'const', 'in', 'of',
55
+ 'async', 'await', 'yield', 'export', 'import', 'from',
56
+ 'true', 'false', 'null', 'undefined', 'static', 'public',
57
+ 'private', 'protected', 'interface', 'type', 'enum', 'extends',
58
+ 'implements', 'super',
59
+ ]);
60
+ /**
61
+ * Render a γ-stub for a single action whose per-action recovery emit
62
+ * failed. The error string says "per-action recovery fell back" — the
63
+ * stub-completeness verifier's GAMMA_FALLBACK_RE matches this (STUB001,
64
+ * auto-reemit-eligible), distinct from an LLM's own "not implemented"
65
+ * throw (STUB002, surface-spec-gap). Reserved-word action names get the
66
+ * re-export-rename treatment so the file still parses.
67
+ */
68
+ function renderActionGammaStub(actionName) {
69
+ const body = ` throw new Error("${actionName}: not implemented (per-action recovery fell back)");`;
70
+ if (TS_RESERVED_WORDS.has(actionName)) {
71
+ const safe = `${actionName}_`;
72
+ return (`/** Placeholder — per-action recovery failed for ${actionName}. */\n` +
73
+ `async function ${safe}(_input: any): Promise<any> {\n${body}\n}\n` +
74
+ `export { ${safe} as ${actionName} };`);
75
+ }
76
+ return (`/** Placeholder — per-action recovery failed for ${actionName}. */\n` +
77
+ `export async function ${actionName}(_input: any): Promise<any> {\n${body}\n}`);
78
+ }
79
+ /** Collect the pre-baked snippets for ONE action (its matched steps). */
80
+ function prebakedForAction(action) {
81
+ const out = [];
82
+ action.perStepMatches.forEach((match, idx) => {
83
+ if (match?.matched && match.call) {
84
+ out.push({
85
+ stepNum: idx + 1,
86
+ stepText: action.spec.steps[idx] ?? '',
87
+ snippet: match.call,
88
+ });
89
+ }
90
+ });
91
+ return out;
92
+ }
93
+ /** esbuild parse-check a single per-action emission as a TS module.
94
+ * Returns null on success, an error string on failure. */
95
+ async function parseCheckModule(code) {
96
+ try {
97
+ const esbuild = await import('esbuild');
98
+ await esbuild.transform(code, { loader: 'ts', format: 'esm', target: 'es2022' });
99
+ return null;
100
+ }
101
+ catch (err) {
102
+ return err?.errors?.[0]?.text || err?.message || 'unknown parse error';
103
+ }
104
+ }
105
+ /** Build the per-action recovery user prompt. Full owner context +
106
+ * "emit ONLY this one action". */
107
+ function buildActionPrompt(request, target) {
108
+ const allScaffolding = buildPerActionScaffolding(request.actions);
109
+ const targetScaffolding = buildPerActionScaffolding([target]);
110
+ const parts = [];
111
+ parts.push(`You are recovering ONE function for the \`${request.ownerName}\` ` +
112
+ `${request.ownerKind}. The whole-owner emit for it could not be ` +
113
+ `produced coherently, so each action is being emitted on its own — ` +
114
+ `but with the FULL owner context below. Emit ONLY the one action ` +
115
+ `named in EMIT TARGET.`);
116
+ parts.push('');
117
+ parts.push(`## TARGET RUNTIME`);
118
+ parts.push(request.targetRuntime ?? 'Node.js (backend)');
119
+ parts.push('');
120
+ parts.push(`## AVAILABLE CAPABILITIES`);
121
+ parts.push(request.availableCapabilities ?? '(none — only `input: any` is available)');
122
+ parts.push('');
123
+ parts.push(`## AVAILABLE CLIENTS`);
124
+ parts.push(request.availableClients ?? '(none)');
125
+ parts.push('');
126
+ parts.push(`## AVAILABLE SPEC SURFACE (other services / controllers — call these, don't reimplement)`);
127
+ parts.push(request.availableSpecSurface ?? '(no other services / controllers in this spec)');
128
+ parts.push('');
129
+ parts.push(`## ALL ACTIONS ON THIS OWNER (context — do NOT emit these)`);
130
+ parts.push(allScaffolding);
131
+ parts.push('');
132
+ parts.push(`## EMIT TARGET: ${target.actionName}`);
133
+ parts.push(targetScaffolding);
134
+ parts.push('');
135
+ parts.push(`Emit ONLY \`export async function ${target.actionName}(...)\` inside one ` +
136
+ '```typescript code block.');
137
+ parts.push(`- Put any imports the function needs on single lines ABOVE it.`);
138
+ parts.push(`- Honour every [PRE-BAKED] snippet verbatim — do not paraphrase.`);
139
+ parts.push(`- Do NOT emit the other actions; they are shown for context only.`);
140
+ return parts.join('\n');
141
+ }
142
+ /** Pull single-line \`import ...\` statements out of an emission. The
143
+ * realize-emit skill convention emits single-line imports; multi-line
144
+ * imports (rare) are left in place and ride the post-emit tsc verifier. */
145
+ function extractImports(code) {
146
+ const imports = [];
147
+ const restLines = [];
148
+ for (const line of code.split('\n')) {
149
+ if (/^\s*import\s.+;?\s*$/.test(line) && line.includes('from')) {
150
+ imports.push(line.trim());
151
+ }
152
+ else {
153
+ restLines.push(line);
154
+ }
155
+ }
156
+ return { imports, rest: restLines.join('\n').trim() };
157
+ }
158
+ /** Assemble the final `<Owner>.ai.ts` from per-action results: hoisted
159
+ * + deduped imports, then each function (real emission or γ-stub). */
160
+ function assembleOwnerFile(ownerName, perAction) {
161
+ const allImports = new Set();
162
+ const bodies = [];
163
+ for (const entry of perAction) {
164
+ if (entry.real) {
165
+ const { imports, rest } = extractImports(entry.code);
166
+ for (const imp of imports)
167
+ allImports.add(imp);
168
+ bodies.push(rest);
169
+ }
170
+ else {
171
+ bodies.push(entry.code);
172
+ }
173
+ }
174
+ const header = [
175
+ '/**',
176
+ ` * ${ownerName} — Per-owner AI behaviors (per-action recovery)`,
177
+ ' *',
178
+ ' * The whole-owner emit failed; each action below was emitted on its',
179
+ ' * own with full owner context (Tier 2). Actions that still could not',
180
+ ' * be emitted carry a γ-stub — the post-emit feedback loop will retry',
181
+ ' * those (they are STUB001, auto-reemit-eligible).',
182
+ ' *',
183
+ ` * Generated: ${new Date().toISOString().split('T')[0]}`,
184
+ ' */',
185
+ ].join('\n');
186
+ const importBlock = [...allImports].sort().join('\n');
187
+ return [header, '', importBlock, importBlock ? '' : null, bodies.join('\n\n'), '']
188
+ .filter((s) => s !== null)
189
+ .join('\n');
190
+ }
191
+ /**
192
+ * Build a {@link PerActionRecoveryFn}. The returned function loops over
193
+ * the owner's actions, emits each with full owner context, validates
194
+ * (structural + parse), γ-stubs the ones that fail, and assembles the
195
+ * owner file. Returns null only when EVERY action γ-stubbed (caller
196
+ * then uses the Tier 3 placeholder, which is equivalent).
197
+ */
198
+ export function createPerActionRecovery(opts = {}) {
199
+ const timeoutMs = opts.timeoutMs ?? 5 * 60_000;
200
+ const skills = opts.skills ?? ['realize-emit'];
201
+ const providerId = resolveProviderId();
202
+ const systemPrompt = assembleSystemWithSkills('', providerId, skills);
203
+ const envThreshold = process.env.SPECVERSE_REALIZE_STRUCTURAL_DROP_THRESHOLD;
204
+ const dropThreshold = opts.dropThreshold ??
205
+ (envThreshold !== undefined && !Number.isNaN(parseFloat(envThreshold))
206
+ ? parseFloat(envThreshold)
207
+ : DEFAULT_STRUCTURAL_DROP_THRESHOLD);
208
+ const callLlm = opts.generateOverride ??
209
+ (async (system, user) => {
210
+ const result = await Promise.race([
211
+ generateText({
212
+ model: opts.model,
213
+ prompt: user,
214
+ ...(system ? { system } : {}),
215
+ }),
216
+ new Promise((_, reject) => setTimeout(() => reject(new Error('per-action recovery timeout')), timeoutMs)),
217
+ ]);
218
+ return result.text ?? '';
219
+ });
220
+ return async (request) => {
221
+ const perAction = [];
222
+ let realCount = 0;
223
+ for (const action of request.actions) {
224
+ const user = buildActionPrompt(request, action);
225
+ let emitted = null;
226
+ try {
227
+ const text = await callLlm(systemPrompt, user);
228
+ emitted = extractTypescriptBlock(text);
229
+ }
230
+ catch {
231
+ emitted = null;
232
+ }
233
+ if (!emitted || emitted.trim().length === 0) {
234
+ perAction.push({ actionName: action.actionName, code: renderActionGammaStub(action.actionName), real: false });
235
+ continue;
236
+ }
237
+ // Gate 1: parse check.
238
+ const parseError = await parseCheckModule(emitted);
239
+ if (parseError !== null) {
240
+ if (process.env.SPECVERSE_VERBOSE) {
241
+ console.error(` ✗ per-action recovery parse-failed for ${request.ownerName}.${action.actionName}: ${parseError.slice(0, 160)}`);
242
+ }
243
+ perAction.push({ actionName: action.actionName, code: renderActionGammaStub(action.actionName), real: false });
244
+ continue;
245
+ }
246
+ // Gate 2: structural preservation (this action's snippets only).
247
+ const structural = validateLlmOutputPreservesConventions(emitted, prebakedForAction(action), dropThreshold);
248
+ if (structural.ok === false) {
249
+ if (process.env.SPECVERSE_VERBOSE) {
250
+ console.error(` ✗ per-action recovery structural-failed for ${request.ownerName}.${action.actionName}`);
251
+ }
252
+ perAction.push({ actionName: action.actionName, code: renderActionGammaStub(action.actionName), real: false });
253
+ continue;
254
+ }
255
+ perAction.push({ actionName: action.actionName, code: emitted, real: true });
256
+ realCount++;
257
+ }
258
+ // Zero real bodies → no better than the Tier 3 placeholder. Return
259
+ // null so the caller uses its own (reserved-word-safe) placeholder.
260
+ if (realCount === 0)
261
+ return null;
262
+ if (process.env.SPECVERSE_VERBOSE) {
263
+ console.error(` ↻ per-action recovery for ${request.ownerName}: ${realCount}/${request.actions.length} action(s) recovered`);
264
+ }
265
+ return assembleOwnerFile(request.ownerName, perAction);
266
+ };
267
+ }
268
+ //# sourceMappingURL=per-action-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"per-action-recovery.js","sourceRoot":"","sources":["../../src/realize/per-action-recovery.ts"],"names":[],"mappings":"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"}
@@ -110,4 +110,10 @@ export declare function createRealizeOwnerLlmEmit(opts?: CreateRealizeOwnerLlmEm
110
110
  * tier search: @specverse/assets package path, engine-bundled assets,
111
111
  * worktree-sibling specverse-self/assets. */
112
112
  export declare function loadRealizeOwnerPromptFromFallback(): PromptYaml | null;
113
+ /** Build the per-action scaffolding block. One section per action,
114
+ * listing its steps with [PRE-BAKED] / [WRITE] markers. Exported for
115
+ * reuse by the realize-context-snapshot module (Phase 3 of
116
+ * 2026-05-13-VERIFIER-DIAGNOSTIC-TREATMENT-SPLIT) — the reemit prompt
117
+ * embeds the same scaffolding the original per-owner prompt used. */
118
+ export declare function buildPerActionScaffolding(actions: CollectedOwnerAction[]): string;
113
119
  //# sourceMappingURL=per-owner-emit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"per-owner-emit.d.ts","sourceRoot":"","sources":["../../src/realize/per-owner-emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAOH,OAAO,EAEL,SAAS,IAAI,WAAW,EAGxB,KAAK,UAAU,EAGhB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAUhC;;+BAE+B;AAC/B,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB;wEACoE;IACpE,cAAc,EAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC3C;AAED,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9C,kEAAkE;IAClE,SAAS,EAAE,GAAG,CAAC;IACf,iEAAiE;IACjE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;sEAEkE;IAClE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;iDAI6C;IAC7C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;kEAI8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;oCAEoC;AACpC,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,mBAAmB,KACzB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5B,qDAAqD;AACrD,MAAM,WAAW,gCAAgC;IAC/C,sCAAsC;IACtC,iBAAiB,CAAC,EAAE,OAAO,WAAW,CAAC;IACvC,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,UAAU,CAAC;IACtC;2CACuC;IACvC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9D,qDAAqD;IACrD,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,GAAE,gCAAqC,GAC1C,cAAc,CA2IhB;AAwBD;;;8CAG8C;AAC9C,wBAAgB,kCAAkC,IAAI,UAAU,GAAG,IAAI,CA8DtE"}
1
+ {"version":3,"file":"per-owner-emit.d.ts","sourceRoot":"","sources":["../../src/realize/per-owner-emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAOH,OAAO,EAEL,SAAS,IAAI,WAAW,EAGxB,KAAK,UAAU,EAGhB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAUhC;;+BAE+B;AAC/B,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB;wEACoE;IACpE,cAAc,EAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC3C;AAED,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9C,kEAAkE;IAClE,SAAS,EAAE,GAAG,CAAC;IACf,iEAAiE;IACjE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;sEAEkE;IAClE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;iDAI6C;IAC7C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;kEAI8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;oCAEoC;AACpC,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,mBAAmB,KACzB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5B,qDAAqD;AACrD,MAAM,WAAW,gCAAgC;IAC/C,sCAAsC;IACtC,iBAAiB,CAAC,EAAE,OAAO,WAAW,CAAC;IACvC,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,UAAU,CAAC;IACtC;2CACuC;IACvC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9D,qDAAqD;IACrD,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,GAAE,gCAAqC,GAC1C,cAAc,CA+JhB;AAwBD;;;8CAG8C;AAC9C,wBAAgB,kCAAkC,IAAI,UAAU,GAAG,IAAI,CA8DtE;AA0FD;;;;sEAIsE;AACtE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,CA2BjF"}
@@ -34,7 +34,7 @@ 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';
37
+ import { validateLlmOutputPreservesConventions, DEFAULT_STRUCTURAL_DROP_THRESHOLD, } from './structural-validator.js';
38
38
  import { extractTypescriptBlock, } from './owner-emit-shared.js';
39
39
  import { rulesApplicableTo, forbiddenApisForRuntime, renderConstraintsForPrompt, } from './realize-rules.js';
40
40
  const require = createRequire(import.meta.url);
@@ -124,12 +124,25 @@ export function createRealizeOwnerLlmEmit(opts = {}) {
124
124
  }
125
125
  return null;
126
126
  }
127
- // 5. Structural validator — DR3. A rewritten pre-baked snippet
128
- // is a LOUD failure (not a silent retry).
129
- 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);
130
138
  if (structural.ok === false) {
131
139
  throw new Error(`[realize-owner] structural-preservation failed for ${request.ownerName}:\n${structural.reason}`);
132
140
  }
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})`);
145
+ }
133
146
  // 5b. RULES manifest pipeline. Each rule in `realize-rules.ts`
134
147
  // declares its own detect() + correction() + ordering. We
135
148
  // iterate in pipeline order; first violating rule wins (one
@@ -331,8 +344,11 @@ function yamlDumpOwner(ownerSpec, ownerName) {
331
344
  return yaml.dump({ [ownerName]: ownerSpec }, { lineWidth: 100, noRefs: true });
332
345
  }
333
346
  /** Build the per-action scaffolding block. One section per action,
334
- * listing its steps with [PRE-BAKED] / [WRITE] markers. */
335
- 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) {
336
352
  if (actions.length === 0)
337
353
  return '(no actions on this owner)';
338
354
  const sections = [];
@@ -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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"}
@@ -21,6 +21,7 @@
21
21
  */
22
22
  import { buildAvailableClientsByOwner, type MatcherFn, type SharedConvention } from './owner-emit-shared.js';
23
23
  import type { PerOwnerEmitFn } from './per-owner-emit.js';
24
+ import type { PerActionRecoveryFn } from './per-action-recovery.js';
24
25
  /** Options for {@link runPerOwnerEmission}. */
25
26
  export interface RunPerOwnerEmissionOptions {
26
27
  /** Full inferred spec. */
@@ -34,6 +35,22 @@ export interface RunPerOwnerEmissionOptions {
34
35
  /** Per-owner LLM emit hook. Required — the whole point of this
35
36
  * runner is to drive it once per owner. */
36
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;
37
54
  /** Pre-built availableClients map (from buildAvailableClientsByOwner). */
38
55
  availableClientsByOwner?: Map<string, string>;
39
56
  /** Manifest capability mappings text (NEW vs per-action runner).
@@ -60,9 +77,13 @@ export interface RunPerOwnerEmissionResult {
60
77
  ownerCount: number;
61
78
  /** Number of actions across all owners. */
62
79
  actionCount: number;
63
- /** 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). */
64
82
  ownersEmittedByLLM: number;
65
- /** 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
66
87
  * deterministic placeholder file. */
67
88
  ownersFellBack: number;
68
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,EAI5B,KAAK,SAAS,EACd,KAAK,gBAAgB,EAGtB,MAAM,wBAAwB,CAAC;AAChC,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"}
@@ -22,6 +22,8 @@
22
22
  import { existsSync, mkdirSync, writeFileSync } from 'fs';
23
23
  import { dirname, join } from 'path';
24
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 };