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,15 +0,0 @@
1
- provider "openstack" {
2
- auth_url = var.auth_url
3
- region = var.region
4
- endpoint_type = var.interface
5
- insecure = var.insecure
6
-
7
- user_name = var.auth_type == "password" ? var.username : null
8
- password = var.auth_type == "password" ? var.password : null
9
- tenant_name = var.auth_type == "password" ? var.project_name : null
10
- user_domain_name = var.auth_type == "password" ? var.user_domain_name : null
11
- project_domain_name = var.auth_type == "password" ? var.project_domain_name : null
12
-
13
- application_credential_id = var.auth_type == "application_credential" ? var.application_credential_id : null
14
- application_credential_secret = var.auth_type == "application_credential" ? var.application_credential_secret : null
15
- }
@@ -1,54 +0,0 @@
1
- auth_url = "https://keystone.example.com:5000/v3"
2
- region = "RegionOne"
3
- interface = "public"
4
- auth_type = "password"
5
- username = "devops"
6
- password = "change-me"
7
- project_name = "service-dev"
8
- user_domain_name = "Default"
9
- project_domain_name = "Default"
10
- insecure = false
11
-
12
- create_network = true
13
- network_name = "templates-dev-net"
14
- subnet_name = "templates-dev-subnet"
15
- subnet_cidr = "10.250.10.0/24"
16
- create_router = true
17
- router_name = "templates-dev-router"
18
- external_network_id = "public"
19
-
20
- service_allowed_cidrs = ["0.0.0.0/0"]
21
- ssh_allowed_cidrs = ["203.0.113.10/32"]
22
-
23
- name = "templates-dev"
24
- image_name = "ubuntu-22.04"
25
- flavor_name = "m1.medium"
26
- keypair_name = "devops"
27
- assign_floating_ip = true
28
- floating_ip_pool = "public"
29
- repo_clone_url = "git@github.com:your-org/templates.git"
30
- repo_ref = "main"
31
- deploy_compose_on_boot = true
32
- compose_env_content = <<-ENV
33
- DEV_POSTGRES_DB=template
34
- DEV_POSTGRES_USER=template
35
- DEV_POSTGRES_PASSWORD=template
36
- DEV_POSTGRES_PORT=15432
37
- DEV_SERVER_HTTP_PORT=18000
38
- DEV_SERVER_APP_NAME=Template Server DEV
39
- DEV_SERVER_ENVIRONMENT=development
40
- DEV_SERVER_API_PREFIX=/api/v1
41
- DEV_SERVER_DATABASE_BACKEND=postgres
42
- DEV_SERVER_POSTGRES_URL=postgresql+psycopg://template:template@postgres:5432/template
43
- DEV_SERVER_JWT_SECRET=change-me
44
- DEV_SERVER_ACCESS_TOKEN_TTL_MINUTES=120
45
- DEV_SERVER_CORS_ORIGINS=https://dev-landing.example.com,https://dev-web.example.com,https://dev-mobile.example.com,https://dev-admin.example.com
46
- DEV_CLIENT_LANDING_PORT=13000
47
- DEV_CLIENT_WEB_PORT=13001
48
- DEV_CLIENT_MOBILE_PORT=13002
49
- DEV_CLIENT_ADMIN_PORT=14000
50
- DEV_CLIENT_LANDING_VITE_API_BASE_URL=https://dev-api.example.com/api/v1
51
- DEV_CLIENT_WEB_VITE_API_BASE_URL=https://dev-api.example.com/api/v1
52
- DEV_CLIENT_MOBILE_VITE_API_BASE_URL=https://dev-api.example.com/api/v1
53
- DEV_CLIENT_ADMIN_VITE_API_BASE_URL=https://dev-api.example.com/api/v1
54
- ENV
@@ -1,210 +0,0 @@
1
- variable "auth_url" {
2
- description = "OpenStack Keystone auth URL"
3
- type = string
4
- }
5
-
6
- variable "region" {
7
- description = "OpenStack region name"
8
- type = string
9
- default = "RegionOne"
10
- }
11
-
12
- variable "interface" {
13
- description = "OpenStack endpoint interface"
14
- type = string
15
- default = "public"
16
- }
17
-
18
- variable "auth_type" {
19
- description = "OpenStack auth type (password or application_credential)"
20
- type = string
21
- default = "password"
22
- }
23
-
24
- variable "username" {
25
- description = "OpenStack username"
26
- type = string
27
- default = ""
28
- }
29
-
30
- variable "password" {
31
- description = "OpenStack password"
32
- type = string
33
- default = ""
34
- sensitive = true
35
- }
36
-
37
- variable "project_name" {
38
- description = "OpenStack project name"
39
- type = string
40
- default = ""
41
- }
42
-
43
- variable "user_domain_name" {
44
- description = "OpenStack user domain"
45
- type = string
46
- default = "Default"
47
- }
48
-
49
- variable "project_domain_name" {
50
- description = "OpenStack project domain"
51
- type = string
52
- default = "Default"
53
- }
54
-
55
- variable "application_credential_id" {
56
- description = "OpenStack application credential id"
57
- type = string
58
- default = ""
59
- }
60
-
61
- variable "application_credential_secret" {
62
- description = "OpenStack application credential secret"
63
- type = string
64
- default = ""
65
- sensitive = true
66
- }
67
-
68
- variable "insecure" {
69
- description = "Disable TLS certificate validation"
70
- type = bool
71
- default = false
72
- }
73
-
74
- variable "availability_zone" {
75
- description = "Optional availability zone for the DEV(개발계) host"
76
- type = string
77
- default = ""
78
- }
79
-
80
- variable "create_network" {
81
- description = "Create a dedicated DEV(개발계) network and subnet"
82
- type = bool
83
- default = true
84
- }
85
-
86
- variable "network_name" {
87
- description = "DEV(개발계) network name"
88
- type = string
89
- default = "templates-dev-net"
90
- }
91
-
92
- variable "subnet_name" {
93
- description = "DEV(개발계) subnet name"
94
- type = string
95
- default = "templates-dev-subnet"
96
- }
97
-
98
- variable "subnet_cidr" {
99
- description = "DEV(개발계) subnet CIDR"
100
- type = string
101
- default = "10.250.10.0/24"
102
- }
103
-
104
- variable "create_router" {
105
- description = "Create a router and attach the created subnet to the external network"
106
- type = bool
107
- default = true
108
- }
109
-
110
- variable "router_name" {
111
- description = "DEV(개발계) router name"
112
- type = string
113
- default = "templates-dev-router"
114
- }
115
-
116
- variable "external_network_id" {
117
- description = "External network id used by the router gateway"
118
- type = string
119
- default = ""
120
- }
121
-
122
- variable "network_id" {
123
- description = "Existing network id to reuse when create_network=false"
124
- type = string
125
- default = ""
126
- }
127
-
128
- variable "subnet_id" {
129
- description = "Existing subnet id to reuse when create_network=false"
130
- type = string
131
- default = ""
132
- }
133
-
134
- variable "service_allowed_cidrs" {
135
- description = "CIDR list allowed to reach published application ports"
136
- type = list(string)
137
- default = ["0.0.0.0/0"]
138
- }
139
-
140
- variable "ssh_allowed_cidrs" {
141
- description = "CIDR list allowed to reach SSH on the DEV(개발계) host"
142
- type = list(string)
143
- default = ["0.0.0.0/0"]
144
- }
145
-
146
- variable "name" {
147
- description = "DEV(개발계) host name"
148
- type = string
149
- default = "templates-dev"
150
- }
151
-
152
- variable "image_name" {
153
- description = "OpenStack image name"
154
- type = string
155
- default = "ubuntu-22.04"
156
- }
157
-
158
- variable "flavor_name" {
159
- description = "OpenStack flavor name"
160
- type = string
161
- default = "m1.medium"
162
- }
163
-
164
- variable "keypair_name" {
165
- description = "OpenStack keypair name"
166
- type = string
167
- default = ""
168
- }
169
-
170
- variable "assign_floating_ip" {
171
- description = "Allocate and associate a floating IP"
172
- type = bool
173
- default = false
174
- }
175
-
176
- variable "floating_ip_pool" {
177
- description = "Floating IP pool name"
178
- type = string
179
- default = ""
180
- }
181
-
182
- variable "exposed_tcp_ports" {
183
- description = "TCP ports exposed by the DEV(개발계) stack"
184
- type = list(number)
185
- default = [18000, 13000, 13001, 13002, 14000]
186
- }
187
-
188
- variable "repo_clone_url" {
189
- description = "Optional repository clone URL for boot-time deployment"
190
- type = string
191
- default = ""
192
- }
193
-
194
- variable "repo_ref" {
195
- description = "Git ref used for boot-time deployment"
196
- type = string
197
- default = "main"
198
- }
199
-
200
- variable "compose_env_content" {
201
- description = "Full .env.dev content used for compose boot deployment"
202
- type = string
203
- default = ""
204
- }
205
-
206
- variable "deploy_compose_on_boot" {
207
- description = "Clone the repo and run docker compose on first boot"
208
- type = bool
209
- default = false
210
- }
@@ -1,10 +0,0 @@
1
- terraform {
2
- required_version = ">= 1.6.0"
3
-
4
- required_providers {
5
- openstack = {
6
- source = "terraform-provider-openstack/openstack"
7
- version = "~> 2.1"
8
- }
9
- }
10
- }
@@ -1,143 +0,0 @@
1
- locals {
2
- effective_network_id = trimspace(var.network_id) != "" ? trimspace(var.network_id) : (
3
- var.create_network ? openstack_networking_network_v2.environment[0].id : ""
4
- )
5
-
6
- effective_subnet_id = trimspace(var.subnet_id) != "" ? trimspace(var.subnet_id) : (
7
- var.create_network ? openstack_networking_subnet_v2.environment[0].id : ""
8
- )
9
-
10
- service_ingress_rules = flatten([
11
- for port in var.exposed_tcp_ports : [
12
- for cidr in var.service_allowed_cidrs : {
13
- key = "${port}-${replace(cidr, "/", "_")}"
14
- port = port
15
- cidr = cidr
16
- }
17
- ]
18
- ])
19
-
20
- ssh_ingress_rules = [
21
- for cidr in var.ssh_allowed_cidrs : {
22
- key = replace(cidr, "/", "_")
23
- cidr = cidr
24
- }
25
- ]
26
- }
27
-
28
- resource "openstack_networking_network_v2" "environment" {
29
- count = var.create_network ? 1 : 0
30
-
31
- name = var.network_name
32
- admin_state_up = true
33
- }
34
-
35
- resource "openstack_networking_subnet_v2" "environment" {
36
- count = var.create_network ? 1 : 0
37
-
38
- name = var.subnet_name
39
- network_id = openstack_networking_network_v2.environment[0].id
40
- cidr = var.subnet_cidr
41
- ip_version = 4
42
- }
43
-
44
- resource "openstack_networking_router_v2" "environment" {
45
- count = var.create_router && var.create_network && trimspace(var.external_network_id) != "" ? 1 : 0
46
-
47
- name = var.router_name
48
- admin_state_up = true
49
- external_network_id = var.external_network_id
50
- }
51
-
52
- resource "openstack_networking_router_interface_v2" "environment" {
53
- count = length(openstack_networking_router_v2.environment) > 0 ? 1 : 0
54
-
55
- router_id = openstack_networking_router_v2.environment[0].id
56
- subnet_id = openstack_networking_subnet_v2.environment[0].id
57
- }
58
-
59
- data "openstack_images_image_v2" "host" {
60
- name = var.image_name
61
- }
62
-
63
- data "openstack_compute_flavor_v2" "host" {
64
- name = var.flavor_name
65
- }
66
-
67
- resource "openstack_networking_secgroup_v2" "host" {
68
- name = "${var.name}-secgroup"
69
- description = "Security group for ${var.name} docker host"
70
- }
71
-
72
- resource "openstack_networking_secgroup_rule_v2" "ssh" {
73
- for_each = { for rule in local.ssh_ingress_rules : rule.key => rule }
74
-
75
- direction = "ingress"
76
- ethertype = "IPv4"
77
- protocol = "tcp"
78
- port_range_min = 22
79
- port_range_max = 22
80
- remote_ip_prefix = each.value.cidr
81
- security_group_id = openstack_networking_secgroup_v2.host.id
82
- }
83
-
84
- resource "openstack_networking_secgroup_rule_v2" "service" {
85
- for_each = { for rule in local.service_ingress_rules : rule.key => rule }
86
-
87
- direction = "ingress"
88
- ethertype = "IPv4"
89
- protocol = "tcp"
90
- port_range_min = each.value.port
91
- port_range_max = each.value.port
92
- remote_ip_prefix = each.value.cidr
93
- security_group_id = openstack_networking_secgroup_v2.host.id
94
- }
95
-
96
- resource "openstack_networking_port_v2" "host" {
97
- name = "${var.name}-port"
98
- network_id = local.effective_network_id
99
- admin_state_up = true
100
- security_group_ids = [openstack_networking_secgroup_v2.host.id]
101
-
102
- dynamic "fixed_ip" {
103
- for_each = local.effective_subnet_id != "" ? [local.effective_subnet_id] : []
104
- content {
105
- subnet_id = fixed_ip.value
106
- }
107
- }
108
- }
109
-
110
- resource "openstack_compute_instance_v2" "host" {
111
- name = var.name
112
- image_id = data.openstack_images_image_v2.host.id
113
- flavor_id = data.openstack_compute_flavor_v2.host.id
114
- key_pair = trimspace(var.keypair_name) != "" ? var.keypair_name : null
115
- availability_zone = trimspace(var.availability_zone) != "" ? var.availability_zone : null
116
- config_drive = true
117
- user_data = templatefile("${path.module}/templates/docker-host-user-data.sh.tftpl", {
118
- environment_name = var.name
119
- repo_clone_url = var.repo_clone_url
120
- repo_ref = var.repo_ref
121
- compose_file = var.compose_file
122
- compose_env_filename = var.compose_env_filename
123
- compose_env_content_base64 = base64encode(var.compose_env_content)
124
- deploy_compose_on_boot = var.deploy_compose_on_boot ? "true" : "false"
125
- })
126
-
127
- network {
128
- port = openstack_networking_port_v2.host.id
129
- }
130
- }
131
-
132
- resource "openstack_networking_floatingip_v2" "host" {
133
- count = var.assign_floating_ip && trimspace(var.floating_ip_pool) != "" ? 1 : 0
134
-
135
- pool = var.floating_ip_pool
136
- }
137
-
138
- resource "openstack_networking_floatingip_associate_v2" "host" {
139
- count = length(openstack_networking_floatingip_v2.host) > 0 ? 1 : 0
140
-
141
- floating_ip = openstack_networking_floatingip_v2.host[0].address
142
- port_id = openstack_networking_port_v2.host.id
143
- }
@@ -1,25 +0,0 @@
1
- output "network_id" {
2
- description = "Effective network id used by the environment host"
3
- value = local.effective_network_id
4
- }
5
-
6
- output "subnet_id" {
7
- description = "Effective subnet id used by the environment host"
8
- value = local.effective_subnet_id
9
- }
10
-
11
- output "router_id" {
12
- description = "Created router id when create_router=true"
13
- value = length(openstack_networking_router_v2.environment) > 0 ? openstack_networking_router_v2.environment[0].id : ""
14
- }
15
-
16
- output "instance" {
17
- description = "Environment host summary"
18
- value = {
19
- id = openstack_compute_instance_v2.host.id
20
- name = openstack_compute_instance_v2.host.name
21
- fixed_ip = try(openstack_compute_instance_v2.host.network[0].fixed_ip_v4, "")
22
- floating_ip = try(openstack_networking_floatingip_v2.host[0].address, "")
23
- compose_file = var.compose_file
24
- }
25
- }
@@ -1,40 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euxo pipefail
3
-
4
- export DEBIAN_FRONTEND=noninteractive
5
-
6
- apt-get update
7
- apt-get install -y ca-certificates curl git
8
-
9
- install -m 0755 -d /etc/apt/keyrings
10
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
11
- chmod a+r /etc/apt/keyrings/docker.asc
12
-
13
- . /etc/os-release
14
- echo \
15
- "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
16
- $${VERSION_CODENAME} stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
17
-
18
- apt-get update
19
- apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
20
- systemctl enable docker
21
- systemctl start docker
22
-
23
- %{ if repo_clone_url != "" && deploy_compose_on_boot == "true" ~}
24
- mkdir -p /opt/templates
25
- cd /opt/templates
26
-
27
- if [ ! -d repo ]; then
28
- git clone "${repo_clone_url}" repo
29
- fi
30
-
31
- cd repo
32
- git fetch --all --tags
33
- git checkout "${repo_ref}"
34
-
35
- cat <<'ENVEOF' > "${compose_env_filename}"
36
- ${base64decode(compose_env_content_base64)}
37
- ENVEOF
38
-
39
- docker compose --env-file "${compose_env_filename}" -f "${compose_file}" up -d --build
40
- %{ endif ~}
@@ -1,145 +0,0 @@
1
- variable "availability_zone" {
2
- description = "Optional availability zone for the environment host"
3
- type = string
4
- default = ""
5
- }
6
-
7
- variable "create_network" {
8
- description = "Create a dedicated network and subnet for this environment"
9
- type = bool
10
- default = false
11
- }
12
-
13
- variable "network_name" {
14
- description = "Environment network name"
15
- type = string
16
- }
17
-
18
- variable "subnet_name" {
19
- description = "Environment subnet name"
20
- type = string
21
- }
22
-
23
- variable "subnet_cidr" {
24
- description = "Environment subnet CIDR"
25
- type = string
26
- }
27
-
28
- variable "create_router" {
29
- description = "Create a router and attach the created subnet to the external network"
30
- type = bool
31
- default = false
32
- }
33
-
34
- variable "router_name" {
35
- description = "Environment router name"
36
- type = string
37
- }
38
-
39
- variable "external_network_id" {
40
- description = "External network id used by the router gateway"
41
- type = string
42
- default = ""
43
- }
44
-
45
- variable "network_id" {
46
- description = "Existing network id to reuse when create_network=false"
47
- type = string
48
- default = ""
49
-
50
- validation {
51
- condition = var.create_network || trimspace(var.network_id) != ""
52
- error_message = "network_id must be set when create_network=false."
53
- }
54
- }
55
-
56
- variable "subnet_id" {
57
- description = "Existing subnet id to reuse when create_network=false"
58
- type = string
59
- default = ""
60
- }
61
-
62
- variable "service_allowed_cidrs" {
63
- description = "CIDR list allowed to reach published application ports"
64
- type = list(string)
65
- default = ["0.0.0.0/0"]
66
- }
67
-
68
- variable "ssh_allowed_cidrs" {
69
- description = "CIDR list allowed to reach SSH on the environment host"
70
- type = list(string)
71
- default = ["0.0.0.0/0"]
72
- }
73
-
74
- variable "name" {
75
- description = "Environment host name"
76
- type = string
77
- }
78
-
79
- variable "image_name" {
80
- description = "OpenStack image name"
81
- type = string
82
- }
83
-
84
- variable "flavor_name" {
85
- description = "OpenStack flavor name"
86
- type = string
87
- }
88
-
89
- variable "keypair_name" {
90
- description = "OpenStack keypair name"
91
- type = string
92
- default = ""
93
- }
94
-
95
- variable "assign_floating_ip" {
96
- description = "Allocate and associate a floating IP"
97
- type = bool
98
- default = false
99
- }
100
-
101
- variable "floating_ip_pool" {
102
- description = "Floating IP pool name"
103
- type = string
104
- default = ""
105
- }
106
-
107
- variable "exposed_tcp_ports" {
108
- description = "TCP ports exposed by the environment stack"
109
- type = list(number)
110
- default = []
111
- }
112
-
113
- variable "repo_clone_url" {
114
- description = "Optional repository clone URL for boot-time deployment"
115
- type = string
116
- default = ""
117
- }
118
-
119
- variable "repo_ref" {
120
- description = "Git ref used for boot-time deployment"
121
- type = string
122
- default = "main"
123
- }
124
-
125
- variable "compose_file" {
126
- description = "Compose file path relative to the cloned repo"
127
- type = string
128
- }
129
-
130
- variable "compose_env_filename" {
131
- description = "Compose env file name written on the host"
132
- type = string
133
- }
134
-
135
- variable "compose_env_content" {
136
- description = "Full env file content used for compose boot deployment"
137
- type = string
138
- default = ""
139
- }
140
-
141
- variable "deploy_compose_on_boot" {
142
- description = "Clone the repo and run docker compose on first boot"
143
- type = bool
144
- default = false
145
- }
@@ -1,7 +0,0 @@
1
- terraform {
2
- required_providers {
3
- openstack = {
4
- source = "terraform-provider-openstack/openstack"
5
- }
6
- }
7
- }
@@ -1,24 +0,0 @@
1
- # This file is maintained automatically by "terraform init".
2
- # Manual edits may be lost in future updates.
3
-
4
- provider "registry.terraform.io/terraform-provider-openstack/openstack" {
5
- version = "2.1.0"
6
- constraints = "~> 2.1"
7
- hashes = [
8
- "h1:2TcmfEzBOGQPALErrXTaL6v+k/WAL40adao4izRYmdw=",
9
- "zh:113661750398bf21c8fe36aade9fb6f5eb82b5bcd3bcd30bd37ac805d83398f4",
10
- "zh:1b3c26347b9cd61e413ee93c2f422cc3278a77f55fd3516eaabb3e2a85f65281",
11
- "zh:1b751bbf1e4152829a643b532fd3f5967a2e89a41fac381257e0b41665be3306",
12
- "zh:1b967bbfd9b344419c0e0df0c3a15fcbd731e91f19a18955a55aace8d9ec039a",
13
- "zh:1bc0fc7c0a21e568db043b654501ce668ba19bf7628d37a7d2aaa512fd6e5aeb",
14
- "zh:425cbf61757d4b503e7bf0f409ea59835ca3afbd2432d56ad552c2e5d234a572",
15
- "zh:67d4f059cb4d73bf6c060313ec32962c4e5bd8dc7be2542a6f2098ab32575cd9",
16
- "zh:7fe841ac5b68a4f52fb3cf45070828f3845de44746679d434e4349f3c23e3ef2",
17
- "zh:ac1ed4c6ef0b6a3410568a05d3f9933d184497f065988503c43da0b2f0786ab2",
18
- "zh:c5c0d14c86fabd9ab6a5d555e6a8d511942665fb5fa948dd452b0d1934068344",
19
- "zh:c9ae5c210192275185d6823566a9421983e8e64c2665a4cae00b92dd0706bd19",
20
- "zh:ee9865ccc053e7f345e532654fb628d1cf1e81cd2e929643c1691bebffcf7b98",
21
- "zh:f3416d2f666095e740522c4964e436470bb9ec17bd53aaae8169ad93297d07bd",
22
- "zh:fbca85457dd49e17168989d64f7cfc4a519d55ef4e00e89cea2859e87ad87f83",
23
- ]
24
- }
@@ -1,18 +0,0 @@
1
- # OpenStack PROD
2
-
3
- PROD 전용 Terraform root다.
4
-
5
- 사용:
6
-
7
- ```bash
8
- cd infra/terraform/openstack/prod
9
- cp terraform.tfvars.example terraform.tfvars
10
- terraform init
11
- terraform validate
12
- terraform plan
13
- ```
14
-
15
- 메모:
16
-
17
- - 기본 compose 파일은 `infra/compose/prod.yml`이다.
18
- - cloud-init 자동 기동을 쓰려면 `compose_env_content`에 `infra/compose/.env.prod` 전체를 넣는다.