agentic-dev 0.2.2 → 0.2.4

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 (165) hide show
  1. package/.claude/CLAUDE.md +1 -1
  2. package/.claude/skills/sdd/SKILL.md +178 -7
  3. package/.claude/skills/sdd/agents/openai.yaml +4 -0
  4. package/.claude/skills/sdd/references/section-map.md +67 -0
  5. package/.env.example +2 -2
  6. package/README.md +5 -5
  7. package/client/{platform → web}/Dockerfile +3 -3
  8. package/client/web/Dockerfile.dev +18 -0
  9. package/client/{platform → web}/README.md +3 -3
  10. package/client/{platform → web}/index.html +1 -1
  11. package/client/{platform → web}/package.json +7 -7
  12. package/client/{platform/scripts/ui-parity-platform-adapter.mjs → web/scripts/ui-parity-web-adapter.mjs} +7 -7
  13. package/client/{platform → web}/src/auth/AuthProvider.tsx +1 -1
  14. package/compose.yml +6 -6
  15. package/infra/compose/.env.dev.example +3 -3
  16. package/infra/compose/.env.prod.example +3 -3
  17. package/infra/compose/README.md +1 -1
  18. package/infra/compose/dev.yml +5 -5
  19. package/infra/compose/prod.yml +6 -6
  20. package/infra/terraform/openstack/dev/terraform.tfvars.example +3 -3
  21. package/infra/terraform/openstack/prod/terraform.tfvars.example +3 -3
  22. package/lib/scaffold.mjs +7 -7
  23. package/package.json +2 -2
  24. package/scripts/dev/audit_sdd_build_ast.py +9 -9
  25. package/sdd/01_planning/01_feature/auth_feature_spec.md +2 -2
  26. package/sdd/01_planning/01_feature/catalog_feature_spec.md +3 -3
  27. package/sdd/01_planning/01_feature/order_feature_spec.md +11 -11
  28. package/sdd/01_planning/02_screen/INDEX.md +2 -2
  29. package/sdd/01_planning/02_screen/README.md +2 -2
  30. package/sdd/01_planning/03_architecture/templates_system_architecture.md +3 -3
  31. package/sdd/01_planning/05_api/templates_api_contract.md +3 -3
  32. package/sdd/01_planning/06_iac/templates_runtime_and_cicd_baseline.md +1 -1
  33. package/sdd/01_planning/07_integration/templates_frontend_api_integration.md +3 -3
  34. package/sdd/01_planning/10_test/templates_test_strategy.md +2 -2
  35. package/sdd/01_planning/INDEX.md +1 -1
  36. package/sdd/02_plan/02_screen/INDEX.md +1 -1
  37. package/sdd/02_plan/02_screen/README.md +1 -1
  38. package/sdd/02_plan/03_architecture/build_ast_runtime_tree_governance.md +1 -1
  39. package/sdd/02_plan/03_architecture/repository_governance.md +1 -1
  40. package/sdd/02_plan/07_integration/frontend_live_integration.md +3 -3
  41. package/sdd/02_plan/10_test/templates/{ui_parity_platform_contract.template.yaml → ui_parity_web_contract.template.yaml} +1 -1
  42. package/sdd/03_build/01_feature/domain/account_and_access.md +1 -1
  43. package/sdd/03_build/01_feature/domain/catalog_and_inventory.md +1 -1
  44. package/sdd/03_build/01_feature/domain/ordering_and_fulfillment.md +1 -1
  45. package/sdd/03_build/01_feature/service/README.md +1 -1
  46. package/sdd/03_build/01_feature/service/{platform_surface.md → web_surface.md} +3 -3
  47. package/sdd/03_build/02_screen/README.md +1 -1
  48. package/sdd/03_build/02_screen/web/README.md +5 -0
  49. package/sdd/03_build/06_iac/template_runtime_delivery.md +1 -1
  50. package/sdd/03_build/07_integration/frontend_live_integration.md +1 -1
  51. package/sdd/04_verify/01_feature/service_verification.md +2 -2
  52. package/sdd/04_verify/02_screen/web/README.md +4 -0
  53. package/sdd/04_verify/06_iac/template_runtime_delivery.md +3 -3
  54. package/sdd/99_toolchain/01_automation/agentic-dev/assets/repo-contract.template.json +11 -11
  55. package/sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json +13 -13
  56. package/sdd/99_toolchain/01_automation/agentic-parity-harness-design.md +5 -5
  57. package/sdd/99_toolchain/01_automation/capture_screen_assets.mjs +4 -4
  58. package/sdd/99_toolchain/01_automation/harness-layout.md +2 -2
  59. package/sdd/99_toolchain/01_automation/parity-execution-tooling-design.md +5 -5
  60. package/sdd/99_toolchain/01_automation/screen_spec_manifest.py +17 -17
  61. package/sdd/99_toolchain/01_automation/ui-parity/README.md +10 -10
  62. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-artifact-layout.md +1 -1
  63. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-route-gap-interface.md +2 -2
  64. package/sdd/99_toolchain/03_templates/playwright_exactness_manifest.example.py +1 -1
  65. package/server/data/README.md +1 -1
  66. package/.claude/skills/commit/SKILL.md +0 -37
  67. package/.claude/skills/dev-browser/SKILL.md +0 -30
  68. package/.claude/skills/otro/SKILL.md +0 -43
  69. package/.claude/skills/planning-with-files/SKILL.md +0 -37
  70. package/.claude/skills/prd/SKILL.md +0 -27
  71. package/.claude/skills/ralph-loop/SKILL.md +0 -42
  72. package/.claude/skills/sdd-dev/SKILL.md +0 -71
  73. package/.claude/skills/sdd-development/SKILL.md +0 -13
  74. package/.codex/skills/agents/openai.yaml +0 -4
  75. package/.codex/skills/commit/SKILL.md +0 -219
  76. package/.codex/skills/commit/references/commit_examples.md +0 -292
  77. package/.codex/skills/dev-browser/SKILL.md +0 -211
  78. package/.codex/skills/dev-browser/bun.lock +0 -443
  79. package/.codex/skills/dev-browser/package-lock.json +0 -2988
  80. package/.codex/skills/dev-browser/package.json +0 -31
  81. package/.codex/skills/dev-browser/references/scraping.md +0 -155
  82. package/.codex/skills/dev-browser/scripts/start-relay.ts +0 -32
  83. package/.codex/skills/dev-browser/scripts/start-server.ts +0 -117
  84. package/.codex/skills/dev-browser/server.sh +0 -24
  85. package/.codex/skills/dev-browser/src/client.ts +0 -474
  86. package/.codex/skills/dev-browser/src/index.ts +0 -287
  87. package/.codex/skills/dev-browser/src/relay.ts +0 -731
  88. package/.codex/skills/dev-browser/src/snapshot/__tests__/snapshot.test.ts +0 -223
  89. package/.codex/skills/dev-browser/src/snapshot/browser-script.ts +0 -877
  90. package/.codex/skills/dev-browser/src/snapshot/index.ts +0 -14
  91. package/.codex/skills/dev-browser/src/snapshot/inject.ts +0 -13
  92. package/.codex/skills/dev-browser/src/types.ts +0 -34
  93. package/.codex/skills/dev-browser/tsconfig.json +0 -36
  94. package/.codex/skills/dev-browser/vitest.config.ts +0 -12
  95. package/.codex/skills/otro/SKILL.md +0 -74
  96. package/.codex/skills/otro/agents/openai.yaml +0 -4
  97. package/.codex/skills/otro/references/agent-prompts.md +0 -61
  98. package/.codex/skills/otro/references/contracts.md +0 -146
  99. package/.codex/skills/otro/references/orchestration-loop.md +0 -51
  100. package/.codex/skills/otro/references/runtime.md +0 -79
  101. package/.codex/skills/otro/runs/README.md +0 -11
  102. package/.codex/skills/otro/schemas/step_plan.schema.json +0 -289
  103. package/.codex/skills/otro/schemas/task_result.schema.json +0 -142
  104. package/.codex/skills/otro/schemas/wave_plan.schema.json +0 -4
  105. package/.codex/skills/otro/scripts/README.md +0 -38
  106. package/.codex/skills/otro/scripts/bump_validation_header.py +0 -179
  107. package/.codex/skills/otro/scripts/check_validation_header.py +0 -84
  108. package/.codex/skills/otro/scripts/common.py +0 -303
  109. package/.codex/skills/otro/scripts/init_run.sh +0 -68
  110. package/.codex/skills/otro/scripts/plan_loop.py +0 -8
  111. package/.codex/skills/otro/scripts/plan_step.py +0 -367
  112. package/.codex/skills/otro/scripts/plan_wave.py +0 -8
  113. package/.codex/skills/otro/scripts/reconcile_loop.py +0 -8
  114. package/.codex/skills/otro/scripts/reconcile_step.py +0 -37
  115. package/.codex/skills/otro/scripts/reconcile_wave.py +0 -8
  116. package/.codex/skills/otro/scripts/run_loop.py +0 -300
  117. package/.codex/skills/otro/scripts/run_loop_step.py +0 -8
  118. package/.codex/skills/otro/scripts/run_step.py +0 -246
  119. package/.codex/skills/otro/scripts/run_wave.py +0 -8
  120. package/.codex/skills/otro/validation/validation.md +0 -15
  121. package/.codex/skills/planning-with-files/SKILL.md +0 -42
  122. package/.codex/skills/planning-with-files/agents/openai.yaml +0 -4
  123. package/.codex/skills/planning-with-files/assets/plan-template.md +0 -37
  124. package/.codex/skills/planning-with-files/references/plan-rules.md +0 -35
  125. package/.codex/skills/planning-with-files/scripts/new_plan.sh +0 -65
  126. package/.codex/skills/prd/SKILL.md +0 -235
  127. package/.codex/skills/ralph-loop/SKILL.md +0 -46
  128. package/.codex/skills/ralph-loop/agents/openai.yaml +0 -4
  129. package/.codex/skills/ralph-loop/references/failure-triage.md +0 -32
  130. package/.codex/skills/ralph-loop/scripts/loop_until_success.sh +0 -97
  131. package/client/platform/Dockerfile.dev +0 -18
  132. package/sdd/03_build/02_screen/platform/README.md +0 -5
  133. package/sdd/04_verify/02_screen/platform/README.md +0 -4
  134. package/sdd/99_toolchain/02_policies/otro-orchestration-policy.md +0 -30
  135. /package/client/{platform → web}/.dockerignore +0 -0
  136. /package/client/{platform → web}/.env.example +0 -0
  137. /package/client/{platform → web}/postcss.config.js +0 -0
  138. /package/client/{platform → web}/src/api/client.ts +0 -0
  139. /package/client/{platform → web}/src/api/orders.ts +0 -0
  140. /package/client/{platform → web}/src/app/App.tsx +0 -0
  141. /package/client/{platform → web}/src/auth/ProtectedRoute.tsx +0 -0
  142. /package/client/{platform → web}/src/auth/auth-client.ts +0 -0
  143. /package/client/{platform → web}/src/auth/types.ts +0 -0
  144. /package/client/{platform → web}/src/components/AppShell.tsx +0 -0
  145. /package/client/{platform → web}/src/components/ui/button.tsx +0 -0
  146. /package/client/{platform → web}/src/components/ui/card.tsx +0 -0
  147. /package/client/{platform → web}/src/components/ui/input.tsx +0 -0
  148. /package/client/{platform → web}/src/lib/cn.ts +0 -0
  149. /package/client/{platform → web}/src/lib/specRouteCatalog.json +0 -0
  150. /package/client/{platform → web}/src/lib/specScreens.json +0 -0
  151. /package/client/{platform → web}/src/main.tsx +0 -0
  152. /package/client/{platform → web}/src/pages/DashboardPage.tsx +0 -0
  153. /package/client/{platform → web}/src/pages/LoginPage.tsx +0 -0
  154. /package/client/{platform → web}/src/pages/OrdersPage.tsx +0 -0
  155. /package/client/{platform → web}/src/styles/globals.css +0 -0
  156. /package/client/{platform → web}/src/theme-vars.ts +0 -0
  157. /package/client/{platform → web}/src/theme.ts +0 -0
  158. /package/client/{platform → web}/src/vite-env.d.ts +0 -0
  159. /package/client/{platform → web}/tailwind.config.js +0 -0
  160. /package/client/{platform → web}/tsconfig.json +0 -0
  161. /package/client/{platform → web}/vite.config.ts +0 -0
  162. /package/sdd/01_planning/02_screen/{platform_screen_spec.pdf → web_screen_spec.pdf} +0 -0
  163. /package/sdd/99_toolchain/01_automation/assets/{platform_screen_capture → web_screen_capture}/dashboard.png +0 -0
  164. /package/sdd/99_toolchain/01_automation/assets/{platform_screen_capture → web_screen_capture}/login.png +0 -0
  165. /package/sdd/99_toolchain/01_automation/assets/{platform_screen_capture → web_screen_capture}/orders.png +0 -0
package/.claude/CLAUDE.md CHANGED
@@ -19,7 +19,7 @@ templates/
19
19
  │ └── skills/ # Claude Code repo-local skills (.claude/skills/<name>/SKILL.md)
20
20
  ├── .codex/ # Codex 설정, 에이전트, 스킬
21
21
  ├── client/
22
- │ ├── platform/ # 일반 앱 템플릿
22
+ │ ├── web/ # 일반 앱 템플릿
23
23
  │ ├── admin/ # 어드민 템플릿
24
24
  │ ├── mobile/ # 현장형 모바일 템플릿
25
25
  │ └── landing/ # 랜딩 템플릿
@@ -1,13 +1,184 @@
1
1
  ---
2
2
  name: sdd
3
- description: "Alias skill for repositories that use `sdd/` as the canonical delivery system."
4
- user_invocable: true
3
+ description: "Use for any software development request in a repository that treats `sdd/` as the canonical delivery system. Trigger on requests like develop, implement, build, code, work on, modify, fix, patch, refactor, test, verify, deploy, monitor, or screen/UI-driven prompts such as 화면명세서, 화면설계서, 화면 설계, 화면, 화면 스펙, UI, 디자인, 디자인 가이드, screen spec, screen design, or design guide. The workflow is always SDD-first: inspect and update `sdd/01_planning`, create or update the task plan under `sdd/02_plan`, implement the change, record execution in `sdd/03_build`, capture validation in `sdd/04_verify`, and record deployment or monitoring in `sdd/05_operate` when rollout happens."
5
4
  ---
6
5
 
7
- ## /sdd
6
+ # SDD Development
8
7
 
9
- 파일은 alias skill이다. canonical SDD workflow는 [`../sdd-dev/SKILL.md`](../sdd-dev/SKILL.md)를 따른다.
8
+ ## Overview
10
9
 
11
- Rules:
12
- - 실제 workflow와 section map은 `sdd-dev` 기준을 사용한다.
13
- - downstream repo가 `sdd` 이름으로 호출해도 동일한 current-state delivery 규칙으로 해석한다.
10
+ Use this skill for implementation work in repositories that treat `sdd/` as the canonical delivery record.
11
+
12
+ This skill enforces one workflow:
13
+ 1. inspect and fix relevant `sdd/01_planning` artifacts first,
14
+ 2. create or update the task plan under `sdd/02_plan/<section>/`,
15
+ 3. perform the code work,
16
+ 4. record the current implementation summary in `sdd/03_build`,
17
+ 5. record the current retained verification summary in `sdd/04_verify`,
18
+ 6. record deployment and monitoring outcomes in `sdd/05_operate` when rollout happens.
19
+
20
+ When rollout is explicitly in scope, and the repository has separate DEV and PROD environments, this skill enforces a staged release rule: deploy to DEV first, complete the retained full-layer validation surface there, promote to PROD only after DEV passes, then rerun the same retained validation surface in PROD. If PROD validation fails, rollback is required unless the user explicitly redirects and that risk is recorded.
21
+ For persistence-affecting work, this skill also enforces schema-parity verification. Always compare migration or model intent against the real DEV and PROD schema state for the affected database objects instead of assuming deployed reality matches the code.
22
+
23
+ Read [references/section-map.md](references/section-map.md) when you need the exact destination inside `sdd/`.
24
+ For screen-spec-driven UI work, reusable static assets from the spec must be extracted through the repo's canonical asset builder before being used in code.
25
+ For screen-spec-driven layout work, inspect the repo's canonical design guide builder first when one exists.
26
+ For local screen exactness, treat the repo's Playwright exactness runner and suite registry as the canonical automation gate when they exist.
27
+ For verification work, treat regression scope selection as a required retained artifact and carry it through `sdd/02_plan`, `sdd/03_build`, and `sdd/04_verify`.
28
+ Do not infer rollout scope from the existence of `sdd/05_operate` alone; require rollout only when the user asks for deployment or the repo's current policy/plan makes rollout part of completion.
29
+ When a repo or team treats DEV deployment from `main` as the completion bar, temporary branches or worktrees are only working space. Before calling the task deployed, land the final retained change on `main` and push `origin/main`.
30
+
31
+ ## When To Use
32
+
33
+ Use this skill when:
34
+ - the repository has `sdd/01_planning`, `02_plan`, `03_build`, `04_verify`, `05_operate`,
35
+ - the user gives a development instruction such as `개발해`, `작업해`, `구현해`, `수정해`, `고쳐`, `리팩토링해`, `테스트해`, `배포해`,
36
+ - the user asks for screen/UI work with prompts such as `화면명세서`, `화면설계서`, `화면 설계`, `화면`, `화면 스펙`, `UI`, `디자인`, `디자인 가이드`, `screen spec`, `screen design`, or `design guide`,
37
+ - the user wants work to be traceable through those folders,
38
+ - the task includes both implementation and documentation/verification updates,
39
+ - the task may end in deployment or operational follow-up.
40
+
41
+ Do not use this skill for:
42
+ - casual questions with no repo changes,
43
+ - one-off local debugging where no durable SDD record is needed,
44
+ - repositories that do not use `sdd/` as their primary document system.
45
+
46
+ ## Workflow
47
+
48
+ ### 1. Inspect Planning First
49
+
50
+ - Identify the impacted planning area before editing code.
51
+ - Open only the relevant artifacts in `sdd/01_planning`:
52
+ - feature
53
+ - screen
54
+ - architecture
55
+ - data
56
+ - api
57
+ - iac
58
+ - integration
59
+ - nonfunctional
60
+ - security
61
+ - test
62
+ - If the implementation has already drifted from planning, update the planning artifact first or at least record the drift before coding.
63
+
64
+ ### 2. Create Or Update The Plan
65
+
66
+ - Create or reuse a durable plan file under `sdd/02_plan/<section>/`.
67
+ - Prefer the repo's planning scaffold if available.
68
+ - The plan must include:
69
+ - scope
70
+ - assumptions
71
+ - acceptance criteria
72
+ - execution checklist
73
+ - current notes
74
+ - validation
75
+ - For any task that may end in deployment, acceptance criteria must explicitly include the DEV gate, the matching PROD gate, the retained full-layer test surface, and the rollback trigger/path.
76
+ - For any task that touches persistence, models, repositories, migrations, SQL, ORM mappings, or runtime failures that may involve schema drift, acceptance criteria must explicitly include DEV/PROD schema verification.
77
+ - Keep exactly one checklist item in progress.
78
+
79
+ ### 3. Implement Against The Plan
80
+
81
+ - Make code changes only after the impacted planning artifact and plan are aligned enough to proceed.
82
+ - Update the plan current notes after meaningful edits or decisions.
83
+ - When document generators or capture pipelines are involved, keep those tools under `sdd/99_toolchain`.
84
+ - For local screen exactness, treat Playwright as the canonical automation gate unless the repo documents a stronger exact gate for that surface.
85
+ - In repos created from this template, prefer `python3 sdd/99_toolchain/01_automation/run_playwright_exactness.py --suite <suite-id>` over ad-hoc `npx playwright test ...`.
86
+ - Keep the suite registry in `sdd/99_toolchain/01_automation/playwright_exactness_manifest.py`.
87
+ - Browser Use, manual screenshots, or semantic extraction can supplement diagnosis, but they do not replace the retained Playwright exactness gate when a suite exists.
88
+ - If the needed suite does not exist yet, add or extend it in the same task and register it before calling the work complete.
89
+ - When the task depends on icons, logos, illustrations, or other static assets visible in a screen spec, use the repo's canonical Asset Spec Builder first.
90
+ - In repos created from this template, this is typically `sdd/99_toolchain/01_automation/spec_asset_builder.py` or a wrapper/manifest around it.
91
+ - Reusable asset planning records belong under `sdd/01_planning/02_screen/assets/`.
92
+ - Build the runtime asset from the approved PDF/image source instead of hand-tracing or screenshot-cropping it.
93
+ - Use exact verification such as `--verify-exact` when the asset is expected to match the source crop exactly.
94
+ - Record the source, manifest, generated asset path, and any exception in `sdd/03_build` and `sdd/04_verify`.
95
+ - Only fall back to manual recreation when the builder cannot express the asset, and explicitly document that exception in the plan/build/verify trail.
96
+ - When the task depends on spacing, layout density, typography, color rhythm, or component hierarchy derived from a screen spec, inspect the repo's canonical design guide builder first.
97
+ - In repos created from this template, inspect `sdd/99_toolchain/01_automation/README.md` and use the actual builder, wrapper, or manifest that exists in the repo.
98
+ - Use the generated guide as the working baseline before manual spacing or palette tweaks.
99
+ - If the repo does not provide a design guide builder yet, document the manual interpretation source in plan/build/verify.
100
+ - Define the regression surface before calling implementation complete.
101
+ - Start from `sdd/02_plan/10_test/regression_verification.md`.
102
+ - Identify the direct target plus any upstream, downstream, and shared surfaces affected by the change.
103
+ - If the change touches shared routing, shell/auth, shared state, common components, contracts, generated assets, or builder output, widen the regression scope instead of validating only the edited module.
104
+ - Record the selected regression scope and any justified exclusions in plan/build/verify.
105
+ - When rollout is in scope, define one retained full-layer validation surface and reuse it in DEV and PROD.
106
+ - Include the relevant app/runtime entrypoints, API/contracts, persistence/schema, jobs or workflow side effects, shared integrations, and health/monitoring checks affected by the change.
107
+ - Do not promote to PROD with a narrower verification surface than the DEV gate unless the user explicitly approves that exception and it is recorded.
108
+
109
+ ### 4. Record Build Summary
110
+
111
+ - Record what you implemented in `sdd/03_build`.
112
+ - Use:
113
+ - `03_build/01_feature` for feature implementation summaries
114
+ - `03_build/02_screen` for screen implementation summaries
115
+ - `03_build/03_architecture`, `06_iac`, `10_test` for current-state cross-cutting summaries
116
+ - Keep entries factual and current-state only: implemented scope, modules, assets, contracts, and current user-visible behavior.
117
+
118
+ ### 5. Record Verification
119
+
120
+ - Record retained verification status in `sdd/04_verify`.
121
+ - Use:
122
+ - `04_verify/01_feature` for feature verification summaries
123
+ - `04_verify/02_screen` for screen verification summaries
124
+ - `04_verify/03_architecture`, `06_iac`, `10_test` for current retained checks and residual risk
125
+ - Never claim completion without command-level validation evidence.
126
+ - For staged DEV -> PROD rollout, verification must use the same retained full-layer validation surface in both environments.
127
+ - Run the full-layer validation in DEV after deployment and treat it as a hard gate before PROD promotion.
128
+ - After PROD deployment, rerun the same retained validation surface in PROD.
129
+ - If PROD validation fails, execute rollback or the approved recovery procedure immediately and record the failure and recovery outcome.
130
+ - For persistence-affecting work, verification must include real schema evidence from both DEV and PROD when those environments exist.
131
+ - Check migration state and actual runtime schema separately.
132
+ - Validate the tables, columns, indexes, constraints, triggers, defaults, and any legacy compatibility objects touched by the change.
133
+ - Record the commands or queries used, the environments checked, and the drift or parity result.
134
+ - Regression verification is mandatory.
135
+ - Verification must cover the direct surface and the retained upstream/downstream/shared surfaces selected from the regression baseline.
136
+ - If no automation exists for a needed regression slice yet, run the best available manual or command checks and record that gap as current residual risk.
137
+ - When a Playwright suite exists for the surface, record the canonical runner command, suite id, screenshot/json artifact paths, and any live-vs-local split explicitly.
138
+
139
+ ### 6. Record Operate Outcomes
140
+
141
+ - If deployment or runtime follow-up happens, update `sdd/05_operate`.
142
+ - Use:
143
+ - `05_operate/01_runbooks` for durable operating procedure changes
144
+ - `05_operate/02_delivery_status` for the current live state and monitoring baseline
145
+ - Record:
146
+ - what was deployed
147
+ - which live baseline is current
148
+ - how it is monitored
149
+ - any current residual risk
150
+ - For staged DEV -> PROD rollout, record the DEV gate, PROD gate, and any rollback outcome explicitly.
151
+ - When the DEV deployment baseline is tied to `main`, do not treat a side-branch push as sufficient. Merge, cherry-pick, or otherwise replay the final change onto `main`, push `origin/main`, then record the deployment evidence against that `main` baseline.
152
+
153
+ ## Guardrails
154
+
155
+ - Do not create or repopulate a parallel `docs/` tree when `sdd/` exists.
156
+ - Do not skip planning review just because the code change looks small.
157
+ - Do not leave build, verify, or operate evidence only in chat text when it should live in `sdd/`.
158
+ - When PROD rollout is in scope, do not promote to PROD before the retained full-layer DEV validation surface has passed.
159
+ - When PROD rollout is in scope, do not use a weaker PROD validation surface than the one that gated DEV unless the user explicitly approves and that risk is recorded.
160
+ - When PROD rollout is in scope, do not stop at "PROD deployment succeeded"; post-deploy PROD validation is mandatory.
161
+ - When PROD rollout is in scope, do not leave a failed PROD deployment unreconciled; rollback or the approved recovery procedure must be executed and recorded.
162
+ - Do not assume local tests, migration heads, or current model code prove deployed schema parity.
163
+ - Do not skip DEV/PROD schema inspection for persistence-affecting work when schema drift could influence behavior.
164
+ - Do not manually redraw screen-spec static assets when a canonical Asset Spec Builder exists for the repo; extract them first and use the generated asset.
165
+ - Do not skip a relevant screen automation builder just because the requested UI change looks like a small manual tweak.
166
+ - Do not stop verification at the edited file, route, or screen when the change can affect shared or adjacent behavior.
167
+ - Do not omit regression scope selection from the retained SDD trail.
168
+ - Do not update `05_operate` for tasks that never reached deployment; explicitly note that rollout did not happen instead.
169
+ - Do not call a DEV rollout complete from a temporary branch when the repo or team baseline expects the deployed change to be on `origin/main`.
170
+
171
+ ## Output Standard
172
+
173
+ By the end of an implementation task, the expected trail is:
174
+ - planning artifact reviewed or corrected,
175
+ - plan file updated,
176
+ - build summary written,
177
+ - verification summary written, including selected regression scope and residual risk,
178
+ - operate status updated if rollout occurred.
179
+
180
+ When PROD rollout is in scope, the retained completion state also requires:
181
+ - DEV deployment happened first and the retained full-layer DEV validation surface passed,
182
+ - the same retained full-layer validation surface was executed again in PROD,
183
+ - DEV/PROD schema state was checked and recorded when schema could influence behavior,
184
+ - any PROD validation failure produced rollback or recovery evidence in verify/operate.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "SDD Development"
3
+ short_description: "Use SDD-first flow with schema parity, regression scope, and staged rollout gates"
4
+ default_prompt: "Use $sdd to handle this development task through sdd planning, build, verify, and operate, including regression scope selection, schema parity checks for persistence-affecting work, and staged DEV-first validation when multiple environments exist."
@@ -0,0 +1,67 @@
1
+ # SDD Section Map
2
+
3
+ ## Planning
4
+
5
+ - `sdd/01_planning/01_feature`
6
+ - domain or service feature specifications
7
+ - `sdd/01_planning/02_screen`
8
+ - service-level screen specifications and PDFs
9
+ - `sdd/01_planning/03_architecture`
10
+ - bounded context, runtime, and structural design
11
+ - `sdd/01_planning/04_data`
12
+ - data model and relationship definitions
13
+ - `sdd/01_planning/05_api`
14
+ - transport contracts and API definitions
15
+ - `sdd/01_planning/06_iac`
16
+ - infrastructure planning and deployment design
17
+ - `sdd/01_planning/07_integration`
18
+ - integration contracts and external dependency planning
19
+ - `sdd/01_planning/08_nonfunctional`
20
+ - performance, reliability, scalability, and operational constraints
21
+ - `sdd/01_planning/09_security`
22
+ - security posture, threat model, and control planning
23
+ - `sdd/01_planning/10_test`
24
+ - test strategy and planned cases
25
+
26
+ ## Plan
27
+
28
+ - `sdd/02_plan/<section>`
29
+ - executable plan files and migration backlogs
30
+
31
+ ## Build
32
+
33
+ - `sdd/03_build/01_feature`
34
+ - feature implementation summaries
35
+ - `sdd/03_build/02_screen`
36
+ - screen implementation summaries
37
+ - `sdd/03_build/03_architecture`
38
+ - structural and governance implementation summaries
39
+ - `sdd/03_build/06_iac`
40
+ - current delivery/runtime implementation summaries
41
+ - `sdd/03_build/10_test`
42
+ - current harness and validation implementation summaries
43
+
44
+ ## Verify
45
+
46
+ - `sdd/04_verify/01_feature`
47
+ - feature verification summaries
48
+ - `sdd/04_verify/02_screen`
49
+ - screen verification summaries
50
+ - `sdd/04_verify/03_architecture`
51
+ - governance and structure verification summaries
52
+ - `sdd/04_verify/06_iac`
53
+ - delivery/runtime verification summaries
54
+ - `sdd/04_verify/10_test`
55
+ - current harness outputs and retained validation references
56
+
57
+ ## Operate
58
+
59
+ - `sdd/05_operate/01_runbooks`
60
+ - durable operating procedures
61
+ - `sdd/05_operate/02_delivery_status`
62
+ - current live state, monitoring baseline, and residual risk
63
+
64
+ ## Tooling
65
+
66
+ - `sdd/99_toolchain`
67
+ - generators, capture tooling, manifests, and other SDD automation
package/.env.example CHANGED
@@ -1,6 +1,6 @@
1
1
  SERVER_HTTP_PORT=8000
2
2
  CLIENT_LANDING_PORT=3000
3
- CLIENT_PLATFORM_PORT=3001
3
+ CLIENT_WEB_PORT=3001
4
4
  CLIENT_MOBILE_PORT=3002
5
5
  CLIENT_ADMIN_PORT=4000
6
6
 
@@ -44,7 +44,7 @@ SERVER_BOOTSTRAP_OPERATOR_NAME=Template Operator
44
44
  SERVER_CORS_ORIGINS=["http://localhost:3000","http://127.0.0.1:3000","http://localhost:3001","http://127.0.0.1:3001","http://localhost:3002","http://127.0.0.1:3002","http://localhost:4000","http://127.0.0.1:4000"]
45
45
 
46
46
  CLIENT_LANDING_VITE_API_BASE_URL=http://127.0.0.1:8000/api/v1
47
- CLIENT_PLATFORM_VITE_API_BASE_URL=http://127.0.0.1:8000/api/v1
47
+ CLIENT_WEB_VITE_API_BASE_URL=http://127.0.0.1:8000/api/v1
48
48
  CLIENT_MOBILE_VITE_API_BASE_URL=http://127.0.0.1:8000/api/v1
49
49
  CLIENT_ADMIN_VITE_API_BASE_URL=http://127.0.0.1:8000/api/v1
50
50
  CLIENT_WATCH_USE_POLLING=false
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  포함 템플릿:
6
6
 
7
7
  - [landing](./client/landing): 마케팅/브랜드 랜딩 패턴
8
- - [platform](./client/platform): 일반 제품형 플랫폼 앱 shell, dashboard/list/detail 패턴
8
+ - [web](./client/web): 일반 제품형 앱 shell, dashboard/list/detail 패턴
9
9
  - [mobile](./client/mobile): 다국어/현장 업무형 모바일 IN workspace 패턴
10
10
  - [admin](./client/admin): 운영 콘솔형 shell, sidebar/topbar/drawer/table 패턴
11
11
  - [server](./server): HTTP 기반 hexagonal/DDD 서버 패턴
@@ -17,7 +17,7 @@
17
17
  - 제품 DOM은 유지하고, 스타일 조정값은 `theme.ts` + CSS custom properties로 노출
18
18
  - proof/spec 전용 DOM 복제 대신 fixture data + parameter surface로 정렬
19
19
  - `server`는 hexagonal architecture 기준으로 `contracts + application + domain + infrastructure`를 사용
20
- - `landing`, `platform`, `mobile`, `admin`은 실제 `/api/v1/auth/login`과 `/api/v1/auth/me`를 사용하는 기준 템플릿이다.
20
+ - `landing`, `web`, `mobile`, `admin`은 실제 `/api/v1/auth/login`과 `/api/v1/auth/me`를 사용하는 기준 템플릿이다.
21
21
  - runtime baseline은 루트 `compose.yml`을 기준으로 유지하고, 여기서 4개 frontend surface, `server`, 기본 `postgres`, optional DB profile을 함께 올린다.
22
22
  - agentic baseline은 `.claude`, `.codex`, `.agent`를 함께 유지하고 downstream repo가 role agent, skill alias, Ralph harness를 그대로 가져가도록 설계한다.
23
23
  - `sdd/03_build`는 단순 구현 목록이 아니라 실제 runtime assembly를 따라 읽는 AST-style current-state 설명을 기준으로 유지한다.
@@ -42,12 +42,12 @@ SDD / delivery 원칙:
42
42
  설치형 scaffold:
43
43
 
44
44
  ```bash
45
- npx agentic-dev init my-app --template platform
45
+ npx agentic-dev init my-app --template web
46
46
  cd my-app
47
47
  cp .env.example .env
48
48
  npm install -g pnpm
49
49
  pnpm install
50
- cd client/platform
50
+ cd client/web
51
51
  npm run ui:parity:bootstrap
52
52
  ```
53
53
 
@@ -74,7 +74,7 @@ docker compose up --build
74
74
  기본 compose 포트:
75
75
 
76
76
  - `client/landing`: `3000`
77
- - `client/platform`: `3001`
77
+ - `client/web`: `3001`
78
78
  - `client/mobile`: `3002`
79
79
  - `client/admin`: `4000`
80
80
  - `server/http`: `8000`
@@ -3,13 +3,13 @@ FROM node:20-slim
3
3
  WORKDIR /app
4
4
 
5
5
  COPY pnpm-lock.yaml pnpm-workspace.yaml ./
6
- COPY client/platform/package.json ./client/platform/package.json
6
+ COPY client/web/package.json ./client/web/package.json
7
7
 
8
- RUN npm install -g pnpm@10.32.0 && pnpm install --filter @do4ai/client-platform-template...
8
+ RUN npm install -g pnpm@10.32.0 && pnpm install --filter @do4ai/client-web-template...
9
9
 
10
10
  COPY . .
11
11
 
12
- WORKDIR /app/client/platform
12
+ WORKDIR /app/client/web
13
13
 
14
14
  EXPOSE 3001
15
15
 
@@ -0,0 +1,18 @@
1
+ FROM node:20-slim
2
+
3
+ WORKDIR /app
4
+
5
+ RUN npm install -g pnpm@10.32.0
6
+
7
+ COPY pnpm-lock.yaml pnpm-workspace.yaml ./
8
+ COPY client/web/package.json ./client/web/package.json
9
+
10
+ RUN pnpm install --frozen-lockfile --filter @do4ai/client-web-template...
11
+
12
+ COPY client/web ./client/web
13
+
14
+ WORKDIR /app/client/web
15
+
16
+ EXPOSE 3001
17
+
18
+ CMD ["sh", "-lc", "pnpm exec vite --host 0.0.0.0 --port ${PORT:-3001}"]
@@ -1,4 +1,4 @@
1
- # platform
1
+ # web
2
2
 
3
3
  일반 사용자용 제품 앱 보일러플레이트다.
4
4
 
@@ -25,7 +25,7 @@ npm run dev
25
25
  npm run ui:parity:init
26
26
  ```
27
27
 
28
- 이 단계는 repo-level contract, `ui_parity_platform_contract.yaml`, route-gap manifest를 생성한다.
28
+ 이 단계는 repo-level contract, `ui_parity_web_contract.yaml`, route-gap manifest를 생성한다.
29
29
 
30
30
  첫 proof 부트스트랩:
31
31
 
@@ -44,4 +44,4 @@ npm run ui:parity:route-gap
44
44
  npm run ui:parity:proof
45
45
  ```
46
46
 
47
- 이 템플릿은 repo root의 `sdd/99_toolchain/01_automation` 도구를 사용하고, `client/platform/scripts/ui-parity-platform-adapter.mjs`는 앱별 adapter 예시다.
47
+ 이 템플릿은 repo root의 `sdd/99_toolchain/01_automation` 도구를 사용하고, `client/web/scripts/ui-parity-web-adapter.mjs`는 앱별 adapter 예시다.
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>client-platform template</title>
6
+ <title>client-web template</title>
7
7
  </head>
8
8
  <body>
9
9
  <div id="root"></div>
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "@do4ai/client-platform-template",
2
+ "name": "@do4ai/client-web-template",
3
3
  "private": true,
4
4
  "version": "0.1.0",
5
5
  "type": "module",
@@ -8,12 +8,12 @@
8
8
  "dev": "vite --host 0.0.0.0 --port 3001",
9
9
  "build": "tsc -b && vite build",
10
10
  "preview": "vite preview --host 0.0.0.0 --port 4301",
11
- "ui:parity:init": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh ../.. platform",
12
- "ui:parity:bootstrap": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh ../.. platform",
13
- "ui:parity:scaffold": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh scaffold ../.. platform",
14
- "ui:parity:materialize-references": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh materialize_references ../.. platform",
15
- "ui:parity:route-gap": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh route_gap ../.. platform",
16
- "ui:parity:proof": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh proof ../.. platform",
11
+ "ui:parity:init": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh ../.. web",
12
+ "ui:parity:bootstrap": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh ../.. web",
13
+ "ui:parity:scaffold": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh scaffold ../.. web",
14
+ "ui:parity:materialize-references": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh materialize_references ../.. web",
15
+ "ui:parity:route-gap": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh route_gap ../.. web",
16
+ "ui:parity:proof": "bash ../../sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh proof ../.. web",
17
17
  "ui:parity": "npm run ui:parity:proof"
18
18
  },
19
19
  "dependencies": {
@@ -13,7 +13,7 @@ const routes = JSON.parse(
13
13
  const routeMap = new Map(routes.map((entry) => [entry.id, entry.route]));
14
14
 
15
15
  export default {
16
- service: "templates-platform",
16
+ service: "templates-web",
17
17
  targetBaseUrl: "http://127.0.0.1:4301",
18
18
  viewport: {
19
19
  width: 1440,
@@ -26,7 +26,7 @@ export default {
26
26
  referenceImage: `sdd/04_verify/10_test/ui_parity/reference/${screen.id}.png`,
27
27
  readySelector: "body",
28
28
  readyTimeoutMs: 10000,
29
- tags: ["template", "platform"],
29
+ tags: ["template", "web"],
30
30
  })),
31
31
  async preparePage(page, { route }) {
32
32
  await page.route("**/auth/me", async (routeRequest) => {
@@ -34,8 +34,8 @@ export default {
34
34
  status: 200,
35
35
  contentType: "application/json",
36
36
  body: JSON.stringify({
37
- id: "tmpl-platform",
38
- name: "Template Platform User",
37
+ id: "tmpl-web",
38
+ name: "Template Web User",
39
39
  email: "operator@example.com",
40
40
  role: "member",
41
41
  }),
@@ -43,17 +43,17 @@ export default {
43
43
  });
44
44
  await page.addInitScript(() => {
45
45
  window.localStorage.setItem(
46
- "platform.auth.token",
46
+ "web.auth.token",
47
47
  JSON.stringify({
48
48
  access_token: "template-access-token",
49
49
  token_type: "bearer",
50
- user_id: "tmpl-platform",
50
+ user_id: "tmpl-web",
51
51
  }),
52
52
  );
53
53
  });
54
54
  if (route === "/login") {
55
55
  await page.addInitScript(() => {
56
- window.localStorage.removeItem("platform.auth.token");
56
+ window.localStorage.removeItem("web.auth.token");
57
57
  });
58
58
  }
59
59
  },
@@ -3,7 +3,7 @@ import { createContext, useContext, useEffect, useMemo, useState, type ReactNode
3
3
  import { getMe, login as loginRequest } from "@/auth/auth-client";
4
4
  import type { AuthToken, AuthUser, LoginCommand } from "@/auth/types";
5
5
 
6
- const STORAGE_KEY = "platform.auth.token";
6
+ const STORAGE_KEY = "web.auth.token";
7
7
 
8
8
  interface AuthContextValue {
9
9
  user: AuthUser | null;
package/compose.yml CHANGED
@@ -138,19 +138,19 @@ services:
138
138
  networks:
139
139
  - template-dev
140
140
 
141
- client-platform:
141
+ client-web:
142
142
  build:
143
143
  context: .
144
- dockerfile: client/platform/Dockerfile.dev
144
+ dockerfile: client/web/Dockerfile.dev
145
145
  network: host
146
146
  environment:
147
- PORT: ${CLIENT_PLATFORM_PORT:-3001}
148
- VITE_API_BASE_URL: ${CLIENT_PLATFORM_VITE_API_BASE_URL:-http://127.0.0.1:8000/api/v1}
147
+ PORT: ${CLIENT_WEB_PORT:-3001}
148
+ VITE_API_BASE_URL: ${CLIENT_WEB_VITE_API_BASE_URL:-http://127.0.0.1:8000/api/v1}
149
149
  CHOKIDAR_USEPOLLING: ${CLIENT_WATCH_USE_POLLING:-false}
150
150
  ports:
151
- - "${CLIENT_PLATFORM_PORT:-3001}:${CLIENT_PLATFORM_PORT:-3001}"
151
+ - "${CLIENT_WEB_PORT:-3001}:${CLIENT_WEB_PORT:-3001}"
152
152
  volumes:
153
- - ./client/platform:/app/client/platform
153
+ - ./client/web:/app/client/web
154
154
  depends_on:
155
155
  server:
156
156
  condition: service_started
@@ -15,14 +15,14 @@ DEV_SERVER_MONGODB_URL=mongodb://mongo:27017
15
15
  DEV_SERVER_MONGODB_DATABASE=template
16
16
  DEV_SERVER_JWT_SECRET=change-me
17
17
  DEV_SERVER_ACCESS_TOKEN_TTL_MINUTES=120
18
- DEV_SERVER_CORS_ORIGINS=https://dev-landing.example.com,https://dev-platform.example.com,https://dev-mobile.example.com,https://dev-admin.example.com
18
+ DEV_SERVER_CORS_ORIGINS=https://dev-landing.example.com,https://dev-web.example.com,https://dev-mobile.example.com,https://dev-admin.example.com
19
19
 
20
20
  DEV_CLIENT_LANDING_PORT=13000
21
- DEV_CLIENT_PLATFORM_PORT=13001
21
+ DEV_CLIENT_WEB_PORT=13001
22
22
  DEV_CLIENT_MOBILE_PORT=13002
23
23
  DEV_CLIENT_ADMIN_PORT=14000
24
24
 
25
25
  DEV_CLIENT_LANDING_VITE_API_BASE_URL=https://dev-api.example.com/api/v1
26
- DEV_CLIENT_PLATFORM_VITE_API_BASE_URL=https://dev-api.example.com/api/v1
26
+ DEV_CLIENT_WEB_VITE_API_BASE_URL=https://dev-api.example.com/api/v1
27
27
  DEV_CLIENT_MOBILE_VITE_API_BASE_URL=https://dev-api.example.com/api/v1
28
28
  DEV_CLIENT_ADMIN_VITE_API_BASE_URL=https://dev-api.example.com/api/v1
@@ -16,14 +16,14 @@ PROD_SERVER_MONGODB_URL=mongodb://mongo:27017
16
16
  PROD_SERVER_MONGODB_DATABASE=template
17
17
  PROD_SERVER_JWT_SECRET=change-me
18
18
  PROD_SERVER_ACCESS_TOKEN_TTL_MINUTES=120
19
- PROD_SERVER_CORS_ORIGINS=https://landing.example.com,https://platform.example.com,https://mobile.example.com,https://admin.example.com
19
+ PROD_SERVER_CORS_ORIGINS=https://landing.example.com,https://web.example.com,https://mobile.example.com,https://admin.example.com
20
20
 
21
21
  PROD_CLIENT_LANDING_PORT=23000
22
- PROD_CLIENT_PLATFORM_PORT=23001
22
+ PROD_CLIENT_WEB_PORT=23001
23
23
  PROD_CLIENT_MOBILE_PORT=23002
24
24
  PROD_CLIENT_ADMIN_PORT=24000
25
25
 
26
26
  PROD_CLIENT_LANDING_VITE_API_BASE_URL=https://api.example.com/api/v1
27
- PROD_CLIENT_PLATFORM_VITE_API_BASE_URL=https://api.example.com/api/v1
27
+ PROD_CLIENT_WEB_VITE_API_BASE_URL=https://api.example.com/api/v1
28
28
  PROD_CLIENT_MOBILE_VITE_API_BASE_URL=https://api.example.com/api/v1
29
29
  PROD_CLIENT_ADMIN_VITE_API_BASE_URL=https://api.example.com/api/v1
@@ -30,6 +30,6 @@ docker compose --env-file infra/compose/.env.prod -f infra/compose/prod.yml up -
30
30
  - `infra/compose/dev.yml`, `infra/compose/prod.yml`은 dedicated host/runtime split이 필요할 때 쓰는 overlay이며, root compose baseline을 대체하는 문서 기준선은 아니다.
31
31
  - provider-first canonical delivery split은 `AWS edge/domain -> OpenStack backend compute -> AWS data plane`이고, 세부 구조는 `infra/terraform/README.md`를 기준으로 설명한다.
32
32
  - `VITE_API_BASE_URL`은 컨테이너 내부 DNS가 아니라 브라우저가 도달 가능한 API URL이어야 한다.
33
- - 포트 역할은 root compose baseline과 같은 순서를 따른다: landing, platform, mobile, admin, server/http.
33
+ - 포트 역할은 root compose baseline과 같은 순서를 따른다: landing, web, mobile, admin, server/http.
34
34
  - PROD 웹 앱은 `pnpm build + pnpm preview`로 기동한다.
35
35
  - OpenStack에서 자동 배포까지 묶고 싶으면 `infra/terraform/openstack/server` 또는 lower-level `openstack/dev`, `openstack/prod` root를 사용한다.
@@ -65,20 +65,20 @@ services:
65
65
  networks:
66
66
  - templates-dev
67
67
 
68
- client-platform:
68
+ client-web:
69
69
  build:
70
70
  context: ../..
71
- dockerfile: client/platform/Dockerfile
72
- container_name: templates-client-platform-dev
71
+ dockerfile: client/web/Dockerfile
72
+ container_name: templates-client-web-dev
73
73
  restart: unless-stopped
74
74
  depends_on:
75
75
  server:
76
76
  condition: service_started
77
77
  environment:
78
- VITE_API_BASE_URL: ${DEV_CLIENT_PLATFORM_VITE_API_BASE_URL}
78
+ VITE_API_BASE_URL: ${DEV_CLIENT_WEB_VITE_API_BASE_URL}
79
79
  PORT: 3001
80
80
  ports:
81
- - "${DEV_CLIENT_PLATFORM_PORT:-13001}:3001"
81
+ - "${DEV_CLIENT_WEB_PORT:-13001}:3001"
82
82
  networks:
83
83
  - templates-dev
84
84
 
@@ -43,7 +43,7 @@ services:
43
43
  MONGODB_DATABASE: ${PROD_SERVER_MONGODB_DATABASE:-template}
44
44
  JWT_SECRET: ${PROD_SERVER_JWT_SECRET:-change-me}
45
45
  ACCESS_TOKEN_TTL_MINUTES: ${PROD_SERVER_ACCESS_TOKEN_TTL_MINUTES:-120}
46
- CORS_ORIGINS: ${PROD_SERVER_CORS_ORIGINS:-https://landing.example.com,https://platform.example.com,https://mobile.example.com,https://admin.example.com}
46
+ CORS_ORIGINS: ${PROD_SERVER_CORS_ORIGINS:-https://landing.example.com,https://web.example.com,https://mobile.example.com,https://admin.example.com}
47
47
  ports:
48
48
  - "${PROD_SERVER_HTTP_PORT:-28000}:8000"
49
49
  networks:
@@ -66,20 +66,20 @@ services:
66
66
  networks:
67
67
  - templates-prod
68
68
 
69
- client-platform:
69
+ client-web:
70
70
  build:
71
71
  context: ../..
72
- dockerfile: client/platform/Dockerfile
73
- container_name: templates-client-platform-prod
72
+ dockerfile: client/web/Dockerfile
73
+ container_name: templates-client-web-prod
74
74
  restart: unless-stopped
75
75
  depends_on:
76
76
  server:
77
77
  condition: service_started
78
78
  command: ["sh", "-lc", "pnpm build && pnpm preview --host 0.0.0.0 --port 4301"]
79
79
  environment:
80
- VITE_API_BASE_URL: ${PROD_CLIENT_PLATFORM_VITE_API_BASE_URL}
80
+ VITE_API_BASE_URL: ${PROD_CLIENT_WEB_VITE_API_BASE_URL}
81
81
  ports:
82
- - "${PROD_CLIENT_PLATFORM_PORT:-23001}:4301"
82
+ - "${PROD_CLIENT_WEB_PORT:-23001}:4301"
83
83
  networks:
84
84
  - templates-prod
85
85