agentic-dev 0.2.11 → 0.2.13

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 (276) hide show
  1. package/README.md +72 -54
  2. package/bin/agentic-dev.mjs +162 -11
  3. package/lib/github.mjs +246 -0
  4. package/lib/orchestration-assets.mjs +249 -0
  5. package/lib/scaffold.mjs +89 -0
  6. package/package.json +8 -19
  7. package/.dockerignore +0 -8
  8. package/.env.example +0 -50
  9. package/.gitignore +0 -16
  10. package/AGENTS.md +0 -86
  11. package/SDD_SKILL.md +0 -589
  12. package/compose.yml +0 -206
  13. package/infra/compose/.env.dev.example +0 -28
  14. package/infra/compose/.env.prod.example +0 -29
  15. package/infra/compose/README.md +0 -35
  16. package/infra/compose/dev.yml +0 -125
  17. package/infra/compose/prod.yml +0 -126
  18. package/infra/terraform/README.md +0 -34
  19. package/infra/terraform/aws/data/.terraform.lock.hcl +0 -25
  20. package/infra/terraform/aws/data/README.md +0 -18
  21. package/infra/terraform/aws/data/main.tf +0 -147
  22. package/infra/terraform/aws/data/outputs.tf +0 -14
  23. package/infra/terraform/aws/data/variables.tf +0 -57
  24. package/infra/terraform/aws/data/versions.tf +0 -10
  25. package/infra/terraform/aws/domain/.terraform.lock.hcl +0 -25
  26. package/infra/terraform/aws/domain/README.md +0 -20
  27. package/infra/terraform/aws/domain/env/dev.tfvars.example +0 -6
  28. package/infra/terraform/aws/domain/env/prod.tfvars.example +0 -7
  29. package/infra/terraform/aws/domain/main.tf +0 -149
  30. package/infra/terraform/aws/domain/outputs.tf +0 -29
  31. package/infra/terraform/aws/domain/variables.tf +0 -58
  32. package/infra/terraform/aws/domain/versions.tf +0 -10
  33. package/infra/terraform/openstack/README.md +0 -38
  34. package/infra/terraform/openstack/dev/.terraform.lock.hcl +0 -24
  35. package/infra/terraform/openstack/dev/README.md +0 -18
  36. package/infra/terraform/openstack/dev/main.tf +0 -49
  37. package/infra/terraform/openstack/dev/providers.tf +0 -15
  38. package/infra/terraform/openstack/dev/terraform.tfvars.example +0 -54
  39. package/infra/terraform/openstack/dev/variables.tf +0 -210
  40. package/infra/terraform/openstack/dev/versions.tf +0 -10
  41. package/infra/terraform/openstack/modules/environment_host/main.tf +0 -143
  42. package/infra/terraform/openstack/modules/environment_host/outputs.tf +0 -25
  43. package/infra/terraform/openstack/modules/environment_host/templates/docker-host-user-data.sh.tftpl +0 -40
  44. package/infra/terraform/openstack/modules/environment_host/variables.tf +0 -145
  45. package/infra/terraform/openstack/modules/environment_host/versions.tf +0 -7
  46. package/infra/terraform/openstack/prod/.terraform.lock.hcl +0 -24
  47. package/infra/terraform/openstack/prod/README.md +0 -18
  48. package/infra/terraform/openstack/prod/main.tf +0 -49
  49. package/infra/terraform/openstack/prod/providers.tf +0 -15
  50. package/infra/terraform/openstack/prod/terraform.tfvars.example +0 -55
  51. package/infra/terraform/openstack/prod/variables.tf +0 -210
  52. package/infra/terraform/openstack/prod/versions.tf +0 -10
  53. package/infra/terraform/openstack/server/.terraform.lock.hcl +0 -45
  54. package/infra/terraform/openstack/server/README.md +0 -47
  55. package/infra/terraform/openstack/server/main.tf +0 -161
  56. package/infra/terraform/openstack/server/outputs.tf +0 -30
  57. package/infra/terraform/openstack/server/providers.tf +0 -30
  58. package/infra/terraform/openstack/server/templates/server-user-data.sh.tftpl +0 -50
  59. package/infra/terraform/openstack/server/variables.tf +0 -233
  60. package/infra/terraform/openstack/server/zz_aspace.auto.tfvars.example.json +0 -29
  61. package/pnpm-workspace.yaml +0 -2
  62. package/scripts/dev/audit_sdd_build_ast.py +0 -277
  63. package/sdd/01_planning/01_feature/INDEX.md +0 -16
  64. package/sdd/01_planning/01_feature/README.md +0 -76
  65. package/sdd/01_planning/01_feature/alerts_feature_spec.md +0 -55
  66. package/sdd/01_planning/01_feature/auth_feature_spec.md +0 -57
  67. package/sdd/01_planning/01_feature/catalog_feature_spec.md +0 -61
  68. package/sdd/01_planning/01_feature/fulfillment_feature_spec.md +0 -58
  69. package/sdd/01_planning/01_feature/health_feature_spec.md +0 -52
  70. package/sdd/01_planning/01_feature/inventory_feature_spec.md +0 -60
  71. package/sdd/01_planning/01_feature/order_feature_spec.md +0 -63
  72. package/sdd/01_planning/01_feature/shipping_feature_spec.md +0 -55
  73. package/sdd/01_planning/01_feature/support_feature_spec.md +0 -53
  74. package/sdd/01_planning/01_feature/user_feature_spec.md +0 -54
  75. package/sdd/01_planning/02_screen/INDEX.md +0 -13
  76. package/sdd/01_planning/02_screen/README.md +0 -41
  77. package/sdd/01_planning/02_screen/admin_screen_spec.pdf +0 -0
  78. package/sdd/01_planning/02_screen/assets/README.md +0 -16
  79. package/sdd/01_planning/02_screen/assets/example/README.md +0 -13
  80. package/sdd/01_planning/02_screen/landing_screen_spec.pdf +0 -0
  81. package/sdd/01_planning/02_screen/mobile_screen_spec.pdf +0 -0
  82. package/sdd/01_planning/02_screen/web_screen_spec.pdf +0 -0
  83. package/sdd/01_planning/03_architecture/INDEX.md +0 -9
  84. package/sdd/01_planning/03_architecture/README.md +0 -25
  85. package/sdd/01_planning/03_architecture/architecture_document_structure.md +0 -77
  86. package/sdd/01_planning/03_architecture/backend/README.md +0 -10
  87. package/sdd/01_planning/03_architecture/frontend/README.md +0 -12
  88. package/sdd/01_planning/03_architecture/infra/README.md +0 -10
  89. package/sdd/01_planning/03_architecture/tech-research/README.md +0 -4
  90. package/sdd/01_planning/03_architecture/templates_system_architecture.md +0 -84
  91. package/sdd/01_planning/04_data/INDEX.md +0 -4
  92. package/sdd/01_planning/04_data/README.md +0 -10
  93. package/sdd/01_planning/04_data/templates_data_modeling.md +0 -119
  94. package/sdd/01_planning/05_api/README.md +0 -12
  95. package/sdd/01_planning/05_api/templates_api_contract.md +0 -90
  96. package/sdd/01_planning/06_iac/README.md +0 -11
  97. package/sdd/01_planning/06_iac/templates_runtime_and_cicd_baseline.md +0 -46
  98. package/sdd/01_planning/07_integration/README.md +0 -11
  99. package/sdd/01_planning/07_integration/templates_frontend_api_integration.md +0 -46
  100. package/sdd/01_planning/08_nonfunctional/README.md +0 -7
  101. package/sdd/01_planning/09_security/README.md +0 -7
  102. package/sdd/01_planning/10_test/README.md +0 -12
  103. package/sdd/01_planning/10_test/templates_test_strategy.md +0 -60
  104. package/sdd/01_planning/INDEX.md +0 -19
  105. package/sdd/01_planning/README.md +0 -17
  106. package/sdd/02_plan/01_feature/README.md +0 -34
  107. package/sdd/02_plan/01_feature/_feature_todo_template.md +0 -29
  108. package/sdd/02_plan/02_screen/INDEX.md +0 -19
  109. package/sdd/02_plan/02_screen/README.md +0 -39
  110. package/sdd/02_plan/02_screen/_screen_todo_template.md +0 -60
  111. package/sdd/02_plan/03_architecture/README.md +0 -23
  112. package/sdd/02_plan/03_architecture/architecture_document_governance.md +0 -40
  113. package/sdd/02_plan/03_architecture/build_ast_runtime_tree_governance.md +0 -53
  114. package/sdd/02_plan/03_architecture/repository_governance.md +0 -39
  115. package/sdd/02_plan/03_architecture/runtime_and_structure_governance.md +0 -38
  116. package/sdd/02_plan/03_architecture/templates-hexagonal-template-architecture.md +0 -9
  117. package/sdd/02_plan/03_architecture/toolchain_governance.md +0 -98
  118. package/sdd/02_plan/04_data/README.md +0 -5
  119. package/sdd/02_plan/05_api/README.md +0 -5
  120. package/sdd/02_plan/06_iac/README.md +0 -11
  121. package/sdd/02_plan/06_iac/dev_runtime_delivery.md +0 -36
  122. package/sdd/02_plan/06_iac/template_runtime_delivery.md +0 -50
  123. package/sdd/02_plan/07_integration/README.md +0 -5
  124. package/sdd/02_plan/07_integration/frontend_live_integration.md +0 -31
  125. package/sdd/02_plan/08_nonfunctional/README.md +0 -5
  126. package/sdd/02_plan/08_nonfunctional/repository_hygiene.md +0 -26
  127. package/sdd/02_plan/09_security/README.md +0 -5
  128. package/sdd/02_plan/10_test/README.md +0 -11
  129. package/sdd/02_plan/10_test/regression_verification.md +0 -39
  130. package/sdd/02_plan/10_test/templates/README.md +0 -8
  131. package/sdd/02_plan/10_test/templates/ui_parity_web_contract.template.yaml +0 -23
  132. package/sdd/02_plan/10_test/verification_strategy.md +0 -43
  133. package/sdd/02_plan/99_generated/from_planning/ui_parity/.gitkeep +0 -1
  134. package/sdd/02_plan/README.md +0 -40
  135. package/sdd/03_build/01_feature/README.md +0 -20
  136. package/sdd/03_build/01_feature/domain/README.md +0 -3
  137. package/sdd/03_build/01_feature/domain/account_and_access.md +0 -20
  138. package/sdd/03_build/01_feature/domain/catalog_and_inventory.md +0 -20
  139. package/sdd/03_build/01_feature/domain/ordering_and_fulfillment.md +0 -21
  140. package/sdd/03_build/01_feature/domain/support_and_observability.md +0 -21
  141. package/sdd/03_build/01_feature/domain_surfaces.md +0 -28
  142. package/sdd/03_build/01_feature/service/README.md +0 -3
  143. package/sdd/03_build/01_feature/service/admin_surface.md +0 -15
  144. package/sdd/03_build/01_feature/service/landing_surface.md +0 -13
  145. package/sdd/03_build/01_feature/service/mobile_surface.md +0 -14
  146. package/sdd/03_build/01_feature/service/web_surface.md +0 -14
  147. package/sdd/03_build/02_screen/README.md +0 -25
  148. package/sdd/03_build/02_screen/_screen_build_template.md +0 -26
  149. package/sdd/03_build/02_screen/admin/README.md +0 -5
  150. package/sdd/03_build/02_screen/landing/README.md +0 -5
  151. package/sdd/03_build/02_screen/mobile/README.md +0 -5
  152. package/sdd/03_build/02_screen/web/README.md +0 -5
  153. package/sdd/03_build/03_architecture/README.md +0 -10
  154. package/sdd/03_build/03_architecture/architecture_document_governance.md +0 -30
  155. package/sdd/03_build/03_architecture/build_ast_runtime_tree_governance.md +0 -24
  156. package/sdd/03_build/03_architecture/repository_governance.md +0 -18
  157. package/sdd/03_build/03_architecture/toolchain_governance.md +0 -36
  158. package/sdd/03_build/06_iac/README.md +0 -3
  159. package/sdd/03_build/06_iac/dev_runtime_delivery.md +0 -10
  160. package/sdd/03_build/06_iac/template_runtime_delivery.md +0 -49
  161. package/sdd/03_build/07_integration/README.md +0 -3
  162. package/sdd/03_build/07_integration/frontend_live_integration.md +0 -11
  163. package/sdd/03_build/08_nonfunctional/README.md +0 -3
  164. package/sdd/03_build/08_nonfunctional/repository_hygiene.md +0 -10
  165. package/sdd/03_build/10_test/README.md +0 -9
  166. package/sdd/03_build/10_test/regression_verification.md +0 -16
  167. package/sdd/03_build/10_test/verification_harness.md +0 -11
  168. package/sdd/03_build/README.md +0 -35
  169. package/sdd/03_verify/01_feature/README.md +0 -5
  170. package/sdd/03_verify/01_feature/domain_verification.md +0 -14
  171. package/sdd/03_verify/01_feature/service_verification.md +0 -22
  172. package/sdd/03_verify/02_screen/README.md +0 -6
  173. package/sdd/03_verify/02_screen/_screen_verify_template.md +0 -20
  174. package/sdd/03_verify/02_screen/admin/README.md +0 -4
  175. package/sdd/03_verify/02_screen/landing/README.md +0 -4
  176. package/sdd/03_verify/02_screen/mobile/README.md +0 -4
  177. package/sdd/03_verify/02_screen/web/README.md +0 -4
  178. package/sdd/03_verify/03_architecture/README.md +0 -10
  179. package/sdd/03_verify/03_architecture/architecture_document_governance.md +0 -15
  180. package/sdd/03_verify/03_architecture/build_ast_runtime_tree_governance.md +0 -28
  181. package/sdd/03_verify/03_architecture/repository_governance.md +0 -16
  182. package/sdd/03_verify/03_architecture/toolchain_governance.md +0 -58
  183. package/sdd/03_verify/06_iac/README.md +0 -3
  184. package/sdd/03_verify/06_iac/dev_runtime_delivery.md +0 -10
  185. package/sdd/03_verify/06_iac/template_runtime_delivery.md +0 -42
  186. package/sdd/03_verify/07_integration/README.md +0 -3
  187. package/sdd/03_verify/07_integration/frontend_live_integration.md +0 -16
  188. package/sdd/03_verify/08_nonfunctional/README.md +0 -3
  189. package/sdd/03_verify/08_nonfunctional/repository_hygiene.md +0 -14
  190. package/sdd/03_verify/10_test/README.md +0 -9
  191. package/sdd/03_verify/10_test/regression_verification.md +0 -16
  192. package/sdd/03_verify/10_test/ui_parity/README.md +0 -4
  193. package/sdd/03_verify/10_test/ui_parity/loop_runs/.gitkeep +0 -0
  194. package/sdd/03_verify/10_test/ui_parity/reference/.gitkeep +0 -0
  195. package/sdd/03_verify/10_test/ui_parity/staged_runs/.gitkeep +0 -0
  196. package/sdd/03_verify/10_test/verification_harness.md +0 -17
  197. package/sdd/03_verify/README.md +0 -22
  198. package/sdd/05_operate/01_runbooks/.gitkeep +0 -1
  199. package/sdd/05_operate/01_runbooks/README.md +0 -4
  200. package/sdd/05_operate/02_delivery_status/README.md +0 -4
  201. package/sdd/05_operate/02_delivery_status/service_status.md +0 -16
  202. package/sdd/05_operate/README.md +0 -12
  203. package/sdd/99_toolchain/01_automation/.gitkeep +0 -1
  204. package/sdd/99_toolchain/01_automation/README.md +0 -76
  205. package/sdd/99_toolchain/01_automation/agentic-dev/analyze_proof_results.py +0 -132
  206. package/sdd/99_toolchain/01_automation/agentic-dev/analyze_route_gap.py +0 -85
  207. package/sdd/99_toolchain/01_automation/agentic-dev/assets/repo-contract.template.json +0 -75
  208. package/sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh +0 -84
  209. package/sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh +0 -33
  210. package/sdd/99_toolchain/01_automation/agentic-dev/init_repo_contract.sh +0 -51
  211. package/sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json +0 -76
  212. package/sdd/99_toolchain/01_automation/agentic-dev/resolve_frontend_target.py +0 -52
  213. package/sdd/99_toolchain/01_automation/agentic-dev/resolve_repo_contract.py +0 -56
  214. package/sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh +0 -100
  215. package/sdd/99_toolchain/01_automation/agentic-dev/run_repo_phase.sh +0 -140
  216. package/sdd/99_toolchain/01_automation/agentic-dev/validate_json_schema.py +0 -39
  217. package/sdd/99_toolchain/01_automation/agentic-parity-harness-design.md +0 -291
  218. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/dashboard.png +0 -0
  219. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/login.png +0 -0
  220. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/queue.png +0 -0
  221. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/support.png +0 -0
  222. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/home.png +0 -0
  223. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/login.png +0 -0
  224. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/workspace.png +0 -0
  225. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/dashboard.png +0 -0
  226. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/fulfillment.png +0 -0
  227. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/login.png +0 -0
  228. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/dashboard.png +0 -0
  229. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/login.png +0 -0
  230. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/orders.png +0 -0
  231. package/sdd/99_toolchain/01_automation/build_asset_recipes.py +0 -10
  232. package/sdd/99_toolchain/01_automation/build_screen_spec_pdf.py +0 -427
  233. package/sdd/99_toolchain/01_automation/capture_screen_assets.mjs +0 -148
  234. package/sdd/99_toolchain/01_automation/harness-layout.md +0 -34
  235. package/sdd/99_toolchain/01_automation/parity-execution-tooling-design.md +0 -319
  236. package/sdd/99_toolchain/01_automation/playwright_exactness_manifest.py +0 -21
  237. package/sdd/99_toolchain/01_automation/run_playwright_exactness.py +0 -87
  238. package/sdd/99_toolchain/01_automation/screen_spec_manifest.py +0 -321
  239. package/sdd/99_toolchain/01_automation/spec_asset_builder.py +0 -274
  240. package/sdd/99_toolchain/01_automation/ui-contract-projection.md +0 -79
  241. package/sdd/99_toolchain/01_automation/ui-parity/README.md +0 -60
  242. package/sdd/99_toolchain/01_automation/ui-parity/cli/extract-reference-pages.mjs +0 -2
  243. package/sdd/99_toolchain/01_automation/ui-parity/cli/materialize-reference-assets.mjs +0 -58
  244. package/sdd/99_toolchain/01_automation/ui-parity/cli/normalize-reference-assets.mjs +0 -2
  245. package/sdd/99_toolchain/01_automation/ui-parity/cli/route-gap-report.mjs +0 -187
  246. package/sdd/99_toolchain/01_automation/ui-parity/cli/run-proof.mjs +0 -50
  247. package/sdd/99_toolchain/01_automation/ui-parity/cli/scaffold-contract.mjs +0 -62
  248. package/sdd/99_toolchain/01_automation/ui-parity/cli/upload-parity1.mjs +0 -2
  249. package/sdd/99_toolchain/01_automation/ui-parity/contracts/collector-metadata.schema.json +0 -33
  250. package/sdd/99_toolchain/01_automation/ui-parity/contracts/proof-result.schema.json +0 -76
  251. package/sdd/99_toolchain/01_automation/ui-parity/contracts/route-gap-report.schema.json +0 -95
  252. package/sdd/99_toolchain/01_automation/ui-parity/core/capture-runner.mjs +0 -55
  253. package/sdd/99_toolchain/01_automation/ui-parity/core/load-adapter.mjs +0 -25
  254. package/sdd/99_toolchain/01_automation/ui-parity/core/load-contract.mjs +0 -81
  255. package/sdd/99_toolchain/01_automation/ui-parity/core/paths.mjs +0 -23
  256. package/sdd/99_toolchain/01_automation/ui-parity/core/proof-runner.mjs +0 -255
  257. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-artifact-layout.md +0 -23
  258. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-proof-interface.md +0 -60
  259. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-route-gap-interface.md +0 -82
  260. package/sdd/99_toolchain/01_automation/ui-parity/runtime/playwright-runtime.mjs +0 -16
  261. package/sdd/99_toolchain/01_automation/ui-parity/runtime/static-runtime.mjs +0 -6
  262. package/sdd/99_toolchain/02_policies/.gitkeep +0 -1
  263. package/sdd/99_toolchain/02_policies/build-ast-governance-policy.md +0 -22
  264. package/sdd/99_toolchain/02_policies/compose-runtime-baseline-policy.md +0 -24
  265. package/sdd/99_toolchain/02_policies/convention-storage-policy.md +0 -26
  266. package/sdd/99_toolchain/02_policies/main-push-before-dev-deploy-policy.md +0 -27
  267. package/sdd/99_toolchain/02_policies/regression-verification-policy.md +0 -22
  268. package/sdd/99_toolchain/03_templates/.gitkeep +0 -1
  269. package/sdd/99_toolchain/03_templates/asset_recipe_manifest.example.py +0 -38
  270. package/sdd/99_toolchain/03_templates/generated_assets/README.md +0 -11
  271. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-lockup.svg +0 -3
  272. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-mark.svg +0 -3
  273. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-wordmark.svg +0 -3
  274. package/sdd/99_toolchain/03_templates/playwright_exactness_manifest.example.py +0 -21
  275. package/sdd/99_toolchain/README.md +0 -23
  276. package/sdd/README.md +0 -21
@@ -1,319 +0,0 @@
1
- # Parity Execution Tooling Design
2
-
3
- ## Position
4
-
5
- UI parity 관련 `실행 도구`는 `sdd/99_toolchain/01_automation`의 소유물로 본다.
6
-
7
- 즉 템플릿을 복제한 서비스 레포 안에서는 다음처럼 역할을 나눈다.
8
-
9
- - `sdd/99_toolchain/01_automation`
10
- - parity 실행 도구와 인터페이스의 정본
11
- - agentic-dev phase runner와 analyzer의 정본
12
- - `sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json`
13
- - 이 도구를 어떤 phase에서 어떤 명령으로 호출할지 선언하는 canonical 계약
14
- - `frontend/scripts`
15
- - 실제 화면/라우트/인증/브라우저 런타임에 붙는 앱별 adapter
16
- - optional `scripts/dev`
17
- - 반복 루프, staged sweep, 단일 수정 실행기 같은 운영 오케스트레이션
18
-
19
- 이 구조를 쓰는 이유는 다음과 같다.
20
-
21
- - parity는 특정 앱 기능이 아니라 하네스/검증 도구다.
22
- - 따라서 엔진과 인터페이스의 정본은 `99_toolchain`에 두는 편이 맞다.
23
- - 같은 이유로 `agentic-dev` phase runner, contract resolver, proof analyzer도 `99_toolchain`에 둬야 한다.
24
- - 반면 앱별 route/auth/seed/session/crop 규칙은 `frontend/scripts` 같은 adapter 층에 둬야 한다.
25
-
26
- ## Layered Ownership
27
-
28
- ### Layer 1. Toolchain-owned parity runtime
29
-
30
- 위치:
31
-
32
- - `sdd/99_toolchain/01_automation/ui-parity/`
33
-
34
- 여기에 들어갈 것:
35
-
36
- - `core/`
37
- - parity 비교 핵심 로직
38
- - diff 계산
39
- - artifact writing
40
- - result normalization
41
- - `cli/`
42
- - `run-proof`
43
- - `scaffold-contract`
44
- - `route-gap-report`
45
- - `extract-reference-pages`
46
- - `materialize-reference-assets`
47
- - `normalize-reference-assets`
48
- - optional `upload-parity1`
49
- - `runtime/`
50
- - playwright runner
51
- - stagehand runner
52
- - browser/session helpers
53
- - `contracts/`
54
- - JSON/YAML schema 예시
55
- - proof result shape
56
- - collector metadata shape
57
- - `interfaces/`
58
- - command interface 문서
59
- - artifact path 규약
60
- - environment variable 규약
61
-
62
- 소유 원칙:
63
-
64
- - 앱과 무관한 범용 실행 로직은 전부 여기 둔다.
65
- - 새 서비스를 시작해도 이 레이어는 거의 그대로 복제되어야 한다.
66
-
67
- ### Layer 1b. Toolchain-owned agentic runtime
68
-
69
- 위치:
70
-
71
- - `sdd/99_toolchain/01_automation/agentic-dev/`
72
-
73
- 여기에 들어갈 것:
74
-
75
- - contract resolver
76
- - phase runner
77
- - proof result analyzer
78
- - repo contract template
79
- - optional spec bootstrap helpers
80
-
81
- 소유 원칙:
82
-
83
- - skill은 이 레이어를 호출해야 한다.
84
- - skill이 phase runner를 따로 재구현하면 안 된다.
85
- - 서비스별 차이는 contract에만 두고 실행기는 공용 하네스로 유지한다.
86
-
87
- ### Layer 2. Repo-local agentic phase contract
88
-
89
- 위치:
90
-
91
- - `sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json`
92
- - `.codex/agentic-dev.json`
93
- - `.claude/agentic-dev.json`
94
-
95
- 역할:
96
-
97
- - `build`, `proof`, `deploy_dev`, `verify_dev` phase를 정의
98
- - `proof`에서 Layer 1 parity tooling을 호출
99
- - 하네스 phase 실행기의 입력 계약 역할 수행
100
-
101
- 소유 원칙:
102
-
103
- - 이 레이어는 선언 레이어다.
104
- - parity 엔진을 직접 구현하지 않는다.
105
- - phase runner도 직접 구현하지 않는다.
106
- - `proof_output` 위치를 artifact contract로 보장한다.
107
-
108
- ### Layer 3. App-specific parity adapter
109
-
110
- 위치:
111
-
112
- - `frontend/scripts/ui-parity-web-adapter.mjs`
113
- - 또는 `frontend/src/lib/ui-parity/*`
114
-
115
- 역할:
116
-
117
- - screen catalog
118
- - route catalog
119
- - auth/session seed
120
- - app-specific masking
121
- - app-specific capture preparation
122
- - reference asset mapping
123
-
124
- 소유 원칙:
125
-
126
- - 앱을 바꾸면 가장 많이 바뀌는 레이어다.
127
- - 공통 엔진을 몰라도 이 레이어만 바꿔 새 앱에 붙일 수 있어야 한다.
128
-
129
- ### Layer 4. Dev operations wrapper
130
-
131
- 위치:
132
-
133
- - optional `scripts/dev/*parity*.sh`
134
-
135
- 역할:
136
-
137
- - screen-by-screen loop
138
- - staged threshold sweep
139
- - one-shot editor loop
140
- - optional research export hook
141
-
142
- 소유 원칙:
143
-
144
- - 운영 반복 실행과 실험 제어를 담당한다.
145
- - proof core와 contract는 재사용하고, 반복 실행만 별도 책임으로 둔다.
146
-
147
- ## Recommended Directory Layout
148
-
149
- ```text
150
- sdd/99_toolchain/01_automation/agentic-dev/
151
- repo-contract.json
152
- .codex/
153
- agentic-dev.json
154
- .claude/
155
- agentic-dev.json
156
-
157
- sdd/
158
- 02_plan/
159
- 10_test/
160
- <service>/
161
- ui_parity_web_contract.yaml
162
- 99_generated/
163
- from_planning/
164
- ui_parity/
165
- 03_verify/
166
- 10_test/
167
- ui_parity/
168
- 99_toolchain/
169
- 03_automation/
170
- agentic-dev/
171
- run_repo_phase.sh
172
- resolve_repo_contract.py
173
- init_repo_contract.sh
174
- analyze_proof_results.py
175
- ui-parity/
176
- core/
177
- cli/
178
- runtime/
179
- contracts/
180
- interfaces/
181
- README.md
182
- ui-parity-proof-interface.md
183
- ui-parity-artifact-layout.md
184
-
185
- frontend/
186
- scripts/
187
- ui-parity-web-adapter.mjs
188
- src/
189
- lib/
190
- specScreens.json
191
- specRouteCatalog.json
192
- ```
193
-
194
- ## Phase Wiring
195
-
196
- ### build
197
-
198
- - 앱 빌드
199
- - 정적 타입/테스트
200
-
201
- 예시:
202
-
203
- ```json
204
- "build": "npm --prefix frontend run build"
205
- ```
206
-
207
- ### proof
208
-
209
- - `sdd/99_toolchain/01_automation/agentic-dev/run_repo_phase.sh`가 contract를 읽는다.
210
- - contract의 `proof`는 `sdd/99_toolchain/01_automation/ui-parity/cli/run-proof`를 호출한다.
211
- - `run-proof`는 app adapter를 읽고 strict parity를 실행한다.
212
- - 결과는 `sdd/03_verify/10_test/ui_parity/...`에 저장한다.
213
-
214
- 예시 shape:
215
-
216
- ```json
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
- ```
219
-
220
- ### deploy_dev
221
-
222
- - repo-local 배포 스크립트 호출
223
-
224
- ### verify_dev
225
-
226
- - DEV endpoint smoke check
227
- - proof artifact 존재 확인
228
-
229
- ## Artifact Contracts
230
-
231
- ### Required proof output
232
-
233
- `artifacts.proof_output`는 다음 요구를 만족해야 한다.
234
-
235
- - latest single JSON file
236
- - screen별 `actual_image`, `diff_image`, `diff_ratio`
237
- - route/target/reference dimensions
238
- - fail/pass summary
239
-
240
- ### Required evidence tree
241
-
242
- - `reference/`
243
- - `<timestamp>/actual/`
244
- - `<timestamp>/diff/`
245
- - `loop_runs/`
246
- - `staged_runs/`
247
-
248
- 정책:
249
-
250
- - phase 성공 여부는 이 구조의 존재와 JSON 무결성으로 판단한다.
251
-
252
- ## Interface Boundaries
253
-
254
- ### Toolchain to app adapter
255
-
256
- Toolchain은 app adapter에 다음만 기대한다.
257
-
258
- - screen list
259
- - route mapping
260
- - auth preparer
261
- - mask rect provider
262
- - reference registry location
263
- - target base URL
264
-
265
- Toolchain은 앱 DOM 구조를 직접 하드코딩하지 않는다.
266
-
267
- ### Toolchain to agentic contract
268
-
269
- Toolchain은 contract에 다음만 기대한다.
270
-
271
- - `commands.proof`
272
- - `artifacts.proof_output`
273
-
274
- agentic contract는 parity 내부 로직을 몰라도 된다.
275
-
276
- ### Optional external integrations
277
-
278
- - `parity-1 collector`
279
- - optional upload target
280
- - `parity-1 objective export`
281
- - optional research export
282
-
283
- 정책:
284
-
285
- - 외부 integration이 없어도 parity proof 자체는 완결되어야 한다.
286
-
287
- ## Enforcement Rules
288
-
289
- - 프론트엔드가 있는 템플릿은 `proof` phase를 mandatory로 둔다.
290
- - `proof_output`이 생성되지 않으면 실패다.
291
- - DEV 반영이 요구되는 작업은 `deploy_dev -> verify_dev`를 mandatory로 둔다.
292
- - `main push` 이전 DEV 배포는 허용하지 않는다.
293
- - `sdd/99_toolchain/01_automation/agentic-dev/run_repo_phase.sh`는 phase 순서를 우회하지 못하게 해야 한다.
294
-
295
- ## Why `99_toolchain`
296
-
297
- `99_toolchain`에 두는 것이 맞는 이유:
298
-
299
- - parity는 앱 기능이 아니라 검증 자동화다.
300
- - 정책, 인터페이스, 실행기, 산출물 계약이 모두 toolchain 성격이다.
301
- - `agentic-dev` runner도 같은 이유로 toolchain 소유가 맞다.
302
- - `frontend/scripts`에 전부 넣으면 서비스별 앱 코드와 하네스 코드가 다시 섞인다.
303
- - `99_toolchain`에 engine을 두고 `frontend`에는 adapter만 두면 책임 분리가 선명해진다.
304
-
305
- ## Migration Recommendation
306
-
307
- 현재 reference implementation에서 템플릿 정본으로 승격할 때는 다음 순서를 권장한다.
308
-
309
- 1. `frontend/scripts/ui-parity-*.mjs` 중 app-agnostic 로직을 `sdd/99_toolchain/01_automation/ui-parity/`로 이동
310
- 2. app-specific 로직만 `frontend/scripts/ui-parity-web-adapter.mjs`로 축소
311
- 3. `agentic-dev` runner를 `sdd/99_toolchain/01_automation/agentic-dev/`로 이동
312
- 4. `sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json`은 새 toolchain CLI를 호출하도록 단순화
313
- 5. `scripts/dev/*parity*.sh`는 필요할 때만 repo별로 추가하고, base template에는 포함하지 않는다
314
-
315
- ## Non-Goals
316
-
317
- - `parity-1` backend를 repo 안에 복사하지 않는다.
318
- - 특정 서비스의 screen code 체계를 toolchain에 하드코딩하지 않는다.
319
- - app adapter 없이 toolchain만으로 모든 앱을 자동 추론하게 만들지 않는다.
@@ -1,21 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from pathlib import Path
4
-
5
-
6
- ROOT = Path(__file__).resolve().parents[3]
7
- PLAYWRIGHT_HARNESS_ROOT = ROOT / "research" / "agent-browser" / "pocs" / "playwright-dev-e2e"
8
- PLAYWRIGHT_CONFIG = PLAYWRIGHT_HARNESS_ROOT / "playwright.config.js"
9
- PLAYWRIGHT_PACKAGE = PLAYWRIGHT_HARNESS_ROOT / "package.json"
10
- PLAYWRIGHT_RESULTS_DIR = ROOT / "research" / "agent-browser" / "results"
11
-
12
-
13
- # Downstream repos should populate this registry with durable suite ids.
14
- PLAYWRIGHT_SUITES: list[dict[str, object]] = []
15
-
16
-
17
- def get_suite_by_id(suite_id: str) -> dict[str, object]:
18
- for suite in PLAYWRIGHT_SUITES:
19
- if suite["id"] == suite_id:
20
- return suite
21
- raise KeyError(suite_id)
@@ -1,87 +0,0 @@
1
- #!/usr/bin/env python3
2
- from __future__ import annotations
3
-
4
- import argparse
5
- import json
6
- import os
7
- import subprocess
8
- import sys
9
- from typing import Sequence
10
-
11
- from playwright_exactness_manifest import PLAYWRIGHT_HARNESS_ROOT, PLAYWRIGHT_SUITES, get_suite_by_id
12
-
13
-
14
- def parse_args() -> argparse.Namespace:
15
- parser = argparse.ArgumentParser(
16
- description="Run retained Playwright exactness suites through the canonical SDD toolchain entrypoint.",
17
- )
18
- parser.add_argument("--list", action="store_true", help="List registered suite ids and exit.")
19
- parser.add_argument("--suite", action="append", dest="suites", help="Suite id from playwright_exactness_manifest.py. Repeatable.")
20
- parser.add_argument("--base-url", help="Override BASE_URL.")
21
- parser.add_argument("--api-base-url", help="Override API_BASE_URL.")
22
- parser.add_argument("--browser", help="Forward Playwright --browser option.")
23
- parser.add_argument("--grep", help="Forward Playwright -g/--grep option.")
24
- parser.add_argument("--reporter", default="list", help="Playwright reporter. Default: list")
25
- parser.add_argument("--dry-run", action="store_true", help="Print command and exit without running.")
26
- parser.add_argument("--arg", action="append", dest="extra_args", default=[], help="Additional Playwright CLI arg. Repeatable.")
27
- return parser.parse_args()
28
-
29
-
30
- def emit_suite_list() -> None:
31
- json.dump(PLAYWRIGHT_SUITES, sys.stdout, ensure_ascii=False, indent=2)
32
- sys.stdout.write("\n")
33
-
34
-
35
- def build_command(suite_ids: Sequence[str], *, grep: str | None, browser: str | None, reporter: str, extra_args: Sequence[str]) -> list[str]:
36
- command = ["npm", "test", "--"]
37
- for suite_id in suite_ids:
38
- suite = get_suite_by_id(suite_id)
39
- command.append(str(suite["spec"]))
40
- if grep:
41
- command.extend(["-g", grep])
42
- if browser:
43
- command.append(f"--browser={browser}")
44
- if reporter:
45
- command.append(f"--reporter={reporter}")
46
- command.extend(extra_args)
47
- return command
48
-
49
-
50
- def main() -> int:
51
- args = parse_args()
52
- if args.list:
53
- emit_suite_list()
54
- return 0
55
-
56
- if not args.suites:
57
- raise SystemExit("At least one --suite is required unless --list is used.")
58
-
59
- command = build_command(
60
- args.suites,
61
- grep=args.grep,
62
- browser=args.browser,
63
- reporter=args.reporter,
64
- extra_args=args.extra_args,
65
- )
66
-
67
- env = os.environ.copy()
68
- if args.base_url:
69
- env["BASE_URL"] = args.base_url
70
- if args.api_base_url:
71
- env["API_BASE_URL"] = args.api_base_url
72
-
73
- if args.dry_run:
74
- print(f"cwd={PLAYWRIGHT_HARNESS_ROOT}")
75
- print("command=" + " ".join(command))
76
- if args.base_url:
77
- print(f"BASE_URL={args.base_url}")
78
- if args.api_base_url:
79
- print(f"API_BASE_URL={args.api_base_url}")
80
- return 0
81
-
82
- completed = subprocess.run(command, cwd=PLAYWRIGHT_HARNESS_ROOT, env=env, check=False)
83
- return completed.returncode
84
-
85
-
86
- if __name__ == "__main__":
87
- raise SystemExit(main())