agentic-dev 0.2.11 → 0.2.12

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 (314) hide show
  1. package/README.md +53 -46
  2. package/package.json +8 -22
  3. package/.agent/prd.json +0 -29
  4. package/.agent/progress.txt +0 -1
  5. package/.agent/prompt.md +0 -21
  6. package/.agent/ralph-loop-state.json +0 -13
  7. package/.agent/ralph-supervisor-state.json +0 -12
  8. package/.agent/ralph-supervisor.sh +0 -238
  9. package/.agent/ralph.sh +0 -305
  10. package/.agent/runs/README.md +0 -7
  11. package/.agent/sdd-build-ast-audit.json +0 -13
  12. package/.claude/CLAUDE.md +0 -44
  13. package/.claude/agentic-dev.json +0 -3
  14. package/.claude/agents/ai-dev.md +0 -27
  15. package/.claude/agents/backend-dev.md +0 -26
  16. package/.claude/agents/db-dev.md +0 -26
  17. package/.claude/agents/devops.md +0 -27
  18. package/.claude/agents/frontend-dev.md +0 -25
  19. package/.claude/agents/github-ops.md +0 -25
  20. package/.claude/agents/test-dev.md +0 -26
  21. package/.claude/agents/uiux-designer.md +0 -25
  22. package/.claude/settings.json +0 -49
  23. package/.claude/settings.local.json +0 -8
  24. package/.claude/skills/sdd/SKILL.md +0 -189
  25. package/.claude/skills/sdd/agents/openai.yaml +0 -4
  26. package/.claude/skills/sdd/references/section-map.md +0 -67
  27. package/.claude/workspace-config.json +0 -3
  28. package/.codex/agentic-dev.json +0 -3
  29. package/.codex/agents/README.md +0 -22
  30. package/.codex/agents/api.toml +0 -11
  31. package/.codex/agents/architecture.toml +0 -11
  32. package/.codex/agents/ci.toml +0 -11
  33. package/.codex/agents/gitops.toml +0 -11
  34. package/.codex/agents/orchestrator.toml +0 -11
  35. package/.codex/agents/quality.toml +0 -11
  36. package/.codex/agents/runtime.toml +0 -11
  37. package/.codex/agents/security.toml +0 -11
  38. package/.codex/agents/specs.toml +0 -11
  39. package/.codex/agents/ui.toml +0 -11
  40. package/.codex/config.toml +0 -46
  41. package/.codex/skills/SKILL.md +0 -13
  42. package/.codex/skills/sdd/SKILL.md +0 -189
  43. package/.codex/skills/sdd/agents/openai.yaml +0 -4
  44. package/.codex/skills/sdd/references/section-map.md +0 -67
  45. package/.dockerignore +0 -8
  46. package/.env.example +0 -50
  47. package/.gitignore +0 -16
  48. package/AGENTS.md +0 -86
  49. package/SDD_SKILL.md +0 -589
  50. package/compose.yml +0 -206
  51. package/infra/compose/.env.dev.example +0 -28
  52. package/infra/compose/.env.prod.example +0 -29
  53. package/infra/compose/README.md +0 -35
  54. package/infra/compose/dev.yml +0 -125
  55. package/infra/compose/prod.yml +0 -126
  56. package/infra/terraform/README.md +0 -34
  57. package/infra/terraform/aws/data/.terraform.lock.hcl +0 -25
  58. package/infra/terraform/aws/data/README.md +0 -18
  59. package/infra/terraform/aws/data/main.tf +0 -147
  60. package/infra/terraform/aws/data/outputs.tf +0 -14
  61. package/infra/terraform/aws/data/variables.tf +0 -57
  62. package/infra/terraform/aws/data/versions.tf +0 -10
  63. package/infra/terraform/aws/domain/.terraform.lock.hcl +0 -25
  64. package/infra/terraform/aws/domain/README.md +0 -20
  65. package/infra/terraform/aws/domain/env/dev.tfvars.example +0 -6
  66. package/infra/terraform/aws/domain/env/prod.tfvars.example +0 -7
  67. package/infra/terraform/aws/domain/main.tf +0 -149
  68. package/infra/terraform/aws/domain/outputs.tf +0 -29
  69. package/infra/terraform/aws/domain/variables.tf +0 -58
  70. package/infra/terraform/aws/domain/versions.tf +0 -10
  71. package/infra/terraform/openstack/README.md +0 -38
  72. package/infra/terraform/openstack/dev/.terraform.lock.hcl +0 -24
  73. package/infra/terraform/openstack/dev/README.md +0 -18
  74. package/infra/terraform/openstack/dev/main.tf +0 -49
  75. package/infra/terraform/openstack/dev/providers.tf +0 -15
  76. package/infra/terraform/openstack/dev/terraform.tfvars.example +0 -54
  77. package/infra/terraform/openstack/dev/variables.tf +0 -210
  78. package/infra/terraform/openstack/dev/versions.tf +0 -10
  79. package/infra/terraform/openstack/modules/environment_host/main.tf +0 -143
  80. package/infra/terraform/openstack/modules/environment_host/outputs.tf +0 -25
  81. package/infra/terraform/openstack/modules/environment_host/templates/docker-host-user-data.sh.tftpl +0 -40
  82. package/infra/terraform/openstack/modules/environment_host/variables.tf +0 -145
  83. package/infra/terraform/openstack/modules/environment_host/versions.tf +0 -7
  84. package/infra/terraform/openstack/prod/.terraform.lock.hcl +0 -24
  85. package/infra/terraform/openstack/prod/README.md +0 -18
  86. package/infra/terraform/openstack/prod/main.tf +0 -49
  87. package/infra/terraform/openstack/prod/providers.tf +0 -15
  88. package/infra/terraform/openstack/prod/terraform.tfvars.example +0 -55
  89. package/infra/terraform/openstack/prod/variables.tf +0 -210
  90. package/infra/terraform/openstack/prod/versions.tf +0 -10
  91. package/infra/terraform/openstack/server/.terraform.lock.hcl +0 -45
  92. package/infra/terraform/openstack/server/README.md +0 -47
  93. package/infra/terraform/openstack/server/main.tf +0 -161
  94. package/infra/terraform/openstack/server/outputs.tf +0 -30
  95. package/infra/terraform/openstack/server/providers.tf +0 -30
  96. package/infra/terraform/openstack/server/templates/server-user-data.sh.tftpl +0 -50
  97. package/infra/terraform/openstack/server/variables.tf +0 -233
  98. package/infra/terraform/openstack/server/zz_aspace.auto.tfvars.example.json +0 -29
  99. package/pnpm-workspace.yaml +0 -2
  100. package/scripts/dev/audit_sdd_build_ast.py +0 -277
  101. package/sdd/01_planning/01_feature/INDEX.md +0 -16
  102. package/sdd/01_planning/01_feature/README.md +0 -76
  103. package/sdd/01_planning/01_feature/alerts_feature_spec.md +0 -55
  104. package/sdd/01_planning/01_feature/auth_feature_spec.md +0 -57
  105. package/sdd/01_planning/01_feature/catalog_feature_spec.md +0 -61
  106. package/sdd/01_planning/01_feature/fulfillment_feature_spec.md +0 -58
  107. package/sdd/01_planning/01_feature/health_feature_spec.md +0 -52
  108. package/sdd/01_planning/01_feature/inventory_feature_spec.md +0 -60
  109. package/sdd/01_planning/01_feature/order_feature_spec.md +0 -63
  110. package/sdd/01_planning/01_feature/shipping_feature_spec.md +0 -55
  111. package/sdd/01_planning/01_feature/support_feature_spec.md +0 -53
  112. package/sdd/01_planning/01_feature/user_feature_spec.md +0 -54
  113. package/sdd/01_planning/02_screen/INDEX.md +0 -13
  114. package/sdd/01_planning/02_screen/README.md +0 -41
  115. package/sdd/01_planning/02_screen/admin_screen_spec.pdf +0 -0
  116. package/sdd/01_planning/02_screen/assets/README.md +0 -16
  117. package/sdd/01_planning/02_screen/assets/example/README.md +0 -13
  118. package/sdd/01_planning/02_screen/landing_screen_spec.pdf +0 -0
  119. package/sdd/01_planning/02_screen/mobile_screen_spec.pdf +0 -0
  120. package/sdd/01_planning/02_screen/web_screen_spec.pdf +0 -0
  121. package/sdd/01_planning/03_architecture/INDEX.md +0 -9
  122. package/sdd/01_planning/03_architecture/README.md +0 -25
  123. package/sdd/01_planning/03_architecture/architecture_document_structure.md +0 -77
  124. package/sdd/01_planning/03_architecture/backend/README.md +0 -10
  125. package/sdd/01_planning/03_architecture/frontend/README.md +0 -12
  126. package/sdd/01_planning/03_architecture/infra/README.md +0 -10
  127. package/sdd/01_planning/03_architecture/tech-research/README.md +0 -4
  128. package/sdd/01_planning/03_architecture/templates_system_architecture.md +0 -84
  129. package/sdd/01_planning/04_data/INDEX.md +0 -4
  130. package/sdd/01_planning/04_data/README.md +0 -10
  131. package/sdd/01_planning/04_data/templates_data_modeling.md +0 -119
  132. package/sdd/01_planning/05_api/README.md +0 -12
  133. package/sdd/01_planning/05_api/templates_api_contract.md +0 -90
  134. package/sdd/01_planning/06_iac/README.md +0 -11
  135. package/sdd/01_planning/06_iac/templates_runtime_and_cicd_baseline.md +0 -46
  136. package/sdd/01_planning/07_integration/README.md +0 -11
  137. package/sdd/01_planning/07_integration/templates_frontend_api_integration.md +0 -46
  138. package/sdd/01_planning/08_nonfunctional/README.md +0 -7
  139. package/sdd/01_planning/09_security/README.md +0 -7
  140. package/sdd/01_planning/10_test/README.md +0 -12
  141. package/sdd/01_planning/10_test/templates_test_strategy.md +0 -60
  142. package/sdd/01_planning/INDEX.md +0 -19
  143. package/sdd/01_planning/README.md +0 -17
  144. package/sdd/02_plan/01_feature/README.md +0 -34
  145. package/sdd/02_plan/01_feature/_feature_todo_template.md +0 -29
  146. package/sdd/02_plan/02_screen/INDEX.md +0 -19
  147. package/sdd/02_plan/02_screen/README.md +0 -39
  148. package/sdd/02_plan/02_screen/_screen_todo_template.md +0 -60
  149. package/sdd/02_plan/03_architecture/README.md +0 -23
  150. package/sdd/02_plan/03_architecture/architecture_document_governance.md +0 -40
  151. package/sdd/02_plan/03_architecture/build_ast_runtime_tree_governance.md +0 -53
  152. package/sdd/02_plan/03_architecture/repository_governance.md +0 -39
  153. package/sdd/02_plan/03_architecture/runtime_and_structure_governance.md +0 -38
  154. package/sdd/02_plan/03_architecture/templates-hexagonal-template-architecture.md +0 -9
  155. package/sdd/02_plan/03_architecture/toolchain_governance.md +0 -98
  156. package/sdd/02_plan/04_data/README.md +0 -5
  157. package/sdd/02_plan/05_api/README.md +0 -5
  158. package/sdd/02_plan/06_iac/README.md +0 -11
  159. package/sdd/02_plan/06_iac/dev_runtime_delivery.md +0 -36
  160. package/sdd/02_plan/06_iac/template_runtime_delivery.md +0 -50
  161. package/sdd/02_plan/07_integration/README.md +0 -5
  162. package/sdd/02_plan/07_integration/frontend_live_integration.md +0 -31
  163. package/sdd/02_plan/08_nonfunctional/README.md +0 -5
  164. package/sdd/02_plan/08_nonfunctional/repository_hygiene.md +0 -26
  165. package/sdd/02_plan/09_security/README.md +0 -5
  166. package/sdd/02_plan/10_test/README.md +0 -11
  167. package/sdd/02_plan/10_test/regression_verification.md +0 -39
  168. package/sdd/02_plan/10_test/templates/README.md +0 -8
  169. package/sdd/02_plan/10_test/templates/ui_parity_web_contract.template.yaml +0 -23
  170. package/sdd/02_plan/10_test/verification_strategy.md +0 -43
  171. package/sdd/02_plan/99_generated/from_planning/ui_parity/.gitkeep +0 -1
  172. package/sdd/02_plan/README.md +0 -40
  173. package/sdd/03_build/01_feature/README.md +0 -20
  174. package/sdd/03_build/01_feature/domain/README.md +0 -3
  175. package/sdd/03_build/01_feature/domain/account_and_access.md +0 -20
  176. package/sdd/03_build/01_feature/domain/catalog_and_inventory.md +0 -20
  177. package/sdd/03_build/01_feature/domain/ordering_and_fulfillment.md +0 -21
  178. package/sdd/03_build/01_feature/domain/support_and_observability.md +0 -21
  179. package/sdd/03_build/01_feature/domain_surfaces.md +0 -28
  180. package/sdd/03_build/01_feature/service/README.md +0 -3
  181. package/sdd/03_build/01_feature/service/admin_surface.md +0 -15
  182. package/sdd/03_build/01_feature/service/landing_surface.md +0 -13
  183. package/sdd/03_build/01_feature/service/mobile_surface.md +0 -14
  184. package/sdd/03_build/01_feature/service/web_surface.md +0 -14
  185. package/sdd/03_build/02_screen/README.md +0 -25
  186. package/sdd/03_build/02_screen/_screen_build_template.md +0 -26
  187. package/sdd/03_build/02_screen/admin/README.md +0 -5
  188. package/sdd/03_build/02_screen/landing/README.md +0 -5
  189. package/sdd/03_build/02_screen/mobile/README.md +0 -5
  190. package/sdd/03_build/02_screen/web/README.md +0 -5
  191. package/sdd/03_build/03_architecture/README.md +0 -10
  192. package/sdd/03_build/03_architecture/architecture_document_governance.md +0 -30
  193. package/sdd/03_build/03_architecture/build_ast_runtime_tree_governance.md +0 -24
  194. package/sdd/03_build/03_architecture/repository_governance.md +0 -18
  195. package/sdd/03_build/03_architecture/toolchain_governance.md +0 -36
  196. package/sdd/03_build/06_iac/README.md +0 -3
  197. package/sdd/03_build/06_iac/dev_runtime_delivery.md +0 -10
  198. package/sdd/03_build/06_iac/template_runtime_delivery.md +0 -49
  199. package/sdd/03_build/07_integration/README.md +0 -3
  200. package/sdd/03_build/07_integration/frontend_live_integration.md +0 -11
  201. package/sdd/03_build/08_nonfunctional/README.md +0 -3
  202. package/sdd/03_build/08_nonfunctional/repository_hygiene.md +0 -10
  203. package/sdd/03_build/10_test/README.md +0 -9
  204. package/sdd/03_build/10_test/regression_verification.md +0 -16
  205. package/sdd/03_build/10_test/verification_harness.md +0 -11
  206. package/sdd/03_build/README.md +0 -35
  207. package/sdd/03_verify/01_feature/README.md +0 -5
  208. package/sdd/03_verify/01_feature/domain_verification.md +0 -14
  209. package/sdd/03_verify/01_feature/service_verification.md +0 -22
  210. package/sdd/03_verify/02_screen/README.md +0 -6
  211. package/sdd/03_verify/02_screen/_screen_verify_template.md +0 -20
  212. package/sdd/03_verify/02_screen/admin/README.md +0 -4
  213. package/sdd/03_verify/02_screen/landing/README.md +0 -4
  214. package/sdd/03_verify/02_screen/mobile/README.md +0 -4
  215. package/sdd/03_verify/02_screen/web/README.md +0 -4
  216. package/sdd/03_verify/03_architecture/README.md +0 -10
  217. package/sdd/03_verify/03_architecture/architecture_document_governance.md +0 -15
  218. package/sdd/03_verify/03_architecture/build_ast_runtime_tree_governance.md +0 -28
  219. package/sdd/03_verify/03_architecture/repository_governance.md +0 -16
  220. package/sdd/03_verify/03_architecture/toolchain_governance.md +0 -58
  221. package/sdd/03_verify/06_iac/README.md +0 -3
  222. package/sdd/03_verify/06_iac/dev_runtime_delivery.md +0 -10
  223. package/sdd/03_verify/06_iac/template_runtime_delivery.md +0 -42
  224. package/sdd/03_verify/07_integration/README.md +0 -3
  225. package/sdd/03_verify/07_integration/frontend_live_integration.md +0 -16
  226. package/sdd/03_verify/08_nonfunctional/README.md +0 -3
  227. package/sdd/03_verify/08_nonfunctional/repository_hygiene.md +0 -14
  228. package/sdd/03_verify/10_test/README.md +0 -9
  229. package/sdd/03_verify/10_test/regression_verification.md +0 -16
  230. package/sdd/03_verify/10_test/ui_parity/README.md +0 -4
  231. package/sdd/03_verify/10_test/ui_parity/loop_runs/.gitkeep +0 -0
  232. package/sdd/03_verify/10_test/ui_parity/reference/.gitkeep +0 -0
  233. package/sdd/03_verify/10_test/ui_parity/staged_runs/.gitkeep +0 -0
  234. package/sdd/03_verify/10_test/verification_harness.md +0 -17
  235. package/sdd/03_verify/README.md +0 -22
  236. package/sdd/05_operate/01_runbooks/.gitkeep +0 -1
  237. package/sdd/05_operate/01_runbooks/README.md +0 -4
  238. package/sdd/05_operate/02_delivery_status/README.md +0 -4
  239. package/sdd/05_operate/02_delivery_status/service_status.md +0 -16
  240. package/sdd/05_operate/README.md +0 -12
  241. package/sdd/99_toolchain/01_automation/.gitkeep +0 -1
  242. package/sdd/99_toolchain/01_automation/README.md +0 -76
  243. package/sdd/99_toolchain/01_automation/agentic-dev/analyze_proof_results.py +0 -132
  244. package/sdd/99_toolchain/01_automation/agentic-dev/analyze_route_gap.py +0 -85
  245. package/sdd/99_toolchain/01_automation/agentic-dev/assets/repo-contract.template.json +0 -75
  246. package/sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh +0 -84
  247. package/sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh +0 -33
  248. package/sdd/99_toolchain/01_automation/agentic-dev/init_repo_contract.sh +0 -51
  249. package/sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json +0 -76
  250. package/sdd/99_toolchain/01_automation/agentic-dev/resolve_frontend_target.py +0 -52
  251. package/sdd/99_toolchain/01_automation/agentic-dev/resolve_repo_contract.py +0 -56
  252. package/sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh +0 -100
  253. package/sdd/99_toolchain/01_automation/agentic-dev/run_repo_phase.sh +0 -140
  254. package/sdd/99_toolchain/01_automation/agentic-dev/validate_json_schema.py +0 -39
  255. package/sdd/99_toolchain/01_automation/agentic-parity-harness-design.md +0 -291
  256. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/dashboard.png +0 -0
  257. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/login.png +0 -0
  258. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/queue.png +0 -0
  259. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/support.png +0 -0
  260. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/home.png +0 -0
  261. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/login.png +0 -0
  262. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/workspace.png +0 -0
  263. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/dashboard.png +0 -0
  264. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/fulfillment.png +0 -0
  265. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/login.png +0 -0
  266. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/dashboard.png +0 -0
  267. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/login.png +0 -0
  268. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/orders.png +0 -0
  269. package/sdd/99_toolchain/01_automation/build_asset_recipes.py +0 -10
  270. package/sdd/99_toolchain/01_automation/build_screen_spec_pdf.py +0 -427
  271. package/sdd/99_toolchain/01_automation/capture_screen_assets.mjs +0 -148
  272. package/sdd/99_toolchain/01_automation/harness-layout.md +0 -34
  273. package/sdd/99_toolchain/01_automation/parity-execution-tooling-design.md +0 -319
  274. package/sdd/99_toolchain/01_automation/playwright_exactness_manifest.py +0 -21
  275. package/sdd/99_toolchain/01_automation/run_playwright_exactness.py +0 -87
  276. package/sdd/99_toolchain/01_automation/screen_spec_manifest.py +0 -321
  277. package/sdd/99_toolchain/01_automation/spec_asset_builder.py +0 -274
  278. package/sdd/99_toolchain/01_automation/ui-contract-projection.md +0 -79
  279. package/sdd/99_toolchain/01_automation/ui-parity/README.md +0 -60
  280. package/sdd/99_toolchain/01_automation/ui-parity/cli/extract-reference-pages.mjs +0 -2
  281. package/sdd/99_toolchain/01_automation/ui-parity/cli/materialize-reference-assets.mjs +0 -58
  282. package/sdd/99_toolchain/01_automation/ui-parity/cli/normalize-reference-assets.mjs +0 -2
  283. package/sdd/99_toolchain/01_automation/ui-parity/cli/route-gap-report.mjs +0 -187
  284. package/sdd/99_toolchain/01_automation/ui-parity/cli/run-proof.mjs +0 -50
  285. package/sdd/99_toolchain/01_automation/ui-parity/cli/scaffold-contract.mjs +0 -62
  286. package/sdd/99_toolchain/01_automation/ui-parity/cli/upload-parity1.mjs +0 -2
  287. package/sdd/99_toolchain/01_automation/ui-parity/contracts/collector-metadata.schema.json +0 -33
  288. package/sdd/99_toolchain/01_automation/ui-parity/contracts/proof-result.schema.json +0 -76
  289. package/sdd/99_toolchain/01_automation/ui-parity/contracts/route-gap-report.schema.json +0 -95
  290. package/sdd/99_toolchain/01_automation/ui-parity/core/capture-runner.mjs +0 -55
  291. package/sdd/99_toolchain/01_automation/ui-parity/core/load-adapter.mjs +0 -25
  292. package/sdd/99_toolchain/01_automation/ui-parity/core/load-contract.mjs +0 -81
  293. package/sdd/99_toolchain/01_automation/ui-parity/core/paths.mjs +0 -23
  294. package/sdd/99_toolchain/01_automation/ui-parity/core/proof-runner.mjs +0 -255
  295. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-artifact-layout.md +0 -23
  296. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-proof-interface.md +0 -60
  297. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-route-gap-interface.md +0 -82
  298. package/sdd/99_toolchain/01_automation/ui-parity/runtime/playwright-runtime.mjs +0 -16
  299. package/sdd/99_toolchain/01_automation/ui-parity/runtime/static-runtime.mjs +0 -6
  300. package/sdd/99_toolchain/02_policies/.gitkeep +0 -1
  301. package/sdd/99_toolchain/02_policies/build-ast-governance-policy.md +0 -22
  302. package/sdd/99_toolchain/02_policies/compose-runtime-baseline-policy.md +0 -24
  303. package/sdd/99_toolchain/02_policies/convention-storage-policy.md +0 -26
  304. package/sdd/99_toolchain/02_policies/main-push-before-dev-deploy-policy.md +0 -27
  305. package/sdd/99_toolchain/02_policies/regression-verification-policy.md +0 -22
  306. package/sdd/99_toolchain/03_templates/.gitkeep +0 -1
  307. package/sdd/99_toolchain/03_templates/asset_recipe_manifest.example.py +0 -38
  308. package/sdd/99_toolchain/03_templates/generated_assets/README.md +0 -11
  309. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-lockup.svg +0 -3
  310. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-mark.svg +0 -3
  311. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-wordmark.svg +0 -3
  312. package/sdd/99_toolchain/03_templates/playwright_exactness_manifest.example.py +0 -21
  313. package/sdd/99_toolchain/README.md +0 -23
  314. package/sdd/README.md +0 -21
@@ -1,55 +0,0 @@
1
- # alerts feature spec
2
-
3
- - 작성 버전: 1.0.0
4
-
5
- ## 1. Purpose
6
-
7
- `alerts` bounded context가 제공하는 운영 알람 feed와 읽음 처리 기능을 구현 기준으로 정리한다.
8
-
9
- ## 2. Scope
10
-
11
- - 포함 범위:
12
- - admin surface의 운영 알람 목록 조회
13
- - 알람 단건 읽음 처리와 전체 읽음 처리
14
- - 제외 범위:
15
- - email, SMS, push 같은 외부 발송 인프라
16
- - 주문/배송/재고 도메인 내부의 원인 계산 로직 자체
17
-
18
- ## 3. Actor Summary
19
-
20
- | Actor | Description | Appears In |
21
- | --- | --- | --- |
22
- | `Admin Operator` | admin 서비스에서 운영 이벤트와 예외 상황을 확인하고 알람 읽음 상태를 관리하는 운영 관리자다. | `ALR-F001`, `ALR-F002`, `ALR-F003` |
23
-
24
- ## 4. Bounded Context Summary
25
-
26
- | Item | Value |
27
- | --- | --- |
28
- | Domain Code | `ALR` |
29
- | Bounded Context | Alert Center |
30
- | Primary Backend Owner | `server/contexts/alerts` |
31
- | Related Context | `orders`, `shipping`, `inventory`, `support` |
32
- | Main Entry Contract | `GET /api/v1/alerts`, `POST /api/v1/alerts/{alert_id}/read`, `POST /api/v1/alerts/read-all` |
33
-
34
- ## 5. Aggregate / Model Snapshot
35
-
36
- | Aggregate / Model | Role |
37
- | --- | --- |
38
- | `AlertRecord` | 운영 알람 저장 모델 |
39
- | `AlertItem` | 알람 feed 응답 모델 |
40
- | `AlertsPayload` | unread count와 목록을 묶은 응답 모델 |
41
- | `AlertReadResult` | 단건 읽음 처리 결과 |
42
- | `AlertsReadAllResult` | 전체 읽음 처리 결과 |
43
-
44
- ## 6. Use Case Matrix
45
-
46
- | Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
47
- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
48
- | `ALR-F001` | 운영 알람 feed를 조회한다 | Admin Operator | Alert Center | `AlertsPayload`, `AlertItem`, `AlertRecord` | Query | 관리자 토큰이 유효하고 alert bootstrap 데이터가 존재해야 한다 | unread count와 최신 운영 알람 목록을 반환한다 | feed 조회는 알람 읽음 상태를 변경하지 않는다 |
49
- | `ALR-F002` | 운영 알람 1건을 읽음 처리한다 | Admin Operator | Alert Center | `AlertReadResult`, `AlertRecord` | Command | 관리자 토큰이 유효하고 요청한 `alert_id`가 존재해야 한다 | 선택한 알람의 `read` 상태가 `true`가 된다 | 존재하지 않는 `alert_id`면 `404`를 반환한다 |
50
- | `ALR-F003` | 운영 알람 전체를 읽음 처리한다 | Admin Operator | Alert Center | `AlertsReadAllResult`, `AlertRecord` | Command | 관리자 토큰이 유효하고 alert bootstrap 데이터가 존재해야 한다 | 미읽음 알람이 모두 읽음 상태로 갱신된다 | 이미 읽은 알람은 중복 변경하지 않는다 |
51
-
52
- ## 7. Notes
53
-
54
- - `alerts`는 admin dashboard의 보조 read model이 아니라 독립 운영 피드로 취급한다.
55
- - 원인 도메인이 무엇이든 admin이 소비하는 알람 표현과 읽음 상태는 `alerts` context가 소유한다.
@@ -1,57 +0,0 @@
1
- # auth feature spec
2
-
3
- - 작성 버전: 1.1.0
4
-
5
- ## 1. Purpose
6
-
7
- `auth` bounded context가 제공하는 인증과 현재 세션 해석 기능을 구현 기준으로 정리한다.
8
-
9
- ## 2. Scope
10
-
11
- - 포함 범위:
12
- - 이메일/비밀번호 기반 로그인과 bearer token 기반 현재 세션 해석
13
- - `auth_accounts.json`이 소유하는 credential 검증과 공통 session contract
14
- - 제외 범위:
15
- - 사용자 프로필 조회/변경과 role 관리
16
- - 로그인 이후 서비스별 route 분기나 client-side token 저장 방식
17
-
18
- ## 3. Actor Summary
19
-
20
- | Actor | Description | Appears In |
21
- | --- | --- | --- |
22
- | `Web User` | web 서비스에서 주문/운영 기능에 접근하기 위해 인증 세션을 발급받는 사용자다. | `AUT-F001` |
23
- | `Mobile Operator` | mobile 서비스에서 이행 작업을 수행하기 위해 로그인하는 현장 운영자다. | `AUT-F001` |
24
- | `Admin Operator` | admin 서비스에서 카탈로그, 재고, 사용자 운영 명령을 수행하기 위해 관리자 세션을 발급받는 주체다. | `AUT-F001` |
25
- | `Landing Member` | landing 서비스에서 회원 전용 자원이나 개인화 동작을 사용하기 위해 로그인하는 사용자다. | `AUT-F001` |
26
- | `Authenticated Client` | 이미 bearer token을 보유한 frontend runtime 또는 HTTP client로 현재 세션 사용자 해석을 요청하는 주체다. | `AUT-F002` |
27
-
28
- ## 4. Bounded Context Summary
29
-
30
- | Item | Value |
31
- | --- | --- |
32
- | Domain Code | `AUT` |
33
- | Bounded Context | Authentication & Session |
34
- | Primary Backend Owner | `server/contexts/auth` |
35
- | Related Context | `server/contexts/user` |
36
- | Main Entry Contract | `POST /api/v1/auth/login`, `GET /api/v1/auth/me` |
37
-
38
- ## 5. Aggregate / Model Snapshot
39
-
40
- | Aggregate / Model | Role |
41
- | --- | --- |
42
- | `LoginCommand` | 로그인 명령 입력 모델 |
43
- | `AuthToken` | bearer token 응답 모델 |
44
- | `AuthAccountRecord` | 인증 계정 저장 모델 |
45
- | `AuthenticatedUser` | 현재 세션 사용자 응답 모델 |
46
-
47
- ## 6. Use Case Matrix
48
-
49
- | Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
50
- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
51
- | `AUT-F001` | 이메일/비밀번호로 로그인하고 access token을 발급한다 | Web User, Mobile Operator, Admin Operator, Landing Member | Authentication & Session | `LoginCommand`, `AuthToken`, `AuthAccountRecord` | Command | 이메일과 비밀번호가 전달되고, 인증 계정 저장소에 해당 사용자가 존재해야 한다 | access token과 `user_id`가 발급된다 | credential이 일치하지 않으면 `401 Invalid credentials`를 반환한다 |
52
- | `AUT-F002` | bearer token으로 현재 세션 사용자를 해석한다 | Authenticated Client | Authentication & Session | `AuthToken`, `AuthenticatedUser`, `AuthAccountRecord` | Query | 유효한 bearer token이 전달되고 token subject가 인증 계정 저장소에 존재해야 한다 | 현재 사용자 summary를 반환한다 | token이 위조되었거나 subject 사용자가 없으면 `401 Invalid token`을 반환한다 |
53
-
54
- ## 7. Notes
55
-
56
- - `auth`는 `auth_accounts.json` bootstrap을 소유하며 `user` profile 저장과 credential 저장을 분리한다.
57
- - 인증 성공 이후 권한별 화면 분기는 frontend service에서 처리하고, backend는 공통 session contract만 제공한다.
@@ -1,61 +0,0 @@
1
- # catalog feature spec
2
-
3
- - 작성 버전: 1.1.0
4
-
5
- ## 1. Purpose
6
-
7
- `catalog` bounded context가 제공하는 상품 카탈로그 조회와 관리자 상품 편집 기능을 구현 기준으로 정리한다.
8
-
9
- ## 2. Scope
10
-
11
- - 포함 범위:
12
- - landing/public 상품 카탈로그 조회와 단일 상품 상세 조회
13
- - admin surface의 상품 생성, 수정, 상태 변경 command
14
- - 제외 범위:
15
- - landing 화면의 정렬, 탭, CTA 같은 UI 상호작용
16
- - 주문 생성이나 재고 선점 같은 타 context orchestration
17
-
18
- ## 3. Actor Summary
19
-
20
- | Actor | Description | Appears In |
21
- | --- | --- | --- |
22
- | `Landing Visitor` | 비로그인 상태로 공개 상품 카탈로그와 상품 상세를 탐색하는 방문자다. | `CAT-F001`, `CAT-F002` |
23
- | `Landing Member` | 로그인된 landing 회원으로 공개 상품을 둘러보고 구매 전 탐색을 수행하는 사용자다. | `CAT-F001`, `CAT-F002` |
24
- | `Web User` | web 서비스에서 주문 생성이나 운영 판단을 위해 상품 정보를 조회하는 내부 사용자다. | `CAT-F001`, `CAT-F002` |
25
- | `Admin Operator` | admin 서비스에서 상품을 등록, 수정, 상태 변경하는 운영 관리자다. | `CAT-F003`, `CAT-F004`, `CAT-F005` |
26
-
27
- ## 4. Bounded Context Summary
28
-
29
- | Item | Value |
30
- | --- | --- |
31
- | Domain Code | `CAT` |
32
- | Bounded Context | Product Catalog |
33
- | Primary Backend Owner | `server/contexts/catalog` |
34
- | Related Context | `auth`, `inventory`, `orders`, `landing` |
35
- | Main Entry Contract | `GET /api/v1/catalog/products`, `GET /api/v1/catalog/products/{product_id}`, `POST /api/v1/catalog/products`, `PUT /api/v1/catalog/products/{product_id}`, `PATCH /api/v1/catalog/products/{product_id}/status` |
36
-
37
- ## 5. Aggregate / Model Snapshot
38
-
39
- | Aggregate / Model | Role |
40
- | --- | --- |
41
- | `ProductRecord` | 상품 원본 저장 모델 |
42
- | `ProductSummary` | 상품 목록 응답 모델 |
43
- | `ProductDetail` | 상품 상세 응답 모델 |
44
- | `CreateProductCommand` | 상품 생성 명령 |
45
- | `UpdateProductCommand` | 상품 수정 명령 |
46
- | `UpdateProductStatusCommand` | 상품 상태 변경 명령 |
47
-
48
- ## 6. Use Case Matrix
49
-
50
- | Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
51
- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
52
- | `CAT-F001` | 상품 카탈로그 목록을 조회한다 | Landing Visitor, Landing Member, Web User | Product Catalog | `ProductSummary`, `ProductRecord` | Query | 상품 bootstrap 데이터가 존재해야 한다 | 공개 가능한 상품 목록을 필터와 검색 조건에 맞게 반환한다 | `status`, `category`, `q` 조건은 모두 현재 카탈로그 집합 안에서 계산한다 |
53
- | `CAT-F002` | 단일 상품 상세를 조회한다 | Landing Visitor, Landing Member, Web User | Product Catalog | `ProductDetail`, `ProductRecord` | Query | 요청한 `product_id`가 저장소에 존재해야 한다 | 상세 페이지 구성을 위한 상품 전체 속성을 반환한다 | 존재하지 않는 `product_id`면 `404 Catalog product not found`를 반환한다 |
54
- | `CAT-F003` | 관리자가 새 상품을 등록한다 | Admin Operator | Product Catalog | `CreateProductCommand`, `ProductDetail`, `ProductRecord` | Command | 관리자 토큰이 유효하고 slug, 이름, 가격, variant 정보가 전달되어야 한다 | 새 상품 레코드가 생성되어 카탈로그 목록에 합류한다 | `slug`는 카탈로그 내에서 유일해야 하며 variant는 최소 1개 이상이어야 한다 |
55
- | `CAT-F004` | 관리자가 상품 속성을 수정한다 | Admin Operator | Product Catalog | `UpdateProductCommand`, `ProductDetail`, `ProductRecord` | Command | 관리자 토큰이 유효하고 요청한 `product_id`가 존재해야 한다 | 상품 속성이 부분 갱신되고 `updated_at`이 갱신된다 | 빈 수정 요청은 `400 No catalog product fields provided`, 중복 slug는 `409`를 반환한다 |
56
- | `CAT-F005` | 관리자가 상품 상태를 변경한다 | Admin Operator | Product Catalog | `UpdateProductStatusCommand`, `ProductDetail`, `ProductRecord` | Command | 관리자 토큰이 유효하고 요청한 `product_id`가 존재해야 한다 | 상품 `status`가 `draft`, `active`, `archived` 중 하나로 전환된다 | 존재하지 않는 `product_id`면 `404 Catalog product not found`를 반환한다 |
57
-
58
- ## 7. Notes
59
-
60
- - `catalog`는 landing/public read surface와 admin write surface를 함께 소유한다.
61
- - 카탈로그의 가격, 이미지, 속성, variant는 모두 product aggregate 내부 속성으로 유지한다.
@@ -1,58 +0,0 @@
1
- # fulfillment feature spec
2
-
3
- - 작성 버전: 1.1.0
4
-
5
- ## 1. Purpose
6
-
7
- `fulfillment` bounded context가 제공하는 모바일 운영 overview와 task board 기능을 구현 기준으로 정리한다.
8
-
9
- ## 2. Scope
10
-
11
- - 포함 범위:
12
- - mobile 서비스의 fulfillment overview, board, note read model
13
- - fulfillment task 상태 전이 command
14
- - 제외 범위:
15
- - route 최적화나 배차 같은 고도화 계획
16
- - fulfillment 외부 context를 직접 갱신하는 orchestration
17
-
18
- ## 3. Actor Summary
19
-
20
- | Actor | Description | Appears In |
21
- | --- | --- | --- |
22
- | `Mobile Operator` | mobile 서비스에서 현장 이행 작업을 수행하며 task 현황을 보고 상태를 갱신하는 운영자다. | `FUL-F001`, `FUL-F002`, `FUL-F003` |
23
-
24
- ## 4. Bounded Context Summary
25
-
26
- | Item | Value |
27
- | --- | --- |
28
- | Domain Code | `FUL` |
29
- | Bounded Context | Fulfillment Operations |
30
- | Primary Backend Owner | `server/contexts/fulfillment` |
31
- | Related Context | `auth`, `orders`, `inventory` |
32
- | Main Entry Contract | `GET /api/v1/fulfillment/overview`, `GET /api/v1/fulfillment/board`, `PATCH /api/v1/fulfillment/tasks/{task_id}/status` |
33
-
34
- ## 5. Aggregate / Model Snapshot
35
-
36
- | Aggregate / Model | Role |
37
- | --- | --- |
38
- | `FulfillmentTaskRecord` | 이행 task 원본 |
39
- | `FulfillmentOverview` | 모바일 dashboard overview 응답 |
40
- | `FulfillmentBoardPayload` | 모바일 task board 응답 |
41
- | `FulfillmentEvent` | timeline 이벤트 모델 |
42
- | `FulfillmentNote` | 운영 note 모델 |
43
- | `FulfillmentTaskStatusTransitionCommand` | task 상태 전이 명령 |
44
- | `FulfillmentTaskStatusTransition` | task 상태 전이 결과 |
45
-
46
- ## 6. Use Case Matrix
47
-
48
- | Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
49
- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
50
- | `FUL-F001` | 이행 overview를 조회한다 | Mobile Operator | Fulfillment Operations | `FulfillmentOverview`, `FulfillmentTaskRecord`, `FulfillmentEvent` | Query | 인증 토큰이 유효하고 task/event bootstrap 데이터가 존재해야 한다 | throughput, stat, timeline, stage load를 반환한다 | `Blocked`와 `Outbound` 지표는 현재 task 상태 집합으로 계산한다 |
51
- | `FUL-F002` | 이행 board와 note 목록을 조회한다 | Mobile Operator | Fulfillment Operations | `FulfillmentBoardPayload`, `FulfillmentTaskRecord`, `FulfillmentNote` | Query | 인증 토큰이 유효하고 task/note bootstrap 데이터가 존재해야 한다 | task board 목록과 note 목록을 함께 반환한다 | board payload는 `tasks`와 `notes` 두 블록을 항상 함께 반환한다 |
52
- | `FUL-F003` | 이행 task 상태를 전환한다 | Mobile Operator | Fulfillment Operations | `FulfillmentTaskStatusTransitionCommand`, `FulfillmentTaskStatusTransition`, `FulfillmentTaskRecord` | Command | 인증 토큰이 유효하고 요청한 `task_id`가 존재해야 한다 | task의 `status`와 선택적 `stage`가 갱신된다 | 존재하지 않는 `task_id`면 `404`를 반환한다 |
53
-
54
- ## 7. Notes
55
-
56
- - `fulfillment`는 mobile 서비스의 canonical backend surface다.
57
- - 출고 이후 배송 추적과 carrier 진행 상태는 별도 `shipping` context가 소유한다.
58
- - timeline과 notes는 별도 bootstrap source를 사용하지만, screen 단위에서는 fulfillment context가 함께 조합해 반환한다.
@@ -1,52 +0,0 @@
1
- # health feature spec
2
-
3
- - 작성 버전: 1.1.0
4
-
5
- ## 1. Purpose
6
-
7
- `health` bounded context가 제공하는 기술 상태 확인 contract를 구현 기준으로 정리한다.
8
-
9
- ## 2. Scope
10
-
11
- - 포함 범위:
12
- - 무인증 liveness/status probe contract
13
- - runtime이 기동 중인지 확인하는 최소 운영 신호
14
- - 제외 범위:
15
- - 알림 전파, auto-recovery, runbook 절차 같은 운영 후속 조치
16
- - business domain readiness나 데이터 정합성 검증
17
-
18
- ## 3. Actor Summary
19
-
20
- | Actor | Description | Appears In |
21
- | --- | --- | --- |
22
- | `CI Runner` | CI 파이프라인에서 서버 기동과 기본 응답 계약을 확인하는 자동 검증 주체다. | `HLT-F001`, `HLT-F002` |
23
- | `Compose Runtime` | compose healthcheck나 container supervisor처럼 주기적으로 프로브를 호출하는 런타임 주체다. | `HLT-F001`, `HLT-F002` |
24
- | `External Monitor` | 외부 uptime/monitoring 시스템에서 서비스 생존 여부를 확인하는 감시 주체다. | `HLT-F001`, `HLT-F002` |
25
-
26
- ## 4. Bounded Context Summary
27
-
28
- | Item | Value |
29
- | --- | --- |
30
- | Domain Code | `HLT` |
31
- | Bounded Context | Technical Health |
32
- | Primary Backend Owner | `server/contexts/health` |
33
- | Related Context | `server/api/http/app.py` |
34
- | Main Entry Contract | `GET /health`, `GET /api/v1/status` |
35
-
36
- ## 5. Aggregate / Model Snapshot
37
-
38
- | Aggregate / Model | Role |
39
- | --- | --- |
40
- | `health_response()` | 루트 프로브 응답 생성 함수 |
41
- | `get_status_payload()` | API prefix 하의 상태 응답 생성 함수 |
42
-
43
- ## 6. Use Case Matrix
44
-
45
- | Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
46
- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
47
- | `HLT-F001` | 루트 health probe를 조회한다 | CI Runner, Compose Runtime, External Monitor | Technical Health | `health_response()` | Query | FastAPI app이 기동 중이어야 한다 | `{"status":"ok"}` 응답을 반환한다 | 인증 없이 호출 가능해야 한다 |
48
- | `HLT-F002` | API status probe를 조회한다 | CI Runner, Compose Runtime, External Monitor | Technical Health | `get_status_payload()` | Query | API router가 정상 mount되어야 한다 | `{"service":"template-server","status":"healthy"}` 응답을 반환한다 | 인증 없이 호출 가능해야 한다 |
49
-
50
- ## 7. Notes
51
-
52
- - `health`는 비즈니스 도메인이 아니라 technical bounded context지만, 운영/검증 contract를 위해 canonical feature spec에 포함한다.
@@ -1,60 +0,0 @@
1
- # inventory feature spec
2
-
3
- - 작성 버전: 1.1.0
4
-
5
- ## 1. Purpose
6
-
7
- `inventory` bounded context가 제공하는 재고 조회와 관리자 재고 조정 기능을 구현 기준으로 정리한다.
8
-
9
- ## 2. Scope
10
-
11
- - 포함 범위:
12
- - SKU/거점 단위 재고 read model과 관리자 재고 mutation command
13
- - 수동 조정, 선점, 해제, 절대값 설정 같은 inventory 내부 상태 변경
14
- - 제외 범위:
15
- - 주문/이행 context가 자동으로 일으키는 재고 orchestration
16
- - 창고 배차, 입고, 출고 작업 계획의 상세 workflow
17
-
18
- ## 3. Actor Summary
19
-
20
- | Actor | Description | Appears In |
21
- | --- | --- | --- |
22
- | `Admin Operator` | admin 서비스에서 재고 현황을 조회하고 조정, 선점, 해제, 재설정 같은 운영 명령을 수행하는 관리자다. | `INV-F001`, `INV-F002`, `INV-F003`, `INV-F004`, `INV-F005`, `INV-F006` |
23
-
24
- ## 4. Bounded Context Summary
25
-
26
- | Item | Value |
27
- | --- | --- |
28
- | Domain Code | `INV` |
29
- | Bounded Context | Inventory Availability |
30
- | Primary Backend Owner | `server/contexts/inventory` |
31
- | Related Context | `auth`, `catalog`, `orders` |
32
- | Main Entry Contract | `GET /api/v1/inventory/levels`, `GET /api/v1/inventory/levels/{sku}/{location_id}`, `POST /api/v1/inventory/levels/{sku}/{location_id}/adjustments`, `POST /api/v1/inventory/levels/{sku}/{location_id}/reservations`, `POST /api/v1/inventory/levels/{sku}/{location_id}/releases`, `PUT /api/v1/inventory/levels/{sku}/{location_id}` |
33
-
34
- ## 5. Aggregate / Model Snapshot
35
-
36
- | Aggregate / Model | Role |
37
- | --- | --- |
38
- | `InventoryLevelRecord` | SKU-거점별 재고 원본 |
39
- | `InventoryLevel` | 재고 조회 응답 모델 |
40
- | `AdjustInventoryCommand` | cycle count 등 수동 증감 명령 |
41
- | `ReserveInventoryCommand` | 주문 선점 명령 |
42
- | `ReleaseInventoryCommand` | 선점 해제 명령 |
43
- | `SetInventoryLevelCommand` | 절대값 설정 명령 |
44
- | `InventoryMutationReceipt` | 재고 조정 결과 응답 |
45
-
46
- ## 6. Use Case Matrix
47
-
48
- | Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
49
- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
50
- | `INV-F001` | 재고 레벨 목록을 조회한다 | Admin Operator | Inventory Availability | `InventoryLevel`, `InventoryLevelRecord` | Query | 관리자 토큰이 유효하고 inventory bootstrap 데이터가 존재해야 한다 | SKU, 상품, 거점, 상태 기준 재고 레벨 목록을 반환한다 | `status`는 `available_to_sell`과 `reorder_point` 계산 결과로 결정된다 |
51
- | `INV-F002` | 단일 SKU/거점 재고 상세를 조회한다 | Admin Operator | Inventory Availability | `InventoryLevel`, `InventoryLevelRecord` | Query | 관리자 토큰이 유효하고 요청한 `sku/location_id` 조합이 존재해야 한다 | 선택한 재고 레벨의 가용 재고와 재주문 여부를 반환한다 | 존재하지 않는 조합이면 `404 Inventory level not found`를 반환한다 |
52
- | `INV-F003` | 재고를 증감 조정한다 | Admin Operator | Inventory Availability | `AdjustInventoryCommand`, `InventoryMutationReceipt`, `InventoryLevelRecord` | Command | 관리자 토큰이 유효하고 요청한 재고 레벨이 존재해야 한다 | `on_hand`가 증감되고 조정 영수증을 반환한다 | delta는 0일 수 없고, 조정 후 `on_hand`는 `reserved`보다 작아질 수 없다 |
53
- | `INV-F004` | 재고를 선점한다 | Admin Operator | Inventory Availability | `ReserveInventoryCommand`, `InventoryMutationReceipt`, `InventoryLevelRecord` | Command | 관리자 토큰이 유효하고 요청한 재고 레벨이 존재해야 한다 | `reserved` 수량이 증가한다 | 선점 수량은 가용 재고를 초과할 수 없다 |
54
- | `INV-F005` | 선점된 재고를 해제한다 | Admin Operator | Inventory Availability | `ReleaseInventoryCommand`, `InventoryMutationReceipt`, `InventoryLevelRecord` | Command | 관리자 토큰이 유효하고 요청한 재고 레벨이 존재해야 한다 | `reserved` 수량이 감소한다 | 해제 수량은 현재 `reserved`를 초과할 수 없다 |
55
- | `INV-F006` | 재고 절대값을 재설정한다 | Admin Operator | Inventory Availability | `SetInventoryLevelCommand`, `InventoryMutationReceipt`, `InventoryLevelRecord` | Command | 관리자 토큰이 유효하고 요청한 재고 레벨이 존재해야 한다 | `on_hand`, `reserved`, `safety_stock`, `reorder_point`가 새 값으로 설정된다 | `reserved`는 `on_hand`보다 클 수 없다 |
56
-
57
- ## 7. Notes
58
-
59
- - inventory는 현재 admin 전용 운영 컨텍스트다.
60
- - order/fulfillment에서 직접 inventory mutation을 일으키는 orchestration은 아직 없고, template baseline에서는 admin command로 먼저 노출한다.
@@ -1,63 +0,0 @@
1
- # order feature spec
2
-
3
- - 작성 버전: 1.1.0
4
-
5
- ## 1. Purpose
6
-
7
- `orders` bounded context가 제공하는 web 주문 현황과 관리자 운영 큐 기능을 구현 기준으로 정리한다.
8
-
9
- ## 2. Scope
10
-
11
- - 포함 범위:
12
- - web 주문 overview/list read model과 주문 생성, 상태 전이 command
13
- - admin 주문 overview/queue read model
14
- - 제외 범위:
15
- - 외부 결제 게이트웨이 정산이나 배송사 연동
16
- - 비동기 이벤트 버스 기반 후속 orchestration
17
-
18
- ## 3. Actor Summary
19
-
20
- | Actor | Description | Appears In |
21
- | --- | --- | --- |
22
- | `Web User` | web 서비스에서 주문 현황을 조회하고 신규 주문 생성이나 주문 상태 갱신을 수행하는 운영 사용자다. | `ORD-F001`, `ORD-F002`, `ORD-F003`, `ORD-F004` |
23
- | `Admin Operator` | admin 서비스에서 주문 KPI와 운영 큐를 모니터링하는 관리자다. | `ORD-F005`, `ORD-F006` |
24
-
25
- ## 4. Bounded Context Summary
26
-
27
- | Item | Value |
28
- | --- | --- |
29
- | Domain Code | `ORD` |
30
- | Bounded Context | Order Operations |
31
- | Primary Backend Owner | `server/contexts/orders` |
32
- | Related Context | `auth`, `catalog`, `fulfillment` |
33
- | Main Entry Contract | `GET /api/v1/orders/overview`, `GET /api/v1/orders`, `POST /api/v1/orders`, `PATCH /api/v1/orders/{order_id}/status`, `GET /api/v1/orders/admin/overview`, `GET /api/v1/orders/admin/queue` |
34
-
35
- ## 5. Aggregate / Model Snapshot
36
-
37
- | Aggregate / Model | Role |
38
- | --- | --- |
39
- | `OrderRecord` | bootstrap 기반 주문 원본 |
40
- | `OrderOverview` | web dashboard 요약 읽기 모델 |
41
- | `OrderSummary` | web orders 목록 읽기 모델 |
42
- | `CreateOrderCommand` | 주문 생성 명령 |
43
- | `UpdateOrderStatusCommand` | 주문 상태 전이 명령 |
44
- | `OrderStatusTransition` | 주문 상태 전이 결과 |
45
- | `AdminOrderOverview` | 관리자 운영 요약 읽기 모델 |
46
- | `AdminQueueItem` | 관리자 거래 큐 읽기 모델 |
47
-
48
- ## 6. Use Case Matrix
49
-
50
- | Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
51
- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
52
- | `ORD-F001` | web 주문 overview를 조회한다 | Web User | Order Operations | `OrderOverview`, `OrderRecord` | Query | 인증 토큰이 유효하고 주문 bootstrap 데이터가 존재해야 한다 | 주문 카드, 최근 활동, 선택 주문 상세를 함께 반환한다 | overview는 최근 활동 3건과 선택 주문 1건을 항상 포함한다 |
53
- | `ORD-F002` | web 주문 목록을 조회한다 | Web User | Order Operations | `OrderSummary`, `OrderRecord` | Query | 인증 토큰이 유효하고 주문 bootstrap 데이터가 존재해야 한다 | 주문 목록을 반환한다 | 목록 행은 `id`, `product_name`, `customer_name`, `status`를 유지한다 |
54
- | `ORD-F003` | 신규 주문을 생성한다 | Web User | Order Operations | `CreateOrderCommand`, `OrderRecord` | Command | 인증 토큰이 유효하고 제품, 고객, 판매자, 금액 정보가 전달되어야 한다 | 새 `OrderRecord`가 생성되어 목록과 overview에 반영된다 | 새 주문은 문자열 ID를 부여받고 `Pending`과 `Queued`를 기본 상태로 사용한다 |
55
- | `ORD-F004` | 주문의 결제/이행 상태를 변경한다 | Web User | Order Operations | `UpdateOrderStatusCommand`, `OrderStatusTransition`, `OrderRecord` | Command | 인증 토큰이 유효하고 요청한 `order_id`가 존재해야 한다 | 주문의 `status`, `fulfillment_status`, `stage`가 변경된다 | 존재하지 않는 `order_id`면 `404`를 반환한다 |
56
- | `ORD-F005` | 관리자용 주문 overview를 조회한다 | Admin Operator | Order Operations | `AdminOrderOverview`, `OrderRecord` | Query | 관리자 토큰이 유효하고 주문 bootstrap 데이터가 존재해야 한다 | 관리자 KPI와 stage 현황을 반환한다 | admin surface는 web surface와 다른 운영형 read model을 사용한다 |
57
- | `ORD-F006` | 관리자용 거래 큐를 조회한다 | Admin Operator | Order Operations | `AdminQueueItem`, `OrderRecord` | Query | 관리자 토큰이 유효하고 주문 bootstrap 데이터가 존재해야 한다 | 주문별 운영 큐 행을 반환한다 | 큐 행은 `order_id`, `product_name`, `customer_name`, `status`, `sla`를 유지한다 |
58
-
59
- ## 7. Notes
60
-
61
- - `orders`는 web surface와 admin surface에 서로 다른 read model을 제공한다.
62
- - 운영 알람 feed는 별도 `alerts` context가 소유하고, `orders`는 주문 자체 read/write 모델만 유지한다.
63
- - template baseline의 주문 상태 전이는 내부 mutation semantics까지만 다루며 외부 결제/이벤트 연동은 포함하지 않는다.
@@ -1,55 +0,0 @@
1
- # shipping feature spec
2
-
3
- - 작성 버전: 1.0.0
4
-
5
- ## 1. Purpose
6
-
7
- `shipping` bounded context가 제공하는 배송 추적 overview와 shipment 상태 전이 기능을 구현 기준으로 정리한다.
8
-
9
- ## 2. Scope
10
-
11
- - 포함 범위:
12
- - mobile/operator surface에서 배송 현황 overview와 shipment 목록 조회
13
- - shipment 상태 전이와 마지막 배송 이벤트 갱신
14
- - 제외 범위:
15
- - 외부 택배사 webhook, 실시간 위치 추적, 고객 알림 발송
16
- - 결제 승인이나 재고 선점 같은 upstream orchestration
17
-
18
- ## 3. Actor Summary
19
-
20
- | Actor | Description | Appears In |
21
- | --- | --- | --- |
22
- | `Mobile Operator` | mobile 서비스에서 출고 이후 배송 상태를 추적하고 shipment 진행 상태를 갱신하는 운영자다. | `SHP-F001`, `SHP-F002`, `SHP-F003` |
23
-
24
- ## 4. Bounded Context Summary
25
-
26
- | Item | Value |
27
- | --- | --- |
28
- | Domain Code | `SHP` |
29
- | Bounded Context | Shipping Operations |
30
- | Primary Backend Owner | `server/contexts/shipping` |
31
- | Related Context | `orders`, `fulfillment` |
32
- | Main Entry Contract | `GET /api/v1/shipping/overview`, `GET /api/v1/shipping/shipments`, `PATCH /api/v1/shipping/shipments/{shipment_id}/status` |
33
-
34
- ## 5. Aggregate / Model Snapshot
35
-
36
- | Aggregate / Model | Role |
37
- | --- | --- |
38
- | `ShipmentRecord` | 배송 원본 저장 모델 |
39
- | `ShippingOverview` | 배송 overview 응답 모델 |
40
- | `ShipmentSummary` | 배송 목록 응답 모델 |
41
- | `UpdateShipmentStatusCommand` | 배송 상태 전이 명령 |
42
- | `ShipmentStatusTransition` | 배송 상태 전이 결과 |
43
-
44
- ## 6. Use Case Matrix
45
-
46
- | Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
47
- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
48
- | `SHP-F001` | 배송 overview를 조회한다 | Mobile Operator | Shipping Operations | `ShippingOverview`, `ShipmentRecord` | Query | 인증 토큰이 유효하고 shipment bootstrap 데이터가 존재해야 한다 | 배송 중, 지연, 오늘 완료 건수와 carrier 현황을 반환한다 | overview 집계는 shipment 원본을 변경하지 않는다 |
49
- | `SHP-F002` | 배송 shipment 목록을 조회한다 | Mobile Operator | Shipping Operations | `ShipmentSummary`, `ShipmentRecord` | Query | 인증 토큰이 유효하고 shipment bootstrap 데이터가 존재해야 한다 | 배송 목록과 최신 이벤트를 반환한다 | 목록 행은 `shipment_id`, `order_id`, `carrier`, `status`, `eta`를 유지한다 |
50
- | `SHP-F003` | 배송 상태를 갱신한다 | Mobile Operator | Shipping Operations | `UpdateShipmentStatusCommand`, `ShipmentStatusTransition`, `ShipmentRecord` | Command | 인증 토큰이 유효하고 요청한 `shipment_id`가 존재해야 한다 | shipment의 `status`, `last_event`, 선택적 `eta`가 갱신된다 | 존재하지 않는 `shipment_id`면 `404`를 반환한다 |
51
-
52
- ## 7. Notes
53
-
54
- - `shipping`은 출고 이후 배송 추적 책임을 `fulfillment`에서 분리해 downstream delivery 상태만 소유한다.
55
- - 고객-facing tracking 경험은 아직 포함하지 않고 operator/mobile surface만 baseline으로 제공한다.
@@ -1,53 +0,0 @@
1
- # support feature spec
2
-
3
- - 작성 버전: 1.1.0
4
-
5
- ## 1. Purpose
6
-
7
- `support` bounded context가 제공하는 관리자 FAQ/support 관리 기능을 구현 기준으로 정리한다.
8
-
9
- ## 2. Scope
10
-
11
- - 포함 범위:
12
- - admin surface에서 FAQ/support 항목 목록 조회
13
- - FAQ 작성과 visibility 변경 command
14
- - 제외 범위:
15
- - end-user 문의 inbox나 대화형 support workflow
16
- - notification, ticket assignment 같은 별도 support operations
17
-
18
- ## 3. Actor Summary
19
-
20
- | Actor | Description | Appears In |
21
- | --- | --- | --- |
22
- | `Admin Operator` | admin 서비스에서 FAQ/support 콘텐츠를 조회하고 등록하거나 공개 상태를 바꾸는 운영 관리자다. | `SUP-F001`, `SUP-F002`, `SUP-F003` |
23
-
24
- ## 4. Bounded Context Summary
25
-
26
- | Item | Value |
27
- | --- | --- |
28
- | Domain Code | `SUP` |
29
- | Bounded Context | Support Content |
30
- | Primary Backend Owner | `server/contexts/support` |
31
- | Related Context | `auth` |
32
- | Main Entry Contract | `GET /api/v1/support/faqs`, `POST /api/v1/support/faqs`, `PATCH /api/v1/support/faqs/{faq_id}/visibility` |
33
-
34
- ## 5. Aggregate / Model Snapshot
35
-
36
- | Aggregate / Model | Role |
37
- | --- | --- |
38
- | `SupportFaq` | FAQ/support 항목 읽기 모델 |
39
- | `SupportFaqRecord` | FAQ 저장/수정 결과 모델 |
40
- | `CreateSupportFaqCommand` | FAQ 작성 명령 |
41
- | `ChangeFaqVisibilityCommand` | FAQ 공개 상태 변경 명령 |
42
-
43
- ## 6. Use Case Matrix
44
-
45
- | Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
46
- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
47
- | `SUP-F001` | FAQ/support 목록을 조회한다 | Admin Operator | Support Content | `SupportFaq`, `SupportFaqRecord` | Query | 관리자 토큰이 유효하고 support bootstrap 데이터가 존재해야 한다 | 질문과 visibility가 포함된 FAQ 목록을 반환한다 | admin support surface는 질문 목록과 visibility를 같은 read model로 유지한다 |
48
- | `SUP-F002` | FAQ 항목을 새로 등록한다 | Admin Operator | Support Content | `CreateSupportFaqCommand`, `SupportFaqRecord` | Command | 관리자 토큰이 유효하고 question, answer가 전달되어야 한다 | 새 FAQ 레코드가 생성되어 목록에 추가된다 | 새 FAQ는 문자열 ID와 `updated_at`을 갖는다 |
49
- | `SUP-F003` | FAQ 노출 상태를 변경한다 | Admin Operator | Support Content | `ChangeFaqVisibilityCommand`, `SupportFaqRecord` | Command | 관리자 토큰이 유효하고 요청한 `faq_id`가 존재해야 한다 | FAQ의 `visibility`가 새 값으로 갱신된다 | 존재하지 않는 `faq_id`면 `404`를 반환한다 |
50
-
51
- ## 7. Notes
52
-
53
- - 현재 `support`는 FAQ 중심 운영 content context이고, create/visibility change만 command surface로 제공한다.
@@ -1,54 +0,0 @@
1
- # user feature spec
2
-
3
- - 작성 버전: 1.1.0
4
-
5
- ## 1. Purpose
6
-
7
- `user` bounded context가 제공하는 사용자 디렉터리 조회와 상태 변경 기능을 구현 기준으로 정리한다.
8
-
9
- ## 2. Scope
10
-
11
- - 포함 범위:
12
- - admin surface에서 사용자 목록/상세 조회
13
- - 사용자 운영 상태 변경 command
14
- - 제외 범위:
15
- - 로그인, 세션 발급, credential 검증
16
- - end-user 자기 프로필 수정 같은 self-service profile workflow
17
-
18
- ## 3. Actor Summary
19
-
20
- | Actor | Description | Appears In |
21
- | --- | --- | --- |
22
- | `Admin Operator` | admin 서비스에서 사용자 디렉터리를 조회하고 운영 상태를 변경하는 관리자다. | `USR-F001`, `USR-F002`, `USR-F003` |
23
-
24
- ## 4. Bounded Context Summary
25
-
26
- | Item | Value |
27
- | --- | --- |
28
- | Domain Code | `USR` |
29
- | Bounded Context | User Directory |
30
- | Primary Backend Owner | `server/contexts/user` |
31
- | Related Context | `auth` |
32
- | Main Entry Contract | `GET /api/v1/users`, `GET /api/v1/users/{user_id}`, `PATCH /api/v1/users/{user_id}/status` |
33
-
34
- ## 5. Aggregate / Model Snapshot
35
-
36
- | Aggregate / Model | Role |
37
- | --- | --- |
38
- | `UserRecord` | profile 저장 모델 |
39
- | `UserSummary` | 사용자 목록 응답 모델 |
40
- | `UserDetail` | 단일 사용자 상세 응답 모델 |
41
- | `UpdateUserStatusCommand` | 사용자 상태 전이 명령 |
42
-
43
- ## 6. Use Case Matrix
44
-
45
- | Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
46
- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
47
- | `USR-F001` | 사용자 summary 목록을 조회한다 | Admin Operator | User Directory | `UserSummary`, `UserRecord` | Query | 관리자 토큰이 유효하고 사용자 bootstrap 데이터가 존재해야 한다 | 사용자 목록을 반환한다 | 목록 행은 `id`, `name`, `email`, `role`, `status`를 유지한다 |
48
- | `USR-F002` | 단일 사용자 상세를 조회한다 | Admin Operator | User Directory | `UserDetail`, `UserRecord` | Query | 관리자 토큰이 유효하고 요청한 `user_id`가 저장소에 존재해야 한다 | timezone과 last login이 포함된 상세를 반환한다 | 존재하지 않는 `user_id`면 `404 User not found`를 반환한다 |
49
- | `USR-F003` | 사용자의 운영 상태를 변경한다 | Admin Operator | User Directory | `UpdateUserStatusCommand`, `UserDetail`, `UserRecord` | Command | 관리자 토큰이 유효하고 요청한 `user_id`가 저장소에 존재해야 한다 | 대상 사용자의 `status`가 새 값으로 갱신된다 | 존재하지 않는 `user_id`면 `404 User not found`를 반환한다 |
50
-
51
- ## 7. Notes
52
-
53
- - `user`는 profile directory context이고 credential hash를 소유하지 않는다.
54
- - 인증 credential은 `auth` context가 별도 bootstrap 저장소로 관리한다.
@@ -1,13 +0,0 @@
1
- # Screen Planning
2
-
3
- - screen code format: `{SERVICE}-S{NNN}`
4
- - canonical service code: `WEB`, `ADM`, `MOB`, `LND`
5
-
6
- - [web_screen_spec.pdf](./web_screen_spec.pdf)
7
- - [admin_screen_spec.pdf](./admin_screen_spec.pdf)
8
- - [mobile_screen_spec.pdf](./mobile_screen_spec.pdf)
9
- - [landing_screen_spec.pdf](./landing_screen_spec.pdf)
10
-
11
- 화면 코드와 기능 설명은 각 PDF 상세 페이지의 우측 테이블을 canonical surface로 사용한다.
12
- build source, capture asset, generator는 `sdd/99_toolchain/01_automation` 아래에 둔다.
13
- `MOB-S003`의 canonical route는 `/fulfillment`이고, landing catalog proof는 `GET /api/v1/catalog/products`를 기준으로 한다.
@@ -1,41 +0,0 @@
1
- # Screen Planning
2
-
3
- ## Naming
4
-
5
- - Folder name: `02_screen`
6
- - Canonical artifact: `{service}_screen_spec.pdf`
7
- - Source-of-truth screen spec files are service based.
8
-
9
- ## Code Rule
10
-
11
- - Screen code format: `{SERVICE}-S{NNN}`
12
- - 각 segment는 고정 길이로 유지한다.
13
-
14
- | Segment | Rule | Example |
15
- | --- | --- | --- |
16
- | `SERVICE` | 3-letter uppercase service code | `WEB`, `ADM`, `MOB`, `LND` |
17
- | `TYPE` | screen 식별자 고정값 | `S` |
18
- | `NNN` | 3-digit sequence | `001`, `002` |
19
-
20
- ## Canonical Output
21
-
22
- - [web_screen_spec.pdf](./web_screen_spec.pdf)
23
- - [admin_screen_spec.pdf](./admin_screen_spec.pdf)
24
- - [mobile_screen_spec.pdf](./mobile_screen_spec.pdf)
25
- - [landing_screen_spec.pdf](./landing_screen_spec.pdf)
26
-
27
- ## Rule
28
-
29
- - screen spec은 서비스 surface 기준 산출물이다.
30
- - route, UI block, CTA, interaction, transition은 screen spec PDF 안에서 관리한다.
31
- - build source, capture asset, generator는 `sdd/99_toolchain/01_automation` 아래에 둔다.
32
- - reusable asset planning 산출물은 `sdd/01_planning/02_screen/assets/` 아래에 둔다.
33
- - data 모델링 상세는 `04_data`에서 다루고, architecture/system boundary는 `03_architecture`에서 다룬다.
34
- - screen spec에서 파생되는 로고/일러스트 등 재사용 자산은 generic asset recipe generator로 재생성 가능해야 한다.
35
-
36
- ## Toolchain
37
-
38
- - generic asset recipe generator (`스펙에셋빌더`): [`spec_asset_builder.py`](../../99_toolchain/01_automation/spec_asset_builder.py)
39
- - compatibility wrapper: [`build_asset_recipes.py`](../../99_toolchain/01_automation/build_asset_recipes.py)
40
- - example recipe manifest: [`asset_recipe_manifest.example.py`](../../99_toolchain/03_templates/asset_recipe_manifest.example.py)
41
- - asset planning root example: [`assets/README.md`](assets/README.md)