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
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
- parity harness나 build check는 회귀 검수의 일부일 뿐이고, 실제 완료 기준은 선택한 regression surface 전체에 대한 retained evidence다.
|
|
45
45
|
- Playwright exactness suite가 있는 surface는 `run_playwright_exactness.py`를 canonical local gate로 사용한다.
|
|
46
46
|
- shared route, shell, auth/session, shared component, API/data contract, generated asset, builder output 변경은 adjacent consumer까지 검수 범위를 넓힌다.
|
|
47
|
-
- 아직 자동화가 없는 회귀 surface는 command/manual verification으로 메우고, automation gap은 `sdd/03_build`, `sdd/
|
|
47
|
+
- 아직 자동화가 없는 회귀 surface는 command/manual verification으로 메우고, automation gap은 `sdd/03_build`, `sdd/03_verify`에 residual risk로 남긴다.
|
|
48
48
|
- Browser Use나 수동 시각 점검은 Playwright exactness gate를 대체하지 않고 보강/진단 용도로만 사용한다.
|
|
49
49
|
|
|
50
50
|
## Asset Recipe Rule
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
- design guide / asset / screen spec baseline 확인
|
|
73
73
|
- `python3 sdd/99_toolchain/01_automation/run_playwright_exactness.py --suite <suite-id> --base-url <url>`
|
|
74
74
|
- 필요하면 `--api-base-url`, `--browser`, `--grep`를 추가한다.
|
|
75
|
-
- 실행 결과와 artifact path를 `sdd/
|
|
75
|
+
- 실행 결과와 artifact path를 `sdd/03_verify` current summary에 기록한다.
|
|
76
76
|
- 시작점 예시는 [`../03_templates/playwright_exactness_manifest.example.py`](../03_templates/playwright_exactness_manifest.example.py)를 따른다.
|
|
@@ -9,18 +9,18 @@
|
|
|
9
9
|
"canonical_targets_dir": "sdd/02_plan"
|
|
10
10
|
},
|
|
11
11
|
"frontend": {
|
|
12
|
-
"default_target": "
|
|
12
|
+
"default_target": "web",
|
|
13
13
|
"targets": {
|
|
14
|
-
"
|
|
15
|
-
"dir": "client/
|
|
16
|
-
"adapter_path": "client/
|
|
17
|
-
"screens_path": "client/
|
|
18
|
-
"routes_path": "client/
|
|
14
|
+
"web": {
|
|
15
|
+
"dir": "client/web",
|
|
16
|
+
"adapter_path": "client/web/scripts/ui-parity-web-adapter.mjs",
|
|
17
|
+
"screens_path": "client/web/src/lib/specScreens.json",
|
|
18
|
+
"routes_path": "client/web/src/lib/specRouteCatalog.json",
|
|
19
19
|
"preview_url": "http://127.0.0.1:4301",
|
|
20
|
-
"parity_contract_path": "sdd/02_plan/10_test/templates/
|
|
21
|
-
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/
|
|
22
|
-
"route_gap_markdown_output": "sdd/02_plan/99_generated/from_planning/ui_parity/
|
|
23
|
-
"proof_output": "sdd/
|
|
20
|
+
"parity_contract_path": "sdd/02_plan/10_test/templates/ui_parity_web_contract.yaml",
|
|
21
|
+
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_web_route_gap_report.json",
|
|
22
|
+
"route_gap_markdown_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_web_route_gap_report.md",
|
|
23
|
+
"proof_output": "sdd/03_verify/10_test/ui_parity/templates_web_agentic_dev_latest.json"
|
|
24
24
|
},
|
|
25
25
|
"mobile": {
|
|
26
26
|
"dir": "client/mobile",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"parity_contract_path": "sdd/02_plan/10_test/templates/ui_parity_mobile_contract.yaml",
|
|
32
32
|
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_mobile_route_gap_report.json",
|
|
33
33
|
"route_gap_markdown_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_mobile_route_gap_report.md",
|
|
34
|
-
"proof_output": "sdd/
|
|
34
|
+
"proof_output": "sdd/03_verify/10_test/ui_parity/templates_mobile_agentic_dev_latest.json"
|
|
35
35
|
},
|
|
36
36
|
"admin": {
|
|
37
37
|
"dir": "client/admin",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"parity_contract_path": "sdd/02_plan/10_test/templates/ui_parity_admin_contract.yaml",
|
|
43
43
|
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_admin_route_gap_report.json",
|
|
44
44
|
"route_gap_markdown_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_admin_route_gap_report.md",
|
|
45
|
-
"proof_output": "sdd/
|
|
45
|
+
"proof_output": "sdd/03_verify/10_test/ui_parity/templates_admin_agentic_dev_latest.json"
|
|
46
46
|
},
|
|
47
47
|
"landing": {
|
|
48
48
|
"dir": "client/landing",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"parity_contract_path": "sdd/02_plan/10_test/templates/ui_parity_landing_contract.yaml",
|
|
54
54
|
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_landing_route_gap_report.json",
|
|
55
55
|
"route_gap_markdown_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_landing_route_gap_report.md",
|
|
56
|
-
"proof_output": "sdd/
|
|
56
|
+
"proof_output": "sdd/03_verify/10_test/ui_parity/templates_landing_agentic_dev_latest.json"
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
},
|
|
@@ -65,8 +65,8 @@
|
|
|
65
65
|
"verify_dev": "echo 'replace verify_dev command' >&2"
|
|
66
66
|
},
|
|
67
67
|
"artifacts": {
|
|
68
|
-
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/
|
|
69
|
-
"proof_output": "sdd/
|
|
68
|
+
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_web_route_gap_report.json",
|
|
69
|
+
"proof_output": "sdd/03_verify/10_test/ui_parity/replace_agentic_dev_latest.json"
|
|
70
70
|
},
|
|
71
71
|
"notes": [
|
|
72
72
|
"Replace the commands and proof output path after cloning the template.",
|
|
@@ -47,7 +47,7 @@ PY
|
|
|
47
47
|
target_name="$(read_target_value "name")"
|
|
48
48
|
target_dir="$(read_target_value "target.dir")"
|
|
49
49
|
preview_url="$(read_target_value "target.preview_url")"
|
|
50
|
-
preview_log="${repo_root}/sdd/
|
|
50
|
+
preview_log="${repo_root}/sdd/03_verify/10_test/ui_parity/${target_name}-preview.log"
|
|
51
51
|
preview_pid=""
|
|
52
52
|
|
|
53
53
|
cleanup() {
|
|
@@ -9,18 +9,18 @@
|
|
|
9
9
|
"canonical_targets_dir": "sdd/02_plan"
|
|
10
10
|
},
|
|
11
11
|
"frontend": {
|
|
12
|
-
"default_target": "
|
|
12
|
+
"default_target": "web",
|
|
13
13
|
"targets": {
|
|
14
|
-
"
|
|
15
|
-
"dir": "client/
|
|
16
|
-
"adapter_path": "client/
|
|
17
|
-
"screens_path": "client/
|
|
18
|
-
"routes_path": "client/
|
|
14
|
+
"web": {
|
|
15
|
+
"dir": "client/web",
|
|
16
|
+
"adapter_path": "client/web/scripts/ui-parity-web-adapter.mjs",
|
|
17
|
+
"screens_path": "client/web/src/lib/specScreens.json",
|
|
18
|
+
"routes_path": "client/web/src/lib/specRouteCatalog.json",
|
|
19
19
|
"preview_url": "http://127.0.0.1:4301",
|
|
20
|
-
"parity_contract_path": "sdd/02_plan/10_test/templates/
|
|
21
|
-
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/
|
|
22
|
-
"route_gap_markdown_output": "sdd/02_plan/99_generated/from_planning/ui_parity/
|
|
23
|
-
"proof_output": "sdd/
|
|
20
|
+
"parity_contract_path": "sdd/02_plan/10_test/templates/ui_parity_web_contract.yaml",
|
|
21
|
+
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_web_route_gap_report.json",
|
|
22
|
+
"route_gap_markdown_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_web_route_gap_report.md",
|
|
23
|
+
"proof_output": "sdd/03_verify/10_test/ui_parity/templates_web_agentic_dev_latest.json"
|
|
24
24
|
},
|
|
25
25
|
"mobile": {
|
|
26
26
|
"dir": "client/mobile",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"parity_contract_path": "sdd/02_plan/10_test/templates/ui_parity_mobile_contract.yaml",
|
|
32
32
|
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_mobile_route_gap_report.json",
|
|
33
33
|
"route_gap_markdown_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_mobile_route_gap_report.md",
|
|
34
|
-
"proof_output": "sdd/
|
|
34
|
+
"proof_output": "sdd/03_verify/10_test/ui_parity/templates_mobile_agentic_dev_latest.json"
|
|
35
35
|
},
|
|
36
36
|
"admin": {
|
|
37
37
|
"dir": "client/admin",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"parity_contract_path": "sdd/02_plan/10_test/templates/ui_parity_admin_contract.yaml",
|
|
43
43
|
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_admin_route_gap_report.json",
|
|
44
44
|
"route_gap_markdown_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_admin_route_gap_report.md",
|
|
45
|
-
"proof_output": "sdd/
|
|
45
|
+
"proof_output": "sdd/03_verify/10_test/ui_parity/templates_admin_agentic_dev_latest.json"
|
|
46
46
|
},
|
|
47
47
|
"landing": {
|
|
48
48
|
"dir": "client/landing",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"parity_contract_path": "sdd/02_plan/10_test/templates/ui_parity_landing_contract.yaml",
|
|
54
54
|
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_landing_route_gap_report.json",
|
|
55
55
|
"route_gap_markdown_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_landing_route_gap_report.md",
|
|
56
|
-
"proof_output": "sdd/
|
|
56
|
+
"proof_output": "sdd/03_verify/10_test/ui_parity/templates_landing_agentic_dev_latest.json"
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
},
|
|
@@ -62,11 +62,11 @@
|
|
|
62
62
|
"build": "bash sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh build .",
|
|
63
63
|
"proof": "bash sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh proof .",
|
|
64
64
|
"deploy_dev": "echo 'configure deploy_dev command in sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json for the cloned service' >&2",
|
|
65
|
-
"verify_dev": "test -f \"$PWD/sdd/
|
|
65
|
+
"verify_dev": "test -f \"$PWD/sdd/03_verify/10_test/ui_parity/templates_web_agentic_dev_latest.json\" && echo verify-dev-placeholder-ok"
|
|
66
66
|
},
|
|
67
67
|
"artifacts": {
|
|
68
|
-
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/
|
|
69
|
-
"proof_output": "sdd/
|
|
68
|
+
"route_gap_output": "sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_web_route_gap_report.json",
|
|
69
|
+
"proof_output": "sdd/03_verify/10_test/ui_parity/templates_web_agentic_dev_latest.json"
|
|
70
70
|
},
|
|
71
71
|
"notes": [
|
|
72
72
|
"This template contract is intentionally self-contained and points at repo-local 99_toolchain automation.",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
- deterministic proof:
|
|
47
47
|
- `proof`는 strict parity 또는 동등한 결정적 UI 증거를 남겨야 한다.
|
|
48
48
|
- evidence-first:
|
|
49
|
-
- 성공/실패는 콘솔 로그가 아니라 `sdd/
|
|
49
|
+
- 성공/실패는 콘솔 로그가 아니라 `sdd/03_verify/...` 산출물로 판단한다.
|
|
50
50
|
- deploy discipline:
|
|
51
51
|
- DEV 반영이 필요한 작업은 `main push -> DEV deploy -> DEV verify`를 따른다.
|
|
52
52
|
- external integration boundary:
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"verify_dev": "<repo-local DEV verify command>"
|
|
97
97
|
},
|
|
98
98
|
"artifacts": {
|
|
99
|
-
"proof_output": "sdd/
|
|
99
|
+
"proof_output": "sdd/03_verify/10_test/<tool>/<latest>.json"
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
```
|
|
@@ -118,7 +118,7 @@ Frontend-capable template에는 다음 두 층이 있어야 한다.
|
|
|
118
118
|
- toolchain-owned engine:
|
|
119
119
|
- `sdd/99_toolchain/01_automation/ui-parity/*`
|
|
120
120
|
- app-specific adapter:
|
|
121
|
-
- `frontend/scripts/ui-parity-
|
|
121
|
+
- `frontend/scripts/ui-parity-web-adapter.mjs`
|
|
122
122
|
|
|
123
123
|
참조 구현 기준으로 초기 이관 대상 스크립트 묶음은 다음과 같다.
|
|
124
124
|
|
|
@@ -161,7 +161,7 @@ Frontend-capable template에는 다음 두 층이 있어야 한다.
|
|
|
161
161
|
|
|
162
162
|
- `sdd/02_plan/10_test/<service>/ui_parity_<target>_contract.yaml`
|
|
163
163
|
- `sdd/02_plan/99_generated/from_planning/ui_parity/`
|
|
164
|
-
- `sdd/
|
|
164
|
+
- `sdd/03_verify/10_test/ui_parity/`
|
|
165
165
|
|
|
166
166
|
권장 evidence 구조:
|
|
167
167
|
|
|
@@ -224,7 +224,7 @@ Frontend-capable template에는 다음 두 층이 있어야 한다.
|
|
|
224
224
|
- `sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json`
|
|
225
225
|
- `.codex/agentic-dev.json`
|
|
226
226
|
- `.claude/agentic-dev.json`
|
|
227
|
-
- `frontend/scripts/ui-parity-
|
|
227
|
+
- `frontend/scripts/ui-parity-web-adapter.mjs`
|
|
228
228
|
- app-side collector upload adapter
|
|
229
229
|
- repo-local loop/sweep scripts
|
|
230
230
|
- evidence path declarations
|
|
@@ -260,16 +260,16 @@ Frontend-capable template에는 다음 두 층이 있어야 한다.
|
|
|
260
260
|
- `sdd/99_toolchain/01_automation/agentic-dev/` vendored runtime
|
|
261
261
|
- `sdd/99_toolchain/01_automation/ui-parity/` parity tooling
|
|
262
262
|
- optional `scripts/dev/` parity orchestration wrappers
|
|
263
|
-
- `sdd/02_plan/10_test/templates/
|
|
263
|
+
- `sdd/02_plan/10_test/templates/ui_parity_web_contract.template.yaml`
|
|
264
264
|
- `sdd/02_plan/99_generated/from_planning/ui_parity/.gitkeep`
|
|
265
|
-
- `sdd/
|
|
265
|
+
- `sdd/03_verify/10_test/ui_parity/.gitkeep`
|
|
266
266
|
|
|
267
267
|
### Frontend template
|
|
268
268
|
|
|
269
|
-
`templates/client/
|
|
269
|
+
`templates/client/web` 또는 별도 frontend template에는 다음을 넣는다.
|
|
270
270
|
|
|
271
271
|
- parity npm scripts
|
|
272
|
-
- `client/
|
|
272
|
+
- `client/web/scripts/ui-parity-web-adapter.mjs`
|
|
273
273
|
- minimal screen catalog / route catalog placeholder
|
|
274
274
|
- proof output path convention
|
|
275
275
|
|
|
@@ -11,7 +11,7 @@ const require = createRequire(import.meta.url);
|
|
|
11
11
|
function loadPlaywright() {
|
|
12
12
|
const resolutionRoots = [
|
|
13
13
|
ROOT,
|
|
14
|
-
path.join(ROOT, "client/
|
|
14
|
+
path.join(ROOT, "client/web"),
|
|
15
15
|
path.join(ROOT, "client/admin"),
|
|
16
16
|
path.join(ROOT, "client/mobile"),
|
|
17
17
|
path.join(ROOT, "client/landing"),
|
|
@@ -32,12 +32,12 @@ function loadPlaywright() {
|
|
|
32
32
|
const { chromium } = loadPlaywright();
|
|
33
33
|
|
|
34
34
|
const manifests = {
|
|
35
|
-
|
|
35
|
+
web: {
|
|
36
36
|
baseUrl: "http://127.0.0.1:3001",
|
|
37
37
|
apiBase: "http://127.0.0.1:8000/api/v1",
|
|
38
|
-
storageKey: "
|
|
38
|
+
storageKey: "web.auth.token",
|
|
39
39
|
credentials: { email: "admin@example.com", password: "<CHANGE_ME>" },
|
|
40
|
-
assetDir: path.join(ROOT, "sdd/99_toolchain/01_automation/assets/
|
|
40
|
+
assetDir: path.join(ROOT, "sdd/99_toolchain/01_automation/assets/web_screen_capture"),
|
|
41
41
|
screens: [
|
|
42
42
|
{ route: "/login", asset: "login.png", requiresAuth: false },
|
|
43
43
|
{ route: "/", asset: "dashboard.png", requiresAuth: true },
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
|
|
25
25
|
- UI parity와 `agentic-dev` 강제 흐름은 [agentic-parity-harness-design.md](agentic-parity-harness-design.md)에 정의된 계약을 따른다.
|
|
26
26
|
- parity 실행 도구 자체의 소유 위치와 계층 분리는 [parity-execution-tooling-design.md](parity-execution-tooling-design.md)를 따른다.
|
|
27
|
-
- 프론트 템플릿 복제 직후에는 `bash sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh .
|
|
27
|
+
- 프론트 템플릿 복제 직후에는 `bash sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh . web`을 먼저 실행해 repo contract와 route-gap/generated parity 기초 자산을 만든다.
|
|
28
28
|
- `mobile`도 같은 parity target 규약을 따르며 `run_frontend_target.sh ... mobile`으로 동일하게 실행한다.
|
|
29
|
-
- 첫 실행 검증은 `bash sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh .
|
|
29
|
+
- 첫 실행 검증은 `bash sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh . web`으로 route-gap gate와 proof gate까지 닫는다.
|
|
30
30
|
|
|
31
31
|
## Sanitization Rules
|
|
32
32
|
|
|
@@ -109,7 +109,7 @@ UI parity 관련 `실행 도구`는 `sdd/99_toolchain/01_automation`의 소유
|
|
|
109
109
|
|
|
110
110
|
위치:
|
|
111
111
|
|
|
112
|
-
- `frontend/scripts/ui-parity-
|
|
112
|
+
- `frontend/scripts/ui-parity-web-adapter.mjs`
|
|
113
113
|
- 또는 `frontend/src/lib/ui-parity/*`
|
|
114
114
|
|
|
115
115
|
역할:
|
|
@@ -158,11 +158,11 @@ sdd/
|
|
|
158
158
|
02_plan/
|
|
159
159
|
10_test/
|
|
160
160
|
<service>/
|
|
161
|
-
|
|
161
|
+
ui_parity_web_contract.yaml
|
|
162
162
|
99_generated/
|
|
163
163
|
from_planning/
|
|
164
164
|
ui_parity/
|
|
165
|
-
|
|
165
|
+
03_verify/
|
|
166
166
|
10_test/
|
|
167
167
|
ui_parity/
|
|
168
168
|
99_toolchain/
|
|
@@ -184,7 +184,7 @@ sdd/
|
|
|
184
184
|
|
|
185
185
|
frontend/
|
|
186
186
|
scripts/
|
|
187
|
-
ui-parity-
|
|
187
|
+
ui-parity-web-adapter.mjs
|
|
188
188
|
src/
|
|
189
189
|
lib/
|
|
190
190
|
specScreens.json
|
|
@@ -209,12 +209,12 @@ frontend/
|
|
|
209
209
|
- `sdd/99_toolchain/01_automation/agentic-dev/run_repo_phase.sh`가 contract를 읽는다.
|
|
210
210
|
- contract의 `proof`는 `sdd/99_toolchain/01_automation/ui-parity/cli/run-proof`를 호출한다.
|
|
211
211
|
- `run-proof`는 app adapter를 읽고 strict parity를 실행한다.
|
|
212
|
-
- 결과는 `sdd/
|
|
212
|
+
- 결과는 `sdd/03_verify/10_test/ui_parity/...`에 저장한다.
|
|
213
213
|
|
|
214
214
|
예시 shape:
|
|
215
215
|
|
|
216
216
|
```json
|
|
217
|
-
"proof": "node sdd/99_toolchain/01_automation/ui-parity/cli/run-proof.mjs --adapter frontend/scripts/ui-parity-
|
|
217
|
+
"proof": "node sdd/99_toolchain/01_automation/ui-parity/cli/run-proof.mjs --adapter frontend/scripts/ui-parity-web-adapter.mjs --contract sdd/02_plan/10_test/<service>/ui_parity_web_contract.yaml --out sdd/03_verify/10_test/ui_parity/<service>_agentic_dev_latest.json"
|
|
218
218
|
```
|
|
219
219
|
|
|
220
220
|
### deploy_dev
|
|
@@ -307,7 +307,7 @@ agentic contract는 parity 내부 로직을 몰라도 된다.
|
|
|
307
307
|
현재 reference implementation에서 템플릿 정본으로 승격할 때는 다음 순서를 권장한다.
|
|
308
308
|
|
|
309
309
|
1. `frontend/scripts/ui-parity-*.mjs` 중 app-agnostic 로직을 `sdd/99_toolchain/01_automation/ui-parity/`로 이동
|
|
310
|
-
2. app-specific 로직만 `frontend/scripts/ui-parity-
|
|
310
|
+
2. app-specific 로직만 `frontend/scripts/ui-parity-web-adapter.mjs`로 축소
|
|
311
311
|
3. `agentic-dev` runner를 `sdd/99_toolchain/01_automation/agentic-dev/`로 이동
|
|
312
312
|
4. `sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json`은 새 toolchain CLI를 호출하도록 단순화
|
|
313
313
|
5. `scripts/dev/*parity*.sh`는 필요할 때만 repo별로 추가하고, base template에는 포함하지 않는다
|
|
@@ -44,26 +44,26 @@ def screen(
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
SCREEN_MANIFESTS = {
|
|
47
|
-
"
|
|
48
|
-
"title": "Templates
|
|
49
|
-
"service_label": "
|
|
50
|
-
"output": str(SCREEN_DIR / "
|
|
51
|
-
"asset_dir": str(ASSET_DIR / "
|
|
47
|
+
"web": {
|
|
48
|
+
"title": "Templates Web Screen Spec",
|
|
49
|
+
"service_label": "web",
|
|
50
|
+
"output": str(SCREEN_DIR / "web_screen_spec.pdf"),
|
|
51
|
+
"asset_dir": str(ASSET_DIR / "web_screen_capture"),
|
|
52
52
|
"base_url": "http://127.0.0.1:3001",
|
|
53
53
|
"api_base": "http://127.0.0.1:8000/api/v1",
|
|
54
|
-
"storage_key": "
|
|
54
|
+
"storage_key": "web.auth.token",
|
|
55
55
|
"capture_policy": DESKTOP_CAPTURE_POLICY,
|
|
56
56
|
"trim_background": False,
|
|
57
|
-
"cover_note": "첫 페이지는
|
|
57
|
+
"cover_note": "첫 페이지는 web 화면코드 인덱스다. 이후 페이지는 좌측 화면 캡처와 우측 번호형 기능 테이블을 함께 제공한다.",
|
|
58
58
|
"source_refs": [
|
|
59
|
-
{"label": "implementation", "path": "client/
|
|
60
|
-
{"label": "implementation", "path": "client/
|
|
61
|
-
{"label": "capture assets", "path": "sdd/99_toolchain/01_automation/assets/
|
|
59
|
+
{"label": "implementation", "path": "client/web/src/app/App.tsx"},
|
|
60
|
+
{"label": "implementation", "path": "client/web/src/pages"},
|
|
61
|
+
{"label": "capture assets", "path": "sdd/99_toolchain/01_automation/assets/web_screen_capture"},
|
|
62
62
|
],
|
|
63
63
|
"screens": [
|
|
64
64
|
screen(
|
|
65
|
-
code="
|
|
66
|
-
name="
|
|
65
|
+
code="WEB-S001",
|
|
66
|
+
name="Web Login",
|
|
67
67
|
route="/login",
|
|
68
68
|
access="public",
|
|
69
69
|
features=["AUT-F001", "AUT-F002"],
|
|
@@ -71,14 +71,14 @@ SCREEN_MANIFESTS = {
|
|
|
71
71
|
requires_auth=False,
|
|
72
72
|
callouts=[
|
|
73
73
|
((0.25, 0.31), "서비스 소개 카피", "실제 API 인증 흐름과 로그인 이후 앱 셸 진입 방식을 좌측 설명 영역에서 안내한다."),
|
|
74
|
-
((0.78, 0.21), "Sign in 헤더", "
|
|
74
|
+
((0.78, 0.21), "Sign in 헤더", "web 로그인 목적과 예시 계정 프리셋 상태를 보여준다."),
|
|
75
75
|
((0.78, 0.38), "자격 증명 입력", "이메일과 비밀번호를 입력하고 오류 상태를 같은 카드 안에서 확인한다."),
|
|
76
76
|
((0.78, 0.48), "Continue CTA", "인증 성공 시 저장된 토큰으로 `auth/me`를 다시 호출한 뒤 보호 라우트로 이동한다."),
|
|
77
77
|
],
|
|
78
78
|
),
|
|
79
79
|
screen(
|
|
80
|
-
code="
|
|
81
|
-
name="
|
|
80
|
+
code="WEB-S002",
|
|
81
|
+
name="Web Dashboard",
|
|
82
82
|
route="/",
|
|
83
83
|
access="protected",
|
|
84
84
|
features=["AUT-F002", "ORD-F001"],
|
|
@@ -92,8 +92,8 @@ SCREEN_MANIFESTS = {
|
|
|
92
92
|
],
|
|
93
93
|
),
|
|
94
94
|
screen(
|
|
95
|
-
code="
|
|
96
|
-
name="
|
|
95
|
+
code="WEB-S003",
|
|
96
|
+
name="Web Orders",
|
|
97
97
|
route="/orders",
|
|
98
98
|
access="protected",
|
|
99
99
|
features=["AUT-F002", "ORD-F002"],
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
복제 직후 초기화:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
bash sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh .
|
|
16
|
+
bash sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh . web
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
이 명령은 다음을 생성한다.
|
|
@@ -21,21 +21,21 @@ bash sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh . platfo
|
|
|
21
21
|
- `sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json`
|
|
22
22
|
- `.codex/agentic-dev.json`
|
|
23
23
|
- `.claude/agentic-dev.json`
|
|
24
|
-
- `sdd/02_plan/10_test/templates/
|
|
24
|
+
- `sdd/02_plan/10_test/templates/ui_parity_web_contract.yaml`
|
|
25
25
|
- `sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_route_gap_report.json`
|
|
26
26
|
- `sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_route_gap_report.md`
|
|
27
27
|
|
|
28
28
|
대상 프론트 선택:
|
|
29
29
|
|
|
30
30
|
- 기본 대상은 `sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json`의 `frontend.default_target`에서 결정한다.
|
|
31
|
-
- `
|
|
32
|
-
예시 `dir` 값은 `client/
|
|
31
|
+
- `web`, `mobile`, `admin`, `landing` 같은 각 프론트는 `frontend.targets.<id>`에 `dir`, `adapter_path`, `screens_path`, `routes_path`, `preview_url`을 선언한다.
|
|
32
|
+
예시 `dir` 값은 `client/web`처럼 실제 디렉터리 경로를 가리킨다.
|
|
33
33
|
- `init_frontend_parity.sh`, `bootstrap_frontend_parity.sh`, `run_frontend_target.sh`는 모두 이 metadata만 읽고 동작한다.
|
|
34
34
|
|
|
35
35
|
첫 proof 부트스트랩:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
bash sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh .
|
|
38
|
+
bash sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh . web
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
이 명령은 preview 서버를 띄운 뒤 reference materialization, route-gap gate, proof gate까지 수행한다.
|
|
@@ -45,13 +45,13 @@ bash sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh . p
|
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
47
|
node sdd/99_toolchain/01_automation/ui-parity/cli/scaffold-contract.mjs \
|
|
48
|
-
--adapter client/
|
|
49
|
-
--out sdd/02_plan/10_test/templates/
|
|
48
|
+
--adapter client/web/scripts/ui-parity-web-adapter.mjs \
|
|
49
|
+
--out sdd/02_plan/10_test/templates/ui_parity_web_contract.yaml
|
|
50
50
|
|
|
51
51
|
node sdd/99_toolchain/01_automation/ui-parity/cli/run-proof.mjs \
|
|
52
|
-
--adapter client/
|
|
53
|
-
--contract sdd/02_plan/10_test/templates/
|
|
54
|
-
--out sdd/
|
|
52
|
+
--adapter client/web/scripts/ui-parity-web-adapter.mjs \
|
|
53
|
+
--contract sdd/02_plan/10_test/templates/ui_parity_web_contract.yaml \
|
|
54
|
+
--out sdd/03_verify/10_test/ui_parity/templates_web_agentic_dev_latest.json
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
관련 계약:
|
|
@@ -40,7 +40,7 @@ let generated = 0;
|
|
|
40
40
|
for (const screen of contract.screens) {
|
|
41
41
|
const targetPath = path.resolve(
|
|
42
42
|
repoRoot,
|
|
43
|
-
screen.referenceImage ?? `sdd/
|
|
43
|
+
screen.referenceImage ?? `sdd/03_verify/10_test/ui_parity/reference/${sanitizeFileName(screen.id)}.png`,
|
|
44
44
|
);
|
|
45
45
|
await captureScreen({
|
|
46
46
|
browser: runtime.browser,
|
|
@@ -38,13 +38,13 @@ function renderYaml(adapterPath, adapter) {
|
|
|
38
38
|
if (screens.length === 0) {
|
|
39
39
|
lines.push(" - id: TMP_001");
|
|
40
40
|
lines.push(" route: /");
|
|
41
|
-
lines.push(" reference_image: sdd/
|
|
41
|
+
lines.push(" reference_image: sdd/03_verify/10_test/ui_parity/reference/TMP_001.png");
|
|
42
42
|
} else {
|
|
43
43
|
for (const screen of screens) {
|
|
44
44
|
lines.push(` - id: ${screen.id}`);
|
|
45
45
|
lines.push(` route: ${screen.route}`);
|
|
46
46
|
lines.push(
|
|
47
|
-
` reference_image: ${screen.referenceImage ?? `sdd/
|
|
47
|
+
` reference_image: ${screen.referenceImage ?? `sdd/03_verify/10_test/ui_parity/reference/${screen.id}.png`}`,
|
|
48
48
|
);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -147,7 +147,7 @@ export async function runProof({
|
|
|
147
147
|
referenceImage:
|
|
148
148
|
configuredScreen.referenceImage ??
|
|
149
149
|
configuredScreen.reference_image ??
|
|
150
|
-
`sdd/
|
|
150
|
+
`sdd/03_verify/10_test/ui_parity/reference/${configuredScreen.id}.png`,
|
|
151
151
|
};
|
|
152
152
|
const stem = sanitizeFileName(screen.id || screen.route);
|
|
153
153
|
const actualPath = path.join(actualRoot, `${stem}.png`);
|
package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-route-gap-interface.md
CHANGED
|
@@ -76,7 +76,7 @@ planning evidence 필드:
|
|
|
76
76
|
|
|
77
77
|
주요 생성 경로 예시:
|
|
78
78
|
|
|
79
|
-
- `sdd/02_plan/99_generated/from_planning/ui_parity/
|
|
80
|
-
- `sdd/02_plan/99_generated/from_planning/ui_parity/
|
|
79
|
+
- `sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_web_route_gap_report.json`
|
|
80
|
+
- `sdd/02_plan/99_generated/from_planning/ui_parity/ui_parity_web_route_gap_report.md`
|
|
81
81
|
- `sdd/02_plan/99_generated/from_planning/ui_parity/mobile.route_gap_report.json`
|
|
82
82
|
- `sdd/02_plan/99_generated/from_planning/ui_parity/mobile.route_gap_report.md`
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
- 기본 설명 순서는 `entry -> provider/router -> auth/session gate -> shell -> route leaf -> backend contract leaf`다.
|
|
11
11
|
- shared shell, auth/session, data contract, transport split은 route leaf 이후 cross-cutting link로 연결한다.
|
|
12
12
|
- `sdd/03_build`에는 dated memo, Ralph iteration narrative, run id, turn-specific 회고를 남기지 않는다.
|
|
13
|
-
- 구조 current-state 적합성은 `scripts/dev/audit_sdd_build_ast.py`로 검증하고 결과는 `sdd/
|
|
13
|
+
- 구조 current-state 적합성은 `scripts/dev/audit_sdd_build_ast.py`로 검증하고 결과는 `sdd/03_verify/03_architecture`에 유지한다.
|
|
14
14
|
- downstream 저장소는 이 정책과 audit script를 함께 복제해야 한다.
|
|
15
15
|
|
|
16
16
|
## Canonical References
|
|
@@ -19,4 +19,4 @@
|
|
|
19
19
|
- `scripts/dev/audit_sdd_build_ast.py`
|
|
20
20
|
- `sdd/02_plan/03_architecture/build_ast_runtime_tree_governance.md`
|
|
21
21
|
- `sdd/03_build/03_architecture/build_ast_runtime_tree_governance.md`
|
|
22
|
-
- `sdd/
|
|
22
|
+
- `sdd/03_verify/03_architecture/build_ast_runtime_tree_governance.md`
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
- compose 문서는 root compose baseline과 dedicated overlay를 혼동하지 않고 current-state 역할로만 설명한다.
|
|
13
13
|
- browser-facing 환경 변수(`VITE_API_BASE_URL` 등)는 컨테이너 내부 DNS가 아니라 실제 브라우저가 도달 가능한 URL을 사용한다.
|
|
14
14
|
- remote delivery topology는 `AWS edge/domain -> OpenStack backend compute -> AWS data plane` current split을 기준으로 설명한다.
|
|
15
|
-
- compose baseline이나 topology가 바뀌면 `README.md`, `infra/compose/README.md`, `sdd/02_plan/06_iac`, `sdd/03_build/06_iac`, `sdd/
|
|
15
|
+
- compose baseline이나 topology가 바뀌면 `README.md`, `infra/compose/README.md`, `sdd/02_plan/06_iac`, `sdd/03_build/06_iac`, `sdd/03_verify/06_iac`를 같은 변경 단위로 동기화한다.
|
|
16
16
|
|
|
17
17
|
## Canonical References
|
|
18
18
|
|
|
@@ -21,4 +21,4 @@
|
|
|
21
21
|
- `infra/terraform/README.md`
|
|
22
22
|
- `sdd/02_plan/06_iac/template_runtime_delivery.md`
|
|
23
23
|
- `sdd/03_build/06_iac/template_runtime_delivery.md`
|
|
24
|
-
- `sdd/
|
|
24
|
+
- `sdd/03_verify/06_iac/template_runtime_delivery.md`
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
- Playwright exactness suite가 있는 screen/local UI surface는 `sdd/99_toolchain/01_automation/run_playwright_exactness.py`를 canonical local gate로 사용한다.
|
|
13
13
|
- direct `npx playwright test ...` 호출은 디버깅 예외로만 쓰고, retained verification command는 toolchain wrapper 기준으로 남긴다.
|
|
14
14
|
- 자동화가 없는 회귀 surface는 가능한 command/manual verification으로 대체하고, automation gap은 residual risk로 남긴다.
|
|
15
|
-
- 선택한 회귀 검수 범위, 실행한 check, 생략 사유, residual risk는 `sdd/02_plan`, `sdd/03_build`, `sdd/
|
|
15
|
+
- 선택한 회귀 검수 범위, 실행한 check, 생략 사유, residual risk는 `sdd/02_plan`, `sdd/03_build`, `sdd/03_verify`에 current-state로 유지한다.
|
|
16
16
|
|
|
17
17
|
## Canonical References
|
|
18
18
|
|
|
@@ -14,7 +14,7 @@ PLAYWRIGHT_SUITES = [
|
|
|
14
14
|
"id": "shared-shell-regression",
|
|
15
15
|
"spec": "shared-shell-regression.spec.js",
|
|
16
16
|
"kind": "shared-ui-regression",
|
|
17
|
-
"service": "
|
|
17
|
+
"service": "web",
|
|
18
18
|
"targets": ["shared-shell"],
|
|
19
19
|
"description": "example shared shell regression batch",
|
|
20
20
|
},
|
|
@@ -20,4 +20,4 @@
|
|
|
20
20
|
- compose/runtime 기준선은 `02_policies/compose-runtime-baseline-policy.md`를 정본으로 사용한다.
|
|
21
21
|
- 현재 canonical screen toolchain은 `build_screen_spec_pdf.py`, `capture_screen_assets.mjs`, `screen_spec_manifest.py`다.
|
|
22
22
|
- Claude/Codex/Ralph 하네스는 저장소 루트 `.claude`, `.codex`, `.agent`에 두고, 그 계약 설명은 `01_automation`과 `02_policies`에 둔다.
|
|
23
|
-
- `sdd/03_build`는 AST-style runtime tree current-state를 유지하고, 관련 gate는 `scripts/dev/audit_sdd_build_ast.py`와 `
|
|
23
|
+
- `sdd/03_build`는 AST-style runtime tree current-state를 유지하고, 관련 gate는 `scripts/dev/audit_sdd_build_ast.py`와 `03_verify` summary로 관리한다.
|
package/sdd/README.md
CHANGED
|
@@ -16,6 +16,6 @@
|
|
|
16
16
|
- `01_planning/`: 현재 canonical spec과 source reference
|
|
17
17
|
- `02_plan/`: 에이전트의 current executable plan
|
|
18
18
|
- `03_build/`: 현재 구현 요약
|
|
19
|
-
- `
|
|
19
|
+
- `03_verify/`: 현재 retained verification summary
|
|
20
20
|
- `05_operate/`: 현재 delivery status와 runbook
|
|
21
21
|
- `99_toolchain/`: SDD를 유지하는 생성기, 자동화, 정책 문서
|
package/server/data/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
- `bootstrap/users.json`: user profile bootstrap 원본
|
|
13
13
|
- `bootstrap/catalog_products.json`: catalog product 원본
|
|
14
14
|
- `bootstrap/inventory_levels.json`: inventory level 원본
|
|
15
|
-
- `bootstrap/orders.json`:
|
|
15
|
+
- `bootstrap/orders.json`: web/admin order surface 원본
|
|
16
16
|
- `bootstrap/fulfillment_tasks.json`: mobile fulfillment board task 원본
|
|
17
17
|
- `bootstrap/fulfillment_events.json`: mobile fulfillment timeline 원본
|
|
18
18
|
- `bootstrap/fulfillment_notes.json`: mobile fulfillment note 원본
|
|
@@ -1,18 +0,0 @@
|
|
|
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/platform/package.json ./client/platform/package.json
|
|
9
|
-
|
|
10
|
-
RUN pnpm install --frozen-lockfile --filter @do4ai/client-platform-template...
|
|
11
|
-
|
|
12
|
-
COPY client/platform ./client/platform
|
|
13
|
-
|
|
14
|
-
WORKDIR /app/client/platform
|
|
15
|
-
|
|
16
|
-
EXPOSE 3001
|
|
17
|
-
|
|
18
|
-
CMD ["sh", "-lc", "pnpm exec vite --host 0.0.0.0 --port ${PORT:-3001}"]
|