agentic-dev 0.2.3 → 0.2.6
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.
- package/.agent/prd.json +1 -1
- package/.agent/prompt.md +1 -1
- package/.claude/CLAUDE.md +1 -1
- package/.claude/agents/db-dev.md +1 -1
- package/.claude/agents/frontend-dev.md +1 -1
- package/.claude/agents/test-dev.md +1 -1
- package/.claude/skills/sdd/SKILL.md +9 -9
- package/.claude/skills/sdd/references/section-map.md +5 -5
- package/.codex/skills/sdd/SKILL.md +9 -9
- package/.codex/skills/sdd/references/section-map.md +5 -5
- package/.env.example +2 -2
- package/AGENTS.md +4 -4
- package/README.md +48 -15
- package/SDD_SKILL.md +7 -7
- package/bin/agentic-dev.mjs +53 -18
- package/client/admin/scripts/ui-parity-admin-adapter.mjs +1 -1
- package/client/landing/scripts/ui-parity-landing-adapter.mjs +1 -1
- package/client/mobile/scripts/ui-parity-mobile-adapter.mjs +1 -1
- package/client/{platform → web}/Dockerfile +3 -3
- package/client/web/Dockerfile.dev +18 -0
- package/client/{platform → web}/README.md +3 -3
- package/client/{platform → web}/index.html +1 -1
- package/client/{platform → web}/package.json +7 -7
- package/client/{platform/scripts/ui-parity-platform-adapter.mjs → web/scripts/ui-parity-web-adapter.mjs} +8 -8
- package/client/{platform → web}/src/auth/AuthProvider.tsx +1 -1
- package/compose.yml +6 -6
- package/infra/compose/.env.dev.example +3 -3
- package/infra/compose/.env.prod.example +3 -3
- package/infra/compose/README.md +1 -1
- package/infra/compose/dev.yml +5 -5
- package/infra/compose/prod.yml +6 -6
- package/infra/terraform/openstack/dev/terraform.tfvars.example +3 -3
- package/infra/terraform/openstack/prod/terraform.tfvars.example +3 -3
- package/lib/scaffold.mjs +254 -279
- package/package.json +2 -2
- package/scripts/dev/audit_sdd_build_ast.py +9 -9
- package/sdd/01_planning/01_feature/auth_feature_spec.md +2 -2
- package/sdd/01_planning/01_feature/catalog_feature_spec.md +3 -3
- package/sdd/01_planning/01_feature/order_feature_spec.md +11 -11
- package/sdd/01_planning/02_screen/INDEX.md +2 -2
- package/sdd/01_planning/02_screen/README.md +2 -2
- package/sdd/01_planning/03_architecture/templates_system_architecture.md +3 -3
- package/sdd/01_planning/05_api/templates_api_contract.md +3 -3
- package/sdd/01_planning/06_iac/templates_runtime_and_cicd_baseline.md +1 -1
- package/sdd/01_planning/07_integration/templates_frontend_api_integration.md +3 -3
- package/sdd/01_planning/10_test/templates_test_strategy.md +2 -2
- package/sdd/01_planning/INDEX.md +1 -1
- package/sdd/02_plan/02_screen/INDEX.md +1 -1
- package/sdd/02_plan/02_screen/README.md +1 -1
- package/sdd/02_plan/03_architecture/build_ast_runtime_tree_governance.md +1 -1
- package/sdd/02_plan/03_architecture/repository_governance.md +2 -2
- package/sdd/02_plan/03_architecture/runtime_and_structure_governance.md +1 -1
- package/sdd/02_plan/03_architecture/toolchain_governance.md +2 -2
- package/sdd/02_plan/06_iac/dev_runtime_delivery.md +1 -1
- package/sdd/02_plan/07_integration/frontend_live_integration.md +3 -3
- package/sdd/02_plan/10_test/regression_verification.md +2 -2
- package/sdd/02_plan/10_test/templates/{ui_parity_platform_contract.template.yaml → ui_parity_web_contract.template.yaml} +2 -2
- package/sdd/02_plan/10_test/verification_strategy.md +2 -2
- package/sdd/03_build/01_feature/domain/account_and_access.md +1 -1
- package/sdd/03_build/01_feature/domain/catalog_and_inventory.md +1 -1
- package/sdd/03_build/01_feature/domain/ordering_and_fulfillment.md +1 -1
- package/sdd/03_build/01_feature/service/README.md +1 -1
- package/sdd/03_build/01_feature/service/{platform_surface.md → web_surface.md} +3 -3
- package/sdd/03_build/02_screen/README.md +1 -1
- package/sdd/03_build/02_screen/web/README.md +5 -0
- package/sdd/03_build/03_architecture/toolchain_governance.md +1 -1
- package/sdd/03_build/06_iac/template_runtime_delivery.md +1 -1
- package/sdd/03_build/07_integration/frontend_live_integration.md +1 -1
- package/sdd/{04_verify → 03_verify}/01_feature/service_verification.md +3 -3
- package/sdd/{04_verify → 03_verify}/02_screen/README.md +1 -1
- package/sdd/03_verify/02_screen/web/README.md +4 -0
- package/sdd/{04_verify → 03_verify}/03_architecture/toolchain_governance.md +2 -2
- package/sdd/{04_verify → 03_verify}/06_iac/dev_runtime_delivery.md +1 -1
- package/sdd/{04_verify → 03_verify}/06_iac/template_runtime_delivery.md +4 -4
- package/sdd/{04_verify → 03_verify}/README.md +3 -3
- package/sdd/99_toolchain/01_automation/README.md +2 -2
- package/sdd/99_toolchain/01_automation/agentic-dev/assets/repo-contract.template.json +15 -15
- package/sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh +1 -1
- package/sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json +16 -16
- package/sdd/99_toolchain/01_automation/agentic-parity-harness-design.md +9 -9
- package/sdd/99_toolchain/01_automation/capture_screen_assets.mjs +4 -4
- package/sdd/99_toolchain/01_automation/harness-layout.md +2 -2
- package/sdd/99_toolchain/01_automation/parity-execution-tooling-design.md +7 -7
- package/sdd/99_toolchain/01_automation/screen_spec_manifest.py +17 -17
- package/sdd/99_toolchain/01_automation/ui-parity/README.md +10 -10
- package/sdd/99_toolchain/01_automation/ui-parity/cli/materialize-reference-assets.mjs +1 -1
- package/sdd/99_toolchain/01_automation/ui-parity/cli/scaffold-contract.mjs +2 -2
- package/sdd/99_toolchain/01_automation/ui-parity/core/proof-runner.mjs +1 -1
- package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-artifact-layout.md +2 -2
- package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-route-gap-interface.md +2 -2
- package/sdd/99_toolchain/02_policies/build-ast-governance-policy.md +2 -2
- package/sdd/99_toolchain/02_policies/compose-runtime-baseline-policy.md +2 -2
- package/sdd/99_toolchain/02_policies/regression-verification-policy.md +1 -1
- package/sdd/99_toolchain/03_templates/playwright_exactness_manifest.example.py +1 -1
- package/sdd/99_toolchain/README.md +1 -1
- package/sdd/README.md +1 -1
- package/server/data/README.md +1 -1
- package/client/platform/Dockerfile.dev +0 -18
- package/sdd/03_build/02_screen/platform/README.md +0 -5
- package/sdd/04_verify/02_screen/platform/README.md +0 -4
- /package/client/{platform → web}/.dockerignore +0 -0
- /package/client/{platform → web}/.env.example +0 -0
- /package/client/{platform → web}/postcss.config.js +0 -0
- /package/client/{platform → web}/src/api/client.ts +0 -0
- /package/client/{platform → web}/src/api/orders.ts +0 -0
- /package/client/{platform → web}/src/app/App.tsx +0 -0
- /package/client/{platform → web}/src/auth/ProtectedRoute.tsx +0 -0
- /package/client/{platform → web}/src/auth/auth-client.ts +0 -0
- /package/client/{platform → web}/src/auth/types.ts +0 -0
- /package/client/{platform → web}/src/components/AppShell.tsx +0 -0
- /package/client/{platform → web}/src/components/ui/button.tsx +0 -0
- /package/client/{platform → web}/src/components/ui/card.tsx +0 -0
- /package/client/{platform → web}/src/components/ui/input.tsx +0 -0
- /package/client/{platform → web}/src/lib/cn.ts +0 -0
- /package/client/{platform → web}/src/lib/specRouteCatalog.json +0 -0
- /package/client/{platform → web}/src/lib/specScreens.json +0 -0
- /package/client/{platform → web}/src/main.tsx +0 -0
- /package/client/{platform → web}/src/pages/DashboardPage.tsx +0 -0
- /package/client/{platform → web}/src/pages/LoginPage.tsx +0 -0
- /package/client/{platform → web}/src/pages/OrdersPage.tsx +0 -0
- /package/client/{platform → web}/src/styles/globals.css +0 -0
- /package/client/{platform → web}/src/theme-vars.ts +0 -0
- /package/client/{platform → web}/src/theme.ts +0 -0
- /package/client/{platform → web}/src/vite-env.d.ts +0 -0
- /package/client/{platform → web}/tailwind.config.js +0 -0
- /package/client/{platform → web}/tsconfig.json +0 -0
- /package/client/{platform → web}/vite.config.ts +0 -0
- /package/sdd/01_planning/02_screen/{platform_screen_spec.pdf → web_screen_spec.pdf} +0 -0
- /package/sdd/{04_verify → 03_verify}/01_feature/README.md +0 -0
- /package/sdd/{04_verify → 03_verify}/01_feature/domain_verification.md +0 -0
- /package/sdd/{04_verify → 03_verify}/02_screen/_screen_verify_template.md +0 -0
- /package/sdd/{04_verify → 03_verify}/02_screen/admin/README.md +0 -0
- /package/sdd/{04_verify → 03_verify}/02_screen/landing/README.md +0 -0
- /package/sdd/{04_verify → 03_verify}/02_screen/mobile/README.md +0 -0
- /package/sdd/{04_verify → 03_verify}/03_architecture/README.md +0 -0
- /package/sdd/{04_verify → 03_verify}/03_architecture/architecture_document_governance.md +0 -0
- /package/sdd/{04_verify → 03_verify}/03_architecture/build_ast_runtime_tree_governance.md +0 -0
- /package/sdd/{04_verify → 03_verify}/03_architecture/repository_governance.md +0 -0
- /package/sdd/{04_verify → 03_verify}/06_iac/README.md +0 -0
- /package/sdd/{04_verify → 03_verify}/07_integration/README.md +0 -0
- /package/sdd/{04_verify → 03_verify}/07_integration/frontend_live_integration.md +0 -0
- /package/sdd/{04_verify → 03_verify}/08_nonfunctional/README.md +0 -0
- /package/sdd/{04_verify → 03_verify}/08_nonfunctional/repository_hygiene.md +0 -0
- /package/sdd/{04_verify → 03_verify}/10_test/README.md +0 -0
- /package/sdd/{04_verify → 03_verify}/10_test/regression_verification.md +0 -0
- /package/sdd/{04_verify → 03_verify}/10_test/ui_parity/README.md +0 -0
- /package/sdd/{04_verify → 03_verify}/10_test/ui_parity/loop_runs/.gitkeep +0 -0
- /package/sdd/{04_verify → 03_verify}/10_test/ui_parity/reference/.gitkeep +0 -0
- /package/sdd/{04_verify → 03_verify}/10_test/ui_parity/staged_runs/.gitkeep +0 -0
- /package/sdd/{04_verify → 03_verify}/10_test/verification_harness.md +0 -0
- /package/sdd/99_toolchain/01_automation/assets/{platform_screen_capture → web_screen_capture}/dashboard.png +0 -0
- /package/sdd/99_toolchain/01_automation/assets/{platform_screen_capture → web_screen_capture}/login.png +0 -0
- /package/sdd/99_toolchain/01_automation/assets/{platform_screen_capture → web_screen_capture}/orders.png +0 -0
package/.agent/prd.json
CHANGED
package/.agent/prompt.md
CHANGED
|
@@ -6,7 +6,7 @@ Rules:
|
|
|
6
6
|
3. Lock one reproduction or validation command before editing.
|
|
7
7
|
4. Make one focused change set toward the requested story.
|
|
8
8
|
5. Re-run the requested validation commands immediately.
|
|
9
|
-
6. Update the matching `sdd/02_plan`, `sdd/03_build`, and `sdd/
|
|
9
|
+
6. Update the matching `sdd/02_plan`, `sdd/03_build`, and `sdd/03_verify` current-state artifacts when scope changes.
|
|
10
10
|
7. Update `.agent/prd.json` story status and append one short line to `.agent/progress.txt`.
|
|
11
11
|
8. Stop after this iteration and report:
|
|
12
12
|
- story id
|
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
|
-
│ ├──
|
|
22
|
+
│ ├── web/ # 일반 앱 템플릿
|
|
23
23
|
│ ├── admin/ # 어드민 템플릿
|
|
24
24
|
│ ├── mobile/ # 현장형 모바일 템플릿
|
|
25
25
|
│ └── landing/ # 랜딩 템플릿
|
package/.claude/agents/db-dev.md
CHANGED
|
@@ -23,4 +23,4 @@ Focus:
|
|
|
23
23
|
Rules:
|
|
24
24
|
- Keep template defaults generic.
|
|
25
25
|
- Separate persistence concerns from domain logic.
|
|
26
|
-
- Document backend data surface changes in `sdd/04_data`, `06_iac`, `
|
|
26
|
+
- Document backend data surface changes in `sdd/04_data`, `06_iac`, `03_verify`.
|
|
@@ -22,4 +22,4 @@ Focus:
|
|
|
22
22
|
Rules:
|
|
23
23
|
- Preserve runtime tree readability from `main.tsx` down to route leaves.
|
|
24
24
|
- Prefer product-grade patterns over placeholder scaffolds.
|
|
25
|
-
- Record UI structure changes in `sdd/03_build` and `
|
|
25
|
+
- Record UI structure changes in `sdd/03_build` and `03_verify`.
|
|
@@ -22,5 +22,5 @@ Focus:
|
|
|
22
22
|
|
|
23
23
|
Rules:
|
|
24
24
|
- Verify direct, upstream, downstream, and shared surfaces when applicable.
|
|
25
|
-
- Keep validation evidence in `sdd/
|
|
25
|
+
- Keep validation evidence in `sdd/03_verify`.
|
|
26
26
|
- Treat missing automation as a documented gap, not a silent skip.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sdd
|
|
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/
|
|
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/03_verify`, and record deployment or monitoring in `sdd/05_operate` when rollout happens."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SDD Development
|
|
@@ -14,7 +14,7 @@ This skill enforces one workflow:
|
|
|
14
14
|
2. create or update the task plan under `sdd/02_plan/<section>/`,
|
|
15
15
|
3. perform the code work,
|
|
16
16
|
4. record the current implementation summary in `sdd/03_build`,
|
|
17
|
-
5. record the current retained verification summary in `sdd/
|
|
17
|
+
5. record the current retained verification summary in `sdd/03_verify`,
|
|
18
18
|
6. record deployment and monitoring outcomes in `sdd/05_operate` when rollout happens.
|
|
19
19
|
|
|
20
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.
|
|
@@ -24,14 +24,14 @@ Read [references/section-map.md](references/section-map.md) when you need the ex
|
|
|
24
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
25
|
For screen-spec-driven layout work, inspect the repo's canonical design guide builder first when one exists.
|
|
26
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/
|
|
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/03_verify`.
|
|
28
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
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
30
|
|
|
31
31
|
## When To Use
|
|
32
32
|
|
|
33
33
|
Use this skill when:
|
|
34
|
-
- the repository has `sdd/01_planning`, `02_plan`, `03_build`, `
|
|
34
|
+
- the repository has `sdd/01_planning`, `02_plan`, `03_build`, `03_verify`, `05_operate`,
|
|
35
35
|
- the user gives a development instruction such as `개발해`, `작업해`, `구현해`, `수정해`, `고쳐`, `리팩토링해`, `테스트해`, `배포해`,
|
|
36
36
|
- the user asks for screen/UI work with prompts such as `화면명세서`, `화면설계서`, `화면 설계`, `화면`, `화면 스펙`, `UI`, `디자인`, `디자인 가이드`, `screen spec`, `screen design`, or `design guide`,
|
|
37
37
|
- the user wants work to be traceable through those folders,
|
|
@@ -91,7 +91,7 @@ Do not use this skill for:
|
|
|
91
91
|
- Reusable asset planning records belong under `sdd/01_planning/02_screen/assets/`.
|
|
92
92
|
- Build the runtime asset from the approved PDF/image source instead of hand-tracing or screenshot-cropping it.
|
|
93
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/
|
|
94
|
+
- Record the source, manifest, generated asset path, and any exception in `sdd/03_build` and `sdd/03_verify`.
|
|
95
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
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
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.
|
|
@@ -117,11 +117,11 @@ Do not use this skill for:
|
|
|
117
117
|
|
|
118
118
|
### 5. Record Verification
|
|
119
119
|
|
|
120
|
-
- Record retained verification status in `sdd/
|
|
120
|
+
- Record retained verification status in `sdd/03_verify`.
|
|
121
121
|
- Use:
|
|
122
|
-
- `
|
|
123
|
-
- `
|
|
124
|
-
- `
|
|
122
|
+
- `03_verify/01_feature` for feature verification summaries
|
|
123
|
+
- `03_verify/02_screen` for screen verification summaries
|
|
124
|
+
- `03_verify/03_architecture`, `06_iac`, `10_test` for current retained checks and residual risk
|
|
125
125
|
- Never claim completion without command-level validation evidence.
|
|
126
126
|
- For staged DEV -> PROD rollout, verification must use the same retained full-layer validation surface in both environments.
|
|
127
127
|
- Run the full-layer validation in DEV after deployment and treat it as a hard gate before PROD promotion.
|
|
@@ -43,15 +43,15 @@
|
|
|
43
43
|
|
|
44
44
|
## Verify
|
|
45
45
|
|
|
46
|
-
- `sdd/
|
|
46
|
+
- `sdd/03_verify/01_feature`
|
|
47
47
|
- feature verification summaries
|
|
48
|
-
- `sdd/
|
|
48
|
+
- `sdd/03_verify/02_screen`
|
|
49
49
|
- screen verification summaries
|
|
50
|
-
- `sdd/
|
|
50
|
+
- `sdd/03_verify/03_architecture`
|
|
51
51
|
- governance and structure verification summaries
|
|
52
|
-
- `sdd/
|
|
52
|
+
- `sdd/03_verify/06_iac`
|
|
53
53
|
- delivery/runtime verification summaries
|
|
54
|
-
- `sdd/
|
|
54
|
+
- `sdd/03_verify/10_test`
|
|
55
55
|
- current harness outputs and retained validation references
|
|
56
56
|
|
|
57
57
|
## Operate
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sdd
|
|
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/
|
|
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/03_verify`, and record deployment or monitoring in `sdd/05_operate` when rollout happens."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SDD Development
|
|
@@ -14,7 +14,7 @@ This skill enforces one workflow:
|
|
|
14
14
|
2. create or update the task plan under `sdd/02_plan/<section>/`,
|
|
15
15
|
3. perform the code work,
|
|
16
16
|
4. record the current implementation summary in `sdd/03_build`,
|
|
17
|
-
5. record the current retained verification summary in `sdd/
|
|
17
|
+
5. record the current retained verification summary in `sdd/03_verify`,
|
|
18
18
|
6. record deployment and monitoring outcomes in `sdd/05_operate` when rollout happens.
|
|
19
19
|
|
|
20
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.
|
|
@@ -24,14 +24,14 @@ Read [references/section-map.md](references/section-map.md) when you need the ex
|
|
|
24
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
25
|
For screen-spec-driven layout work, inspect the repo's canonical design guide builder first when one exists.
|
|
26
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/
|
|
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/03_verify`.
|
|
28
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
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
30
|
|
|
31
31
|
## When To Use
|
|
32
32
|
|
|
33
33
|
Use this skill when:
|
|
34
|
-
- the repository has `sdd/01_planning`, `02_plan`, `03_build`, `
|
|
34
|
+
- the repository has `sdd/01_planning`, `02_plan`, `03_build`, `03_verify`, `05_operate`,
|
|
35
35
|
- the user gives a development instruction such as `개발해`, `작업해`, `구현해`, `수정해`, `고쳐`, `리팩토링해`, `테스트해`, `배포해`,
|
|
36
36
|
- the user asks for screen/UI work with prompts such as `화면명세서`, `화면설계서`, `화면 설계`, `화면`, `화면 스펙`, `UI`, `디자인`, `디자인 가이드`, `screen spec`, `screen design`, or `design guide`,
|
|
37
37
|
- the user wants work to be traceable through those folders,
|
|
@@ -91,7 +91,7 @@ Do not use this skill for:
|
|
|
91
91
|
- Reusable asset planning records belong under `sdd/01_planning/02_screen/assets/`.
|
|
92
92
|
- Build the runtime asset from the approved PDF/image source instead of hand-tracing or screenshot-cropping it.
|
|
93
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/
|
|
94
|
+
- Record the source, manifest, generated asset path, and any exception in `sdd/03_build` and `sdd/03_verify`.
|
|
95
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
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
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.
|
|
@@ -117,11 +117,11 @@ Do not use this skill for:
|
|
|
117
117
|
|
|
118
118
|
### 5. Record Verification
|
|
119
119
|
|
|
120
|
-
- Record retained verification status in `sdd/
|
|
120
|
+
- Record retained verification status in `sdd/03_verify`.
|
|
121
121
|
- Use:
|
|
122
|
-
- `
|
|
123
|
-
- `
|
|
124
|
-
- `
|
|
122
|
+
- `03_verify/01_feature` for feature verification summaries
|
|
123
|
+
- `03_verify/02_screen` for screen verification summaries
|
|
124
|
+
- `03_verify/03_architecture`, `06_iac`, `10_test` for current retained checks and residual risk
|
|
125
125
|
- Never claim completion without command-level validation evidence.
|
|
126
126
|
- For staged DEV -> PROD rollout, verification must use the same retained full-layer validation surface in both environments.
|
|
127
127
|
- Run the full-layer validation in DEV after deployment and treat it as a hard gate before PROD promotion.
|
|
@@ -43,15 +43,15 @@
|
|
|
43
43
|
|
|
44
44
|
## Verify
|
|
45
45
|
|
|
46
|
-
- `sdd/
|
|
46
|
+
- `sdd/03_verify/01_feature`
|
|
47
47
|
- feature verification summaries
|
|
48
|
-
- `sdd/
|
|
48
|
+
- `sdd/03_verify/02_screen`
|
|
49
49
|
- screen verification summaries
|
|
50
|
-
- `sdd/
|
|
50
|
+
- `sdd/03_verify/03_architecture`
|
|
51
51
|
- governance and structure verification summaries
|
|
52
|
-
- `sdd/
|
|
52
|
+
- `sdd/03_verify/06_iac`
|
|
53
53
|
- delivery/runtime verification summaries
|
|
54
|
-
- `sdd/
|
|
54
|
+
- `sdd/03_verify/10_test`
|
|
55
55
|
- current harness outputs and retained validation references
|
|
56
56
|
|
|
57
57
|
## Operate
|
package/.env.example
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
SERVER_HTTP_PORT=8000
|
|
2
2
|
CLIENT_LANDING_PORT=3000
|
|
3
|
-
|
|
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
|
-
|
|
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/AGENTS.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
- 회귀 검수 범위는 `sdd/02_plan/10_test/regression_verification.md` 기준으로 direct, upstream, downstream, shared surface까지 선택한다.
|
|
12
12
|
- Playwright exactness suite가 있는 UI surface는 `sdd/99_toolchain/01_automation/run_playwright_exactness.py`를 canonical local gate로 사용한다.
|
|
13
13
|
- shared route, shell, auth/session, component, data contract, generated asset, builder output 변경은 adjacent consumer까지 검수 범위를 넓힌다.
|
|
14
|
-
- 선택한 회귀 범위, 생략 사유, residual risk는 `sdd/02_plan`, `sdd/03_build`, `sdd/
|
|
14
|
+
- 선택한 회귀 범위, 생략 사유, residual risk는 `sdd/02_plan`, `sdd/03_build`, `sdd/03_verify`에 current-state로 남긴다.
|
|
15
15
|
|
|
16
16
|
## Branch And Deploy Policy
|
|
17
17
|
|
|
@@ -57,8 +57,8 @@
|
|
|
57
57
|
|
|
58
58
|
## SDD Verify Governance
|
|
59
59
|
|
|
60
|
-
- `sdd/
|
|
61
|
-
- screen verification summary는 `sdd/
|
|
60
|
+
- `sdd/03_verify`는 feature/screen/architecture/IAC/test별 current verification summary만 유지한다.
|
|
61
|
+
- screen verification summary는 `sdd/03_verify/02_screen/<service>/` 아래 screen-specific 파일로 유지한다.
|
|
62
62
|
- dated gate result나 test evidence log는 남기지 않는다.
|
|
63
63
|
|
|
64
64
|
## SDD Operate Governance
|
|
@@ -75,4 +75,4 @@
|
|
|
75
75
|
- `sdd/03_build`는 실행 이력 요약이 아니라 runtime assembly current-state 문서다.
|
|
76
76
|
- service/screen build summary는 `entry -> provider/router -> auth/session gate -> shell -> route leaf -> backend contract leaf` 순서를 우선 유지한다.
|
|
77
77
|
- `sdd/03_build`에는 dated history, Ralph iteration narrative, run id memo를 남기지 않는다.
|
|
78
|
-
- AST 기반 current-state 적합성은 `scripts/dev/audit_sdd_build_ast.py`와 `sdd/
|
|
78
|
+
- AST 기반 current-state 적합성은 `scripts/dev/audit_sdd_build_ast.py`와 `sdd/03_verify/03_architecture/build_ast_runtime_tree_governance.md`를 기준으로 관리한다.
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
포함 템플릿:
|
|
6
6
|
|
|
7
7
|
- [landing](./client/landing): 마케팅/브랜드 랜딩 패턴
|
|
8
|
-
- [
|
|
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`, `
|
|
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 설명을 기준으로 유지한다.
|
|
@@ -27,6 +27,7 @@ SDD / delivery 원칙:
|
|
|
27
27
|
- 설계, 계획, 구현, 검증, 운영 문서는 모두 `sdd/`가 canonical root다.
|
|
28
28
|
- `sdd/`는 history 누적이 아니라 current-state durable 문서만 유지한다.
|
|
29
29
|
- `02_plan`은 에이전트의 현재 개발 계획을 관리하고, feature는 `<domain>_todos.md`, screen은 `<service>_todos.md`로 유지한다.
|
|
30
|
+
- retained verification summary는 `sdd/03_verify`를 canonical root로 사용한다.
|
|
30
31
|
- 템플릿 runtime baseline은 root `compose.yml` dev-focused stack이고, dedicated host용 DEV(개발계)/PROD compose overlay는 `infra/compose/`에 둔다.
|
|
31
32
|
- current canonical delivery split은 `AWS edge/domain -> OpenStack backend compute -> AWS data plane`이다.
|
|
32
33
|
- DEV(개발계) 반영이 필요한 작업은 `build -> main push -> DEV deploy -> DEV verify` 순서를 기본으로 사용한다.
|
|
@@ -42,20 +43,52 @@ SDD / delivery 원칙:
|
|
|
42
43
|
설치형 scaffold:
|
|
43
44
|
|
|
44
45
|
```bash
|
|
45
|
-
npx agentic-dev
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
npx agentic-dev
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
또는 비대화형으로:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npx agentic-dev init my-app --template template-web
|
|
53
|
+
npx agentic-dev init my-app --template template-web --skip-bootstrap
|
|
52
54
|
```
|
|
53
55
|
|
|
56
|
+
설치 프로세스:
|
|
57
|
+
|
|
58
|
+
1. `npx agentic-dev` 또는 `npx agentic-dev init <dir>`
|
|
59
|
+
- 프로젝트 디렉터리를 입력받는다.
|
|
60
|
+
2. 공개 `say828/template-*` 레포 목록에서 템플릿을 선택한다.
|
|
61
|
+
- repo name 또는 숫자 선택을 모두 지원한다.
|
|
62
|
+
3. 선택한 template repo를 새 폴더로 clone/copy 한다.
|
|
63
|
+
- `template-*` 패턴이 아닌 값은 거부한다.
|
|
64
|
+
4. `.env.example`이 있으면 `.env`를 자동 생성한다.
|
|
65
|
+
5. `pnpm install`과 `pnpm exec playwright install chromium`을 자동 실행한다.
|
|
66
|
+
6. `npm run ui:parity:bootstrap`을 자동 실행한다.
|
|
67
|
+
- `--skip-bootstrap`을 주면 이 단계만 건너뛴다.
|
|
68
|
+
|
|
54
69
|
CLI가 하는 일:
|
|
55
70
|
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
71
|
+
- 공개 `say828/template-*` 레포를 GitHub API로 조회한다.
|
|
72
|
+
- 사용자 입력을 받아 template repo를 선택한다.
|
|
73
|
+
- 선택된 repo를 target directory에 설치하고 `.env`, dependencies, Chromium, bootstrap까지 자동 처리한다.
|
|
74
|
+
- invalid repo name이나 `template-*`가 아닌 값은 즉시 거부한다.
|
|
75
|
+
- `--skip-bootstrap`을 주면 설치까지만 하고 bootstrap은 멈춘다.
|
|
76
|
+
|
|
77
|
+
Parity 명령:
|
|
78
|
+
|
|
79
|
+
- `npm run ui:parity:init`
|
|
80
|
+
- repo contract alias, parity contract, route-gap 산출물을 초기화한다.
|
|
81
|
+
- `npm run ui:parity:bootstrap`
|
|
82
|
+
- `init -> build -> preview -> materialize reference -> plan_audit gate -> proof gate`를 한 번에 실행한다.
|
|
83
|
+
- `npm run ui:parity:proof`
|
|
84
|
+
- 기존 parity contract를 기준으로 proof만 다시 실행한다.
|
|
85
|
+
|
|
86
|
+
주요 parity 산출물:
|
|
87
|
+
|
|
88
|
+
- contract: `sdd/02_plan/10_test/templates/ui_parity_web_contract.yaml`
|
|
89
|
+
- route-gap report: `sdd/02_plan/99_generated/from_planning/ui_parity/`
|
|
90
|
+
- verification summary: `sdd/03_verify/10_test/ui_parity/`
|
|
91
|
+
- preview log: `sdd/03_verify/10_test/ui_parity/web-preview.log`
|
|
59
92
|
|
|
60
93
|
GitHub token 운영:
|
|
61
94
|
|
|
@@ -74,7 +107,7 @@ docker compose up --build
|
|
|
74
107
|
기본 compose 포트:
|
|
75
108
|
|
|
76
109
|
- `client/landing`: `3000`
|
|
77
|
-
- `client/
|
|
110
|
+
- `client/web`: `3001`
|
|
78
111
|
- `client/mobile`: `3002`
|
|
79
112
|
- `client/admin`: `4000`
|
|
80
113
|
- `server/http`: `8000`
|
|
@@ -96,7 +129,7 @@ DB adapter 전환:
|
|
|
96
129
|
Agentic baseline:
|
|
97
130
|
|
|
98
131
|
- `.claude/agents/`: Claude role agent prompt surface
|
|
99
|
-
- `.claude/skills/sdd
|
|
100
|
-
- `.codex/skills/SKILL.md`:
|
|
132
|
+
- `.claude/skills/sdd`: Claude SDD canonical skill
|
|
133
|
+
- `.codex/skills/SKILL.md`: Codex root skill index
|
|
101
134
|
- `.codex/skills/sdd/`: Codex SDD canonical skill
|
|
102
135
|
- `.agent/ralph.sh`, `.agent/ralph-supervisor.sh`: bounded Ralph loop runner
|
package/SDD_SKILL.md
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
- 요구사항과 설계는 `sdd/01_planning`에서 확인한다.
|
|
22
22
|
- 지금 당장 수행 중인 작업 계획은 `sdd/02_plan`에 적는다.
|
|
23
23
|
- 실제 구현 결과는 `sdd/03_build`에 남긴다.
|
|
24
|
-
- 검증 근거와 residual risk는 `sdd/
|
|
24
|
+
- 검증 근거와 residual risk는 `sdd/03_verify`에 남긴다.
|
|
25
25
|
- 실제 배포와 운영 결과가 있었을 때만 `sdd/05_operate`를 갱신한다.
|
|
26
26
|
|
|
27
27
|
즉, 이 스킬의 핵심은 "코드 변경" 자체가 아니라 "코드 변경을 설명하고 검증 가능한 current-state trail"을 같이 만드는 것이다.
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
다음 조건이면 기본적으로 `sdd` 스킬 대상이다.
|
|
32
32
|
|
|
33
|
-
- 저장소가 `sdd/01_planning`, `02_plan`, `03_build`, `
|
|
33
|
+
- 저장소가 `sdd/01_planning`, `02_plan`, `03_build`, `03_verify`, `05_operate` 구조를 사용한다.
|
|
34
34
|
- 사용자가 구현, 수정, 리팩토링, 테스트, 배포, 화면 작업처럼 실제 개발 지시를 한다.
|
|
35
35
|
- 결과물이 코드 변경만으로 끝나면 안 되고, durable plan/build/verify 기록이 남아야 한다.
|
|
36
36
|
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
|
|
151
151
|
### 5. Verify 기록
|
|
152
152
|
|
|
153
|
-
`sdd/
|
|
153
|
+
`sdd/03_verify`는 단순히 "테스트 통과"를 적는 곳이 아니다. 어떤 검증을 했는지, 어떤 범위를 확인했는지, 무엇이 아직 residual risk인지 명확하게 남겨야 한다.
|
|
154
154
|
|
|
155
155
|
중요한 검증 규칙은 다음과 같다.
|
|
156
156
|
|
|
@@ -259,7 +259,7 @@
|
|
|
259
259
|
|
|
260
260
|
이 폴더의 역할은 "지금 구현이 어떤 상태인가"를 설명하는 것이다.
|
|
261
261
|
|
|
262
|
-
### `sdd/
|
|
262
|
+
### `sdd/03_verify`
|
|
263
263
|
|
|
264
264
|
검증 근거와 residual risk를 current-state로 남긴다.
|
|
265
265
|
|
|
@@ -297,7 +297,7 @@ section map은 단순 참고표가 아니라 "이번 작업이 어디에 기록
|
|
|
297
297
|
예를 들면 다음과 같다.
|
|
298
298
|
|
|
299
299
|
- 기능 요구사항이 바뀌면 `01_planning/01_feature`와 `02_plan/01_feature`를 본다.
|
|
300
|
-
- 화면 정렬이 핵심이면 `01_planning/02_screen`, `02_plan/02_screen`, `03_build/02_screen`, `
|
|
300
|
+
- 화면 정렬이 핵심이면 `01_planning/02_screen`, `02_plan/02_screen`, `03_build/02_screen`, `03_verify/02_screen` 축으로 간다.
|
|
301
301
|
- shared governance나 skill rule 정리는 `03_architecture` 축으로 간다.
|
|
302
302
|
- schema/API/integration 변화가 크면 data/api/integration planning과 verify를 함께 본다.
|
|
303
303
|
- rollout이 실제 범위면 `05_operate`까지 completion trail에 들어온다.
|
|
@@ -479,7 +479,7 @@ rollout이 범위일 때 보통 필요한 것은 다음이다.
|
|
|
479
479
|
- 관련 planning을 확인했음
|
|
480
480
|
- `sdd/02_plan`이 현재 작업 기준으로 갱신됨
|
|
481
481
|
- `sdd/03_build`가 구현 결과를 설명함
|
|
482
|
-
- `sdd/
|
|
482
|
+
- `sdd/03_verify`가 검증 근거와 residual risk를 설명함
|
|
483
483
|
- rollout이 실제로 있었다면 `sdd/05_operate`도 갱신됨
|
|
484
484
|
|
|
485
485
|
추가로 아래 조건이 붙을 수 있다.
|
|
@@ -508,7 +508,7 @@ rollout이 범위일 때 보통 필요한 것은 다음이다.
|
|
|
508
508
|
- asset recipe wrapper: `sdd/99_toolchain/01_automation/build_asset_recipes.py`
|
|
509
509
|
- screen spec generator: `sdd/99_toolchain/01_automation/build_screen_spec_pdf.py`
|
|
510
510
|
- capture tooling: `sdd/99_toolchain/01_automation/capture_screen_assets.mjs`
|
|
511
|
-
- verification harness baseline: `sdd/
|
|
511
|
+
- verification harness baseline: `sdd/03_verify/10_test/verification_harness.md`
|
|
512
512
|
- verification strategy baseline: `sdd/02_plan/10_test/verification_strategy.md`
|
|
513
513
|
- regression scope baseline: `sdd/02_plan/10_test/regression_verification.md`
|
|
514
514
|
|
package/bin/agentic-dev.mjs
CHANGED
|
@@ -4,17 +4,19 @@ import process from "node:process";
|
|
|
4
4
|
import { createInterface } from "node:readline/promises";
|
|
5
5
|
import {
|
|
6
6
|
ensureTargetDir,
|
|
7
|
-
|
|
7
|
+
fetchTemplateRepos,
|
|
8
|
+
installTemplateRepo,
|
|
8
9
|
parseArgs,
|
|
9
|
-
|
|
10
|
+
resolveTemplateRepo,
|
|
11
|
+
selectTemplateRepo,
|
|
10
12
|
usage,
|
|
11
|
-
validateTemplate,
|
|
12
13
|
} from "../lib/scaffold.mjs";
|
|
13
14
|
|
|
14
|
-
async function promptForMissing(options) {
|
|
15
|
+
async function promptForMissing(options, repos) {
|
|
15
16
|
if (options.yes && (!options.targetDir || !options.template)) {
|
|
16
|
-
throw new Error("`--yes` requires both target directory and template.");
|
|
17
|
+
throw new Error("`--yes` requires both target directory and template repo.");
|
|
17
18
|
}
|
|
19
|
+
|
|
18
20
|
if (options.targetDir && options.template) {
|
|
19
21
|
return options;
|
|
20
22
|
}
|
|
@@ -25,12 +27,31 @@ async function promptForMissing(options) {
|
|
|
25
27
|
});
|
|
26
28
|
|
|
27
29
|
try {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
while (!options.targetDir) {
|
|
31
|
+
const answer = await rl.question("Project directory: ");
|
|
32
|
+
options.targetDir = answer.trim();
|
|
33
|
+
if (!options.targetDir) {
|
|
34
|
+
console.log("Project directory cannot be empty.");
|
|
35
|
+
}
|
|
30
36
|
}
|
|
37
|
+
|
|
31
38
|
if (!options.template) {
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
console.log("");
|
|
40
|
+
console.log(`Public template repos from ${options.owner}:`);
|
|
41
|
+
repos.forEach((repo, index) => {
|
|
42
|
+
const summary = repo.description ? ` - ${repo.description}` : "";
|
|
43
|
+
console.log(` ${index + 1}. ${repo.name}${summary}`);
|
|
44
|
+
});
|
|
45
|
+
console.log("");
|
|
46
|
+
while (!options.template) {
|
|
47
|
+
const answer = await rl.question("Select template repo (number or repo name): ");
|
|
48
|
+
try {
|
|
49
|
+
options.template = selectTemplateRepo(answer, repos).name;
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.log(error.message);
|
|
52
|
+
options.template = "";
|
|
53
|
+
}
|
|
54
|
+
}
|
|
34
55
|
}
|
|
35
56
|
} finally {
|
|
36
57
|
rl.close();
|
|
@@ -40,12 +61,20 @@ async function promptForMissing(options) {
|
|
|
40
61
|
}
|
|
41
62
|
|
|
42
63
|
function printSuccess(result) {
|
|
43
|
-
console.log(`Scaffolded agentic-dev template: ${result.template}`);
|
|
44
|
-
console.log(`Destination: ${result.destinationRoot}`);
|
|
45
64
|
console.log("");
|
|
46
|
-
console.log(
|
|
47
|
-
|
|
48
|
-
|
|
65
|
+
console.log(`Initialized template repo: ${result.templateRepo}`);
|
|
66
|
+
console.log(`Destination: ${result.destinationRoot}`);
|
|
67
|
+
if (result.executedSteps.length > 0) {
|
|
68
|
+
console.log("Completed:");
|
|
69
|
+
for (const step of result.executedSteps) {
|
|
70
|
+
console.log(` ${step}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (result.nextSteps.length > 0) {
|
|
74
|
+
console.log("Next steps:");
|
|
75
|
+
for (const step of result.nextSteps) {
|
|
76
|
+
console.log(` ${step}`);
|
|
77
|
+
}
|
|
49
78
|
}
|
|
50
79
|
}
|
|
51
80
|
|
|
@@ -80,12 +109,18 @@ async function main() {
|
|
|
80
109
|
}
|
|
81
110
|
|
|
82
111
|
try {
|
|
83
|
-
|
|
84
|
-
|
|
112
|
+
const repos = await fetchTemplateRepos({ owner: options.owner });
|
|
113
|
+
if (repos.length === 0) {
|
|
114
|
+
throw new Error(`No public template-* repos found for ${options.owner}.`);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
options = await promptForMissing(options, repos);
|
|
118
|
+
const selectedRepo = resolveTemplateRepo(options.template, repos);
|
|
85
119
|
const destinationRoot = ensureTargetDir(options.targetDir, { force: options.force });
|
|
86
|
-
const result =
|
|
120
|
+
const result = installTemplateRepo({
|
|
87
121
|
destinationRoot: path.resolve(destinationRoot),
|
|
88
|
-
|
|
122
|
+
templateRepo: selectedRepo,
|
|
123
|
+
skipBootstrap: options.skipBootstrap,
|
|
89
124
|
});
|
|
90
125
|
printSuccess(result);
|
|
91
126
|
} catch (error) {
|
|
@@ -23,7 +23,7 @@ export default {
|
|
|
23
23
|
id: screen.id,
|
|
24
24
|
title: screen.title,
|
|
25
25
|
route: routeMap.get(screen.id) ?? "/",
|
|
26
|
-
referenceImage: `sdd/
|
|
26
|
+
referenceImage: `sdd/03_verify/10_test/ui_parity/reference/${screen.id}.png`,
|
|
27
27
|
readySelector: "body",
|
|
28
28
|
readyTimeoutMs: 10000,
|
|
29
29
|
tags: ["template", "admin"],
|
|
@@ -23,7 +23,7 @@ export default {
|
|
|
23
23
|
id: screen.id,
|
|
24
24
|
title: screen.title,
|
|
25
25
|
route: routeMap.get(screen.id) ?? "/",
|
|
26
|
-
referenceImage: `sdd/
|
|
26
|
+
referenceImage: `sdd/03_verify/10_test/ui_parity/reference/${screen.id}.png`,
|
|
27
27
|
readySelector: "body",
|
|
28
28
|
readyTimeoutMs: 10000,
|
|
29
29
|
tags: ["template", "landing"],
|
|
@@ -23,7 +23,7 @@ export default {
|
|
|
23
23
|
id: screen.id,
|
|
24
24
|
title: screen.title,
|
|
25
25
|
route: routeMap.get(screen.id) ?? "/",
|
|
26
|
-
referenceImage: `sdd/
|
|
26
|
+
referenceImage: `sdd/03_verify/10_test/ui_parity/reference/${screen.id}.png`,
|
|
27
27
|
readySelector: "body",
|
|
28
28
|
readyTimeoutMs: 10000,
|
|
29
29
|
tags: ["template", "mobile"],
|
|
@@ -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/
|
|
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-
|
|
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/
|
|
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
|
-
#
|
|
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, `
|
|
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/
|
|
47
|
+
이 템플릿은 repo root의 `sdd/99_toolchain/01_automation` 도구를 사용하고, `client/web/scripts/ui-parity-web-adapter.mjs`는 앱별 adapter 예시다.
|