agentic-dev 0.1.0 → 0.2.1
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 +29 -0
- package/.agent/progress.txt +1 -0
- package/.agent/prompt.md +21 -0
- package/.agent/ralph-loop-state.json +13 -0
- package/.agent/ralph-supervisor-state.json +12 -0
- package/.agent/ralph-supervisor.sh +238 -0
- package/.agent/ralph.sh +305 -0
- package/.agent/runs/README.md +7 -0
- package/.agent/sdd-build-ast-audit.json +13 -0
- package/.claude/CLAUDE.md +44 -0
- package/.claude/agentic-dev.json +3 -0
- package/.claude/agents/ai-dev.md +27 -0
- package/.claude/agents/backend-dev.md +26 -0
- package/.claude/agents/db-dev.md +26 -0
- package/.claude/agents/devops.md +27 -0
- package/.claude/agents/frontend-dev.md +25 -0
- package/.claude/agents/github-ops.md +25 -0
- package/.claude/agents/test-dev.md +26 -0
- package/.claude/agents/uiux-designer.md +25 -0
- package/.claude/settings.json +49 -0
- package/.claude/settings.local.json +8 -0
- package/.claude/skills/commit/SKILL.md +37 -0
- package/.claude/skills/dev-browser/SKILL.md +30 -0
- package/.claude/skills/otro/SKILL.md +43 -0
- package/.claude/skills/planning-with-files/SKILL.md +37 -0
- package/.claude/skills/prd/SKILL.md +27 -0
- package/.claude/skills/ralph-loop/SKILL.md +42 -0
- package/.claude/skills/sdd/SKILL.md +13 -0
- package/.claude/skills/sdd-dev/SKILL.md +71 -0
- package/.claude/skills/sdd-development/SKILL.md +13 -0
- package/.claude/workspace-config.json +3 -0
- package/.codex/agentic-dev.json +3 -0
- package/.codex/agents/README.md +22 -0
- package/.codex/agents/api.toml +11 -0
- package/.codex/agents/architecture.toml +11 -0
- package/.codex/agents/ci.toml +11 -0
- package/.codex/agents/gitops.toml +11 -0
- package/.codex/agents/orchestrator.toml +11 -0
- package/.codex/agents/quality.toml +11 -0
- package/.codex/agents/runtime.toml +11 -0
- package/.codex/agents/security.toml +11 -0
- package/.codex/agents/specs.toml +11 -0
- package/.codex/agents/ui.toml +11 -0
- package/.codex/config.toml +46 -0
- package/.codex/skills/SKILL.md +13 -0
- package/.codex/skills/agents/openai.yaml +4 -0
- package/.codex/skills/commit/SKILL.md +219 -0
- package/.codex/skills/commit/references/commit_examples.md +292 -0
- package/.codex/skills/dev-browser/SKILL.md +211 -0
- package/.codex/skills/dev-browser/bun.lock +443 -0
- package/.codex/skills/dev-browser/package-lock.json +2988 -0
- package/.codex/skills/dev-browser/package.json +31 -0
- package/.codex/skills/dev-browser/references/scraping.md +155 -0
- package/.codex/skills/dev-browser/scripts/start-relay.ts +32 -0
- package/.codex/skills/dev-browser/scripts/start-server.ts +117 -0
- package/.codex/skills/dev-browser/server.sh +24 -0
- package/.codex/skills/dev-browser/src/client.ts +474 -0
- package/.codex/skills/dev-browser/src/index.ts +287 -0
- package/.codex/skills/dev-browser/src/relay.ts +731 -0
- package/.codex/skills/dev-browser/src/snapshot/__tests__/snapshot.test.ts +223 -0
- package/.codex/skills/dev-browser/src/snapshot/browser-script.ts +877 -0
- package/.codex/skills/dev-browser/src/snapshot/index.ts +14 -0
- package/.codex/skills/dev-browser/src/snapshot/inject.ts +13 -0
- package/.codex/skills/dev-browser/src/types.ts +34 -0
- package/.codex/skills/dev-browser/tsconfig.json +36 -0
- package/.codex/skills/dev-browser/vitest.config.ts +12 -0
- package/.codex/skills/otro/SKILL.md +74 -0
- package/.codex/skills/otro/agents/openai.yaml +4 -0
- package/.codex/skills/otro/references/agent-prompts.md +61 -0
- package/.codex/skills/otro/references/contracts.md +146 -0
- package/.codex/skills/otro/references/orchestration-loop.md +51 -0
- package/.codex/skills/otro/references/runtime.md +79 -0
- package/.codex/skills/otro/runs/README.md +11 -0
- package/.codex/skills/otro/schemas/step_plan.schema.json +289 -0
- package/.codex/skills/otro/schemas/task_result.schema.json +142 -0
- package/.codex/skills/otro/schemas/wave_plan.schema.json +4 -0
- package/.codex/skills/otro/scripts/README.md +38 -0
- package/.codex/skills/otro/scripts/bump_validation_header.py +179 -0
- package/.codex/skills/otro/scripts/check_validation_header.py +84 -0
- package/.codex/skills/otro/scripts/common.py +303 -0
- package/.codex/skills/otro/scripts/init_run.sh +68 -0
- package/.codex/skills/otro/scripts/plan_loop.py +8 -0
- package/.codex/skills/otro/scripts/plan_step.py +367 -0
- package/.codex/skills/otro/scripts/plan_wave.py +8 -0
- package/.codex/skills/otro/scripts/reconcile_loop.py +8 -0
- package/.codex/skills/otro/scripts/reconcile_step.py +37 -0
- package/.codex/skills/otro/scripts/reconcile_wave.py +8 -0
- package/.codex/skills/otro/scripts/run_loop.py +300 -0
- package/.codex/skills/otro/scripts/run_loop_step.py +8 -0
- package/.codex/skills/otro/scripts/run_step.py +246 -0
- package/.codex/skills/otro/scripts/run_wave.py +8 -0
- package/.codex/skills/otro/validation/validation.md +15 -0
- package/.codex/skills/planning-with-files/SKILL.md +42 -0
- package/.codex/skills/planning-with-files/agents/openai.yaml +4 -0
- package/.codex/skills/planning-with-files/assets/plan-template.md +37 -0
- package/.codex/skills/planning-with-files/references/plan-rules.md +35 -0
- package/.codex/skills/planning-with-files/scripts/new_plan.sh +65 -0
- package/.codex/skills/prd/SKILL.md +235 -0
- package/.codex/skills/ralph-loop/SKILL.md +46 -0
- package/.codex/skills/ralph-loop/agents/openai.yaml +4 -0
- package/.codex/skills/ralph-loop/references/failure-triage.md +32 -0
- package/.codex/skills/ralph-loop/scripts/loop_until_success.sh +97 -0
- package/.codex/skills/sdd/SKILL.md +184 -0
- package/.codex/skills/sdd/agents/openai.yaml +4 -0
- package/.codex/skills/sdd/references/section-map.md +67 -0
- package/.dockerignore +8 -0
- package/.env.example +50 -0
- package/.gitignore +16 -0
- package/AGENTS.md +78 -0
- package/README.md +83 -47
- package/SDD_SKILL.md +589 -0
- package/bin/agentic-dev.mjs +97 -0
- package/client/admin/.dockerignore +3 -0
- package/client/admin/.env.example +1 -0
- package/client/admin/Dockerfile +16 -0
- package/client/admin/Dockerfile.dev +18 -0
- package/client/admin/README.md +20 -0
- package/client/admin/index.html +12 -0
- package/client/admin/package.json +41 -0
- package/client/admin/postcss.config.js +6 -0
- package/client/admin/scripts/ui-parity-admin-adapter.mjs +65 -0
- package/client/admin/src/api/alerts.ts +33 -0
- package/client/admin/src/api/client.ts +71 -0
- package/client/admin/src/api/orders.ts +33 -0
- package/client/admin/src/api/support.ts +11 -0
- package/client/admin/src/app/App.tsx +23 -0
- package/client/admin/src/auth/AuthProvider.tsx +122 -0
- package/client/admin/src/auth/ProtectedRoute.tsx +22 -0
- package/client/admin/src/auth/auth-client.ts +38 -0
- package/client/admin/src/auth/types.ts +18 -0
- package/client/admin/src/components/AdminNotificationsDrawer.tsx +162 -0
- package/client/admin/src/components/AdminShell.tsx +76 -0
- package/client/admin/src/components/ui/button.tsx +34 -0
- package/client/admin/src/components/ui/input.tsx +21 -0
- package/client/admin/src/lib/cn.ts +6 -0
- package/client/admin/src/lib/specRouteCatalog.json +30 -0
- package/client/admin/src/lib/specScreens.json +22 -0
- package/client/admin/src/main.tsx +17 -0
- package/client/admin/src/pages/AdminDashboardPage.tsx +171 -0
- package/client/admin/src/pages/AdminLoginPage.tsx +75 -0
- package/client/admin/src/pages/AdminQueuePage.tsx +107 -0
- package/client/admin/src/pages/AdminSupportPage.tsx +61 -0
- package/client/admin/src/styles/globals.css +17 -0
- package/client/admin/src/theme-vars.ts +18 -0
- package/client/admin/src/theme.ts +25 -0
- package/client/admin/src/vite-env.d.ts +1 -0
- package/client/admin/tailwind.config.js +8 -0
- package/client/admin/tsconfig.json +25 -0
- package/client/admin/vite.config.ts +12 -0
- package/client/landing/.dockerignore +3 -0
- package/client/landing/.env.example +1 -0
- package/client/landing/Dockerfile +16 -0
- package/client/landing/Dockerfile.dev +18 -0
- package/client/landing/README.md +18 -0
- package/client/landing/index.html +12 -0
- package/client/landing/package.json +41 -0
- package/client/landing/postcss.config.js +6 -0
- package/client/landing/scripts/ui-parity-landing-adapter.mjs +65 -0
- package/client/landing/src/App.tsx +21 -0
- package/client/landing/src/api/catalog.ts +30 -0
- package/client/landing/src/api/client.ts +30 -0
- package/client/landing/src/auth/AuthProvider.tsx +122 -0
- package/client/landing/src/auth/ProtectedRoute.tsx +22 -0
- package/client/landing/src/auth/auth-client.ts +38 -0
- package/client/landing/src/auth/types.ts +18 -0
- package/client/landing/src/components/LandingShell.tsx +34 -0
- package/client/landing/src/lib/specRouteCatalog.json +23 -0
- package/client/landing/src/lib/specScreens.json +17 -0
- package/client/landing/src/main.tsx +17 -0
- package/client/landing/src/pages/LandingHomePage.tsx +215 -0
- package/client/landing/src/pages/LandingLoginPage.tsx +90 -0
- package/client/landing/src/pages/LandingWorkspacePage.tsx +126 -0
- package/client/landing/src/styles/globals.css +17 -0
- package/client/landing/src/theme-vars.ts +16 -0
- package/client/landing/src/theme.ts +21 -0
- package/client/landing/src/vite-env.d.ts +1 -0
- package/client/landing/tailwind.config.js +8 -0
- package/client/landing/tsconfig.json +25 -0
- package/client/landing/vite.config.ts +12 -0
- package/client/mobile/.dockerignore +2 -0
- package/client/mobile/.env.example +1 -0
- package/client/mobile/Dockerfile +16 -0
- package/client/mobile/Dockerfile.dev +18 -0
- package/client/mobile/README.md +19 -0
- package/client/mobile/index.html +12 -0
- package/client/mobile/package.json +42 -0
- package/client/mobile/postcss.config.js +6 -0
- package/client/mobile/scripts/ui-parity-mobile-adapter.mjs +67 -0
- package/client/mobile/src/App.tsx +1 -0
- package/client/mobile/src/api/client.ts +62 -0
- package/client/mobile/src/api/fulfillment.ts +55 -0
- package/client/mobile/src/api/shipping.ts +56 -0
- package/client/mobile/src/app/App.tsx +23 -0
- package/client/mobile/src/auth/AuthProvider.tsx +122 -0
- package/client/mobile/src/auth/ProtectedRoute.tsx +27 -0
- package/client/mobile/src/auth/auth-client.ts +38 -0
- package/client/mobile/src/auth/types.ts +18 -0
- package/client/mobile/src/components/InShell.tsx +74 -0
- package/client/mobile/src/components/ui/button.tsx +35 -0
- package/client/mobile/src/components/ui/card.tsx +15 -0
- package/client/mobile/src/components/ui/input.tsx +21 -0
- package/client/mobile/src/lib/cn.ts +6 -0
- package/client/mobile/src/lib/specRouteCatalog.json +26 -0
- package/client/mobile/src/lib/specScreens.json +22 -0
- package/client/mobile/src/lib/useSpeechRecognitionInput.ts +271 -0
- package/client/mobile/src/main.tsx +17 -0
- package/client/mobile/src/pages/DashboardPage.tsx +172 -0
- package/client/mobile/src/pages/FulfillmentPage.tsx +138 -0
- package/client/mobile/src/pages/LoginPage.tsx +74 -0
- package/client/mobile/src/pages/ShippingPage.tsx +338 -0
- package/client/mobile/src/styles/globals.css +23 -0
- package/client/mobile/src/theme-vars.ts +16 -0
- package/client/mobile/src/theme.ts +21 -0
- package/client/mobile/src/vite-env.d.ts +1 -0
- package/client/mobile/tailwind.config.js +8 -0
- package/client/mobile/tsconfig.json +25 -0
- package/client/mobile/vite.config.ts +12 -0
- package/client/platform/.dockerignore +3 -0
- package/client/platform/.env.example +1 -0
- package/client/platform/Dockerfile +16 -0
- package/client/platform/Dockerfile.dev +18 -0
- package/client/platform/README.md +47 -0
- package/client/platform/index.html +12 -0
- package/client/platform/package.json +42 -0
- package/client/platform/postcss.config.js +6 -0
- package/client/platform/scripts/ui-parity-platform-adapter.mjs +66 -0
- package/client/platform/src/api/client.ts +30 -0
- package/client/platform/src/api/orders.ts +42 -0
- package/client/platform/src/app/App.tsx +21 -0
- package/client/platform/src/auth/AuthProvider.tsx +122 -0
- package/client/platform/src/auth/ProtectedRoute.tsx +22 -0
- package/client/platform/src/auth/auth-client.ts +38 -0
- package/client/platform/src/auth/types.ts +18 -0
- package/client/platform/src/components/AppShell.tsx +59 -0
- package/client/platform/src/components/ui/button.tsx +35 -0
- package/client/platform/src/components/ui/card.tsx +7 -0
- package/client/platform/src/components/ui/input.tsx +21 -0
- package/client/platform/src/lib/cn.ts +6 -0
- package/client/platform/src/lib/specRouteCatalog.json +23 -0
- package/client/platform/src/lib/specScreens.json +17 -0
- package/client/platform/src/main.tsx +17 -0
- package/client/platform/src/pages/DashboardPage.tsx +158 -0
- package/client/platform/src/pages/LoginPage.tsx +72 -0
- package/client/platform/src/pages/OrdersPage.tsx +123 -0
- package/client/platform/src/styles/globals.css +17 -0
- package/client/platform/src/theme-vars.ts +18 -0
- package/client/platform/src/theme.ts +25 -0
- package/client/platform/src/vite-env.d.ts +1 -0
- package/client/platform/tailwind.config.js +8 -0
- package/client/platform/tsconfig.json +25 -0
- package/client/platform/vite.config.ts +12 -0
- package/compose.yml +206 -0
- package/infra/compose/.env.dev.example +28 -0
- package/infra/compose/.env.prod.example +29 -0
- package/infra/compose/README.md +35 -0
- package/infra/compose/dev.yml +125 -0
- package/infra/compose/prod.yml +126 -0
- package/infra/terraform/README.md +34 -0
- package/infra/terraform/aws/data/.terraform.lock.hcl +25 -0
- package/infra/terraform/aws/data/README.md +18 -0
- package/infra/terraform/aws/data/main.tf +147 -0
- package/infra/terraform/aws/data/outputs.tf +14 -0
- package/infra/terraform/aws/data/variables.tf +57 -0
- package/infra/terraform/aws/data/versions.tf +10 -0
- package/infra/terraform/aws/domain/.terraform.lock.hcl +25 -0
- package/infra/terraform/aws/domain/README.md +20 -0
- package/infra/terraform/aws/domain/env/dev.tfvars.example +6 -0
- package/infra/terraform/aws/domain/env/prod.tfvars.example +7 -0
- package/infra/terraform/aws/domain/main.tf +149 -0
- package/infra/terraform/aws/domain/outputs.tf +29 -0
- package/infra/terraform/aws/domain/variables.tf +58 -0
- package/infra/terraform/aws/domain/versions.tf +10 -0
- package/infra/terraform/openstack/README.md +38 -0
- package/infra/terraform/openstack/dev/.terraform.lock.hcl +24 -0
- package/infra/terraform/openstack/dev/README.md +18 -0
- package/infra/terraform/openstack/dev/main.tf +49 -0
- package/infra/terraform/openstack/dev/providers.tf +15 -0
- package/infra/terraform/openstack/dev/terraform.tfvars.example +54 -0
- package/infra/terraform/openstack/dev/variables.tf +210 -0
- package/infra/terraform/openstack/dev/versions.tf +10 -0
- package/infra/terraform/openstack/modules/environment_host/main.tf +143 -0
- package/infra/terraform/openstack/modules/environment_host/outputs.tf +25 -0
- package/infra/terraform/openstack/modules/environment_host/templates/docker-host-user-data.sh.tftpl +40 -0
- package/infra/terraform/openstack/modules/environment_host/variables.tf +145 -0
- package/infra/terraform/openstack/modules/environment_host/versions.tf +7 -0
- package/infra/terraform/openstack/prod/.terraform.lock.hcl +24 -0
- package/infra/terraform/openstack/prod/README.md +18 -0
- package/infra/terraform/openstack/prod/main.tf +49 -0
- package/infra/terraform/openstack/prod/providers.tf +15 -0
- package/infra/terraform/openstack/prod/terraform.tfvars.example +55 -0
- package/infra/terraform/openstack/prod/variables.tf +210 -0
- package/infra/terraform/openstack/prod/versions.tf +10 -0
- package/infra/terraform/openstack/server/.terraform.lock.hcl +45 -0
- package/infra/terraform/openstack/server/README.md +47 -0
- package/infra/terraform/openstack/server/main.tf +161 -0
- package/infra/terraform/openstack/server/outputs.tf +30 -0
- package/infra/terraform/openstack/server/providers.tf +30 -0
- package/infra/terraform/openstack/server/templates/server-user-data.sh.tftpl +50 -0
- package/infra/terraform/openstack/server/variables.tf +233 -0
- package/infra/terraform/openstack/server/zz_aspace.auto.tfvars.example.json +29 -0
- package/lib/scaffold.mjs +379 -0
- package/package.json +33 -12
- package/pnpm-workspace.yaml +2 -0
- package/scripts/dev/audit_sdd_build_ast.py +277 -0
- package/sdd/01_planning/01_feature/INDEX.md +16 -0
- package/sdd/01_planning/01_feature/README.md +76 -0
- package/sdd/01_planning/01_feature/alerts_feature_spec.md +55 -0
- package/sdd/01_planning/01_feature/auth_feature_spec.md +57 -0
- package/sdd/01_planning/01_feature/catalog_feature_spec.md +61 -0
- package/sdd/01_planning/01_feature/fulfillment_feature_spec.md +58 -0
- package/sdd/01_planning/01_feature/health_feature_spec.md +52 -0
- package/sdd/01_planning/01_feature/inventory_feature_spec.md +60 -0
- package/sdd/01_planning/01_feature/order_feature_spec.md +63 -0
- package/sdd/01_planning/01_feature/shipping_feature_spec.md +55 -0
- package/sdd/01_planning/01_feature/support_feature_spec.md +53 -0
- package/sdd/01_planning/01_feature/user_feature_spec.md +54 -0
- package/sdd/01_planning/02_screen/INDEX.md +13 -0
- package/sdd/01_planning/02_screen/README.md +41 -0
- package/sdd/01_planning/02_screen/admin_screen_spec.pdf +0 -0
- package/sdd/01_planning/02_screen/assets/README.md +16 -0
- package/sdd/01_planning/02_screen/assets/example/README.md +13 -0
- 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/platform_screen_spec.pdf +0 -0
- package/sdd/01_planning/03_architecture/INDEX.md +9 -0
- package/sdd/01_planning/03_architecture/README.md +25 -0
- package/sdd/01_planning/03_architecture/architecture_document_structure.md +77 -0
- package/sdd/01_planning/03_architecture/backend/README.md +10 -0
- package/sdd/01_planning/03_architecture/frontend/README.md +12 -0
- package/sdd/01_planning/03_architecture/infra/README.md +10 -0
- package/sdd/01_planning/03_architecture/tech-research/README.md +4 -0
- package/sdd/01_planning/03_architecture/templates_system_architecture.md +84 -0
- package/sdd/01_planning/04_data/INDEX.md +4 -0
- package/sdd/01_planning/04_data/README.md +10 -0
- package/sdd/01_planning/04_data/templates_data_modeling.md +119 -0
- package/sdd/01_planning/05_api/README.md +12 -0
- package/sdd/01_planning/05_api/templates_api_contract.md +90 -0
- package/sdd/01_planning/06_iac/README.md +11 -0
- package/sdd/01_planning/06_iac/templates_runtime_and_cicd_baseline.md +46 -0
- package/sdd/01_planning/07_integration/README.md +11 -0
- package/sdd/01_planning/07_integration/templates_frontend_api_integration.md +46 -0
- package/sdd/01_planning/08_nonfunctional/README.md +7 -0
- package/sdd/01_planning/09_security/README.md +7 -0
- package/sdd/01_planning/10_test/README.md +12 -0
- package/sdd/01_planning/10_test/templates_test_strategy.md +60 -0
- package/sdd/01_planning/INDEX.md +19 -0
- package/sdd/01_planning/README.md +17 -0
- package/sdd/02_plan/01_feature/README.md +34 -0
- package/sdd/02_plan/01_feature/_feature_todo_template.md +29 -0
- package/sdd/02_plan/02_screen/INDEX.md +19 -0
- package/sdd/02_plan/02_screen/README.md +39 -0
- package/sdd/02_plan/02_screen/_screen_todo_template.md +60 -0
- package/sdd/02_plan/03_architecture/README.md +23 -0
- package/sdd/02_plan/03_architecture/architecture_document_governance.md +40 -0
- package/sdd/02_plan/03_architecture/build_ast_runtime_tree_governance.md +53 -0
- package/sdd/02_plan/03_architecture/repository_governance.md +39 -0
- package/sdd/02_plan/03_architecture/runtime_and_structure_governance.md +38 -0
- package/sdd/02_plan/03_architecture/templates-hexagonal-template-architecture.md +9 -0
- package/sdd/02_plan/03_architecture/toolchain_governance.md +98 -0
- package/sdd/02_plan/04_data/README.md +5 -0
- package/sdd/02_plan/05_api/README.md +5 -0
- package/sdd/02_plan/06_iac/README.md +11 -0
- package/sdd/02_plan/06_iac/dev_runtime_delivery.md +36 -0
- package/sdd/02_plan/06_iac/template_runtime_delivery.md +50 -0
- package/sdd/02_plan/07_integration/README.md +5 -0
- package/sdd/02_plan/07_integration/frontend_live_integration.md +31 -0
- package/sdd/02_plan/08_nonfunctional/README.md +5 -0
- package/sdd/02_plan/08_nonfunctional/repository_hygiene.md +26 -0
- package/sdd/02_plan/09_security/README.md +5 -0
- package/sdd/02_plan/10_test/README.md +11 -0
- package/sdd/02_plan/10_test/regression_verification.md +39 -0
- package/sdd/02_plan/10_test/templates/README.md +8 -0
- package/sdd/02_plan/10_test/templates/ui_parity_platform_contract.template.yaml +23 -0
- package/sdd/02_plan/10_test/verification_strategy.md +43 -0
- package/sdd/02_plan/99_generated/from_planning/ui_parity/.gitkeep +1 -0
- package/sdd/02_plan/README.md +40 -0
- package/sdd/03_build/01_feature/README.md +20 -0
- package/sdd/03_build/01_feature/domain/README.md +3 -0
- package/sdd/03_build/01_feature/domain/account_and_access.md +20 -0
- package/sdd/03_build/01_feature/domain/catalog_and_inventory.md +20 -0
- package/sdd/03_build/01_feature/domain/ordering_and_fulfillment.md +21 -0
- package/sdd/03_build/01_feature/domain/support_and_observability.md +21 -0
- package/sdd/03_build/01_feature/domain_surfaces.md +28 -0
- package/sdd/03_build/01_feature/service/README.md +3 -0
- package/sdd/03_build/01_feature/service/admin_surface.md +15 -0
- package/sdd/03_build/01_feature/service/landing_surface.md +13 -0
- package/sdd/03_build/01_feature/service/mobile_surface.md +14 -0
- package/sdd/03_build/01_feature/service/platform_surface.md +14 -0
- package/sdd/03_build/02_screen/README.md +25 -0
- package/sdd/03_build/02_screen/_screen_build_template.md +26 -0
- package/sdd/03_build/02_screen/admin/README.md +5 -0
- package/sdd/03_build/02_screen/landing/README.md +5 -0
- package/sdd/03_build/02_screen/mobile/README.md +5 -0
- package/sdd/03_build/02_screen/platform/README.md +5 -0
- package/sdd/03_build/03_architecture/README.md +10 -0
- package/sdd/03_build/03_architecture/architecture_document_governance.md +30 -0
- package/sdd/03_build/03_architecture/build_ast_runtime_tree_governance.md +24 -0
- package/sdd/03_build/03_architecture/repository_governance.md +18 -0
- package/sdd/03_build/03_architecture/toolchain_governance.md +36 -0
- package/sdd/03_build/06_iac/README.md +3 -0
- package/sdd/03_build/06_iac/dev_runtime_delivery.md +10 -0
- package/sdd/03_build/06_iac/template_runtime_delivery.md +49 -0
- package/sdd/03_build/07_integration/README.md +3 -0
- package/sdd/03_build/07_integration/frontend_live_integration.md +11 -0
- package/sdd/03_build/08_nonfunctional/README.md +3 -0
- package/sdd/03_build/08_nonfunctional/repository_hygiene.md +10 -0
- package/sdd/03_build/10_test/README.md +9 -0
- package/sdd/03_build/10_test/regression_verification.md +16 -0
- package/sdd/03_build/10_test/verification_harness.md +11 -0
- package/sdd/03_build/README.md +35 -0
- package/sdd/04_verify/01_feature/README.md +5 -0
- package/sdd/04_verify/01_feature/domain_verification.md +14 -0
- package/sdd/04_verify/01_feature/service_verification.md +22 -0
- package/sdd/04_verify/02_screen/README.md +6 -0
- package/sdd/04_verify/02_screen/_screen_verify_template.md +20 -0
- package/sdd/04_verify/02_screen/admin/README.md +4 -0
- package/sdd/04_verify/02_screen/landing/README.md +4 -0
- package/sdd/04_verify/02_screen/mobile/README.md +4 -0
- package/sdd/04_verify/02_screen/platform/README.md +4 -0
- package/sdd/04_verify/03_architecture/README.md +10 -0
- package/sdd/04_verify/03_architecture/architecture_document_governance.md +15 -0
- package/sdd/04_verify/03_architecture/build_ast_runtime_tree_governance.md +28 -0
- package/sdd/04_verify/03_architecture/repository_governance.md +16 -0
- package/sdd/04_verify/03_architecture/toolchain_governance.md +58 -0
- package/sdd/04_verify/06_iac/README.md +3 -0
- package/sdd/04_verify/06_iac/dev_runtime_delivery.md +10 -0
- package/sdd/04_verify/06_iac/template_runtime_delivery.md +42 -0
- package/sdd/04_verify/07_integration/README.md +3 -0
- package/sdd/04_verify/07_integration/frontend_live_integration.md +16 -0
- package/sdd/04_verify/08_nonfunctional/README.md +3 -0
- package/sdd/04_verify/08_nonfunctional/repository_hygiene.md +14 -0
- package/sdd/04_verify/10_test/README.md +9 -0
- package/sdd/04_verify/10_test/regression_verification.md +16 -0
- package/sdd/04_verify/10_test/ui_parity/README.md +4 -0
- package/sdd/04_verify/10_test/ui_parity/loop_runs/.gitkeep +0 -0
- package/sdd/04_verify/10_test/ui_parity/reference/.gitkeep +0 -0
- package/sdd/04_verify/10_test/ui_parity/staged_runs/.gitkeep +0 -0
- package/sdd/04_verify/10_test/verification_harness.md +17 -0
- package/sdd/04_verify/README.md +22 -0
- package/sdd/05_operate/01_runbooks/.gitkeep +1 -0
- package/sdd/05_operate/01_runbooks/README.md +4 -0
- package/sdd/05_operate/02_delivery_status/README.md +4 -0
- package/sdd/05_operate/02_delivery_status/service_status.md +16 -0
- package/sdd/05_operate/README.md +12 -0
- package/sdd/99_toolchain/01_automation/.gitkeep +1 -0
- package/sdd/99_toolchain/01_automation/README.md +76 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/analyze_proof_results.py +132 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/analyze_route_gap.py +85 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/assets/repo-contract.template.json +75 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh +84 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh +33 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/init_repo_contract.sh +51 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json +76 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/resolve_frontend_target.py +52 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/resolve_repo_contract.py +56 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh +100 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/run_repo_phase.sh +140 -0
- package/sdd/99_toolchain/01_automation/agentic-dev/validate_json_schema.py +39 -0
- package/sdd/99_toolchain/01_automation/agentic-parity-harness-design.md +291 -0
- 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/platform_screen_capture/dashboard.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/platform_screen_capture/login.png +0 -0
- package/sdd/99_toolchain/01_automation/assets/platform_screen_capture/orders.png +0 -0
- package/sdd/99_toolchain/01_automation/build_asset_recipes.py +10 -0
- package/sdd/99_toolchain/01_automation/build_screen_spec_pdf.py +427 -0
- package/sdd/99_toolchain/01_automation/capture_screen_assets.mjs +148 -0
- package/sdd/99_toolchain/01_automation/harness-layout.md +34 -0
- package/sdd/99_toolchain/01_automation/parity-execution-tooling-design.md +319 -0
- package/sdd/99_toolchain/01_automation/playwright_exactness_manifest.py +21 -0
- package/sdd/99_toolchain/01_automation/run_playwright_exactness.py +87 -0
- package/sdd/99_toolchain/01_automation/screen_spec_manifest.py +321 -0
- package/sdd/99_toolchain/01_automation/spec_asset_builder.py +274 -0
- package/sdd/99_toolchain/01_automation/ui-contract-projection.md +79 -0
- package/sdd/99_toolchain/01_automation/ui-parity/README.md +60 -0
- package/sdd/99_toolchain/01_automation/ui-parity/cli/extract-reference-pages.mjs +2 -0
- package/sdd/99_toolchain/01_automation/ui-parity/cli/materialize-reference-assets.mjs +58 -0
- package/sdd/99_toolchain/01_automation/ui-parity/cli/normalize-reference-assets.mjs +2 -0
- package/sdd/99_toolchain/01_automation/ui-parity/cli/route-gap-report.mjs +187 -0
- package/sdd/99_toolchain/01_automation/ui-parity/cli/run-proof.mjs +50 -0
- package/sdd/99_toolchain/01_automation/ui-parity/cli/scaffold-contract.mjs +62 -0
- package/sdd/99_toolchain/01_automation/ui-parity/cli/upload-parity1.mjs +2 -0
- package/sdd/99_toolchain/01_automation/ui-parity/contracts/collector-metadata.schema.json +33 -0
- package/sdd/99_toolchain/01_automation/ui-parity/contracts/proof-result.schema.json +76 -0
- package/sdd/99_toolchain/01_automation/ui-parity/contracts/route-gap-report.schema.json +95 -0
- package/sdd/99_toolchain/01_automation/ui-parity/core/capture-runner.mjs +55 -0
- package/sdd/99_toolchain/01_automation/ui-parity/core/load-adapter.mjs +25 -0
- package/sdd/99_toolchain/01_automation/ui-parity/core/load-contract.mjs +81 -0
- package/sdd/99_toolchain/01_automation/ui-parity/core/paths.mjs +23 -0
- package/sdd/99_toolchain/01_automation/ui-parity/core/proof-runner.mjs +255 -0
- package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-artifact-layout.md +23 -0
- package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-proof-interface.md +60 -0
- package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-route-gap-interface.md +82 -0
- package/sdd/99_toolchain/01_automation/ui-parity/runtime/playwright-runtime.mjs +16 -0
- package/sdd/99_toolchain/01_automation/ui-parity/runtime/static-runtime.mjs +6 -0
- package/sdd/99_toolchain/02_policies/.gitkeep +1 -0
- package/sdd/99_toolchain/02_policies/build-ast-governance-policy.md +22 -0
- package/sdd/99_toolchain/02_policies/compose-runtime-baseline-policy.md +24 -0
- package/sdd/99_toolchain/02_policies/convention-storage-policy.md +26 -0
- package/sdd/99_toolchain/02_policies/main-push-before-dev-deploy-policy.md +27 -0
- package/sdd/99_toolchain/02_policies/otro-orchestration-policy.md +30 -0
- package/sdd/99_toolchain/02_policies/regression-verification-policy.md +22 -0
- package/sdd/99_toolchain/03_templates/.gitkeep +1 -0
- package/sdd/99_toolchain/03_templates/asset_recipe_manifest.example.py +38 -0
- package/sdd/99_toolchain/03_templates/generated_assets/README.md +11 -0
- package/sdd/99_toolchain/03_templates/generated_assets/example-brand-lockup.svg +3 -0
- package/sdd/99_toolchain/03_templates/generated_assets/example-brand-mark.svg +3 -0
- package/sdd/99_toolchain/03_templates/generated_assets/example-brand-wordmark.svg +3 -0
- package/sdd/99_toolchain/03_templates/playwright_exactness_manifest.example.py +21 -0
- package/sdd/99_toolchain/README.md +23 -0
- package/sdd/README.md +21 -0
- package/server/.dockerignore +4 -0
- package/server/.env.example +19 -0
- package/server/Dockerfile +22 -0
- package/server/Dockerfile.dev +19 -0
- package/server/README.md +33 -0
- package/server/__init__.py +0 -0
- package/server/api/__init__.py +1 -0
- package/server/api/http/__init__.py +4 -0
- package/server/api/http/app.py +53 -0
- package/server/api/http/router.py +24 -0
- package/server/config.py +52 -0
- package/server/contexts/__init__.py +12 -0
- package/server/contexts/alerts/__init__.py +1 -0
- package/server/contexts/alerts/application/__init__.py +13 -0
- package/server/contexts/alerts/application/services.py +41 -0
- package/server/contexts/alerts/contracts/__init__.py +3 -0
- package/server/contexts/alerts/contracts/http/__init__.py +3 -0
- package/server/contexts/alerts/contracts/http/router.py +37 -0
- package/server/contexts/alerts/domain/__init__.py +15 -0
- package/server/contexts/alerts/domain/models.py +29 -0
- package/server/contexts/alerts/infrastructure/__init__.py +11 -0
- package/server/contexts/alerts/infrastructure/repository.py +41 -0
- package/server/contexts/auth/__init__.py +1 -0
- package/server/contexts/auth/application/__init__.py +3 -0
- package/server/contexts/auth/application/ports.py +10 -0
- package/server/contexts/auth/application/services.py +64 -0
- package/server/contexts/auth/contracts/__init__.py +4 -0
- package/server/contexts/auth/contracts/http/__init__.py +4 -0
- package/server/contexts/auth/contracts/http/dependencies.py +37 -0
- package/server/contexts/auth/contracts/http/router.py +19 -0
- package/server/contexts/auth/domain/__init__.py +3 -0
- package/server/contexts/auth/domain/models.py +24 -0
- package/server/contexts/auth/infrastructure/__init__.py +4 -0
- package/server/contexts/auth/infrastructure/adapters/memory.py +19 -0
- package/server/contexts/auth/infrastructure/adapters/mongodb.py +24 -0
- package/server/contexts/auth/infrastructure/adapters/sqlalchemy.py +74 -0
- package/server/contexts/auth/infrastructure/repository.py +28 -0
- package/server/contexts/catalog/__init__.py +1 -0
- package/server/contexts/catalog/application/__init__.py +28 -0
- package/server/contexts/catalog/application/ports.py +15 -0
- package/server/contexts/catalog/application/services.py +154 -0
- package/server/contexts/catalog/contracts/__init__.py +3 -0
- package/server/contexts/catalog/contracts/http/__init__.py +3 -0
- package/server/contexts/catalog/contracts/http/router.py +60 -0
- package/server/contexts/catalog/domain/__init__.py +45 -0
- package/server/contexts/catalog/domain/models.py +113 -0
- package/server/contexts/catalog/infrastructure/__init__.py +4 -0
- package/server/contexts/catalog/infrastructure/adapters/memory.py +62 -0
- package/server/contexts/catalog/infrastructure/repository.py +8 -0
- package/server/contexts/fulfillment/__init__.py +1 -0
- package/server/contexts/fulfillment/application/__init__.py +13 -0
- package/server/contexts/fulfillment/application/ports.py +20 -0
- package/server/contexts/fulfillment/application/services.py +85 -0
- package/server/contexts/fulfillment/contracts/__init__.py +3 -0
- package/server/contexts/fulfillment/contracts/http/__init__.py +3 -0
- package/server/contexts/fulfillment/contracts/http/router.py +40 -0
- package/server/contexts/fulfillment/domain/__init__.py +25 -0
- package/server/contexts/fulfillment/domain/models.py +73 -0
- package/server/contexts/fulfillment/infrastructure/__init__.py +13 -0
- package/server/contexts/fulfillment/infrastructure/adapters/memory.py +43 -0
- package/server/contexts/fulfillment/infrastructure/repository.py +97 -0
- package/server/contexts/health/__init__.py +1 -0
- package/server/contexts/health/application/__init__.py +3 -0
- package/server/contexts/health/application/services.py +2 -0
- package/server/contexts/health/contracts/__init__.py +3 -0
- package/server/contexts/health/contracts/http/__init__.py +3 -0
- package/server/contexts/health/contracts/http/router.py +10 -0
- package/server/contexts/inventory/__init__.py +1 -0
- package/server/contexts/inventory/application/__init__.py +28 -0
- package/server/contexts/inventory/application/ports.py +11 -0
- package/server/contexts/inventory/application/services.py +214 -0
- package/server/contexts/inventory/contracts/__init__.py +3 -0
- package/server/contexts/inventory/contracts/http/__init__.py +3 -0
- package/server/contexts/inventory/contracts/http/router.py +82 -0
- package/server/contexts/inventory/domain/__init__.py +33 -0
- package/server/contexts/inventory/domain/models.py +93 -0
- package/server/contexts/inventory/infrastructure/__init__.py +4 -0
- package/server/contexts/inventory/infrastructure/adapters/memory.py +24 -0
- package/server/contexts/inventory/infrastructure/repository.py +8 -0
- package/server/contexts/orders/__init__.py +1 -0
- package/server/contexts/orders/application/__init__.py +19 -0
- package/server/contexts/orders/application/services.py +127 -0
- package/server/contexts/orders/contracts/__init__.py +3 -0
- package/server/contexts/orders/contracts/http/__init__.py +3 -0
- package/server/contexts/orders/contracts/http/router.py +82 -0
- package/server/contexts/orders/domain/__init__.py +29 -0
- package/server/contexts/orders/domain/models.py +95 -0
- package/server/contexts/orders/infrastructure/__init__.py +7 -0
- package/server/contexts/orders/infrastructure/repository.py +104 -0
- package/server/contexts/shipping/__init__.py +1 -0
- package/server/contexts/shipping/application/__init__.py +13 -0
- package/server/contexts/shipping/application/services.py +92 -0
- package/server/contexts/shipping/contracts/__init__.py +3 -0
- package/server/contexts/shipping/contracts/http/__init__.py +3 -0
- package/server/contexts/shipping/contracts/http/router.py +40 -0
- package/server/contexts/shipping/domain/__init__.py +19 -0
- package/server/contexts/shipping/domain/models.py +48 -0
- package/server/contexts/shipping/infrastructure/__init__.py +9 -0
- package/server/contexts/shipping/infrastructure/repository.py +50 -0
- package/server/contexts/support/__init__.py +1 -0
- package/server/contexts/support/application/__init__.py +13 -0
- package/server/contexts/support/application/services.py +29 -0
- package/server/contexts/support/contracts/__init__.py +3 -0
- package/server/contexts/support/contracts/http/__init__.py +3 -0
- package/server/contexts/support/contracts/http/router.py +40 -0
- package/server/contexts/support/domain/__init__.py +13 -0
- package/server/contexts/support/domain/models.py +27 -0
- package/server/contexts/support/infrastructure/__init__.py +11 -0
- package/server/contexts/support/infrastructure/repository.py +70 -0
- package/server/contexts/user/__init__.py +1 -0
- package/server/contexts/user/application/__init__.py +3 -0
- package/server/contexts/user/application/ports.py +11 -0
- package/server/contexts/user/application/services.py +44 -0
- package/server/contexts/user/contracts/__init__.py +3 -0
- package/server/contexts/user/contracts/http/__init__.py +3 -0
- package/server/contexts/user/contracts/http/router.py +26 -0
- package/server/contexts/user/domain/__init__.py +3 -0
- package/server/contexts/user/domain/models.py +22 -0
- package/server/contexts/user/infrastructure/__init__.py +3 -0
- package/server/contexts/user/infrastructure/adapters/memory.py +27 -0
- package/server/contexts/user/infrastructure/adapters/mongodb.py +41 -0
- package/server/contexts/user/infrastructure/adapters/sqlalchemy.py +94 -0
- package/server/contexts/user/infrastructure/factory.py +28 -0
- package/server/data/README.md +24 -0
- package/server/data/bootstrap/alerts.json +38 -0
- package/server/data/bootstrap/auth_accounts.json +18 -0
- package/server/data/bootstrap/catalog_products.json +179 -0
- package/server/data/bootstrap/fulfillment_events.json +5 -0
- package/server/data/bootstrap/fulfillment_notes.json +5 -0
- package/server/data/bootstrap/fulfillment_tasks.json +50 -0
- package/server/data/bootstrap/inventory_levels.json +80 -0
- package/server/data/bootstrap/orders.json +62 -0
- package/server/data/bootstrap/shipping_shipments.json +50 -0
- package/server/data/bootstrap/support_faqs.json +26 -0
- package/server/data/bootstrap/users.json +20 -0
- package/server/data/bootstrap_loader.py +15 -0
- package/server/docker-entrypoint.sh +56 -0
- package/server/main.py +3 -0
- package/server/pyproject.toml +36 -0
- package/server/shared/__init__.py +1 -0
- package/server/shared/application/__init__.py +3 -0
- package/server/shared/application/health.py +2 -0
- package/server/shared/infrastructure/__init__.py +10 -0
- package/server/shared/infrastructure/runtime.py +6 -0
- package/server/shared/infrastructure/security.py +33 -0
- package/server/tests/e2e/test_domain_feature_flows.py +483 -0
- package/server/tests/test_health.py +49 -0
- package/server/uv.lock +1169 -0
- package/bin/agentic-dev.js +0 -9
- package/src/cli.js +0 -37
- package/src/init-command.js +0 -230
- package/src/lib/command.js +0 -14
- package/src/lib/fs.js +0 -92
- package/src/lib/git.js +0 -57
- package/src/lib/github.js +0 -77
- package/src/lib/prompt.js +0 -52
- package/src/lib/system.js +0 -15
- package/src/lib/template.js +0 -143
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# inventory feature spec
|
|
2
|
+
|
|
3
|
+
- 작성 버전: 1.1.0
|
|
4
|
+
|
|
5
|
+
## 1. Purpose
|
|
6
|
+
|
|
7
|
+
`inventory` bounded context가 제공하는 재고 조회와 관리자 재고 조정 기능을 구현 기준으로 정리한다.
|
|
8
|
+
|
|
9
|
+
## 2. Scope
|
|
10
|
+
|
|
11
|
+
- 포함 범위:
|
|
12
|
+
- SKU/거점 단위 재고 read model과 관리자 재고 mutation command
|
|
13
|
+
- 수동 조정, 선점, 해제, 절대값 설정 같은 inventory 내부 상태 변경
|
|
14
|
+
- 제외 범위:
|
|
15
|
+
- 주문/이행 context가 자동으로 일으키는 재고 orchestration
|
|
16
|
+
- 창고 배차, 입고, 출고 작업 계획의 상세 workflow
|
|
17
|
+
|
|
18
|
+
## 3. Actor Summary
|
|
19
|
+
|
|
20
|
+
| Actor | Description | Appears In |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| `Admin Operator` | admin 서비스에서 재고 현황을 조회하고 조정, 선점, 해제, 재설정 같은 운영 명령을 수행하는 관리자다. | `INV-F001`, `INV-F002`, `INV-F003`, `INV-F004`, `INV-F005`, `INV-F006` |
|
|
23
|
+
|
|
24
|
+
## 4. Bounded Context Summary
|
|
25
|
+
|
|
26
|
+
| Item | Value |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| Domain Code | `INV` |
|
|
29
|
+
| Bounded Context | Inventory Availability |
|
|
30
|
+
| Primary Backend Owner | `server/contexts/inventory` |
|
|
31
|
+
| Related Context | `auth`, `catalog`, `orders` |
|
|
32
|
+
| Main Entry Contract | `GET /api/v1/inventory/levels`, `GET /api/v1/inventory/levels/{sku}/{location_id}`, `POST /api/v1/inventory/levels/{sku}/{location_id}/adjustments`, `POST /api/v1/inventory/levels/{sku}/{location_id}/reservations`, `POST /api/v1/inventory/levels/{sku}/{location_id}/releases`, `PUT /api/v1/inventory/levels/{sku}/{location_id}` |
|
|
33
|
+
|
|
34
|
+
## 5. Aggregate / Model Snapshot
|
|
35
|
+
|
|
36
|
+
| Aggregate / Model | Role |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| `InventoryLevelRecord` | SKU-거점별 재고 원본 |
|
|
39
|
+
| `InventoryLevel` | 재고 조회 응답 모델 |
|
|
40
|
+
| `AdjustInventoryCommand` | cycle count 등 수동 증감 명령 |
|
|
41
|
+
| `ReserveInventoryCommand` | 주문 선점 명령 |
|
|
42
|
+
| `ReleaseInventoryCommand` | 선점 해제 명령 |
|
|
43
|
+
| `SetInventoryLevelCommand` | 절대값 설정 명령 |
|
|
44
|
+
| `InventoryMutationReceipt` | 재고 조정 결과 응답 |
|
|
45
|
+
|
|
46
|
+
## 6. Use Case Matrix
|
|
47
|
+
|
|
48
|
+
| Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
|
|
49
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
50
|
+
| `INV-F001` | 재고 레벨 목록을 조회한다 | Admin Operator | Inventory Availability | `InventoryLevel`, `InventoryLevelRecord` | Query | 관리자 토큰이 유효하고 inventory bootstrap 데이터가 존재해야 한다 | SKU, 상품, 거점, 상태 기준 재고 레벨 목록을 반환한다 | `status`는 `available_to_sell`과 `reorder_point` 계산 결과로 결정된다 |
|
|
51
|
+
| `INV-F002` | 단일 SKU/거점 재고 상세를 조회한다 | Admin Operator | Inventory Availability | `InventoryLevel`, `InventoryLevelRecord` | Query | 관리자 토큰이 유효하고 요청한 `sku/location_id` 조합이 존재해야 한다 | 선택한 재고 레벨의 가용 재고와 재주문 여부를 반환한다 | 존재하지 않는 조합이면 `404 Inventory level not found`를 반환한다 |
|
|
52
|
+
| `INV-F003` | 재고를 증감 조정한다 | Admin Operator | Inventory Availability | `AdjustInventoryCommand`, `InventoryMutationReceipt`, `InventoryLevelRecord` | Command | 관리자 토큰이 유효하고 요청한 재고 레벨이 존재해야 한다 | `on_hand`가 증감되고 조정 영수증을 반환한다 | delta는 0일 수 없고, 조정 후 `on_hand`는 `reserved`보다 작아질 수 없다 |
|
|
53
|
+
| `INV-F004` | 재고를 선점한다 | Admin Operator | Inventory Availability | `ReserveInventoryCommand`, `InventoryMutationReceipt`, `InventoryLevelRecord` | Command | 관리자 토큰이 유효하고 요청한 재고 레벨이 존재해야 한다 | `reserved` 수량이 증가한다 | 선점 수량은 가용 재고를 초과할 수 없다 |
|
|
54
|
+
| `INV-F005` | 선점된 재고를 해제한다 | Admin Operator | Inventory Availability | `ReleaseInventoryCommand`, `InventoryMutationReceipt`, `InventoryLevelRecord` | Command | 관리자 토큰이 유효하고 요청한 재고 레벨이 존재해야 한다 | `reserved` 수량이 감소한다 | 해제 수량은 현재 `reserved`를 초과할 수 없다 |
|
|
55
|
+
| `INV-F006` | 재고 절대값을 재설정한다 | Admin Operator | Inventory Availability | `SetInventoryLevelCommand`, `InventoryMutationReceipt`, `InventoryLevelRecord` | Command | 관리자 토큰이 유효하고 요청한 재고 레벨이 존재해야 한다 | `on_hand`, `reserved`, `safety_stock`, `reorder_point`가 새 값으로 설정된다 | `reserved`는 `on_hand`보다 클 수 없다 |
|
|
56
|
+
|
|
57
|
+
## 7. Notes
|
|
58
|
+
|
|
59
|
+
- inventory는 현재 admin 전용 운영 컨텍스트다.
|
|
60
|
+
- order/fulfillment에서 직접 inventory mutation을 일으키는 orchestration은 아직 없고, template baseline에서는 admin command로 먼저 노출한다.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# order feature spec
|
|
2
|
+
|
|
3
|
+
- 작성 버전: 1.1.0
|
|
4
|
+
|
|
5
|
+
## 1. Purpose
|
|
6
|
+
|
|
7
|
+
`orders` bounded context가 제공하는 플랫폼 주문 현황과 관리자 운영 큐 기능을 구현 기준으로 정리한다.
|
|
8
|
+
|
|
9
|
+
## 2. Scope
|
|
10
|
+
|
|
11
|
+
- 포함 범위:
|
|
12
|
+
- platform 주문 overview/list read model과 주문 생성, 상태 전이 command
|
|
13
|
+
- admin 주문 overview/queue read model
|
|
14
|
+
- 제외 범위:
|
|
15
|
+
- 외부 결제 게이트웨이 정산이나 배송사 연동
|
|
16
|
+
- 비동기 이벤트 버스 기반 후속 orchestration
|
|
17
|
+
|
|
18
|
+
## 3. Actor Summary
|
|
19
|
+
|
|
20
|
+
| Actor | Description | Appears In |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| `Platform User` | platform 서비스에서 주문 현황을 조회하고 신규 주문 생성이나 주문 상태 갱신을 수행하는 운영 사용자다. | `ORD-F001`, `ORD-F002`, `ORD-F003`, `ORD-F004` |
|
|
23
|
+
| `Admin Operator` | admin 서비스에서 주문 KPI와 운영 큐를 모니터링하는 관리자다. | `ORD-F005`, `ORD-F006` |
|
|
24
|
+
|
|
25
|
+
## 4. Bounded Context Summary
|
|
26
|
+
|
|
27
|
+
| Item | Value |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| Domain Code | `ORD` |
|
|
30
|
+
| Bounded Context | Order Operations |
|
|
31
|
+
| Primary Backend Owner | `server/contexts/orders` |
|
|
32
|
+
| Related Context | `auth`, `catalog`, `fulfillment` |
|
|
33
|
+
| Main Entry Contract | `GET /api/v1/orders/overview`, `GET /api/v1/orders`, `POST /api/v1/orders`, `PATCH /api/v1/orders/{order_id}/status`, `GET /api/v1/orders/admin/overview`, `GET /api/v1/orders/admin/queue` |
|
|
34
|
+
|
|
35
|
+
## 5. Aggregate / Model Snapshot
|
|
36
|
+
|
|
37
|
+
| Aggregate / Model | Role |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| `OrderRecord` | bootstrap 기반 주문 원본 |
|
|
40
|
+
| `OrderOverview` | 플랫폼 dashboard 요약 읽기 모델 |
|
|
41
|
+
| `OrderSummary` | 플랫폼 orders 목록 읽기 모델 |
|
|
42
|
+
| `CreateOrderCommand` | 주문 생성 명령 |
|
|
43
|
+
| `UpdateOrderStatusCommand` | 주문 상태 전이 명령 |
|
|
44
|
+
| `OrderStatusTransition` | 주문 상태 전이 결과 |
|
|
45
|
+
| `AdminOrderOverview` | 관리자 운영 요약 읽기 모델 |
|
|
46
|
+
| `AdminQueueItem` | 관리자 거래 큐 읽기 모델 |
|
|
47
|
+
|
|
48
|
+
## 6. Use Case Matrix
|
|
49
|
+
|
|
50
|
+
| Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
|
|
51
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
52
|
+
| `ORD-F001` | 플랫폼 주문 overview를 조회한다 | Platform User | Order Operations | `OrderOverview`, `OrderRecord` | Query | 인증 토큰이 유효하고 주문 bootstrap 데이터가 존재해야 한다 | 주문 카드, 최근 활동, 선택 주문 상세를 함께 반환한다 | overview는 최근 활동 3건과 선택 주문 1건을 항상 포함한다 |
|
|
53
|
+
| `ORD-F002` | 플랫폼 주문 목록을 조회한다 | Platform User | Order Operations | `OrderSummary`, `OrderRecord` | Query | 인증 토큰이 유효하고 주문 bootstrap 데이터가 존재해야 한다 | 주문 목록을 반환한다 | 목록 행은 `id`, `product_name`, `customer_name`, `status`를 유지한다 |
|
|
54
|
+
| `ORD-F003` | 신규 주문을 생성한다 | Platform User | Order Operations | `CreateOrderCommand`, `OrderRecord` | Command | 인증 토큰이 유효하고 제품, 고객, 판매자, 금액 정보가 전달되어야 한다 | 새 `OrderRecord`가 생성되어 목록과 overview에 반영된다 | 새 주문은 문자열 ID를 부여받고 `Pending`과 `Queued`를 기본 상태로 사용한다 |
|
|
55
|
+
| `ORD-F004` | 주문의 결제/이행 상태를 변경한다 | Platform User | Order Operations | `UpdateOrderStatusCommand`, `OrderStatusTransition`, `OrderRecord` | Command | 인증 토큰이 유효하고 요청한 `order_id`가 존재해야 한다 | 주문의 `status`, `fulfillment_status`, `stage`가 변경된다 | 존재하지 않는 `order_id`면 `404`를 반환한다 |
|
|
56
|
+
| `ORD-F005` | 관리자용 주문 overview를 조회한다 | Admin Operator | Order Operations | `AdminOrderOverview`, `OrderRecord` | Query | 관리자 토큰이 유효하고 주문 bootstrap 데이터가 존재해야 한다 | 관리자 KPI와 stage 현황을 반환한다 | admin surface는 platform surface와 다른 운영형 read model을 사용한다 |
|
|
57
|
+
| `ORD-F006` | 관리자용 거래 큐를 조회한다 | Admin Operator | Order Operations | `AdminQueueItem`, `OrderRecord` | Query | 관리자 토큰이 유효하고 주문 bootstrap 데이터가 존재해야 한다 | 주문별 운영 큐 행을 반환한다 | 큐 행은 `order_id`, `product_name`, `customer_name`, `status`, `sla`를 유지한다 |
|
|
58
|
+
|
|
59
|
+
## 7. Notes
|
|
60
|
+
|
|
61
|
+
- `orders`는 platform surface와 admin surface에 서로 다른 read model을 제공한다.
|
|
62
|
+
- 운영 알람 feed는 별도 `alerts` context가 소유하고, `orders`는 주문 자체 read/write 모델만 유지한다.
|
|
63
|
+
- template baseline의 주문 상태 전이는 내부 mutation semantics까지만 다루며 외부 결제/이벤트 연동은 포함하지 않는다.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# shipping feature spec
|
|
2
|
+
|
|
3
|
+
- 작성 버전: 1.0.0
|
|
4
|
+
|
|
5
|
+
## 1. Purpose
|
|
6
|
+
|
|
7
|
+
`shipping` bounded context가 제공하는 배송 추적 overview와 shipment 상태 전이 기능을 구현 기준으로 정리한다.
|
|
8
|
+
|
|
9
|
+
## 2. Scope
|
|
10
|
+
|
|
11
|
+
- 포함 범위:
|
|
12
|
+
- mobile/operator surface에서 배송 현황 overview와 shipment 목록 조회
|
|
13
|
+
- shipment 상태 전이와 마지막 배송 이벤트 갱신
|
|
14
|
+
- 제외 범위:
|
|
15
|
+
- 외부 택배사 webhook, 실시간 위치 추적, 고객 알림 발송
|
|
16
|
+
- 결제 승인이나 재고 선점 같은 upstream orchestration
|
|
17
|
+
|
|
18
|
+
## 3. Actor Summary
|
|
19
|
+
|
|
20
|
+
| Actor | Description | Appears In |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| `Mobile Operator` | mobile 서비스에서 출고 이후 배송 상태를 추적하고 shipment 진행 상태를 갱신하는 운영자다. | `SHP-F001`, `SHP-F002`, `SHP-F003` |
|
|
23
|
+
|
|
24
|
+
## 4. Bounded Context Summary
|
|
25
|
+
|
|
26
|
+
| Item | Value |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| Domain Code | `SHP` |
|
|
29
|
+
| Bounded Context | Shipping Operations |
|
|
30
|
+
| Primary Backend Owner | `server/contexts/shipping` |
|
|
31
|
+
| Related Context | `orders`, `fulfillment` |
|
|
32
|
+
| Main Entry Contract | `GET /api/v1/shipping/overview`, `GET /api/v1/shipping/shipments`, `PATCH /api/v1/shipping/shipments/{shipment_id}/status` |
|
|
33
|
+
|
|
34
|
+
## 5. Aggregate / Model Snapshot
|
|
35
|
+
|
|
36
|
+
| Aggregate / Model | Role |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| `ShipmentRecord` | 배송 원본 저장 모델 |
|
|
39
|
+
| `ShippingOverview` | 배송 overview 응답 모델 |
|
|
40
|
+
| `ShipmentSummary` | 배송 목록 응답 모델 |
|
|
41
|
+
| `UpdateShipmentStatusCommand` | 배송 상태 전이 명령 |
|
|
42
|
+
| `ShipmentStatusTransition` | 배송 상태 전이 결과 |
|
|
43
|
+
|
|
44
|
+
## 6. Use Case Matrix
|
|
45
|
+
|
|
46
|
+
| Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
|
|
47
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
48
|
+
| `SHP-F001` | 배송 overview를 조회한다 | Mobile Operator | Shipping Operations | `ShippingOverview`, `ShipmentRecord` | Query | 인증 토큰이 유효하고 shipment bootstrap 데이터가 존재해야 한다 | 배송 중, 지연, 오늘 완료 건수와 carrier 현황을 반환한다 | overview 집계는 shipment 원본을 변경하지 않는다 |
|
|
49
|
+
| `SHP-F002` | 배송 shipment 목록을 조회한다 | Mobile Operator | Shipping Operations | `ShipmentSummary`, `ShipmentRecord` | Query | 인증 토큰이 유효하고 shipment bootstrap 데이터가 존재해야 한다 | 배송 목록과 최신 이벤트를 반환한다 | 목록 행은 `shipment_id`, `order_id`, `carrier`, `status`, `eta`를 유지한다 |
|
|
50
|
+
| `SHP-F003` | 배송 상태를 갱신한다 | Mobile Operator | Shipping Operations | `UpdateShipmentStatusCommand`, `ShipmentStatusTransition`, `ShipmentRecord` | Command | 인증 토큰이 유효하고 요청한 `shipment_id`가 존재해야 한다 | shipment의 `status`, `last_event`, 선택적 `eta`가 갱신된다 | 존재하지 않는 `shipment_id`면 `404`를 반환한다 |
|
|
51
|
+
|
|
52
|
+
## 7. Notes
|
|
53
|
+
|
|
54
|
+
- `shipping`은 출고 이후 배송 추적 책임을 `fulfillment`에서 분리해 downstream delivery 상태만 소유한다.
|
|
55
|
+
- 고객-facing tracking 경험은 아직 포함하지 않고 operator/mobile surface만 baseline으로 제공한다.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# support feature spec
|
|
2
|
+
|
|
3
|
+
- 작성 버전: 1.1.0
|
|
4
|
+
|
|
5
|
+
## 1. Purpose
|
|
6
|
+
|
|
7
|
+
`support` bounded context가 제공하는 관리자 FAQ/support 관리 기능을 구현 기준으로 정리한다.
|
|
8
|
+
|
|
9
|
+
## 2. Scope
|
|
10
|
+
|
|
11
|
+
- 포함 범위:
|
|
12
|
+
- admin surface에서 FAQ/support 항목 목록 조회
|
|
13
|
+
- FAQ 작성과 visibility 변경 command
|
|
14
|
+
- 제외 범위:
|
|
15
|
+
- end-user 문의 inbox나 대화형 support workflow
|
|
16
|
+
- notification, ticket assignment 같은 별도 support operations
|
|
17
|
+
|
|
18
|
+
## 3. Actor Summary
|
|
19
|
+
|
|
20
|
+
| Actor | Description | Appears In |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| `Admin Operator` | admin 서비스에서 FAQ/support 콘텐츠를 조회하고 등록하거나 공개 상태를 바꾸는 운영 관리자다. | `SUP-F001`, `SUP-F002`, `SUP-F003` |
|
|
23
|
+
|
|
24
|
+
## 4. Bounded Context Summary
|
|
25
|
+
|
|
26
|
+
| Item | Value |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| Domain Code | `SUP` |
|
|
29
|
+
| Bounded Context | Support Content |
|
|
30
|
+
| Primary Backend Owner | `server/contexts/support` |
|
|
31
|
+
| Related Context | `auth` |
|
|
32
|
+
| Main Entry Contract | `GET /api/v1/support/faqs`, `POST /api/v1/support/faqs`, `PATCH /api/v1/support/faqs/{faq_id}/visibility` |
|
|
33
|
+
|
|
34
|
+
## 5. Aggregate / Model Snapshot
|
|
35
|
+
|
|
36
|
+
| Aggregate / Model | Role |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| `SupportFaq` | FAQ/support 항목 읽기 모델 |
|
|
39
|
+
| `SupportFaqRecord` | FAQ 저장/수정 결과 모델 |
|
|
40
|
+
| `CreateSupportFaqCommand` | FAQ 작성 명령 |
|
|
41
|
+
| `ChangeFaqVisibilityCommand` | FAQ 공개 상태 변경 명령 |
|
|
42
|
+
|
|
43
|
+
## 6. Use Case Matrix
|
|
44
|
+
|
|
45
|
+
| Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
|
|
46
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
47
|
+
| `SUP-F001` | FAQ/support 목록을 조회한다 | Admin Operator | Support Content | `SupportFaq`, `SupportFaqRecord` | Query | 관리자 토큰이 유효하고 support bootstrap 데이터가 존재해야 한다 | 질문과 visibility가 포함된 FAQ 목록을 반환한다 | admin support surface는 질문 목록과 visibility를 같은 read model로 유지한다 |
|
|
48
|
+
| `SUP-F002` | FAQ 항목을 새로 등록한다 | Admin Operator | Support Content | `CreateSupportFaqCommand`, `SupportFaqRecord` | Command | 관리자 토큰이 유효하고 question, answer가 전달되어야 한다 | 새 FAQ 레코드가 생성되어 목록에 추가된다 | 새 FAQ는 문자열 ID와 `updated_at`을 갖는다 |
|
|
49
|
+
| `SUP-F003` | FAQ 노출 상태를 변경한다 | Admin Operator | Support Content | `ChangeFaqVisibilityCommand`, `SupportFaqRecord` | Command | 관리자 토큰이 유효하고 요청한 `faq_id`가 존재해야 한다 | FAQ의 `visibility`가 새 값으로 갱신된다 | 존재하지 않는 `faq_id`면 `404`를 반환한다 |
|
|
50
|
+
|
|
51
|
+
## 7. Notes
|
|
52
|
+
|
|
53
|
+
- 현재 `support`는 FAQ 중심 운영 content context이고, create/visibility change만 command surface로 제공한다.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# user feature spec
|
|
2
|
+
|
|
3
|
+
- 작성 버전: 1.1.0
|
|
4
|
+
|
|
5
|
+
## 1. Purpose
|
|
6
|
+
|
|
7
|
+
`user` bounded context가 제공하는 사용자 디렉터리 조회와 상태 변경 기능을 구현 기준으로 정리한다.
|
|
8
|
+
|
|
9
|
+
## 2. Scope
|
|
10
|
+
|
|
11
|
+
- 포함 범위:
|
|
12
|
+
- admin surface에서 사용자 목록/상세 조회
|
|
13
|
+
- 사용자 운영 상태 변경 command
|
|
14
|
+
- 제외 범위:
|
|
15
|
+
- 로그인, 세션 발급, credential 검증
|
|
16
|
+
- end-user 자기 프로필 수정 같은 self-service profile workflow
|
|
17
|
+
|
|
18
|
+
## 3. Actor Summary
|
|
19
|
+
|
|
20
|
+
| Actor | Description | Appears In |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| `Admin Operator` | admin 서비스에서 사용자 디렉터리를 조회하고 운영 상태를 변경하는 관리자다. | `USR-F001`, `USR-F002`, `USR-F003` |
|
|
23
|
+
|
|
24
|
+
## 4. Bounded Context Summary
|
|
25
|
+
|
|
26
|
+
| Item | Value |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| Domain Code | `USR` |
|
|
29
|
+
| Bounded Context | User Directory |
|
|
30
|
+
| Primary Backend Owner | `server/contexts/user` |
|
|
31
|
+
| Related Context | `auth` |
|
|
32
|
+
| Main Entry Contract | `GET /api/v1/users`, `GET /api/v1/users/{user_id}`, `PATCH /api/v1/users/{user_id}/status` |
|
|
33
|
+
|
|
34
|
+
## 5. Aggregate / Model Snapshot
|
|
35
|
+
|
|
36
|
+
| Aggregate / Model | Role |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| `UserRecord` | profile 저장 모델 |
|
|
39
|
+
| `UserSummary` | 사용자 목록 응답 모델 |
|
|
40
|
+
| `UserDetail` | 단일 사용자 상세 응답 모델 |
|
|
41
|
+
| `UpdateUserStatusCommand` | 사용자 상태 전이 명령 |
|
|
42
|
+
|
|
43
|
+
## 6. Use Case Matrix
|
|
44
|
+
|
|
45
|
+
| Feature Code | Use Case | Actor | Bounded Context | Aggregate / Model | Type | Preconditions | Domain Outcome | Invariant / Business Rule |
|
|
46
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
47
|
+
| `USR-F001` | 사용자 summary 목록을 조회한다 | Admin Operator | User Directory | `UserSummary`, `UserRecord` | Query | 관리자 토큰이 유효하고 사용자 bootstrap 데이터가 존재해야 한다 | 사용자 목록을 반환한다 | 목록 행은 `id`, `name`, `email`, `role`, `status`를 유지한다 |
|
|
48
|
+
| `USR-F002` | 단일 사용자 상세를 조회한다 | Admin Operator | User Directory | `UserDetail`, `UserRecord` | Query | 관리자 토큰이 유효하고 요청한 `user_id`가 저장소에 존재해야 한다 | timezone과 last login이 포함된 상세를 반환한다 | 존재하지 않는 `user_id`면 `404 User not found`를 반환한다 |
|
|
49
|
+
| `USR-F003` | 사용자의 운영 상태를 변경한다 | Admin Operator | User Directory | `UpdateUserStatusCommand`, `UserDetail`, `UserRecord` | Command | 관리자 토큰이 유효하고 요청한 `user_id`가 저장소에 존재해야 한다 | 대상 사용자의 `status`가 새 값으로 갱신된다 | 존재하지 않는 `user_id`면 `404 User not found`를 반환한다 |
|
|
50
|
+
|
|
51
|
+
## 7. Notes
|
|
52
|
+
|
|
53
|
+
- `user`는 profile directory context이고 credential hash를 소유하지 않는다.
|
|
54
|
+
- 인증 credential은 `auth` context가 별도 bootstrap 저장소로 관리한다.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Screen Planning
|
|
2
|
+
|
|
3
|
+
- screen code format: `{SERVICE}-S{NNN}`
|
|
4
|
+
- canonical service code: `PLT`, `ADM`, `MOB`, `LND`
|
|
5
|
+
|
|
6
|
+
- [platform_screen_spec.pdf](./platform_screen_spec.pdf)
|
|
7
|
+
- [admin_screen_spec.pdf](./admin_screen_spec.pdf)
|
|
8
|
+
- [mobile_screen_spec.pdf](./mobile_screen_spec.pdf)
|
|
9
|
+
- [landing_screen_spec.pdf](./landing_screen_spec.pdf)
|
|
10
|
+
|
|
11
|
+
화면 코드와 기능 설명은 각 PDF 상세 페이지의 우측 테이블을 canonical surface로 사용한다.
|
|
12
|
+
build source, capture asset, generator는 `sdd/99_toolchain/01_automation` 아래에 둔다.
|
|
13
|
+
`MOB-S003`의 canonical route는 `/fulfillment`이고, landing catalog proof는 `GET /api/v1/catalog/products`를 기준으로 한다.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Screen Planning
|
|
2
|
+
|
|
3
|
+
## Naming
|
|
4
|
+
|
|
5
|
+
- Folder name: `02_screen`
|
|
6
|
+
- Canonical artifact: `{service}_screen_spec.pdf`
|
|
7
|
+
- Source-of-truth screen spec files are service based.
|
|
8
|
+
|
|
9
|
+
## Code Rule
|
|
10
|
+
|
|
11
|
+
- Screen code format: `{SERVICE}-S{NNN}`
|
|
12
|
+
- 각 segment는 고정 길이로 유지한다.
|
|
13
|
+
|
|
14
|
+
| Segment | Rule | Example |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| `SERVICE` | 3-letter uppercase service code | `PLT`, `ADM`, `MOB`, `LND` |
|
|
17
|
+
| `TYPE` | screen 식별자 고정값 | `S` |
|
|
18
|
+
| `NNN` | 3-digit sequence | `001`, `002` |
|
|
19
|
+
|
|
20
|
+
## Canonical Output
|
|
21
|
+
|
|
22
|
+
- [platform_screen_spec.pdf](./platform_screen_spec.pdf)
|
|
23
|
+
- [admin_screen_spec.pdf](./admin_screen_spec.pdf)
|
|
24
|
+
- [mobile_screen_spec.pdf](./mobile_screen_spec.pdf)
|
|
25
|
+
- [landing_screen_spec.pdf](./landing_screen_spec.pdf)
|
|
26
|
+
|
|
27
|
+
## Rule
|
|
28
|
+
|
|
29
|
+
- screen spec은 서비스 surface 기준 산출물이다.
|
|
30
|
+
- route, UI block, CTA, interaction, transition은 screen spec PDF 안에서 관리한다.
|
|
31
|
+
- build source, capture asset, generator는 `sdd/99_toolchain/01_automation` 아래에 둔다.
|
|
32
|
+
- reusable asset planning 산출물은 `sdd/01_planning/02_screen/assets/` 아래에 둔다.
|
|
33
|
+
- data 모델링 상세는 `04_data`에서 다루고, architecture/system boundary는 `03_architecture`에서 다룬다.
|
|
34
|
+
- screen spec에서 파생되는 로고/일러스트 등 재사용 자산은 generic asset recipe generator로 재생성 가능해야 한다.
|
|
35
|
+
|
|
36
|
+
## Toolchain
|
|
37
|
+
|
|
38
|
+
- generic asset recipe generator (`스펙에셋빌더`): [`spec_asset_builder.py`](../../99_toolchain/01_automation/spec_asset_builder.py)
|
|
39
|
+
- compatibility wrapper: [`build_asset_recipes.py`](../../99_toolchain/01_automation/build_asset_recipes.py)
|
|
40
|
+
- example recipe manifest: [`asset_recipe_manifest.example.py`](../../99_toolchain/03_templates/asset_recipe_manifest.example.py)
|
|
41
|
+
- asset planning root example: [`assets/README.md`](assets/README.md)
|
|
Binary file
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Assets
|
|
2
|
+
|
|
3
|
+
## Role
|
|
4
|
+
|
|
5
|
+
- `assets/`는 screen planning에서 파생되는 reusable asset의 planning 산출물을 둔다.
|
|
6
|
+
- 여기에는 inventory, source reference, crop rationale, naming rule 같은 문서성 산출물을 저장한다.
|
|
7
|
+
|
|
8
|
+
## Storage Rule
|
|
9
|
+
|
|
10
|
+
- project/service별 하위 폴더를 만든다.
|
|
11
|
+
- generator와 manifest는 `sdd/99_toolchain/01_automation/`에 둔다.
|
|
12
|
+
- runtime asset output은 각 구현 repo 경로에 둔다.
|
|
13
|
+
|
|
14
|
+
## Example
|
|
15
|
+
|
|
16
|
+
- [example/README.md](example/README.md)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Example Assets
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
- 이 폴더는 템플릿 사용자가 project-specific asset inventory를 어떻게 남겨야 하는지 보여주는 예시다.
|
|
6
|
+
|
|
7
|
+
## Recommended Contents
|
|
8
|
+
|
|
9
|
+
- reusable asset inventory
|
|
10
|
+
- source page / source file reference
|
|
11
|
+
- crop rationale
|
|
12
|
+
- naming convention
|
|
13
|
+
- approval note
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Architecture Planning
|
|
2
|
+
|
|
3
|
+
- [README.md](./README.md)
|
|
4
|
+
- [architecture_document_structure.md](./architecture_document_structure.md)
|
|
5
|
+
- [templates_system_architecture.md](./templates_system_architecture.md)
|
|
6
|
+
- [frontend](./frontend)
|
|
7
|
+
- [backend](./backend)
|
|
8
|
+
- [infra](./infra)
|
|
9
|
+
- [tech-research](./tech-research)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Architecture Planning
|
|
2
|
+
|
|
3
|
+
- 범위: 서비스별 세부 화면보다 시스템 공통 구조와 구현 선택을 우선 기록한다.
|
|
4
|
+
- architecture 문서는 공통/일반화된 기준을 먼저 두고, 필요할 때만 특화 문서를 추가한다.
|
|
5
|
+
- 주요 축:
|
|
6
|
+
- frontend architecture
|
|
7
|
+
- backend architecture
|
|
8
|
+
- infra architecture
|
|
9
|
+
- auth/session
|
|
10
|
+
- deployment topology
|
|
11
|
+
- migration
|
|
12
|
+
- frontend architecture 문서는 모듈화, 컴포넌트, store/state, domain/use case, UI/UX, storage, API adapter 패턴을 다룬다.
|
|
13
|
+
- backend architecture 문서는 DDD context 구조, context 내부 계층, 3-layer, hexagonal, monolithic, EDA, MSA, CQRS와 실제 구현체 선택을 다룬다.
|
|
14
|
+
- infra architecture 문서는 container, orchestration, database, network, redundancy, multi-region 같은 서비스 기반 구조를 다룬다.
|
|
15
|
+
- 데이터 모델링은 architecture 범위에 포함하지 않고 `sdd/01_planning/04_data/`에서 다룬다.
|
|
16
|
+
|
|
17
|
+
## Canonical Docs
|
|
18
|
+
|
|
19
|
+
- [INDEX.md](./INDEX.md)
|
|
20
|
+
- [architecture_document_structure.md](./architecture_document_structure.md)
|
|
21
|
+
- [templates_system_architecture.md](./templates_system_architecture.md)
|
|
22
|
+
- [frontend/README.md](./frontend/README.md)
|
|
23
|
+
- [backend/README.md](./backend/README.md)
|
|
24
|
+
- [infra/README.md](./infra/README.md)
|
|
25
|
+
- [tech-research/README.md](./tech-research/README.md)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Architecture Document Structure
|
|
2
|
+
|
|
3
|
+
## 1. Purpose
|
|
4
|
+
|
|
5
|
+
- `sdd/01_planning/03_architecture`는 프론트엔드, 백엔드, 인프라를 아우르는 공통 구조와 구현 선택을 기록한다.
|
|
6
|
+
- architecture 문서는 주로 일반화/공통화된 기준을 설명한다.
|
|
7
|
+
- 특정 기술, 인증, 배포, 런타임처럼 개별 주제가 독립 가치가 있으면 특화 문서를 함께 둔다.
|
|
8
|
+
|
|
9
|
+
## 2. Boundary
|
|
10
|
+
|
|
11
|
+
### Included In Architecture
|
|
12
|
+
|
|
13
|
+
- frontend architecture
|
|
14
|
+
- module composition
|
|
15
|
+
- component structure
|
|
16
|
+
- store/state management
|
|
17
|
+
- domain / use case / adapter structure
|
|
18
|
+
- UI/UX patterns
|
|
19
|
+
- local storage / session storage / cache
|
|
20
|
+
- API client / facade / contract adapter
|
|
21
|
+
- backend architecture
|
|
22
|
+
- DDD bounded context structure
|
|
23
|
+
- domain / application / infrastructure / contracts layers
|
|
24
|
+
- structural choices such as 3-layer, hexagonal, monolithic
|
|
25
|
+
- pattern adoption such as EDA, MSA, CQRS and the selected implementation
|
|
26
|
+
- runtime composition and service boundaries
|
|
27
|
+
- infra architecture
|
|
28
|
+
- container runtime
|
|
29
|
+
- orchestration
|
|
30
|
+
- database runtime
|
|
31
|
+
- network / domain / routing
|
|
32
|
+
- redundancy / HA
|
|
33
|
+
- multi-region / deployment topology
|
|
34
|
+
|
|
35
|
+
### Excluded From Architecture
|
|
36
|
+
|
|
37
|
+
- entity, schema, relationship, key policy 같은 데이터 모델링 상세
|
|
38
|
+
- table/column 수준 ERD 정의
|
|
39
|
+
- above items belong to [`sdd/01_planning/04_data/README.md`](../04_data/README.md)
|
|
40
|
+
|
|
41
|
+
## 3. Document Structure
|
|
42
|
+
|
|
43
|
+
### Root
|
|
44
|
+
|
|
45
|
+
- 공통/횡단 아키텍처 문서를 둔다.
|
|
46
|
+
- 예:
|
|
47
|
+
- structure principle
|
|
48
|
+
- document boundary
|
|
49
|
+
- migration guide
|
|
50
|
+
- runtime alignment rule
|
|
51
|
+
|
|
52
|
+
### frontend/
|
|
53
|
+
|
|
54
|
+
- 프런트엔드 특화 아키텍처 문서를 둔다.
|
|
55
|
+
- 특정 surface에 종속되더라도 재사용 가능한 구조 원칙이면 여기에 둔다.
|
|
56
|
+
|
|
57
|
+
### backend/
|
|
58
|
+
|
|
59
|
+
- 백엔드 특화 아키텍처 문서를 둔다.
|
|
60
|
+
- context structure, layering, pattern, runtime composition을 기록한다.
|
|
61
|
+
|
|
62
|
+
### infra/
|
|
63
|
+
|
|
64
|
+
- 인프라 특화 아키텍처 문서를 둔다.
|
|
65
|
+
- deployment topology, networking, orchestration, runtime platform을 기록한다.
|
|
66
|
+
|
|
67
|
+
### tech-research/
|
|
68
|
+
|
|
69
|
+
- 인증, 외부 provider, 실험 기술 같은 특정 주제 리서치를 둔다.
|
|
70
|
+
- research는 architecture 하위에 두되 공통 구조 문서와 분리한다.
|
|
71
|
+
|
|
72
|
+
## 4. Writing Rule
|
|
73
|
+
|
|
74
|
+
- 공통 문서를 먼저 작성하고, 특화 문서는 필요할 때만 추가한다.
|
|
75
|
+
- 이론 자체보다 현재 repo가 어떤 구조와 구현체를 채택했는지를 우선 기록한다.
|
|
76
|
+
- 여러 대안이 있을 때는 후보 나열로 끝내지 않고 현재 권장안과 이유를 적는다.
|
|
77
|
+
- feature, screen, data 문서가 맡아야 할 내용을 architecture에 중복 기록하지 않는다.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Backend Architecture Planning
|
|
2
|
+
|
|
3
|
+
- 범위: 백엔드의 공통 구조와 구현 패턴
|
|
4
|
+
- 주요 축:
|
|
5
|
+
- DDD bounded context
|
|
6
|
+
- domain/application/infrastructure/contracts layering
|
|
7
|
+
- 3-layer / hexagonal / monolithic structure
|
|
8
|
+
- adoption of patterns such as EDA, MSA, CQRS
|
|
9
|
+
- actual runtime composition and implementation choices
|
|
10
|
+
- entity/schema/relationship 정의는 `04_data`에서 다룬다.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Frontend Architecture Planning
|
|
2
|
+
|
|
3
|
+
- 범위: 프런트엔드의 공통 구조와 구현 패턴
|
|
4
|
+
- 주요 축:
|
|
5
|
+
- 모듈화
|
|
6
|
+
- 컴포넌트 구조
|
|
7
|
+
- store/state
|
|
8
|
+
- domain/use case
|
|
9
|
+
- UI/UX 패턴
|
|
10
|
+
- storage/session/cache
|
|
11
|
+
- API client / facade / adapter
|
|
12
|
+
- 화면별 route/CTA/전이는 `02_screen`에서 다루고, 기능별 business rule은 `01_feature`에서 다룬다.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Infra Architecture Planning
|
|
2
|
+
|
|
3
|
+
- 범위: 프런트엔드, 백엔드, supporting service를 올리는 기반 구조
|
|
4
|
+
- 주요 축:
|
|
5
|
+
- docker / compose / kubernetes
|
|
6
|
+
- container runtime / orchestration
|
|
7
|
+
- database / storage / secret / network
|
|
8
|
+
- redundancy / HA / multi-region
|
|
9
|
+
- deployment topology / runtime boundary
|
|
10
|
+
- 운영 절차 자체는 필요 시 `05_operate` runbook과 분리해 기록한다.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# templates system architecture
|
|
2
|
+
|
|
3
|
+
- 작성 버전: 1.0.0
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
`templates` 레포의 현재 runtime 구조와 bounded context 경계를 구현 기준으로 정리한다.
|
|
8
|
+
|
|
9
|
+
## Document Boundary
|
|
10
|
+
|
|
11
|
+
- frontend, backend, infra 공통 구조와 구현 선택을 이 문서에서 다룬다.
|
|
12
|
+
- entity/schema/relationship/key policy 같은 데이터 모델링 상세는 `sdd/01_planning/04_data/`에서 다룬다.
|
|
13
|
+
|
|
14
|
+
## 1. Runtime Topology
|
|
15
|
+
|
|
16
|
+
| Layer | Owner | Responsibility |
|
|
17
|
+
| --- | --- | --- |
|
|
18
|
+
| `server` | HTTP backend | auth, user, catalog, inventory, orders, fulfillment, shipping, alerts, support, health를 HTTP API surface로 제공 |
|
|
19
|
+
| `client/platform` | React + Vite frontend | 보호된 플랫폼 shell과 dashboard/orders surface |
|
|
20
|
+
| `client/admin` | React + Vite frontend | 보호된 관리자 shell과 overview/queue/support surface |
|
|
21
|
+
| `client/mobile` | React + Vite frontend | 보호된 모바일 shell과 dashboard/fulfillment surface |
|
|
22
|
+
| `client/landing` | React + Vite frontend | public landing + protected workspace surface |
|
|
23
|
+
| `infra/compose` | container runtime | root compose baseline + dedicated DEV(개발계)/PROD overlay 레이아웃 |
|
|
24
|
+
|
|
25
|
+
## 2. Transport Topology
|
|
26
|
+
|
|
27
|
+
| Surface | Module | Responsibility |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| HTTP | `server/api/http` | FastAPI app, router aggregation, `/health`, `/api/v1/*` 제공 |
|
|
30
|
+
|
|
31
|
+
## 3. Backend Context Map
|
|
32
|
+
|
|
33
|
+
| Bounded Context | Module | Role |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| Authentication & Session | `server/contexts/auth` | login, bearer token 해석, 인증 계정 저장 |
|
|
36
|
+
| User Directory | `server/contexts/user` | 사용자 profile 목록/상세/상태 관리 |
|
|
37
|
+
| Product Catalog | `server/contexts/catalog` | public catalog read와 admin catalog write |
|
|
38
|
+
| Inventory Availability | `server/contexts/inventory` | SKU/거점 재고 조회와 운영 mutation |
|
|
39
|
+
| Order Operations | `server/contexts/orders` | platform/admin 주문 overview, 목록, 생성, 상태 전이 |
|
|
40
|
+
| Fulfillment Operations | `server/contexts/fulfillment` | mobile overview, board, task 상태 전이 |
|
|
41
|
+
| Shipping Operations | `server/contexts/shipping` | mobile 배송 overview, shipment 목록, 배송 상태 전이 |
|
|
42
|
+
| Alert Center | `server/contexts/alerts` | admin 운영 알람 feed, 읽음 처리 |
|
|
43
|
+
| Support Content | `server/contexts/support` | 관리자 FAQ 목록/작성/노출 상태 변경 |
|
|
44
|
+
| Health | `server/contexts/health` | technical health/status contract |
|
|
45
|
+
|
|
46
|
+
## 4. Context Relationship
|
|
47
|
+
|
|
48
|
+
- `auth`는 `user`와 분리된 인증 계정 bootstrap을 사용한다.
|
|
49
|
+
- `user`는 profile directory만 소유하고 credential hash를 저장하지 않는다.
|
|
50
|
+
- `catalog`는 landing/public read와 admin write surface를 함께 소유한다.
|
|
51
|
+
- `inventory`는 현재 admin 운영 surface를 통해 직접 조정되고, `orders`와 `fulfillment`의 참조 도메인으로 연결된다.
|
|
52
|
+
- `orders`는 platform read model과 admin read model을 동시에 노출한다.
|
|
53
|
+
- `fulfillment`는 mobile 서비스의 canonical backend surface다.
|
|
54
|
+
- `shipping`은 `fulfillment`의 downstream delivery 상태를 분리해 mobile/operator surface에 제공한다.
|
|
55
|
+
- `alerts`는 admin이 소비하는 운영 알람 표현과 읽음 상태를 별도 context로 소유한다.
|
|
56
|
+
|
|
57
|
+
## 5. Layering Rule
|
|
58
|
+
|
|
59
|
+
- context 외부 진입점은 `contexts/*/contracts/http`에 둔다.
|
|
60
|
+
- application layer는 use case orchestration만 담당한다.
|
|
61
|
+
- domain layer는 request/response model과 aggregate/read model을 가진다.
|
|
62
|
+
- infrastructure layer는 adapter, repository factory, shared gateway binding을 담당한다.
|
|
63
|
+
- shared logic는 `shared/application`, `shared/infrastructure`에 두되, 특정 domain 소유물이 되면 context 내부로 이동한다.
|
|
64
|
+
- transport wiring은 `api/http`에 두고 domain 로직은 `contexts/*`에만 둔다.
|
|
65
|
+
|
|
66
|
+
## 6. Runtime Component Baseline
|
|
67
|
+
|
|
68
|
+
| Component | Current Baseline | Next Step |
|
|
69
|
+
| --- | --- | --- |
|
|
70
|
+
| HTTP server | `FastAPI + Uvicorn` | authz, rate limit, observability middleware 추가 |
|
|
71
|
+
| Persistence | bootstrap JSON + selectable DB adapter | transaction boundary와 repository parity 강화 |
|
|
72
|
+
| Frontend runtime | `React 18 + Vite 5 + pnpm workspace` | contract-driven env injection 자동화 |
|
|
73
|
+
|
|
74
|
+
## 7. Current Known Gaps
|
|
75
|
+
|
|
76
|
+
- persistence baseline은 여전히 bootstrap JSON + in-memory mutation 중심이다.
|
|
77
|
+
- order 생성과 fulfillment/shipping 전이가 inventory 자동 연동까지는 아직 확장되지 않았다.
|
|
78
|
+
- support는 FAQ 관리 중심이고 ticket/workflow 도메인까지는 아직 포함하지 않는다.
|
|
79
|
+
|
|
80
|
+
## 8. Next Refactoring Direction
|
|
81
|
+
|
|
82
|
+
- catalog/inventory/order/fulfillment/shipping 간의 orchestration을 application service 수준으로 확장한다.
|
|
83
|
+
- auth account와 user profile 사이의 provisioning 흐름을 별도 domain service로 일반화한다.
|
|
84
|
+
- admin surface에서 alerts/support/catalog/inventory command를 직접 소비하도록 frontend scope를 넓힌다.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Data Planning
|
|
2
|
+
|
|
3
|
+
- 범위: 공통 데이터 모델과 엔티티 관계 정의
|
|
4
|
+
- architecture 문서에서 다루지 않는 entity/schema/relationship/key policy는 이 루트에서 다룬다.
|
|
5
|
+
- 데이터 모델링은 current canonical 기준만 남기고, 구조 문서와 중복 기록하지 않는다.
|
|
6
|
+
|
|
7
|
+
## Canonical Docs
|
|
8
|
+
|
|
9
|
+
- [INDEX.md](./INDEX.md)
|
|
10
|
+
- [templates_data_modeling.md](./templates_data_modeling.md)
|