@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.
- package/dist/ai/analyse-runner.d.ts.map +1 -1
- package/dist/ai/analyse-runner.js +53 -1
- package/dist/ai/analyse-runner.js.map +1 -1
- package/dist/ai/prompt-runner.d.ts +39 -1
- package/dist/ai/prompt-runner.d.ts.map +1 -1
- package/dist/ai/prompt-runner.js +44 -3
- package/dist/ai/prompt-runner.js.map +1 -1
- package/dist/ai/providers/claude-cli.d.ts.map +1 -1
- package/dist/ai/providers/claude-cli.js +8 -1
- package/dist/ai/providers/claude-cli.js.map +1 -1
- package/dist/ai/skill-loader.d.ts +50 -0
- package/dist/ai/skill-loader.d.ts.map +1 -0
- package/dist/ai/skill-loader.js +96 -0
- package/dist/ai/skill-loader.js.map +1 -0
- package/dist/analyse-prepass/adapters/index.d.ts +2 -0
- package/dist/analyse-prepass/adapters/index.d.ts.map +1 -1
- package/dist/analyse-prepass/adapters/index.js +2 -0
- package/dist/analyse-prepass/adapters/index.js.map +1 -1
- package/dist/analyse-prepass/adapters/module-functions.d.ts +95 -0
- package/dist/analyse-prepass/adapters/module-functions.d.ts.map +1 -0
- package/dist/analyse-prepass/adapters/module-functions.js +358 -0
- package/dist/analyse-prepass/adapters/module-functions.js.map +1 -0
- package/dist/analyse-prepass/adapters/naming-convention-fks.d.ts +90 -0
- package/dist/analyse-prepass/adapters/naming-convention-fks.d.ts.map +1 -0
- package/dist/analyse-prepass/adapters/naming-convention-fks.js +181 -0
- package/dist/analyse-prepass/adapters/naming-convention-fks.js.map +1 -0
- package/dist/analyse-prepass/index.d.ts +8 -0
- package/dist/analyse-prepass/index.d.ts.map +1 -1
- package/dist/analyse-prepass/index.js +130 -0
- package/dist/analyse-prepass/index.js.map +1 -1
- package/dist/libs/instance-factories/cli/templates/commander/cli-entry-generator.js +11 -12
- package/dist/libs/instance-factories/cli/templates/commander/command-generator.js +2 -2
- package/dist/libs/instance-factories/controllers/templates/fastify/routes-generator.js +29 -10
- package/dist/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.js +10 -9
- package/dist/libs/instance-factories/services/templates/prisma/behavior-generator.js +24 -2
- package/dist/libs/instance-factories/services/templates/prisma/controller-generator.js +28 -20
- package/dist/normalise/index.d.ts +14 -0
- package/dist/normalise/index.d.ts.map +1 -0
- package/dist/normalise/index.js +14 -0
- package/dist/normalise/index.js.map +1 -0
- package/dist/normalise/load-overrides.d.ts +43 -0
- package/dist/normalise/load-overrides.d.ts.map +1 -0
- package/dist/normalise/load-overrides.js +121 -0
- package/dist/normalise/load-overrides.js.map +1 -0
- package/dist/normalise/normalise-rules.d.ts +181 -0
- package/dist/normalise/normalise-rules.d.ts.map +1 -0
- package/dist/normalise/normalise-rules.js +79 -0
- package/dist/normalise/normalise-rules.js.map +1 -0
- package/dist/normalise/rules/cluster-module-functions.d.ts +31 -0
- package/dist/normalise/rules/cluster-module-functions.d.ts.map +1 -0
- package/dist/normalise/rules/cluster-module-functions.js +238 -0
- package/dist/normalise/rules/cluster-module-functions.js.map +1 -0
- package/dist/normalise/rules/crud-into-curved.d.ts +117 -0
- package/dist/normalise/rules/crud-into-curved.d.ts.map +1 -0
- package/dist/normalise/rules/crud-into-curved.js +303 -0
- package/dist/normalise/rules/crud-into-curved.js.map +1 -0
- package/dist/normalise/rules/drop-trivial-passthrough.d.ts +92 -0
- package/dist/normalise/rules/drop-trivial-passthrough.d.ts.map +1 -0
- package/dist/normalise/rules/drop-trivial-passthrough.js +217 -0
- package/dist/normalise/rules/drop-trivial-passthrough.js.map +1 -0
- package/dist/normalise/runner.d.ts +58 -0
- package/dist/normalise/runner.d.ts.map +1 -0
- package/dist/normalise/runner.js +114 -0
- package/dist/normalise/runner.js.map +1 -0
- package/dist/parser/import-resolver/resolver.js +1 -1
- package/dist/parser/import-resolver/resolver.js.map +1 -1
- package/dist/realize/engines/typescript-engine.js +1 -1
- package/dist/realize/engines/typescript-engine.js.map +1 -1
- package/dist/realize/index.d.ts.map +1 -1
- package/dist/realize/index.js +221 -88
- package/dist/realize/index.js.map +1 -1
- package/dist/realize/library/library.js +1 -1
- package/dist/realize/library/library.js.map +1 -1
- package/dist/realize/library/resolver.d.ts.map +1 -1
- package/dist/realize/library/resolver.js +14 -1
- package/dist/realize/library/resolver.js.map +1 -1
- package/dist/realize/owner-emit-shared.d.ts +114 -0
- package/dist/realize/owner-emit-shared.d.ts.map +1 -0
- package/dist/realize/owner-emit-shared.js +227 -0
- package/dist/realize/owner-emit-shared.js.map +1 -0
- package/dist/realize/per-action-recovery.d.ts +74 -0
- package/dist/realize/per-action-recovery.d.ts.map +1 -0
- package/dist/realize/per-action-recovery.js +268 -0
- package/dist/realize/per-action-recovery.js.map +1 -0
- package/dist/realize/per-owner-emit.d.ts +7 -58
- package/dist/realize/per-owner-emit.d.ts.map +1 -1
- package/dist/realize/per-owner-emit.js +67 -215
- package/dist/realize/per-owner-emit.js.map +1 -1
- package/dist/realize/per-owner-runner.d.ts +24 -4
- package/dist/realize/per-owner-runner.d.ts.map +1 -1
- package/dist/realize/per-owner-runner.js +77 -19
- package/dist/realize/per-owner-runner.js.map +1 -1
- package/dist/realize/post-emit-verify/diagnostics.d.ts +107 -0
- package/dist/realize/post-emit-verify/diagnostics.d.ts.map +1 -0
- package/dist/realize/post-emit-verify/diagnostics.js +148 -0
- package/dist/realize/post-emit-verify/diagnostics.js.map +1 -0
- package/dist/realize/post-emit-verify/feedback-runner.d.ts +123 -0
- package/dist/realize/post-emit-verify/feedback-runner.d.ts.map +1 -0
- package/dist/realize/post-emit-verify/feedback-runner.js +232 -0
- package/dist/realize/post-emit-verify/feedback-runner.js.map +1 -0
- package/dist/realize/post-emit-verify/index.d.ts +19 -0
- package/dist/realize/post-emit-verify/index.d.ts.map +1 -0
- package/dist/realize/post-emit-verify/index.js +18 -0
- package/dist/realize/post-emit-verify/index.js.map +1 -0
- package/dist/realize/post-emit-verify/reemit.d.ts +82 -0
- package/dist/realize/post-emit-verify/reemit.d.ts.map +1 -0
- package/dist/realize/post-emit-verify/reemit.js +124 -0
- package/dist/realize/post-emit-verify/reemit.js.map +1 -0
- package/dist/realize/post-emit-verify/types.d.ts +187 -0
- package/dist/realize/post-emit-verify/types.d.ts.map +1 -0
- package/dist/realize/post-emit-verify/types.js +28 -0
- package/dist/realize/post-emit-verify/types.js.map +1 -0
- package/dist/realize/post-emit-verify/verifier-manifest.d.ts +29 -0
- package/dist/realize/post-emit-verify/verifier-manifest.d.ts.map +1 -0
- package/dist/realize/post-emit-verify/verifier-manifest.js +57 -0
- package/dist/realize/post-emit-verify/verifier-manifest.js.map +1 -0
- package/dist/realize/post-emit-verify/verifiers/stub-completeness.d.ts +85 -0
- package/dist/realize/post-emit-verify/verifiers/stub-completeness.d.ts.map +1 -0
- package/dist/realize/post-emit-verify/verifiers/stub-completeness.js +298 -0
- package/dist/realize/post-emit-verify/verifiers/stub-completeness.js.map +1 -0
- package/dist/realize/post-emit-verify/verifiers/tsc.d.ts +24 -0
- package/dist/realize/post-emit-verify/verifiers/tsc.d.ts.map +1 -0
- package/dist/realize/post-emit-verify/verifiers/tsc.js +148 -0
- package/dist/realize/post-emit-verify/verifiers/tsc.js.map +1 -0
- package/dist/realize/realize-context-snapshot.d.ts +70 -0
- package/dist/realize/realize-context-snapshot.d.ts.map +1 -0
- package/dist/realize/realize-context-snapshot.js +96 -0
- package/dist/realize/realize-context-snapshot.js.map +1 -0
- package/dist/realize/realize-rules.d.ts +113 -0
- package/dist/realize/realize-rules.d.ts.map +1 -0
- package/dist/realize/realize-rules.js +271 -0
- package/dist/realize/realize-rules.js.map +1 -0
- package/dist/realize/structural-validator.d.ts +36 -2
- package/dist/realize/structural-validator.d.ts.map +1 -1
- package/dist/realize/structural-validator.js +50 -7
- package/dist/realize/structural-validator.js.map +1 -1
- package/libs/instance-factories/cli/templates/commander/cli-entry-generator.ts +11 -12
- package/libs/instance-factories/cli/templates/commander/command-generator.ts +2 -2
- package/libs/instance-factories/controllers/templates/fastify/routes-generator.ts +49 -15
- package/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.ts +19 -3
- package/libs/instance-factories/services/templates/prisma/behavior-generator.ts +62 -2
- package/libs/instance-factories/services/templates/prisma/controller-generator.ts +47 -20
- 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 './
|
|
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
|
|
120
|
-
// is a LOUD failure (
|
|
121
|
-
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
//
|
|
154
|
-
//
|
|
155
|
-
//
|
|
156
|
-
//
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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 =
|
|
178
|
-
console.error(` ✗ per-owner LLM emit
|
|
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 =
|
|
183
|
-
|
|
169
|
+
lastParseError = rule.correction(violations, ruleCtx);
|
|
170
|
+
ruleViolated = true;
|
|
184
171
|
}
|
|
185
|
-
|
|
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
|
-
|
|
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
|
-
// ───
|
|
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 './
|
|
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
|
|
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
|
|
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,
|
|
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 './
|
|
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 =
|
|
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 };
|