@zigrivers/scaffold 3.9.2 → 3.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +39 -8
  2. package/dist/cli/commands/adopt.cli-flags.test.d.ts +2 -0
  3. package/dist/cli/commands/adopt.cli-flags.test.d.ts.map +1 -0
  4. package/dist/cli/commands/adopt.cli-flags.test.js +165 -0
  5. package/dist/cli/commands/adopt.cli-flags.test.js.map +1 -0
  6. package/dist/cli/commands/adopt.config-resolution.test.d.ts +2 -0
  7. package/dist/cli/commands/adopt.config-resolution.test.d.ts.map +1 -0
  8. package/dist/cli/commands/adopt.config-resolution.test.js +217 -0
  9. package/dist/cli/commands/adopt.config-resolution.test.js.map +1 -0
  10. package/dist/cli/commands/adopt.config-write-integration.test.d.ts +2 -0
  11. package/dist/cli/commands/adopt.config-write-integration.test.d.ts.map +1 -0
  12. package/dist/cli/commands/adopt.config-write-integration.test.js +138 -0
  13. package/dist/cli/commands/adopt.config-write-integration.test.js.map +1 -0
  14. package/dist/cli/commands/adopt.d.ts +4 -0
  15. package/dist/cli/commands/adopt.d.ts.map +1 -1
  16. package/dist/cli/commands/adopt.js +432 -61
  17. package/dist/cli/commands/adopt.js.map +1 -1
  18. package/dist/cli/commands/adopt.performance.test.d.ts +2 -0
  19. package/dist/cli/commands/adopt.performance.test.d.ts.map +1 -0
  20. package/dist/cli/commands/adopt.performance.test.js +30 -0
  21. package/dist/cli/commands/adopt.performance.test.js.map +1 -0
  22. package/dist/cli/commands/adopt.result-shape.test.d.ts +2 -0
  23. package/dist/cli/commands/adopt.result-shape.test.d.ts.map +1 -0
  24. package/dist/cli/commands/adopt.result-shape.test.js +166 -0
  25. package/dist/cli/commands/adopt.result-shape.test.js.map +1 -0
  26. package/dist/cli/commands/adopt.serialization.test.d.ts +2 -0
  27. package/dist/cli/commands/adopt.serialization.test.d.ts.map +1 -0
  28. package/dist/cli/commands/adopt.serialization.test.js +228 -0
  29. package/dist/cli/commands/adopt.serialization.test.js.map +1 -0
  30. package/dist/cli/commands/adopt.test.js +26 -15
  31. package/dist/cli/commands/adopt.test.js.map +1 -1
  32. package/dist/cli/commands/adopt.windows-crlf.test.d.ts +2 -0
  33. package/dist/cli/commands/adopt.windows-crlf.test.d.ts.map +1 -0
  34. package/dist/cli/commands/adopt.windows-crlf.test.js +102 -0
  35. package/dist/cli/commands/adopt.windows-crlf.test.js.map +1 -0
  36. package/dist/cli/commands/init.d.ts.map +1 -1
  37. package/dist/cli/commands/init.js +4 -157
  38. package/dist/cli/commands/init.js.map +1 -1
  39. package/dist/cli/init-flag-families.d.ts +86 -0
  40. package/dist/cli/init-flag-families.d.ts.map +1 -0
  41. package/dist/cli/init-flag-families.js +418 -0
  42. package/dist/cli/init-flag-families.js.map +1 -0
  43. package/dist/cli/init-flag-families.test.d.ts +2 -0
  44. package/dist/cli/init-flag-families.test.d.ts.map +1 -0
  45. package/dist/cli/init-flag-families.test.js +268 -0
  46. package/dist/cli/init-flag-families.test.js.map +1 -0
  47. package/dist/config/schema.d.ts +6 -6
  48. package/dist/config/schema.js +2 -2
  49. package/dist/config/schema.js.map +1 -1
  50. package/dist/config/schema.test.js +10 -4
  51. package/dist/config/schema.test.js.map +1 -1
  52. package/dist/e2e/adopt-multi-type.test.d.ts +2 -0
  53. package/dist/e2e/adopt-multi-type.test.d.ts.map +1 -0
  54. package/dist/e2e/adopt-multi-type.test.js +35 -0
  55. package/dist/e2e/adopt-multi-type.test.js.map +1 -0
  56. package/dist/project/__frozen-schemas__/schema-v3.9.2.d.ts +2891 -0
  57. package/dist/project/__frozen-schemas__/schema-v3.9.2.d.ts.map +1 -0
  58. package/dist/project/__frozen-schemas__/schema-v3.9.2.js +177 -0
  59. package/dist/project/__frozen-schemas__/schema-v3.9.2.js.map +1 -0
  60. package/dist/project/adopt.d.ts +38 -2
  61. package/dist/project/adopt.d.ts.map +1 -1
  62. package/dist/project/adopt.error-messages.test.d.ts +2 -0
  63. package/dist/project/adopt.error-messages.test.d.ts.map +1 -0
  64. package/dist/project/adopt.error-messages.test.js +112 -0
  65. package/dist/project/adopt.error-messages.test.js.map +1 -0
  66. package/dist/project/adopt.forward-compat.test.d.ts +2 -0
  67. package/dist/project/adopt.forward-compat.test.d.ts.map +1 -0
  68. package/dist/project/adopt.forward-compat.test.js +71 -0
  69. package/dist/project/adopt.forward-compat.test.js.map +1 -0
  70. package/dist/project/adopt.js +218 -27
  71. package/dist/project/adopt.js.map +1 -1
  72. package/dist/project/adopt.merge.test.d.ts +2 -0
  73. package/dist/project/adopt.merge.test.d.ts.map +1 -0
  74. package/dist/project/adopt.merge.test.js +62 -0
  75. package/dist/project/adopt.merge.test.js.map +1 -0
  76. package/dist/project/adopt.re-adoption.test.d.ts +2 -0
  77. package/dist/project/adopt.re-adoption.test.d.ts.map +1 -0
  78. package/dist/project/adopt.re-adoption.test.js +222 -0
  79. package/dist/project/adopt.re-adoption.test.js.map +1 -0
  80. package/dist/project/adopt.test.js +72 -27
  81. package/dist/project/adopt.test.js.map +1 -1
  82. package/dist/project/detectors/backend.d.ts +4 -0
  83. package/dist/project/detectors/backend.d.ts.map +1 -0
  84. package/dist/project/detectors/backend.js +199 -0
  85. package/dist/project/detectors/backend.js.map +1 -0
  86. package/dist/project/detectors/backend.test.d.ts +2 -0
  87. package/dist/project/detectors/backend.test.d.ts.map +1 -0
  88. package/dist/project/detectors/backend.test.js +64 -0
  89. package/dist/project/detectors/backend.test.js.map +1 -0
  90. package/dist/project/detectors/browser-extension.d.ts +4 -0
  91. package/dist/project/detectors/browser-extension.d.ts.map +1 -0
  92. package/dist/project/detectors/browser-extension.js +61 -0
  93. package/dist/project/detectors/browser-extension.js.map +1 -0
  94. package/dist/project/detectors/browser-extension.test.d.ts +2 -0
  95. package/dist/project/detectors/browser-extension.test.d.ts.map +1 -0
  96. package/dist/project/detectors/browser-extension.test.js +64 -0
  97. package/dist/project/detectors/browser-extension.test.js.map +1 -0
  98. package/dist/project/detectors/cli.d.ts +4 -0
  99. package/dist/project/detectors/cli.d.ts.map +1 -0
  100. package/dist/project/detectors/cli.js +68 -0
  101. package/dist/project/detectors/cli.js.map +1 -0
  102. package/dist/project/detectors/cli.test.d.ts +2 -0
  103. package/dist/project/detectors/cli.test.d.ts.map +1 -0
  104. package/dist/project/detectors/cli.test.js +70 -0
  105. package/dist/project/detectors/cli.test.js.map +1 -0
  106. package/dist/project/detectors/context.d.ts +105 -0
  107. package/dist/project/detectors/context.d.ts.map +1 -0
  108. package/dist/project/detectors/context.js +652 -0
  109. package/dist/project/detectors/context.js.map +1 -0
  110. package/dist/project/detectors/context.test.d.ts +2 -0
  111. package/dist/project/detectors/context.test.d.ts.map +1 -0
  112. package/dist/project/detectors/context.test.js +240 -0
  113. package/dist/project/detectors/context.test.js.map +1 -0
  114. package/dist/project/detectors/data-pipeline.d.ts +4 -0
  115. package/dist/project/detectors/data-pipeline.d.ts.map +1 -0
  116. package/dist/project/detectors/data-pipeline.js +97 -0
  117. package/dist/project/detectors/data-pipeline.js.map +1 -0
  118. package/dist/project/detectors/data-pipeline.test.d.ts +2 -0
  119. package/dist/project/detectors/data-pipeline.test.d.ts.map +1 -0
  120. package/dist/project/detectors/data-pipeline.test.js +67 -0
  121. package/dist/project/detectors/data-pipeline.test.js.map +1 -0
  122. package/dist/project/detectors/disambiguate.d.ts +12 -0
  123. package/dist/project/detectors/disambiguate.d.ts.map +1 -0
  124. package/dist/project/detectors/disambiguate.js +87 -0
  125. package/dist/project/detectors/disambiguate.js.map +1 -0
  126. package/dist/project/detectors/disambiguate.test.d.ts +2 -0
  127. package/dist/project/detectors/disambiguate.test.d.ts.map +1 -0
  128. package/dist/project/detectors/disambiguate.test.js +114 -0
  129. package/dist/project/detectors/disambiguate.test.js.map +1 -0
  130. package/dist/project/detectors/file-text-match.d.ts +3 -0
  131. package/dist/project/detectors/file-text-match.d.ts.map +1 -0
  132. package/dist/project/detectors/file-text-match.js +60 -0
  133. package/dist/project/detectors/file-text-match.js.map +1 -0
  134. package/dist/project/detectors/file-text-match.test.d.ts +2 -0
  135. package/dist/project/detectors/file-text-match.test.d.ts.map +1 -0
  136. package/dist/project/detectors/file-text-match.test.js +81 -0
  137. package/dist/project/detectors/file-text-match.test.js.map +1 -0
  138. package/dist/project/detectors/game.d.ts +18 -0
  139. package/dist/project/detectors/game.d.ts.map +1 -0
  140. package/dist/project/detectors/game.js +83 -0
  141. package/dist/project/detectors/game.js.map +1 -0
  142. package/dist/project/detectors/game.test.d.ts +2 -0
  143. package/dist/project/detectors/game.test.d.ts.map +1 -0
  144. package/dist/project/detectors/game.test.js +87 -0
  145. package/dist/project/detectors/game.test.js.map +1 -0
  146. package/dist/project/detectors/index.d.ts +5 -0
  147. package/dist/project/detectors/index.d.ts.map +1 -0
  148. package/dist/project/detectors/index.js +29 -0
  149. package/dist/project/detectors/index.js.map +1 -0
  150. package/dist/project/detectors/library.d.ts +4 -0
  151. package/dist/project/detectors/library.d.ts.map +1 -0
  152. package/dist/project/detectors/library.js +122 -0
  153. package/dist/project/detectors/library.js.map +1 -0
  154. package/dist/project/detectors/library.test.d.ts +2 -0
  155. package/dist/project/detectors/library.test.d.ts.map +1 -0
  156. package/dist/project/detectors/library.test.js +95 -0
  157. package/dist/project/detectors/library.test.js.map +1 -0
  158. package/dist/project/detectors/ml.d.ts +4 -0
  159. package/dist/project/detectors/ml.d.ts.map +1 -0
  160. package/dist/project/detectors/ml.js +112 -0
  161. package/dist/project/detectors/ml.js.map +1 -0
  162. package/dist/project/detectors/ml.test.d.ts +2 -0
  163. package/dist/project/detectors/ml.test.d.ts.map +1 -0
  164. package/dist/project/detectors/ml.test.js +75 -0
  165. package/dist/project/detectors/ml.test.js.map +1 -0
  166. package/dist/project/detectors/mobile-app.d.ts +4 -0
  167. package/dist/project/detectors/mobile-app.d.ts.map +1 -0
  168. package/dist/project/detectors/mobile-app.js +58 -0
  169. package/dist/project/detectors/mobile-app.js.map +1 -0
  170. package/dist/project/detectors/mobile-app.test.d.ts +2 -0
  171. package/dist/project/detectors/mobile-app.test.d.ts.map +1 -0
  172. package/dist/project/detectors/mobile-app.test.js +57 -0
  173. package/dist/project/detectors/mobile-app.test.js.map +1 -0
  174. package/dist/project/detectors/required-fields.d.ts +4 -0
  175. package/dist/project/detectors/required-fields.d.ts.map +1 -0
  176. package/dist/project/detectors/required-fields.js +13 -0
  177. package/dist/project/detectors/required-fields.js.map +1 -0
  178. package/dist/project/detectors/required-fields.test.d.ts +2 -0
  179. package/dist/project/detectors/required-fields.test.d.ts.map +1 -0
  180. package/dist/project/detectors/required-fields.test.js +24 -0
  181. package/dist/project/detectors/required-fields.test.js.map +1 -0
  182. package/dist/project/detectors/resolve-detection.d.ts +18 -0
  183. package/dist/project/detectors/resolve-detection.d.ts.map +1 -0
  184. package/dist/project/detectors/resolve-detection.js +184 -0
  185. package/dist/project/detectors/resolve-detection.js.map +1 -0
  186. package/dist/project/detectors/resolve-detection.test.d.ts +2 -0
  187. package/dist/project/detectors/resolve-detection.test.d.ts.map +1 -0
  188. package/dist/project/detectors/resolve-detection.test.js +158 -0
  189. package/dist/project/detectors/resolve-detection.test.js.map +1 -0
  190. package/dist/project/detectors/types.d.ts +56 -0
  191. package/dist/project/detectors/types.d.ts.map +1 -0
  192. package/dist/project/detectors/types.js +9 -0
  193. package/dist/project/detectors/types.js.map +1 -0
  194. package/dist/project/detectors/web-app.d.ts +15 -0
  195. package/dist/project/detectors/web-app.d.ts.map +1 -0
  196. package/dist/project/detectors/web-app.js +228 -0
  197. package/dist/project/detectors/web-app.js.map +1 -0
  198. package/dist/project/detectors/web-app.test.d.ts +2 -0
  199. package/dist/project/detectors/web-app.test.d.ts.map +1 -0
  200. package/dist/project/detectors/web-app.test.js +95 -0
  201. package/dist/project/detectors/web-app.test.js.map +1 -0
  202. package/dist/types/config.d.ts +33 -0
  203. package/dist/types/config.d.ts.map +1 -1
  204. package/dist/types/enums.d.ts +2 -1
  205. package/dist/types/enums.d.ts.map +1 -1
  206. package/dist/types/enums.js +1 -0
  207. package/dist/types/enums.js.map +1 -1
  208. package/dist/utils/errors.d.ts +7 -0
  209. package/dist/utils/errors.d.ts.map +1 -1
  210. package/dist/utils/errors.js +38 -0
  211. package/dist/utils/errors.js.map +1 -1
  212. package/dist/utils/errors.test.js +42 -1
  213. package/dist/utils/errors.test.js.map +1 -1
  214. package/package.json +6 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-v3.9.2.d.ts","sourceRoot":"","sources":["../../../src/project/__frozen-schemas__/schema-v3.9.2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAYvB,eAAO,MAAM,iBAAiB,uHAG5B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;EAKpB,CAAA;AAEX,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAMrB,CAAA;AAEX,eAAO,MAAM,eAAe;;;;;;;;;;;;EAMjB,CAAA;AAEX,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAMrB,CAAA;AAEX,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAKvB,CAAA;AAEX,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;EAM1B,CAAA;AAEX,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAKhB,CAAA;AAEX,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;EAK9B,CAAA;AAEX,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBlB,CAAA;AA+FX,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAMT,CAAA;AAEhB,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA"}
@@ -0,0 +1,177 @@
1
+ // src/config/schema.ts
2
+ import { z } from 'zod';
3
+ const CustomStepSchema = z.object({
4
+ enabled: z.boolean().optional(),
5
+ depth: z.number().int().min(1).max(5).optional(),
6
+ }).strict();
7
+ const CustomSchema = z.object({
8
+ default_depth: z.number().int().min(1).max(5).optional(),
9
+ steps: z.record(z.string(), CustomStepSchema).optional(),
10
+ }).strict();
11
+ export const ProjectTypeSchema = z.enum([
12
+ 'web-app', 'mobile-app', 'backend', 'cli', 'library', 'game',
13
+ 'data-pipeline', 'ml', 'browser-extension',
14
+ ]);
15
+ export const WebAppConfigSchema = z.object({
16
+ renderingStrategy: z.enum(['spa', 'ssr', 'ssg', 'hybrid']),
17
+ deployTarget: z.enum(['static', 'serverless', 'container', 'edge', 'long-running']).default('serverless'),
18
+ realtime: z.enum(['none', 'websocket', 'sse']).default('none'),
19
+ authFlow: z.enum(['none', 'session', 'oauth', 'passkey']).default('none'),
20
+ }).strict();
21
+ export const BackendConfigSchema = z.object({
22
+ apiStyle: z.enum(['rest', 'graphql', 'grpc', 'trpc', 'none']),
23
+ dataStore: z.array(z.enum(['relational', 'document', 'key-value'])).min(1).default(['relational']),
24
+ authMechanism: z.enum(['none', 'jwt', 'session', 'oauth', 'apikey']).default('none'),
25
+ asyncMessaging: z.enum(['none', 'queue', 'event-driven']).default('none'),
26
+ deployTarget: z.enum(['serverless', 'container', 'long-running']).default('container'),
27
+ }).strict();
28
+ export const CliConfigSchema = z.object({
29
+ interactivity: z.enum(['args-only', 'interactive', 'hybrid']),
30
+ distributionChannels: z.array(z.enum(['package-manager', 'system-package-manager', 'standalone-binary', 'container'])).min(1).default(['package-manager']),
31
+ hasStructuredOutput: z.boolean().default(false),
32
+ }).strict();
33
+ export const LibraryConfigSchema = z.object({
34
+ visibility: z.enum(['public', 'internal']),
35
+ runtimeTarget: z.enum(['node', 'browser', 'isomorphic', 'edge']).default('isomorphic'),
36
+ bundleFormat: z.enum(['esm', 'cjs', 'dual', 'unbundled']).default('dual'),
37
+ hasTypeDefinitions: z.boolean().default(true),
38
+ documentationLevel: z.enum(['none', 'readme', 'api-docs', 'full-site']).default('readme'),
39
+ }).strict();
40
+ export const MobileAppConfigSchema = z.object({
41
+ platform: z.enum(['ios', 'android', 'cross-platform']),
42
+ distributionModel: z.enum(['public', 'private', 'mixed']).default('public'),
43
+ offlineSupport: z.enum(['none', 'cache', 'offline-first']).default('none'),
44
+ hasPushNotifications: z.boolean().default(false),
45
+ }).strict();
46
+ export const DataPipelineConfigSchema = z.object({
47
+ processingModel: z.enum(['batch', 'streaming', 'hybrid']),
48
+ orchestration: z.enum(['none', 'dag-based', 'event-driven', 'scheduled']).default('none'),
49
+ dataQualityStrategy: z.enum(['none', 'validation', 'testing', 'observability']).default('validation'),
50
+ schemaManagement: z.enum(['none', 'schema-registry', 'contracts']).default('none'),
51
+ hasDataCatalog: z.boolean().default(false),
52
+ }).strict();
53
+ export const MlConfigSchema = z.object({
54
+ projectPhase: z.enum(['training', 'inference', 'both']),
55
+ modelType: z.enum(['classical', 'deep-learning', 'llm']).default('deep-learning'),
56
+ servingPattern: z.enum(['none', 'batch', 'realtime', 'edge']).default('none'),
57
+ hasExperimentTracking: z.boolean().default(true),
58
+ }).strict();
59
+ export const BrowserExtensionConfigSchema = z.object({
60
+ manifestVersion: z.enum(['2', '3']).default('3'),
61
+ uiSurfaces: z.array(z.enum(['popup', 'options', 'newtab', 'devtools', 'sidepanel'])).default(['popup']),
62
+ hasContentScript: z.boolean().default(false),
63
+ hasBackgroundWorker: z.boolean().default(true),
64
+ }).strict();
65
+ export const GameConfigSchema = z.object({
66
+ engine: z.enum(['unity', 'unreal', 'godot', 'custom']),
67
+ multiplayerMode: z.enum(['none', 'local', 'online', 'hybrid']).default('none'),
68
+ narrative: z.enum(['none', 'light', 'heavy']).default('none'),
69
+ contentStructure: z.enum(['discrete', 'open-world', 'procedural', 'endless', 'mission-based']).default('discrete'),
70
+ economy: z.enum(['none', 'progression', 'monetized', 'both']).default('none'),
71
+ onlineServices: z.array(z.enum(['leaderboards', 'accounts', 'matchmaking', 'live-ops'])).default([]),
72
+ persistence: z.enum(['none', 'settings-only', 'profile', 'progression', 'cloud']).default('progression'),
73
+ targetPlatforms: z.array(z.enum(['pc', 'web', 'ios', 'android', 'ps5', 'xbox', 'switch', 'vr', 'ar'])).min(1).default(['pc']),
74
+ supportedLocales: z.array(z.string().regex(/^[a-z]{2}(-[A-Z]{2})?$/, 'Must be a valid locale code (e.g. "en", "en-US", "ja", "fr-FR")')).min(1).default(['en']),
75
+ hasModding: z.boolean().default(false),
76
+ npcAiComplexity: z.enum(['none', 'simple', 'complex']).default('none'),
77
+ }).strict();
78
+ const ProjectSchema = z.object({
79
+ name: z.string().min(1).optional(),
80
+ platforms: z.array(z.enum(['web', 'mobile', 'desktop'])).optional(),
81
+ projectType: ProjectTypeSchema.optional(),
82
+ gameConfig: GameConfigSchema.optional(),
83
+ webAppConfig: WebAppConfigSchema.optional(),
84
+ backendConfig: BackendConfigSchema.optional(),
85
+ cliConfig: CliConfigSchema.optional(),
86
+ libraryConfig: LibraryConfigSchema.optional(),
87
+ mobileAppConfig: MobileAppConfigSchema.optional(),
88
+ dataPipelineConfig: DataPipelineConfigSchema.optional(),
89
+ mlConfig: MlConfigSchema.optional(),
90
+ browserExtensionConfig: BrowserExtensionConfigSchema.optional(),
91
+ }).passthrough() // allow unknown fields per ADR-033
92
+ .superRefine((data, ctx) => {
93
+ if (data.gameConfig !== undefined && data.projectType !== 'game') {
94
+ ctx.addIssue({ path: ['gameConfig'], code: 'custom',
95
+ message: 'gameConfig is only valid when projectType is "game"' });
96
+ }
97
+ if (data.webAppConfig !== undefined && data.projectType !== 'web-app') {
98
+ ctx.addIssue({ path: ['webAppConfig'], code: 'custom',
99
+ message: 'webAppConfig requires projectType: web-app' });
100
+ }
101
+ if (data.backendConfig !== undefined && data.projectType !== 'backend') {
102
+ ctx.addIssue({ path: ['backendConfig'], code: 'custom',
103
+ message: 'backendConfig requires projectType: backend' });
104
+ }
105
+ if (data.cliConfig !== undefined && data.projectType !== 'cli') {
106
+ ctx.addIssue({ path: ['cliConfig'], code: 'custom',
107
+ message: 'cliConfig requires projectType: cli' });
108
+ }
109
+ if (data.libraryConfig !== undefined && data.projectType !== 'library') {
110
+ ctx.addIssue({ path: ['libraryConfig'], code: 'custom',
111
+ message: 'libraryConfig requires projectType: library' });
112
+ }
113
+ if (data.mobileAppConfig !== undefined && data.projectType !== 'mobile-app') {
114
+ ctx.addIssue({ path: ['mobileAppConfig'], code: 'custom',
115
+ message: 'mobileAppConfig requires projectType: mobile-app' });
116
+ }
117
+ if (data.dataPipelineConfig !== undefined && data.projectType !== 'data-pipeline') {
118
+ ctx.addIssue({ path: ['dataPipelineConfig'], code: 'custom',
119
+ message: 'dataPipelineConfig requires projectType: data-pipeline' });
120
+ }
121
+ if (data.mlConfig !== undefined && data.projectType !== 'ml') {
122
+ ctx.addIssue({ path: ['mlConfig'], code: 'custom',
123
+ message: 'mlConfig requires projectType: ml' });
124
+ }
125
+ if (data.browserExtensionConfig !== undefined && data.projectType !== 'browser-extension') {
126
+ ctx.addIssue({ path: ['browserExtensionConfig'], code: 'custom',
127
+ message: 'browserExtensionConfig requires projectType: browser-extension' });
128
+ }
129
+ if (data.libraryConfig) {
130
+ const { visibility, documentationLevel } = data.libraryConfig;
131
+ if (visibility === 'public' && documentationLevel === 'none') {
132
+ ctx.addIssue({
133
+ path: ['libraryConfig', 'documentationLevel'],
134
+ code: 'custom',
135
+ message: 'Public libraries should have documentation'
136
+ + ' (documentationLevel: none with visibility: public)',
137
+ });
138
+ }
139
+ }
140
+ if (data.webAppConfig) {
141
+ const { renderingStrategy, deployTarget, authFlow } = data.webAppConfig;
142
+ if (['ssr', 'hybrid'].includes(renderingStrategy) && deployTarget === 'static') {
143
+ ctx.addIssue({ path: ['webAppConfig', 'deployTarget'], code: 'custom',
144
+ message: 'SSR/hybrid rendering requires compute, not static hosting' });
145
+ }
146
+ if (authFlow === 'session' && deployTarget === 'static') {
147
+ ctx.addIssue({ path: ['webAppConfig', 'authFlow'], code: 'custom',
148
+ message: 'Session auth requires server state, incompatible with static hosting' });
149
+ }
150
+ }
151
+ if (data.mlConfig) {
152
+ const { projectPhase, servingPattern } = data.mlConfig;
153
+ if (projectPhase === 'inference' && servingPattern === 'none') {
154
+ ctx.addIssue({ path: ['mlConfig', 'servingPattern'], code: 'custom',
155
+ message: 'Inference projects must specify a serving pattern' });
156
+ }
157
+ if (projectPhase === 'training' && servingPattern !== 'none') {
158
+ ctx.addIssue({ path: ['mlConfig', 'servingPattern'], code: 'custom',
159
+ message: 'Training-only projects should not have a serving pattern' });
160
+ }
161
+ }
162
+ if (data.browserExtensionConfig) {
163
+ const { uiSurfaces, hasContentScript, hasBackgroundWorker } = data.browserExtensionConfig;
164
+ if ((!uiSurfaces || uiSurfaces.length === 0) && !hasContentScript && !hasBackgroundWorker) {
165
+ ctx.addIssue({ path: ['browserExtensionConfig'], code: 'custom',
166
+ message: 'Extension must have at least one UI surface, content script, or background worker' });
167
+ }
168
+ }
169
+ });
170
+ export const ConfigSchema = z.object({
171
+ version: z.literal(2),
172
+ methodology: z.enum(['deep', 'mvp', 'custom']),
173
+ custom: CustomSchema.optional(),
174
+ platforms: z.array(z.enum(['claude-code', 'codex', 'gemini'])).min(1),
175
+ project: ProjectSchema.optional(),
176
+ }).passthrough(); // allow unknown fields at top level per ADR-033
177
+ //# sourceMappingURL=schema-v3.9.2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-v3.9.2.js","sourceRoot":"","sources":["../../../src/project/__frozen-schemas__/schema-v3.9.2.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,8 @@
1
- import type { ScaffoldError, ScaffoldWarning, ProjectType, GameConfig } from '../types/index.js';
1
+ import type { ScaffoldError, ScaffoldWarning, ProjectType, GameConfig, DetectedConfig } from '../types/index.js';
2
+ import type { Confidence, DetectionEvidence } from './detectors/types.js';
3
+ import type { PartialConfigOverrides } from '../cli/init-flag-families.js';
4
+ declare const TYPE_KEY: Record<ProjectType, string>;
5
+ export { TYPE_KEY };
2
6
  export type AdaptationStrategy = 'update-mode' | 'skip-recommended' | 'context-only' | 'full-run';
3
7
  export interface ArtifactMatch {
4
8
  artifactPath: string;
@@ -15,7 +19,11 @@ export interface AdoptionResult {
15
19
  errors: ScaffoldError[];
16
20
  warnings: ScaffoldWarning[];
17
21
  projectType?: ProjectType;
22
+ /** @deprecated Use detectedConfig instead. Removed in v4.0. */
18
23
  gameConfig?: Partial<GameConfig>;
24
+ detectedConfig?: DetectedConfig;
25
+ detectionEvidence?: readonly DetectionEvidence[];
26
+ detectionConfidence?: Confidence;
19
27
  }
20
28
  /**
21
29
  * Scan projectRoot for existing artifacts, match to pipeline steps,
@@ -26,5 +34,33 @@ export declare function runAdoption(options: {
26
34
  metaPromptDir: string;
27
35
  methodology: string;
28
36
  dryRun: boolean;
29
- }): AdoptionResult;
37
+ auto?: boolean;
38
+ force?: boolean;
39
+ verbose?: boolean;
40
+ explicitProjectType?: ProjectType;
41
+ flagOverrides?: PartialConfigOverrides;
42
+ }): Promise<AdoptionResult>;
43
+ export interface FieldConflict {
44
+ readonly field: string;
45
+ readonly existing: unknown;
46
+ readonly detected: unknown;
47
+ }
48
+ /**
49
+ * Shallow merge: existing values win on overlap, detected fills gaps.
50
+ * Returns the merged object plus a list of FieldConflict records for any field
51
+ * where detected and existing disagree (caller emits ADOPT_FIELD_CONFLICT warnings).
52
+ *
53
+ * Uses JSON.stringify for value equality so arrays and (future) nested objects
54
+ * are compared by content, not reference.
55
+ */
56
+ export declare function mergeRawConfig<T extends Record<string, unknown>>(detected: Partial<T>, existing: Record<string, unknown> | undefined): {
57
+ merged: Record<string, unknown>;
58
+ conflicts: FieldConflict[];
59
+ };
60
+ export declare function applyFlagOverrides<T extends Record<string, unknown>>(base: Record<string, unknown>, overrides: Partial<T> | undefined): Record<string, unknown>;
61
+ /**
62
+ * Convert FieldConflict[] into ADOPT_FIELD_CONFLICT warnings for the orchestrator
63
+ * to push onto result.warnings.
64
+ */
65
+ export declare function emitFieldConflictWarnings(conflicts: readonly FieldConflict[], configKey: string): import('../types/index.js').ScaffoldWarning[];
30
66
  //# sourceMappingURL=adopt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adopt.d.ts","sourceRoot":"","sources":["../../src/project/adopt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAIhG,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,kBAAkB,GAAG,cAAc,GAAG,UAAU,CAAA;AAEjG,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,kBAAkB,CAAA;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,GAAG,YAAY,GAAG,cAAc,CAAA;IAClD,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,aAAa,EAAE,CAAA;IAClC,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,aAAa,EAAE,CAAA;IACvB,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;CACjC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;CAChB,GAAG,cAAc,CA2EjB"}
1
+ {"version":3,"file":"adopt.d.ts","sourceRoot":"","sources":["../../src/project/adopt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adopt.error-messages.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt.error-messages.test.d.ts","sourceRoot":"","sources":["../../src/project/adopt.error-messages.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,112 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import fs from 'node:fs';
5
+ // ---------------------------------------------------------------------------
6
+ // Hoisted mocks
7
+ // ---------------------------------------------------------------------------
8
+ vi.mock('./detector.js', () => ({
9
+ detectProjectMode: vi.fn(() => ({
10
+ mode: 'brownfield',
11
+ signals: [],
12
+ methodologySuggestion: 'deep',
13
+ sourceFileCount: 10,
14
+ })),
15
+ }));
16
+ vi.mock('../core/assembly/meta-prompt-loader.js', () => ({
17
+ discoverMetaPrompts: vi.fn(() => new Map()),
18
+ }));
19
+ // ---------------------------------------------------------------------------
20
+ // Imports (after mocks)
21
+ // ---------------------------------------------------------------------------
22
+ import { runAdoption } from './adopt.js';
23
+ // ---------------------------------------------------------------------------
24
+ // Helpers
25
+ // ---------------------------------------------------------------------------
26
+ function makeTempDir() {
27
+ return fs.mkdtempSync(path.join(os.tmpdir(), 'scaffold-err-msg-'));
28
+ }
29
+ function seedConfig(dir, content) {
30
+ const scaffoldDir = path.join(dir, '.scaffold');
31
+ fs.mkdirSync(scaffoldDir, { recursive: true });
32
+ fs.writeFileSync(path.join(scaffoldDir, 'config.yml'), content, 'utf8');
33
+ }
34
+ function baseOpts(dir) {
35
+ return {
36
+ projectRoot: dir,
37
+ metaPromptDir: path.join(dir, 'content', 'pipeline'),
38
+ methodology: 'deep',
39
+ dryRun: true,
40
+ auto: true,
41
+ };
42
+ }
43
+ // ---------------------------------------------------------------------------
44
+ // Error message snapshot tests
45
+ // ---------------------------------------------------------------------------
46
+ describe('adoption error messages', () => {
47
+ let tmpDir;
48
+ beforeEach(() => {
49
+ tmpDir = makeTempDir();
50
+ });
51
+ afterEach(() => {
52
+ fs.rmSync(tmpDir, { recursive: true, force: true });
53
+ vi.restoreAllMocks();
54
+ });
55
+ it('ADOPT_TYPE_CONFLICT includes both types and recovery hint', async () => {
56
+ seedConfig(tmpDir, 'version: 2\nproject:\n projectType: game\n');
57
+ const result = await runAdoption({
58
+ ...baseOpts(tmpDir),
59
+ explicitProjectType: 'web-app',
60
+ });
61
+ expect(result.errors).toHaveLength(1);
62
+ const err = result.errors[0];
63
+ expect(err.code).toBe('ADOPT_TYPE_CONFLICT');
64
+ expect(err.message).toMatch(/game/);
65
+ expect(err.message).toMatch(/web-app/);
66
+ expect(err.message).toMatch(/--force/);
67
+ expect(err.exitCode).toBe(6); // ExitCode.Ambiguous
68
+ });
69
+ it('ADOPT_DETECTION_INCONCLUSIVE includes existing type', async () => {
70
+ seedConfig(tmpDir, 'version: 2\nproject:\n projectType: backend\n');
71
+ const result = await runAdoption({ ...baseOpts(tmpDir) });
72
+ const warning = result.warnings.find(w => w.code === 'ADOPT_DETECTION_INCONCLUSIVE');
73
+ expect(warning).toBeDefined();
74
+ expect(warning.message).toMatch(/backend/);
75
+ expect(warning.message).toMatch(/--force/);
76
+ expect(warning.message).toMatch(/--project-type/);
77
+ });
78
+ it('ADOPT_MISSING_REQUIRED_FIELDS includes type and missing fields', async () => {
79
+ // web-app requires renderingStrategy (no default) — passing explicit
80
+ // project-type with no flags triggers Zod validation failure
81
+ const result = await runAdoption({
82
+ ...baseOpts(tmpDir),
83
+ explicitProjectType: 'web-app',
84
+ });
85
+ expect(result.errors).toHaveLength(1);
86
+ const err = result.errors[0];
87
+ expect(err.code).toBe('ADOPT_MISSING_REQUIRED_FIELDS');
88
+ expect(err.message).toMatch(/web-app/);
89
+ expect(err.message).toMatch(/renderingStrategy/);
90
+ expect(err.exitCode).toBe(1); // ExitCode.ValidationError
91
+ });
92
+ it('ADOPT_GAME_CONFIG_DEPRECATED includes removal timeline', async () => {
93
+ const assetsDir = path.join(tmpDir, 'Assets');
94
+ fs.mkdirSync(assetsDir, { recursive: true });
95
+ fs.writeFileSync(path.join(assetsDir, 'foo.meta'), '');
96
+ const result = await runAdoption({ ...baseOpts(tmpDir) });
97
+ const warning = result.warnings.find(w => w.code === 'ADOPT_GAME_CONFIG_DEPRECATED');
98
+ expect(warning).toBeDefined();
99
+ expect(warning.message).toMatch(/gameConfig/);
100
+ expect(warning.message).toMatch(/detectedConfig/);
101
+ expect(warning.message).toMatch(/v4\.0/);
102
+ });
103
+ it('CONFIG_PARSE_ERROR includes file path', async () => {
104
+ seedConfig(tmpDir, '{unclosed');
105
+ const result = await runAdoption({ ...baseOpts(tmpDir) });
106
+ expect(result.errors).toHaveLength(1);
107
+ const err = result.errors[0];
108
+ expect(err.code).toBe('CONFIG_PARSE_ERROR');
109
+ expect(err.context?.file).toContain('config.yml');
110
+ });
111
+ });
112
+ //# sourceMappingURL=adopt.error-messages.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt.error-messages.test.js","sourceRoot":"","sources":["../../src/project/adopt.error-messages.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adopt.forward-compat.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt.forward-compat.test.d.ts","sourceRoot":"","sources":["../../src/project/adopt.forward-compat.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ // src/project/adopt.forward-compat.test.ts
2
+ import { describe, it, expect } from 'vitest';
3
+ import { ConfigSchema as V39Schema } from './__frozen-schemas__/schema-v3.9.2.js';
4
+ describe('forward compat: v3.10 output parses under frozen v3.9.2 schema', () => {
5
+ // PRECONDITION: v3.9.2's ProjectSchema must use .passthrough() for unknown fields
6
+ // (verified by spec ADR-033). If the schema is .strict(), these tests will fail
7
+ // and the dual-emit guarantee needs revisiting. The first test below pins this.
8
+ it('PRECONDITION: v3.9.2 ProjectSchema accepts unknown fields (passthrough)', () => {
9
+ const minimal = {
10
+ version: 2,
11
+ methodology: 'deep',
12
+ platforms: ['claude-code'],
13
+ project: {
14
+ projectType: 'web-app',
15
+ // unknown field that v3.9.2 doesn't know about
16
+ someUnknownField: 'allowed by passthrough',
17
+ },
18
+ };
19
+ const result = V39Schema.safeParse(minimal);
20
+ if (!result.success) {
21
+ console.error('PRECONDITION FAILED:', result.error.errors);
22
+ console.error('v3.9.2 ProjectSchema is .strict(), not .passthrough().');
23
+ console.error('Forward-compat dual-emit is broken — escalate to user before proceeding.');
24
+ }
25
+ expect(result.success).toBe(true);
26
+ });
27
+ it('a v3.10 game config (with gameConfig dual-emit) parses under v3.9.2', () => {
28
+ const v310Output = {
29
+ version: 2,
30
+ methodology: 'deep',
31
+ platforms: ['claude-code'],
32
+ project: {
33
+ projectType: 'game',
34
+ gameConfig: { engine: 'unity' }, // v3.9.2 knows this
35
+ detectedConfig: { type: 'game', config: { engine: 'unity' } }, // v3.9.2 doesn't, must passthrough
36
+ },
37
+ };
38
+ const result = V39Schema.safeParse(v310Output);
39
+ expect(result.success).toBe(true);
40
+ });
41
+ it('a v3.10 web-app config parses under v3.9.2', () => {
42
+ const v310Output = {
43
+ version: 2,
44
+ methodology: 'deep',
45
+ platforms: ['claude-code'],
46
+ project: {
47
+ projectType: 'web-app',
48
+ webAppConfig: { renderingStrategy: 'ssr' }, // v3.9.2 knows this from R1
49
+ detectedConfig: { type: 'web-app', config: { renderingStrategy: 'ssr' } },
50
+ },
51
+ };
52
+ const result = V39Schema.safeParse(v310Output);
53
+ expect(result.success).toBe(true);
54
+ });
55
+ it('unknown top-level fields like detectionConfidence pass through (ADR-033)', () => {
56
+ const v310Output = {
57
+ version: 2,
58
+ methodology: 'deep',
59
+ platforms: ['claude-code'],
60
+ project: {
61
+ projectType: 'web-app',
62
+ webAppConfig: { renderingStrategy: 'ssr' },
63
+ detectionConfidence: 'high',
64
+ detectionEvidence: [],
65
+ },
66
+ };
67
+ const result = V39Schema.safeParse(v310Output);
68
+ expect(result.success).toBe(true);
69
+ });
70
+ });
71
+ //# sourceMappingURL=adopt.forward-compat.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt.forward-compat.test.js","sourceRoot":"","sources":["../../src/project/adopt.forward-compat.test.ts"],"names":[],"mappings":"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"}