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.
- package/README.md +72 -54
- package/bin/agentic-dev.mjs +162 -11
- package/lib/github.mjs +246 -0
- package/lib/orchestration-assets.mjs +249 -0
- package/lib/scaffold.mjs +89 -0
- package/package.json +8 -19
- package/.dockerignore +0 -8
- package/.env.example +0 -50
- package/.gitignore +0 -16
- package/AGENTS.md +0 -86
- package/SDD_SKILL.md +0 -589
- package/compose.yml +0 -206
- package/infra/compose/.env.dev.example +0 -28
- package/infra/compose/.env.prod.example +0 -29
- package/infra/compose/README.md +0 -35
- package/infra/compose/dev.yml +0 -125
- package/infra/compose/prod.yml +0 -126
- package/infra/terraform/README.md +0 -34
- package/infra/terraform/aws/data/.terraform.lock.hcl +0 -25
- package/infra/terraform/aws/data/README.md +0 -18
- package/infra/terraform/aws/data/main.tf +0 -147
- package/infra/terraform/aws/data/outputs.tf +0 -14
- package/infra/terraform/aws/data/variables.tf +0 -57
- package/infra/terraform/aws/data/versions.tf +0 -10
- package/infra/terraform/aws/domain/.terraform.lock.hcl +0 -25
- package/infra/terraform/aws/domain/README.md +0 -20
- package/infra/terraform/aws/domain/env/dev.tfvars.example +0 -6
- package/infra/terraform/aws/domain/env/prod.tfvars.example +0 -7
- package/infra/terraform/aws/domain/main.tf +0 -149
- package/infra/terraform/aws/domain/outputs.tf +0 -29
- package/infra/terraform/aws/domain/variables.tf +0 -58
- package/infra/terraform/aws/domain/versions.tf +0 -10
- package/infra/terraform/openstack/README.md +0 -38
- package/infra/terraform/openstack/dev/.terraform.lock.hcl +0 -24
- package/infra/terraform/openstack/dev/README.md +0 -18
- package/infra/terraform/openstack/dev/main.tf +0 -49
- package/infra/terraform/openstack/dev/providers.tf +0 -15
- package/infra/terraform/openstack/dev/terraform.tfvars.example +0 -54
- package/infra/terraform/openstack/dev/variables.tf +0 -210
- package/infra/terraform/openstack/dev/versions.tf +0 -10
- package/infra/terraform/openstack/modules/environment_host/main.tf +0 -143
- package/infra/terraform/openstack/modules/environment_host/outputs.tf +0 -25
- package/infra/terraform/openstack/modules/environment_host/templates/docker-host-user-data.sh.tftpl +0 -40
- package/infra/terraform/openstack/modules/environment_host/variables.tf +0 -145
- package/infra/terraform/openstack/modules/environment_host/versions.tf +0 -7
- package/infra/terraform/openstack/prod/.terraform.lock.hcl +0 -24
- package/infra/terraform/openstack/prod/README.md +0 -18
- package/infra/terraform/openstack/prod/main.tf +0 -49
- package/infra/terraform/openstack/prod/providers.tf +0 -15
- package/infra/terraform/openstack/prod/terraform.tfvars.example +0 -55
- package/infra/terraform/openstack/prod/variables.tf +0 -210
- package/infra/terraform/openstack/prod/versions.tf +0 -10
- package/infra/terraform/openstack/server/.terraform.lock.hcl +0 -45
- package/infra/terraform/openstack/server/README.md +0 -47
- package/infra/terraform/openstack/server/main.tf +0 -161
- package/infra/terraform/openstack/server/outputs.tf +0 -30
- package/infra/terraform/openstack/server/providers.tf +0 -30
- package/infra/terraform/openstack/server/templates/server-user-data.sh.tftpl +0 -50
- package/infra/terraform/openstack/server/variables.tf +0 -233
- package/infra/terraform/openstack/server/zz_aspace.auto.tfvars.example.json +0 -29
- package/pnpm-workspace.yaml +0 -2
- package/scripts/dev/audit_sdd_build_ast.py +0 -277
- package/sdd/01_planning/01_feature/INDEX.md +0 -16
- package/sdd/01_planning/01_feature/README.md +0 -76
- package/sdd/01_planning/01_feature/alerts_feature_spec.md +0 -55
- package/sdd/01_planning/01_feature/auth_feature_spec.md +0 -57
- package/sdd/01_planning/01_feature/catalog_feature_spec.md +0 -61
- package/sdd/01_planning/01_feature/fulfillment_feature_spec.md +0 -58
- package/sdd/01_planning/01_feature/health_feature_spec.md +0 -52
- package/sdd/01_planning/01_feature/inventory_feature_spec.md +0 -60
- package/sdd/01_planning/01_feature/order_feature_spec.md +0 -63
- package/sdd/01_planning/01_feature/shipping_feature_spec.md +0 -55
- package/sdd/01_planning/01_feature/support_feature_spec.md +0 -53
- package/sdd/01_planning/01_feature/user_feature_spec.md +0 -54
- package/sdd/01_planning/02_screen/INDEX.md +0 -13
- package/sdd/01_planning/02_screen/README.md +0 -41
- package/sdd/01_planning/02_screen/admin_screen_spec.pdf +0 -0
- package/sdd/01_planning/02_screen/assets/README.md +0 -16
- package/sdd/01_planning/02_screen/assets/example/README.md +0 -13
- package/sdd/01_planning/02_screen/landing_screen_spec.pdf +0 -0
- package/sdd/01_planning/02_screen/mobile_screen_spec.pdf +0 -0
- package/sdd/01_planning/02_screen/web_screen_spec.pdf +0 -0
- package/sdd/01_planning/03_architecture/INDEX.md +0 -9
- package/sdd/01_planning/03_architecture/README.md +0 -25
- package/sdd/01_planning/03_architecture/architecture_document_structure.md +0 -77
- package/sdd/01_planning/03_architecture/backend/README.md +0 -10
- package/sdd/01_planning/03_architecture/frontend/README.md +0 -12
- package/sdd/01_planning/03_architecture/infra/README.md +0 -10
- package/sdd/01_planning/03_architecture/tech-research/README.md +0 -4
- package/sdd/01_planning/03_architecture/templates_system_architecture.md +0 -84
- package/sdd/01_planning/04_data/INDEX.md +0 -4
- package/sdd/01_planning/04_data/README.md +0 -10
- package/sdd/01_planning/04_data/templates_data_modeling.md +0 -119
- package/sdd/01_planning/05_api/README.md +0 -12
- package/sdd/01_planning/05_api/templates_api_contract.md +0 -90
- package/sdd/01_planning/06_iac/README.md +0 -11
- package/sdd/01_planning/06_iac/templates_runtime_and_cicd_baseline.md +0 -46
- package/sdd/01_planning/07_integration/README.md +0 -11
- package/sdd/01_planning/07_integration/templates_frontend_api_integration.md +0 -46
- package/sdd/01_planning/08_nonfunctional/README.md +0 -7
- package/sdd/01_planning/09_security/README.md +0 -7
- package/sdd/01_planning/10_test/README.md +0 -12
- package/sdd/01_planning/10_test/templates_test_strategy.md +0 -60
- package/sdd/01_planning/INDEX.md +0 -19
- package/sdd/01_planning/README.md +0 -17
- package/sdd/02_plan/01_feature/README.md +0 -34
- package/sdd/02_plan/01_feature/_feature_todo_template.md +0 -29
- package/sdd/02_plan/02_screen/INDEX.md +0 -19
- package/sdd/02_plan/02_screen/README.md +0 -39
- package/sdd/02_plan/02_screen/_screen_todo_template.md +0 -60
- package/sdd/02_plan/03_architecture/README.md +0 -23
- package/sdd/02_plan/03_architecture/architecture_document_governance.md +0 -40
- package/sdd/02_plan/03_architecture/build_ast_runtime_tree_governance.md +0 -53
- package/sdd/02_plan/03_architecture/repository_governance.md +0 -39
- package/sdd/02_plan/03_architecture/runtime_and_structure_governance.md +0 -38
- package/sdd/02_plan/03_architecture/templates-hexagonal-template-architecture.md +0 -9
- package/sdd/02_plan/03_architecture/toolchain_governance.md +0 -98
- package/sdd/02_plan/04_data/README.md +0 -5
- package/sdd/02_plan/05_api/README.md +0 -5
- package/sdd/02_plan/06_iac/README.md +0 -11
- package/sdd/02_plan/06_iac/dev_runtime_delivery.md +0 -36
- package/sdd/02_plan/06_iac/template_runtime_delivery.md +0 -50
- package/sdd/02_plan/07_integration/README.md +0 -5
- package/sdd/02_plan/07_integration/frontend_live_integration.md +0 -31
- package/sdd/02_plan/08_nonfunctional/README.md +0 -5
- package/sdd/02_plan/08_nonfunctional/repository_hygiene.md +0 -26
- package/sdd/02_plan/09_security/README.md +0 -5
- package/sdd/02_plan/10_test/README.md +0 -11
- package/sdd/02_plan/10_test/regression_verification.md +0 -39
- package/sdd/02_plan/10_test/templates/README.md +0 -8
- package/sdd/02_plan/10_test/templates/ui_parity_web_contract.template.yaml +0 -23
- package/sdd/02_plan/10_test/verification_strategy.md +0 -43
- package/sdd/02_plan/99_generated/from_planning/ui_parity/.gitkeep +0 -1
- package/sdd/02_plan/README.md +0 -40
- package/sdd/03_build/01_feature/README.md +0 -20
- package/sdd/03_build/01_feature/domain/README.md +0 -3
- package/sdd/03_build/01_feature/domain/account_and_access.md +0 -20
- package/sdd/03_build/01_feature/domain/catalog_and_inventory.md +0 -20
- package/sdd/03_build/01_feature/domain/ordering_and_fulfillment.md +0 -21
- package/sdd/03_build/01_feature/domain/support_and_observability.md +0 -21
- package/sdd/03_build/01_feature/domain_surfaces.md +0 -28
- package/sdd/03_build/01_feature/service/README.md +0 -3
- package/sdd/03_build/01_feature/service/admin_surface.md +0 -15
- package/sdd/03_build/01_feature/service/landing_surface.md +0 -13
- package/sdd/03_build/01_feature/service/mobile_surface.md +0 -14
- package/sdd/03_build/01_feature/service/web_surface.md +0 -14
- package/sdd/03_build/02_screen/README.md +0 -25
- package/sdd/03_build/02_screen/_screen_build_template.md +0 -26
- package/sdd/03_build/02_screen/admin/README.md +0 -5
- package/sdd/03_build/02_screen/landing/README.md +0 -5
- package/sdd/03_build/02_screen/mobile/README.md +0 -5
- package/sdd/03_build/02_screen/web/README.md +0 -5
- package/sdd/03_build/03_architecture/README.md +0 -10
- package/sdd/03_build/03_architecture/architecture_document_governance.md +0 -30
- package/sdd/03_build/03_architecture/build_ast_runtime_tree_governance.md +0 -24
- package/sdd/03_build/03_architecture/repository_governance.md +0 -18
- package/sdd/03_build/03_architecture/toolchain_governance.md +0 -36
- package/sdd/03_build/06_iac/README.md +0 -3
- package/sdd/03_build/06_iac/dev_runtime_delivery.md +0 -10
- package/sdd/03_build/06_iac/template_runtime_delivery.md +0 -49
- package/sdd/03_build/07_integration/README.md +0 -3
- package/sdd/03_build/07_integration/frontend_live_integration.md +0 -11
- package/sdd/03_build/08_nonfunctional/README.md +0 -3
- package/sdd/03_build/08_nonfunctional/repository_hygiene.md +0 -10
- package/sdd/03_build/10_test/README.md +0 -9
- package/sdd/03_build/10_test/regression_verification.md +0 -16
- package/sdd/03_build/10_test/verification_harness.md +0 -11
- package/sdd/03_build/README.md +0 -35
- package/sdd/03_verify/01_feature/README.md +0 -5
- package/sdd/03_verify/01_feature/domain_verification.md +0 -14
- package/sdd/03_verify/01_feature/service_verification.md +0 -22
- package/sdd/03_verify/02_screen/README.md +0 -6
- package/sdd/03_verify/02_screen/_screen_verify_template.md +0 -20
- package/sdd/03_verify/02_screen/admin/README.md +0 -4
- package/sdd/03_verify/02_screen/landing/README.md +0 -4
- package/sdd/03_verify/02_screen/mobile/README.md +0 -4
- package/sdd/03_verify/02_screen/web/README.md +0 -4
- package/sdd/03_verify/03_architecture/README.md +0 -10
- package/sdd/03_verify/03_architecture/architecture_document_governance.md +0 -15
- package/sdd/03_verify/03_architecture/build_ast_runtime_tree_governance.md +0 -28
- package/sdd/03_verify/03_architecture/repository_governance.md +0 -16
- package/sdd/03_verify/03_architecture/toolchain_governance.md +0 -58
- package/sdd/03_verify/06_iac/README.md +0 -3
- package/sdd/03_verify/06_iac/dev_runtime_delivery.md +0 -10
- package/sdd/03_verify/06_iac/template_runtime_delivery.md +0 -42
- package/sdd/03_verify/07_integration/README.md +0 -3
- package/sdd/03_verify/07_integration/frontend_live_integration.md +0 -16
- package/sdd/03_verify/08_nonfunctional/README.md +0 -3
- package/sdd/03_verify/08_nonfunctional/repository_hygiene.md +0 -14
- package/sdd/03_verify/10_test/README.md +0 -9
- package/sdd/03_verify/10_test/regression_verification.md +0 -16
- package/sdd/03_verify/10_test/ui_parity/README.md +0 -4
- package/sdd/03_verify/10_test/ui_parity/loop_runs/.gitkeep +0 -0
- package/sdd/03_verify/10_test/ui_parity/reference/.gitkeep +0 -0
- package/sdd/03_verify/10_test/ui_parity/staged_runs/.gitkeep +0 -0
- package/sdd/03_verify/10_test/verification_harness.md +0 -17
- package/sdd/03_verify/README.md +0 -22
- package/sdd/05_operate/01_runbooks/.gitkeep +0 -1
- package/sdd/05_operate/01_runbooks/README.md +0 -4
- package/sdd/05_operate/02_delivery_status/README.md +0 -4
- package/sdd/05_operate/02_delivery_status/service_status.md +0 -16
- package/sdd/05_operate/README.md +0 -12
- package/sdd/99_toolchain/01_automation/.gitkeep +0 -1
- package/sdd/99_toolchain/01_automation/README.md +0 -76
- package/sdd/99_toolchain/01_automation/agentic-dev/analyze_proof_results.py +0 -132
- package/sdd/99_toolchain/01_automation/agentic-dev/analyze_route_gap.py +0 -85
- package/sdd/99_toolchain/01_automation/agentic-dev/assets/repo-contract.template.json +0 -75
- package/sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh +0 -84
- package/sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh +0 -33
- package/sdd/99_toolchain/01_automation/agentic-dev/init_repo_contract.sh +0 -51
- package/sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json +0 -76
- package/sdd/99_toolchain/01_automation/agentic-dev/resolve_frontend_target.py +0 -52
- package/sdd/99_toolchain/01_automation/agentic-dev/resolve_repo_contract.py +0 -56
- package/sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh +0 -100
- package/sdd/99_toolchain/01_automation/agentic-dev/run_repo_phase.sh +0 -140
- package/sdd/99_toolchain/01_automation/agentic-dev/validate_json_schema.py +0 -39
- package/sdd/99_toolchain/01_automation/agentic-parity-harness-design.md +0 -291
- package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/dashboard.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/login.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/queue.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/support.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/home.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/login.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/workspace.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/dashboard.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/fulfillment.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/login.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/web_screen_capture/dashboard.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/web_screen_capture/login.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/web_screen_capture/orders.png +0 -0
- package/sdd/99_toolchain/01_automation/build_asset_recipes.py +0 -10
- package/sdd/99_toolchain/01_automation/build_screen_spec_pdf.py +0 -427
- package/sdd/99_toolchain/01_automation/capture_screen_assets.mjs +0 -148
- package/sdd/99_toolchain/01_automation/harness-layout.md +0 -34
- package/sdd/99_toolchain/01_automation/parity-execution-tooling-design.md +0 -319
- package/sdd/99_toolchain/01_automation/playwright_exactness_manifest.py +0 -21
- package/sdd/99_toolchain/01_automation/run_playwright_exactness.py +0 -87
- package/sdd/99_toolchain/01_automation/screen_spec_manifest.py +0 -321
- package/sdd/99_toolchain/01_automation/spec_asset_builder.py +0 -274
- package/sdd/99_toolchain/01_automation/ui-contract-projection.md +0 -79
- package/sdd/99_toolchain/01_automation/ui-parity/README.md +0 -60
- package/sdd/99_toolchain/01_automation/ui-parity/cli/extract-reference-pages.mjs +0 -2
- package/sdd/99_toolchain/01_automation/ui-parity/cli/materialize-reference-assets.mjs +0 -58
- package/sdd/99_toolchain/01_automation/ui-parity/cli/normalize-reference-assets.mjs +0 -2
- package/sdd/99_toolchain/01_automation/ui-parity/cli/route-gap-report.mjs +0 -187
- package/sdd/99_toolchain/01_automation/ui-parity/cli/run-proof.mjs +0 -50
- package/sdd/99_toolchain/01_automation/ui-parity/cli/scaffold-contract.mjs +0 -62
- package/sdd/99_toolchain/01_automation/ui-parity/cli/upload-parity1.mjs +0 -2
- package/sdd/99_toolchain/01_automation/ui-parity/contracts/collector-metadata.schema.json +0 -33
- package/sdd/99_toolchain/01_automation/ui-parity/contracts/proof-result.schema.json +0 -76
- package/sdd/99_toolchain/01_automation/ui-parity/contracts/route-gap-report.schema.json +0 -95
- package/sdd/99_toolchain/01_automation/ui-parity/core/capture-runner.mjs +0 -55
- package/sdd/99_toolchain/01_automation/ui-parity/core/load-adapter.mjs +0 -25
- package/sdd/99_toolchain/01_automation/ui-parity/core/load-contract.mjs +0 -81
- package/sdd/99_toolchain/01_automation/ui-parity/core/paths.mjs +0 -23
- package/sdd/99_toolchain/01_automation/ui-parity/core/proof-runner.mjs +0 -255
- package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-artifact-layout.md +0 -23
- package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-proof-interface.md +0 -60
- package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-route-gap-interface.md +0 -82
- package/sdd/99_toolchain/01_automation/ui-parity/runtime/playwright-runtime.mjs +0 -16
- package/sdd/99_toolchain/01_automation/ui-parity/runtime/static-runtime.mjs +0 -6
- package/sdd/99_toolchain/02_policies/.gitkeep +0 -1
- package/sdd/99_toolchain/02_policies/build-ast-governance-policy.md +0 -22
- package/sdd/99_toolchain/02_policies/compose-runtime-baseline-policy.md +0 -24
- package/sdd/99_toolchain/02_policies/convention-storage-policy.md +0 -26
- package/sdd/99_toolchain/02_policies/main-push-before-dev-deploy-policy.md +0 -27
- package/sdd/99_toolchain/02_policies/regression-verification-policy.md +0 -22
- package/sdd/99_toolchain/03_templates/.gitkeep +0 -1
- package/sdd/99_toolchain/03_templates/asset_recipe_manifest.example.py +0 -38
- package/sdd/99_toolchain/03_templates/generated_assets/README.md +0 -11
- package/sdd/99_toolchain/03_templates/generated_assets/example-brand-lockup.svg +0 -3
- package/sdd/99_toolchain/03_templates/generated_assets/example-brand-mark.svg +0 -3
- package/sdd/99_toolchain/03_templates/generated_assets/example-brand-wordmark.svg +0 -3
- package/sdd/99_toolchain/03_templates/playwright_exactness_manifest.example.py +0 -21
- package/sdd/99_toolchain/README.md +0 -23
- 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())
|