@specverse/engines 6.53.1 → 6.63.0

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 (84) hide show
  1. package/dist/ai/analyse-runner.d.ts.map +1 -1
  2. package/dist/ai/analyse-runner.js +22 -1
  3. package/dist/ai/analyse-runner.js.map +1 -1
  4. package/dist/analyse-prepass/adapters/module-functions.d.ts +25 -0
  5. package/dist/analyse-prepass/adapters/module-functions.d.ts.map +1 -1
  6. package/dist/analyse-prepass/adapters/module-functions.js +54 -0
  7. package/dist/analyse-prepass/adapters/module-functions.js.map +1 -1
  8. package/dist/analyse-prepass/backends/gitnexus.d.ts +28 -0
  9. package/dist/analyse-prepass/backends/gitnexus.d.ts.map +1 -1
  10. package/dist/analyse-prepass/backends/gitnexus.js +36 -2
  11. package/dist/analyse-prepass/backends/gitnexus.js.map +1 -1
  12. package/dist/analyse-prepass/index.d.ts.map +1 -1
  13. package/dist/analyse-prepass/index.js +17 -1
  14. package/dist/analyse-prepass/index.js.map +1 -1
  15. package/dist/libs/instance-factories/controllers/templates/fastify/routes-generator.js +29 -10
  16. package/dist/libs/instance-factories/services/templates/_shared/step-matching.js +11 -0
  17. package/dist/libs/instance-factories/services/templates/mongodb-native/step-conventions.js +39 -19
  18. package/dist/libs/instance-factories/services/templates/postgres-native/step-conventions.js +35 -18
  19. package/dist/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.js +16 -11
  20. package/dist/libs/instance-factories/services/templates/prisma/controller-generator.js +1 -1
  21. package/dist/libs/instance-factories/services/templates/prisma/step-conventions.js +34 -12
  22. package/dist/libs/instance-factories/services/templates/shared-patterns.js +5 -5
  23. package/dist/realize/index.d.ts.map +1 -1
  24. package/dist/realize/index.js +91 -10
  25. package/dist/realize/index.js.map +1 -1
  26. package/dist/realize/per-action-recovery.d.ts +74 -0
  27. package/dist/realize/per-action-recovery.d.ts.map +1 -0
  28. package/dist/realize/per-action-recovery.js +255 -0
  29. package/dist/realize/per-action-recovery.js.map +1 -0
  30. package/dist/realize/per-owner-emit.d.ts +6 -0
  31. package/dist/realize/per-owner-emit.d.ts.map +1 -1
  32. package/dist/realize/per-owner-emit.js +22 -6
  33. package/dist/realize/per-owner-emit.js.map +1 -1
  34. package/dist/realize/per-owner-runner.d.ts +23 -2
  35. package/dist/realize/per-owner-runner.d.ts.map +1 -1
  36. package/dist/realize/per-owner-runner.js +91 -46
  37. package/dist/realize/per-owner-runner.js.map +1 -1
  38. package/dist/realize/post-emit-verify/diagnostics.d.ts +107 -0
  39. package/dist/realize/post-emit-verify/diagnostics.d.ts.map +1 -0
  40. package/dist/realize/post-emit-verify/diagnostics.js +148 -0
  41. package/dist/realize/post-emit-verify/diagnostics.js.map +1 -0
  42. package/dist/realize/post-emit-verify/feedback-runner.d.ts +41 -1
  43. package/dist/realize/post-emit-verify/feedback-runner.d.ts.map +1 -1
  44. package/dist/realize/post-emit-verify/feedback-runner.js +62 -6
  45. package/dist/realize/post-emit-verify/feedback-runner.js.map +1 -1
  46. package/dist/realize/post-emit-verify/index.d.ts +4 -2
  47. package/dist/realize/post-emit-verify/index.d.ts.map +1 -1
  48. package/dist/realize/post-emit-verify/index.js +3 -1
  49. package/dist/realize/post-emit-verify/index.js.map +1 -1
  50. package/dist/realize/post-emit-verify/reemit.d.ts +22 -1
  51. package/dist/realize/post-emit-verify/reemit.d.ts.map +1 -1
  52. package/dist/realize/post-emit-verify/reemit.js +20 -18
  53. package/dist/realize/post-emit-verify/reemit.js.map +1 -1
  54. package/dist/realize/post-emit-verify/types.d.ts +49 -0
  55. package/dist/realize/post-emit-verify/types.d.ts.map +1 -1
  56. package/dist/realize/post-emit-verify/verifier-manifest.d.ts.map +1 -1
  57. package/dist/realize/post-emit-verify/verifier-manifest.js +2 -0
  58. package/dist/realize/post-emit-verify/verifier-manifest.js.map +1 -1
  59. package/dist/realize/post-emit-verify/verifiers/stub-completeness.d.ts +127 -0
  60. package/dist/realize/post-emit-verify/verifiers/stub-completeness.d.ts.map +1 -0
  61. package/dist/realize/post-emit-verify/verifiers/stub-completeness.js +423 -0
  62. package/dist/realize/post-emit-verify/verifiers/stub-completeness.js.map +1 -0
  63. package/dist/realize/realize-context-snapshot.d.ts +70 -0
  64. package/dist/realize/realize-context-snapshot.d.ts.map +1 -0
  65. package/dist/realize/realize-context-snapshot.js +96 -0
  66. package/dist/realize/realize-context-snapshot.js.map +1 -0
  67. package/dist/realize/structural-validator.d.ts +36 -2
  68. package/dist/realize/structural-validator.d.ts.map +1 -1
  69. package/dist/realize/structural-validator.js +50 -7
  70. package/dist/realize/structural-validator.js.map +1 -1
  71. package/libs/instance-factories/controllers/templates/fastify/routes-generator.ts +49 -15
  72. package/libs/instance-factories/services/templates/_shared/step-matching.ts +43 -0
  73. package/libs/instance-factories/services/templates/mongodb-native/step-conventions.ts +39 -19
  74. package/libs/instance-factories/services/templates/postgres-native/step-conventions.ts +35 -18
  75. package/libs/instance-factories/services/templates/prisma/__tests__/step-conventions-create.test.ts +184 -0
  76. package/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.ts +34 -5
  77. package/libs/instance-factories/services/templates/prisma/controller-generator.ts +6 -1
  78. package/libs/instance-factories/services/templates/prisma/step-conventions.ts +34 -12
  79. package/libs/instance-factories/services/templates/shared-patterns.ts +20 -10
  80. package/package.json +1 -1
  81. package/libs/instance-factories/services/templates/_shared/step-matching.d.ts +0 -39
  82. package/libs/instance-factories/services/templates/_shared/step-matching.d.ts.map +0 -1
  83. package/libs/instance-factories/services/templates/_shared/step-matching.js +0 -90
  84. package/libs/instance-factories/services/templates/_shared/step-matching.js.map +0 -1
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Diagnostic layer — runs stub-completeness (and future observe-only
3
+ * verifiers) on the realized output and writes a `realize-quality.json`
4
+ * sidecar. Runs independently of the feedback runner.
5
+ *
6
+ * Why this exists (Phase 1 of 2026-05-13-VERIFIER-DIAGNOSTIC-TREATMENT-SPLIT):
7
+ * The realize pipeline used to print `✅ All code generated` and the
8
+ * user would only discover stub bodies at runtime. The post-emit-verify
9
+ * framework can detect stubs but only fires opt-in via
10
+ * `SPECVERSE_REALIZE_POST_VERIFY_ENABLE=stub-completeness`, and even
11
+ * then the findings are buried in pass logs. This module promotes the
12
+ * diagnostic to a first-class artifact: a sidecar JSON + a CLI summary
13
+ * line at end of realize.
14
+ *
15
+ * The diagnostic layer:
16
+ * - Runs ALWAYS when there are emitted `.ai.ts` files
17
+ * - Calls stub-completeness directly (bypasses the manifest's
18
+ * enabledByDefault gate — diagnostic should run regardless of whether
19
+ * the verifier is wired into the auto-fix loop)
20
+ * - Writes `<outputDir>/realize-quality.json`
21
+ * - Returns a summary suitable for CLI display
22
+ *
23
+ * Costs: regex-only scan of `.ai.ts` files. Milliseconds. No LLM calls.
24
+ * Disabled via `SPECVERSE_REALIZE_NO_DIAGNOSTICS=1` for users who really
25
+ * don't want the sidecar.
26
+ */
27
+ import { existsSync, readFileSync, writeFileSync } from 'fs';
28
+ import { join } from 'path';
29
+ import { STUB_COMPLETENESS_VERIFIER } from './verifiers/stub-completeness.js';
30
+ import { defaultMapFileToOwner } from './feedback-runner.js';
31
+ /**
32
+ * Run the diagnostic verifiers on the realized output, write the
33
+ * sidecar, return a summary for the CLI.
34
+ *
35
+ * Returns null when there's nothing to report (e.g. no `.ai.ts` files
36
+ * at all — typical for backend-only validate-only specs). Caller
37
+ * suppresses CLI output in that case.
38
+ */
39
+ export async function runDiagnostics(ctx) {
40
+ if (!STUB_COMPLETENESS_VERIFIER.applies(ctx))
41
+ return null;
42
+ const stubResult = await STUB_COMPLETENESS_VERIFIER.verify(ctx);
43
+ const byOwner = {};
44
+ const stubsByCode = {};
45
+ for (const e of stubResult.errors) {
46
+ const ownerName = defaultMapFileToOwner(e.file) ?? '__unmapped__';
47
+ if (!byOwner[ownerName]) {
48
+ byOwner[ownerName] = { ownerName, stubs: [] };
49
+ }
50
+ byOwner[ownerName].stubs.push({
51
+ code: e.code,
52
+ file: e.file,
53
+ line: e.line,
54
+ col: e.col,
55
+ message: e.message,
56
+ });
57
+ stubsByCode[e.code] = (stubsByCode[e.code] ?? 0) + 1;
58
+ }
59
+ const sidecar = {
60
+ schemaVersion: '1.0',
61
+ ranAt: new Date().toISOString(),
62
+ ctx: {
63
+ outputDir: ctx.outputDir,
64
+ ...(ctx.targetLanguage ? { targetLanguage: ctx.targetLanguage } : {}),
65
+ ...(ctx.subpath ? { subpath: ctx.subpath } : {}),
66
+ },
67
+ totals: {
68
+ stubs: stubResult.errors.length,
69
+ stubsByCode,
70
+ ownersWithStubs: Object.keys(byOwner).length,
71
+ },
72
+ byOwner,
73
+ notes: stubResult.notes,
74
+ };
75
+ const sidecarPath = join(ctx.outputDir, 'realize-quality.json');
76
+ try {
77
+ writeFileSync(sidecarPath, JSON.stringify(sidecar, null, 2));
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ return {
83
+ totalStubs: sidecar.totals.stubs,
84
+ ownersWithStubs: sidecar.totals.ownersWithStubs,
85
+ sidecarPath,
86
+ };
87
+ }
88
+ /**
89
+ * Format the one-line CLI summary for `spv realize` output.
90
+ *
91
+ * ⚠ realize-quality: 5 stubs across 3 owners (see realize-quality.json)
92
+ *
93
+ * Returns null when there's nothing to flag — caller should not print
94
+ * anything in that case (no false-positive noise on clean realizes).
95
+ */
96
+ export function formatSummaryLine(summary) {
97
+ if (!summary || summary.totalStubs === 0)
98
+ return null;
99
+ const ownerWord = summary.ownersWithStubs === 1 ? 'owner' : 'owners';
100
+ const stubWord = summary.totalStubs === 1 ? 'stub' : 'stubs';
101
+ return (` ⚠ realize-quality: ${summary.totalStubs} ${stubWord} across ` +
102
+ `${summary.ownersWithStubs} ${ownerWord} (see realize-quality.json)`);
103
+ }
104
+ /**
105
+ * Read the existing `realize-quality.json` sidecar, attach the
106
+ * feedback runner's `specGaps`, and rewrite. Idempotent — safe to call
107
+ * multiple times. Skips silently when the sidecar doesn't exist
108
+ * (diagnostics never ran or wrote it).
109
+ *
110
+ * Phase 2 of 2026-05-13-VERIFIER-DIAGNOSTIC-TREATMENT-SPLIT: the
111
+ * feedback runner returns specGaps; realize's index.ts calls this to
112
+ * merge them into the sidecar so users have one place to inspect
113
+ * realize quality.
114
+ */
115
+ export function appendSpecGaps(outputDir, specGaps) {
116
+ if (specGaps.length === 0)
117
+ return;
118
+ const path = join(outputDir, 'realize-quality.json');
119
+ if (!existsSync(path))
120
+ return;
121
+ try {
122
+ const raw = readFileSync(path, 'utf8');
123
+ const sidecar = JSON.parse(raw);
124
+ sidecar.specGaps = specGaps;
125
+ sidecar.totals.specGaps = specGaps.length;
126
+ writeFileSync(path, JSON.stringify(sidecar, null, 2));
127
+ }
128
+ catch {
129
+ // best-effort sidecar — don't crash realize on a parse failure
130
+ }
131
+ }
132
+ /**
133
+ * Format the spec-gap one-liner for `spv realize` output. Distinct from
134
+ * the stub summary because spec gaps indicate the user needs to act
135
+ * (adjust spec/manifest/provider), not just inspect.
136
+ *
137
+ * ⚠ realize-quality: 3 spec gap(s) surfaced; review realize-quality.json::specGaps
138
+ *
139
+ * Returns null when there are no gaps.
140
+ */
141
+ export function formatSpecGapLine(specGapCount) {
142
+ if (specGapCount === 0)
143
+ return null;
144
+ const word = specGapCount === 1 ? 'spec gap' : 'spec gaps';
145
+ return (` ⚠ realize-quality: ${specGapCount} ${word} surfaced; ` +
146
+ `review realize-quality.json::specGaps`);
147
+ }
148
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@
20
20
  * the runner rolls back to the previous content. The LLM doesn't get
21
21
  * to make things worse.
22
22
  */
23
- import type { VerifyContext, VerifyError } from './types.js';
23
+ import type { SpecGapEntry, TreatmentSelector, TreatmentStrategy, VerifyContext, VerifyError } from './types.js';
24
24
  export interface ReemitRequest {
25
25
  /** Resolved owner name (e.g. `AuthController`). */
26
26
  ownerName: string;
@@ -50,6 +50,25 @@ export interface FeedbackRunOptions {
50
50
  * Set via env: `SPECVERSE_REALIZE_POST_VERIFY_MAX_FILES=N`.
51
51
  */
52
52
  maxFilesPerPass?: number;
53
+ /**
54
+ * Set of verifier ids to enable in addition to the
55
+ * `enabledByDefault: true` set. Used to opt in to experimental
56
+ * verifiers like `stub-completeness` (default-off until empirically
57
+ * validated). Passed straight through to `runAllVerifiers`.
58
+ *
59
+ * Set via env: `SPECVERSE_REALIZE_POST_VERIFY_ENABLE=id1,id2`.
60
+ */
61
+ enabledOverrides?: Set<string>;
62
+ /**
63
+ * Treatment selector — decides per-error whether to auto-reemit,
64
+ * surface as spec gap, or skip. Defaults to
65
+ * `defaultTreatmentSelector` (Phase 2 of
66
+ * 2026-05-13-VERIFIER-DIAGNOSTIC-TREATMENT-SPLIT).
67
+ *
68
+ * Override at the call site for advanced cases (custom verifiers,
69
+ * stricter / more permissive LLM tolerance profiles).
70
+ */
71
+ treatmentSelector?: TreatmentSelector;
53
72
  }
54
73
  export interface PassResult {
55
74
  passNumber: number;
@@ -72,6 +91,10 @@ export interface FeedbackRunResult {
72
91
  verifierId: string;
73
92
  notes: string[];
74
93
  }>;
94
+ /** Errors classified `surface-spec-gap` by the treatment selector —
95
+ * these are NOT auto-fixed; the caller writes them to the
96
+ * realize-quality.json sidecar's `specGaps` field for user review. */
97
+ specGaps: SpecGapEntry[];
75
98
  }
76
99
  /**
77
100
  * Default file→owner mapping for the SpecVerse TypeScript layout:
@@ -80,5 +103,22 @@ export interface FeedbackRunResult {
80
103
  * Returns null for files that don't match.
81
104
  */
82
105
  export declare function defaultMapFileToOwner(file: string): string | null;
106
+ /**
107
+ * Default treatment policy (Phase 2 of
108
+ * 2026-05-13-VERIFIER-DIAGNOSTIC-TREATMENT-SPLIT):
109
+ *
110
+ * - `STUB002` (LLM-throw stubs) → `surface-spec-gap`. The LLM already
111
+ * signaled "I lack context for this action" via the throw message;
112
+ * re-prompting either no-ops or hallucinates cross-file regressions.
113
+ * Better to tell the user about the gap so they can adjust the
114
+ * spec / manifest / provider choice.
115
+ *
116
+ * - Everything else (tsc errors, STUB001 γ-fallback, STUB003 trivial-
117
+ * return, STUB004 empty-body, STUB005 misplaced-brace, future
118
+ * codes) → `auto-reemit`.
119
+ *
120
+ * Override at the call site for testing or for advanced policies.
121
+ */
122
+ export declare function defaultTreatmentSelector(error: VerifyError): TreatmentStrategy;
83
123
  export declare function runPostEmitFeedback(ctx: VerifyContext, reemit: Reemit, options?: FeedbackRunOptions): Promise<FeedbackRunResult>;
84
124
  //# sourceMappingURL=feedback-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-runner.d.ts","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/feedback-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EAEZ,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB;yDACqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC;uEACmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;2EACuE;IACvE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,aAAa,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAyBD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CA6H5B"}
1
+ {"version":3,"file":"feedback-runner.d.ts","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/feedback-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,WAAW,EAEZ,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB;yDACqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC;uEACmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;2EACuE;IACvE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,aAAa,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC9D;;2EAEuE;IACvE,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,GAAG,iBAAiB,CAG9E;AAyBD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAgK5B"}
@@ -33,6 +33,27 @@ export function defaultMapFileToOwner(file) {
33
33
  const m = /(?:^|\/)([A-Za-z_][\w-]*)\.ai\.ts$/.exec(file);
34
34
  return m ? m[1] : null;
35
35
  }
36
+ /**
37
+ * Default treatment policy (Phase 2 of
38
+ * 2026-05-13-VERIFIER-DIAGNOSTIC-TREATMENT-SPLIT):
39
+ *
40
+ * - `STUB002` (LLM-throw stubs) → `surface-spec-gap`. The LLM already
41
+ * signaled "I lack context for this action" via the throw message;
42
+ * re-prompting either no-ops or hallucinates cross-file regressions.
43
+ * Better to tell the user about the gap so they can adjust the
44
+ * spec / manifest / provider choice.
45
+ *
46
+ * - Everything else (tsc errors, STUB001 γ-fallback, STUB003 trivial-
47
+ * return, STUB004 empty-body, STUB005 misplaced-brace, future
48
+ * codes) → `auto-reemit`.
49
+ *
50
+ * Override at the call site for testing or for advanced policies.
51
+ */
52
+ export function defaultTreatmentSelector(error) {
53
+ if (error.code === 'STUB002')
54
+ return 'surface-spec-gap';
55
+ return 'auto-reemit';
56
+ }
36
57
  /**
37
58
  * Group verifier errors by file (preserving error order within each
38
59
  * file). Files with no errors are absent from the map.
@@ -63,15 +84,49 @@ export async function runPostEmitFeedback(ctx, reemit, options = {}) {
63
84
  const maxPasses = options.maxPasses ?? 1;
64
85
  const maxFilesPerPass = options.maxFilesPerPass ?? 20;
65
86
  const mapFileToOwner = options.mapFileToOwner ?? defaultMapFileToOwner;
87
+ const enabledOverrides = options.enabledOverrides;
88
+ const treatmentSelector = options.treatmentSelector ?? defaultTreatmentSelector;
66
89
  const passes = [];
67
90
  const verifierNotes = [];
91
+ const specGaps = [];
92
+ const seenSpecGaps = new Set();
93
+ /** Pull out spec-gap classified errors into the result's specGaps[]
94
+ * while leaving auto-reemit errors in place for the loop. Dedups
95
+ * across passes (same error from re-running verifiers shouldn't
96
+ * appear twice in the sidecar). */
97
+ function partitionErrors(errors) {
98
+ const actionable = [];
99
+ for (const e of errors) {
100
+ const strategy = treatmentSelector(e);
101
+ if (strategy === 'surface-spec-gap') {
102
+ const key = `${e.file}:${e.line ?? 0}:${e.col ?? 0}:${e.code}`;
103
+ if (!seenSpecGaps.has(key)) {
104
+ seenSpecGaps.add(key);
105
+ specGaps.push({
106
+ ownerName: mapFileToOwner(e.file),
107
+ file: e.file,
108
+ ...(e.line !== undefined ? { line: e.line } : {}),
109
+ ...(e.col !== undefined ? { col: e.col } : {}),
110
+ code: e.code,
111
+ message: e.message,
112
+ });
113
+ }
114
+ continue;
115
+ }
116
+ if (strategy === 'skip')
117
+ continue;
118
+ actionable.push(e);
119
+ }
120
+ return actionable;
121
+ }
68
122
  // Initial verifier pass.
69
- let currentResults = await runAllVerifiers(ctx);
123
+ let currentResults = await runAllVerifiers(ctx, enabledOverrides);
70
124
  for (const r of currentResults) {
71
125
  if (r.notes.length > 0)
72
126
  verifierNotes.push({ verifierId: r.verifierId, notes: r.notes });
73
127
  }
74
- const initialErrors = currentResults.flatMap((r) => r.errors);
128
+ const initialErrorsRaw = currentResults.flatMap((r) => r.errors);
129
+ const initialErrors = partitionErrors(initialErrorsRaw);
75
130
  let currentErrors = initialErrors;
76
131
  for (let pass = 1; pass <= maxPasses; pass++) {
77
132
  const errorsBefore = currentErrors.length;
@@ -129,8 +184,8 @@ export async function runPostEmitFeedback(ctx, reemit, options = {}) {
129
184
  writeFileSync(absFile, newContent);
130
185
  }
131
186
  // Re-run verifiers, then compare per-file error counts.
132
- const newResults = await runAllVerifiers(ctx);
133
- let newErrors = newResults.flatMap((r) => r.errors);
187
+ const newResults = await runAllVerifiers(ctx, enabledOverrides);
188
+ let newErrors = partitionErrors(newResults.flatMap((r) => r.errors));
134
189
  // Rollback pass: any file whose error count INCREASED gets restored.
135
190
  // Only consider files we actually attempted (within the budget).
136
191
  const filesToRestore = [];
@@ -155,8 +210,8 @@ export async function runPostEmitFeedback(ctx, reemit, options = {}) {
155
210
  }
156
211
  // Re-run verifiers one more time so the reported `errorsAfter`
157
212
  // reflects the post-rollback state.
158
- const finalResults = await runAllVerifiers(ctx);
159
- newErrors = finalResults.flatMap((r) => r.errors);
213
+ const finalResults = await runAllVerifiers(ctx, enabledOverrides);
214
+ newErrors = partitionErrors(finalResults.flatMap((r) => r.errors));
160
215
  }
161
216
  passResult.errorsAfter = newErrors.length;
162
217
  passes.push(passResult);
@@ -172,6 +227,7 @@ export async function runPostEmitFeedback(ctx, reemit, options = {}) {
172
227
  finalErrors: currentErrors,
173
228
  passes,
174
229
  verifierNotes,
230
+ specGaps,
175
231
  };
176
232
  }
177
233
  //# sourceMappingURL=feedback-runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-runner.js","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/feedback-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feedback-runner.js","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/feedback-runner.ts"],"names":[],"mappings":"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"}
@@ -9,9 +9,11 @@
9
9
  * See `specverse-self/docs/proposals/...` (TBD) for the design rationale
10
10
  * + empirical evidence from idle-meta 2026-05-13.
11
11
  */
12
- export { type PostEmitVerifier, type VerifyContext, type VerifyError, type VerifyResult, type OwnerMapping, } from './types.js';
12
+ export { type PostEmitVerifier, type VerifyContext, type VerifyError, type VerifyResult, type OwnerMapping, type TreatmentStrategy, type TreatmentSelector, type SpecGapEntry, } from './types.js';
13
13
  export { VERIFIERS, runAllVerifiers, findVerifier, } from './verifier-manifest.js';
14
- export { runPostEmitFeedback, defaultMapFileToOwner, type Reemit, type ReemitRequest, type FeedbackRunOptions, type FeedbackRunResult, type PassResult, } from './feedback-runner.js';
14
+ export { runPostEmitFeedback, defaultMapFileToOwner, defaultTreatmentSelector, type Reemit, type ReemitRequest, type FeedbackRunOptions, type FeedbackRunResult, type PassResult, } from './feedback-runner.js';
15
15
  export { TSC_VERIFIER } from './verifiers/tsc.js';
16
16
  export { buildLlmReemit, formatFeedbackPrompt, type BuildReemitOptions, } from './reemit.js';
17
+ export { runDiagnostics, formatSummaryLine, appendSpecGaps, formatSpecGapLine, type RealizeQualitySidecar, type RealizeQualitySummary, type OwnerQualityEntry, type OwnerStubIssue, } from './diagnostics.js';
18
+ export { STUB_COMPLETENESS_VERIFIER } from './verifiers/stub-completeness.js';
17
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,eAAe,EACf,YAAY,GACb,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,UAAU,GAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,eAAe,EACf,YAAY,GACb,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,UAAU,GAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC"}
@@ -10,7 +10,9 @@
10
10
  * + empirical evidence from idle-meta 2026-05-13.
11
11
  */
12
12
  export { VERIFIERS, runAllVerifiers, findVerifier, } from './verifier-manifest.js';
13
- export { runPostEmitFeedback, defaultMapFileToOwner, } from './feedback-runner.js';
13
+ export { runPostEmitFeedback, defaultMapFileToOwner, defaultTreatmentSelector, } from './feedback-runner.js';
14
14
  export { TSC_VERIFIER } from './verifiers/tsc.js';
15
15
  export { buildLlmReemit, formatFeedbackPrompt, } from './reemit.js';
16
+ export { runDiagnostics, formatSummaryLine, appendSpecGaps, formatSpecGapLine, } from './diagnostics.js';
17
+ export { STUB_COMPLETENESS_VERIFIER } from './verifiers/stub-completeness.js';
16
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,OAAO,EACL,SAAS,EACT,eAAe,EACf,YAAY,GACb,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GAMtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EACL,cAAc,EACd,oBAAoB,GAErB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH,OAAO,EACL,SAAS,EACT,eAAe,EACf,YAAY,GACb,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GAMzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EACL,cAAc,EACd,oBAAoB,GAErB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,iBAAiB,GAKlB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC"}
@@ -44,6 +44,20 @@ export interface BuildReemitOptions {
44
44
  * convention, γ-stub shape).
45
45
  */
46
46
  skills?: string[];
47
+ /**
48
+ * Optional context loader (Phase 3 of
49
+ * 2026-05-13-VERIFIER-DIAGNOSTIC-TREATMENT-SPLIT).
50
+ *
51
+ * For each owner whose file is being re-emitted, return the per-owner
52
+ * realize-context snapshot (TARGET RUNTIME + [PRE-BAKED] step bullets
53
+ * + cross-service surface + capabilities) as a markdown blob, or null
54
+ * if no snapshot exists. The returned blob is prepended to the
55
+ * reemit user prompt — same shape the original per-owner emit used.
56
+ *
57
+ * The default-built loader (in realize/index.ts) reads from
58
+ * `<outputDir>/.realize-context/<Owner>.md`. Tests may inject fakes.
59
+ */
60
+ contextLoader?: (ownerName: string) => string | null;
47
61
  }
48
62
  /**
49
63
  * Build a `Reemit` callback that uses the provided LLM model.
@@ -55,7 +69,14 @@ export declare function buildLlmReemit(options: BuildReemitOptions): Reemit;
55
69
  * Format the feedback prompt body. Caller's LLM provider (e.g.
56
70
  * claude-cli) loads the realize-emit skill as system context.
57
71
  *
72
+ * The optional `ownerContext` (Phase 3) is the per-owner realize-context
73
+ * snapshot — TARGET RUNTIME + [PRE-BAKED] step bullets + cross-service
74
+ * surface + capabilities — prepended to the prompt so the LLM sees the
75
+ * same input the original per-owner emit had. Without this, smaller
76
+ * models (Ollama / MarrBox) hallucinate cross-file calls; with it,
77
+ * they have the canonical contract to anchor against.
78
+ *
58
79
  * Exported for tests + so callers can override the prompt shape.
59
80
  */
60
- export declare function formatFeedbackPrompt(req: ReemitRequest): string;
81
+ export declare function formatFeedbackPrompt(req: ReemitRequest, ownerContext?: string | null): string;
61
82
  //# sourceMappingURL=reemit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reemit.d.ts","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/reemit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAGxC,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGlE,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,KAAK,EAAE,aAAa,CAAC;IACrB;6BACyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;gCAE4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA4ClE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAqB/D"}
1
+ {"version":3,"file":"reemit.d.ts","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/reemit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAGxC,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGlE,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,KAAK,EAAE,aAAa,CAAC;IACrB;6BACyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;gCAE4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACtD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA8ClE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,aAAa,EAClB,YAAY,GAAE,MAAM,GAAG,IAAW,GACjC,MAAM,CAiCR"}
@@ -32,6 +32,7 @@ export function buildLlmReemit(options) {
32
32
  const maxAttempts = options.maxAttempts ?? 1;
33
33
  const timeoutMs = options.timeoutMs ?? 3 * 60_000;
34
34
  const skills = options.skills ?? ['realize-emit'];
35
+ const contextLoader = options.contextLoader;
35
36
  // Provider-aware skill inlining: claude-cli auto-loads skills via the
36
37
  // CLI's filesystem resolution; everyone else needs the skill content
37
38
  // prepended to the system prompt. Compute once at build time — the
@@ -39,7 +40,8 @@ export function buildLlmReemit(options) {
39
40
  const providerId = resolveProviderId();
40
41
  const systemPrompt = assembleSystemWithSkills('', providerId, skills);
41
42
  return async (req) => {
42
- const prompt = formatFeedbackPrompt(req);
43
+ const ownerContext = contextLoader?.(req.ownerName) ?? null;
44
+ const prompt = formatFeedbackPrompt(req, ownerContext);
43
45
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
44
46
  try {
45
47
  const result = await Promise.race([
@@ -74,28 +76,28 @@ export function buildLlmReemit(options) {
74
76
  * Format the feedback prompt body. Caller's LLM provider (e.g.
75
77
  * claude-cli) loads the realize-emit skill as system context.
76
78
  *
79
+ * The optional `ownerContext` (Phase 3) is the per-owner realize-context
80
+ * snapshot — TARGET RUNTIME + [PRE-BAKED] step bullets + cross-service
81
+ * surface + capabilities — prepended to the prompt so the LLM sees the
82
+ * same input the original per-owner emit had. Without this, smaller
83
+ * models (Ollama / MarrBox) hallucinate cross-file calls; with it,
84
+ * they have the canonical contract to anchor against.
85
+ *
77
86
  * Exported for tests + so callers can override the prompt shape.
78
87
  */
79
- export function formatFeedbackPrompt(req) {
88
+ export function formatFeedbackPrompt(req, ownerContext = null) {
80
89
  const errorLines = req.errors
81
90
  .map(formatError)
82
91
  .join('\n');
83
- return [
84
- `Re-emit the entire contents of \`${req.file}\`.`,
85
- '',
86
- `Your previous emission had the following compile / lint errors:`,
87
- '',
88
- errorLines,
89
- '',
90
- `Previous file content (re-emit this with the errors fixed):`,
91
- '',
92
- '```typescript',
93
- req.previousContent,
94
- '```',
95
- '',
96
- `Fix the errors and emit the ENTIRE updated file inside one \`\`\`typescript code block.`,
97
- `Do not change any logic beyond what's needed to fix the errors.`,
98
- ].join('\n');
92
+ const parts = [];
93
+ if (ownerContext) {
94
+ parts.push(ownerContext);
95
+ parts.push('');
96
+ parts.push('---');
97
+ parts.push('');
98
+ }
99
+ parts.push(`Re-emit the entire contents of \`${req.file}\`.`, '', `Your previous emission had the following compile / lint errors:`, '', errorLines, '', `Previous file content (re-emit this with the errors fixed):`, '', '```typescript', req.previousContent, '```', '', `Fix the errors and emit the ENTIRE updated file inside one \`\`\`typescript code block.`, `Honour the [PRE-BAKED] step bodies above verbatim where present; do not paraphrase.`, `Do not change any logic beyond what's needed to fix the errors.`);
100
+ return parts.join('\n');
99
101
  }
100
102
  function formatError(e) {
101
103
  const pos = e.line !== undefined
@@ -1 +1 @@
1
- {"version":3,"file":"reemit.js","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/reemit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AA4B/D;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAA2B;IACxD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,GAAG,MAAM,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC;IAElD,sEAAsE;IACtE,qEAAqE;IACrE,mEAAmE;IACnE,kCAAkC;IAClC,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,wBAAwB,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAEtE,OAAO,KAAK,EAAE,GAAkB,EAA0B,EAAE;QAC1D,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAEzC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;oBAChC,YAAY,CAAC;wBACX,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,MAAM;wBACN,2DAA2D;wBAC3D,uDAAuD;wBACvD,cAAc;wBACd,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClD,CAAC;oBACF,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,SAAS,CAAC,CACjE;iBACF,CAAC,CAAC;gBAEH,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,IAAI,OAAO,GAAG,CAAC,GAAG,WAAW;wBAAE,SAAS;oBACxC,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,OAAO,GAAG,CAAC,GAAG,WAAW;oBAAE,SAAS;gBACxC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAkB;IACrD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM;SAC1B,GAAG,CAAC,WAAW,CAAC;SAChB,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;QACL,oCAAoC,GAAG,CAAC,IAAI,KAAK;QACjD,EAAE;QACF,iEAAiE;QACjE,EAAE;QACF,UAAU;QACV,EAAE;QACF,6DAA6D;QAC7D,EAAE;QACF,eAAe;QACf,GAAG,CAAC,eAAe;QACnB,KAAK;QACL,EAAE;QACF,yFAAyF;QACzF,iEAAiE;KAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,CAAc;IACjC,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS;QAC9B,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACvD,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,IAAY;IAC1C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,OAAO,GAAG,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAE,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"reemit.js","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/reemit.ts"],"names":[],"mappings":"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"}
@@ -135,4 +135,53 @@ export interface OwnerMapping {
135
135
  * per-owner LLM emit — those should NOT receive feedback re-emits). */
136
136
  ownerName: string | null;
137
137
  }
138
+ /**
139
+ * Per-error fix strategy. Phase 2 of
140
+ * 2026-05-13-VERIFIER-DIAGNOSTIC-TREATMENT-SPLIT — different verifier
141
+ * errors need different fix strategies, not a single "always reemit"
142
+ * path:
143
+ *
144
+ * - `auto-reemit`: include this error in the file's reemit prompt;
145
+ * the LLM should try to fix it. Right for tsc errors (unambiguous
146
+ * fix) + γ-fallback / trivial-return / empty-body stubs (LLM never
147
+ * produced real output the first time; a second try with focused
148
+ * context is high-success).
149
+ *
150
+ * - `surface-spec-gap`: do NOT reemit; surface the error to the user
151
+ * via the `realize-quality.json` sidecar (`specGaps` field).
152
+ * Right for STUB002 (LLM-throw stubs) where the LLM already
153
+ * signaled a context gap on the original emit — re-prompting
154
+ * either no-ops or hallucinates cross-file regressions (measured
155
+ * on idle-meta 2026-05-13 at engines 6.54.0).
156
+ *
157
+ * - `skip`: ignore entirely. Right for unmappable errors (already
158
+ * filtered) and for future categories the framework doesn't know
159
+ * how to treat.
160
+ */
161
+ export type TreatmentStrategy = 'auto-reemit' | 'surface-spec-gap' | 'skip';
162
+ /**
163
+ * Decides how each verifier error should be treated. The default
164
+ * selector lives in `feedback-runner.ts::defaultTreatmentSelector`;
165
+ * callers may override for advanced cases (testing, custom verifiers,
166
+ * different LLM tolerance profiles).
167
+ */
168
+ export type TreatmentSelector = (error: VerifyError) => TreatmentStrategy;
169
+ /**
170
+ * A single spec-level gap surfaced from a verifier error that the
171
+ * framework chose NOT to auto-fix. Goes into the realize-quality.json
172
+ * sidecar's `specGaps` array; users read it and decide whether to
173
+ * adjust the spec/manifest, switch providers, or hand-edit.
174
+ */
175
+ export interface SpecGapEntry {
176
+ /** Owner name (e.g. "AuthController"). null when unmappable. */
177
+ ownerName: string | null;
178
+ /** Source file path, relative to outputDir. */
179
+ file: string;
180
+ line?: number;
181
+ col?: number;
182
+ /** Verifier code (e.g. "STUB002"). */
183
+ code: string;
184
+ /** Verifier-formatted message — directly suitable for user reading. */
185
+ message: string;
186
+ }
138
187
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb;yEACqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB;;+EAE2E;IAC3E,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB;;mBAEe;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B;mDAC+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB;kEAC8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;uEACmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gEAAgE;IAChE,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;IACzC,0EAA0E;IAC1E,MAAM,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACvD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb;;4EAEwE;IACxE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb;yEACqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB;;+EAE2E;IAC3E,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB;;mBAEe;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B;mDAC+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB;kEAC8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;uEACmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gEAAgE;IAChE,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;IACzC,0EAA0E;IAC1E,MAAM,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACvD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb;;4EAEwE;IACxE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,kBAAkB,GAAG,MAAM,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,iBAAiB,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"verifier-manifest.d.ts","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/verifier-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGhF,eAAO,MAAM,SAAS,EAAE,gBAAgB,EAOvC,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,EAClB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,OAAO,CAAC,YAAY,EAAE,CAAC,CAqBzB;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAErE"}
1
+ {"version":3,"file":"verifier-manifest.d.ts","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/verifier-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIhF,eAAO,MAAM,SAAS,EAAE,gBAAgB,EAQvC,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,EAClB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,OAAO,CAAC,YAAY,EAAE,CAAC,CAqBzB;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAErE"}
@@ -1,6 +1,8 @@
1
1
  import { TSC_VERIFIER } from './verifiers/tsc.js';
2
+ import { STUB_COMPLETENESS_VERIFIER } from './verifiers/stub-completeness.js';
2
3
  export const VERIFIERS = [
3
4
  TSC_VERIFIER,
5
+ STUB_COMPLETENESS_VERIFIER,
4
6
  // Future:
5
7
  // PY_MYPY_VERIFIER — `mypy --strict src/`
6
8
  // GO_VET_VERIFIER — `go vet ./...`
@@ -1 +1 @@
1
- {"version":3,"file":"verifier-manifest.js","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/verifier-manifest.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,MAAM,SAAS,GAAuB;IAC3C,YAAY;IACZ,UAAU;IACV,6CAA6C;IAC7C,uCAAuC;IACvC,yCAAyC;IACzC,8CAA8C;CAC/C,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAkB,EAClB,gBAA8B;IAE9B,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,KAAK,KAAK,CAAC;QACtD,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;QAC/D,IAAI,CAAC,gBAAgB,IAAI,CAAC,iBAAiB;YAAE,SAAS;QACtD,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,SAAS;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC;gBACP,UAAU,EAAE,CAAC,CAAC,EAAE;gBAChB,UAAU,EAAE,CAAC;gBACb,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;aACpE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"verifier-manifest.js","sourceRoot":"","sources":["../../../src/realize/post-emit-verify/verifier-manifest.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAE9E,MAAM,CAAC,MAAM,SAAS,GAAuB;IAC3C,YAAY;IACZ,0BAA0B;IAC1B,UAAU;IACV,6CAA6C;IAC7C,uCAAuC;IACvC,yCAAyC;IACzC,8CAA8C;CAC/C,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAkB,EAClB,gBAA8B;IAE9B,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,KAAK,KAAK,CAAC;QACtD,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;QAC/D,IAAI,CAAC,gBAAgB,IAAI,CAAC,iBAAiB;YAAE,SAAS;QACtD,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,SAAS;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC;gBACP,UAAU,EAAE,CAAC,CAAC,EAAE;gBAChB,UAAU,EAAE,CAAC;gBACb,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;aACpE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC"}