@specverse/engines 6.60.1 → 6.65.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 (53) 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/services/templates/_shared/step-matching.js +11 -0
  16. package/dist/libs/instance-factories/services/templates/mongodb-native/step-conventions.js +39 -19
  17. package/dist/libs/instance-factories/services/templates/postgres-native/step-conventions.js +35 -18
  18. package/dist/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.js +7 -3
  19. package/dist/libs/instance-factories/services/templates/prisma/step-conventions.js +34 -12
  20. package/dist/libs/instance-factories/services/templates/shared-patterns.js +5 -5
  21. package/dist/realize/index.d.ts.map +1 -1
  22. package/dist/realize/index.js +62 -2
  23. package/dist/realize/index.js.map +1 -1
  24. package/dist/realize/per-action-recovery.d.ts.map +1 -1
  25. package/dist/realize/per-action-recovery.js +6 -19
  26. package/dist/realize/per-action-recovery.js.map +1 -1
  27. package/dist/realize/per-owner-emit.d.ts +40 -0
  28. package/dist/realize/per-owner-emit.d.ts.map +1 -1
  29. package/dist/realize/per-owner-emit.js +154 -4
  30. package/dist/realize/per-owner-emit.js.map +1 -1
  31. package/dist/realize/per-owner-runner.d.ts.map +1 -1
  32. package/dist/realize/per-owner-runner.js +15 -28
  33. package/dist/realize/per-owner-runner.js.map +1 -1
  34. package/dist/realize/post-emit-verify/feedback-runner.d.ts +2 -1
  35. package/dist/realize/post-emit-verify/feedback-runner.d.ts.map +1 -1
  36. package/dist/realize/post-emit-verify/feedback-runner.js +2 -1
  37. package/dist/realize/post-emit-verify/feedback-runner.js.map +1 -1
  38. package/dist/realize/post-emit-verify/verifiers/stub-completeness.d.ts +43 -1
  39. package/dist/realize/post-emit-verify/verifiers/stub-completeness.d.ts.map +1 -1
  40. package/dist/realize/post-emit-verify/verifiers/stub-completeness.js +129 -4
  41. package/dist/realize/post-emit-verify/verifiers/stub-completeness.js.map +1 -1
  42. package/libs/instance-factories/services/templates/_shared/step-matching.ts +43 -0
  43. package/libs/instance-factories/services/templates/mongodb-native/step-conventions.ts +39 -19
  44. package/libs/instance-factories/services/templates/postgres-native/step-conventions.ts +35 -18
  45. package/libs/instance-factories/services/templates/prisma/__tests__/step-conventions-create.test.ts +184 -0
  46. package/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.ts +16 -3
  47. package/libs/instance-factories/services/templates/prisma/step-conventions.ts +34 -12
  48. package/libs/instance-factories/services/templates/shared-patterns.ts +20 -10
  49. package/package.json +1 -1
  50. package/libs/instance-factories/services/templates/_shared/step-matching.d.ts +0 -39
  51. package/libs/instance-factories/services/templates/_shared/step-matching.d.ts.map +0 -1
  52. package/libs/instance-factories/services/templates/_shared/step-matching.js +0 -90
  53. package/libs/instance-factories/services/templates/_shared/step-matching.js.map +0 -1
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAuFzD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,CAAC,GAAG,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAkB;IACzD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,kBAAkB,CAAC;IACxD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,MAAqB;IAC9C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,MAAM,GAAG,EAAE,CAAC;YAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAqB,EAAE,IAAY;IAC5D,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;YAAE,CAAC,EAAE,CAAC;IACjD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAkB,EAClB,MAAc,EACd,UAA8B,EAAE;IAEhC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;IACzC,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC;IACtD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,qBAAqB,CAAC;IACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAClD,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,wBAAwB,CAAC;IAChF,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,aAAa,GAAmD,EAAE,CAAC;IACzE,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC;;;wCAGoC;IACpC,SAAS,eAAe,CAAC,MAAqB;QAC5C,MAAM,UAAU,GAAkB,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;gBACpC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACtB,QAAQ,CAAC,IAAI,CAAC;wBACZ,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;wBACjC,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjD,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9C,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;qBACnB,CAAC,CAAC;gBACL,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,KAAK,MAAM;gBAAE,SAAS;YAClC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,yBAAyB;IACzB,IAAI,cAAc,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,aAAa,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAExD,IAAI,aAAa,GAAG,aAAa,CAAC;IAClC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC;QAC1C,IAAI,YAAY,KAAK,CAAC;YAAE,MAAM;QAE9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,UAAU,GAAe;YAC7B,UAAU,EAAE,IAAI;YAChB,YAAY;YACZ,WAAW,EAAE,YAAY;YACzB,eAAe,EAAE,CAAC;YAClB,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC;YAClB,gBAAgB,EAAE,CAAC;YACnB,gBAAgB,EAAE,CAAC;YACnB,kBAAkB,EAAE,CAAC;YACrB,gBAAgB,EAAE,CAAC;SACpB,CAAC;QAEF,iEAAiE;QACjE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE1C,mEAAmE;QACnE,+DAA+D;QAC/D,+CAA+C;QAC/C,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACtD,UAAU,CAAC,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC;QAEhD,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,UAAU,CAAC,gBAAgB,EAAE,CAAC;gBAC9B,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,eAAuB,CAAC;YAC5B,IAAI,CAAC;gBACH,eAAe,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,CAAC,kBAAkB,EAAE,CAAC;gBAChC,SAAS;YACX,CAAC;YAED,UAAU,CAAC,eAAe,EAAE,CAAC;YAE7B,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC;gBAC9B,SAAS;gBACT,IAAI;gBACJ,MAAM,EAAE,UAAU;gBAClB,eAAe;aAChB,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,UAAU,CAAC,kBAAkB,EAAE,CAAC;gBAChC,SAAS;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACnC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACrC,CAAC;QAED,wDAAwD;QACxD,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAChE,IAAI,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAErE,qEAAqE;QACrE,iEAAiE;QACjE,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YACjC,MAAM,KAAK,GAAG,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACjD,IAAI,KAAK,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAChC,CAAC;iBAAM,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;gBAC1B,UAAU,CAAC,cAAc,EAAE,CAAC;YAC9B,CAAC;iBAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACzC,UAAU,CAAC,eAAe,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC1C,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC;YAC7C,CAAC;YACD,+DAA+D;YAC/D,oCAAoC;YACpC,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YAClE,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,cAAc,GAAG,UAAU,CAAC;QAC5B,aAAa,GAAG,SAAS,CAAC;QAE1B,6DAA6D;QAC7D,oBAAoB;QACpB,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,YAAY;YAAE,MAAM;IAC/D,CAAC;IAED,OAAO;QACL,aAAa;QACb,WAAW,EAAE,aAAa;QAC1B,MAAM;QACN,aAAa;QACb,QAAQ;KACT,CAAC;AACJ,CAAC"}
@@ -45,6 +45,7 @@ export declare const STUB_CODES: {
45
45
  readonly LLM_THROW: "STUB002";
46
46
  readonly TRIVIAL_RETURN: "STUB003";
47
47
  readonly EMPTY_BODY: "STUB004";
48
+ readonly MISPLACED_BRACE: "STUB005";
48
49
  };
49
50
  /**
50
51
  * Find every top-level `export async function NAME(...): Promise<X> {`
@@ -63,6 +64,8 @@ interface ExtractedFunction {
63
64
  declLine: number;
64
65
  /** 1-based line number of the first body line (after the opening `{`). */
65
66
  bodyStartLine: number;
67
+ /** 1-based line number of the closing `}` that ends the body. */
68
+ endLine: number;
66
69
  }
67
70
  export declare function extractAsyncFunctions(source: string): ExtractedFunction[];
68
71
  /**
@@ -71,9 +74,48 @@ export declare function extractAsyncFunctions(source: string): ExtractedFunction
71
74
  */
72
75
  export declare function stripCommentsAndBlanks(body: string): string;
73
76
  export interface StubMatch {
74
- kind: 'gamma-fallback' | 'llm-throw' | 'trivial-return' | 'empty';
77
+ kind: 'gamma-fallback' | 'llm-throw' | 'trivial-return' | 'empty' | 'misplaced-brace';
75
78
  code: string;
79
+ /** For 'misplaced-brace': a sample of the orphan code that follows
80
+ * the misplaced `}`. Surfaced to the LLM in the reemit prompt so it
81
+ * knows exactly which lines were displaced. */
82
+ orphanPreview?: string;
76
83
  }
84
+ /**
85
+ * Detect the "misplaced `}`" emission pattern surfaced by marrbox on
86
+ * `GameConditionController.loadGameData` (2026-05-14). When the LLM
87
+ * emits a stray `}` right after the [PRE-BAKED] comment block, the
88
+ * brace-walker (correctly) treats it as the function's end. The
89
+ * function body classifies as `empty`, but the steps that were meant
90
+ * to be inside the body are now orphan top-level code:
91
+ *
92
+ * export async function loadGameData(_input: any): Promise<any> {
93
+ * // [PRE-BAKED] Step 1: ...
94
+ * // TODO: ...
95
+ * } ← misplaced
96
+ * // [WRITE] Step 2: ... ← orphan
97
+ * const v3BaseUrl = ...; ← orphan
98
+ * return { ... }; ← orphan, tsc TS1108
99
+ *
100
+ * The plain STUB004 message ("empty body") gives the LLM no clue why
101
+ * its previous emission was wrong; the reemit typically repeats the
102
+ * same mistake. STUB005's message names the specific shape so the
103
+ * LLM can correct the brace placement.
104
+ *
105
+ * Heuristic: between `fn.endLine + 1` and `nextDeclLine - 1` (or EOF
106
+ * if no next function), strip comments + blanks; if any non-trivial
107
+ * line remains AND we see at least one of:
108
+ * - `// [WRITE]` or `// [PRE-BAKED]` marker (these belong INSIDE
109
+ * function bodies; their presence at top level is diagnostic)
110
+ * - a top-level `return` statement (illegal TS — TS1108)
111
+ * - a top-level `const`/`let`/`var` declaration that isn't followed
112
+ * by `export`/`function` (i.e. not a module-level binding)
113
+ * → it's misplaced-brace orphan code.
114
+ *
115
+ * Returns a preview of the first ~5 orphan lines, or `null` if not
116
+ * misplaced-brace.
117
+ */
118
+ export declare function detectMisplacedBrace(source: string, fn: ExtractedFunction, nextDeclLine: number | null): string | null;
77
119
  /**
78
120
  * Classify a function body as a stub (or not). Conservative: requires
79
121
  * the body to be a single-statement match to avoid false positives on
@@ -1 +1 @@
1
- {"version":3,"file":"stub-completeness.d.ts","sourceRoot":"","sources":["../../../../src/realize/post-emit-verify/verifiers/stub-completeness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,aAAa,CAAC;AAErB;;4BAE4B;AAC5B,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAQX;;;;;;;;;GASG;AACH,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAuFzE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAaD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,gBAAgB,GAAG,WAAW,GAAG,gBAAgB,GAAG,OAAO,CAAC;IAClE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAwB3D;AA2CD,eAAO,MAAM,0BAA0B,EAAE,gBAoExC,CAAC"}
1
+ {"version":3,"file":"stub-completeness.d.ts","sourceRoot":"","sources":["../../../../src/realize/post-emit-verify/verifiers/stub-completeness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,aAAa,CAAC;AAErB;;4BAE4B;AAC5B,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAQX;;;;;;;;;GASG;AACH,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,aAAa,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAwFzE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAaD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,gBAAgB,GAAG,WAAW,GAAG,gBAAgB,GAAG,OAAO,GAAG,iBAAiB,CAAC;IACtF,IAAI,EAAE,MAAM,CAAC;IACb;;oDAEgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,iBAAiB,EACrB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,MAAM,GAAG,IAAI,CA8Df;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAwB3D;AAsDD,eAAO,MAAM,0BAA0B,EAAE,gBAuFxC,CAAC"}
@@ -46,6 +46,7 @@ export const STUB_CODES = {
46
46
  LLM_THROW: 'STUB002', // LLM emitted "throw not implemented"
47
47
  TRIVIAL_RETURN: 'STUB003', // LLM emitted `return null|undefined|{}|[]`
48
48
  EMPTY_BODY: 'STUB004', // body is whitespace/comments only
49
+ MISPLACED_BRACE: 'STUB005', // empty body + orphan top-level code follows
49
50
  };
50
51
  /** Resolve the behaviors directory tsc + this verifier scan. */
51
52
  function resolveBehaviorsDir(ctx) {
@@ -141,6 +142,7 @@ export function extractAsyncFunctions(source) {
141
142
  body,
142
143
  declLine: i + 1,
143
144
  bodyStartLine: bodyStartLineIdx + 1,
145
+ endLine: endLineIdx + 1,
144
146
  });
145
147
  // Skip past the end so we don't re-scan content inside the body.
146
148
  i = endLineIdx;
@@ -168,6 +170,103 @@ export function stripCommentsAndBlanks(body) {
168
170
  const GAMMA_FALLBACK_RE = /^throw new Error\s*\(\s*["'`].*?not implemented \((?:per-owner emit|per-action recovery) fell back\).*?["'`]\s*\)\s*;?$/s;
169
171
  const LLM_THROW_RE = /^throw new Error\s*\(\s*["'`][^"'`]*\b(not\s+implement\w*|not\s+yet|todo|placeholder|stub|requires|fallback|missing|unimplement\w*)\b[^"'`]*["'`]\s*\)\s*;?$/is;
170
172
  const TRIVIAL_RETURN_RE = /^return\s+(?:null|undefined|\{\s*\}|\[\s*\])(\s+as\s+\w+)?\s*;?$/s;
173
+ /**
174
+ * Detect the "misplaced `}`" emission pattern surfaced by marrbox on
175
+ * `GameConditionController.loadGameData` (2026-05-14). When the LLM
176
+ * emits a stray `}` right after the [PRE-BAKED] comment block, the
177
+ * brace-walker (correctly) treats it as the function's end. The
178
+ * function body classifies as `empty`, but the steps that were meant
179
+ * to be inside the body are now orphan top-level code:
180
+ *
181
+ * export async function loadGameData(_input: any): Promise<any> {
182
+ * // [PRE-BAKED] Step 1: ...
183
+ * // TODO: ...
184
+ * } ← misplaced
185
+ * // [WRITE] Step 2: ... ← orphan
186
+ * const v3BaseUrl = ...; ← orphan
187
+ * return { ... }; ← orphan, tsc TS1108
188
+ *
189
+ * The plain STUB004 message ("empty body") gives the LLM no clue why
190
+ * its previous emission was wrong; the reemit typically repeats the
191
+ * same mistake. STUB005's message names the specific shape so the
192
+ * LLM can correct the brace placement.
193
+ *
194
+ * Heuristic: between `fn.endLine + 1` and `nextDeclLine - 1` (or EOF
195
+ * if no next function), strip comments + blanks; if any non-trivial
196
+ * line remains AND we see at least one of:
197
+ * - `// [WRITE]` or `// [PRE-BAKED]` marker (these belong INSIDE
198
+ * function bodies; their presence at top level is diagnostic)
199
+ * - a top-level `return` statement (illegal TS — TS1108)
200
+ * - a top-level `const`/`let`/`var` declaration that isn't followed
201
+ * by `export`/`function` (i.e. not a module-level binding)
202
+ * → it's misplaced-brace orphan code.
203
+ *
204
+ * Returns a preview of the first ~5 orphan lines, or `null` if not
205
+ * misplaced-brace.
206
+ */
207
+ export function detectMisplacedBrace(source, fn, nextDeclLine) {
208
+ const lines = source.split('\n');
209
+ const startIdx = fn.endLine; // 1-based endLine → 0-based first line after = endLine
210
+ const stopIdx = nextDeclLine !== null ? nextDeclLine - 1 : lines.length;
211
+ if (startIdx >= stopIdx)
212
+ return null;
213
+ const range = lines.slice(startIdx, stopIdx);
214
+ // Look for diagnostic markers.
215
+ let hasInsideMarker = false;
216
+ let hasOrphanStatement = false;
217
+ const orphanLines = [];
218
+ for (const raw of range) {
219
+ const trimmed = raw.trim();
220
+ if (trimmed === '')
221
+ continue;
222
+ // Markers that should only appear INSIDE function bodies.
223
+ if (/^\/\/\s*\[(WRITE|PRE-BAKED|PRE_BAKED)\]/.test(trimmed)) {
224
+ hasInsideMarker = true;
225
+ if (orphanLines.length < 5)
226
+ orphanLines.push(trimmed);
227
+ continue;
228
+ }
229
+ // Module-level legal tokens (skip — not orphan).
230
+ if (/^(import|export|function|async\s+function|class|interface|type|enum|declare|\/\/|\/\*|\*)/.test(trimmed)) {
231
+ continue;
232
+ }
233
+ if (trimmed.startsWith('*/') || trimmed.startsWith('*'))
234
+ continue;
235
+ if (trimmed === '}' || trimmed === '};' || trimmed === ');' || trimmed === '})' || trimmed === '});') {
236
+ // Stray closers from orphan bodies. Diagnostic, but not by themselves.
237
+ if (orphanLines.length < 5)
238
+ orphanLines.push(trimmed);
239
+ continue;
240
+ }
241
+ // Statement-level keywords / patterns that are illegal at module top.
242
+ if (/^(return|await|if\s*\(|for\s*\(|while\s*\(|switch\s*\(|throw\s|break|continue)/.test(trimmed)) {
243
+ hasOrphanStatement = true;
244
+ if (orphanLines.length < 5)
245
+ orphanLines.push(trimmed);
246
+ continue;
247
+ }
248
+ // Bare `const`/`let`/`var` could be legal module-level, but in the
249
+ // body of an .ai.ts file (which only contains function declarations)
250
+ // they are diagnostic. Treat as orphan in conjunction with other
251
+ // signals — not on their own.
252
+ if (/^(const|let|var)\s/.test(trimmed)) {
253
+ if (orphanLines.length < 5)
254
+ orphanLines.push(trimmed);
255
+ continue;
256
+ }
257
+ // Identifier-followed-by-call (e.g. `gameDataResponse.edges.forEach`)
258
+ // is also a statement-level pattern, diagnostic when paired with
259
+ // markers above.
260
+ if (/^[A-Za-z_$][\w$]*[.[(]/.test(trimmed)) {
261
+ if (orphanLines.length < 5)
262
+ orphanLines.push(trimmed);
263
+ continue;
264
+ }
265
+ }
266
+ if (!hasInsideMarker && !hasOrphanStatement)
267
+ return null;
268
+ return orphanLines.join('\n');
269
+ }
171
270
  /**
172
271
  * Classify a function body as a stub (or not). Conservative: requires
173
272
  * the body to be a single-statement match to avoid false positives on
@@ -195,7 +294,7 @@ export function classifyBody(body) {
195
294
  return null;
196
295
  }
197
296
  /** Render a feedback-prompt-friendly message for a stub match. */
198
- function messageFor(kind, fnName) {
297
+ function messageFor(kind, fnName, orphanPreview) {
199
298
  switch (kind) {
200
299
  case 'gamma-fallback':
201
300
  return (`Function '${fnName}' is a γ-stub placeholder (per-owner emit fell back). ` +
@@ -209,6 +308,15 @@ function messageFor(kind, fnName) {
209
308
  case 'empty':
210
309
  return (`Function '${fnName}' has an empty body. ` +
211
310
  `Emit a real implementation per the [PRE-BAKED] action contract.`);
311
+ case 'misplaced-brace': {
312
+ const preview = orphanPreview ? `\nOrphan code sample:\n${orphanPreview}` : '';
313
+ return (`Function '${fnName}' has an empty body AND top-level code follows the ` +
314
+ `closing '}'. This is a misplaced-brace bug: the '}' that closes the function ` +
315
+ `was emitted right after the [PRE-BAKED] / [WRITE] step comments, leaving the ` +
316
+ `actual step bodies as illegal top-level statements (tsc TS1108). Fix: place ` +
317
+ `the closing '}' AFTER the last step body — not between the step comments and ` +
318
+ `their implementations.${preview}`);
319
+ }
212
320
  }
213
321
  }
214
322
  /** Recursively list `*.ai.ts` files under a directory. Defensive — the
@@ -269,18 +377,35 @@ export const STUB_COMPLETENESS_VERIFIER = {
269
377
  }
270
378
  const fns = extractAsyncFunctions(source);
271
379
  totalFunctions += fns.length;
272
- for (const fn of fns) {
380
+ for (let fnIdx = 0; fnIdx < fns.length; fnIdx++) {
381
+ const fn = fns[fnIdx];
273
382
  const match = classifyBody(fn.body);
274
383
  if (!match)
275
384
  continue;
385
+ // Promote 'empty' to 'misplaced-brace' when orphan top-level
386
+ // code follows the (apparent) closing `}`. Same severity, same
387
+ // treatment routing — only the message text changes, so the
388
+ // LLM gets a richer diagnostic on reemit.
389
+ let resolvedKind = match.kind;
390
+ let resolvedCode = match.code;
391
+ let orphanPreview;
392
+ if (match.kind === 'empty') {
393
+ const nextDeclLine = fnIdx + 1 < fns.length ? fns[fnIdx + 1].declLine : null;
394
+ const preview = detectMisplacedBrace(source, fn, nextDeclLine);
395
+ if (preview !== null) {
396
+ resolvedKind = 'misplaced-brace';
397
+ resolvedCode = STUB_CODES.MISPLACED_BRACE;
398
+ orphanPreview = preview;
399
+ }
400
+ }
276
401
  totalStubs++;
277
402
  errors.push({
278
403
  file: relative(ctx.outputDir, absFile),
279
404
  line: fn.declLine,
280
405
  col: 1,
281
406
  severity: 'warning',
282
- code: match.code,
283
- message: messageFor(match.kind, fn.name),
407
+ code: resolvedCode,
408
+ message: messageFor(resolvedKind, fn.name, orphanPreview),
284
409
  });
285
410
  }
286
411
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stub-completeness.js","sourceRoot":"","sources":["../../../../src/realize/post-emit-verify/verifiers/stub-completeness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stub-completeness.js","sourceRoot":"","sources":["../../../../src/realize/post-emit-verify/verifiers/stub-completeness.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,49 @@ export function toVar(name: string): string {
30
30
  return name.charAt(0).toLowerCase() + name.slice(1);
31
31
  }
32
32
 
33
+ /**
34
+ * Common English adjectives/articles that can leak into entity-noun
35
+ * extraction from NL spec steps. The matcher's pattern fragments use
36
+ * this to skip a leading adjective when capturing the entity noun, so
37
+ * "Create new Player with…" extracts `Player`, not `new`.
38
+ *
39
+ * Concern-separation note: this is NL-input-side. The TS-output-side
40
+ * counterpart is `TS_RESERVED_WORDS` from `@specverse/types`. Don't
41
+ * merge the two lists — they have distinct consumers and tuning
42
+ * lifecycles. NL adjectives are open-ended (extend as we see leakage);
43
+ * reserved identifiers are fixed by the target language spec.
44
+ */
45
+ export const NL_LEADING_ADJECTIVES: readonly string[] = [
46
+ 'new', 'existing', 'current', 'the', 'a', 'an',
47
+ ];
48
+
49
+ /**
50
+ * Regex fragment for the optional leading-adjective skip, e.g.
51
+ * pattern: new RegExp(`^create\\s+${NL_ADJECTIVE_PREFIX}(\\w+)…`, 'i')
52
+ *
53
+ * Patterns that prefer regex literals can inline the equivalent group:
54
+ * /^create\s+(?:(?:new|existing|current|the|a|an)\s+)?(\w+)…/i
55
+ * — keep this in sync if you do.
56
+ */
57
+ export const NL_ADJECTIVE_PREFIX = `(?:(?:${NL_LEADING_ADJECTIVES.join('|')})\\s+)?`;
58
+
59
+ // Safe-identifier primitives live in `@specverse/types`:
60
+ // - `safeEntityName(name)` → returns the lowerCamel identifier, or
61
+ // null when the name would emit a TS
62
+ // reserved word as an entity reference
63
+ // (`prisma.<X>.create`). Use this in
64
+ // step-conventions' `generateCall` to
65
+ // replace the toVar+predicate pair.
66
+ // - `safeFunctionName(name)` → returns `{ name, reserved }`; on
67
+ // reserved input, name is suffix-renamed
68
+ // (`delete` → `delete_`) and the caller
69
+ // emits a re-export so consumers
70
+ // importing the original name still
71
+ // resolve. Used by the γ-stub renderers.
72
+ // Import directly from `@specverse/types`; this file no longer
73
+ // re-exports the predicate (was `isUnsafeEntityName`, retired in favour
74
+ // of the more expressive primitives).
75
+
33
76
  // #54 (2026-05-10): SharedStepContext, SharedConvention, MatchResult
34
77
  // and MatcherFn are now canonical in @specverse/types. Re-exported here
35
78
  // so existing dynamic-import call sites that grab types from this path
@@ -21,6 +21,7 @@ import {
21
21
  type SharedConvention,
22
22
  type SharedStepContext,
23
23
  } from '../_shared/step-matching.js';
24
+ import { safeEntityName } from '@specverse/types';
24
25
 
25
26
  export type MongoStepConvention = SharedConvention<MongoStepContext>;
26
27
 
@@ -178,7 +179,8 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
178
179
  generateCall: (m, ctx) => {
179
180
  const model = m[1];
180
181
  const field = m[2];
181
- const modelVar = toVar(model);
182
+ const modelVar = safeEntityName(model);
183
+ if (!modelVar) return '';
182
184
  const collection = toCollection(model);
183
185
  const params = ctx.parameterNames || [];
184
186
  const declared = ctx.declaredVars || new Set();
@@ -212,7 +214,8 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
212
214
  const model = m[1];
213
215
  const f1 = m[2];
214
216
  const f2 = m[3];
215
- const modelVar = toVar(model);
217
+ const modelVar = safeEntityName(model);
218
+ if (!modelVar) return '';
216
219
  const collection = toCollection(model);
217
220
  const declared = ctx.declaredVars || new Set();
218
221
  if (declared.has(modelVar)) {
@@ -246,13 +249,19 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
246
249
  },
247
250
 
248
251
  // --- Create model record ---
249
- // Matches: "Create X", "Create new X with ..."
252
+ // Matches: "Create X", "Create new X with ...", "Create existing X with ...".
253
+ // Leading-adjective skip kept in sync with NL_LEADING_ADJECTIVES in
254
+ // _shared/step-matching.ts. Reserved-word safety net via
255
+ // safeEntityName from @specverse/types — returns null when the extracted noun would emit a TS reserved word
256
+ // (e.g. mis-parsed adjectives) by returning '' so the matcher falls
257
+ // through to the AI [WRITE] fallback.
250
258
  {
251
259
  name: 'create',
252
- pattern: /^create\s+(?:new\s+)?(\w+)(?:\s+(?:with\s+)?(.+))?/i,
260
+ pattern: /^create\s+(?:(?:new|existing|current|the|a|an)\s+)?(\w+)(?:\s+(?:with\s+)?(.+))?/i,
253
261
  generateCall: (m, ctx) => {
254
262
  const model = m[1];
255
- const modelVar = toVar(model);
263
+ const modelVar = safeEntityName(model);
264
+ if (!modelVar) return '';
256
265
  const collection = toCollection(model);
257
266
  const params = ctx.parameterNames || [];
258
267
  const declared = ctx.declaredVars || new Set();
@@ -272,12 +281,13 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
272
281
  // lets the AI layer handle it.
273
282
  {
274
283
  name: 'update-field',
275
- pattern: /^update\s+(\w+)\s+(\w+)\s+to\s+(.+)/i,
284
+ pattern: /^update\s+(?:(?:new|existing|current|the|a|an)\s+)?(\w+)\s+(\w+)\s+to\s+(.+)/i,
276
285
  generateCall: (m, ctx) => {
277
286
  const model = m[1];
287
+ const modelVar = safeEntityName(model);
288
+ if (!modelVar) return '';
278
289
  const field = m[2];
279
290
  const rawValue = m[3];
280
- const modelVar = toVar(model);
281
291
  if (!ctx.declaredVars?.has(modelVar)) return ''; // signal "not really matched"
282
292
  const collection = toCollection(model);
283
293
  const val = resolveValue(rawValue, ctx);
@@ -292,11 +302,12 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
292
302
  // --- Update field timestamp (e.g. "Update device lastLoginAt timestamp") ---
293
303
  {
294
304
  name: 'update-field-timestamp',
295
- pattern: /^update\s+(\w+)\s+(\w+)\s+timestamp$/i,
305
+ pattern: /^update\s+(?:(?:new|existing|current|the|a|an)\s+)?(\w+)\s+(\w+)\s+timestamp$/i,
296
306
  generateCall: (m, ctx) => {
297
307
  const model = m[1];
308
+ const modelVar = safeEntityName(model);
309
+ if (!modelVar) return '';
298
310
  const field = m[2];
299
- const modelVar = toVar(model);
300
311
  if (!ctx.declaredVars?.has(modelVar)) return '';
301
312
  const collection = toCollection(model);
302
313
  return ` // Step ${ctx.stepNum}: Update ${model}.${field} timestamp
@@ -310,10 +321,11 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
310
321
  // --- Generic "Update X" (writes args back to record) ---
311
322
  {
312
323
  name: 'update',
313
- pattern: /^update\s+(\w+)(?:\s+(.+))?$/i,
324
+ pattern: /^update\s+(?:(?:new|existing|current|the|a|an)\s+)?(\w+)(?:\s+(.+))?$/i,
314
325
  generateCall: (m, ctx) => {
315
326
  const model = m[1];
316
- const modelVar = toVar(model);
327
+ const modelVar = safeEntityName(model);
328
+ if (!modelVar) return '';
317
329
  if (!ctx.declaredVars?.has(modelVar)) return '';
318
330
  const collection = toCollection(model);
319
331
  return ` // Step ${ctx.stepNum}: Update ${model}
@@ -327,10 +339,11 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
327
339
  // --- Delete model record ---
328
340
  {
329
341
  name: 'delete',
330
- pattern: /^delete\s+(\w+)/i,
342
+ pattern: /^delete\s+(?:(?:new|existing|current|the|a|an)\s+)?(\w+)/i,
331
343
  generateCall: (m, ctx) => {
332
344
  const model = m[1];
333
- const modelVar = toVar(model);
345
+ const modelVar = safeEntityName(model);
346
+ if (!modelVar) return '';
334
347
  if (!ctx.declaredVars?.has(modelVar)) return '';
335
348
  const collection = toCollection(model);
336
349
  return ` // Step ${ctx.stepNum}: Delete ${model}
@@ -349,7 +362,8 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
349
362
  generateCall: (m, ctx) => {
350
363
  const model = m[1];
351
364
  const state = m[2];
352
- const modelVar = toVar(model);
365
+ const modelVar = safeEntityName(model);
366
+ if (!modelVar) return '';
353
367
  if (!ctx.declaredVars?.has(modelVar)) return '';
354
368
  const collection = toCollection(model);
355
369
  return ` // Step ${ctx.stepNum}: Transition ${model} to ${state}
@@ -424,7 +438,8 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
424
438
  pattern: /^(?:persist|save|store)\s+(\w+(?:\s+\w+)?)(?:\s+(?:for|to|record).*)?$/i,
425
439
  generateCall: (m, ctx) => {
426
440
  // m[1] may be "refresh token" — collapse to camelCase + collection
427
- const target = toVar(m[1].replace(/\s+(.)/g, (_, c) => c.toUpperCase()));
441
+ const target = safeEntityName(m[1].replace(/\s+(.)/g, (_, c) => c.toUpperCase()));
442
+ if (!target) return '';
428
443
  const collection = toCollection(target);
429
444
  const recordSrc = mostRecentStepResult(ctx) ?? 'args';
430
445
  return ` // Step ${ctx.stepNum}: Persist ${m[1]}
@@ -442,7 +457,8 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
442
457
  name: 'conditional-create',
443
458
  pattern: /^if\s+(\w+)\s+does\s+not\s+exist,?\s+create\s+new\s+(\w+)(?:\s+with\s+.+)?$/i,
444
459
  generateCall: (m, ctx) => {
445
- const modelVar = toVar(m[1]);
460
+ const modelVar = safeEntityName(m[1]);
461
+ if (!modelVar) return '';
446
462
  const Model = pascal(m[2]);
447
463
  const collection = toCollection(Model);
448
464
  if (!ctx.declaredVars?.has(modelVar)) return ''; // need prior find
@@ -472,7 +488,8 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
472
488
  name: 'conditional-update',
473
489
  pattern: /^if\s+(\w+)\s+exists,?\s+update\s+(\w+)(?:\s+(.+))?$/i,
474
490
  generateCall: (m, ctx) => {
475
- const modelVar = toVar(m[1]);
491
+ const modelVar = safeEntityName(m[1]);
492
+ if (!modelVar) return '';
476
493
  const field = m[2];
477
494
  const collection = toCollection(m[1]);
478
495
  if (!ctx.declaredVars?.has(modelVar)) return '';
@@ -547,7 +564,8 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
547
564
  pattern: /^otherwise\s+create\s+(?:new\s+)?(\w+)\s+record$/i,
548
565
  generateCall: (m, ctx) => {
549
566
  const Model = pascal(m[1]);
550
- const modelVar = toVar(Model);
567
+ const modelVar = safeEntityName(Model);
568
+ if (!modelVar) return '';
551
569
  const collection = toCollection(Model);
552
570
  // The model var was declared (as `let`) by the find that paired
553
571
  // with the prior conditional-update; reassign it here so downstream
@@ -612,9 +630,11 @@ export const MONGO_STEP_CONVENTIONS: MongoStepConvention[] = [
612
630
  generateCall: (m, ctx) => {
613
631
  const service = m[1];
614
632
  const method = m[2];
633
+ const serviceVar = safeEntityName(service);
634
+ if (!serviceVar) return '';
615
635
  const args = (ctx.parameterNames || []).join(', ');
616
636
  return ` // Step ${ctx.stepNum}: Call ${service}.${method}
617
- await (${toVar(service)} as any).${method}({ ${args} });`;
637
+ await (${serviceVar} as any).${method}({ ${args} });`;
618
638
  },
619
639
  },
620
640