@flextudio/scenario 0.1.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 (856) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +260 -0
  3. package/bin/flex-scenario.mjs +895 -0
  4. package/commands/flex-spec.md +28 -0
  5. package/contract-data/README.md +267 -0
  6. package/contract-data/examples/README.md +147 -0
  7. package/contract-data/examples/basic/basic-list-detail.json +2521 -0
  8. package/contract-data/examples/basic/delivery-address-popup.json +2175 -0
  9. package/contract-data/examples/basic/fixedtop-floating-form.json +1524 -0
  10. package/contract-data/examples/basic/search-period-popup.json +1524 -0
  11. package/contract-data/examples/design/booking-wizard-3step.json +1335 -0
  12. package/contract-data/examples/design/list-detail-form-3step.json +1516 -0
  13. package/contract-data/examples/design/list-filter-2step.json +1365 -0
  14. package/contract-data/examples/design/list-filter-detail-3step.json +1570 -0
  15. package/contract-data/examples/design/result-entry-wizard-4step.json +1861 -0
  16. package/contract-data/examples/intent/mock-employee-list.json +54 -0
  17. package/contract-data/examples/intent/script-cart-flow.json +96 -0
  18. package/contract-data/examples/intent/script-dialog-confirm.json +61 -0
  19. package/contract-data/runtime/v1/collection/README.md +119 -0
  20. package/contract-data/runtime/v1/collection/_c.md +205 -0
  21. package/contract-data/runtime/v1/collection/category.md +165 -0
  22. package/contract-data/runtime/v1/collection/collection.md +135 -0
  23. package/contract-data/runtime/v1/collection/lifecycle.md +140 -0
  24. package/contract-data/runtime/v1/collection/naming.md +174 -0
  25. package/contract-data/runtime/v1/collection/sector.md +176 -0
  26. package/contract-data/runtime/v1/collection/status.md +114 -0
  27. package/contract-data/runtime/v1/intent-system/INTENT.md +552 -0
  28. package/contract-data/runtime/v1/intent-system/README.md +118 -0
  29. package/contract-data/runtime/v1/intent-system/intent.schema.json +164 -0
  30. package/contract-data/runtime/v1/intent-system/kinds/_base.mjs +137 -0
  31. package/contract-data/runtime/v1/intent-system/kinds/clearCategory.mjs +35 -0
  32. package/contract-data/runtime/v1/intent-system/kinds/copyStepValues.mjs +100 -0
  33. package/contract-data/runtime/v1/intent-system/kinds/deleteActive.mjs +45 -0
  34. package/contract-data/runtime/v1/intent-system/kinds/dialog.mjs +127 -0
  35. package/contract-data/runtime/v1/intent-system/kinds/reloadGroup.mjs +28 -0
  36. package/contract-data/runtime/v1/intent-system/kinds/updateActive.mjs +74 -0
  37. package/contract-data/runtime/v1/intent-system/materialize.mjs +495 -0
  38. package/contract-data/runtime/v1/script/README.md +37 -0
  39. package/contract-data/runtime/v1/script/current_step.md +112 -0
  40. package/contract-data/runtime/v1/script/f_collection.md +142 -0
  41. package/contract-data/runtime/v1/script/f_content.md +133 -0
  42. package/contract-data/runtime/v1/script/f_messagebox.md +132 -0
  43. package/contract-data/runtime/v1/script/scenario-gen-rules.md +264 -0
  44. package/contract-data/schema/v1/SKELETON-SHELL.md +120 -0
  45. package/contract-data/schema/v1/bottom-buttons.md +155 -0
  46. package/contract-data/schema/v1/bottom-buttons.schema.json +134 -0
  47. package/contract-data/schema/v1/control/_base.schema.json +1296 -0
  48. package/contract-data/schema/v1/control/button.md +147 -0
  49. package/contract-data/schema/v1/control/button.schema.json +55 -0
  50. package/contract-data/schema/v1/control/calendar-navigator.md +143 -0
  51. package/contract-data/schema/v1/control/calendar-navigator.schema.json +164 -0
  52. package/contract-data/schema/v1/control/calendar.md +128 -0
  53. package/contract-data/schema/v1/control/calendar.schema.json +18 -0
  54. package/contract-data/schema/v1/control/check-box.md +117 -0
  55. package/contract-data/schema/v1/control/check-box.schema.json +41 -0
  56. package/contract-data/schema/v1/control/combo.md +293 -0
  57. package/contract-data/schema/v1/control/combo.schema.json +23 -0
  58. package/contract-data/schema/v1/control/embed.md +211 -0
  59. package/contract-data/schema/v1/control/embed.schema.json +30 -0
  60. package/contract-data/schema/v1/control/image-box.md +237 -0
  61. package/contract-data/schema/v1/control/image-box.schema.json +49 -0
  62. package/contract-data/schema/v1/control/input-date.md +175 -0
  63. package/contract-data/schema/v1/control/input-date.schema.json +27 -0
  64. package/contract-data/schema/v1/control/input-file.md +192 -0
  65. package/contract-data/schema/v1/control/input-file.schema.json +139 -0
  66. package/contract-data/schema/v1/control/input-mask.md +89 -0
  67. package/contract-data/schema/v1/control/input-mask.schema.json +45 -0
  68. package/contract-data/schema/v1/control/input-number.md +55 -0
  69. package/contract-data/schema/v1/control/input-number.schema.json +24 -0
  70. package/contract-data/schema/v1/control/input-text.md +73 -0
  71. package/contract-data/schema/v1/control/input-text.schema.json +24 -0
  72. package/contract-data/schema/v1/control/label.md +127 -0
  73. package/contract-data/schema/v1/control/label.schema.json +113 -0
  74. package/contract-data/schema/v1/control/multi-input-box.md +51 -0
  75. package/contract-data/schema/v1/control/multi-input-box.schema.json +19 -0
  76. package/contract-data/schema/v1/control/other.schema.json +24 -0
  77. package/contract-data/schema/v1/control/radio-box.md +150 -0
  78. package/contract-data/schema/v1/control/radio-box.schema.json +87 -0
  79. package/contract-data/schema/v1/control/search.md +163 -0
  80. package/contract-data/schema/v1/control/search.schema.json +23 -0
  81. package/contract-data/schema/v1/control/tab.md +240 -0
  82. package/contract-data/schema/v1/control/tab.schema.json +112 -0
  83. package/contract-data/schema/v1/control/tree.md +278 -0
  84. package/contract-data/schema/v1/control/tree.schema.json +83 -0
  85. package/contract-data/schema/v1/control.md +264 -0
  86. package/contract-data/schema/v1/control.schema.json +30 -0
  87. package/contract-data/schema/v1/data-objects.md +278 -0
  88. package/contract-data/schema/v1/data-objects.schema.json +161 -0
  89. package/contract-data/schema/v1/data-sources.md +215 -0
  90. package/contract-data/schema/v1/data-sources.schema.json +184 -0
  91. package/contract-data/schema/v1/design-system/DESIGN.md +282 -0
  92. package/contract-data/schema/v1/design-system/README.md +235 -0
  93. package/contract-data/schema/v1/design-system/design.schema.json +496 -0
  94. package/contract-data/schema/v1/design-system/error-mapping.mjs +132 -0
  95. package/contract-data/schema/v1/design-system/materialize.mjs +1435 -0
  96. package/contract-data/schema/v1/design-system/tests/_base.additional-meta.test.mjs +98 -0
  97. package/contract-data/schema/v1/design-system/tests/_base.materialize.test.mjs +596 -0
  98. package/contract-data/schema/v1/design-system/tests/checklist.test.mjs +135 -0
  99. package/contract-data/schema/v1/design-system/tests/design.schema.test.mjs +487 -0
  100. package/contract-data/schema/v1/design-system/tests/error-mapping.test.mjs +244 -0
  101. package/contract-data/schema/v1/design-system/tests/materialize.test.mjs +1093 -0
  102. package/contract-data/schema/v1/design-system/tests/move-step.test.mjs +119 -0
  103. package/contract-data/schema/v1/design-system/tests/override.integration.test.mjs +116 -0
  104. package/contract-data/schema/v1/design-system/tokens.json +76 -0
  105. package/contract-data/schema/v1/events.md +467 -0
  106. package/contract-data/schema/v1/events.schema.json +272 -0
  107. package/contract-data/schema/v1/group.md +146 -0
  108. package/contract-data/schema/v1/group.schema.json +133 -0
  109. package/contract-data/schema/v1/mockup-data.md +186 -0
  110. package/contract-data/schema/v1/naming-objects.schema.json +133 -0
  111. package/contract-data/schema/v1/node.md +32 -0
  112. package/contract-data/schema/v1/node.schema.json +24 -0
  113. package/contract-data/schema/v1/patterns/_base.additional-meta.mjs +135 -0
  114. package/contract-data/schema/v1/patterns/_base.controls.mjs +759 -0
  115. package/contract-data/schema/v1/patterns/_base.icon.mjs +61 -0
  116. package/contract-data/schema/v1/patterns/_base.id.mjs +15 -0
  117. package/contract-data/schema/v1/patterns/_base.materialize.mjs +1181 -0
  118. package/contract-data/schema/v1/patterns/_base.style.mjs +312 -0
  119. package/contract-data/schema/v1/patterns/atom/badge.materialize.mjs +68 -0
  120. package/contract-data/schema/v1/patterns/atom/badge.schema.json +44 -0
  121. package/contract-data/schema/v1/patterns/atom/button.materialize.mjs +91 -0
  122. package/contract-data/schema/v1/patterns/atom/button.schema.json +70 -0
  123. package/contract-data/schema/v1/patterns/atom/checkbox.materialize.mjs +40 -0
  124. package/contract-data/schema/v1/patterns/atom/checkbox.schema.json +39 -0
  125. package/contract-data/schema/v1/patterns/atom/segmented-radio.materialize.mjs +67 -0
  126. package/contract-data/schema/v1/patterns/atom/segmented-radio.schema.json +49 -0
  127. package/contract-data/schema/v1/patterns/atom/switch.materialize.mjs +58 -0
  128. package/contract-data/schema/v1/patterns/atom/switch.schema.json +27 -0
  129. package/contract-data/schema/v1/patterns/molecule/checklist.materialize.mjs +130 -0
  130. package/contract-data/schema/v1/patterns/molecule/checklist.schema.json +63 -0
  131. package/contract-data/schema/v1/patterns/molecule/input-action.materialize.mjs +356 -0
  132. package/contract-data/schema/v1/patterns/molecule/input-action.schema.json +251 -0
  133. package/contract-data/schema/v1/patterns/molecule/input-button.materialize.mjs +183 -0
  134. package/contract-data/schema/v1/patterns/molecule/input-button.schema.json +141 -0
  135. package/contract-data/schema/v1/patterns/molecule/input-pair.materialize.mjs +254 -0
  136. package/contract-data/schema/v1/patterns/molecule/input-pair.schema.json +210 -0
  137. package/contract-data/schema/v1/scenario.md +112 -0
  138. package/contract-data/schema/v1/scenario.schema.json +161 -0
  139. package/contract-data/schema/v1/service/CustomSystem.md +139 -0
  140. package/contract-data/schema/v1/service/CustomSystem.schema.json +41 -0
  141. package/contract-data/schema/v1/service/Firestore.md +125 -0
  142. package/contract-data/schema/v1/service/Firestore.schema.json +28 -0
  143. package/contract-data/schema/v1/service/FlexAutoQuery.md +128 -0
  144. package/contract-data/schema/v1/service/FlexAutoQuery.schema.json +35 -0
  145. package/contract-data/schema/v1/service/FlexSQL.md +96 -0
  146. package/contract-data/schema/v1/service/FlexSQL.schema.json +33 -0
  147. package/contract-data/schema/v1/service/Flextudio API.md +161 -0
  148. package/contract-data/schema/v1/service/Flextudio API.schema.json +115 -0
  149. package/contract-data/schema/v1/service/Flextudio.md +87 -0
  150. package/contract-data/schema/v1/service/Flextudio.schema.json +26 -0
  151. package/contract-data/schema/v1/service/GoogleSheet.md +71 -0
  152. package/contract-data/schema/v1/service/GoogleSheet.schema.json +31 -0
  153. package/contract-data/schema/v1/service/README.md +127 -0
  154. package/contract-data/schema/v1/service/_base.schema.json +31 -0
  155. package/contract-data/schema/v1/service/ksystem.md +76 -0
  156. package/contract-data/schema/v1/service/ksystem.schema.json +36 -0
  157. package/contract-data/schema/v1/service-binding.md +228 -0
  158. package/contract-data/schema/v1/service-binding.schema.json +51 -0
  159. package/contract-data/schema/v1/step.md +546 -0
  160. package/contract-data/schema/v1/step.schema.json +258 -0
  161. package/contract-data/schema/v1/style-objects.md +183 -0
  162. package/contract-data/schema/v1/style-objects.schema.json +155 -0
  163. package/contract-data/spec/catalog.json +406 -0
  164. package/contract-data/spec/rules.md +400 -0
  165. package/node_modules/@flextudio/contract-core/contract.mjs +367 -0
  166. package/node_modules/@flextudio/contract-core/index.mjs +16 -0
  167. package/node_modules/@flextudio/contract-core/package.json +21 -0
  168. package/node_modules/@flextudio/contract-core/paths.mjs +72 -0
  169. package/node_modules/@flextudio/contract-core/schemas.mjs +474 -0
  170. package/node_modules/@flextudio/contract-core/validators.mjs +2471 -0
  171. package/node_modules/ajv/.runkit_example.js +23 -0
  172. package/node_modules/ajv/LICENSE +22 -0
  173. package/node_modules/ajv/README.md +207 -0
  174. package/node_modules/ajv/dist/2019.d.ts +19 -0
  175. package/node_modules/ajv/dist/2019.js +61 -0
  176. package/node_modules/ajv/dist/2019.js.map +1 -0
  177. package/node_modules/ajv/dist/2020.d.ts +19 -0
  178. package/node_modules/ajv/dist/2020.js +55 -0
  179. package/node_modules/ajv/dist/2020.js.map +1 -0
  180. package/node_modules/ajv/dist/ajv.d.ts +18 -0
  181. package/node_modules/ajv/dist/ajv.js +50 -0
  182. package/node_modules/ajv/dist/ajv.js.map +1 -0
  183. package/node_modules/ajv/dist/compile/codegen/code.d.ts +40 -0
  184. package/node_modules/ajv/dist/compile/codegen/code.js +156 -0
  185. package/node_modules/ajv/dist/compile/codegen/code.js.map +1 -0
  186. package/node_modules/ajv/dist/compile/codegen/index.d.ts +79 -0
  187. package/node_modules/ajv/dist/compile/codegen/index.js +697 -0
  188. package/node_modules/ajv/dist/compile/codegen/index.js.map +1 -0
  189. package/node_modules/ajv/dist/compile/codegen/scope.d.ts +79 -0
  190. package/node_modules/ajv/dist/compile/codegen/scope.js +143 -0
  191. package/node_modules/ajv/dist/compile/codegen/scope.js.map +1 -0
  192. package/node_modules/ajv/dist/compile/errors.d.ts +13 -0
  193. package/node_modules/ajv/dist/compile/errors.js +123 -0
  194. package/node_modules/ajv/dist/compile/errors.js.map +1 -0
  195. package/node_modules/ajv/dist/compile/index.d.ts +80 -0
  196. package/node_modules/ajv/dist/compile/index.js +242 -0
  197. package/node_modules/ajv/dist/compile/index.js.map +1 -0
  198. package/node_modules/ajv/dist/compile/jtd/parse.d.ts +4 -0
  199. package/node_modules/ajv/dist/compile/jtd/parse.js +350 -0
  200. package/node_modules/ajv/dist/compile/jtd/parse.js.map +1 -0
  201. package/node_modules/ajv/dist/compile/jtd/serialize.d.ts +4 -0
  202. package/node_modules/ajv/dist/compile/jtd/serialize.js +236 -0
  203. package/node_modules/ajv/dist/compile/jtd/serialize.js.map +1 -0
  204. package/node_modules/ajv/dist/compile/jtd/types.d.ts +6 -0
  205. package/node_modules/ajv/dist/compile/jtd/types.js +14 -0
  206. package/node_modules/ajv/dist/compile/jtd/types.js.map +1 -0
  207. package/node_modules/ajv/dist/compile/names.d.ts +20 -0
  208. package/node_modules/ajv/dist/compile/names.js +28 -0
  209. package/node_modules/ajv/dist/compile/names.js.map +1 -0
  210. package/node_modules/ajv/dist/compile/ref_error.d.ts +6 -0
  211. package/node_modules/ajv/dist/compile/ref_error.js +12 -0
  212. package/node_modules/ajv/dist/compile/ref_error.js.map +1 -0
  213. package/node_modules/ajv/dist/compile/resolve.d.ts +12 -0
  214. package/node_modules/ajv/dist/compile/resolve.js +155 -0
  215. package/node_modules/ajv/dist/compile/resolve.js.map +1 -0
  216. package/node_modules/ajv/dist/compile/rules.d.ts +28 -0
  217. package/node_modules/ajv/dist/compile/rules.js +26 -0
  218. package/node_modules/ajv/dist/compile/rules.js.map +1 -0
  219. package/node_modules/ajv/dist/compile/util.d.ts +40 -0
  220. package/node_modules/ajv/dist/compile/util.js +178 -0
  221. package/node_modules/ajv/dist/compile/util.js.map +1 -0
  222. package/node_modules/ajv/dist/compile/validate/applicability.d.ts +6 -0
  223. package/node_modules/ajv/dist/compile/validate/applicability.js +19 -0
  224. package/node_modules/ajv/dist/compile/validate/applicability.js.map +1 -0
  225. package/node_modules/ajv/dist/compile/validate/boolSchema.d.ts +4 -0
  226. package/node_modules/ajv/dist/compile/validate/boolSchema.js +50 -0
  227. package/node_modules/ajv/dist/compile/validate/boolSchema.js.map +1 -0
  228. package/node_modules/ajv/dist/compile/validate/dataType.d.ts +17 -0
  229. package/node_modules/ajv/dist/compile/validate/dataType.js +203 -0
  230. package/node_modules/ajv/dist/compile/validate/dataType.js.map +1 -0
  231. package/node_modules/ajv/dist/compile/validate/defaults.d.ts +2 -0
  232. package/node_modules/ajv/dist/compile/validate/defaults.js +35 -0
  233. package/node_modules/ajv/dist/compile/validate/defaults.js.map +1 -0
  234. package/node_modules/ajv/dist/compile/validate/index.d.ts +42 -0
  235. package/node_modules/ajv/dist/compile/validate/index.js +520 -0
  236. package/node_modules/ajv/dist/compile/validate/index.js.map +1 -0
  237. package/node_modules/ajv/dist/compile/validate/keyword.d.ts +8 -0
  238. package/node_modules/ajv/dist/compile/validate/keyword.js +124 -0
  239. package/node_modules/ajv/dist/compile/validate/keyword.js.map +1 -0
  240. package/node_modules/ajv/dist/compile/validate/subschema.d.ts +47 -0
  241. package/node_modules/ajv/dist/compile/validate/subschema.js +81 -0
  242. package/node_modules/ajv/dist/compile/validate/subschema.js.map +1 -0
  243. package/node_modules/ajv/dist/core.d.ts +174 -0
  244. package/node_modules/ajv/dist/core.js +618 -0
  245. package/node_modules/ajv/dist/core.js.map +1 -0
  246. package/node_modules/ajv/dist/jtd.d.ts +47 -0
  247. package/node_modules/ajv/dist/jtd.js +72 -0
  248. package/node_modules/ajv/dist/jtd.js.map +1 -0
  249. package/node_modules/ajv/dist/refs/data.json +13 -0
  250. package/node_modules/ajv/dist/refs/json-schema-2019-09/index.d.ts +2 -0
  251. package/node_modules/ajv/dist/refs/json-schema-2019-09/index.js +28 -0
  252. package/node_modules/ajv/dist/refs/json-schema-2019-09/index.js.map +1 -0
  253. package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/applicator.json +53 -0
  254. package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/content.json +17 -0
  255. package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/core.json +57 -0
  256. package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/format.json +14 -0
  257. package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/meta-data.json +37 -0
  258. package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/validation.json +90 -0
  259. package/node_modules/ajv/dist/refs/json-schema-2019-09/schema.json +39 -0
  260. package/node_modules/ajv/dist/refs/json-schema-2020-12/index.d.ts +2 -0
  261. package/node_modules/ajv/dist/refs/json-schema-2020-12/index.js +30 -0
  262. package/node_modules/ajv/dist/refs/json-schema-2020-12/index.js.map +1 -0
  263. package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.json +48 -0
  264. package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.json +17 -0
  265. package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.json +51 -0
  266. package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.json +14 -0
  267. package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.json +37 -0
  268. package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.json +15 -0
  269. package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.json +90 -0
  270. package/node_modules/ajv/dist/refs/json-schema-2020-12/schema.json +55 -0
  271. package/node_modules/ajv/dist/refs/json-schema-draft-06.json +137 -0
  272. package/node_modules/ajv/dist/refs/json-schema-draft-07.json +151 -0
  273. package/node_modules/ajv/dist/refs/json-schema-secure.json +88 -0
  274. package/node_modules/ajv/dist/refs/jtd-schema.d.ts +3 -0
  275. package/node_modules/ajv/dist/refs/jtd-schema.js +118 -0
  276. package/node_modules/ajv/dist/refs/jtd-schema.js.map +1 -0
  277. package/node_modules/ajv/dist/runtime/equal.d.ts +6 -0
  278. package/node_modules/ajv/dist/runtime/equal.js +7 -0
  279. package/node_modules/ajv/dist/runtime/equal.js.map +1 -0
  280. package/node_modules/ajv/dist/runtime/parseJson.d.ts +18 -0
  281. package/node_modules/ajv/dist/runtime/parseJson.js +185 -0
  282. package/node_modules/ajv/dist/runtime/parseJson.js.map +1 -0
  283. package/node_modules/ajv/dist/runtime/quote.d.ts +5 -0
  284. package/node_modules/ajv/dist/runtime/quote.js +30 -0
  285. package/node_modules/ajv/dist/runtime/quote.js.map +1 -0
  286. package/node_modules/ajv/dist/runtime/re2.d.ts +6 -0
  287. package/node_modules/ajv/dist/runtime/re2.js +6 -0
  288. package/node_modules/ajv/dist/runtime/re2.js.map +1 -0
  289. package/node_modules/ajv/dist/runtime/timestamp.d.ts +5 -0
  290. package/node_modules/ajv/dist/runtime/timestamp.js +42 -0
  291. package/node_modules/ajv/dist/runtime/timestamp.js.map +1 -0
  292. package/node_modules/ajv/dist/runtime/ucs2length.d.ts +5 -0
  293. package/node_modules/ajv/dist/runtime/ucs2length.js +24 -0
  294. package/node_modules/ajv/dist/runtime/ucs2length.js.map +1 -0
  295. package/node_modules/ajv/dist/runtime/uri.d.ts +6 -0
  296. package/node_modules/ajv/dist/runtime/uri.js +6 -0
  297. package/node_modules/ajv/dist/runtime/uri.js.map +1 -0
  298. package/node_modules/ajv/dist/runtime/validation_error.d.ts +7 -0
  299. package/node_modules/ajv/dist/runtime/validation_error.js +11 -0
  300. package/node_modules/ajv/dist/runtime/validation_error.js.map +1 -0
  301. package/node_modules/ajv/dist/standalone/index.d.ts +6 -0
  302. package/node_modules/ajv/dist/standalone/index.js +90 -0
  303. package/node_modules/ajv/dist/standalone/index.js.map +1 -0
  304. package/node_modules/ajv/dist/standalone/instance.d.ts +12 -0
  305. package/node_modules/ajv/dist/standalone/instance.js +35 -0
  306. package/node_modules/ajv/dist/standalone/instance.js.map +1 -0
  307. package/node_modules/ajv/dist/types/index.d.ts +183 -0
  308. package/node_modules/ajv/dist/types/index.js +3 -0
  309. package/node_modules/ajv/dist/types/index.js.map +1 -0
  310. package/node_modules/ajv/dist/types/json-schema.d.ts +125 -0
  311. package/node_modules/ajv/dist/types/json-schema.js +3 -0
  312. package/node_modules/ajv/dist/types/json-schema.js.map +1 -0
  313. package/node_modules/ajv/dist/types/jtd-schema.d.ts +174 -0
  314. package/node_modules/ajv/dist/types/jtd-schema.js +3 -0
  315. package/node_modules/ajv/dist/types/jtd-schema.js.map +1 -0
  316. package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.d.ts +8 -0
  317. package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +49 -0
  318. package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js.map +1 -0
  319. package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.d.ts +6 -0
  320. package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +106 -0
  321. package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js.map +1 -0
  322. package/node_modules/ajv/dist/vocabularies/applicator/allOf.d.ts +3 -0
  323. package/node_modules/ajv/dist/vocabularies/applicator/allOf.js +23 -0
  324. package/node_modules/ajv/dist/vocabularies/applicator/allOf.js.map +1 -0
  325. package/node_modules/ajv/dist/vocabularies/applicator/anyOf.d.ts +4 -0
  326. package/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +12 -0
  327. package/node_modules/ajv/dist/vocabularies/applicator/anyOf.js.map +1 -0
  328. package/node_modules/ajv/dist/vocabularies/applicator/contains.d.ts +7 -0
  329. package/node_modules/ajv/dist/vocabularies/applicator/contains.js +95 -0
  330. package/node_modules/ajv/dist/vocabularies/applicator/contains.js.map +1 -0
  331. package/node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts +21 -0
  332. package/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +85 -0
  333. package/node_modules/ajv/dist/vocabularies/applicator/dependencies.js.map +1 -0
  334. package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.d.ts +3 -0
  335. package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js +11 -0
  336. package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js.map +1 -0
  337. package/node_modules/ajv/dist/vocabularies/applicator/if.d.ts +6 -0
  338. package/node_modules/ajv/dist/vocabularies/applicator/if.js +66 -0
  339. package/node_modules/ajv/dist/vocabularies/applicator/if.js.map +1 -0
  340. package/node_modules/ajv/dist/vocabularies/applicator/index.d.ts +13 -0
  341. package/node_modules/ajv/dist/vocabularies/applicator/index.js +44 -0
  342. package/node_modules/ajv/dist/vocabularies/applicator/index.js.map +1 -0
  343. package/node_modules/ajv/dist/vocabularies/applicator/items.d.ts +5 -0
  344. package/node_modules/ajv/dist/vocabularies/applicator/items.js +52 -0
  345. package/node_modules/ajv/dist/vocabularies/applicator/items.js.map +1 -0
  346. package/node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts +6 -0
  347. package/node_modules/ajv/dist/vocabularies/applicator/items2020.js +30 -0
  348. package/node_modules/ajv/dist/vocabularies/applicator/items2020.js.map +1 -0
  349. package/node_modules/ajv/dist/vocabularies/applicator/not.d.ts +4 -0
  350. package/node_modules/ajv/dist/vocabularies/applicator/not.js +26 -0
  351. package/node_modules/ajv/dist/vocabularies/applicator/not.js.map +1 -0
  352. package/node_modules/ajv/dist/vocabularies/applicator/oneOf.d.ts +6 -0
  353. package/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +60 -0
  354. package/node_modules/ajv/dist/vocabularies/applicator/oneOf.js.map +1 -0
  355. package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.d.ts +3 -0
  356. package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +75 -0
  357. package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js.map +1 -0
  358. package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.d.ts +3 -0
  359. package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +12 -0
  360. package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js.map +1 -0
  361. package/node_modules/ajv/dist/vocabularies/applicator/properties.d.ts +3 -0
  362. package/node_modules/ajv/dist/vocabularies/applicator/properties.js +54 -0
  363. package/node_modules/ajv/dist/vocabularies/applicator/properties.js.map +1 -0
  364. package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.d.ts +6 -0
  365. package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +38 -0
  366. package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js.map +1 -0
  367. package/node_modules/ajv/dist/vocabularies/applicator/thenElse.d.ts +3 -0
  368. package/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +13 -0
  369. package/node_modules/ajv/dist/vocabularies/applicator/thenElse.js.map +1 -0
  370. package/node_modules/ajv/dist/vocabularies/code.d.ts +17 -0
  371. package/node_modules/ajv/dist/vocabularies/code.js +131 -0
  372. package/node_modules/ajv/dist/vocabularies/code.js.map +1 -0
  373. package/node_modules/ajv/dist/vocabularies/core/id.d.ts +3 -0
  374. package/node_modules/ajv/dist/vocabularies/core/id.js +10 -0
  375. package/node_modules/ajv/dist/vocabularies/core/id.js.map +1 -0
  376. package/node_modules/ajv/dist/vocabularies/core/index.d.ts +3 -0
  377. package/node_modules/ajv/dist/vocabularies/core/index.js +16 -0
  378. package/node_modules/ajv/dist/vocabularies/core/index.js.map +1 -0
  379. package/node_modules/ajv/dist/vocabularies/core/ref.d.ts +8 -0
  380. package/node_modules/ajv/dist/vocabularies/core/ref.js +122 -0
  381. package/node_modules/ajv/dist/vocabularies/core/ref.js.map +1 -0
  382. package/node_modules/ajv/dist/vocabularies/discriminator/index.d.ts +5 -0
  383. package/node_modules/ajv/dist/vocabularies/discriminator/index.js +104 -0
  384. package/node_modules/ajv/dist/vocabularies/discriminator/index.js.map +1 -0
  385. package/node_modules/ajv/dist/vocabularies/discriminator/types.d.ts +10 -0
  386. package/node_modules/ajv/dist/vocabularies/discriminator/types.js +9 -0
  387. package/node_modules/ajv/dist/vocabularies/discriminator/types.js.map +1 -0
  388. package/node_modules/ajv/dist/vocabularies/draft2020.d.ts +3 -0
  389. package/node_modules/ajv/dist/vocabularies/draft2020.js +23 -0
  390. package/node_modules/ajv/dist/vocabularies/draft2020.js.map +1 -0
  391. package/node_modules/ajv/dist/vocabularies/draft7.d.ts +3 -0
  392. package/node_modules/ajv/dist/vocabularies/draft7.js +17 -0
  393. package/node_modules/ajv/dist/vocabularies/draft7.js.map +1 -0
  394. package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.d.ts +5 -0
  395. package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js +30 -0
  396. package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js.map +1 -0
  397. package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.d.ts +5 -0
  398. package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js +51 -0
  399. package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js.map +1 -0
  400. package/node_modules/ajv/dist/vocabularies/dynamic/index.d.ts +3 -0
  401. package/node_modules/ajv/dist/vocabularies/dynamic/index.js +9 -0
  402. package/node_modules/ajv/dist/vocabularies/dynamic/index.js.map +1 -0
  403. package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.d.ts +3 -0
  404. package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js +16 -0
  405. package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js.map +1 -0
  406. package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.d.ts +3 -0
  407. package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js +10 -0
  408. package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js.map +1 -0
  409. package/node_modules/ajv/dist/vocabularies/errors.d.ts +9 -0
  410. package/node_modules/ajv/dist/vocabularies/errors.js +3 -0
  411. package/node_modules/ajv/dist/vocabularies/errors.js.map +1 -0
  412. package/node_modules/ajv/dist/vocabularies/format/format.d.ts +8 -0
  413. package/node_modules/ajv/dist/vocabularies/format/format.js +92 -0
  414. package/node_modules/ajv/dist/vocabularies/format/format.js.map +1 -0
  415. package/node_modules/ajv/dist/vocabularies/format/index.d.ts +3 -0
  416. package/node_modules/ajv/dist/vocabularies/format/index.js +6 -0
  417. package/node_modules/ajv/dist/vocabularies/format/index.js.map +1 -0
  418. package/node_modules/ajv/dist/vocabularies/jtd/discriminator.d.ts +6 -0
  419. package/node_modules/ajv/dist/vocabularies/jtd/discriminator.js +71 -0
  420. package/node_modules/ajv/dist/vocabularies/jtd/discriminator.js.map +1 -0
  421. package/node_modules/ajv/dist/vocabularies/jtd/elements.d.ts +5 -0
  422. package/node_modules/ajv/dist/vocabularies/jtd/elements.js +24 -0
  423. package/node_modules/ajv/dist/vocabularies/jtd/elements.js.map +1 -0
  424. package/node_modules/ajv/dist/vocabularies/jtd/enum.d.ts +6 -0
  425. package/node_modules/ajv/dist/vocabularies/jtd/enum.js +43 -0
  426. package/node_modules/ajv/dist/vocabularies/jtd/enum.js.map +1 -0
  427. package/node_modules/ajv/dist/vocabularies/jtd/error.d.ts +9 -0
  428. package/node_modules/ajv/dist/vocabularies/jtd/error.js +20 -0
  429. package/node_modules/ajv/dist/vocabularies/jtd/error.js.map +1 -0
  430. package/node_modules/ajv/dist/vocabularies/jtd/index.d.ts +10 -0
  431. package/node_modules/ajv/dist/vocabularies/jtd/index.js +29 -0
  432. package/node_modules/ajv/dist/vocabularies/jtd/index.js.map +1 -0
  433. package/node_modules/ajv/dist/vocabularies/jtd/metadata.d.ts +5 -0
  434. package/node_modules/ajv/dist/vocabularies/jtd/metadata.js +25 -0
  435. package/node_modules/ajv/dist/vocabularies/jtd/metadata.js.map +1 -0
  436. package/node_modules/ajv/dist/vocabularies/jtd/nullable.d.ts +4 -0
  437. package/node_modules/ajv/dist/vocabularies/jtd/nullable.js +22 -0
  438. package/node_modules/ajv/dist/vocabularies/jtd/nullable.js.map +1 -0
  439. package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.d.ts +3 -0
  440. package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.js +15 -0
  441. package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.js.map +1 -0
  442. package/node_modules/ajv/dist/vocabularies/jtd/properties.d.ts +22 -0
  443. package/node_modules/ajv/dist/vocabularies/jtd/properties.js +149 -0
  444. package/node_modules/ajv/dist/vocabularies/jtd/properties.js.map +1 -0
  445. package/node_modules/ajv/dist/vocabularies/jtd/ref.d.ts +4 -0
  446. package/node_modules/ajv/dist/vocabularies/jtd/ref.js +67 -0
  447. package/node_modules/ajv/dist/vocabularies/jtd/ref.js.map +1 -0
  448. package/node_modules/ajv/dist/vocabularies/jtd/type.d.ts +10 -0
  449. package/node_modules/ajv/dist/vocabularies/jtd/type.js +69 -0
  450. package/node_modules/ajv/dist/vocabularies/jtd/type.js.map +1 -0
  451. package/node_modules/ajv/dist/vocabularies/jtd/union.d.ts +3 -0
  452. package/node_modules/ajv/dist/vocabularies/jtd/union.js +12 -0
  453. package/node_modules/ajv/dist/vocabularies/jtd/union.js.map +1 -0
  454. package/node_modules/ajv/dist/vocabularies/jtd/values.d.ts +5 -0
  455. package/node_modules/ajv/dist/vocabularies/jtd/values.js +51 -0
  456. package/node_modules/ajv/dist/vocabularies/jtd/values.js.map +1 -0
  457. package/node_modules/ajv/dist/vocabularies/metadata.d.ts +3 -0
  458. package/node_modules/ajv/dist/vocabularies/metadata.js +18 -0
  459. package/node_modules/ajv/dist/vocabularies/metadata.js.map +1 -0
  460. package/node_modules/ajv/dist/vocabularies/next.d.ts +3 -0
  461. package/node_modules/ajv/dist/vocabularies/next.js +8 -0
  462. package/node_modules/ajv/dist/vocabularies/next.js.map +1 -0
  463. package/node_modules/ajv/dist/vocabularies/unevaluated/index.d.ts +3 -0
  464. package/node_modules/ajv/dist/vocabularies/unevaluated/index.js +7 -0
  465. package/node_modules/ajv/dist/vocabularies/unevaluated/index.js.map +1 -0
  466. package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.d.ts +6 -0
  467. package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js +40 -0
  468. package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js.map +1 -0
  469. package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.d.ts +6 -0
  470. package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js +65 -0
  471. package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js.map +1 -0
  472. package/node_modules/ajv/dist/vocabularies/validation/const.d.ts +6 -0
  473. package/node_modules/ajv/dist/vocabularies/validation/const.js +25 -0
  474. package/node_modules/ajv/dist/vocabularies/validation/const.js.map +1 -0
  475. package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.d.ts +5 -0
  476. package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js +12 -0
  477. package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js.map +1 -0
  478. package/node_modules/ajv/dist/vocabularies/validation/enum.d.ts +8 -0
  479. package/node_modules/ajv/dist/vocabularies/validation/enum.js +48 -0
  480. package/node_modules/ajv/dist/vocabularies/validation/enum.js.map +1 -0
  481. package/node_modules/ajv/dist/vocabularies/validation/index.d.ts +16 -0
  482. package/node_modules/ajv/dist/vocabularies/validation/index.js +33 -0
  483. package/node_modules/ajv/dist/vocabularies/validation/index.js.map +1 -0
  484. package/node_modules/ajv/dist/vocabularies/validation/limitContains.d.ts +3 -0
  485. package/node_modules/ajv/dist/vocabularies/validation/limitContains.js +15 -0
  486. package/node_modules/ajv/dist/vocabularies/validation/limitContains.js.map +1 -0
  487. package/node_modules/ajv/dist/vocabularies/validation/limitItems.d.ts +3 -0
  488. package/node_modules/ajv/dist/vocabularies/validation/limitItems.js +24 -0
  489. package/node_modules/ajv/dist/vocabularies/validation/limitItems.js.map +1 -0
  490. package/node_modules/ajv/dist/vocabularies/validation/limitLength.d.ts +3 -0
  491. package/node_modules/ajv/dist/vocabularies/validation/limitLength.js +27 -0
  492. package/node_modules/ajv/dist/vocabularies/validation/limitLength.js.map +1 -0
  493. package/node_modules/ajv/dist/vocabularies/validation/limitNumber.d.ts +11 -0
  494. package/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +27 -0
  495. package/node_modules/ajv/dist/vocabularies/validation/limitNumber.js.map +1 -0
  496. package/node_modules/ajv/dist/vocabularies/validation/limitProperties.d.ts +3 -0
  497. package/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +24 -0
  498. package/node_modules/ajv/dist/vocabularies/validation/limitProperties.js.map +1 -0
  499. package/node_modules/ajv/dist/vocabularies/validation/multipleOf.d.ts +8 -0
  500. package/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +26 -0
  501. package/node_modules/ajv/dist/vocabularies/validation/multipleOf.js.map +1 -0
  502. package/node_modules/ajv/dist/vocabularies/validation/pattern.d.ts +8 -0
  503. package/node_modules/ajv/dist/vocabularies/validation/pattern.js +33 -0
  504. package/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -0
  505. package/node_modules/ajv/dist/vocabularies/validation/required.d.ts +8 -0
  506. package/node_modules/ajv/dist/vocabularies/validation/required.js +79 -0
  507. package/node_modules/ajv/dist/vocabularies/validation/required.js.map +1 -0
  508. package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.d.ts +9 -0
  509. package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +64 -0
  510. package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js.map +1 -0
  511. package/node_modules/ajv/lib/2019.ts +81 -0
  512. package/node_modules/ajv/lib/2020.ts +75 -0
  513. package/node_modules/ajv/lib/ajv.ts +70 -0
  514. package/node_modules/ajv/lib/compile/codegen/code.ts +169 -0
  515. package/node_modules/ajv/lib/compile/codegen/index.ts +852 -0
  516. package/node_modules/ajv/lib/compile/codegen/scope.ts +215 -0
  517. package/node_modules/ajv/lib/compile/errors.ts +184 -0
  518. package/node_modules/ajv/lib/compile/index.ts +324 -0
  519. package/node_modules/ajv/lib/compile/jtd/parse.ts +411 -0
  520. package/node_modules/ajv/lib/compile/jtd/serialize.ts +277 -0
  521. package/node_modules/ajv/lib/compile/jtd/types.ts +16 -0
  522. package/node_modules/ajv/lib/compile/names.ts +27 -0
  523. package/node_modules/ajv/lib/compile/ref_error.ts +13 -0
  524. package/node_modules/ajv/lib/compile/resolve.ts +149 -0
  525. package/node_modules/ajv/lib/compile/rules.ts +50 -0
  526. package/node_modules/ajv/lib/compile/util.ts +213 -0
  527. package/node_modules/ajv/lib/compile/validate/applicability.ts +22 -0
  528. package/node_modules/ajv/lib/compile/validate/boolSchema.ts +47 -0
  529. package/node_modules/ajv/lib/compile/validate/dataType.ts +230 -0
  530. package/node_modules/ajv/lib/compile/validate/defaults.ts +32 -0
  531. package/node_modules/ajv/lib/compile/validate/index.ts +582 -0
  532. package/node_modules/ajv/lib/compile/validate/keyword.ts +171 -0
  533. package/node_modules/ajv/lib/compile/validate/subschema.ts +135 -0
  534. package/node_modules/ajv/lib/core.ts +892 -0
  535. package/node_modules/ajv/lib/jtd.ts +132 -0
  536. package/node_modules/ajv/lib/refs/data.json +13 -0
  537. package/node_modules/ajv/lib/refs/json-schema-2019-09/index.ts +28 -0
  538. package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/applicator.json +53 -0
  539. package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/content.json +17 -0
  540. package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/core.json +57 -0
  541. package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/format.json +14 -0
  542. package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/meta-data.json +37 -0
  543. package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/validation.json +90 -0
  544. package/node_modules/ajv/lib/refs/json-schema-2019-09/schema.json +39 -0
  545. package/node_modules/ajv/lib/refs/json-schema-2020-12/index.ts +30 -0
  546. package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/applicator.json +48 -0
  547. package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/content.json +17 -0
  548. package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/core.json +51 -0
  549. package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/format-annotation.json +14 -0
  550. package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/meta-data.json +37 -0
  551. package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/unevaluated.json +15 -0
  552. package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/validation.json +90 -0
  553. package/node_modules/ajv/lib/refs/json-schema-2020-12/schema.json +55 -0
  554. package/node_modules/ajv/lib/refs/json-schema-draft-06.json +137 -0
  555. package/node_modules/ajv/lib/refs/json-schema-draft-07.json +151 -0
  556. package/node_modules/ajv/lib/refs/json-schema-secure.json +88 -0
  557. package/node_modules/ajv/lib/refs/jtd-schema.ts +130 -0
  558. package/node_modules/ajv/lib/runtime/equal.ts +7 -0
  559. package/node_modules/ajv/lib/runtime/parseJson.ts +177 -0
  560. package/node_modules/ajv/lib/runtime/quote.ts +31 -0
  561. package/node_modules/ajv/lib/runtime/re2.ts +6 -0
  562. package/node_modules/ajv/lib/runtime/timestamp.ts +46 -0
  563. package/node_modules/ajv/lib/runtime/ucs2length.ts +20 -0
  564. package/node_modules/ajv/lib/runtime/uri.ts +6 -0
  565. package/node_modules/ajv/lib/runtime/validation_error.ts +13 -0
  566. package/node_modules/ajv/lib/standalone/index.ts +100 -0
  567. package/node_modules/ajv/lib/standalone/instance.ts +36 -0
  568. package/node_modules/ajv/lib/types/index.ts +244 -0
  569. package/node_modules/ajv/lib/types/json-schema.ts +187 -0
  570. package/node_modules/ajv/lib/types/jtd-schema.ts +273 -0
  571. package/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts +56 -0
  572. package/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts +118 -0
  573. package/node_modules/ajv/lib/vocabularies/applicator/allOf.ts +22 -0
  574. package/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts +14 -0
  575. package/node_modules/ajv/lib/vocabularies/applicator/contains.ts +109 -0
  576. package/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts +112 -0
  577. package/node_modules/ajv/lib/vocabularies/applicator/dependentSchemas.ts +11 -0
  578. package/node_modules/ajv/lib/vocabularies/applicator/if.ts +80 -0
  579. package/node_modules/ajv/lib/vocabularies/applicator/index.ts +53 -0
  580. package/node_modules/ajv/lib/vocabularies/applicator/items.ts +59 -0
  581. package/node_modules/ajv/lib/vocabularies/applicator/items2020.ts +36 -0
  582. package/node_modules/ajv/lib/vocabularies/applicator/not.ts +38 -0
  583. package/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts +82 -0
  584. package/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts +91 -0
  585. package/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts +12 -0
  586. package/node_modules/ajv/lib/vocabularies/applicator/properties.ts +57 -0
  587. package/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts +50 -0
  588. package/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts +13 -0
  589. package/node_modules/ajv/lib/vocabularies/code.ts +168 -0
  590. package/node_modules/ajv/lib/vocabularies/core/id.ts +10 -0
  591. package/node_modules/ajv/lib/vocabularies/core/index.ts +16 -0
  592. package/node_modules/ajv/lib/vocabularies/core/ref.ts +129 -0
  593. package/node_modules/ajv/lib/vocabularies/discriminator/index.ts +113 -0
  594. package/node_modules/ajv/lib/vocabularies/discriminator/types.ts +12 -0
  595. package/node_modules/ajv/lib/vocabularies/draft2020.ts +23 -0
  596. package/node_modules/ajv/lib/vocabularies/draft7.ts +17 -0
  597. package/node_modules/ajv/lib/vocabularies/dynamic/dynamicAnchor.ts +31 -0
  598. package/node_modules/ajv/lib/vocabularies/dynamic/dynamicRef.ts +51 -0
  599. package/node_modules/ajv/lib/vocabularies/dynamic/index.ts +9 -0
  600. package/node_modules/ajv/lib/vocabularies/dynamic/recursiveAnchor.ts +14 -0
  601. package/node_modules/ajv/lib/vocabularies/dynamic/recursiveRef.ts +10 -0
  602. package/node_modules/ajv/lib/vocabularies/errors.ts +18 -0
  603. package/node_modules/ajv/lib/vocabularies/format/format.ts +120 -0
  604. package/node_modules/ajv/lib/vocabularies/format/index.ts +6 -0
  605. package/node_modules/ajv/lib/vocabularies/jtd/discriminator.ts +89 -0
  606. package/node_modules/ajv/lib/vocabularies/jtd/elements.ts +32 -0
  607. package/node_modules/ajv/lib/vocabularies/jtd/enum.ts +45 -0
  608. package/node_modules/ajv/lib/vocabularies/jtd/error.ts +23 -0
  609. package/node_modules/ajv/lib/vocabularies/jtd/index.ts +37 -0
  610. package/node_modules/ajv/lib/vocabularies/jtd/metadata.ts +24 -0
  611. package/node_modules/ajv/lib/vocabularies/jtd/nullable.ts +21 -0
  612. package/node_modules/ajv/lib/vocabularies/jtd/optionalProperties.ts +15 -0
  613. package/node_modules/ajv/lib/vocabularies/jtd/properties.ts +184 -0
  614. package/node_modules/ajv/lib/vocabularies/jtd/ref.ts +76 -0
  615. package/node_modules/ajv/lib/vocabularies/jtd/type.ts +75 -0
  616. package/node_modules/ajv/lib/vocabularies/jtd/union.ts +12 -0
  617. package/node_modules/ajv/lib/vocabularies/jtd/values.ts +58 -0
  618. package/node_modules/ajv/lib/vocabularies/metadata.ts +17 -0
  619. package/node_modules/ajv/lib/vocabularies/next.ts +8 -0
  620. package/node_modules/ajv/lib/vocabularies/unevaluated/index.ts +7 -0
  621. package/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedItems.ts +47 -0
  622. package/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedProperties.ts +85 -0
  623. package/node_modules/ajv/lib/vocabularies/validation/const.ts +28 -0
  624. package/node_modules/ajv/lib/vocabularies/validation/dependentRequired.ts +23 -0
  625. package/node_modules/ajv/lib/vocabularies/validation/enum.ts +54 -0
  626. package/node_modules/ajv/lib/vocabularies/validation/index.ts +49 -0
  627. package/node_modules/ajv/lib/vocabularies/validation/limitContains.ts +16 -0
  628. package/node_modules/ajv/lib/vocabularies/validation/limitItems.ts +26 -0
  629. package/node_modules/ajv/lib/vocabularies/validation/limitLength.ts +30 -0
  630. package/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts +42 -0
  631. package/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts +26 -0
  632. package/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts +34 -0
  633. package/node_modules/ajv/lib/vocabularies/validation/pattern.ts +39 -0
  634. package/node_modules/ajv/lib/vocabularies/validation/required.ts +98 -0
  635. package/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts +79 -0
  636. package/node_modules/ajv/package.json +126 -0
  637. package/node_modules/fast-deep-equal/LICENSE +21 -0
  638. package/node_modules/fast-deep-equal/README.md +96 -0
  639. package/node_modules/fast-deep-equal/es6/index.d.ts +2 -0
  640. package/node_modules/fast-deep-equal/es6/index.js +72 -0
  641. package/node_modules/fast-deep-equal/es6/react.d.ts +2 -0
  642. package/node_modules/fast-deep-equal/es6/react.js +79 -0
  643. package/node_modules/fast-deep-equal/index.d.ts +4 -0
  644. package/node_modules/fast-deep-equal/index.js +46 -0
  645. package/node_modules/fast-deep-equal/package.json +61 -0
  646. package/node_modules/fast-deep-equal/react.d.ts +2 -0
  647. package/node_modules/fast-deep-equal/react.js +53 -0
  648. package/node_modules/fast-uri/.gitattributes +2 -0
  649. package/node_modules/fast-uri/.github/dependabot.yml +13 -0
  650. package/node_modules/fast-uri/.github/workflows/ci.yml +106 -0
  651. package/node_modules/fast-uri/.github/workflows/lock-threads.yml +19 -0
  652. package/node_modules/fast-uri/.github/workflows/package-manager-ci.yml +24 -0
  653. package/node_modules/fast-uri/LICENSE +30 -0
  654. package/node_modules/fast-uri/README.md +152 -0
  655. package/node_modules/fast-uri/benchmark/benchmark.mjs +159 -0
  656. package/node_modules/fast-uri/benchmark/equal.mjs +51 -0
  657. package/node_modules/fast-uri/benchmark/non-simple-domain.mjs +22 -0
  658. package/node_modules/fast-uri/benchmark/package.json +17 -0
  659. package/node_modules/fast-uri/benchmark/string-array-to-hex-stripped.mjs +24 -0
  660. package/node_modules/fast-uri/benchmark/ws-is-secure.mjs +65 -0
  661. package/node_modules/fast-uri/eslint.config.js +6 -0
  662. package/node_modules/fast-uri/index.js +406 -0
  663. package/node_modules/fast-uri/lib/schemes.js +267 -0
  664. package/node_modules/fast-uri/lib/utils.js +443 -0
  665. package/node_modules/fast-uri/package.json +68 -0
  666. package/node_modules/fast-uri/test/ajv.test.js +43 -0
  667. package/node_modules/fast-uri/test/equal.test.js +117 -0
  668. package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +501 -0
  669. package/node_modules/fast-uri/test/fixtures/uri-js-serialize.json +120 -0
  670. package/node_modules/fast-uri/test/parse.test.js +323 -0
  671. package/node_modules/fast-uri/test/resolve.test.js +87 -0
  672. package/node_modules/fast-uri/test/rfc-3986.test.js +90 -0
  673. package/node_modules/fast-uri/test/security-normalization.test.js +39 -0
  674. package/node_modules/fast-uri/test/security.test.js +133 -0
  675. package/node_modules/fast-uri/test/serialize.test.js +151 -0
  676. package/node_modules/fast-uri/test/uri-js-compatibility.test.js +33 -0
  677. package/node_modules/fast-uri/test/uri-js.test.js +912 -0
  678. package/node_modules/fast-uri/test/util.test.js +38 -0
  679. package/node_modules/fast-uri/tsconfig.json +9 -0
  680. package/node_modules/fast-uri/types/index.d.ts +60 -0
  681. package/node_modules/fast-uri/types/index.test-d.ts +17 -0
  682. package/node_modules/json-schema-traverse/.eslintrc.yml +27 -0
  683. package/node_modules/json-schema-traverse/.github/FUNDING.yml +2 -0
  684. package/node_modules/json-schema-traverse/.github/workflows/build.yml +28 -0
  685. package/node_modules/json-schema-traverse/.github/workflows/publish.yml +27 -0
  686. package/node_modules/json-schema-traverse/LICENSE +21 -0
  687. package/node_modules/json-schema-traverse/README.md +95 -0
  688. package/node_modules/json-schema-traverse/index.d.ts +40 -0
  689. package/node_modules/json-schema-traverse/index.js +93 -0
  690. package/node_modules/json-schema-traverse/package.json +43 -0
  691. package/node_modules/json-schema-traverse/spec/.eslintrc.yml +6 -0
  692. package/node_modules/json-schema-traverse/spec/fixtures/schema.js +125 -0
  693. package/node_modules/json-schema-traverse/spec/index.spec.js +171 -0
  694. package/node_modules/require-from-string/index.js +34 -0
  695. package/node_modules/require-from-string/license +21 -0
  696. package/node_modules/require-from-string/package.json +28 -0
  697. package/node_modules/require-from-string/readme.md +56 -0
  698. package/package.json +51 -0
  699. package/scripts/api-call.mjs +59 -0
  700. package/scripts/auth.mjs +262 -0
  701. package/scripts/build-skill-payload.mjs +338 -0
  702. package/scripts/cleanup.mjs +166 -0
  703. package/scripts/install-paths.mjs +146 -0
  704. package/scripts/postinstall.mjs +218 -0
  705. package/scripts/postpack.mjs +43 -0
  706. package/scripts/prepack.mjs +222 -0
  707. package/scripts/tty-menu.mjs +100 -0
  708. package/skill/README.md +55 -0
  709. package/skill/SKILL.md +138 -0
  710. package/skill/catalog.json +406 -0
  711. package/skill/design-rules.md +282 -0
  712. package/skill/design-system.md +235 -0
  713. package/skill/docs/SKELETON-SHELL.md +120 -0
  714. package/skill/docs/bottom-buttons.md +155 -0
  715. package/skill/docs/control/button.md +147 -0
  716. package/skill/docs/control/calendar-navigator.md +143 -0
  717. package/skill/docs/control/calendar.md +128 -0
  718. package/skill/docs/control/check-box.md +117 -0
  719. package/skill/docs/control/combo.md +293 -0
  720. package/skill/docs/control/embed.md +211 -0
  721. package/skill/docs/control/image-box.md +237 -0
  722. package/skill/docs/control/input-date.md +175 -0
  723. package/skill/docs/control/input-file.md +192 -0
  724. package/skill/docs/control/input-mask.md +89 -0
  725. package/skill/docs/control/input-number.md +55 -0
  726. package/skill/docs/control/input-text.md +73 -0
  727. package/skill/docs/control/label.md +127 -0
  728. package/skill/docs/control/multi-input-box.md +51 -0
  729. package/skill/docs/control/radio-box.md +150 -0
  730. package/skill/docs/control/search.md +163 -0
  731. package/skill/docs/control/tab.md +240 -0
  732. package/skill/docs/control/tree.md +278 -0
  733. package/skill/docs/control.md +264 -0
  734. package/skill/docs/data-objects.md +278 -0
  735. package/skill/docs/data-sources.md +215 -0
  736. package/skill/docs/events.md +467 -0
  737. package/skill/docs/group.md +146 -0
  738. package/skill/docs/index.json +125 -0
  739. package/skill/docs/mockup-data.md +186 -0
  740. package/skill/docs/node.md +32 -0
  741. package/skill/docs/scenario.md +112 -0
  742. package/skill/docs/service/CustomSystem.md +139 -0
  743. package/skill/docs/service/Firestore.md +125 -0
  744. package/skill/docs/service/FlexAutoQuery.md +128 -0
  745. package/skill/docs/service/FlexSQL.md +96 -0
  746. package/skill/docs/service/Flextudio API.md +161 -0
  747. package/skill/docs/service/Flextudio.md +87 -0
  748. package/skill/docs/service/GoogleSheet.md +71 -0
  749. package/skill/docs/service/README.md +127 -0
  750. package/skill/docs/service/ksystem.md +76 -0
  751. package/skill/docs/service-binding.md +228 -0
  752. package/skill/docs/step.md +546 -0
  753. package/skill/docs/style-objects.md +183 -0
  754. package/skill/examples/README.md +147 -0
  755. package/skill/examples/basic/basic-list-detail.json +2521 -0
  756. package/skill/examples/basic/delivery-address-popup.json +2175 -0
  757. package/skill/examples/basic/fixedtop-floating-form.json +1524 -0
  758. package/skill/examples/basic/search-period-popup.json +1524 -0
  759. package/skill/examples/design/booking-wizard-3step.json +1335 -0
  760. package/skill/examples/design/list-detail-form-3step.json +1516 -0
  761. package/skill/examples/design/list-filter-2step.json +1365 -0
  762. package/skill/examples/design/list-filter-detail-3step.json +1570 -0
  763. package/skill/examples/design/result-entry-wizard-4step.json +1861 -0
  764. package/skill/examples/index.json +150 -0
  765. package/skill/examples/intent/mock-employee-list.json +54 -0
  766. package/skill/examples/intent/script-cart-flow.json +96 -0
  767. package/skill/examples/intent/script-dialog-confirm.json +61 -0
  768. package/skill/intent-rules.md +552 -0
  769. package/skill/intent-system.md +118 -0
  770. package/skill/patterns/atom/badge.json +103 -0
  771. package/skill/patterns/atom/button.json +111 -0
  772. package/skill/patterns/atom/checkbox.json +70 -0
  773. package/skill/patterns/atom/segmented-radio.json +92 -0
  774. package/skill/patterns/atom/switch.json +57 -0
  775. package/skill/patterns/index.json +471 -0
  776. package/skill/patterns/molecule/checklist.json +107 -0
  777. package/skill/patterns/molecule/input-action.json +355 -0
  778. package/skill/patterns/molecule/input-button.json +212 -0
  779. package/skill/patterns/molecule/input-pair.json +284 -0
  780. package/skill/references/build-sequence.md +55 -0
  781. package/skill/references/patterns-cheatsheet.md +87 -0
  782. package/skill/references/spec-evolve/README.md +43 -0
  783. package/skill/references/spec-evolve/conventions.md +92 -0
  784. package/skill/references/spec-evolve/data-connection.md +102 -0
  785. package/skill/references/spec-evolve/intake.md +41 -0
  786. package/skill/references/spec-evolve/key-roles.md +44 -0
  787. package/skill/references/spec-evolve/lint.md +27 -0
  788. package/skill/references/spec-evolve/mockup.md +50 -0
  789. package/skill/references/spec-evolve/query-screens.md +66 -0
  790. package/skill/references/spec-evolve/routing.md +43 -0
  791. package/skill/references/spec-evolve/spec-format.md +76 -0
  792. package/skill/references/spec-evolve/templates/master-detail.spec.md +97 -0
  793. package/skill/references/spec-evolve/templates/query-screen.spec.md +96 -0
  794. package/skill/references/spec-evolve/templates/static-prototype.spec.md +54 -0
  795. package/skill/references/spec-evolve/templates-index.json +26 -0
  796. package/skill/rules.md +400 -0
  797. package/skill/schemas/bottom-buttons.schema.json +134 -0
  798. package/skill/schemas/control/_base.schema.json +1296 -0
  799. package/skill/schemas/control/button.schema.json +55 -0
  800. package/skill/schemas/control/calendar-navigator.schema.json +164 -0
  801. package/skill/schemas/control/calendar.schema.json +18 -0
  802. package/skill/schemas/control/check-box.schema.json +41 -0
  803. package/skill/schemas/control/combo.schema.json +23 -0
  804. package/skill/schemas/control/embed.schema.json +30 -0
  805. package/skill/schemas/control/image-box.schema.json +49 -0
  806. package/skill/schemas/control/input-date.schema.json +27 -0
  807. package/skill/schemas/control/input-file.schema.json +139 -0
  808. package/skill/schemas/control/input-mask.schema.json +45 -0
  809. package/skill/schemas/control/input-number.schema.json +24 -0
  810. package/skill/schemas/control/input-text.schema.json +24 -0
  811. package/skill/schemas/control/label.schema.json +113 -0
  812. package/skill/schemas/control/multi-input-box.schema.json +19 -0
  813. package/skill/schemas/control/other.schema.json +24 -0
  814. package/skill/schemas/control/radio-box.schema.json +87 -0
  815. package/skill/schemas/control/search.schema.json +23 -0
  816. package/skill/schemas/control/tab.schema.json +112 -0
  817. package/skill/schemas/control/tree.schema.json +83 -0
  818. package/skill/schemas/control.schema.json +30 -0
  819. package/skill/schemas/data-objects.schema.json +161 -0
  820. package/skill/schemas/data-sources.schema.json +184 -0
  821. package/skill/schemas/design-system/design.schema.json +496 -0
  822. package/skill/schemas/events.schema.json +272 -0
  823. package/skill/schemas/group.schema.json +133 -0
  824. package/skill/schemas/index.json +362 -0
  825. package/skill/schemas/naming-objects.schema.json +133 -0
  826. package/skill/schemas/node.schema.json +24 -0
  827. package/skill/schemas/patterns/atom/badge.schema.json +44 -0
  828. package/skill/schemas/patterns/atom/button.schema.json +70 -0
  829. package/skill/schemas/patterns/atom/checkbox.schema.json +39 -0
  830. package/skill/schemas/patterns/atom/segmented-radio.schema.json +49 -0
  831. package/skill/schemas/patterns/atom/switch.schema.json +27 -0
  832. package/skill/schemas/patterns/molecule/checklist.schema.json +63 -0
  833. package/skill/schemas/patterns/molecule/input-action.schema.json +251 -0
  834. package/skill/schemas/patterns/molecule/input-button.schema.json +141 -0
  835. package/skill/schemas/patterns/molecule/input-pair.schema.json +210 -0
  836. package/skill/schemas/scenario.schema.json +161 -0
  837. package/skill/schemas/service/CustomSystem.schema.json +41 -0
  838. package/skill/schemas/service/Firestore.schema.json +28 -0
  839. package/skill/schemas/service/FlexAutoQuery.schema.json +35 -0
  840. package/skill/schemas/service/FlexSQL.schema.json +33 -0
  841. package/skill/schemas/service/Flextudio API.schema.json +115 -0
  842. package/skill/schemas/service/Flextudio.schema.json +26 -0
  843. package/skill/schemas/service/GoogleSheet.schema.json +31 -0
  844. package/skill/schemas/service/_base.schema.json +31 -0
  845. package/skill/schemas/service/ksystem.schema.json +36 -0
  846. package/skill/schemas/service-binding.schema.json +51 -0
  847. package/skill/schemas/step.schema.json +258 -0
  848. package/skill/schemas/style-objects.schema.json +155 -0
  849. package/skill/skill-guides/README.md +50 -0
  850. package/skill/skill-guides/control-options.md +126 -0
  851. package/skill/skill-guides/events.md +61 -0
  852. package/skill/skill-guides/failure-discipline.md +95 -0
  853. package/skill/skill-guides/index.json +40 -0
  854. package/skill/skill-guides/prompt-interview.md +92 -0
  855. package/skill/skill-guides/scripts.md +169 -0
  856. package/skill/skill-guides/step-navigation.md +98 -0
@@ -0,0 +1,102 @@
1
+ # data-connection โ€” B ๊ฒฝ๋กœ: ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ โ†’ ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ ๋งคํ•‘
2
+
3
+ B ๊ฒฝ๋กœ(๊ตฌ์กฐ ์ œ๊ณต ๋˜๋Š” ๋ชฉ๋ก/์กฐํšŒ์„ฑ ์ถ”๋ก )์—์„œ ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ์„ ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๊ทœ์น™. **์ •ํ™•ํ•œ ํ•„๋“œ ๋ฌธ๋ฒ•์€ ๊ฐ™์€ ์Šคํ‚ฌ์˜ `docs/group.md`ยท`docs/data-objects.md`ยท`docs/data-sources.md` ์™€ `intent-rules.md` ๊ฐ€ ์ •๋ณธ** โ€” ์—ฌ๊ธฐ์„œ๋Š” keyRole โ†’ DataUsage ๋งคํ•‘๊ณผ ๋ชฉ์—… ๊ณ„ํš๋งŒ ๋‹ค๋ฃฌ๋‹ค.
4
+
5
+ ## DataUsage 4๋ชจ๋“œ (์–ด๋–ค keyRole ์ด ์–ด๋””๋กœ)
6
+
7
+ | ์ƒํ™ฉ | DataUsage | ์ ์šฉ |
8
+ |---|---|---|
9
+ | ๋ชฉ๋ก/์นด๋“œ ๋ฐ˜๋ณต ๋ Œ๋” (๋””ํ…Œ์ผยท๋งˆ์Šคํ„ฐ๋ชฉ๋ก) | `query` | Group `UseDataConnection:true` + `DataConnection{TargetType:'category', DataUsage:'query', CategoryName}`. ์„นํ„ฐ ์ˆ˜๋งŒํผ ๋ณต์ œ |
10
+ | **๋‹จ๊ฑด ๋งˆ์Šคํ„ฐ/ํ—ค๋” ๋ฐ”์ธ๋”ฉ** (๋ฐ˜๋ณต ์•„๋‹˜, 1๊ฑด ํ‘œ์‹œ) | `default` | Group `UseDataConnection:true` + `DataConnection{DataUsage:'default', CategoryName}`. ๊ทธ ์นดํ…Œ๊ณ ๋ฆฌ 1์„นํ„ฐ๋ฅผ ๋‹จ๊ฑด ๋ฐ”์ธ๋”ฉ |
11
+ | ์‹ ๊ทœ ์ž…๋ ฅ (๋นˆ ํผ ์ €์žฅ) | `new` | mock ๋ฉด์ œ โ€” ๋นˆ ์นดํ…Œ๊ณ ๋ฆฌ์— ์–ต์ง€ addSector ๊ธˆ์ง€ |
12
+ | ๋ฆฌ์ŠคํŠธ์—์„œ 1๊ฑด ์„ ํƒํ•ด ์ˆ˜์ • | `update` | activeSector ๋ฐ›์•„ ํผ ์ฑ„์›€ |
13
+ | ์„ ํƒ ๊ฑด ์ฝ๊ธฐ์ „์šฉ ์ƒ์„ธ | `detail` | `UseTargetSector:true` + `Status:['active']`, ์ž…๋ ฅ ๋ถˆ๊ฐ€ ํ‘œ์‹œ |
14
+
15
+ ## ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ(1:N) = ๋ถ€๋ชจ + ์ž์‹ query + (์กฐ์ธํ‚ค)
16
+
17
+ keyRole ๋งคํ•‘:
18
+ - `master` โ†’ ๋ถ€๋ชจ Group ๋ฐ”์ธ๋”ฉ. **๋ชฉ๋กํ˜•์ด๋ฉด `DataUsage:"query"`(์„นํ„ฐ ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต), ๋‹จ๊ฑด ํ—ค๋”ํ˜•(์ž…๋ ฅ ํ™”๋ฉด ๋“ฑ)์ด๋ฉด `DataUsage:"default"`(1์„นํ„ฐ ๋‹จ๊ฑด).**
19
+ - `detail` โ†’ ๋ถ€๋ชจ Group **์•ˆ์ชฝ**์˜ ์ž์‹ Group `DataUsage:"query"` + `TargetSector.Filters:[{FilterType:"Parent"}]`.
20
+ - `link` โ†’ ๊ทธ Parent ํ•„ํ„ฐ์˜ ์กฐ์ธ ํ‚ค: ๋ถ€๋ชจํ‚ค `DCParentKey` / ์ž์‹ํ‚ค `DCChildKey` ๋กœ ์ง€์ •.
21
+ - `detail`(์ƒ์„ธ ๋ณด๊ธฐ ํ™”๋ฉด/์˜์—ญ) โ†’ `DataUsage:"detail"`.
22
+
23
+ ์ฆ‰ sample_spec ์˜ "๋งˆ์Šคํ„ฐ Group + ๋””ํ…Œ์ผ ํ–‰ ๋ฐ˜๋ณต" ์€ B ์—์„œ **๋ถ€๋ชจ Group(๋ฐ”์ธ๋”ฉ) ์•ˆ์— ์ž์‹ query Group(Parent ํ•„ํ„ฐ)** ์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค. ๋‹จ์ˆœ 1๋‹จ ๋ชฉ๋ก(๋ถ€๋ชจ-์ž์‹ ์•„๋‹˜)์ด๋ฉด ์ž์‹ ์—†์ด query Group ํ•˜๋‚˜.
24
+
25
+ ### โ˜… ๋งˆ์Šคํ„ฐ๋„ ๋ฐ˜๋“œ์‹œ ๋ฐ”์ธ๋”ฉ + ๋ถ€๋ชจ-์ž์‹ ์กฐ์ธ (์ •์  ๋งˆ์Šคํ„ฐ ๊ธˆ์ง€)
26
+
27
+ ์ž…๋ ฅ/๋‹จ๊ฑด ํ™”๋ฉด์ด๋ผ๋„ **๋งˆ์Šคํ„ฐ(ํ—ค๋”)๋ฅผ ๋น„์—ฐ๊ฒฐ ์ •์ ์œผ๋กœ ๋‘๊ณ  ๋””ํ…Œ์ผ๋งŒ query ํ•˜์ง€ ๋ง ๊ฒƒ**(S-03 ์‹คํŒจ). ๋งˆ์Šคํ„ฐ๋„ ์ž๊ธฐ ์นดํ…Œ๊ณ ๋ฆฌ์— ๋ฐ”์ธ๋”ฉํ•˜๊ณ , ๋””ํ…Œ์ผ์„ ๊ทธ **์ž์‹**์œผ๋กœ ์กฐ์ธํ•œ๋‹ค:
28
+
29
+ - ๋งˆ์Šคํ„ฐ Group โ†’ `UseDataConnection:true`, `DataUsage:"default"`(๋‹จ๊ฑด) ๋˜๋Š” `"query"`(๋ชฉ๋ก), `CategoryName:"CtgImport"`. ํ—ค๋” ํ‘œ์‹œ ๋ผ๋ฒจ์€ `LabelCKey` ๋กœ ๋งˆ์Šคํ„ฐ ์„นํ„ฐ ํ•„๋“œ ๋ฐ”์ธ๋”ฉ.
30
+ - ๋””ํ…Œ์ผ(ํ’ˆ๋ชฉ์ •๋ณด) Group โ†’ ๋งˆ์Šคํ„ฐ Group **์•ˆ์ชฝ**์—์„œ `DataUsage:"query"`, `CategoryName:"CtgImportItem"`, `TargetSector.Filters:[{FilterType:"Parent"}]`, `DCParentKey`/`DCChildKey` ๋กœ ๋งˆ์Šคํ„ฐ ํ‚ค์™€ ์กฐ์ธ.
31
+ - Init `intent.mock` ์— ๋งˆ์Šคํ„ฐ ์นดํ…Œ๊ณ ๋ฆฌ 1์„นํ„ฐ + ๊ทธ์— ์†ํ•œ ์ž์‹ ์นดํ…Œ๊ณ ๋ฆฌ N์„นํ„ฐ(์กฐ์ธํ‚ค ์ผ์น˜).
32
+
33
+ ### โ˜… ๊ฐ™์€ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๊ทธ๋ฃน์ด ์“ฐ๋ฉด ์ƒ์œ„ ๊ทธ๋ฃน ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์—ฐ๊ฒฐ
34
+
35
+ ๋งˆ์Šคํ„ฐ ์นด๋“œ์™€ ์š”์•ฝ(์˜ˆ: `MasterCard` + `MasterSummary`)์ด **๊ฐ™์€ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๊ฐ๊ฐ ๋”ฐ๋กœ ์—ฐ๊ฒฐ**ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค(S-02 ์‹คํŒจ: CtgMaster ๋ฅผ ๋‘ ๊ทธ๋ฃน์ด ์ค‘๋ณต ์—ฐ๊ฒฐ). **๊ณตํ†ต ์ƒ์œ„ Group ํ•˜๋‚˜๋กœ ๊ฐ์‹ธ ๊ทธ ์ƒ์œ„ Group ์—๋งŒ `DataConnection` ์„ ๊ฑด๋‹ค.** ์•ˆ์ชฝ ์ž์‹ ๊ทธ๋ฃน๋“ค์€ ๊ฐ™์€ ์„นํ„ฐ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์†ํ•˜๋ฏ€๋กœ ๊ฐ์ž ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ  `LabelCKey`/`Ckeys` ๋ฐ”์ธ๋”ฉ๋งŒ ํ•œ๋‹ค.
36
+
37
+ ```
38
+ ๋ถ€๋ชจ๋ž˜ํผ Group(UseDataConnection:true, DataUsage:"default"/"query", CategoryName:"CtgMaster") โ† ์—ฐ๊ฒฐ์€ ์—ฌ๊ธฐ ํ•œ ๋ฒˆ
39
+ โ”œ MasterCard Group(UseDataConnection:false) โ† ๊ฐ™์€ ์„นํ„ฐ ์ƒ์†, Label LabelCKey ๋ฐ”์ธ๋”ฉ
40
+ โ”” MasterSummary Group(UseDataConnection:false) โ† ๊ฐ™์€ ์„นํ„ฐ ์ƒ์†, Label LabelCKey ๋ฐ”์ธ๋”ฉ
41
+ ```
42
+
43
+ ## ๊ทธ๋ฃน์„ ํ•œ๋‘ ๊ฒน ๋” ๊ฐ์‹ผ๋‹ค (์ค‘์ฒฉ ๋ž˜ํ•‘ โ€” ์–•์œผ๋ฉด ์‹คํŒจ)
44
+
45
+ ์ •๋‹ต ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ฐ˜๋ณต/๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ ์˜์—ญ์„ **์—ฌ๋Ÿฌ ๊ฒน Group ์œผ๋กœ ๊ฐ์‹ผ๋‹ค**(๊ด€์ฐฐ๋œ ์ค‘์ฒฉ ๊นŠ์ด 6~8). ์ƒ์„ฑ๋ฌผ์ด ์–•์œผ๋ฉด(๊นŠ์ด 2~3) ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ ๋ž˜ํ•‘์ด ๋ถ€์‹คํ•ด ๋ ˆ์ด์•„์›ƒยท๋ฐ”์ธ๋”ฉ์ด ๊นจ์ง„๋‹ค. ํ‘œ์ค€ ๋ž˜ํ•‘:
46
+
47
+ - **์กฐํšŒ ๊ฒฐ๊ณผ**: `์Šคํฌ๋กค Group(ScrollType:"ScrollY", UseDataConnection:false) > ๋ฆฌ์ŠคํŠธ Group(UseDataConnection:true, DataUsage:"query") > row Group > [๋งˆ์Šคํ„ฐ์„น์…˜ + ๋””ํ…Œ์ผ์„น์…˜]`. row ์•ˆ์—์„œ ๋งˆ์Šคํ„ฐ ์ •๋ณด์™€ ์ž์‹ ๋ชฉ๋ก์„ ๋‹ค์‹œ Group ์œผ๋กœ ๋ถ„๋ฆฌ(Border-bottom ์œผ๋กœ ๊ตฌ๋ถ„).
48
+ - **์ž…๋ ฅ**: `๋งˆ์Šคํ„ฐ Group(ํฐ ๋ฐฐ๊ฒฝ) + graybg Group(ํšŒ์ƒ‰, ScrollY) > contentsWrap Group(ํฐ ๋ฐ•์Šค, padding/radius) > ๋ฆฌ์ŠคํŠธ Group > row Group`.
49
+ - ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ(`UseDataConnection:true` + `DataConnection`)์€ **๋ฐ˜๋ณต์ด ์ผ์–ด๋‚˜๋Š” ๊ทธ Group** ์— ๋ถ™์ธ๋‹ค(๋ฐ”๊นฅ ์Šคํฌ๋กค ๋ž˜ํผ๋Š” false). ํ•œ ๊ฒน ๋” ๊ฐ์‹ธ query ๊ทธ๋ฃน์„ ๊ฒฉ๋ฆฌํ•˜๋ฉด ํ—ค๋”ยท์š”์•ฝ์„ ๊ฐ™์€ ์Šคํฌ๋กค ์•ˆ์— ๋‘๋ฉด์„œ๋„ ๋ฐ˜๋ณต๋งŒ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.
50
+ - ์˜์—ญ ๋ถ„๋ฆฌ๋Š” `DisplayStyle.rowGapValue`(์˜ˆ 20px) + Padding + Border ๋กœ.
51
+
52
+ ## ๋งˆ์Šคํ„ฐ ์˜์—ญ๋„ ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ + ์„ ํƒ ๋ฐ˜์˜ (์ •์ ์œผ๋กœ ๋‘์ง€ ๋ง ๊ฒƒ)
53
+
54
+ ๋งˆ์Šคํ„ฐ/ํ—ค๋” ์˜์—ญ์„ ์ „๋ถ€ ์ •์ ์œผ๋กœ๋งŒ ๋‘์ง€ ์•Š๋Š”๋‹ค. ์„ ํƒยทํ‘œ์‹œ๊ฐ€ ๋ฐ์ดํ„ฐ๋กœ ํ๋ฅด๊ฒŒ ํ•œ๋‹ค:
55
+
56
+ - **๋‹จ๊ฑด ๋งˆ์Šคํ„ฐ ์นด๋“œ**(๋ฐ˜๋ณต ์•„๋‹˜)์˜ ํ‘œ์‹œ ๋ผ๋ฒจ์€ `LabelCKey` ๋กœ ๋งˆ์Šคํ„ฐ ์นดํ…Œ๊ณ ๋ฆฌ ์„นํ„ฐ์— ๋ฐ”์ธ๋”ฉ(ํ˜„์‹ค์  mock 1์„นํ„ฐ). ์ •๋ง ๊ณ ์ • ๋ฌธ๊ตฌ๋งŒ ์ •์ .
57
+ - **์ข…์† ์„ ํƒ(Comboโ†’Combo)**: ์ถœ๊ณ ์ฐฝ๊ณ  ์„ ํƒ โ†’ ์ž…๊ณ ์ฐฝ๊ณ  ์˜ต์…˜์ด ๋‹ฌ๋ผ์ง€๋Š” ์ข…์†์€, ์ž์‹ Combo ์˜ Dialog `ComboList` ์— `Ckeys` ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ณ  ๊ทธ ์˜ต์…˜ ์นดํ…Œ๊ณ ๋ฆฌ์— **mock ์„ ๋‹ค์ค‘(์ตœ์†Œ 2 ์˜ต์…˜ ์ด์ƒ) ์œผ๋กœ** ๋ฐ•์•„ ์„ ํƒ ์ข…์†์ด ์‹œ๊ฐ์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚˜๊ฒŒ ํ•œ๋‹ค. (ํ”„๋กœํ† ํƒ€์ž…์—์„  ์‹ค์ œ ํ•„ํ„ฐ ๋กœ์ง ๋Œ€์‹  mock ์˜ต์…˜์œผ๋กœ ํ‘œํ˜„.)
58
+ - ๋งˆ์Šคํ„ฐ ์„ ํƒ๊ฐ’์„ ๋‹ค์Œ Step ์œผ๋กœ ๋„˜๊ธธ ๋• ์นด๋“œ/๋ฒ„ํŠผ `UseMove:true` + `MoveSteps.MoveStepOrder` + ๊ฐ Step `MoveTo:"Next"`(๋„ค๋น„ ์ฑ„๋„). ์Šคํฌ๋ฆฝํŠธ ํ๋ฆ„์ œ์–ด ๊ธˆ์ง€.
59
+
60
+ ## ์ฝœ๋ ‰์…˜ํ‚ค ๋ฐ”์ธ๋”ฉ (์ •์  ํ…์ŠคํŠธ ๊ธˆ์ง€)
61
+
62
+ - ๋ฐ˜๋ณต Group ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅด๋Š” ํ•ญ๋ชฉ์€ ์„นํ„ฐ ํ•„๋“œ๋ฅผ **`LabelCKey`/`Ckeys` ๋กœ ๋ฐ”์ธ๋”ฉ**ํ•œ๋‹ค. ์ •์  `labeltext` ๋กœ ๋ฐ•์œผ๋ฉด ๋ชจ๋“  ์นด๋“œ๊ฐ€ ๊ฐ™์€ ๋ฌธ๊ตฌ๊ฐ€ ๋œ๋‹ค.
63
+ - 1๋ฒˆ๋งŒ ๋ณด์ผ ์š”์†Œ(์ œ๋ชฉยท์ด๊ฑด์ˆ˜ ์š”์•ฝยท"์‹ ๊ทœ" ๋ฒ„ํŠผ)๋Š” **query Group ๋ฐ”๊นฅ** ๋น„์—ฐ๊ฒฐ ๋ž˜ํผ์— ๋‘”๋‹ค.
64
+ - `CategoryName` ์€ `Ctg` ์ ‘๋‘ + PascalCase (์˜ˆ: `CtgOrder`, `CtgOrderItem`).
65
+ - **์ฝœ๋ ‰์…˜ํ‚ค(`Ckeys`/`LabelCKey`/`CtrlDisplayCkey`)์— `f` ์ ‘๋‘ ๊ธˆ์ง€.** ์ŠคํŽ™์— ํ‚ค/ํ•„๋“œ๋ช…์ด ๋ช…์‹œ๋˜๋ฉด **๋Œ€์†Œ๋ฌธ์žยทํ‘œ๊ธฐ ๊ทธ๋Œ€๋กœ**(์˜ˆ `LotNo`ยท`BLNO`, ์ž„์˜ camelCase ๋ณ€ํ™˜ ๊ธˆ์ง€), ๋ฏธ์ œ๊ณต์ด๋ฉด ์˜๋ฏธ์žˆ๋Š” camelCase. โŒ `fOrderNo`ยท`fLotNo`.
66
+ - ์˜ˆ์•ฝ์–ด ๊ธˆ์ง€: `status`/`isActive`/`length` ๋“ฑ + JS ์˜ˆ์•ฝ์–ด (์ •๋ณธ: `schemas/naming-objects.schema.json`).
67
+
68
+ ## ๋ชฉ์—… ๋™๋ฐ˜ (ํ•„์ˆ˜)
69
+
70
+ DataConnection/Ckeys ๋ฅผ ๋ฐ•์œผ๋ฉด **๋ฐ˜๋“œ์‹œ ์‹œ์ž‘ Step.Init ์— `intent.mock` ์œผ๋กœ ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ mock ์„นํ„ฐ๋ฅผ ๋™๋ฐ˜**ํ•œ๋‹ค โ€” ์—†์œผ๋ฉด `[proto]` ์ฐจ๋‹จ(SKILL.md "๋ฐ์ดํ„ฐ ํ‘œ์‹œ ๊ฒฐ์ •" ์ฐธ์กฐ).
71
+
72
+ - ๋ถ€๋ชจยท์ž์‹ ๋‘˜ ๋‹ค mock ์„ ๋ฐ•์•„ ์กฐ์ธ์ด ์‹ค์ œ๋กœ ๊ทธ๋ ค์ง€๊ฒŒ ํ•œ๋‹ค (๋ถ€๋ชจ 2๊ฑด+ / ๊ฐ ๋ถ€๋ชจ์— ์ž์‹ ์—ฌ๋Ÿฌ ๊ฑด).
73
+ - `new` ๋ชจ๋“œ ์นดํ…Œ๊ณ ๋ฆฌ์—” ๋นˆ addSector ๋ฅผ ์–ต์ง€๋กœ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค(mock ๋ฉด์ œ).
74
+ - ๋ฐฐ์น˜ = named handler: `Step.Events.Init:"Step1Init"` + `scenario.Events.Step1Init` ์•ˆ์— `intent.mock`.
75
+
76
+ ## ์ŠคํŽ™(.spec.md)์— ์ ๋Š” ๋ฒ•
77
+
78
+ frontmatter:
79
+ ```yaml
80
+ route: B
81
+ dcModes: [query, detail, parent-child]
82
+ categories:
83
+ CtgOrder: { role: master, keys: [์ฃผ๋ฌธ๋ฒˆํ˜ธ], fields: [์ฃผ๋ฌธ์ผ์ž, ํ•ฉ๊ณ„๊ธˆ์•ก] }
84
+ CtgOrderItem: { role: detail, parentKey: ์ฃผ๋ฌธ๋ฒˆํ˜ธ, childKey: ์ฃผ๋ฌธ๋ฒˆํ˜ธ, fields: [์ƒํ’ˆ๋ช…, ์ˆ˜๋Ÿ‰, ๋‹จ๊ฐ€] }
85
+ ```
86
+ ๋ณธ๋ฌธ Step ์„ค๋ช…์— "๋ถ€๋ชจ query โ†’ ์ž์‹ query(Parent ํ•„ํ„ฐ, ์ฃผ๋ฌธ๋ฒˆํ˜ธ ์กฐ์ธ) โ†’ ์ƒ์„ธ detail" ์™€ "Init mock: ์ฃผ๋ฌธ 2๊ฑด + ๊ฐ ์ƒํ’ˆ 3๊ฑด" ์„ ์ ๋Š”๋‹ค. ์ž์„ธํ•œ ๋ณธ๋ฌธ ํ˜•ํƒœ๋Š” `templates/master-detail.spec.md`.
87
+
88
+ ## โ˜… ์ƒ์„ฑ ํ›„ ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ ๋ณด์žฅ ๊ฒŒ์ดํŠธ (์ŠคํŽ™ ๊ฒฝ๋กœ Phase 2 ์งํ›„, ๋ธ”๋กœํ‚น)
89
+
90
+ `/flex-spec` ์ŠคํŽ™ ๊ฒฝ๋กœ๋Š” Phase 2(์‹œ๋‚˜๋ฆฌ์˜ค ์ƒ์„ฑ) ๊ฐ€ ๋๋‚˜๋ฉด **๋ฐ˜๋“œ์‹œ** ์ด ๊ฒŒ์ดํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•œ๋‹ค. ์ด๊ฑด `lint.md` ์˜ ๋น„๋ธ”๋กœํ‚น ๋ณด๊ณ ์™€ ๋‹ค๋ฅธ **๋ธ”๋กœํ‚น ์ ๊ฒ€**์ด๋‹ค โ€” ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ์ด ๋น ์กŒ์œผ๋ฉด ํ†ต๊ณผ์‹œํ‚ค์ง€ ๋ง๊ณ  **์ƒ˜ํ”Œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ฐธ์กฐํ•ด ์ถ”๊ฐ€ ์ˆ˜์ •์œผ๋กœ ์ฃผ์ž…**ํ•œ๋‹ค.
91
+
92
+ 1. **์ ๊ฒ€** โ€” ์‚ฐ์ถœ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ณธ๋‹ค. ํ™”๋ฉด์ด **๋ชฉ๋กยท์นด๋“œยท"~๋ณ„"ยท"~๋‚ด์—ญ"ยท์กฐํšŒยท๋ฐ˜๋ณตยท์„ ํƒ์ง€(Combo/Search)ยท๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ** ์„ฑ๊ฒฉ์ธ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค ์ „์ฒด์— `UseDataConnection:true` + `DataConnection` + ์‹œ์ž‘ Step.Init `intent.mock` ์ด **0๊ฑด์ด๋ฉด ๊ฒŒ์ดํŠธ ์‹คํŒจ** โ†’ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ.
93
+ 2. **์ƒ˜ํ”Œ ์ฐธ์กฐ** โ€” `examples/index.json` ์—์„œ **๊ตฌ์กฐ(`stepCount`/`patterns`/`controlTypes`)๊ฐ€ ์œ ์‚ฌํ•œ `design/` ์ƒ˜ํ”Œ ์‹œ๋‚˜๋ฆฌ์˜ค**๋ฅผ ๊ณ ๋ฅธ๋‹ค. ๋„๋ฉ”์ธ ๊ธ€์ž ์ผ์น˜๊ฐ€ ์•„๋‹ˆ๋ผ ๊ตฌ์กฐ๋กœ ๊ณ ๋ฅธ๋‹ค. **๋ฐ˜๋“œ์‹œ ๋จผ์ € `flex-scenario validate --no-write <ํ›„๋ณด example>` ๋กœ `ok:true` ๋ฅผ ํ™•์ธ**ํ•ด baseline ์ž๊ฒฉ์„ ๊ฒ€์ฆํ•œ๋‹ค(`ok:false` ์˜ˆ์ œ๋ฅผ ๊ธฐ์ค€ ์‚ผ์ง€ ๋ง ๊ฒƒ. โ˜… example ๊ฒ€์ฆ์—” `--no-write` ํ•„์ˆ˜ โ€” ๊ธฐ๋ณธ validate ๋Š” `ok:true` ์‹œ ๋ณธ๋ฌธ์„ ์ž…๋ ฅ ํŒŒ์ผ์— write-back ํ•ด ์ฐธ์กฐ ์˜ˆ์ œ๋ฅผ ๋ณ€ํ˜•์‹œํ‚จ๋‹ค).
94
+ 3. **key-diff โ†’ ์ฃผ์ž…** โ€” ๊ทธ ์ƒ˜ํ”Œ์˜ ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ ๋…ธ๋“œ์™€ ๋‚ด ์‚ฐ์ถœ๋ฌผ์„ **ํ‚ค ๋‹จ์œ„๋กœ diff** ํ•œ๋‹ค. ๋น ์ง„ ๊ฒƒ์„ `Edit`(๋ถ€๋ถ„ ์ˆ˜์ •, ์ „์ฒด Write ๊ธˆ์ง€)์œผ๋กœ ์ฃผ์ž…ํ•œ๋‹ค:
95
+ - ๋ฐ˜๋ณต/๋ชฉ๋ก Group โ†’ `UseDataConnection:true` + `DataConnection{TargetType:'category', DataUsage:'query', CategoryName:'Ctgโ€ฆ'}` + ์ž์‹ `Ckeys`/`LabelCKey`.
96
+ - ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ์ด๋ฉด ๋ถ€๋ชจ query(๋˜๋Š” ๋‹จ๊ฑด `default`) + ์ž์‹ query(`TargetSector.Filters:[{FilterType:'Parent'}]`, `DCParentKey`/`DCChildKey` ์กฐ์ธ) โ€” ์ด ์ ˆ ์œ„์ชฝ "๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ(1:N)" ๊ทœ์น™๋Œ€๋กœ.
97
+ - ์‹œ์ž‘ Step.Init ์— named handler(`Step.Events.Init:"Step1Init"` + `scenario.Events.Step1Init` ์•ˆ `intent.mock`)๋กœ ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ mock(๋ถ€๋ชจ 2~3๊ฑด ร— ์ž์‹ 2~3๊ฑด, ์กฐ์ธํ‚ค ์ผ์น˜) ๋™๋ฐ˜.
98
+ - **์ •์  Label ๋ณต์ œ๋กœ ๋„๋ง๊ฐ€์ง€ ์•Š๋Š”๋‹ค.** ๋‹จ๊ฑด ๋งˆ์Šคํ„ฐ/ํ—ค๋”๋„ ์ •์ ์œผ๋กœ ๋‘์ง€ ๋ง๊ณ  `DataUsage:"default"` + `LabelCKey` ๋กœ ๋ฐ”์ธ๋”ฉํ•œ๋‹ค.
99
+ 4. **์˜ˆ์™ธ (๊ฒŒ์ดํŠธ ๋ฉด์ œ)** โ€” ์ง„์งœ ๋‹จ๊ฑด ๊ณ ์ • ๋ฌธ๊ตฌ๋งŒ ์žˆ๋Š” ํ‘œ์‹œ ํ™”๋ฉด์ด๊ฑฐ๋‚˜, ์‹ค์ œ `scenario.DataSources`(`Fixed`/`Grid`) ๊ฐ€ ์ฑ„์›Œ์ ธ ์ •์ƒ ๋ฐ”์ธ๋”ฉ์ธ ๊ฒฝ์šฐ๋งŒ ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ ์—†์ด ํ†ต๊ณผ. ์‹ ๊ทœ ์ž…๋ ฅ(`DataUsage:"new"`) ํผ์€ mock ๋ฉด์ œ(๋นˆ addSector ๊ธˆ์ง€).
100
+ 5. **์žฌ๊ฒ€์ฆ** โ€” ์ฃผ์ž… ํ›„ `flex-scenario validate <scenario>` ๋ฅผ ๋‹ค์‹œ `ok:true` ๊นŒ์ง€ ํ†ต๊ณผ์‹œํ‚จ๋‹ค. (`[proto]`/`[mock-init]` ์ด ๊ฒŒ์ดํŠธ์™€ ๊ฐ™์€ ์‹ ํ˜ธ โ€” validate ๊ฐ€ ๋™๋ฐ˜ ์ฐจ๋‹จํ•ด ์ค€๋‹ค.)
101
+
102
+ > ์ง์ ‘ ์ƒ์„ฑ(๊ธฐ๋ณธ) ๊ฒฝ๋กœ์—๋„ ๋นˆ/์ •์  ํšŒ๊ท€ ๊ธˆ์ง€๋Š” ์ ์šฉ๋˜์ง€๋งŒ(SKILL.md "๋ฐ์ดํ„ฐ ํ‘œ์‹œ ๊ฒฐ์ •"), ์ด **"์ƒ˜ํ”Œ ์ฐธ์กฐ ํ›„ ์ถ”๊ฐ€ ์ˆ˜์ •์œผ๋กœ ์ฃผ์ž…"ํ•˜๋Š” ๋ธ”๋กœํ‚น ๊ฒŒ์ดํŠธ๋Š” ์ŠคํŽ™ ๊ฒฝ๋กœ ์ „์šฉ**์ด๋‹ค โ€” ์ŠคํŽ™ ๊ฒฝ๋กœ๋Š” ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ์„ ๋๊นŒ์ง€ ๋ณด์žฅํ•œ๋‹ค.
@@ -0,0 +1,41 @@
1
+ # intake โ€” ์ž…๋ ฅ ๋ชจ๋‹ฌ๋ฆฌํ‹ฐ ๋ฌด๊ด€ ์ถ”์ถœ
2
+
3
+ ํ™”๋ฉด์ •์˜์„œ๋Š” **์—‘์…€ / ํ‘œ / ์ž์œ  ํ…์ŠคํŠธ / ์บก์ฒ˜๋ณธ(์ด๋ฏธ์ง€) / ํ•œ ์ค„ ์š”์ฒญ** ์–ด๋–ค ํ˜•ํƒœ๋กœ๋„ ์˜จ๋‹ค. ํ˜•์‹์— ๋‹จ์ •์ง“์ง€ ๋ง ๊ฒƒ. ๋ชฉํ‘œ๋Š” ํ˜•์‹์ด ์•„๋‹ˆ๋ผ ๊ฑฐ๊ธฐ์„œ **๊ณตํ†ต ํ•„๋“œ ๋ชฉ๋ก**์„ ๋ฝ‘๋Š” ๊ฒƒ์ด๋‹ค.
4
+
5
+ ## ๋ชจ๋‹ฌ๋ฆฌํ‹ฐ๋ณ„ ์ฝ๋Š” ๋ฒ•
6
+
7
+ | ๋ชจ๋‹ฌ๋ฆฌํ‹ฐ | ๋ฐฉ๋ฒ• |
8
+ |---|---|
9
+ | ์บก์ฒ˜/์ด๋ฏธ์ง€ | `Read` ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ง์ ‘ ๋ณธ๋‹ค โ€” ๋ ˆ์ด์•„์›ƒยท๋ผ๋ฒจยท๋ฐ˜๋ณต ๋ธ”๋กยท์ž…๋ ฅ์นธ์„ ๋ˆˆ์œผ๋กœ ์ฝ์–ด ํ•„๋“œ/๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ์„ ์ถ”์ถœ |
10
+ | ์—‘์…€(.xlsx) | ์‹œํŠธ๋ฅผ ํ…์ŠคํŠธ๋กœ ๋คํ”„ํ•ด ํ‘œ๋ฅผ ์ฝ๋Š”๋‹ค. ์•„๋ž˜ "๊ด€์ฐฐ๋œ ์—‘์…€ ํ˜•ํƒœ" ์ฐธ๊ณ  (๊ฐ•์ œ ์•„๋‹˜) |
11
+ | ํ‘œ/๋งˆํฌ๋‹ค์šด | ์ปฌ๋Ÿผ ํ—ค๋”์—์„œ ํ•ญ๋ชฉ๋ช…ยท์ปจํŠธ๋กคยท์„ค๋ช…์„ ๋งคํ•‘ |
12
+ | ์ž์œ  ํ…์ŠคํŠธ | ๋ฌธ์žฅ์—์„œ ํ•ญ๋ชฉยท๋™์ž‘ยท๋ฐ˜๋ณต("~๋ชฉ๋ก", "~๋ณ„๋กœ")ยท์„ ํƒ์ง€๋ฅผ ์‹๋ณ„ |
13
+ | ํ•œ ์ค„ ์š”์ฒญ | ์ถ”์ถœํ•  ๊ฒŒ ๊ฑฐ์˜ ์—†์Œ โ†’ `routing.md` ์˜ "๊ตฌ์กฐ ๋ฏธ์ œ๊ณต" ๊ฒฝ๋กœ๋กœ |
14
+
15
+ ## ์ถ”์ถœ ๊ฒฐ๊ณผ = ๋ชจ๋‹ฌ๋ฆฌํ‹ฐ ๋ฌด๊ด€ ํ•„๋“œ ๋ชฉ๋ก
16
+
17
+ ๊ฐ ํ•ญ๋ชฉ์„ ๋‹ค์Œ์œผ๋กœ ์ •๊ทœํ™”ํ•œ๋‹ค (์—†์œผ๋ฉด ๋น„์›€ โ†’ ํ›„์† ๋‹จ๊ณ„๊ฐ€ ์ถ”๋ก ):
18
+
19
+ - `name` โ€” ํ•ญ๋ชฉ๋ช… (์˜ˆ: ๊ฑฐ๋ž˜์ฒ˜, Lot No, ์ˆ˜๋Ÿ‰)
20
+ - `intent` โ€” ์ž…๋ ฅ ์˜๋„: ํ‘œ์‹œ / ์„ ํƒ / ๋‚ ์งœ / ์ฝ”๋“œ๋„์›€ / ์ˆซ์ž / ํ…์ŠคํŠธ / ๋ฐ˜๋ณต๋ชฉ๋ก ์ค‘ ํ•˜๋‚˜ (์˜๋„โ†’์ปจํŠธ๋กค์€ `conventions.md`)
21
+ - `section` โ€” master / detail (๋˜๋Š” ๋ฏธ์ƒ)
22
+ - `visible` โ€” ํ‘œ์‹œ / ์ˆจ๊น€ / ๊ฐ•์กฐ(์ค‘์š”)
23
+ - `usage` โ€” ์ €์žฅยท์ˆ˜์ • / ์กฐํšŒ์กฐ๊ฑด / ํ‘œ์‹œ์ „์šฉ ๋“ฑ (์žˆ์œผ๋ฉด)
24
+ - `default` โ€” ๊ธฐ๋ณธ๊ฐ’ ๋‹จ์„œ (์˜ˆ: "ํ˜„์žฌ์ผ -1month", "ํŠน์ • ๊ณ ์ •๊ฐ’ ๋””ํดํŠธ")
25
+ - `note` โ€” ๋™์ž‘/ํ†ต์ œ ์„ค๋ช… ์›๋ฌธ
26
+
27
+ ## ๊ด€์ฐฐ๋œ ์—‘์…€ ํ˜•ํƒœ (๋ถ€๋ก โ€” ๋งŒ๋‚˜๋ฉด ์“ฐ๋Š” ํžŒํŠธ, ๊ฐ•์ œ ์•„๋‹˜)
28
+
29
+ ๋‹จ์ผ ์‹œํŠธ, ํ—ค๋” + ๋‘ ์„น์…˜ ํ‘œ๋กœ ์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค:
30
+
31
+ - ํ—ค๋” ํ–‰: `ํ”„๋กœ๊ทธ๋žจ๋ช…` ยท `ํ™”๋ฉด๊ตฌ๋ถ„`(์ž…๋ ฅ / ์กฐํšŒ(์ผ๋ฐ˜)) ยท `๊ฐœ๋ฐœ๊ฐœ์š”` ยท `ํ™”๋ฉด๋ช…` ยท `์ด๋ฒคํŠธ`(์ €์žฅ/์‚ญ์ œ/์‹ ๊ทœ/์กฐํšŒ)
32
+ - `Master` ํ‘œ: `ํ•ญ๋ชฉ์‚ฌ์šฉ์—ฌ๋ถ€ | ํ•ญ๋ชฉ๋ช… | ์ปจํŠธ๋กคํƒ€์ž… | ํ•ญ๋ชฉ์„ค๋ช… | (์šฉ๋„)`
33
+ - `Detail(ํ’ˆ๋ชฉ์ •๋ณด)` ํ‘œ: ๋™์ผ 5์ปฌ๋Ÿผ
34
+ - `์ถ”๊ฐ€๊ณต์œ ๋‚ด์šฉ`: ๋ฒ„ํŠผ ๋™์ž‘ยทํ†ต์ œ ๋กœ์ง ์ž์œ  ์„œ์ˆ 
35
+
36
+ ๊ทœ์น™:
37
+ - `ํ•ญ๋ชฉ์‚ฌ์šฉ์—ฌ๋ถ€` = `์ˆจ๊น€` โ†’ **๋…ธ๋“œ ์ƒ์„ฑ ์ œ์™ธ**(์ €์žฅ ์‹œ ์‹œ์Šคํ…œ์ด ์ฑ„์šฐ๋Š” ํ‚ค์ผ ๋•Œ๊ฐ€ ๋งŽ์Œ โ€” ์ฑ„๋ฒˆ/ํ˜„์žฌ์ผ/๋กœ๊ทธ์ธ๋ถ€์„œ ๋“ฑ). `์ค‘์š”` โ†’ ๊ฐ•์กฐ ์Šคํƒ€์ผ. `ํ‘œ์‹œ` โ†’ ์ผ๋ฐ˜.
38
+ - ๋งˆ์ง€๋ง‰ ์ปฌ๋Ÿผ ์˜๋ฏธ๋Š” ํ™”๋ฉด๊ตฌ๋ถ„์— ๋”ฐ๋ผ ๋‹ค๋ฆ„: ์ž…๋ ฅ=`์ €์žฅ/์ˆ˜์ •`, ์กฐํšŒ Master=`์กฐํšŒ์กฐ๊ฑด`, ์กฐํšŒ Detail=`์กฐํšŒ์—ฌ๋ถ€`.
39
+ - `ํ•ญ๋ชฉ์„ค๋ช…` ์— ๊ธฐ๋ณธ๊ฐ’ ๋‹จ์„œยท์—ฐ๊ฒฐ ๋กœ์ง(์›์ฒœ ํ™”๋ฉด ์กฐํšŒ ๋“ฑ)์ด ๋“ค์–ด์žˆ๋‹ค โ†’ `default`/`note` ๋กœ ์˜ฎ๊ธด๋‹ค.
40
+
41
+ > `์ปจํŠธ๋กคํƒ€์ž…` ํ‘œ๊ธฐ(label/ComboBox/DateBox/Codehelp/FloatBox/TextBox โ€ฆ)๊ฐ€ **๋ช…์‹œ๋˜๋ฉด ๊ทธ๋Œ€๋กœ ์ง์—ญ**ํ•œ๋‹ค โ€” `conventions.md` ยง1 "์ง์—ญ(๊ณ ์ • ๋งคํ•‘)" ํ‘œ. ํ•ญ๋ชฉ์„ค๋ช…์˜ "์กฐํšŒ/์›์ฒœ/์ฐธ์กฐ" ๋‹จ์–ด์— ํœ˜๋‘˜๋ ค `label`โ†’`Search` ๊ฐ™์ด ๋ฐ”๊พธ์ง€ ๋ง ๊ฒƒ(๋Œ€ํ‘œ ์˜ค๋งคํ•‘). ํ‘œ๊ธฐ๊ฐ€ ์—†์„ ๋•Œ๋งŒ `intent` ๋กœ ์ถ”๋ก ํ•œ๋‹ค.
@@ -0,0 +1,44 @@
1
+ # key-roles โ€” ํ•„๋“œ๋ณ„ keyRole ํŒ์ • (๋น„๋ธ”๋กœํ‚น)
2
+
3
+ ์ŠคํŽ™ ์ง„ํ™” ๋‹จ๊ณ„์—์„œ ๊ฐ ํ•„๋“œ์— `keyRole` ์„ ๋ถ™์ธ๋‹ค. ์ด๋Š” ์ค‘๊ฐ„ ์ŠคํŽ™(`.spec.md`)์˜ ๋ถ„์„ ์‚ฐ์ถœ๋ฌผ์ด๋ฉฐ, ์ตœ์ข… ์‹œ๋‚˜๋ฆฌ์˜ค JSON ์—๋Š” ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค(์‹œ๋‚˜๋ฆฌ์˜ค์—” ์ž๋ฆฌ ์—†์Œ) โ€” keyRole ์€ ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ/๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ์„ **์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ทผ๊ฑฐ**๋‹ค.
4
+
5
+ ## ๋‹ค์„ฏ ๊ฐ€์ง€ keyRole
6
+
7
+ | keyRole | ์˜๋ฏธ | ํŒ์ • ๊ทผ๊ฑฐ |
8
+ |---|---|---|
9
+ | `master` | ๋งˆ์Šคํ„ฐ(๋ถ€๋ชจ) ์‹๋ณ„ ํ‚ค โ€” 1์ชฝ | ํ•œ ๊ฑด์ด ์—ฌ๋Ÿฌ ๋””ํ…Œ์ผ์„ ๊ฑฐ๋А๋ฆผ. ํ—ค๋”/์š”์•ฝ ์˜์—ญ์˜ ์‹๋ณ„์ž (์˜ˆ: ์ฃผ๋ฌธ๋ฒˆํ˜ธ, ๋ฐ˜ํ’ˆ์š”์ฒญ๋ฒˆํ˜ธ) |
10
+ | `detail` | ๋””ํ…Œ์ผ(์ž์‹) ์‹๋ณ„ ํ‚ค โ€” N์ชฝ | ๋งˆ์Šคํ„ฐ 1๊ฑด ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฑด ๋ฐ˜๋ณต (์˜ˆ: ํ’ˆ๋ชฉ Lot No, ๋ผ์ธ๋ฒˆํ˜ธ) |
11
+ | `link` | ๋ถ€๋ชจ-์ž์‹ ์กฐ์ธ ํ‚ค | ๋งˆ์Šคํ„ฐํ‚ค๊ฐ€ ๋””ํ…Œ์ผ์—๋„ ๋‚˜ํƒ€๋‚˜ ๋‘˜์„ ์ž‡๋Š” ์™ธ๋ž˜ํ‚ค (์˜ˆ: ๋””ํ…Œ์ผ์˜ ์ฃผ๋ฌธ๋ฒˆํ˜ธ) |
12
+ | `none` | ํ‚ค ์•„๋‹˜ | ์ผ๋ฐ˜ ํ‘œ์‹œ/์ž…๋ ฅ ํ•„๋“œ (ํ’ˆ๋ช…, ์ˆ˜๋Ÿ‰, ๊ธˆ์•ก ๋“ฑ) |
13
+ | `provisional` | ์ž„์‹œ โ€” ํ™•์‹  ์—†์Œ | ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ์•ˆ ์žกํžˆ๊ฑฐ๋‚˜ ๋งˆ์Šคํ„ฐ/๋””ํ…Œ์ผ ์–ด๋А ์ชฝ์ธ์ง€ ๋ชจํ˜ธ. **์ถ”์ธกํ•˜์ง€ ๋ง๊ณ  ์—ฌ๊ธฐ ๋‘”๋‹ค** |
14
+
15
+ ## ํŒ์ •์€ ์นด๋””๋„๋ฆฌํ‹ฐ๋กœ
16
+
17
+ - ํ•œ ํ™”๋ฉด ์•ˆ์—์„œ **1๊ฑด๋งŒ ๋ณด์ด๋ฉด master ํ›„๋ณด**(ํ—ค๋”/์š”์•ฝ), **์—ฌ๋Ÿฌ ๊ฑด ๋ฐ˜๋ณต๋˜๋ฉด detail ํ›„๋ณด**.
18
+ - ๋งˆ์Šคํ„ฐ์—๋„ ๋””ํ…Œ์ผ์—๋„ ๊ฐ™์€ ์ด๋ฆ„์˜ ํ‚ค๊ฐ€ ๋ณด์ด๋ฉด ๊ทธ๊ฑด `link`(์กฐ์ธ ํ‚ค).
19
+ - ๋””ํ…Œ์ผ์ด ๋˜ ํ•˜์œ„ ๋””ํ…Œ์ผ์„ ๊ฐ€์ง€๋ฉด(3๋‹จ) ์ƒ์œ„๋Š” ๊ทธ ํ•˜์œ„์— ๋Œ€ํ•ด master ์—ญํ•  โ€” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ถ€๋ชจ ๊ธฐ์ค€์œผ๋กœ ํŒ์ •.
20
+
21
+ ## ๋น„๋ธ”๋กœํ‚น ๊ทœ์น™ (์ค‘์š”)
22
+
23
+ - ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ์•ˆ ์„œ๊ฑฐ๋‚˜ ๋งˆ์Šคํ„ฐ/๋””ํ…Œ์ผ์ด ๋ชจํ˜ธํ•˜๋ฉด **์ถ”์ธกํ•˜์ง€ ๋ง๊ณ  `provisional` + flag** ํ•œ๋‹ค.
24
+ - **๋ถˆํ™•์‹คํ•œ ํ‚ค ๋•Œ๋ฌธ์— ์ง„ํ–‰์„ ๋ฉˆ์ถ”์ง€ ์•Š๋Š”๋‹ค.** provisional ์ด ์žˆ์–ด๋„ Phase 1 ์ŠคํŽ™ ์ž‘์„ฑยทPhase 2 ์ƒ์„ฑ์€ ๊ณ„์†ํ•œ๋‹ค.
25
+ - provisional ํ•„๋“œ๋Š” **๊ฐ€์žฅ ๊ทธ๋Ÿด๋“ฏํ•œ ์ชฝ์œผ๋กœ ์ผ๋‹จ ๋ Œ๋”**ํ•˜๋˜(๋ณดํ†ต detail ๋˜๋Š” none), ๊ทธ ๊ฐ€์ •์„ `.spec.md` frontmatter `provisional` ์— ๊ธฐ๋กํ•œ๋‹ค.
26
+ - ์ตœ์ข… ์‘๋‹ต์—์„œ lint ๊ฐ€ provisional ์ž”์กด์„ "๋ฏธํ•ด๊ฒฐ"๋กœ ๋ณด๊ณ ํ•œ๋‹ค (`lint.md`). ์‚ฌ์šฉ์ž๊ฐ€ ์ •์ •ํ•˜๋ฉด ๊ทธ๋•Œ ํ™•์ •.
27
+
28
+ ## .spec.md ์— ๊ธฐ๋กํ•˜๋Š” ๋ฒ•
29
+
30
+ frontmatter:
31
+ ```yaml
32
+ keyRoles:
33
+ ์ฃผ๋ฌธ๋ฒˆํ˜ธ: master
34
+ ์ฃผ๋ฌธ์ผ์ž: none
35
+ ์ƒํ’ˆ_์ฃผ๋ฌธ๋ฒˆํ˜ธ: link # ์ž์‹์˜ ์กฐ์ธ ํ‚ค
36
+ ์ƒํ’ˆ๋ช…: none
37
+ Lot No: detail
38
+ provisional:
39
+ - field: ๊ฒ€์‚ฌ๊ตฌ๋ถ„
40
+ guess: none
41
+ why: ๋งˆ์Šคํ„ฐ ํ—ค๋”์— ๋‹จ๊ฑด์ด์ง€๋งŒ ์กฐํšŒ์กฐ๊ฑด์ผ ์ˆ˜๋„ ์žˆ์–ด ์นด๋””๋„๋ฆฌํ‹ฐ ๋ถˆ๋ช…
42
+ ```
43
+
44
+ ๋ณธ๋ฌธ์—์„œ๋Š” keyRole ์„ ์ง์ ‘ ์“ฐ์ง€ ์•Š๊ณ , masterโ†’ํ—ค๋”/์š”์•ฝ Group, detailโ†’๋ฐ˜๋ณต Group(B ๊ฒฝ๋กœ๋ฉด DataUsage:"query"), linkโ†’๋ถ€๋ชจ-์ž์‹ ์กฐ์ธํ‚ค(`data-connection.md`)๋กœ **๋ฐ˜์˜**ํ•œ๋‹ค.
@@ -0,0 +1,27 @@
1
+ # lint โ€” provisional/๋ฏธํ•ด๊ฒฐ ๋ณด๊ณ  (๋น„๋ธ”๋กœํ‚น)
2
+
3
+ ์ŠคํŽ™ ์ง„ํ™”ยท์ƒ์„ฑ์€ ๋ถˆํ™•์‹ค์„ฑ ๋•Œ๋ฌธ์— ๋ฉˆ์ถ”์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  **์ตœ์ข… ์‘๋‹ต์—์„œ ๋ฏธํ•ด๊ฒฐ ํ•ญ๋ชฉ์„ ๋ชจ์•„ ๋ณด๊ณ **ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ •์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ์‚ฐ์ถœ๋ฌผ(์ŠคํŽ™ยท์‹œ๋‚˜๋ฆฌ์˜ค)์€ ๊ทธ๋Œ€๋กœ ๋‚ธ๋‹ค.
4
+
5
+ ## ๋ฌด์—‡์„ ๋ฏธํ•ด๊ฒฐ๋กœ ์žก๋‚˜
6
+
7
+ | ํ•ญ๋ชฉ | ์ถœ์ฒ˜ | ๋ฉ”์‹œ์ง€ ์˜ˆ |
8
+ |---|---|---|
9
+ | `provisional` keyRole ์ž”์กด | `key-roles.md` | "ํ•„๋“œ '๊ฒ€์‚ฌ๊ตฌ๋ถ„' keyRole ๋ฏธํ™•์ •(none ์œผ๋กœ ๊ฐ€์ •) โ€” ์กฐํšŒ์กฐ๊ฑด์ด๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”" |
10
+ | ๊ตฌ์กฐ ๋ฏธ์ œ๊ณต ์ถ”๋ก  ๊ฐ€์ • | `routing.md` / frontmatter `assumptions` | "๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ์„ ์ฃผ๋ฌธโ†”์ฃผ๋ฌธ์ƒํ’ˆ์œผ๋กœ ์ถ”๋ก ํ•จ โ€” ๋‹ค๋ฅด๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”" |
11
+ | ๋ชจํ˜ธํ•œ ํ™”๋ฉด ์ข…๋ฅ˜ | `routing.md` | "'์žฌ๊ณ '๋ฅผ ํ˜„ํ™ฉ์กฐํšŒ๋กœ ํ•ด์„ํ•จ" |
12
+ | ๊ธฐ๋ณธ๊ฐ’ ๋‹จ์„œ ์—†์Œ | `conventions.md` | "๊ธฐ๊ฐ„ ๊ธฐ๋ณธ๊ฐ’ ๋‹จ์„œ๊ฐ€ ์—†์–ด ์ตœ๊ทผ 1๊ฐœ์›”๋กœ ๊ฐ€์ •" |
13
+
14
+ ## ์ถœ๋ ฅ ํ˜•์‹ (์ตœ์ข… ์‘๋‹ต์— 1๋ธ”๋ก)
15
+
16
+ ```
17
+ ๋ฏธํ•ด๊ฒฐ (๋น„๋ธ”๋กœํ‚น):
18
+ - [provisional] ๊ฒ€์‚ฌ๊ตฌ๋ถ„ โ†’ none ์œผ๋กœ ๊ฐ€์ •. ์กฐํšŒ์กฐ๊ฑด์ด๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.
19
+ - [assumption] ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ = ์ฃผ๋ฌธ โ†” ์ฃผ๋ฌธ์ƒํ’ˆ (์ถ”๋ก ). ๋‹ค๋ฅด๋ฉด ์ •์ • ๊ฐ€๋Šฅ.
20
+ ์‚ฐ์ถœ๋ฌผ์€ ์œ„ ๊ฐ€์ • ์œ„์—์„œ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •์ •ํ•˜๋ฉด ํ•ด๋‹น ๋ถ€๋ถ„๋งŒ ๋‹ค์‹œ ์ง„ํ™”ํ•ฉ๋‹ˆ๋‹ค.
21
+ ```
22
+
23
+ ## ๊ทœ์น™
24
+
25
+ - ๋ฏธํ•ด๊ฒฐ์ด **์žˆ์–ด๋„** ์ŠคํŽ™(`.spec.md`)ยท์‹œ๋‚˜๋ฆฌ์˜ค(`-scenario.json`)๋Š” ์‚ฐ์ถœํ•˜๊ณ  `flex-scenario validate` ๊นŒ์ง€ ํ†ต๊ณผ์‹œํ‚จ๋‹ค.
26
+ - ๋ฏธํ•ด๊ฒฐ์ด **์—†์œผ๋ฉด** ์ด ๋ธ”๋ก์„ ์ƒ๋žตํ•œ๋‹ค.
27
+ - ์ด lint ๋Š” `flex-scenario validate` ์˜ cross-check(์Šคํ‚ค๋งˆ/๊ตฌ์กฐ ๊ฒ€์ฆ)์™€ ๋ณ„๊ฐœ๋‹ค โ€” validate ๋Š” "ํ˜•์‹์ด ๋งž๋‚˜", lint ๋Š” "์ถ”๋ก ์ด ๋งž๋‚˜"๋ฅผ ๋ณธ๋‹ค. ๋‘˜ ๋‹ค ํ†ต๊ณผ/๋ณด๊ณ ํ•ด์•ผ ์™„๋ฃŒ.
@@ -0,0 +1,50 @@
1
+ # mockup โ€” ๋ชฉ์—…๋ฐ์ดํ„ฐ ์ถ”์ •ยท์„ธํŒ… (๊ตฌ์กฐ ๋ฏธ์ œ๊ณต ํฌํ•จ)
2
+
3
+ ํ”„๋กœํ† ํƒ€์ž… ํ™”๋ฉด์€ **ํ•ญ์ƒ ๋ชฉ์—…๋ฐ์ดํ„ฐ๋กœ ์ฑ„์›Œ์•ผ** ํ•œ๋‹ค. ๊ตฌ์กฐ๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์•„๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ โ€” ๋„๋ฉ”์ธ์—์„œ ์นดํ…Œ๊ณ ๋ฆฌยทํ•„๋“œยทํ˜„์‹ค์  ๊ฐ’์„ **์•Œ์•„์„œ ์ถ”์ •**ํ•ด ์„ธํŒ…ํ•œ๋‹ค. ๋นˆ ๋ฆฌ์ŠคํŠธยท๋นˆ ํผยทplaceholder ๋งŒ ์žˆ๋Š” ํ™”๋ฉด์œผ๋กœ ๋๋‚ด์ง€ ์•Š๋Š”๋‹ค.
4
+
5
+ ## โ˜… M-D ๊ตฌ์กฐ๊ฐ€ ์ œ๊ณต๋˜๋ฉด ๋ชฉ์—… ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ํ•„์ˆ˜ (์œ„๋ฐ˜ = ๋Œ€ํ‘œ ์‹คํŒจ)
6
+
7
+ ํ™”๋ฉด์ •์˜์„œ/์š”์ฒญ์— **Master/Detail(๋˜๋Š” ๋ฐ˜๋ณต ํ•ญ๋ชฉ) ๊ตฌ์กฐ๊ฐ€ ๋ช…์‹œ**๋˜๋ฉด, ๊ทธ ๊ตฌ์กฐ์˜ **๋ชฉ์—…๋ฐ์ดํ„ฐ(Ctg ์นดํ…Œ๊ณ ๋ฆฌ + ์‹œ์ž‘ Step.Init `intent.mock`)๋Š” ๋ฐ˜๋“œ์‹œ ์ƒ์„ฑ**ํ•œ๋‹ค. ์ •์  Label ๋ณต์ œ๋กœ ๋๋‚ด๋ฉด ์•ˆ ๋œ๋‹ค.
8
+
9
+ - Master โ†’ `Ctg<Entity>` (1์„นํ„ฐ ์ด์ƒ), Detail โ†’ `Ctg<Entity>Item` (๋ถ€๋ชจ๋งˆ๋‹ค 2~3์„นํ„ฐ, ์กฐ์ธํ‚ค ์ผ์น˜).
10
+ - ๋‘ ์นดํ…Œ๊ณ ๋ฆฌ ๋ชจ๋‘ `intent.mock` ์œผ๋กœ ์ฑ„์šฐ๊ณ , ํ‘œ์‹œ ํ•ญ๋ชฉ์€ `LabelCKey`/`Ckeys` ๋ฐ”์ธ๋”ฉ(์ •์  ํ…์ŠคํŠธ ๊ธˆ์ง€).
11
+ - **์‹คํŒจ ์‚ฌ๋ก€(S-02)**: Master/Detail ํ‘œ๊ฐ€ ์žˆ๋Š” ์ž…๋ ฅ ํ™”๋ฉด์„ `DataConnection` 0๊ฑดยท`Events:{}`ยท์ •์  Label 57๊ฐœ๋กœ ์ƒ์„ฑ โ†’ "๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ์ด ์•ˆ ๋œ" ํ™”๋ฉด. M-D ๊ฐ€ ๋ช…์‹œ๋์œผ๋ฉด ์ด๊ฑด ์˜ค๋‹ต์ด๋‹ค.
12
+ - ์ž์ฒด ์ ๊ฒ€: M-D ๊ฐ€ ์ œ๊ณต๋๋Š”๋ฐ ์‚ฐ์ถœ๋ฌผ์— `UseDataConnection:true`/`DataConnection`/`intent.mock` ์ด 0๊ฑด์ด๋ฉด ๋‹ค์‹œ ๋งŒ๋“ ๋‹ค.
13
+
14
+ ## ์–ธ์ œ ๋ฌด์—‡์„
15
+
16
+ | ์ƒํ™ฉ | ๋ชฉ์—… ํ˜•ํƒœ |
17
+ |---|---|
18
+ | ๋ชฉ๋ก/๋ฐ˜๋ณต/์กฐํšŒ ๊ฒฐ๊ณผ (B) | ์‹œ์ž‘ Step.Init `intent.mock` ์œผ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์„นํ„ฐ **3๊ฑด ์ด์ƒ** |
19
+ | ๋ถ€๋ชจ-์ž์‹(๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ, B) | ๋ถ€๋ชจ 2~3๊ฑด ร— ๊ฐ ๋ถ€๋ชจ์— ์ž์‹ 2~3๊ฑด (์กฐ์ธํ‚ค ์ผ์น˜) |
20
+ | ์„ ํƒ์ง€(Combo/Search, B) | ๊ทธ ์นดํ…Œ๊ณ ๋ฆฌ ์˜ต์…˜ mock (3~6๊ฐœ) |
21
+ | ๋‹จ๊ฑด ์ •์  ํ‘œ์‹œ (A) | ๊ฐ Label ์— ํ˜„์‹ค์  `labeltext` ๋ฆฌํ„ฐ๋Ÿด |
22
+ | ์‹ ๊ทœ ์ž…๋ ฅ ํผ (new) | mock ๋ฉด์ œ โ€” ๋นˆ ์„นํ„ฐ ์ž๋™ ์ƒ์„ฑ(`DataUsage:"new"`), Init addSector ๊ธˆ์ง€ |
23
+
24
+ ## ๊ตฌ์กฐ ๋ฏธ์ œ๊ณต ์‹œ ์ถ”์ • ์ ˆ์ฐจ
25
+
26
+ 1. **ํ™”๋ฉด ์ข…๋ฅ˜ยท๋„๋ฉ”์ธ ์‹๋ณ„** โ€” "์ฃผ๋ฌธ ๋ชฉ๋ก", "ํšŒ์› ์กฐํšŒ", "์žฌ๊ณ  ํ˜„ํ™ฉ" ๋“ฑ์—์„œ ์ฃผ์ฒด ์—”ํ‹ฐํ‹ฐ๋ฅผ ์žก๋Š”๋‹ค.
27
+ 2. **์นดํ…Œ๊ณ ๋ฆฌยทํ•„๋“œ ์ถ”์ •** โ€” ๊ทธ ์—”ํ‹ฐํ‹ฐ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ํ•„๋“œ๋ฅผ ์ฝ”ํผ์Šค/์ƒ์‹์œผ๋กœ ๊ตฌ์„ฑ. ์˜ˆ: ์ฃผ๋ฌธ โ†’ ์ฃผ๋ฌธ๋ฒˆํ˜ธ/์ฃผ๋ฌธ์ผ์ž/์ฃผ๋ฌธ์ƒํƒœ/ํ•ฉ๊ณ„๊ธˆ์•ก; ํšŒ์› โ†’ ์ด๋ฆ„/์—ฐ๋ฝ์ฒ˜/์ด๋ฉ”์ผ/๊ฐ€์ž…์œ ํ˜•. ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ์ด๋ฉด ์ž์‹ ์—”ํ‹ฐํ‹ฐ๋„(์ฃผ๋ฌธโ†’์ฃผ๋ฌธ์ƒํ’ˆ: ์ƒํ’ˆ๋ช…/์ˆ˜๋Ÿ‰/๋‹จ๊ฐ€).
28
+ 3. **์นดํ…Œ๊ณ ๋ฆฌ๋ช…** โ€” `Ctg` ์ ‘๋‘ PascalCase (`CtgOrder`, `CtgOrderItem`). ์˜ˆ์•ฝ์–ด ๊ธˆ์ง€.
29
+ 4. **ํ˜„์‹ค์  ๊ฐ’ ์ƒ์„ฑ** โ€” ์•„๋ž˜ "๊ฐ’ ํ˜„์‹ค์„ฑ".
30
+ 5. **๊ฐœ์ˆ˜** โ€” ๋ฆฌ์ŠคํŠธ ์ตœ์†Œ 3๊ฑด(๋ถ€๋ชจ-์ž์‹์ด๋ฉด ๋ถ€๋ชจ 2~3 ร— ์ž์‹ 2~3). ์ƒํƒœ/์œ ํ˜•์€ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ์„ž์–ด ๋‹ค์–‘์„ฑ ํ™•๋ณด(์ „๋ถ€ ๊ฐ™์€ ๊ฐ’ ๊ธˆ์ง€).
31
+ 6. **๊ฐ€์ • ๊ธฐ๋ก** โ€” ์ถ”์ •ํ•œ ์นดํ…Œ๊ณ ๋ฆฌยทํ•„๋“œ๋ฅผ `spec-format.md` frontmatter `categories` + `assumptions` ์—. keyRole ์• ๋งคํ•˜๋ฉด `provisional`.
32
+
33
+ ## ๊ฐ’ ํ˜„์‹ค์„ฑ
34
+
35
+ - ํ•œ๊ตญ์–ด ๋„๋ฉ”์ธ ๊ฐ’: ์ด๋ฆ„(ํ™๊ธธ๋™/๊น€์˜ํฌ), ๊ฑฐ๋ž˜์ฒ˜(๊ฑฐ๋ž˜์ฒ˜A/๋Œ€์„ฑ๋ฌผ์‚ฐ), ์ƒํ’ˆ๋ช…(๋ฌด์„ ๋งˆ์šฐ์Šค/A4์šฉ์ง€).
36
+ - ๋‚ ์งœ: ํ˜„์žฌ์ผ ๊ทผ๋ฐฉ์˜ ์‹ค์ œ ํ˜•์‹ `YYYY-MM-DD` (์˜ˆ: 2026-06-01). ๊ธฐ๊ฐ„ ๊ธฐ๋ณธ๊ฐ’์€ `conventions.md` ํŒจํ„ด.
37
+ - ๊ธˆ์•ก/์ˆ˜๋Ÿ‰: ์ฒœ๋‹จ์œ„ ์ฝค๋งˆ ๊ฐ€๋Šฅํ•œ ํ˜„์‹ค์  ์ˆซ์ž. **ํ•ฉ๊ณ„ = ํ•ญ๋ชฉ ํ•ฉ** ์œผ๋กœ ์‚ฐ์ˆ  ์ผ์น˜(์˜ˆ: ํ•ฉ๊ณ„๊ธˆ์•ก = ์ž์‹ ๊ธˆ์•ก๋“ค์˜ ํ•ฉ).
38
+ - ์ƒํƒœ/์œ ํ˜•: ๊ทธ ํ™”๋ฉด์˜ enum ์ค‘์—์„œ(์ ‘์ˆ˜/๋ฐฐ์†ก์ค‘/์™„๋ฃŒ, ํ•ฉ๊ฒฉ/๋ถˆํ•ฉ๊ฒฉ ๋“ฑ).
39
+ - ์กฐ์ธํ‚ค: ๋ถ€๋ชจ-์ž์‹ `DCParentKey`/`DCChildKey` ๊ฐ’์ด ์‹ค์ œ๋กœ ๋งค์นญ๋˜๊ฒŒ(์ž์‹์˜ ์ฃผ๋ฌธ๋ฒˆํ˜ธ = ๋ถ€๋ชจ ์ฃผ๋ฌธ๋ฒˆํ˜ธ).
40
+
41
+ ## ๋ฐฐ์น˜ (B ๊ฒฝ๋กœ)
42
+
43
+ - named handler: `Step.Events.Init:"Step1Init"` + `scenario.Events.Step1Init` ์•ˆ์— `intent.mock`.
44
+ - ์ธ๋ผ์ธ ๋ฐฐ์—ด(`Step.Events.Init:[...]`) ๊ธˆ์ง€ โ€” schema ์ถฉ๋Œ (SKILL.md "๋ฐ์ดํ„ฐ ํ‘œ์‹œ ๊ฒฐ์ •" ์ฐธ์กฐ).
45
+ - ๋ถ€๋ชจยท์ž์‹ ์นดํ…Œ๊ณ ๋ฆฌ ๋ชจ๋‘ mock ์„ ๋ฐ•์•„ ์กฐ์ธ์ด ์‹ค์ œ๋กœ ๊ทธ๋ ค์ง€๊ฒŒ.
46
+ - `intent.mock` ์—†์ด `DataConnection`/`Ckeys` ๋งŒ ๋ฐ•์œผ๋ฉด `[proto]`ยท`[mock-init]` ์ฐจ๋‹จ.
47
+
48
+ ## .spec.md ์— ์ ๋Š” ๋ฒ•
49
+
50
+ frontmatter `categories` ๋กœ ์นดํ…Œ๊ณ ๋ฆฌยทํ•„๋“œยทํ‚ค๋ฅผ ๋ช…์‹œํ•˜๊ณ , ๋ณธ๋ฌธ "๋ฐ์ดํ„ฐ / ๋ชฉ์—…" ์ ˆ์— **๊ตฌ์ฒด์  mock ๊ฐ’**(ํ˜„์‹ค์  ๋ฆฌํ„ฐ๋Ÿด N๊ฑด)์„ ์ ๋Š”๋‹ค. ํ…œํ”Œ๋ฆฟ์˜ mock ์˜ˆ์‹œ(`templates/master-detail.spec.md` ๋“ฑ) ํ˜•ํƒœ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. Phase 2 ๊ฐ€ ์ด mock ์„ `intent.mock`(B) ๋˜๋Š” `labeltext`(A)๋กœ ํŽผ์นœ๋‹ค.
@@ -0,0 +1,66 @@
1
+ # query-screens โ€” ์กฐํšŒ ํ™”๋ฉด: ์ƒ๋‹จ ์ง„์ž… + ์กฐํšŒ์กฐ๊ฑด ๋ณ„๋„ Step
2
+
3
+ ์กฐํšŒ(์กฐํšŒ/๊ฒ€์ƒ‰) ํ™”๋ฉด์€ "์กฐํšŒ์กฐ๊ฑด ์ž…๋ ฅ"๊ณผ "๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ"๊ฐ€ ํ•œ ํ™”๋ฉด์— ๋‹ค ๋“ค์–ด๊ฐ€๋ฉด ๋ณต์žกํ•ด์ง„๋‹ค. ์ฝ”ํผ์Šค ์ปจ๋ฒค์…˜์ƒ **์กฐํšŒ์กฐ๊ฑด์€ ํ™”๋ฉด ์ƒ๋‹จ์—์„œ ์ง„์ž…**ํ•˜๊ณ , **์กฐ๊ฑด์ด ๋งŽ์œผ๋ฉด ์กฐํšŒ์กฐ๊ฑด์„ ๋ณ„๋„ Step ์œผ๋กœ ๋ถ„๋ฆฌ**ํ•œ๋‹ค.
4
+
5
+ ## ํ•ต์‹ฌ ์›์น™ (์‚ฌ์šฉ์ž ๊ทœ์น™)
6
+
7
+ 1. **์ƒ๋‹จ ์ง„์ž…๋งŒ.** ์กฐํšŒ์กฐ๊ฑด/ํ•„ํ„ฐ ์ง„์ž…์€ **๊ฒฐ๊ณผ ํ™”๋ฉด์˜ ์ƒ๋‹จ ๊ณ ์ •์˜์—ญ(`Step.FixedContentsTop`)** ์— ๋‘”๋‹ค. **ํ•˜๋‹จ์— '์กฐํšŒ์กฐ๊ฑด' ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.**
8
+ 2. **๋ถ€๊ฐ€ ๋„ค๋น„ ๋ฒ„ํŠผ ๊ธˆ์ง€.** `๋ฐ”๋กœ๊ฐ€๊ธฐ` ยท `๋ฉ”์ธ๋ฉ”๋‰ด` ยท `์กฐํšŒ์กฐ๊ฑด ํŽผ์น˜๊ธฐ/์ ‘๊ธฐ` ๊ฐ™์€ **๋„ค๋น„/ํ† ๊ธ€ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค**. ํ™”๋ฉด ์ด๋™์€ Step ์ „ํ™˜ ์ฑ„๋„๋กœ๋งŒ(`navigation` ๊ทœ์น™, ์•„๋ž˜).
9
+ 3. **ํ‘œ์ค€ ๋ณต๊ท€.** ์กฐํšŒ์กฐ๊ฑด Step โ†’ ๊ฒฐ๊ณผ ๋ณต๊ท€๋Š” **ํ—ค๋” `UseBackButton:true`(ํ‘œ์ค€ BackButton)** ๋˜๋Š” `BottomButtons[*].MoveTo:"Prev"` ๋กœ. โš  `Current.step.moveToPrev(...)` ๊ฐ™์€ **์Šคํฌ๋ฆฝํŠธ ํ˜ธ์ถœ์€ ๊ธˆ์ง€**(`[script-allow]`/`[back-button]` ์ฐจ๋‹จ). ํ‘œ์ค€ ๋ฐฑ๋ฒ„ํŠผ์ด `IsRestored:true` ๋กœ ์กฐ๊ฑด๊ฐ’์„ ์œ ์ง€ํ•œ๋‹ค.
10
+ 4. **์กฐ๊ฑด์€ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์ˆ˜์ง‘.** ๊ณตํ†ต ์กฐํšŒ์กฐ๊ฑด์€ `CtgSearchCond` ๊ฐ™์€ **query-condition ์นดํ…Œ๊ณ ๋ฆฌ 1์„นํ„ฐ**์— ๋ชจ์•„ ๋ฐ”์ธ๋”ฉํ•˜๊ณ , ๊ฒฐ๊ณผ query ๊ฐ€ ๊ทธ ์กฐ๊ฑด์„ ์ฐธ์กฐํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋‘”๋‹ค(ํ”„๋กœํ† ํƒ€์ž…์—์„  mock 1์„นํ„ฐ).
11
+
12
+ ## ์ž„๊ณ„ ๊ทœ์น™
13
+
14
+ - ์กฐํšŒ์กฐ๊ฑด(Combo / InputDate / Search / RadioBox / CheckBox ๋“ฑ) **5๊ฐœ ์ด์ƒ** โ†’ **๋ณ„๋„ Step** ์œผ๋กœ ๋ถ„๋ฆฌ.
15
+ - 4๊ฐœ ์ดํ•˜ โ†’ ๊ฒฐ๊ณผ Step ์˜ **`FixedContentsTop` ๊ณ ์ •์˜์—ญ**์— ์ธ๋ผ์ธ(์Šคํฌ๋กค๋˜์ง€ ์•Š๋Š” ์ƒ๋‹จ). ํŽผ์น˜๊ธฐ/์ ‘๊ธฐ ํ† ๊ธ€ ๋ฒ„ํŠผ์œผ๋กœ ๋งŒ๋“ค์ง€ ๋ง ๊ฒƒ.
16
+
17
+ ## Step ๊ตฌ์„ฑ (์ฝ”ํผ์Šค ํŒจํ„ด, AI ์ƒ์„ฑ ์•ˆ์ „ํ˜•)
18
+
19
+ - **Step1 (๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ)** โ€” ๊ฒฐ๊ณผ๊ฐ€ ๋ฉ”์ธ. ์ƒ๋‹จ `FixedContentsTop` ์— ํ•ต์‹ฌ ์กฐ๊ฑด 1~2๊ฐœ(์˜ˆ: ์‚ฌ์—…๋‹จ์œ„ Combo) + **ํ•„ํ„ฐ ์ง„์ž… ์ปจํŠธ๋กค**(๋ผ๋ฒจ/์•„์ด์ฝ˜์— `UseMove:true` + `MoveSteps.MoveStepOrder:["Step2"]` + `MoveTo:"Next"`). ํ™œ์„ฑ ์กฐ๊ฑด ์ˆ˜๋Š” badge ๋กœ ํ‘œ์‹œ ๊ฐ€๋Šฅ. ๊ฒฐ๊ณผ๋Š” ๋ณ„๋„ ์Šคํฌ๋กค Group(`ScrollType:"ScrollY"`)์— query ๋ฐ˜๋ณต.
20
+ - **Step2 (์กฐํšŒ์กฐ๊ฑด ํผ)** โ€” ๋‚˜๋จธ์ง€ ์ „์ฒด ์กฐํšŒ์กฐ๊ฑด ์ปจํŠธ๋กค์„ ๋ชจ์•„ ๋ฐฐ์น˜. `UseBackButton:true` ํ‘œ์ค€ ํ—ค๋”๋กœ ๊ฒฐ๊ณผ ๋ณต๊ท€, ๋˜๋Š” BottomButton "์กฐํšŒ" `MoveTo:"Prev"`. ์กฐ๊ฑด๊ฐ’์€ BackButton `IsRestored:true` ๋กœ ์œ ์ง€.
21
+ - **Step3 (์ƒ์„ธ, ์„ ํƒ ์‹œ)** โ€” ๊ฒฐ๊ณผ ํ–‰ ํด๋ฆญ(์นด๋“œ Group `UseMove:true` + `MoveSteps`) โ†’ `DataUsage:"detail"` ์ฝ๊ธฐ์ „์šฉ ์ƒ์„ธ.
22
+
23
+ > ๊ด€์ฐฐ๋œ ์ •๋‹ต ํ˜•ํƒœ: `Step1(๊ฒฐ๊ณผ+์ƒ๋‹จ์กฐ๊ฑด 1~2) โ†’ Step2(์ „์ฒด ์กฐํšŒ์กฐ๊ฑด 10์—ฌ ๊ฐœ) โ†’ Step3(์ƒ์„ธ)` ์„ ํ˜•. ์กฐํšŒ์กฐ๊ฑด์ด Step2 ์— ๋ชฐ๋ฆฌ๊ณ , Step1 ์ƒ๋‹จ์—์„œ ์ง„์ž…ํ•œ๋‹ค.
24
+
25
+ ### Step ํ๋ฆ„ โ€” ๋ถ„๊ธฐ ํ˜ผ๋ž€ ๊ธˆ์ง€ (S-07 ์‹คํŒจ ๊ต์ •)
26
+
27
+ - **`Step1.Next` ์—๋Š” ์กฐํšŒ์กฐ๊ฑด Step(Step2) ๋งŒ** ๋‘”๋‹ค. ์ƒ์„ธ(Step3)๋Š” `Step1.Next` ์— ๊ฐ™์ด ๋„ฃ์ง€ ๋ง๊ณ  **๊ฒฐ๊ณผ ์นด๋“œ Group `UseMove:true` + `MoveSteps.MoveStepOrder:["Step3"]`** ๋กœ ๊ฐ„๋‹ค. ํ•œ Step1 ์—์„œ ์กฐ๊ฑดยท์ƒ์„ธ๋ฅผ ๋™์‹œ์— `Next` ๋ถ„๊ธฐํ•˜๋ฉด ํ๋ฆ„์ด ๋ชจํ˜ธํ•ด์ง„๋‹ค(S-07).
28
+ - **์กฐํšŒ์กฐ๊ฑด์€ ์ผ€์ด์Šค์— ์žˆ๋Š” ๊ฐœ์ˆ˜๋งŒํผ๋งŒ** ๋งŒ๋“ ๋‹ค โ€” ๊ฐ™์€ ์กฐ๊ฑด์„ ์ค‘๋ณต ์ƒ์„ฑํ•˜์ง€ ๋ง ๊ฒƒ(S-07: 13๊ฐœ๋ฅผ 19๊ฐœ๋กœ ๋ถ€ํ’€๋ฆผ). ์กฐ๊ฑด ์ปจํŠธ๋กค ์ˆ˜ = ์ŠคํŽ™ ์กฐ๊ฑด ์ˆ˜.
29
+ - Step2 ๋Š” ์กฐ๊ฑด ํผ ํ•œ ๋ฒŒ(์œ„ CtgSearchCond ๊ทธ๋ฃน) + ๋ณต๊ท€(UseBackButton). Step3 ๋Š” detail.
30
+
31
+ ## ์กฐํšŒ์กฐ๊ฑด ์ปจํŠธ๋กค ๋งคํ•‘ (์˜๋„ โ†’ v1)
32
+
33
+ - ๊ธฐ๊ฐ„/์ผ์ž โ†’ `InputDate` (+Dialog `Calendar`, FromTo). ๊ธฐ๋ณธ๊ฐ’์€ `conventions.md` ๋‚ ์งœ ํŒจํ„ด.
34
+ - ์„ ํƒ(์‚ฌ์—…๋‹จ์œ„/๊ตฌ๋ถ„/์ƒํƒœ) โ†’ `Combo` (+Dialog `ComboList`).
35
+ - ์ฝ”๋“œ๋„์›€(๊ฑฐ๋ž˜์ฒ˜/ํ’ˆ๋ฒˆ/Lot No/๋ฒˆํ˜ธ๋ฅ˜) โ†’ **`Search` (+Dialog `List`) + `CtrlDisplayCkey`(์„ ํƒ๊ฐ’ ํ‘œ์‹œํ‚ค)**. โš  `InputText` ๋กœ ๋–จ์–ด๋œจ๋ฆฌ์ง€ ๋ง ๊ฒƒ โ€” ํ‚ค ์—ฐ๊ฒฐ์ด ๋Š๊ฒจ "์กฐํšŒ์กฐ๊ฑด ํ‚ค ์—ฐ๊ฒฐ ์•ˆ ๋จ" ์‹คํŒจ๊ฐ€ ๋‚œ๋‹ค(S-05). ์ผ€์ด์Šค์— `Codehelp` ๋กœ ์ ํ˜”์œผ๋ฉด ๋ฌด์กฐ๊ฑด Search.
36
+ - ๋‹ค์ค‘ ์„ ํƒ/ํ”Œ๋ž˜๊ทธ โ†’ `CheckBox` / `RadioBox`.
37
+
38
+ Combo/Search/InputDate ๋Š” Dialog host(`Dialog.Layouts[0].Controls[0]`) ํ•„์ˆ˜. Combo/Search ๋ณธ์ฒด์—” `CtrlDisplayCkey` ๋˜๋Š” `DisplayValue` ๊ฐ€ ์žˆ์–ด์•ผ ์„ ํƒ ํ›„ ๊ฐ’์ด ๋ณด์ธ๋‹ค(`display-key`).
39
+
40
+ ## ์กฐํšŒ์กฐ๊ฑด๋„ ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐํ•œ๋‹ค (CtgSearchCond) โ€” ๋น ๋œจ๋ฆฌ์ง€ ๋ง ๊ฒƒ
41
+
42
+ ์กฐํšŒ์กฐ๊ฑด ์ปจํŠธ๋กค์„ ๊ทธ๋ƒฅ ํ™”๋ฉด์—๋งŒ ๋‘์ง€ ๋ง๊ณ  **๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ**ํ•œ๋‹ค(S-09 ์‹คํŒจ: ์กฐ๊ฑด Step DC 0๊ฑด).
43
+
44
+ - ์กฐํšŒ์กฐ๊ฑด๋“ค์„ ๊ฐ์‹ธ๋Š” **์กฐ๊ฑด ํผ Group ์— `UseDataConnection:true` + `DataConnection{TargetType:'category', DataUsage:'default', CategoryName:'CtgSearchCond'}`** (๋‹จ๊ฑด 1์„นํ„ฐ).
45
+ - ๊ฐ ์กฐ๊ฑด ์ปจํŠธ๋กค์€ ๊ทธ ์นดํ…Œ๊ณ ๋ฆฌ ํ•„๋“œ์— ๋ฐ”์ธ๋”ฉ: ์ž…๋ ฅ๋ฅ˜(InputDate/InputText)๋Š” `Ckeys`, Combo/Search ๋Š” `CtrlDisplayCkey`(+ ์ž์‹ SaveKey ๋งค์นญ, `conventions.md` ยง1 ๊ณ ์ •๋ชจ๋“œ ๊ทœ์น™).
46
+ - ์‹œ์ž‘ Step.Init `intent.mock` ์— `CtgSearchCond` **1์„นํ„ฐ**(๊ธฐ๋ณธ ์กฐ๊ฑด๊ฐ’: ๊ธฐ๊ฐ„ ๊ธฐ๋ณธ๊ฐ’ ๋“ฑ)๋ฅผ ๋ฐ•๋Š”๋‹ค โ€” ์—†์œผ๋ฉด `[proto]`/`[bind]`.
47
+ - ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ query ์นดํ…Œ๊ณ ๋ฆฌ(์˜ˆ: `CtgInspection`)๋Š” ๋ณ„๋„ โ€” ์กฐ๊ฑด์€ ํ”„๋กœํ† ํƒ€์ž…์—์„  ํ‘œ์‹œยท์ „๋‹ฌ ์šฉ๋„(์‹ค์ œ ํ•„ํ„ฐ๋ง ๋กœ์ง์€ ๋ฒ”์œ„ ๋ฐ–).
48
+ - **ํ‚ค์— `f` ์ ‘๋‘ ๊ธˆ์ง€**, ์ŠคํŽ™์— ํ‚ค๊ฐ€ ๋ช…์‹œ๋˜๋ฉด ๋Œ€์†Œ๋ฌธ์ž ๊ทธ๋Œ€๋กœ(`conventions.md` ยง1).
49
+
50
+ ## ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ๋Š” B(query) + ์ค‘์ฒฉ ๋ž˜ํ•‘
51
+
52
+ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ๋Š” ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ์ด๋ฉด `data-connection.md` ์˜ **๋ถ€๋ชจ query + ์ž์‹ query**, ๋‹จ์ˆœ ๋ชฉ๋ก์ด๋ฉด query Group ํ•˜๋‚˜. **๋ฐ˜๋ณต ์˜์—ญ์€ ์Šคํฌ๋กค Group ์œผ๋กœ ํ•œ๋‘ ๊ฒน ๊ฐ์‹ผ๋‹ค**: `์Šคํฌ๋กค(ScrollY) > ๋ฆฌ์ŠคํŠธ Group(query) > row Group > ๋‚ด์šฉ`. Init ์— mock ๋™๋ฐ˜(`mockup.md`).
53
+
54
+ ## .spec.md ์— ์ ๋Š” ๋ฒ•
55
+
56
+ ```yaml
57
+ screenKind: query
58
+ queryConditions: 12 # 5 ์ด์ƒ โ†’ ๋ณ„๋„ Step
59
+ queryCondCategory: CtgSearchCond
60
+ steps:
61
+ - { id: Step1, role: ๊ฒฐ๊ณผ๋ฆฌ์ŠคํŠธ, topConditions: [์‚ฌ์—…๋‹จ์œ„], filterEntry: "FixedContentsTopโ†’Step2(UseMove)", next: Step2 }
62
+ - { id: Step2, role: ์กฐํšŒ์กฐ๊ฑดํผ, back: "UseBackButton(IsRestored)", conditions: [๊ฒ€์‚ฌ์ผ, ์ถœํ•˜๊ฒ€์‚ฌ์˜๋ขฐ์ผ, ๋‚ฉ๊ธฐ์ผ, ๊ฑฐ๋ž˜์ฒ˜, ํ’ˆ๋ฒˆ, ...] }
63
+ - { id: Step3, role: ์ƒ์„ธ(detail), back: UseBackButton } # ํ•„์š” ์‹œ
64
+ forbidButtons: [๋ฐ”๋กœ๊ฐ€๊ธฐ, ๋ฉ”์ธ๋ฉ”๋‰ด, ์กฐํšŒ์กฐ๊ฑดํŽผ์น˜๊ธฐ] # ์ƒ์„ฑ ๊ธˆ์ง€ โ€” ๋ช…์‹œ ๊ธฐ๋ก
65
+ ```
66
+ ๋ณธ๋ฌธ ํ˜•ํƒœ๋Š” `templates/query-screen.spec.md`.
@@ -0,0 +1,43 @@
1
+ # routing โ€” ๊ตฌ์กฐ ์ œ๊ณต ์—ฌ๋ถ€๋กœ A/B ๊ฒฐ์ •
2
+
3
+ ๋ถ„๊ธฐ ๊ธฐ์ค€์€ "ํ™”๋ฉด์ •์˜์„œ๋ƒ ์•„๋‹ˆ๋ƒ"๊ฐ€ **์•„๋‹ˆ๋ผ** "๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‹ ํ˜ธ๊ฐ€ ์žˆ๋А๋ƒ"๋‹ค. ํ™”๋ฉด์ •์˜์„œ๋Š” ๊ตฌ์กฐ ์‹ ํ˜ธ๊ฐ€ ๊ฐ•ํ•œ ์ž…๋ ฅ์˜ ํ•œ ์ข…๋ฅ˜์ผ ๋ฟ์ด๊ณ , ์ผ๋ฐ˜ ์š”์ฒญ๋„ ๊ฐ™์€ ํŒŒ์ดํ”„๋ผ์ธ์„ ํƒ„๋‹ค.
4
+
5
+ ## ๊ตฌ์กฐ ์‹ ํ˜ธ๋ž€
6
+
7
+ ์ž…๋ ฅ์— ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ช…์‹œ๋˜์–ด ์žˆ์œผ๋ฉด "๊ตฌ์กฐ ์ œ๊ณต"์ด๋‹ค:
8
+ - ํ•„๋“œ ๋ชฉ๋ก (ํ•ญ๋ชฉ๋ช… + ์ปจํŠธ๋กค/ํƒ€์ž…)
9
+ - ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ ๊ตฌ๋ถ„ (ํ—ค๋” vs ๋ฐ˜๋ณต ํ’ˆ๋ชฉ, "~๋ณ„ ๋ชฉ๋ก")
10
+ - ํ‚ค/์กฐ์ธ (๋งˆ์Šคํ„ฐํ‚ค, ๋””ํ…Œ์ผํ‚ค, "์ฃผ๋ฌธ๋ฒˆํ˜ธ๋กœ ์ƒํ’ˆ ์กฐํšŒ" ๊ฐ™์€ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„)
11
+
12
+ ## ๋‘ ๊ฒฝ๋กœ
13
+
14
+ ### ๊ตฌ์กฐ ์ œ๊ณต โ†’ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅธ๋‹ค (๋ณด์กฐ์ •๋ณด๋Š” ๋ณ‘ํ•ฉ)
15
+
16
+ - **์ œ๊ณต๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ = 1์ฐจ ์ง„์‹ค.** ํ•„๋“œ/ํ‚ค/์นด๋””๋„๋ฆฌํ‹ฐ๋ฅผ **์ž„์˜๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.**
17
+ - ํ™”๋ฉด์ •์˜์„œ์˜ ๋ถ€๊ฐ€ ์ •๋ณด(์ปจํŠธ๋กค ์˜๋„ยท๊ธฐ๋ณธ๊ฐ’ยท๋ฒ„ํŠผ ๋™์ž‘ยทํ†ต์ œ ๋กœ์ง)๋Š” **๋ณด์กฐ๋กœ ๋ณ‘ํ•ฉ**ํ•œ๋‹ค โ€” ๊ตฌ์กฐ๋ฅผ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ์‚ด์„ ๋ถ™์ด๋Š” ์šฉ๋„.
18
+ - ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ(1:N)ยท๋ฐ˜๋ณต ๋ชฉ๋กยท์„ ํƒ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด **B ๊ฒฝ๋กœ(๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ)** ๋กœ ์ง„ํ™”ํ•œ๋‹ค โ†’ `data-connection.md`. ์‹œ๋‚˜๋ฆฌ์˜ค์— `DataConnection`+`Ckeys`+`intent.mock`.
19
+ - ๋‹จ๊ฑด ์ •์  ํ‘œ์‹œ๋ฟ์ด๋ฉด ๊ตณ์ด ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ  `Label` ๋กœ (์ •์ , A).
20
+
21
+ > "์—‘์…€์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์ฃผ๋Š” ๊ฒฝ์šฐ" = ์ด ๊ฒฝ๋กœ. ์ค€ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ์“ฐ๊ณ , ์ถ”๊ฐ€์ ์ธ ๊ฑด ๋ณด์กฐ๋กœ๋งŒ.
22
+
23
+ ### ๊ตฌ์กฐ ๋ฏธ์ œ๊ณต โ†’ ๋ฌป์ง€ ๋ง๊ณ  ์ถ”๋ก  (์ง€๊ธˆ์ฒ˜๋Ÿผ ์ƒ์„ฑ)
24
+
25
+ - "์žฌ๊ณ  ์กฐํšŒ ํ™”๋ฉด ๋งŒ๋“ค์–ด์ค˜" ์ฒ˜๋Ÿผ ๊ตฌ์กฐ๊ฐ€ ์—†์œผ๋ฉด **์‚ฌ์šฉ์ž์—๊ฒŒ ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผยทํ‚ค๋ฅผ ๋ฌป์ง€ ์•Š๋Š”๋‹ค.**
26
+ - `conventions.md` + `templates/` ์˜ ์ฝ”ํผ์Šค ์ปจ๋ฒค์…˜์„ ๊ทผ๊ฑฐ๋กœ ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผยทํ‚ค๋ฅผ **์•Œ์•„์„œ ์ถ”๋ก ยท๊ตฌ์„ฑ**ํ•œ๋‹ค.
27
+ - ๋ฐ˜๋ณต/์„ ํƒ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฌ์šด ํ™”๋ฉด(๋ชฉ๋กยท์กฐํšŒยท์ฃผ๋ฌธ ๋“ฑ)์ด๋ฉด B, ๋‹จ์ˆœ ๋‹จ๊ฑด ํ‘œ์‹œ ํ™”๋ฉด์ด๋ฉด ์ •์  A.
28
+ - ์ถ”๋ก ํ•œ ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผยทํ‚ค ๊ตฌ์„ฑ์€ **์ถ”๋ก  ๊ฐ€์ •์œผ๋กœ ๊ธฐ๋ก**(`spec-format.md` frontmatter `assumptions`)ํ•˜๊ณ  keyRole ์ด ์• ๋งคํ•˜๋ฉด `provisional`.
29
+ - **์งˆ๋ฌธ์€ ํ™”๋ฉด์˜ ์ข…๋ฅ˜/๋ชฉ์ ์ด ์ •๋ง ๋ชจํ˜ธํ•  ๋•Œ๋งŒ ์ตœ์†Œ๋กœ** ํ•œ๋‹ค (์˜ˆ: "์žฌ๊ณ "๊ฐ€ ์ž…์ถœ๊ณ ์ธ์ง€ ํ˜„ํ™ฉ์กฐํšŒ์ธ์ง€ ํ•œ์ชฝ์œผ๋กœ๋„ ๋ชป ์ขํž ๋•Œ). ํ‚คยทํ•„๋“œยท๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ ์ž์ฒด๋Š” ์งˆ๋ฌธ ๋Œ€์ƒ์ด ์•„๋‹ˆ๋ผ ์ถ”๋ก  ๋Œ€์ƒ์ด๋‹ค.
30
+ - **๋ชฉ์—…๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ถ”์ •ํ•ด ์„ธํŒ…ํ•œ๋‹ค (๋นˆ ํ™”๋ฉด ๊ธˆ์ง€).** ๊ตฌ์กฐ๊ฐ€ ์—†์–ด๋„ ๋„๋ฉ”์ธ์— ๋งž๋Š” ์นดํ…Œ๊ณ ๋ฆฌยทํ•„๋“œยทํ˜„์‹ค์  ๊ฐ’์„ **์•Œ์•„์„œ** ๋งŒ๋“ค์–ด ์ฑ„์šด๋‹ค โ€” ๊ธฐ์กด ์ƒ์„ฑ๊ณผ ๋™์ผํ•˜๊ฒŒ. ๋ชฉ๋ก/๋ฐ˜๋ณต(B)์ด๋ฉด ์‹œ์ž‘ Step.Init ์— `intent.mock` ์œผ๋กœ 3๊ฑด+(๋ถ€๋ชจ-์ž์‹์ด๋ฉด ๋ถ€๋ชจ 2~3 ร— ์ž์‹ 2~3), ๋‹จ๊ฑด ํ‘œ์‹œ(A)๋ฉด ๊ฐ Label ์— ํ˜„์‹ค์  `labeltext` ๋ฆฌํ„ฐ๋Ÿด. ๊ตฌ์ฒด ์ถ”์ • ๊ทœ์น™์€ `mockup.md`. ๋นˆ ๋ฆฌ์ŠคํŠธยท๋นˆ ํผยทplaceholder ๋งŒ ์žˆ๋Š” ํ™”๋ฉด์œผ๋กœ ๋๋‚ด์ง€ ๋ง ๊ฒƒ.
31
+
32
+ ## ๊ฒฐ์ • ์š”์•ฝ
33
+
34
+ | ์ž…๋ ฅ | ๊ฒฝ๋กœ | ์‹œ๋‚˜๋ฆฌ์˜ค ์‚ฐ์ถœ |
35
+ |---|---|---|
36
+ | ๊ตฌ์กฐ ์ œ๊ณต + ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ/๋ฐ˜๋ณต/์„ ํƒ์ง€ | **B** | DataConnection + Ckeys + intent.mock |
37
+ | ๊ตฌ์กฐ ์ œ๊ณต + ๋‹จ๊ฑด ์ •์  ํ‘œ์‹œ | A | Label.labeltext |
38
+ | ๊ตฌ์กฐ ๋ฏธ์ œ๊ณต + ๋ชฉ๋ก/์กฐํšŒ์„ฑ | **B**(์ถ”๋ก ) | DataConnection + intent.mock (๊ฐ€์ • ๊ธฐ๋ก) |
39
+ | ๊ตฌ์กฐ ๋ฏธ์ œ๊ณต + ๋‹จ์ˆœ ํ‘œ์‹œ์„ฑ | A(์ถ”๋ก ) | Label (๊ฐ€์ • ๊ธฐ๋ก) |
40
+
41
+ A/B ๋Š” ํ•œ ํ™”๋ฉด ์•ˆ์—์„œ **ํ˜ผ์žฌ**ํ•  ์ˆ˜ ์žˆ๋‹ค โ€” ํ—ค๋”ยท์š”์•ฝ์€ ์ •์  Label, ๋ฐ˜๋ณต ๋ชฉ๋กยท์„ ํƒ์ง€๋Š” B. ๋…ธ๋“œ๋ณ„๋กœ ํŒ์ •ํ•œ๋‹ค(SKILL.md "๋ฐ์ดํ„ฐ ํ‘œ์‹œ ๊ฒฐ์ •" ๊ณผ ๋™์ผ ๊ธฐ์ค€).
42
+
43
+ > **๊ณตํ†ต**: ๊ตฌ์กฐ ์ œ๊ณต์ด๋“  ๋ฏธ์ œ๊ณต์ด๋“ , ํ™”๋ฉด์€ ํ•ญ์ƒ ๋ชฉ์—…๋ฐ์ดํ„ฐ๋กœ ์ฑ„์›Œ "์‚ด์•„์žˆ๋Š”" ํ”„๋กœํ† ํƒ€์ž…์ด์–ด์•ผ ํ•œ๋‹ค. ๋ฏธ์ œ๊ณต์ด๋ผ๊ณ  ๋น„์›Œ๋‘์ง€ ์•Š๋Š”๋‹ค โ€” ์ถ”์ •ํ•ด์„œ ์ฑ„์šฐ๋Š” ๊ฒŒ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค (`mockup.md`).
@@ -0,0 +1,76 @@
1
+ # spec-format โ€” ์ค‘๊ฐ„ ์ŠคํŽ™ `<name>.spec.md` ํ˜•์‹
2
+
3
+ Phase 1 ์‚ฐ์ถœ๋ฌผ์˜ ํ˜•์‹. `---` frontmatter(๋ถ„์„ ๋ฉ”ํƒ€) + ๋ณธ๋ฌธ(Step๋ณ„ ์ž์—ฐ์–ด ๋ช…์„ธ). ๋ณธ๋ฌธ์€ Phase 2 ์—์„œ "์š”์ฒญ"์œผ๋กœ ๊ทธ๋Œ€๋กœ ์†Œ๋น„๋œ๋‹ค.
4
+
5
+ ## frontmatter ํ‚ค
6
+
7
+ ```yaml
8
+ ---
9
+ id: <์งง์€ ์‹๋ณ„์ž> # ์˜ˆ: pda-inspection-request
10
+ domain: <๋„๋ฉ”์ธ> # ์˜ˆ: ํ’ˆ์งˆ/๋ฌผ๋ฅ˜
11
+ feature: <ํ•œ ์ค„ ๊ธฐ๋Šฅ> # ์˜ˆ: ์ถœํ•˜๊ฒ€์‚ฌ์˜๋ขฐ ์ž…๋ ฅ โ€” ์Šค์บ”์œผ๋กœ ํ’ˆ๋ชฉ ์ ์žฌ
12
+ screenKind: input | query | mixed
13
+ route: A | B | mixed # routing.md ๊ฒฐ์ • (์ •์  / ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ / ํ˜ผ์žฌ)
14
+ events: [์ €์žฅ, ์‚ญ์ œ, ์‹ ๊ทœ, ์กฐํšŒ] # ์žˆ์œผ๋ฉด
15
+ steps: # Step ๋ถ„ํ•ด โ€” ๊ถŒ์žฅ 3~5 ยท ์ตœ๋Œ€ 7 (์•„๋ž˜ "Step ์ˆ˜ ๊ทœ์น™")
16
+ - { id: Step1, role: ..., next: Step2 }
17
+ keyRoles: # key-roles.md โ€” ํ•„๋“œ โ†’ master/detail/link/none
18
+ <ํ•„๋“œ>: <role>
19
+ categories: # route ์— B ๊ฐ€ ํฌํ•จ๋  ๋•Œ โ€” data-connection.md
20
+ Ctg<Name>: { role: master|detail, keys: [...], parentKey: ..., childKey: ..., fields: [...] }
21
+ assumptions: # ๊ตฌ์กฐ ๋ฏธ์ œ๊ณต ์‹œ ์ถ”๋ก ํ•œ ๊ฐ€์ • (์‚ฌ๋žŒ ๊ฒ€ํ† ์šฉ)
22
+ - <๊ฐ€์ • ๋ฌธ์žฅ>
23
+ provisional: # ๋น„๋ธ”๋กœํ‚น ๋ฏธํ•ด๊ฒฐ (key-roles.md / lint.md)
24
+ - { field: ..., guess: ..., why: ... }
25
+ expect: # Phase 2 ๊ฐ€ ๋งŒ์กฑํ•ด์•ผ ํ•  ์ฒดํฌ๋ฆฌ์ŠคํŠธ (๊ฒ€์ฆยท์ž๊ธฐ์ ๊ฒ€์šฉ)
26
+ - <๊ธฐ๋Œ€ ์กฐ๊ฑด>
27
+ ---
28
+ ```
29
+
30
+ `expect` ๋Š” bench ์ผ€์ด์Šค(T-/D-)์˜ ๊ทธ๊ฒƒ๊ณผ ๊ฐ™์€ ์—ญํ•  โ€” ์ƒ์„ฑ ๊ฒฐ๊ณผ๊ฐ€ ๋งž๋Š”์ง€ ์Šค์Šค๋กœ ์ ๊ฒ€ํ•˜๋Š” ๋ชฉ๋ก. ์˜ˆ: "Step1โ†’2โ†’3 reachability 1ํšŒ", "๋””ํ…Œ์ผ์€ DataUsage:query (UseInnerBlock ๊ธˆ์ง€)", "Init mock ๋ถ€๋ชจ2+์ž์‹", "Collections:{} ์œ ์ง€", "์กฐํšŒ์กฐ๊ฑด 12๊ฐœ โ†’ Step2 ๋ถ„๋ฆฌ".
31
+
32
+ ## ๋ณธ๋ฌธ (Step๋ณ„ ๋ช…์„ธ)
33
+
34
+ ๊ฐ Step ์„ ํ—ค๋”๋กœ ๋‚˜๋ˆ„๊ณ , ๊ทธ ์•ˆ์— ์˜์—ญ(๋งˆ์Šคํ„ฐ/๋””ํ…Œ์ผ/์กฐํšŒ์กฐ๊ฑด/์š”์•ฝ)๊ณผ ํ•ญ๋ชฉ์„ ์ ๋Š”๋‹ค. ํ•ญ๋ชฉ์€ `์ด๋ฆ„ โ€” ์˜๋„(์ปจํŠธ๋กค) [๊ธฐ๋ณธ๊ฐ’/๋ฐ”์ธ๋”ฉ]` ํ˜•ํƒœ. ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐยท๋ชฉ์—…ยท๋„ค๋น„๊ฒŒ์ด์…˜ ๊ทœ์น™์„ ๋ฌธ์žฅ์œผ๋กœ ๋ช…์‹œ.
35
+
36
+ **"๋ฐ์ดํ„ฐ / ๋ชฉ์—…" ์ ˆ์€ ํ•„์ˆ˜**๋‹ค โ€” ๊ตฌ์กฐ ์ œ๊ณต์ด๋“  ๋ฏธ์ œ๊ณต์ด๋“  ํ™”๋ฉด์„ ์ฑ„์šธ **๊ตฌ์ฒด์  mock ๊ฐ’**(ํ˜„์‹ค์  ๋ฆฌํ„ฐ๋Ÿด N๊ฑด, ๋ถ€๋ชจ-์ž์‹์ด๋ฉด ์กฐ์ธ ์ผ์น˜)์„ ์ ๋Š”๋‹ค. ๋ฏธ์ œ๊ณต์ด๋ฉด `mockup.md` ์ ˆ์ฐจ๋กœ ์นดํ…Œ๊ณ ๋ฆฌยทํ•„๋“œยท๊ฐ’์„ ์ถ”์ •ํ•ด ์ ๊ณ  frontmatter `categories`/`assumptions` ์— ๊ธฐ๋ก. ๋นˆ ํ™”๋ฉด์œผ๋กœ ๋๋‚ด์ง€ ์•Š๋Š”๋‹ค.
37
+
38
+ ๋ณธ๋ฌธ ์ž‘์„ฑ ์‹œ ์ฐธ๊ณ  ํ…œํ”Œ๋ฆฟ:
39
+ - ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผ(B, ๋ถ€๋ชจ-์ž์‹) โ†’ `templates/master-detail.spec.md`
40
+ - ์กฐํšŒ ํ™”๋ฉด(์กฐ๊ฑด ๋ถ„๋ฆฌ) โ†’ `templates/query-screen.spec.md`
41
+ - ์ •์  ํ”„๋กœํ† ํƒ€์ž…(A, ๊ตฌ์กฐ ๋ฏธ์ œ๊ณต/๋‹จ๊ฑด) โ†’ `templates/static-prototype.spec.md`
42
+
43
+ ## Step ์ˆ˜ ๊ทœ์น™ (์ŠคํŽ™๊ธฐ๋ฐ˜ ์ƒ์„ฑ)
44
+
45
+ ์ŠคํŽ™์œผ๋กœ ์ง„ํ™”ํ•œ ํ™”๋ฉด์€ **3~5 Step ๊ถŒ์žฅ ยท ์ตœ๋Œ€ 7 Step** ์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค. ํ•œ Step ์— ๋ชจ๋“  ๊ฑธ ์šฑ์—ฌ๋„ฃ์ง€๋„, ๊ณผํ•˜๊ฒŒ ์ž˜๊ฒŒ ์ชผ๊ฐœ์ง€๋„ ๋ง ๊ฒƒ โ€” ํ๋ฆ„์„ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋‹จ๊ณ„๋กœ ๋ถ„ํ•ดํ•˜๋˜ **7๊ฐœ๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š๋Š”๋‹ค**(๋„˜์œผ๋ฉด ์„œ๋ธŒ ํ๋ฆ„์„ ํ•ฉ์น˜๊ฑฐ๋‚˜ Step ์•ˆ ์˜์—ญ์œผ๋กœ ๋ฌถ๋Š”๋‹ค). ์ •๋ง ๋‹จ์ˆœํ•œ ๋‹จ๊ฑด ํ™”๋ฉด์ด๋ฉด 2 Step ์ดํ•˜๋„ ๊ฐ€๋Šฅํ•˜๋‚˜, ๊ทธ ๊ทผ๊ฑฐ๋ฅผ `assumptions` ์— ์ ๋Š”๋‹ค.
46
+
47
+ - **๋ชฉ๋ก/์กฐํšŒ**: ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ + (์กฐํšŒ์กฐ๊ฑด ํผ ๋ถ„๋ฆฌ) + ์ƒ์„ธ(detail) โ†’ ์ž์—ฐํžˆ 2~3 Step. ์กฐํšŒ์กฐ๊ฑด โ‰ฅ5 ๋ฉด ์กฐ๊ฑด ํผ์„ ๋ณ„๋„ Step (`query-screens.md`).
48
+ - **์ž…๋ ฅ**: ๊ธฐ๋ณธ์ •๋ณด โ†’ ์ƒ์„ธ/ํ•ญ๋ชฉ โ†’ ํ™•์ธ/์™„๋ฃŒ ์ฒ˜๋Ÿผ ์ž…๋ ฅ ํ๋ฆ„์„ ๋‹จ๊ณ„ํ™” โ†’ 3 Step.
49
+ - **๋‹จ๊ฑด ํ‘œ์‹œ(A)**: ํ‘œ์‹œ + ๊ฒฐ๊ณผ/ํ™•์ธ ๋“ฑ์œผ๋กœ 2~3 Step. ์ •๋ง 1ํ™”๋ฉด์ด๋ฉด ์ ๊ฒŒ ๋‘˜ ์ˆ˜ ์žˆ์œผ๋‚˜ ๊ทผ๊ฑฐ๋ฅผ `assumptions` ์— ์ ๋Š”๋‹ค.
50
+ - StartSteps + ๊ฐ Step.Next ํ•ฉ์ง‘ํ•ฉ์œผ๋กœ reachability ๊ฐ€ ์ •ํ™•ํžˆ 1ํšŒ ๋˜๋„๋ก(๋Š๊ธฐ๊ฑฐ๋‚˜ ์ค‘๋ณต ๊ธˆ์ง€). ํ—ค๋” BackButton ํ‘œ์ค€ ์ ์šฉ.
51
+
52
+ ## Step ์ „ํ™˜ / ๋„ค๋น„ (์ŠคํŽ™ ๋ณธ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๊ธฐ์ˆ )
53
+
54
+ ๊ฐ Step ์— ๋Œ€ํ•ด **์–ด๋–ป๊ฒŒ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š”์ง€**๋ฅผ ์ŠคํŽ™ ๋ณธ๋ฌธ์— ๋ช…์‹œํ•œ๋‹ค(์ƒ˜ํ”Œ ์ˆ˜์ค€์œผ๋กœ ๊ตฌ์ฒด์ ์œผ๋กœ). ๋ชจํ˜ธํ•˜๊ฒŒ ๋‘๋ฉด ํ๋ฆ„์ด ๋Š๊ธด ์ƒ์„ฑ๋ฌผ(์˜ˆ: ์กฐํšŒ์กฐ๊ฑด Step ์—์„œ ๊ฒฐ๊ณผ๋กœ ๋ชป ๋Œ์•„์˜ด)์ด ๋‚˜์˜จ๋‹ค.
55
+
56
+ - **StartSteps**: ๋ณดํ†ต `["Step1"]`. ๋‹ค์ค‘ ์ง„์ž…์ด ํ•„์š”ํ•˜๋ฉด ๋‚˜์—ด.
57
+ - **์ „์ง„**: `BottomButtons[*].MoveTo:"Next"` + `Next.MoveStepOrder:["StepN"]`, ๋˜๋Š” ๋ฆฌ์ŠคํŠธ ์นด๋“œ `UseMove:true` + `MoveSteps.MoveStepOrder`.
58
+ - **๋ณต๊ท€**: ํ—ค๋” `UseBackButton:true`(ํ‘œ์ค€ BackButton, `IsRestored:true` ๋กœ ๊ฐ’ ์œ ์ง€) ๋˜๋Š” `BottomButtons[*].MoveTo:"Prev"`. โš  `Current.step.moveToPrev/moveToNext` ์Šคํฌ๋ฆฝํŠธ **๊ธˆ์ง€**.
59
+ - **์กฐํšŒ์กฐ๊ฑด ์ง„์ž…**: ๊ฒฐ๊ณผ Step `FixedContentsTop` ์—์„œ ์ง„์ž…(์ƒ๋‹จ). ํ•˜๋‹จ '์กฐํšŒ์กฐ๊ฑด' ๋ฒ„ํŠผยท`๋ฐ”๋กœ๊ฐ€๊ธฐ`ยท`๋ฉ”์ธ๋ฉ”๋‰ด`ยท`ํŽผ์น˜๊ธฐ/์ ‘๊ธฐ` ๋ผ๋ฒจ ๋ฒ„ํŠผ **์ƒ์„ฑ ๊ธˆ์ง€**.
60
+ - ๊ฐ Step ์ค„์— `next:`/`back:`/`filterEntry:` ๋ฅผ ์ ์–ด reachability ๊ฐ€ ์ •ํ™•ํžˆ 1ํšŒ ๋˜๊ฒŒ ํ•œ๋‹ค.
61
+
62
+ ## expect ์— ๋„ฃ์„ ์ž์ฒด ์ ๊ฒ€ ํ•ญ๋ชฉ (ํ•ด๋‹น ์‹œ)
63
+
64
+ - M-D ์ œ๊ณต โ†’ `intent.mock`(๋ถ€๋ชจ+์ž์‹ ์นดํ…Œ๊ณ ๋ฆฌ) ๋™๋ฐ˜, `UseDataConnection:true`/`DataConnection` โ‰ฅ1 (0์ด๋ฉด ์‹คํŒจ).
65
+ - ๋ฐ˜๋ณต ์˜์—ญ์€ `DataUsage:"query"` + ์Šคํฌ๋กค ๊ทธ๋ฃน์œผ๋กœ ํ•œ๋‘ ๊ฒน ๋ž˜ํ•‘(์ค‘์ฒฉ ๊นŠ์ด โ‰ฅ5 ๋ชฉํ‘œ), ์ •์  Label ๋ณต์ œ ์•„๋‹˜.
66
+ - ์กฐํšŒ์กฐ๊ฑด์€ ์ƒ๋‹จ(`FixedContentsTop`)/๋ณ„๋„ Step, ํ•˜๋‹จ ์ง„์ž… ๋ฒ„ํŠผ ์—†์Œ, ๋ถ€๊ฐ€ ๋„ค๋น„ ๋ฒ„ํŠผ(๋ฐ”๋กœ๊ฐ€๊ธฐ/๋ฉ”์ธ๋ฉ”๋‰ด/ํŽผ์น˜๊ธฐ) **0๊ฐœ**.
67
+ - ๋งˆ์Šคํ„ฐ ํ‘œ์‹œ ๋ผ๋ฒจ ๋ฐ”์ธ๋”ฉ(๊ฐ€๋Šฅ ์‹œ) + ์ข…์† ์„ ํƒ mock.
68
+ - Step reachability ์ •ํ™•ํžˆ 1ํšŒ, ๋ณต๊ท€ ์ฑ„๋„์€ ํ‘œ์ค€(์Šคํฌ๋ฆฝํŠธ ํ๋ฆ„์ œ์–ด 0).
69
+ - Collections:{} ์œ ์ง€, validate ํ†ต๊ณผ.
70
+
71
+ ## ์ž‘์„ฑ ์›์น™
72
+
73
+ - **๊ตฌ์กฐ ์ œ๊ณต ์‹œ**: ์ค€ ํ•„๋“œ/ํ‚ค/์นด๋””๋„๋ฆฌํ‹ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธฐ๊ณ  ์ž„์˜ ์ถ”๊ฐ€ ๊ธˆ์ง€. ๋ถ€๊ฐ€์ •๋ณด๋Š” ๋ณด์กฐ ๋ณ‘ํ•ฉ.
74
+ - **๊ตฌ์กฐ ๋ฏธ์ œ๊ณต ์‹œ**: ์ถ”๋ก ํ•œ ๋งˆ์Šคํ„ฐ-๋””ํ…Œ์ผยทํ‚ค๋ฅผ ์ฑ„์šฐ๋˜ `assumptions` ์— ๊ทผ๊ฑฐ๋ฅผ ๋‚จ๊ธด๋‹ค.
75
+ - provisional ์€ ๋ฉˆ์ถค ์‚ฌ์œ ๊ฐ€ ์•„๋‹ˆ๋‹ค โ€” ๊ธฐ๋กํ•˜๊ณ  ์ง„ํ–‰.
76
+ - ๋ณธ๋ฌธ์€ Phase 2 ๊ฐ€ ์ฝ๊ณ  ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๋งŒํผ ๊ตฌ์ฒด์ ์ด๋˜, **์‹œ๋‚˜๋ฆฌ์˜ค JSON ์„ ์—ฌ๊ธฐ ์“ฐ์ง€ ์•Š๋Š”๋‹ค**(๊ทธ๊ฑด Phase 2). ์ŠคํŽ™์€ "๋ฌด์—‡์„"์ด๊ณ  Phase 2 ๊ฐ€ "์–ด๋–ป๊ฒŒ".
@@ -0,0 +1,97 @@
1
+ ---
2
+ id: order-with-items
3
+ domain: ์ฃผ๋ฌธ๊ด€๋ฆฌ
4
+ feature: ์ฃผ๋ฌธ + ์ฃผ๋ฌธ์ƒํ’ˆ(๋ถ€๋ชจ-์ž์‹ DC) + ์ƒ์„ธ ๋ณด๊ธฐ
5
+ screenKind: mixed
6
+ route: B
7
+ events: [์กฐํšŒ, ์ƒ์„ธ]
8
+ steps:
9
+ - { id: Step1, role: ์ฃผ๋ฌธ๋ชฉ๋ก(๋ถ€๋ชจquery+์ž์‹query), next: Step2 }
10
+ - { id: Step2, role: ์ฃผ๋ฌธ์ƒ์„ธ(detail, ์ฝ๊ธฐ์ „์šฉ), back: Step1 }
11
+ keyRoles:
12
+ ์ฃผ๋ฌธ๋ฒˆํ˜ธ: master
13
+ ์ฃผ๋ฌธ์ผ์ž: none
14
+ ์ฃผ๋ฌธ์ƒํƒœ: none
15
+ ํ•ฉ๊ณ„๊ธˆ์•ก: none
16
+ ์ƒํ’ˆ_์ฃผ๋ฌธ๋ฒˆํ˜ธ: link
17
+ ์ƒํ’ˆ๋ช…: none
18
+ ์ˆ˜๋Ÿ‰: none
19
+ ๋‹จ๊ฐ€: none
20
+ ๊ธˆ์•ก: none
21
+ categories:
22
+ CtgOrder:
23
+ role: master
24
+ keys: [์ฃผ๋ฌธ๋ฒˆํ˜ธ]
25
+ fields: [์ฃผ๋ฌธ์ผ์ž, ์ฃผ๋ฌธ์ƒํƒœ, ํ•ฉ๊ณ„๊ธˆ์•ก]
26
+ CtgOrderItem:
27
+ role: detail
28
+ parentKey: ์ฃผ๋ฌธ๋ฒˆํ˜ธ
29
+ childKey: ์ฃผ๋ฌธ๋ฒˆํ˜ธ
30
+ fields: [์ƒํ’ˆ๋ช…, ์ˆ˜๋Ÿ‰, ๋‹จ๊ฐ€, ๊ธˆ์•ก]
31
+ assumptions:
32
+ - ์ฃผ๋ฌธ 1๊ฑด์ด ์—ฌ๋Ÿฌ ์ฃผ๋ฌธ์ƒํ’ˆ์„ ๊ฐ€์ง„๋‹ค(1:N)๊ณ  ์ถ”๋ก 
33
+ - ํ•ฉ๊ณ„๊ธˆ์•ก = ๊ทธ ์ฃผ๋ฌธ ์ƒํ’ˆ๋“ค์˜ ๊ธˆ์•ก ํ•ฉ (mock ์—์„œ ์‚ฐ์ˆ  ์ผ์น˜์‹œํ‚ด)
34
+ provisional: []
35
+ expect:
36
+ - ๋ถ€๋ชจ ์ฃผ๋ฌธ Group DataUsage:"query" โ€” CtgOrder ์„นํ„ฐ ์ˆ˜๋งŒํผ ์นด๋“œ ๋ฐ˜๋ณต
37
+ - ์ž์‹ ์ฃผ๋ฌธ์ƒํ’ˆ Group ์ด ๋ถ€๋ชจ ์นด๋“œ ์•ˆ์—์„œ DataUsage:"query" + TargetSector.Filters:[{FilterType:"Parent"}]
38
+ - Parent ํ•„ํ„ฐ์— DCParentKey(์ฃผ๋ฌธ๋ฒˆํ˜ธ)/DCChildKey(์ฃผ๋ฌธ๋ฒˆํ˜ธ) ์ง€์ •
39
+ - ๋ถ€๋ชจ/์ž์‹ ๋ชจ๋“  ํ‘œ์‹œ ํ•ญ๋ชฉ์ด LabelCKey/Ckeys ๋กœ ๋ฐ”์ธ๋”ฉ(์ •์  labeltext ๊ธˆ์ง€)
40
+ - ์ œ๋ชฉยท์ด์ฃผ๋ฌธ๊ฑด์ˆ˜ ์š”์•ฝยท"์‹ ๊ทœ" ๋ฒ„ํŠผ์€ query ๊ทธ๋ฃน ๋ฐ”๊นฅ ๋น„์—ฐ๊ฒฐ ๋ž˜ํผ(UseDataConnection:false)
41
+ - query ๊ทธ๋ฃน Height.MatchText:true + ScrollType:"ScrollY"
42
+ - ์ƒ์„ธ Step2 ๋Š” DataUsage:"detail" (UseTargetSector:true + Status:["active"], ์ฝ๊ธฐ์ „์šฉ)
43
+ - Step2 ํ—ค๋” BackButton ํ‘œ์ค€(Step.UseBackButton:true, BackButton.Next:"None"), {=Field} ํ† ํฐ ๊ธˆ์ง€ โ€” ๊ฐ’์€ script ์ „๋‹ฌ
44
+ - ์‹œ์ž‘ Step Init(named handler)๊ฐ€ intent.mock ์œผ๋กœ CtgOrder 3๊ฑด + ๊ฐ ์ฃผ๋ฌธ์— CtgOrderItem 2~3๊ฑด
45
+ - ํ•ฉ๊ณ„๊ธˆ์•ก mock ์ด ๊ทธ ์ฃผ๋ฌธ ์ƒํ’ˆ ๊ธˆ์•ก ํ•ฉ๊ณผ ์ผ์น˜
46
+ - CategoryName 'Ctg' ์ ‘๋‘ PascalCase, ์˜ˆ์•ฝ์–ด ๋ฏธ์‚ฌ์šฉ
47
+ - StartSteps + Step.Next ๋กœ Step1โ†”Step2 reachability ์ •ํ™•ํžˆ 1ํšŒ, Collections:{} ์œ ์ง€, validate ํ†ต๊ณผ
48
+ ---
49
+ ์ฃผ๋ฌธ๊ณผ ๊ทธ ์ฃผ๋ฌธ์˜ ์ƒํ’ˆ๋“ค์„ ํ•จ๊ป˜ ๋ณด์—ฌ์ฃผ๋Š” ํ™”๋ฉด. **๋ถ€๋ชจ-์ž์‹ ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ(1:N)** ๊ตฌ์กฐ๋‹ค.
50
+
51
+ # Step 1 โ€” ์ฃผ๋ฌธ ๋ชฉ๋ก (๋ถ€๋ชจ query + ์ž์‹ query)
52
+
53
+ ## ์ƒ๋‹จ (๋น„์—ฐ๊ฒฐ ๋ž˜ํผ โ€” 1๋ฒˆ๋งŒ ํ‘œ์‹œ, query ๊ทธ๋ฃน ๋ฐ”๊นฅ)
54
+ - ์ œ๋ชฉ "์ฃผ๋ฌธ ๋ชฉ๋ก" โ€” Label(labeltext). ๊ตต๊ฒŒ/ํฐ ๊ธ€์”จ(design: font ์Šฌ๋กฏ).
55
+ - ์ด ์ฃผ๋ฌธ๊ฑด์ˆ˜ ์š”์•ฝ "์ด N๊ฑด" โ€” Label. ํšŒ์ƒ‰ ๋ณด์กฐ ํ…์ŠคํŠธ.
56
+ - "์‹ ๊ทœ ์ฃผ๋ฌธ" ๋ฒ„ํŠผ โ€” Button. ์šฐ์ธก ์ •๋ ฌ. (๋™์ž‘์€ ํ”„๋กœํ† ํƒ€์ž… ๋ฒ”์œ„ ๋ฐ–์ด์–ด๋„ ๋ฐฐ์น˜)
57
+
58
+ ## ์ฃผ๋ฌธ ์นด๋“œ (๋ถ€๋ชจ query, CtgOrder โ€” ์Šคํฌ๋กค ๋ž˜ํ•‘)
59
+ - **์ค‘์ฒฉ ๋ž˜ํ•‘**: `์Šคํฌ๋กค Group(ScrollType:"ScrollY", UseDataConnection:false) > ๋ฆฌ์ŠคํŠธ Group(UseDataConnection:true, DataConnection{TargetType:"category", DataUsage:"query", CategoryName:"CtgOrder"}) > row Group(์นด๋“œ)`. ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ์€ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฆฌ์ŠคํŠธ Group ์—๋งŒ, ๋ฐ”๊นฅ ์Šคํฌ๋กค์€ false.
60
+ - ์นด๋“œ ์Šคํƒ€์ผ: ๋ผ์šด๋“œ + ์˜…์€ ํ…Œ๋‘๋ฆฌ + ์นด๋“œ ์‚ฌ์ด ๊ฐ„๊ฒฉ(design: radius/border/m ์Šฌ๋กฏ).
61
+ - ํ‘œ์‹œ ํ•ญ๋ชฉ(๋ชจ๋‘ ์„นํ„ฐ ํ•„๋“œ ๋ฐ”์ธ๋”ฉ):
62
+ - ์ฃผ๋ฌธ๋ฒˆํ˜ธ โ€” Label(LabelCKey: ์ฃผ๋ฌธ๋ฒˆํ˜ธ). ์นด๋“œ ํ—ค๋”, ๊ตต๊ฒŒ.
63
+ - ์ฃผ๋ฌธ์ผ์ž โ€” Label(LabelCKey: ์ฃผ๋ฌธ์ผ์ž). ๋ณด์กฐ ํ…์ŠคํŠธ.
64
+ - ์ฃผ๋ฌธ์ƒํƒœ โ€” Label(LabelCKey: ์ฃผ๋ฌธ์ƒํƒœ). ์ƒํƒœ ๋ฐฐ์ง€ ๋А๋‚Œ(์ ‘์ˆ˜/๋ฐฐ์†ก์ค‘/์™„๋ฃŒ).
65
+ - ํ•ฉ๊ณ„๊ธˆ์•ก โ€” Label(LabelCKey: ํ•ฉ๊ณ„๊ธˆ์•ก). ์šฐ์ธก, ๊ฐ•์กฐ.
66
+
67
+ ### ์ฃผ๋ฌธ์ƒํ’ˆ ๋ชฉ๋ก (์ž์‹ query โ€” ์นด๋“œ ์•ˆ)
68
+ - ๋ถ€๋ชจ ์นด๋“œ Group **์•ˆ์ชฝ**์— ์ž์‹ Group UseDataConnection:true, DataUsage:"query", CategoryName:"CtgOrderItem".
69
+ - TargetSector.Filters:[{FilterType:"Parent"}], DCParentKey:"์ฃผ๋ฌธ๋ฒˆํ˜ธ" / DCChildKey:"์ฃผ๋ฌธ๋ฒˆํ˜ธ" ๋กœ ์กฐ์ธ.
70
+ - ํ–‰ ํ•ญ๋ชฉ(๋ฐ˜๋ณต, ์„นํ„ฐ ํ•„๋“œ ๋ฐ”์ธ๋”ฉ):
71
+ - ์ƒํ’ˆ๋ช… โ€” Label(LabelCKey: ์ƒํ’ˆ๋ช…).
72
+ - ์ˆ˜๋Ÿ‰ โ€” Label(LabelCKey: ์ˆ˜๋Ÿ‰). "x N" ํ˜•ํƒœ.
73
+ - ๋‹จ๊ฐ€ / ๊ธˆ์•ก โ€” Label(Ckeys). ์šฐ์ธก ์ •๋ ฌ.
74
+ - ์นด๋“œ์˜ "์ƒ์„ธ" ๋ฒ„ํŠผ โ†’ Step 2 (์„ ํƒ ์ฃผ๋ฌธ์ด activeSector ๊ฐ€ ๋จ).
75
+
76
+ # Step 2 โ€” ์ฃผ๋ฌธ ์ƒ์„ธ (detail, ์ฝ๊ธฐ์ „์šฉ)
77
+ - ํ—ค๋” BackButton(Step.UseBackButton:true) โ€” Step 1 ๋กœ ํšŒ๊ท€.
78
+ - ์„ ํƒํ•œ ์ฃผ๋ฌธ(activeSector)์„ DataUsage:"detail"(UseTargetSector:true + Status:["active"])๋กœ ์ฝ๊ธฐ์ „์šฉ ํ‘œ์‹œ.
79
+ - ์ฃผ๋ฌธ๋ฒˆํ˜ธ / ์ฃผ๋ฌธ์ผ์ž / ์ฃผ๋ฌธ์ƒํƒœ / ํ•ฉ๊ณ„๊ธˆ์•ก + ์ƒํ’ˆ ๋ชฉ๋ก(์ƒํ’ˆ๋ช…ยท์ˆ˜๋Ÿ‰ยท๋‹จ๊ฐ€ยท๊ธˆ์•ก). ์ž…๋ ฅ ๋ถˆ๊ฐ€, ํ‘œ์‹œ๋งŒ.
80
+ - ๊ฐ’์€ {=Field} ํ† ํฐ์ด ์•„๋‹ˆ๋ผ onShow/Next script ๋กœ ์ „๋‹ฌ(template-script ๊ทœ์น™).
81
+
82
+ # ๋ฐ์ดํ„ฐ / ๋ชฉ์—… (์‹œ์ž‘ Step Init, named handler)
83
+ - `Step.Events.Init:"Step1Init"` + `scenario.Events.Step1Init` ์•ˆ์— intent.mock.
84
+ - CtgOrder 3๊ฑด (ํ˜„์‹ค์  ๊ฐ’):
85
+ - ORD-2026-001 / 2026-06-01 / ๋ฐฐ์†ก์ค‘ / ํ•ฉ๊ณ„ 128,000
86
+ - ORD-2026-002 / 2026-06-03 / ์ ‘์ˆ˜ / ํ•ฉ๊ณ„ 54,000
87
+ - ORD-2026-003 / 2026-06-04 / ์™„๋ฃŒ / ํ•ฉ๊ณ„ 210,000
88
+ - CtgOrderItem (๊ฐ ์ฃผ๋ฌธ ์ฃผ๋ฌธ๋ฒˆํ˜ธ๋กœ ์—ฐ๊ฒฐ, ๊ธˆ์•ก ํ•ฉ = ๋ถ€๋ชจ ํ•ฉ๊ณ„๊ธˆ์•ก):
89
+ - ORD-2026-001: ๋ฌด์„ ๋งˆ์šฐ์Šค x2 @24,000=48,000 / USBํ—ˆ๋ธŒ x1 @80,000=80,000
90
+ - ORD-2026-002: A4์šฉ์ง€ x3 @18,000=54,000
91
+ - ORD-2026-003: ๊ธฐ๊ณ„์‹ํ‚ค๋ณด๋“œ x1 @150,000=150,000 / ๋งˆ์šฐ์ŠคํŒจ๋“œ x2 @30,000=60,000
92
+
93
+ # ๊ทœ์น™
94
+ - Collections:{} ์œ ์ง€ ยท UseInnerBlock ๊ธˆ์ง€(๋ฐ˜๋ณต์€ ๋ชจ๋‘ DataUsage:"query")
95
+ - 1๋ฒˆ๋งŒ ๋ณด์ผ ์š”์†Œ๋Š” query ๊ทธ๋ฃน ๋ฐ”๊นฅ, ๋น„์—ฐ๊ฒฐ ๊ทธ๋ฃน๋„ UseDataConnection:false ๋ช…์‹œ
96
+ - ์ •์  ํ…์ŠคํŠธ๋กœ ์นด๋“œ ๋‚ด์šฉ์„ ๋ฐ•์ง€ ๋ง ๊ฒƒ(๋ชจ๋“  ์นด๋“œ๊ฐ€ ๊ฐ™์€ ๋ฌธ๊ตฌ๊ฐ€ ๋˜๋ฉด ์•ˆ ๋จ)
97
+ - validate ํ†ต๊ณผ ํ•„์ˆ˜