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,11 @@
|
|
|
1
|
+
model = "gpt-5.3-codex"
|
|
2
|
+
model_reasoning_effort = "high"
|
|
3
|
+
sandbox_mode = "workspace-write"
|
|
4
|
+
developer_instructions = """
|
|
5
|
+
You are the GitOps/deployment sub-agent.
|
|
6
|
+
|
|
7
|
+
Mission:
|
|
8
|
+
- Own compose, CI/CD, and deployment wiring.
|
|
9
|
+
- Keep main-to-DEV and tag-to-prod release flows deterministic.
|
|
10
|
+
- Prefer explicit and inspectable automation.
|
|
11
|
+
"""
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
model = "gpt-5.3-codex"
|
|
2
|
+
model_reasoning_effort = "high"
|
|
3
|
+
sandbox_mode = "workspace-write"
|
|
4
|
+
developer_instructions = """
|
|
5
|
+
You are the orchestration sub-agent.
|
|
6
|
+
|
|
7
|
+
Mission:
|
|
8
|
+
- Improve orchestration flows and operational safety.
|
|
9
|
+
- Keep start, stop, deploy, and verification actions deterministic.
|
|
10
|
+
- Prefer bounded automation over ad hoc behavior.
|
|
11
|
+
"""
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
model = "gpt-5.3-codex"
|
|
2
|
+
model_reasoning_effort = "medium"
|
|
3
|
+
sandbox_mode = "workspace-write"
|
|
4
|
+
developer_instructions = """
|
|
5
|
+
You are the quality sub-agent.
|
|
6
|
+
|
|
7
|
+
Mission:
|
|
8
|
+
- Run validation gates and find regressions.
|
|
9
|
+
- Report concrete failing surfaces and likely fixes.
|
|
10
|
+
- Keep verification concise and actionable.
|
|
11
|
+
"""
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
model = "gpt-5.3-codex"
|
|
2
|
+
model_reasoning_effort = "high"
|
|
3
|
+
sandbox_mode = "workspace-write"
|
|
4
|
+
developer_instructions = """
|
|
5
|
+
You are the runtime sub-agent.
|
|
6
|
+
|
|
7
|
+
Mission:
|
|
8
|
+
- Refactor runtime and application wiring while preserving behavior.
|
|
9
|
+
- Prefer small, testable, reversible changes.
|
|
10
|
+
- Keep implementation generic and reusable.
|
|
11
|
+
"""
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
model = "gpt-5.3-codex"
|
|
2
|
+
model_reasoning_effort = "high"
|
|
3
|
+
sandbox_mode = "read-only"
|
|
4
|
+
developer_instructions = """
|
|
5
|
+
You are the security sub-agent.
|
|
6
|
+
|
|
7
|
+
Mission:
|
|
8
|
+
- Audit security and operational regression risk.
|
|
9
|
+
- Focus on reproducible issues and concrete mitigation guidance.
|
|
10
|
+
- Avoid speculative findings.
|
|
11
|
+
"""
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
model = "gpt-5.3-codex"
|
|
2
|
+
model_reasoning_effort = "medium"
|
|
3
|
+
sandbox_mode = "read-only"
|
|
4
|
+
developer_instructions = """
|
|
5
|
+
You are the specs sub-agent.
|
|
6
|
+
|
|
7
|
+
Mission:
|
|
8
|
+
- Validate SDD and specification consistency.
|
|
9
|
+
- Find drift between implementation and declared contracts.
|
|
10
|
+
- Return concrete file references and minimal corrections.
|
|
11
|
+
"""
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
model = "gpt-5.3-codex"
|
|
2
|
+
model_reasoning_effort = "medium"
|
|
3
|
+
sandbox_mode = "workspace-write"
|
|
4
|
+
developer_instructions = """
|
|
5
|
+
You are the UI sub-agent.
|
|
6
|
+
|
|
7
|
+
Mission:
|
|
8
|
+
- Keep UI contracts aligned with backend APIs and design intent.
|
|
9
|
+
- Prefer minimal, compatible changes.
|
|
10
|
+
- Preserve reusable component surfaces.
|
|
11
|
+
"""
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
[features]
|
|
2
|
+
multi_agent = true
|
|
3
|
+
|
|
4
|
+
[agents]
|
|
5
|
+
max_threads = 10
|
|
6
|
+
max_depth = 1
|
|
7
|
+
|
|
8
|
+
[agents.architecture]
|
|
9
|
+
description = "Drive high-level architecture, boundaries, and migration decisions."
|
|
10
|
+
config_file = "agents/architecture.toml"
|
|
11
|
+
|
|
12
|
+
[agents.runtime]
|
|
13
|
+
description = "Refactor runtime and application wiring while preserving behavior."
|
|
14
|
+
config_file = "agents/runtime.toml"
|
|
15
|
+
|
|
16
|
+
[agents.gitops]
|
|
17
|
+
description = "Own CI/CD, compose, and deployment wiring."
|
|
18
|
+
config_file = "agents/gitops.toml"
|
|
19
|
+
|
|
20
|
+
[agents.quality]
|
|
21
|
+
description = "Run validation gates and identify regressions."
|
|
22
|
+
config_file = "agents/quality.toml"
|
|
23
|
+
|
|
24
|
+
[agents.api]
|
|
25
|
+
description = "Own API boundary contracts and backward compatibility."
|
|
26
|
+
config_file = "agents/api.toml"
|
|
27
|
+
|
|
28
|
+
[agents.orchestrator]
|
|
29
|
+
description = "Improve orchestration flows and operational safety."
|
|
30
|
+
config_file = "agents/orchestrator.toml"
|
|
31
|
+
|
|
32
|
+
[agents.ci]
|
|
33
|
+
description = "Maintain pipeline policy and release path integrity."
|
|
34
|
+
config_file = "agents/ci.toml"
|
|
35
|
+
|
|
36
|
+
[agents.specs]
|
|
37
|
+
description = "Validate SDD and specification consistency."
|
|
38
|
+
config_file = "agents/specs.toml"
|
|
39
|
+
|
|
40
|
+
[agents.ui]
|
|
41
|
+
description = "Own UI contracts, hooks, and frontend integration surfaces."
|
|
42
|
+
config_file = "agents/ui.toml"
|
|
43
|
+
|
|
44
|
+
[agents.security]
|
|
45
|
+
description = "Audit security and operational regression risk."
|
|
46
|
+
config_file = "agents/security.toml"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: otro
|
|
3
|
+
description: OTRO (Overlap-Tolerant Residual Orchestration) root alias for the canonical template skill surface.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# OTRO Alias
|
|
7
|
+
|
|
8
|
+
이 파일은 root alias다. canonical OTRO skill body와 scripts/references/schemas는 [`otro/SKILL.md`](./otro/SKILL.md)를 기준으로 사용한다.
|
|
9
|
+
|
|
10
|
+
## Rule
|
|
11
|
+
|
|
12
|
+
- OTRO 실행 시 root 중복 자산이 아니라 `otro/` 하위 canonical 자산만 사용한다.
|
|
13
|
+
- `sdd-development`, `ralph-loop`, `planning-with-files`는 별도 skill surface로 유지한다.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "OTRO"
|
|
3
|
+
short_description: "Overlap-tolerant residual orchestration"
|
|
4
|
+
default_prompt: "Use $OTRO to analyze the repository globally, dispatch bounded Codex workers, reconcile residual overlap, and replan until repository-level gates are satisfied."
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: commit
|
|
3
|
+
description: Write conventional commit messages with type, scope, and subject when the user wants to commit changes or save work.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git Commit
|
|
7
|
+
|
|
8
|
+
Creates git commits following Conventional Commits format with proper type, scope, and subject.
|
|
9
|
+
|
|
10
|
+
## Quick Start
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# 1. Stage changes
|
|
14
|
+
git add <files> # or: git add -A
|
|
15
|
+
|
|
16
|
+
# 2. Create commit (branch commit format)
|
|
17
|
+
git commit -m "type(scope): subject
|
|
18
|
+
|
|
19
|
+
Body explaining HOW and WHY.
|
|
20
|
+
Reference: Task X.Y, Req N"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Commit Types
|
|
24
|
+
|
|
25
|
+
### Regular Branch Commits (During Development)
|
|
26
|
+
|
|
27
|
+
**Format**: `type(scope): subject`
|
|
28
|
+
|
|
29
|
+
| Type | Purpose |
|
|
30
|
+
|------|---------|
|
|
31
|
+
| `feat` | New feature or functionality |
|
|
32
|
+
| `fix` | Bug fix or issue resolution |
|
|
33
|
+
| `refactor` | Code refactoring without behavior change |
|
|
34
|
+
| `perf` | Performance improvements |
|
|
35
|
+
| `test` | Test additions or modifications |
|
|
36
|
+
| `ci` | CI/CD configuration changes |
|
|
37
|
+
| `docs` | Documentation updates |
|
|
38
|
+
| `chore` | Maintenance, dependencies, tooling |
|
|
39
|
+
| `style` | Code formatting, linting (non-functional) |
|
|
40
|
+
| `security` | Security vulnerability fixes or hardening |
|
|
41
|
+
|
|
42
|
+
### Scope (Required, kebab-case)
|
|
43
|
+
|
|
44
|
+
Examples: `validation`, `auth`, `cookie-service`, `template`, `config`, `tests`, `api`
|
|
45
|
+
|
|
46
|
+
### Subject Line Rules
|
|
47
|
+
|
|
48
|
+
- Max 50 characters after colon
|
|
49
|
+
- Present tense imperative: add, implement, fix, improve, enhance, refactor, remove, prevent
|
|
50
|
+
- NO period at the end
|
|
51
|
+
- Specific and descriptive - state WHAT, not WHY
|
|
52
|
+
|
|
53
|
+
## Core Workflow
|
|
54
|
+
|
|
55
|
+
### 1. Review Changes
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
git status
|
|
59
|
+
git diff --staged # if already staged
|
|
60
|
+
git diff # if not staged
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 2. Stage Files
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
git add <specific-files> # preferred
|
|
67
|
+
# or
|
|
68
|
+
git add -A # all changes
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**NEVER commit**:
|
|
72
|
+
- `.env`, `credentials.json`, secrets
|
|
73
|
+
- `node_modules/`, `__pycache__/`, `.venv/`
|
|
74
|
+
- Large binary files without explicit approval
|
|
75
|
+
|
|
76
|
+
### 3. Create Commit
|
|
77
|
+
|
|
78
|
+
**Simple change**:
|
|
79
|
+
```bash
|
|
80
|
+
git commit -m "fix(auth): use hmac.compare_digest for secure comparison"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Complex change (with body)**:
|
|
84
|
+
```bash
|
|
85
|
+
git commit -m "$(cat <<'EOF'
|
|
86
|
+
feat(validation): add URLValidator with domain whitelist
|
|
87
|
+
|
|
88
|
+
Implement URLValidator class supporting:
|
|
89
|
+
- Domain whitelist enforcement (youtube.com, youtu.be)
|
|
90
|
+
- Dangerous scheme blocking (javascript, data, file)
|
|
91
|
+
- URL parsing with embedded credentials handling
|
|
92
|
+
|
|
93
|
+
Addresses Requirement 31: Input validation
|
|
94
|
+
Part of Task 5.1: Input Validation Utilities
|
|
95
|
+
EOF
|
|
96
|
+
)"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 4. Verify Commit
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
git log -1 --format="%h %s"
|
|
103
|
+
git show --stat HEAD
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Body Format (Recommended for Complex Changes)
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
<blank line>
|
|
110
|
+
Explain HOW and WHY the change was made.
|
|
111
|
+
- Use bullet points for multiple items
|
|
112
|
+
- Wrap at 72 characters
|
|
113
|
+
|
|
114
|
+
Reference: Task X.Y
|
|
115
|
+
Addresses: Req N
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Git Trailers
|
|
119
|
+
|
|
120
|
+
| Trailer | Purpose |
|
|
121
|
+
|---------|---------|
|
|
122
|
+
| `Fixes #N` | Links and closes issue on merge |
|
|
123
|
+
| `Closes #N` | Same as Fixes |
|
|
124
|
+
| `Co-authored-by: Name <email>` | Credit co-contributors |
|
|
125
|
+
|
|
126
|
+
Place trailers at end of body after blank line. See `references/commit_examples.md` for examples.
|
|
127
|
+
|
|
128
|
+
## Breaking Changes
|
|
129
|
+
|
|
130
|
+
For incompatible API/behavior changes, use `!` after scope OR `BREAKING CHANGE:` footer:
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
feat(api)!: change response format to JSON:API
|
|
134
|
+
|
|
135
|
+
BREAKING CHANGE: Response envelope changed from `{ data }` to `{ data: { type, id, attributes } }`.
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Triggers major version bump in semantic-release.
|
|
139
|
+
|
|
140
|
+
## Merge Commits (PR Closure)
|
|
141
|
+
|
|
142
|
+
For PRs, use extended description with sections:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
gh pr create --title "feat(security): implement input validation (Task 5)" --body "$(cat <<'EOF'
|
|
146
|
+
## Summary
|
|
147
|
+
- Input validation utilities (URLValidator, FormatValidator)
|
|
148
|
+
- Secure template processor with path traversal prevention
|
|
149
|
+
- API key authentication middleware
|
|
150
|
+
|
|
151
|
+
## Task Breakdown
|
|
152
|
+
Task 5.1: Input Validation - URLValidator, FormatValidator
|
|
153
|
+
Task 5.2: Template Processing - Path traversal prevention
|
|
154
|
+
Task 5.3: API Key Auth - Multi-key support, excluded paths
|
|
155
|
+
Task 5.4: Security Tests - 102 path traversal tests
|
|
156
|
+
|
|
157
|
+
## Requirements Covered
|
|
158
|
+
Req 7, Req 9, Req 31, Req 33
|
|
159
|
+
|
|
160
|
+
## Test Coverage
|
|
161
|
+
- All 473 tests passing
|
|
162
|
+
- Coverage: 93%
|
|
163
|
+
- Pre-commit checks: passing
|
|
164
|
+
EOF
|
|
165
|
+
)"
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Integration with Other Skills
|
|
169
|
+
|
|
170
|
+
### From github-pr-review
|
|
171
|
+
|
|
172
|
+
When fixing review comments, use this format:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
git commit -m "fix(scope): address review comment #ID
|
|
176
|
+
|
|
177
|
+
Brief explanation of what was wrong and how it's fixed.
|
|
178
|
+
Addresses review comment #123456789."
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### From github-pr-creation
|
|
182
|
+
|
|
183
|
+
Before creating PR, ensure all commits follow this format. The PR skill will:
|
|
184
|
+
1. Analyze commits for proper format
|
|
185
|
+
2. Extract types for PR labels
|
|
186
|
+
3. Build PR description from commit bodies
|
|
187
|
+
|
|
188
|
+
## Important Rules
|
|
189
|
+
|
|
190
|
+
- **ALWAYS** include scope in parentheses
|
|
191
|
+
- **ALWAYS** use present tense imperative verb
|
|
192
|
+
- **NEVER** end subject with period
|
|
193
|
+
- **NEVER** commit secrets or credentials
|
|
194
|
+
- **NEVER** use generic messages ("update code", "fix bug", "changes")
|
|
195
|
+
- **NEVER** exceed 50 chars in subject line
|
|
196
|
+
- Group related changes -> single focused commit
|
|
197
|
+
|
|
198
|
+
## Examples
|
|
199
|
+
|
|
200
|
+
**Good**:
|
|
201
|
+
```
|
|
202
|
+
feat(validation): add URLValidator with domain whitelist
|
|
203
|
+
fix(auth): use hmac.compare_digest for secure key comparison
|
|
204
|
+
refactor(template): consolidate filename sanitization logic
|
|
205
|
+
test(security): add 102 path traversal prevention tests
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Bad**:
|
|
209
|
+
```
|
|
210
|
+
update validation code # no type, no scope, vague
|
|
211
|
+
feat: add stuff # missing scope, too vague
|
|
212
|
+
fix(auth): fix bug # circular, not specific
|
|
213
|
+
chore: make changes # missing scope, vague
|
|
214
|
+
feat(security): improve things. # has period, vague
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## References
|
|
218
|
+
|
|
219
|
+
- `references/commit_examples.md` - Extended examples by type
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
# Commit Examples by Type
|
|
2
|
+
|
|
3
|
+
Extended examples for each commit type with body content.
|
|
4
|
+
|
|
5
|
+
## feat - New Features
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
feat(validation): add URLValidator with domain whitelist
|
|
9
|
+
|
|
10
|
+
Implement URLValidator class supporting:
|
|
11
|
+
- Domain whitelist enforcement (youtube.com, youtu.be, m.youtube.com)
|
|
12
|
+
- Dangerous scheme blocking (javascript, data, file)
|
|
13
|
+
- URL parsing with embedded credentials handling
|
|
14
|
+
- Port number validation (1-65535)
|
|
15
|
+
|
|
16
|
+
Addresses Requirement 31: Input validation
|
|
17
|
+
Part of Task 5.1: Input Validation Utilities
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
feat(api): add video metadata endpoint
|
|
22
|
+
|
|
23
|
+
New GET /api/v1/videos/{id}/metadata endpoint:
|
|
24
|
+
- Returns title, duration, formats, thumbnails
|
|
25
|
+
- Supports format filtering via query params
|
|
26
|
+
- Implements caching with 5-minute TTL
|
|
27
|
+
|
|
28
|
+
Part of Task 6.2: API Endpoints
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## fix - Bug Fixes
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
fix(auth): use hmac.compare_digest for secure key comparison
|
|
35
|
+
|
|
36
|
+
Replace direct string equality with hmac.compare_digest to prevent
|
|
37
|
+
timing attacks on API key validation. Ensures constant-time comparison
|
|
38
|
+
regardless of key length or content.
|
|
39
|
+
|
|
40
|
+
Addresses security best practice for sensitive data comparison
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
fix(download): handle network timeout during video fetch
|
|
45
|
+
|
|
46
|
+
Add retry logic with exponential backoff for network failures:
|
|
47
|
+
- Max 3 attempts with delays [2, 4, 8] seconds
|
|
48
|
+
- Classify retriable errors (5xx, timeout, connection)
|
|
49
|
+
- Log each retry attempt with remaining count
|
|
50
|
+
|
|
51
|
+
Fixes issue where downloads would fail silently on flaky connections
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## refactor - Code Improvements
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
refactor(template): consolidate filename sanitization logic
|
|
58
|
+
|
|
59
|
+
Extract common sanitization patterns into helper methods:
|
|
60
|
+
- Path traversal prevention (.., /, absolute paths)
|
|
61
|
+
- Special character removal (control chars, null bytes)
|
|
62
|
+
- Windows reserved name handling (CON, PRN, LPT1-9, etc)
|
|
63
|
+
|
|
64
|
+
Improves code maintainability and reduces duplication
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
refactor(providers): extract common yt-dlp options builder
|
|
69
|
+
|
|
70
|
+
Move duplicated option building from get_info/download to
|
|
71
|
+
_build_base_options helper. Reduces code duplication and ensures
|
|
72
|
+
consistent option handling across all provider methods.
|
|
73
|
+
|
|
74
|
+
No behavior change, pure refactoring
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## test - Test Changes
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
test(security): add 102 path traversal prevention tests
|
|
81
|
+
|
|
82
|
+
Comprehensive test coverage for TemplateProcessor including:
|
|
83
|
+
- Basic path traversal attempts (.., /)
|
|
84
|
+
- URL-encoded variants (%2e%2e, %2f)
|
|
85
|
+
- Unicode/UTF-8 bypass attempts
|
|
86
|
+
- Windows edge cases (backslashes, drive letters)
|
|
87
|
+
|
|
88
|
+
Part of Task 5.4: Security Test Suite
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
test(validation): add parametrized URL validation tests
|
|
93
|
+
|
|
94
|
+
Add 25 test cases covering:
|
|
95
|
+
- Valid YouTube URL formats (watch, shorts, embed, youtu.be)
|
|
96
|
+
- Invalid domains (vimeo, dailymotion)
|
|
97
|
+
- Malformed URLs (no scheme, wrong port)
|
|
98
|
+
- Edge cases (trailing slashes, query params)
|
|
99
|
+
|
|
100
|
+
Coverage for URLValidator: 98%
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## perf - Performance
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
perf(cache): implement LRU eviction for metadata cache
|
|
107
|
+
|
|
108
|
+
Replace dict-based cache with LRU implementation:
|
|
109
|
+
- Max 1000 entries with automatic eviction
|
|
110
|
+
- 40% memory reduction under high load
|
|
111
|
+
- Sub-millisecond lookup times maintained
|
|
112
|
+
|
|
113
|
+
Addresses memory growth issue in long-running instances
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## security - Security Fixes
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
security(cookie): validate cookie file integrity before use
|
|
120
|
+
|
|
121
|
+
Add SHA256 checksum verification for cookie files:
|
|
122
|
+
- Compute hash on first load, store in memory
|
|
123
|
+
- Verify hash before each use
|
|
124
|
+
- Reject modified files with clear error message
|
|
125
|
+
|
|
126
|
+
Prevents use of tampered cookie files
|
|
127
|
+
Addresses Requirement 33: Security validation
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## ci - CI/CD Changes
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
ci(github): add security scanning to PR workflow
|
|
134
|
+
|
|
135
|
+
Enable Bandit security scanner in GitHub Actions:
|
|
136
|
+
- Run on all Python files
|
|
137
|
+
- Fail on HIGH/CRITICAL findings
|
|
138
|
+
- Cache virtualenv for faster runs
|
|
139
|
+
|
|
140
|
+
Part of Task 15.3: Basic security validation
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## docs - Documentation
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
docs(api): add OpenAPI description for download endpoint
|
|
147
|
+
|
|
148
|
+
Document /api/v1/download endpoint:
|
|
149
|
+
- Request body schema with format options
|
|
150
|
+
- Response codes (200, 400, 401, 404, 500)
|
|
151
|
+
- Example requests and responses
|
|
152
|
+
|
|
153
|
+
Improves API documentation for consumers
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## chore - Maintenance
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
chore(deps): update yt-dlp to 2024.12.06
|
|
160
|
+
|
|
161
|
+
Update yt-dlp from 2024.11.15 to 2024.12.06:
|
|
162
|
+
- Fixes YouTube throttling detection
|
|
163
|
+
- Adds support for new Instagram format
|
|
164
|
+
- Improves error messages for geo-blocked content
|
|
165
|
+
|
|
166
|
+
No breaking changes expected
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## style - Formatting
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
style(providers): apply black formatting to youtube.py
|
|
173
|
+
|
|
174
|
+
Apply black formatter with 88 char line length.
|
|
175
|
+
No functional changes, formatting only.
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Merge Commit Examples
|
|
179
|
+
|
|
180
|
+
### Feature Branch to Develop
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
Merge pull request #5 from fvadicamo/feature/input-validation-security
|
|
184
|
+
|
|
185
|
+
feat(security): implement input validation and security (Task 5)
|
|
186
|
+
|
|
187
|
+
Merges comprehensive security implementation (Task 5) into develop:
|
|
188
|
+
- Input validation utilities (URLValidator, FormatValidator, ParameterValidator)
|
|
189
|
+
- Secure template processor with path traversal prevention
|
|
190
|
+
- API key authentication middleware with multi-key support
|
|
191
|
+
- 473 tests with 93% coverage
|
|
192
|
+
|
|
193
|
+
Task 5.1: Input Validation Utilities
|
|
194
|
+
- URLValidator: Domain whitelist (youtube.com, youtu.be), dangerous scheme blocking
|
|
195
|
+
- FormatValidator: yt-dlp format ID validation with regex and selectors
|
|
196
|
+
- ParameterValidator: Audio quality/format and language code validation
|
|
197
|
+
|
|
198
|
+
Task 5.2: Template Processor
|
|
199
|
+
- Path traversal prevention (.., /, absolute paths, URL encoding)
|
|
200
|
+
- Filename sanitization (illegal chars, control chars, null bytes)
|
|
201
|
+
- Windows reserved names handling (CON, PRN, AUX, NUL, COM1-9, LPT1-9)
|
|
202
|
+
- Collision handling with numeric suffix, max length 200 chars
|
|
203
|
+
|
|
204
|
+
Task 5.3: API Key Authentication
|
|
205
|
+
- APIKeyAuth class with multi-key support
|
|
206
|
+
- Excluded paths for health/doc endpoints
|
|
207
|
+
- Secure hashing for logging (SHA256 first 8 chars)
|
|
208
|
+
- FastAPI dependency injection integration
|
|
209
|
+
|
|
210
|
+
Task 5.4: Security Tests
|
|
211
|
+
- 102 path traversal prevention tests with edge cases
|
|
212
|
+
- URL validation tests with malicious inputs
|
|
213
|
+
- API key authentication and credential tests
|
|
214
|
+
- Sensitive data redaction verification
|
|
215
|
+
|
|
216
|
+
Requirements Covered:
|
|
217
|
+
- Req 7: Output template processing with security
|
|
218
|
+
- Req 9: API key authentication
|
|
219
|
+
- Req 31: Input validation
|
|
220
|
+
- Req 33: Security (secure comparison, log redaction)
|
|
221
|
+
|
|
222
|
+
Test Coverage:
|
|
223
|
+
- All 473 tests passing
|
|
224
|
+
- Coverage: 93% (exceeds 80% minimum)
|
|
225
|
+
- Pre-commit checks: all passing
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Develop to Main (Release)
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
Merge pull request #10 from fvadicamo/develop
|
|
232
|
+
|
|
233
|
+
release: v0.1.0 - MVP with YouTube provider
|
|
234
|
+
|
|
235
|
+
First stable release with core functionality:
|
|
236
|
+
- YouTube video info, formats, download, audio extraction
|
|
237
|
+
- Cookie-based authentication for age-restricted content
|
|
238
|
+
- API key authentication
|
|
239
|
+
- Input validation and security hardening
|
|
240
|
+
- 500+ tests with 92% coverage
|
|
241
|
+
|
|
242
|
+
Breaking Changes: None (initial release)
|
|
243
|
+
|
|
244
|
+
Features:
|
|
245
|
+
- GET /api/v1/info - Video metadata
|
|
246
|
+
- GET /api/v1/formats - Available formats
|
|
247
|
+
- POST /api/v1/download - Video/audio download
|
|
248
|
+
- Cookie file support for authenticated requests
|
|
249
|
+
|
|
250
|
+
Documentation:
|
|
251
|
+
- API documentation at /docs (Swagger UI)
|
|
252
|
+
- OpenAPI spec at /openapi.json
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Commits with Trailers
|
|
256
|
+
|
|
257
|
+
### Single Issue
|
|
258
|
+
```
|
|
259
|
+
fix(validation): prevent XSS in user input
|
|
260
|
+
|
|
261
|
+
Escape HTML entities before rendering.
|
|
262
|
+
|
|
263
|
+
Fixes #78
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Multiple Issues + Co-author
|
|
267
|
+
```
|
|
268
|
+
fix(auth): resolve session and token issues
|
|
269
|
+
|
|
270
|
+
- Fix session expiry not triggering logout
|
|
271
|
+
- Fix token refresh race condition
|
|
272
|
+
|
|
273
|
+
Fixes #101
|
|
274
|
+
Fixes #103
|
|
275
|
+
Co-authored-by: Bob <bob@example.com>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Breaking Changes
|
|
279
|
+
|
|
280
|
+
### With ! Notation
|
|
281
|
+
```
|
|
282
|
+
feat(api)!: migrate to v2 endpoints
|
|
283
|
+
|
|
284
|
+
BREAKING CHANGE: /api/v1/* endpoints removed. Update base URL to /api/v2/.
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Config Breaking Change
|
|
288
|
+
```
|
|
289
|
+
chore(config)!: rename environment variables
|
|
290
|
+
|
|
291
|
+
BREAKING CHANGE: DATABASE_URL -> APP_DATABASE_URL, API_KEY -> APP_API_KEY
|
|
292
|
+
```
|