@codeyam/codeyam-cli 0.1.0-staging.2a88920 → 0.1.0-staging.4684848

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 (364) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/analyzer-template/package.json +4 -4
  4. package/analyzer-template/packages/ai/index.ts +1 -0
  5. package/analyzer-template/packages/ai/package.json +2 -2
  6. package/analyzer-template/packages/ai/src/lib/analyzeScope.ts +23 -1
  7. package/analyzer-template/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.ts +10 -17
  8. package/analyzer-template/packages/ai/src/lib/astScopes/processExpression.ts +101 -0
  9. package/analyzer-template/packages/ai/src/lib/astScopes/sharedPatterns.ts +28 -0
  10. package/analyzer-template/packages/ai/src/lib/astScopes/types.ts +6 -0
  11. package/analyzer-template/packages/ai/src/lib/dataStructure/ScopeDataStructure.ts +330 -9
  12. package/analyzer-template/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.ts +5 -1
  13. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.ts +11 -2
  14. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.ts +2 -2
  15. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.ts +70 -0
  16. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.ts +140 -14
  17. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.ts +20 -1
  18. package/analyzer-template/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.ts +84 -19
  19. package/analyzer-template/packages/ai/src/lib/dataStructureChunking.ts +33 -15
  20. package/analyzer-template/packages/ai/src/lib/generateEntityDataStructure.ts +58 -3
  21. package/analyzer-template/packages/ai/src/lib/generateEntityScenarioData.ts +299 -5
  22. package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +38 -2
  23. package/analyzer-template/packages/ai/src/lib/generateExecutionFlowsFromConditionals.ts +359 -142
  24. package/analyzer-template/packages/ai/src/lib/isolateScopes.ts +51 -3
  25. package/analyzer-template/packages/ai/src/lib/mergeJsonTypeDefinitions.ts +5 -0
  26. package/analyzer-template/packages/ai/src/lib/promptGenerators/collapseNullableObjects.ts +118 -0
  27. package/analyzer-template/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.ts +24 -4
  28. package/analyzer-template/packages/analyze/index.ts +2 -0
  29. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.ts +69 -3
  30. package/analyzer-template/packages/analyze/src/lib/files/analyze/analyzeEntities.ts +5 -0
  31. package/analyzer-template/packages/analyze/src/lib/files/scenarios/TransformationTracer.ts +1315 -0
  32. package/analyzer-template/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.ts +4 -0
  33. package/analyzer-template/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.ts +59 -26
  34. package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateDataStructure.ts +194 -15
  35. package/analyzer-template/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.ts +372 -57
  36. package/analyzer-template/packages/analyze/src/lib/index.ts +1 -0
  37. package/analyzer-template/packages/database/package.json +1 -1
  38. package/analyzer-template/packages/database/src/lib/analysisBranchToDb.ts +1 -1
  39. package/analyzer-template/packages/database/src/lib/analysisToDb.ts +1 -1
  40. package/analyzer-template/packages/database/src/lib/branchToDb.ts +1 -1
  41. package/analyzer-template/packages/database/src/lib/commitBranchToDb.ts +1 -1
  42. package/analyzer-template/packages/database/src/lib/commitToDb.ts +1 -1
  43. package/analyzer-template/packages/database/src/lib/fileToDb.ts +1 -1
  44. package/analyzer-template/packages/database/src/lib/kysely/db.ts +6 -0
  45. package/analyzer-template/packages/database/src/lib/kysely/tables/debugReportsTable.ts +1 -1
  46. package/analyzer-template/packages/database/src/lib/kysely/tables/labsRequestsTable.ts +52 -0
  47. package/analyzer-template/packages/database/src/lib/projectToDb.ts +1 -1
  48. package/analyzer-template/packages/database/src/lib/saveFiles.ts +1 -1
  49. package/analyzer-template/packages/database/src/lib/scenarioToDb.ts +1 -1
  50. package/analyzer-template/packages/database/src/lib/userScenarioToDb.ts +1 -1
  51. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js +1 -1
  52. package/analyzer-template/packages/github/dist/database/src/lib/analysisBranchToDb.js.map +1 -1
  53. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js +1 -1
  54. package/analyzer-template/packages/github/dist/database/src/lib/analysisToDb.js.map +1 -1
  55. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js +1 -1
  56. package/analyzer-template/packages/github/dist/database/src/lib/branchToDb.js.map +1 -1
  57. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js +1 -1
  58. package/analyzer-template/packages/github/dist/database/src/lib/commitBranchToDb.js.map +1 -1
  59. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js +1 -1
  60. package/analyzer-template/packages/github/dist/database/src/lib/commitToDb.js.map +1 -1
  61. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js +1 -1
  62. package/analyzer-template/packages/github/dist/database/src/lib/fileToDb.js.map +1 -1
  63. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts +2 -0
  64. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.d.ts.map +1 -1
  65. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js +3 -0
  66. package/analyzer-template/packages/github/dist/database/src/lib/kysely/db.js.map +1 -1
  67. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/debugReportsTable.d.ts +1 -1
  68. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts +23 -0
  69. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.d.ts.map +1 -0
  70. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  71. package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  72. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js +1 -1
  73. package/analyzer-template/packages/github/dist/database/src/lib/projectToDb.js.map +1 -1
  74. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js +1 -1
  75. package/analyzer-template/packages/github/dist/database/src/lib/saveFiles.js.map +1 -1
  76. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js +1 -1
  77. package/analyzer-template/packages/github/dist/database/src/lib/scenarioToDb.js.map +1 -1
  78. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts +7 -0
  79. package/analyzer-template/packages/github/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  80. package/analyzer-template/packages/types/src/types/ProjectMetadata.ts +7 -0
  81. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts +7 -0
  82. package/analyzer-template/packages/utils/dist/types/src/types/ProjectMetadata.d.ts.map +1 -1
  83. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.d.ts.map +1 -1
  84. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js +93 -2
  85. package/analyzer-template/packages/utils/dist/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  86. package/analyzer-template/packages/utils/src/lib/fs/rsyncCopy.ts +108 -2
  87. package/analyzer-template/project/constructMockCode.ts +36 -1
  88. package/analyzer-template/project/writeMockDataTsx.ts +174 -12
  89. package/analyzer-template/project/writeScenarioComponents.ts +60 -12
  90. package/analyzer-template/project/writeSimpleRoot.ts +21 -11
  91. package/background/src/lib/local/createLocalAnalyzer.js +1 -1
  92. package/background/src/lib/local/createLocalAnalyzer.js.map +1 -1
  93. package/background/src/lib/virtualized/project/constructMockCode.js +30 -1
  94. package/background/src/lib/virtualized/project/constructMockCode.js.map +1 -1
  95. package/background/src/lib/virtualized/project/writeMockDataTsx.js +156 -8
  96. package/background/src/lib/virtualized/project/writeMockDataTsx.js.map +1 -1
  97. package/background/src/lib/virtualized/project/writeScenarioComponents.js +60 -15
  98. package/background/src/lib/virtualized/project/writeScenarioComponents.js.map +1 -1
  99. package/background/src/lib/virtualized/project/writeSimpleRoot.js +21 -11
  100. package/background/src/lib/virtualized/project/writeSimpleRoot.js.map +1 -1
  101. package/codeyam-cli/scripts/apply-setup.js +180 -0
  102. package/codeyam-cli/scripts/apply-setup.js.map +1 -1
  103. package/codeyam-cli/src/cli.js +2 -0
  104. package/codeyam-cli/src/cli.js.map +1 -1
  105. package/codeyam-cli/src/codeyam-cli.js +18 -2
  106. package/codeyam-cli/src/codeyam-cli.js.map +1 -1
  107. package/codeyam-cli/src/commands/analyze.js +4 -2
  108. package/codeyam-cli/src/commands/analyze.js.map +1 -1
  109. package/codeyam-cli/src/commands/baseline.js +2 -0
  110. package/codeyam-cli/src/commands/baseline.js.map +1 -1
  111. package/codeyam-cli/src/commands/debug.js +2 -0
  112. package/codeyam-cli/src/commands/debug.js.map +1 -1
  113. package/codeyam-cli/src/commands/default.js +31 -20
  114. package/codeyam-cli/src/commands/default.js.map +1 -1
  115. package/codeyam-cli/src/commands/detect-universal-mocks.js +2 -0
  116. package/codeyam-cli/src/commands/detect-universal-mocks.js.map +1 -1
  117. package/codeyam-cli/src/commands/init.js +49 -257
  118. package/codeyam-cli/src/commands/init.js.map +1 -1
  119. package/codeyam-cli/src/commands/memory.js +17 -26
  120. package/codeyam-cli/src/commands/memory.js.map +1 -1
  121. package/codeyam-cli/src/commands/recapture.js +2 -0
  122. package/codeyam-cli/src/commands/recapture.js.map +1 -1
  123. package/codeyam-cli/src/commands/setup-sandbox.js +2 -0
  124. package/codeyam-cli/src/commands/setup-sandbox.js.map +1 -1
  125. package/codeyam-cli/src/commands/setup-simulations.js +284 -0
  126. package/codeyam-cli/src/commands/setup-simulations.js.map +1 -0
  127. package/codeyam-cli/src/commands/test-startup.js +2 -0
  128. package/codeyam-cli/src/commands/test-startup.js.map +1 -1
  129. package/codeyam-cli/src/commands/verify.js +14 -2
  130. package/codeyam-cli/src/commands/verify.js.map +1 -1
  131. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +128 -86
  132. package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
  133. package/codeyam-cli/src/utils/analyzer.js +7 -0
  134. package/codeyam-cli/src/utils/analyzer.js.map +1 -1
  135. package/codeyam-cli/src/utils/backgroundServer.js +9 -0
  136. package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
  137. package/codeyam-cli/src/utils/generateReport.js +2 -2
  138. package/codeyam-cli/src/utils/install-skills.js +57 -54
  139. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  140. package/codeyam-cli/src/utils/labsAutoCheck.js +19 -0
  141. package/codeyam-cli/src/utils/labsAutoCheck.js.map +1 -0
  142. package/codeyam-cli/src/utils/progress.js +7 -0
  143. package/codeyam-cli/src/utils/progress.js.map +1 -1
  144. package/codeyam-cli/src/utils/queue/job.js +4 -0
  145. package/codeyam-cli/src/utils/queue/job.js.map +1 -1
  146. package/codeyam-cli/src/utils/requireSimulations.js +10 -0
  147. package/codeyam-cli/src/utils/requireSimulations.js.map +1 -0
  148. package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js +82 -0
  149. package/codeyam-cli/src/utils/ruleReflection/__tests__/confusionDetector.test.js.map +1 -0
  150. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js +230 -0
  151. package/codeyam-cli/src/utils/ruleReflection/__tests__/contextBuilder.test.js.map +1 -0
  152. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js +67 -0
  153. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/assertRules.js.map +1 -0
  154. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js +105 -0
  155. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/captureFixture.js.map +1 -0
  156. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js +34 -0
  157. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/loadCapturedFixture.js.map +1 -0
  158. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js +162 -0
  159. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/runClaude.js.map +1 -0
  160. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js +75 -0
  161. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/helpers/setupTempProject.js.map +1 -0
  162. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js +378 -0
  163. package/codeyam-cli/src/utils/ruleReflection/__tests__/integration/ruleReflectionE2E.test.js.map +1 -0
  164. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js +115 -0
  165. package/codeyam-cli/src/utils/ruleReflection/__tests__/promptBuilder.test.js.map +1 -0
  166. package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js +127 -0
  167. package/codeyam-cli/src/utils/ruleReflection/__tests__/transcriptParser.test.js.map +1 -0
  168. package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js +50 -0
  169. package/codeyam-cli/src/utils/ruleReflection/confusionDetector.js.map +1 -0
  170. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js +116 -0
  171. package/codeyam-cli/src/utils/ruleReflection/contextBuilder.js.map +1 -0
  172. package/codeyam-cli/src/utils/ruleReflection/index.js +5 -0
  173. package/codeyam-cli/src/utils/ruleReflection/index.js.map +1 -0
  174. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js +44 -0
  175. package/codeyam-cli/src/utils/ruleReflection/promptBuilder.js.map +1 -0
  176. package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js +85 -0
  177. package/codeyam-cli/src/utils/ruleReflection/transcriptParser.js.map +1 -0
  178. package/codeyam-cli/src/utils/ruleReflection/types.js +5 -0
  179. package/codeyam-cli/src/utils/ruleReflection/types.js.map +1 -0
  180. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js +293 -0
  181. package/codeyam-cli/src/utils/rules/__tests__/ruleState.test.js.map +1 -0
  182. package/codeyam-cli/src/utils/rules/index.js +1 -0
  183. package/codeyam-cli/src/utils/rules/index.js.map +1 -1
  184. package/codeyam-cli/src/utils/rules/parser.js +2 -25
  185. package/codeyam-cli/src/utils/rules/parser.js.map +1 -1
  186. package/codeyam-cli/src/utils/rules/ruleState.js +150 -0
  187. package/codeyam-cli/src/utils/rules/ruleState.js.map +1 -0
  188. package/codeyam-cli/src/utils/rules/staleness.js +16 -11
  189. package/codeyam-cli/src/utils/rules/staleness.js.map +1 -1
  190. package/codeyam-cli/src/utils/serverState.js +37 -10
  191. package/codeyam-cli/src/utils/serverState.js.map +1 -1
  192. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +21 -44
  193. package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
  194. package/codeyam-cli/src/webserver/app/lib/database.js +15 -3
  195. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  196. package/codeyam-cli/src/webserver/backgroundServer.js +24 -0
  197. package/codeyam-cli/src/webserver/backgroundServer.js.map +1 -1
  198. package/codeyam-cli/src/webserver/build/client/assets/CopyButton-CQ-wF3Tv.js +1 -0
  199. package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-DsN1wKrm.js → EntityItem-HdckCi0m.js} +1 -1
  200. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeBadge-DLqD3qNt.js → EntityTypeBadge-Dh5RJMOE.js} +1 -1
  201. package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-Ba2JVPzP.js → EntityTypeIcon-BnjjBHJu.js} +1 -1
  202. package/codeyam-cli/src/webserver/build/client/assets/{InlineSpinner-C8lyxW9k.js → InlineSpinner-CUSfu6W5.js} +1 -1
  203. package/codeyam-cli/src/webserver/build/client/assets/{InteractivePreview-aht4aafF.js → InteractivePreview-Coll1aD6.js} +2 -2
  204. package/codeyam-cli/src/webserver/build/client/assets/{LibraryFunctionPreview-CVtiBnY5.js → LibraryFunctionPreview-lYMY8h-y.js} +1 -1
  205. package/codeyam-cli/src/webserver/build/client/assets/{LoadingDots-B0GLXMsr.js → LoadingDots-ay8XeA59.js} +1 -1
  206. package/codeyam-cli/src/webserver/build/client/assets/{LogViewer-xgeCVgSM.js → LogViewer-Dpul1_ik.js} +1 -1
  207. package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-OApQuNyq.js → ReportIssueModal-CRBCfV2W.js} +3 -8
  208. package/codeyam-cli/src/webserver/build/client/assets/{SafeScreenshot-DuDvi0jm.js → SafeScreenshot-DRTFDNFt.js} +1 -1
  209. package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-DzccYyI8.js → ScenarioViewer-d6PSFxhS.js} +2 -2
  210. package/codeyam-cli/src/webserver/build/client/assets/{TruncatedFilePath-DyFZkK0l.js → TruncatedFilePath-DDEOQ6Iw.js} +1 -1
  211. package/codeyam-cli/src/webserver/build/client/assets/{_index-BwqWJOgH.js → _index-CkziGg5F.js} +1 -1
  212. package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BwavGCpm.js → activity.(_tab)-B2v1pm9w.js} +6 -11
  213. package/codeyam-cli/src/webserver/build/client/assets/agent-transcripts-BXIaK8Md.js +11 -0
  214. package/codeyam-cli/src/webserver/build/client/assets/api.agent-transcripts-l0sNRNKZ.js +1 -0
  215. package/codeyam-cli/src/webserver/build/client/assets/api.labs-unlock-l0sNRNKZ.js +1 -0
  216. package/codeyam-cli/src/webserver/build/client/assets/api.save-fixture-l0sNRNKZ.js +1 -0
  217. package/codeyam-cli/src/webserver/build/client/assets/book-open-qbapxy6o.js +6 -0
  218. package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-Cx24_aWc.js → chevron-down-C-mKrwr1.js} +1 -1
  219. package/codeyam-cli/src/webserver/build/client/assets/{chunk-EPOLDU6W-CXRTFQ3F.js → chunk-JZWAC4HX-BAvUl1nT.js} +12 -12
  220. package/codeyam-cli/src/webserver/build/client/assets/{circle-check-BOARzkeR.js → circle-check-DlrT-SzI.js} +1 -1
  221. package/codeyam-cli/src/webserver/build/client/assets/copy-clIxnCqQ.js +11 -0
  222. package/codeyam-cli/src/webserver/build/client/assets/{createLucideIcon-BdhJEx6B.js → createLucideIcon-B931Etud.js} +1 -1
  223. package/codeyam-cli/src/webserver/build/client/assets/{dev.empty-BBnGWYga.js → dev.empty-BoPM6KnE.js} +1 -1
  224. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-oVRMh9Hl.js +16 -0
  225. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha.scenarios._scenarioId.fullscreen-DavjRmOY.js → entity._sha.scenarios._scenarioId.fullscreen-BjyzwQ7H.js} +1 -1
  226. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.create-scenario-D1T4TGjf.js → entity._sha_.create-scenario-DxuyDmZA.js} +1 -1
  227. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha_.edit._scenarioId-CTBG2mmz.js → entity._sha_.edit._scenarioId-DESSZGQp.js} +1 -1
  228. package/codeyam-cli/src/webserver/build/client/assets/{entry.client-CS2cb_eZ.js → entry.client-D5Yb90Ad.js} +1 -1
  229. package/codeyam-cli/src/webserver/build/client/assets/{fileTableUtils-DMJ7zii9.js → fileTableUtils-DuObVYgh.js} +1 -1
  230. package/codeyam-cli/src/webserver/build/client/assets/{files-CJ6lTdTA.js → files-CDfz4Y-i.js} +1 -1
  231. package/codeyam-cli/src/webserver/build/client/assets/{git-CPTZZ-JZ.js → git-D6jOlDQw.js} +1 -1
  232. package/codeyam-cli/src/webserver/build/client/assets/globals-CKT08Djd.css +1 -0
  233. package/codeyam-cli/src/webserver/build/client/assets/{index-B1h680n5.js → index-DvOt1KIt.js} +1 -1
  234. package/codeyam-cli/src/webserver/build/client/assets/{index-lzqtyFU8.js → index-WfQFdoWK.js} +1 -1
  235. package/codeyam-cli/src/webserver/build/client/assets/labs-BbGyC1RY.js +1 -0
  236. package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-B7B9V-bu.js → loader-circle-Bb7Y9k5O.js} +1 -1
  237. package/codeyam-cli/src/webserver/build/client/assets/manifest-fd06e67a.js +1 -0
  238. package/codeyam-cli/src/webserver/build/client/assets/memory-BXebUPaL.js +78 -0
  239. package/codeyam-cli/src/webserver/build/client/assets/pause-DaAHX2on.js +11 -0
  240. package/codeyam-cli/src/webserver/build/client/assets/root-CvNE9MaT.js +62 -0
  241. package/codeyam-cli/src/webserver/build/client/assets/{search-CxXUmBSd.js → search-DIqAPIrO.js} +1 -1
  242. package/codeyam-cli/src/webserver/build/client/assets/settings-DCIzBZM9.js +1 -0
  243. package/codeyam-cli/src/webserver/build/client/assets/{simulations-DwFIBT09.js → simulations-C6n_fNQY.js} +1 -1
  244. package/codeyam-cli/src/webserver/build/client/assets/terminal-CmPsszJy.js +11 -0
  245. package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-B6LgvRJg.js → triangle-alert-Beg-oV50.js} +1 -1
  246. package/codeyam-cli/src/webserver/build/client/assets/{useCustomSizes-C1v1PQzo.js → useCustomSizes-D7TLbP3M.js} +1 -1
  247. package/codeyam-cli/src/webserver/build/client/assets/{useLastLogLine-aSv48UbS.js → useLastLogLine-Ce5rnai3.js} +1 -1
  248. package/codeyam-cli/src/webserver/build/client/assets/{useReportContext-DYxHZQuP.js → useReportContext-B4D3wj27.js} +1 -1
  249. package/codeyam-cli/src/webserver/build/client/assets/{useToast-mBRpZPiu.js → useToast-BDt_-DnY.js} +1 -1
  250. package/codeyam-cli/src/webserver/build/server/assets/{index-BM6TDT1Y.js → index-DDr9Cp9M.js} +1 -1
  251. package/codeyam-cli/src/webserver/build/server/assets/server-build-DjwiujaU.js +257 -0
  252. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  253. package/codeyam-cli/src/webserver/build-info.json +5 -5
  254. package/codeyam-cli/templates/{codeyam:debug.md → codeyam-debug.md} +1 -1
  255. package/codeyam-cli/templates/codeyam-diagnose.md +481 -0
  256. package/codeyam-cli/templates/codeyam-memory-hook.sh +19 -20
  257. package/codeyam-cli/templates/codeyam-memory.md +392 -0
  258. package/codeyam-cli/templates/{codeyam:new-rule.md → codeyam-new-rule.md} +2 -2
  259. package/codeyam-cli/templates/{codeyam:setup.md → codeyam-setup.md} +13 -1
  260. package/codeyam-cli/templates/{codeyam:sim.md → codeyam-sim.md} +1 -1
  261. package/codeyam-cli/templates/{codeyam:test.md → codeyam-test.md} +1 -1
  262. package/codeyam-cli/templates/{codeyam:verify.md → codeyam-verify.md} +1 -1
  263. package/codeyam-cli/templates/rule-notification-hook.py +56 -0
  264. package/codeyam-cli/templates/rule-reflection-hook.py +554 -87
  265. package/codeyam-cli/templates/rules-instructions.md +63 -24
  266. package/package.json +10 -10
  267. package/packages/ai/index.js +1 -1
  268. package/packages/ai/index.js.map +1 -1
  269. package/packages/ai/src/lib/analyzeScope.js +21 -1
  270. package/packages/ai/src/lib/analyzeScope.js.map +1 -1
  271. package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js +10 -14
  272. package/packages/ai/src/lib/astScopes/patterns/forInStatementHandler.js.map +1 -1
  273. package/packages/ai/src/lib/astScopes/processExpression.js +78 -1
  274. package/packages/ai/src/lib/astScopes/processExpression.js.map +1 -1
  275. package/packages/ai/src/lib/astScopes/sharedPatterns.js +25 -0
  276. package/packages/ai/src/lib/astScopes/sharedPatterns.js.map +1 -1
  277. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js +262 -8
  278. package/packages/ai/src/lib/dataStructure/ScopeDataStructure.js.map +1 -1
  279. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js +5 -1
  280. package/packages/ai/src/lib/dataStructure/equivalencyManagers/frameworks/JavascriptFrameworkManager.js.map +1 -1
  281. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js +11 -2
  282. package/packages/ai/src/lib/dataStructure/helpers/cleanKnownObjectFunctions.js.map +1 -1
  283. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js +2 -2
  284. package/packages/ai/src/lib/dataStructure/helpers/cleanNonObjectFunctions.js.map +1 -1
  285. package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js +63 -0
  286. package/packages/ai/src/lib/dataStructure/helpers/coerceObjectsToPrimitivesBySchema.js.map +1 -0
  287. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js +122 -12
  288. package/packages/ai/src/lib/dataStructure/helpers/convertDotNotation.js.map +1 -1
  289. package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js +15 -1
  290. package/packages/ai/src/lib/dataStructure/helpers/convertTypeAnnotationsToValues.js.map +1 -1
  291. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js +78 -17
  292. package/packages/ai/src/lib/dataStructure/helpers/fillInSchemaGapsAndUnknowns.js.map +1 -1
  293. package/packages/ai/src/lib/dataStructureChunking.js +26 -11
  294. package/packages/ai/src/lib/dataStructureChunking.js.map +1 -1
  295. package/packages/ai/src/lib/generateEntityDataStructure.js +46 -2
  296. package/packages/ai/src/lib/generateEntityDataStructure.js.map +1 -1
  297. package/packages/ai/src/lib/generateEntityScenarioData.js +212 -3
  298. package/packages/ai/src/lib/generateEntityScenarioData.js.map +1 -1
  299. package/packages/ai/src/lib/generateExecutionFlows.js +16 -2
  300. package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
  301. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js +242 -81
  302. package/packages/ai/src/lib/generateExecutionFlowsFromConditionals.js.map +1 -1
  303. package/packages/ai/src/lib/isolateScopes.js +39 -3
  304. package/packages/ai/src/lib/isolateScopes.js.map +1 -1
  305. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js +5 -0
  306. package/packages/ai/src/lib/mergeJsonTypeDefinitions.js.map +1 -1
  307. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js +97 -0
  308. package/packages/ai/src/lib/promptGenerators/collapseNullableObjects.js.map +1 -0
  309. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js +17 -2
  310. package/packages/ai/src/lib/promptGenerators/generateEntityScenarioDataGenerator.js.map +1 -1
  311. package/packages/analyze/index.js +1 -0
  312. package/packages/analyze/index.js.map +1 -1
  313. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js +52 -2
  314. package/packages/analyze/src/lib/files/analyze/analyzeEntities/prepareDataStructures.js.map +1 -1
  315. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js +3 -0
  316. package/packages/analyze/src/lib/files/analyze/analyzeEntities.js.map +1 -1
  317. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js +880 -0
  318. package/packages/analyze/src/lib/files/scenarios/TransformationTracer.js.map +1 -0
  319. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js +5 -1
  320. package/packages/analyze/src/lib/files/scenarios/enrichArrayTypesFromChildSignatures.js.map +1 -1
  321. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js +51 -14
  322. package/packages/analyze/src/lib/files/scenarios/gatherDataForMocks.js.map +1 -1
  323. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js +116 -13
  324. package/packages/analyze/src/lib/files/scenarios/generateDataStructure.js.map +1 -1
  325. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js +310 -45
  326. package/packages/analyze/src/lib/files/scenarios/mergeInDependentDataStructure.js.map +1 -1
  327. package/packages/analyze/src/lib/index.js +1 -0
  328. package/packages/analyze/src/lib/index.js.map +1 -1
  329. package/packages/database/src/lib/analysisBranchToDb.js +1 -1
  330. package/packages/database/src/lib/analysisBranchToDb.js.map +1 -1
  331. package/packages/database/src/lib/analysisToDb.js +1 -1
  332. package/packages/database/src/lib/analysisToDb.js.map +1 -1
  333. package/packages/database/src/lib/branchToDb.js +1 -1
  334. package/packages/database/src/lib/branchToDb.js.map +1 -1
  335. package/packages/database/src/lib/commitBranchToDb.js +1 -1
  336. package/packages/database/src/lib/commitBranchToDb.js.map +1 -1
  337. package/packages/database/src/lib/commitToDb.js +1 -1
  338. package/packages/database/src/lib/commitToDb.js.map +1 -1
  339. package/packages/database/src/lib/fileToDb.js +1 -1
  340. package/packages/database/src/lib/fileToDb.js.map +1 -1
  341. package/packages/database/src/lib/kysely/db.js +3 -0
  342. package/packages/database/src/lib/kysely/db.js.map +1 -1
  343. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js +35 -0
  344. package/packages/database/src/lib/kysely/tables/labsRequestsTable.js.map +1 -0
  345. package/packages/database/src/lib/projectToDb.js +1 -1
  346. package/packages/database/src/lib/projectToDb.js.map +1 -1
  347. package/packages/database/src/lib/saveFiles.js +1 -1
  348. package/packages/database/src/lib/saveFiles.js.map +1 -1
  349. package/packages/database/src/lib/scenarioToDb.js +1 -1
  350. package/packages/database/src/lib/scenarioToDb.js.map +1 -1
  351. package/packages/utils/src/lib/fs/rsyncCopy.js +93 -2
  352. package/packages/utils/src/lib/fs/rsyncCopy.js.map +1 -1
  353. package/scripts/finalize-analyzer.cjs +8 -76
  354. package/codeyam-cli/src/webserver/build/client/assets/copy-Bb-80kDT.js +0 -6
  355. package/codeyam-cli/src/webserver/build/client/assets/entity._sha._-BJUiQqZF.js +0 -23
  356. package/codeyam-cli/src/webserver/build/client/assets/file-code-Dhef1kWN.js +0 -6
  357. package/codeyam-cli/src/webserver/build/client/assets/globals-D3yhhV8x.css +0 -1
  358. package/codeyam-cli/src/webserver/build/client/assets/manifest-a78b90a2.js +0 -1
  359. package/codeyam-cli/src/webserver/build/client/assets/memory--GCbFsBE.js +0 -92
  360. package/codeyam-cli/src/webserver/build/client/assets/root-eVAaavTS.js +0 -62
  361. package/codeyam-cli/src/webserver/build/client/assets/settings-CS5f3WzT.js +0 -1
  362. package/codeyam-cli/src/webserver/build/server/assets/server-build-dYC34MHw.js +0 -257
  363. package/codeyam-cli/templates/codeyam:diagnose.md +0 -803
  364. package/codeyam-cli/templates/codeyam:memory.md +0 -341
@@ -246,7 +246,11 @@ export default function enrichArrayTypesFromChildSignatures(
246
246
  // Also check if the array path ends with the local variable name
247
247
  // e.g., useLoaderData().functionCallReturnValue.entities ends with .entities
248
248
  const arrayEndsWithLocalVar = arrayPath.endsWith(`.${localVarName}`);
249
+ // Full-path usageEquivalencies (e.g., from same-file child components) use
250
+ // the complete call path as the local var name, which matches arrayPath exactly
251
+ const exactPathMatch = localVarName === arrayPath;
249
252
  if (
253
+ !exactPathMatch &&
250
254
  !couldBeDerivedFrom(localVarName, entityName) &&
251
255
  !arrayEndsWithLocalVar
252
256
  ) {
@@ -353,8 +353,6 @@ function processCall(
353
353
  // Preprocess to filter signatures and extract functionCallReturnValue
354
354
  let preprocessedSchema = preprocessSchemaForMocks(mergedSchema);
355
355
 
356
- const functionNames: string[] = [];
357
-
358
356
  const isFunctionNameWithoutFunction = (
359
357
  path: string,
360
358
  functionName: string,
@@ -439,31 +437,58 @@ function processCall(
439
437
  }
440
438
  }
441
439
 
442
- const relevantMergedDependencySchema = Object.keys(preprocessedSchema).reduce(
443
- (acc, path) => {
444
- if (path.endsWith(')')) {
445
- const pathParts = splitOutsideParenthesesAndArrays(path);
446
- const functionName = joinParenthesesAndArrays([
447
- ...pathParts.slice(0, -1),
448
- pathParts[pathParts.length - 1].split('(')[0],
449
- ]);
450
- functionNames.push(functionName);
451
- for (const existingPath in acc) {
452
- if (isFunctionNameWithoutFunction(existingPath, functionName)) {
453
- delete acc[existingPath];
454
- }
455
- }
456
- }
440
+ // Two-pass function name filtering to avoid O() retroactive deletion.
441
+ // Pass 1: Discover all unique function names from paths ending with ')'
442
+ const functionNameSet = new Set<string>();
443
+ const schemaKeys = Object.keys(preprocessedSchema);
444
+ for (const path of schemaKeys) {
445
+ if (path.endsWith(')')) {
446
+ const pathParts = splitOutsideParenthesesAndArrays(path);
447
+ const functionName = joinParenthesesAndArrays([
448
+ ...pathParts.slice(0, -1),
449
+ pathParts[pathParts.length - 1].split('(')[0],
450
+ ]);
451
+ functionNameSet.add(functionName);
452
+ }
453
+ }
457
454
 
458
- if (functionNames.some((fn) => isFunctionNameWithoutFunction(path, fn))) {
459
- return acc;
460
- }
455
+ // Index function names by first segment for O(1) bucket lookup instead of
456
+ // checking all function names for every path. Most paths only need to check
457
+ // 1-2 function names instead of all F.
458
+ const fnByFirstSegment = new Map<string, string[]>();
459
+ for (const fn of functionNameSet) {
460
+ const dotIdx = fn.indexOf('.');
461
+ const firstSeg = dotIdx >= 0 ? fn.slice(0, dotIdx) : fn;
462
+ let bucket = fnByFirstSegment.get(firstSeg);
463
+ if (!bucket) {
464
+ bucket = [];
465
+ fnByFirstSegment.set(firstSeg, bucket);
466
+ }
467
+ bucket.push(fn);
468
+ }
461
469
 
462
- acc[path] = preprocessedSchema[path];
463
- return acc;
464
- },
465
- {} as Record<string, string>,
466
- );
470
+ // Pass 2: Filter paths that match any discovered function name prefix.
471
+ // Use indexed lookup: extract path's first segment, check only matching function names.
472
+ const relevantMergedDependencySchema: Record<string, string> = {};
473
+ for (const path of schemaKeys) {
474
+ // Extract first segment of path (before first '.', '(', or '<')
475
+ const dotIdx = path.indexOf('.');
476
+ const parenIdx = path.indexOf('(');
477
+ const angleIdx = path.indexOf('<');
478
+ let minIdx = path.length;
479
+ if (dotIdx >= 0 && dotIdx < minIdx) minIdx = dotIdx;
480
+ if (parenIdx >= 0 && parenIdx < minIdx) minIdx = parenIdx;
481
+ if (angleIdx >= 0 && angleIdx < minIdx) minIdx = angleIdx;
482
+ const firstSeg = path.slice(0, minIdx);
483
+
484
+ const candidates = fnByFirstSegment.get(firstSeg);
485
+ if (
486
+ !candidates ||
487
+ !candidates.some((fn) => isFunctionNameWithoutFunction(path, fn))
488
+ ) {
489
+ relevantMergedDependencySchema[path] = preprocessedSchema[path];
490
+ }
491
+ }
467
492
 
468
493
  const filledSchema = fillInDirectSchemaGapsAndUnknowns({
469
494
  scopeName: importedExport.name,
@@ -574,6 +599,12 @@ export default function gatherDataForMocks(
574
599
  ) {
575
600
  // Build schema indexes ONCE from all dependency schemas combined.
576
601
  // This avoids rebuilding indexes (~1-2 seconds for 18k keys) for each processCall.
602
+ //
603
+ // IMPORTANT: We must preprocess schemas BEFORE building indexes!
604
+ // The schemas contain .functionCallReturnValue paths that get stripped during processing.
605
+ // If we build indexes from original paths, lookups with preprocessed paths will fail.
606
+ // Example: 'hook().functionCallReturnValue.x.length' → index maps 'hook().functionCallReturnValue.x' → ['length']
607
+ // But preprocessed path 'hook().x.length' looks for 'hook().x' which doesn't exist in the index.
577
608
  const allSchemaKeys: Record<string, string> = {};
578
609
  if (dependencySchemas) {
579
610
  for (const filePath in dependencySchemas) {
@@ -581,7 +612,9 @@ export default function gatherDataForMocks(
581
612
  const schema =
582
613
  dependencySchemas[filePath][entityName]?.returnValueSchema;
583
614
  if (schema) {
584
- Object.assign(allSchemaKeys, schema);
615
+ // Preprocess each schema to remove .functionCallReturnValue before collecting
616
+ const preprocessed = preprocessSchemaForMocks(schema);
617
+ Object.assign(allSchemaKeys, preprocessed);
585
618
  }
586
619
  }
587
620
  }
@@ -16,6 +16,7 @@ import { awsLog } from '~codeyam/utils';
16
16
  import gatherDataForMocks from './gatherDataForMocks';
17
17
  import enrichArrayTypesFromChildSignatures from './enrichArrayTypesFromChildSignatures';
18
18
  import enrichUnknownTypesFromSourceEquivalencies from './enrichUnknownTypesFromSourceEquivalencies';
19
+ import { transformationTracer } from './TransformationTracer';
19
20
  // import propagateArrayItemSchemas from './propagateArrayItemSchemas';
20
21
  export interface GenerateDataStructureArgs {
21
22
  entity: Entity;
@@ -163,6 +164,25 @@ export default function generateDataStructure({
163
164
  return acc;
164
165
  }, {} as ReadonlyAnalysisMap);
165
166
 
167
+ // Include same-file child components in nonMockedDependentAnalyses.
168
+ // Same-file components (e.g., AgentCard defined in the same file as AgentTranscriptsPage)
169
+ // are NOT in importedExports, so the reduce above never includes them.
170
+ // But they ARE in dependentAnalyses and their full signatureSchema (with all prop fields)
171
+ // needs to be merged into the parent's dependencySchemas for array enrichment to work.
172
+
173
+ const sameFileAnalyses = dependentAnalyses[entity.filePath];
174
+ if (sameFileAnalyses) {
175
+ for (const name in sameFileAnalyses) {
176
+ if (name === entity.name) continue;
177
+ if (nonMockedDependentAnalyses[entity.filePath]?.[name]) continue;
178
+ const childAnalysis = sameFileAnalyses[name];
179
+ if (childAnalysis?.entityType === 'visual') {
180
+ nonMockedDependentAnalyses[entity.filePath] ||= {};
181
+ nonMockedDependentAnalyses[entity.filePath][name] = childAnalysis;
182
+ }
183
+ }
184
+ }
185
+
166
186
  // For non-mocked child components (like visual components), include their mocked
167
187
  // dependencies in allImportedExports. This ensures that when a parent component
168
188
  // renders a child that uses the same hook with different destructure patterns,
@@ -441,6 +461,18 @@ export default function generateDataStructure({
441
461
 
442
462
  const { isolatedDataStructure } = entity.metadata;
443
463
 
464
+ // Transformation tracing: start entity and capture isolated data structure
465
+ transformationTracer.startEntity({
466
+ name: entity.name,
467
+ entityType: entity.entityType,
468
+ filePath: entity.filePath,
469
+ });
470
+ transformationTracer.snapshot(entity.name, 'isolated', {
471
+ signatureSchema: isolatedDataStructure.signatureSchema,
472
+ returnValueSchema: isolatedDataStructure.returnValueSchema,
473
+ dependencySchemas: isolatedDataStructure.dependencySchemas,
474
+ });
475
+
444
476
  const mergedDataStructure = mergeInDependentDataStructure({
445
477
  importedExports: allImportedExports,
446
478
  dependentAnalyses: nonMockedDependentAnalyses,
@@ -458,6 +490,13 @@ export default function generateDataStructure({
458
490
  mergedDataStructure.environmentVariables =
459
491
  isolatedDataStructure.environmentVariables || [];
460
492
 
493
+ // Transformation tracing: capture merged data structure
494
+ transformationTracer.snapshot(entity.name, 'merged', {
495
+ signatureSchema: mergedDataStructure.signatureSchema,
496
+ returnValueSchema: mergedDataStructure.returnValueSchema,
497
+ dependencySchemas: mergedDataStructure.dependencySchemas,
498
+ });
499
+
461
500
  // Merge collected child dependency schemas into mergedDataStructure.
462
501
  // This ensures that when gatherDataForMocks looks up schemas for child imports,
463
502
  // the child's schemas are available.
@@ -511,6 +550,13 @@ export default function generateDataStructure({
511
550
  }
512
551
  }
513
552
 
553
+ // Transformation tracing: capture after child schemas merged
554
+ transformationTracer.snapshot(entity.name, 'childSchemasMerged', {
555
+ signatureSchema: mergedDataStructure.signatureSchema,
556
+ returnValueSchema: mergedDataStructure.returnValueSchema,
557
+ dependencySchemas: mergedDataStructure.dependencySchemas,
558
+ });
559
+
514
560
  // console.info(
515
561
  // 'CODEYAM DEBUG: end merge',
516
562
  // JSON.stringify(
@@ -533,32 +579,111 @@ export default function generateDataStructure({
533
579
 
534
580
  // Deduplicate function schemas in the merged data structure
535
581
  // The merge process might introduce duplicates even if individual schemas were clean
582
+ // Trace deduplication of signatureSchema
583
+ const sigBefore = { ...mergedDataStructure.signatureSchema };
536
584
  mergedDataStructure.signatureSchema = deduplicateFunctionSchemas(
537
585
  mergedDataStructure.signatureSchema,
538
586
  );
587
+ transformationTracer.traceSchemaTransformResult(
588
+ entity.name,
589
+ 'deduplicateFunctionSchemas',
590
+ sigBefore,
591
+ mergedDataStructure.signatureSchema,
592
+ { schemaType: 'signature' },
593
+ );
594
+
595
+ // Trace deduplication of returnValueSchema
596
+ const rvBefore = { ...mergedDataStructure.returnValueSchema };
539
597
  mergedDataStructure.returnValueSchema = deduplicateFunctionSchemas(
540
598
  mergedDataStructure.returnValueSchema,
541
599
  );
600
+ transformationTracer.traceSchemaTransformResult(
601
+ entity.name,
602
+ 'deduplicateFunctionSchemas',
603
+ rvBefore,
604
+ mergedDataStructure.returnValueSchema,
605
+ { schemaType: 'returnValue' },
606
+ );
542
607
 
543
- // Also deduplicate dependency schemas
608
+ // Also deduplicate dependency schemas and clear known attributes
544
609
  for (const filePath in mergedDataStructure.dependencySchemas) {
545
- for (const entityName in mergedDataStructure.dependencySchemas[
610
+ for (const depEntityName in mergedDataStructure.dependencySchemas[
546
611
  filePath
547
612
  ]) {
548
613
  const depSchema =
549
- mergedDataStructure.dependencySchemas[filePath][entityName];
614
+ mergedDataStructure.dependencySchemas[filePath][depEntityName];
615
+
616
+ // Trace deduplication of dependency signatureSchema
617
+ const depSigBefore = { ...depSchema.signatureSchema };
550
618
  depSchema.signatureSchema = deduplicateFunctionSchemas(
551
619
  depSchema.signatureSchema,
552
620
  );
621
+ transformationTracer.traceSchemaTransformResult(
622
+ entity.name,
623
+ 'deduplicateFunctionSchemas',
624
+ depSigBefore,
625
+ depSchema.signatureSchema,
626
+ { filePath, dependencyName: depEntityName, schemaType: 'signature' },
627
+ );
628
+
629
+ // Trace deduplication of dependency returnValueSchema
630
+ const depRvBefore = { ...depSchema.returnValueSchema };
553
631
  depSchema.returnValueSchema = deduplicateFunctionSchemas(
554
632
  depSchema.returnValueSchema,
555
633
  );
634
+ transformationTracer.traceSchemaTransformResult(
635
+ entity.name,
636
+ 'deduplicateFunctionSchemas',
637
+ depRvBefore,
638
+ depSchema.returnValueSchema,
639
+ {
640
+ filePath,
641
+ dependencyName: depEntityName,
642
+ schemaType: 'returnValue',
643
+ },
644
+ );
645
+
646
+ // Fill in type gaps BEFORE clearing attributes, so evidence like .includes()
647
+ // is used for type inference before being deleted
648
+
649
+ depSchema.signatureSchema = fillInDirectSchemaGapsAndUnknowns({
650
+ schema: depSchema.signatureSchema,
651
+ });
556
652
 
557
- clearAttributesFromMapping(depSchema.signatureSchema);
558
- clearAttributesFromMapping(depSchema.returnValueSchema);
653
+ depSchema.returnValueSchema = fillInDirectSchemaGapsAndUnknowns({
654
+ schema: depSchema.returnValueSchema,
655
+ });
656
+
657
+ // Trace clearAttributesFromMapping on dependency schemas
658
+ transformationTracer.traceSchemaTransform(
659
+ entity.name,
660
+ 'clearAttributesFromMapping',
661
+ depSchema.signatureSchema,
662
+ clearAttributesFromMapping,
663
+ { filePath, dependencyName: depEntityName, schemaType: 'signature' },
664
+ );
665
+
666
+ transformationTracer.traceSchemaTransform(
667
+ entity.name,
668
+ 'clearAttributesFromMapping',
669
+ depSchema.returnValueSchema,
670
+ clearAttributesFromMapping,
671
+ {
672
+ filePath,
673
+ dependencyName: depEntityName,
674
+ schemaType: 'returnValue',
675
+ },
676
+ );
559
677
  }
560
678
  }
561
679
 
680
+ // Transformation tracing: capture after deduplication
681
+ transformationTracer.snapshot(entity.name, 'deduplicated', {
682
+ signatureSchema: mergedDataStructure.signatureSchema,
683
+ returnValueSchema: mergedDataStructure.returnValueSchema,
684
+ dependencySchemas: mergedDataStructure.dependencySchemas,
685
+ });
686
+
562
687
  analysis.metadata ||= {};
563
688
  analysis.metadata.mergedDataStructure = mergedDataStructure;
564
689
 
@@ -567,23 +692,49 @@ export default function generateDataStructure({
567
692
  // expects survey.updatedAt, the array element type includes updatedAt.
568
693
  // Uses usageEquivalencies to trace data flow and only enrich arrays with fields
569
694
  // from children that actually receive elements from that specific array.
570
- enrichArrayTypesFromChildSignatures(
571
- allImportedExports,
695
+ transformationTracer.traceDependencySchemaChanges(
696
+ entity.name,
697
+ 'enrichArrayTypesFromChildSignatures',
572
698
  mergedDataStructure.dependencySchemas,
573
- mergedDataStructure.usageEquivalencies,
699
+ () =>
700
+ enrichArrayTypesFromChildSignatures(
701
+ allImportedExports,
702
+ mergedDataStructure.dependencySchemas,
703
+ mergedDataStructure.usageEquivalencies,
704
+ ),
574
705
  );
575
706
 
707
+ // Transformation tracing: capture after array types enriched
708
+ transformationTracer.snapshot(entity.name, 'arrayTypesEnriched', {
709
+ signatureSchema: mergedDataStructure.signatureSchema,
710
+ returnValueSchema: mergedDataStructure.returnValueSchema,
711
+ dependencySchemas: mergedDataStructure.dependencySchemas,
712
+ });
713
+
576
714
  // Enrich mocked dependency unknown types using sourceEquivalencies
577
715
  // When a mocked dependency returns unknown, but that data flows to a child component
578
716
  // with a known type, propagate the type back to the mocked dependency.
579
717
  // This prevents fillInDirectSchemaGapsAndUnknowns from guessing incorrectly
580
718
  // (e.g., 'data' becoming 'number' because pluralize thinks it's plural)
581
- enrichUnknownTypesFromSourceEquivalencies(
582
- isolatedDataStructure.dependencySchemas || {},
719
+ transformationTracer.traceDependencySchemaChanges(
720
+ entity.name,
721
+ 'enrichUnknownTypesFromSourceEquivalencies',
583
722
  mergedDataStructure.dependencySchemas,
584
- allImportedExports,
723
+ () =>
724
+ enrichUnknownTypesFromSourceEquivalencies(
725
+ isolatedDataStructure.dependencySchemas || {},
726
+ mergedDataStructure.dependencySchemas,
727
+ allImportedExports,
728
+ ),
585
729
  );
586
730
 
731
+ // Transformation tracing: capture after unknown types enriched
732
+ transformationTracer.snapshot(entity.name, 'unknownTypesEnriched', {
733
+ signatureSchema: mergedDataStructure.signatureSchema,
734
+ returnValueSchema: mergedDataStructure.returnValueSchema,
735
+ dependencySchemas: mergedDataStructure.dependencySchemas,
736
+ });
737
+
587
738
  // DISABLED: Testing if ternary fix eliminates the need for this heuristic
588
739
  // Propagate array item schemas between arrays that likely have the same type.
589
740
  // When one array (e.g., entities) has item schema traced but another similar array
@@ -597,6 +748,14 @@ export default function generateDataStructure({
597
748
  { entityName: entity.name },
598
749
  );
599
750
 
751
+ // Transformation tracing: capture after dataForMocks gathered
752
+ transformationTracer.snapshot(entity.name, 'dataForMocksGathered', {
753
+ signatureSchema: mergedDataStructure.signatureSchema,
754
+ returnValueSchema: mergedDataStructure.returnValueSchema,
755
+ dependencySchemas: mergedDataStructure.dependencySchemas,
756
+ dataForMocks,
757
+ });
758
+
600
759
  // Merge dataForMocks from non-mocked child analyses to include transitive dependency data.
601
760
  // This handles cases where grandchild trpc calls aren't in allImportedExports because
602
761
  // the grandchild's analysis wasn't in dependentAnalyses.
@@ -618,11 +777,25 @@ export default function generateDataStructure({
618
777
  }
619
778
  }
620
779
 
621
- const finalizedArgumentsSchema = fillInDirectSchemaGapsAndUnknowns({
622
- schema: { ...mergedDataStructure.signatureSchema },
623
- });
780
+ const finalizedArgumentsSchema = { ...mergedDataStructure.signatureSchema };
624
781
 
625
- clearAttributesFromMapping(finalizedArgumentsSchema);
782
+ // Trace fillInDirectSchemaGapsAndUnknowns
783
+ transformationTracer.traceSchemaTransform(
784
+ entity.name,
785
+ 'fillInDirectSchemaGapsAndUnknowns',
786
+ finalizedArgumentsSchema,
787
+ (schema) => fillInDirectSchemaGapsAndUnknowns({ schema }),
788
+ { stage: 'finalization' },
789
+ );
790
+
791
+ // Trace clearAttributesFromMapping
792
+ transformationTracer.traceSchemaTransform(
793
+ entity.name,
794
+ 'clearAttributesFromMapping',
795
+ finalizedArgumentsSchema,
796
+ clearAttributesFromMapping,
797
+ { stage: 'finalization' },
798
+ );
626
799
 
627
800
  const argumentsSchema = convertDotNotation(finalizedArgumentsSchema)
628
801
  .signature as JsonTypeDefinition[];
@@ -632,6 +805,12 @@ export default function generateDataStructure({
632
805
  dataForMocks,
633
806
  };
634
807
 
808
+ // Transformation tracing: capture final scenariosDataStructure
809
+ transformationTracer.snapshot(entity.name, 'finalized', {
810
+ signatureSchema: finalizedArgumentsSchema,
811
+ dataForMocks,
812
+ });
813
+
635
814
  return analysis;
636
815
  } catch (e) {
637
816
  awsLog('CodeYam Error: Error generating data structure', {