@scemoon/cdh 1.0.0
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/ai-dlc-skill/SKILL.md +75 -0
- package/ai-dlc-skill/agents/deliver-agent.md +24 -0
- package/ai-dlc-skill/agents/master.md +44 -0
- package/ai-dlc-skill/agents/plan-agent.md +23 -0
- package/ai-dlc-skill/agents/understand-agent.md +23 -0
- package/ai-dlc-skill/agents/verify-agent.md +27 -0
- package/ai-dlc-skill/architecture/project-structure.md +78 -0
- package/ai-dlc-skill/brownfield/README.md +30 -0
- package/ai-dlc-skill/brownfield/generate-context.sh +64 -0
- package/ai-dlc-skill/brownfield/scripts/deps.sh +27 -0
- package/ai-dlc-skill/brownfield/scripts/discover.sh +34 -0
- package/ai-dlc-skill/brownfield/scripts/extract-api.sh +45 -0
- package/ai-dlc-skill/components/backend.md +34 -0
- package/ai-dlc-skill/components/desktop.md +30 -0
- package/ai-dlc-skill/components/mya.md +29 -0
- package/ai-dlc-skill/components/native.md +30 -0
- package/ai-dlc-skill/components/tta.md +29 -0
- package/ai-dlc-skill/components/web.md +31 -0
- package/ai-dlc-skill/components/wxa.md +29 -0
- package/ai-dlc-skill/contracts/README.md +25 -0
- package/ai-dlc-skill/core/adaptive-flow.md +36 -0
- package/ai-dlc-skill/core/security.md +29 -0
- package/ai-dlc-skill/cross-tool/cline/export.sh +31 -0
- package/ai-dlc-skill/cross-tool/copilot/export.sh +47 -0
- package/ai-dlc-skill/cross-tool/cursor/export.sh +32 -0
- package/ai-dlc-skill/cross-tool/export.sh +22 -0
- package/ai-dlc-skill/cross-tool/onecode/config.yaml.tpl +17 -0
- package/ai-dlc-skill/cross-tool/onecode/export-skills.sh +31 -0
- package/ai-dlc-skill/cross-tool/onecode/export.sh +48 -0
- package/ai-dlc-skill/phases/deliver/entry.md +26 -0
- package/ai-dlc-skill/phases/deliver/lifecycle.md +185 -0
- package/ai-dlc-skill/phases/deliver/prompt.md +40 -0
- package/ai-dlc-skill/phases/deliver/rules.md +61 -0
- package/ai-dlc-skill/phases/plan/entry.md +25 -0
- package/ai-dlc-skill/phases/plan/lifecycle.md +204 -0
- package/ai-dlc-skill/phases/plan/prompt.md +38 -0
- package/ai-dlc-skill/phases/plan/rules.md +25 -0
- package/ai-dlc-skill/phases/understand/entry.md +26 -0
- package/ai-dlc-skill/phases/understand/lifecycle.md +184 -0
- package/ai-dlc-skill/phases/understand/prompt.md +41 -0
- package/ai-dlc-skill/phases/understand/rules.md +37 -0
- package/ai-dlc-skill/phases/verify/entry.md +26 -0
- package/ai-dlc-skill/phases/verify/lifecycle.md +192 -0
- package/ai-dlc-skill/phases/verify/prompt.md +43 -0
- package/ai-dlc-skill/phases/verify/rules.md +73 -0
- package/ai-dlc-skill/practices/bdd.md +91 -0
- package/ai-dlc-skill/practices/sdd.md +84 -0
- package/ai-dlc-skill/practices/tdd.md +95 -0
- package/ai-dlc-skill/providers/README.md +114 -0
- package/ai-dlc-skill/providers/aliyun/deployment.yaml +66 -0
- package/ai-dlc-skill/providers/aliyun/preview.yaml +84 -0
- package/ai-dlc-skill/providers/aliyun/provider.yaml +160 -0
- package/ai-dlc-skill/providers/tcb/deployment.yaml +69 -0
- package/ai-dlc-skill/providers/tcb/preview.yaml +83 -0
- package/ai-dlc-skill/providers/tcb/provider.yaml +172 -0
- package/ai-dlc-skill/requirements.md +140 -0
- package/ai-dlc-skill/skill.yaml +147 -0
- package/ai-dlc-skill/templates/integration/CHANGELOG.md +41 -0
- package/ai-dlc-skill/templates/integration/asyncapi.yaml +43 -0
- package/ai-dlc-skill/templates/integration/contract-diff.md +63 -0
- package/ai-dlc-skill/templates/integration/contract-spec.md +49 -0
- package/ai-dlc-skill/templates/integration/openapi.yaml +18 -0
- package/ai-dlc-skill/templates/integration/runtime-contract.yaml +36 -0
- package/ai-dlc-skill/templates/plan/design.md +49 -0
- package/ai-dlc-skill/templates/plan/task-list.md +32 -0
- package/ai-dlc-skill/templates/project/README.md +127 -0
- package/ai-dlc-skill/templates/project/template.md +119 -0
- package/ai-dlc-skill/templates/understand/feature.feature +23 -0
- package/ai-dlc-skill/templates/understand/intent.md +29 -0
- package/ai-dlc-skill/templates/understand/spec-delta.md +47 -0
- package/ai-dlc-skill/templates/verify/test-unit.py +27 -0
- package/ai-dlc-skill/walkthrough/collect.sh +50 -0
- package/ai-dlc-skill/walkthrough/template.md +54 -0
- package/ai-dlc-skill/workflows/ai-dlc.yaml +110 -0
- package/ai-dlc-skill/workflows/deployment.yaml +199 -0
- package/cdh/__init__.py +0 -0
- package/cdh/__main__.py +4 -0
- package/cdh/__pycache__/__init__.cpython-313.pyc +0 -0
- package/cdh/__pycache__/__init__.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cli.cpython-314.pyc +0 -0
- package/cdh/__pycache__/scaffold.cpython-313.pyc +0 -0
- package/cdh/__pycache__/scaffold.cpython-314.pyc +0 -0
- package/cdh/cli.py +361 -0
- package/cdh/scaffold.py +312 -0
- package/cli.js +2 -0
- package/onecode/__init__.py +1 -0
- package/onecode/__main__.py +4 -0
- package/onecode/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/__pycache__/cli.cpython-314.pyc +0 -0
- package/onecode/__pycache__/commands.cpython-314.pyc +0 -0
- package/onecode/__pycache__/config.cpython-314.pyc +0 -0
- package/onecode/__pycache__/config_screen.cpython-314.pyc +0 -0
- package/onecode/__pycache__/mock_data.cpython-314.pyc +0 -0
- package/onecode/agent/__init__.py +0 -0
- package/onecode/agent/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/cdh_agent_acp.cpython-313.pyc +0 -0
- package/onecode/agent/__pycache__/cdh_agent_acp.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/cdh_loader.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/context.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/engine.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/harness_skill.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/hooks.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/onecode_agent_acp.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/permissions.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/permissions_store.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/session.cpython-314.pyc +0 -0
- package/onecode/agent/agents/__init__.py +29 -0
- package/onecode/agent/agents/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/agent/agents/__pycache__/types.cpython-314.pyc +0 -0
- package/onecode/agent/agents/types.py +662 -0
- package/onecode/agent/attachments.py +113 -0
- package/onecode/agent/cdh_loader.py +262 -0
- package/onecode/agent/context.py +338 -0
- package/onecode/agent/engine.py +1894 -0
- package/onecode/agent/hooks.py +86 -0
- package/onecode/agent/onecode_agent_acp.py +2203 -0
- package/onecode/agent/permissions.py +151 -0
- package/onecode/agent/permissions_store.py +62 -0
- package/onecode/agent/session.py +186 -0
- package/onecode/agent/snapshot.py +145 -0
- package/onecode/agent/tools/__init__.py +17 -0
- package/onecode/agent/tools/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/agent_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/apply_patch_tool.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/bash_tool.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/communication_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/config_tool.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/cron_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/errors.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/file_ops.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/file_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/git_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/lsp_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/mcp_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/permission_handler.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/permissions.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/protocol.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/registry.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/sandbox.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/schema_validation.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/skill_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/task_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/web_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/agent_tools.py +134 -0
- package/onecode/agent/tools/apply_patch_tool.py +144 -0
- package/onecode/agent/tools/bash_tool.py +91 -0
- package/onecode/agent/tools/communication_tools.py +149 -0
- package/onecode/agent/tools/config_tool.py +130 -0
- package/onecode/agent/tools/cron_tools.py +179 -0
- package/onecode/agent/tools/errors.py +17 -0
- package/onecode/agent/tools/file_ops.py +187 -0
- package/onecode/agent/tools/file_tools.py +226 -0
- package/onecode/agent/tools/git_tools.py +88 -0
- package/onecode/agent/tools/lsp_tools.py +404 -0
- package/onecode/agent/tools/mcp_tools.py +129 -0
- package/onecode/agent/tools/permission_handler.py +46 -0
- package/onecode/agent/tools/permissions.py +77 -0
- package/onecode/agent/tools/protocol.py +20 -0
- package/onecode/agent/tools/registry.py +134 -0
- package/onecode/agent/tools/sandbox.py +264 -0
- package/onecode/agent/tools/schema_validation.py +100 -0
- package/onecode/agent/tools/skill_tools.py +52 -0
- package/onecode/agent/tools/task_tools.py +249 -0
- package/onecode/agent/tools/web_tools.py +170 -0
- package/onecode/builtin_skills/git/SKILL.md +64 -0
- package/onecode/builtin_skills/git/skill.yaml +7 -0
- package/onecode/builtin_skills/shell/SKILL.md +58 -0
- package/onecode/builtin_skills/shell/skill.yaml +8 -0
- package/onecode/cli.py +755 -0
- package/onecode/cloud/__init__.py +0 -0
- package/onecode/cloud/base.py +20 -0
- package/onecode/codebase/__init__.py +69 -0
- package/onecode/codebase/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/chunker.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/config.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/indexer.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/retriever.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/storage.cpython-314.pyc +0 -0
- package/onecode/codebase/__pycache__/tools.cpython-314.pyc +0 -0
- package/onecode/codebase/chunker.py +130 -0
- package/onecode/codebase/indexer.py +136 -0
- package/onecode/codebase/retriever.py +192 -0
- package/onecode/codebase/storage.py +130 -0
- package/onecode/codebase/tools.py +59 -0
- package/onecode/commands.py +276 -0
- package/onecode/config.py +285 -0
- package/onecode/config_screen.py +594 -0
- package/onecode/cron/__init__.py +3 -0
- package/onecode/lsp/__init__.py +3 -0
- package/onecode/mcp/__init__.py +4 -0
- package/onecode/mcp/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/mcp/__pycache__/client.cpython-314.pyc +0 -0
- package/onecode/mcp/__pycache__/manager.cpython-314.pyc +0 -0
- package/onecode/mcp/client.py +193 -0
- package/onecode/mcp/manager.py +191 -0
- package/onecode/memory/__init__.py +95 -0
- package/onecode/memory/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/memory/__pycache__/backend.cpython-314.pyc +0 -0
- package/onecode/memory/__pycache__/offload.cpython-314.pyc +0 -0
- package/onecode/memory/__pycache__/pyramid.cpython-314.pyc +0 -0
- package/onecode/memory/__pycache__/recall.cpython-314.pyc +0 -0
- package/onecode/memory/__pycache__/symbolic.cpython-314.pyc +0 -0
- package/onecode/memory/backend.py +185 -0
- package/onecode/memory/offload.py +114 -0
- package/onecode/memory/pyramid.py +202 -0
- package/onecode/memory/recall.py +168 -0
- package/onecode/memory/symbolic.py +164 -0
- package/onecode/models/__init__.py +4 -0
- package/onecode/models/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/models/__pycache__/errors.cpython-314.pyc +0 -0
- package/onecode/models/__pycache__/messages.cpython-314.pyc +0 -0
- package/onecode/models/__pycache__/provider.cpython-314.pyc +0 -0
- package/onecode/models/__pycache__/registry.cpython-314.pyc +0 -0
- package/onecode/models/errors.py +94 -0
- package/onecode/models/messages.py +662 -0
- package/onecode/models/provider.py +450 -0
- package/onecode/models/providers/__init__.py +17 -0
- package/onecode/models/providers/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/anthropic_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/deepseek_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/glm_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/minimax_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/minimaxi_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/mock_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/ollama_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/__pycache__/openai_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/anthropic_provider.py +224 -0
- package/onecode/models/providers/deepseek_provider.py +210 -0
- package/onecode/models/providers/glm_provider.py +154 -0
- package/onecode/models/providers/minimax_provider.py +154 -0
- package/onecode/models/providers/minimaxi_provider.py +363 -0
- package/onecode/models/providers/ollama_provider.py +96 -0
- package/onecode/models/providers/openai_provider.py +233 -0
- package/onecode/models/registry.py +212 -0
- package/onecode/server/__init__.py +3 -0
- package/onecode/server/app.py +224 -0
- package/onecode/skills/__init__.py +11 -0
- package/onecode/skills/__pycache__/__init__.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/argument_substitution.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/create.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/frontmatter.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/loader.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/manager.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/model.cpython-314.pyc +0 -0
- package/onecode/skills/argument_substitution.py +39 -0
- package/onecode/skills/create.py +56 -0
- package/onecode/skills/frontmatter.py +33 -0
- package/onecode/skills/loader.py +157 -0
- package/onecode/skills/manager.py +75 -0
- package/onecode/skills/model.py +43 -0
- package/onecode/storage/__init__.py +0 -0
- package/onecode/storage/activity.py +64 -0
- package/onecode/storage/project.py +54 -0
- package/onecode/storage/session.py +113 -0
- package/onecode/tasks/__init__.py +26 -0
- package/onecode/tasks/manager.py +219 -0
- package/onecode/tasks/models.py +240 -0
- package/onecode/trace/__init__.py +0 -0
- package/onecode/trace/tracer.py +174 -0
- package/onecode/utils/__init__.py +0 -0
- package/onecode/utils/helpers.py +20 -0
- package/onecode-cli.js +2 -0
- package/package.json +32 -0
- package/pyproject.toml +60 -0
- package/run.js +86 -0
- package/tui/__init__.py +46 -0
- package/tui/__main__.py +4 -0
- package/tui/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tui/__pycache__/_loop.cpython-314.pyc +0 -0
- package/tui/__pycache__/_path_fuzzy_search.cpython-314.pyc +0 -0
- package/tui/__pycache__/_path_match.cpython-314.pyc +0 -0
- package/tui/__pycache__/agent.cpython-314.pyc +0 -0
- package/tui/__pycache__/agent_schema.cpython-314.pyc +0 -0
- package/tui/__pycache__/agents.cpython-314.pyc +0 -0
- package/tui/__pycache__/answer.cpython-314.pyc +0 -0
- package/tui/__pycache__/app.cpython-314.pyc +0 -0
- package/tui/__pycache__/atomic.cpython-314.pyc +0 -0
- package/tui/__pycache__/complete.cpython-314.pyc +0 -0
- package/tui/__pycache__/constants.cpython-314.pyc +0 -0
- package/tui/__pycache__/conversation_markdown.cpython-314.pyc +0 -0
- package/tui/__pycache__/danger.cpython-314.pyc +0 -0
- package/tui/__pycache__/db.cpython-314.pyc +0 -0
- package/tui/__pycache__/dec.cpython-314.pyc +0 -0
- package/tui/__pycache__/directory.cpython-314.pyc +0 -0
- package/tui/__pycache__/directory_suggester.cpython-314.pyc +0 -0
- package/tui/__pycache__/directory_watcher.cpython-314.pyc +0 -0
- package/tui/__pycache__/format_path.cpython-314.pyc +0 -0
- package/tui/__pycache__/fuzzy.cpython-314.pyc +0 -0
- package/tui/__pycache__/fuzzy_index.cpython-314.pyc +0 -0
- package/tui/__pycache__/history.cpython-314.pyc +0 -0
- package/tui/__pycache__/jsonrpc.cpython-314.pyc +0 -0
- package/tui/__pycache__/menus.cpython-314.pyc +0 -0
- package/tui/__pycache__/message_log.cpython-314.pyc +0 -0
- package/tui/__pycache__/messages.cpython-314.pyc +0 -0
- package/tui/__pycache__/path_complete.cpython-314.pyc +0 -0
- package/tui/__pycache__/path_filter.cpython-314.pyc +0 -0
- package/tui/__pycache__/paths.cpython-314.pyc +0 -0
- package/tui/__pycache__/pill.cpython-314.pyc +0 -0
- package/tui/__pycache__/platform_commands.cpython-314.pyc +0 -0
- package/tui/__pycache__/protocol.cpython-314.pyc +0 -0
- package/tui/__pycache__/session_tracker.cpython-314.pyc +0 -0
- package/tui/__pycache__/settings.cpython-314.pyc +0 -0
- package/tui/__pycache__/settings_schema.cpython-314.pyc +0 -0
- package/tui/__pycache__/shell.cpython-314.pyc +0 -0
- package/tui/__pycache__/shell_read.cpython-314.pyc +0 -0
- package/tui/__pycache__/slash_command.cpython-314.pyc +0 -0
- package/tui/__pycache__/version.cpython-314.pyc +0 -0
- package/tui/_loop.py +86 -0
- package/tui/_path_fuzzy_search.py +48 -0
- package/tui/_path_match.py +141 -0
- package/tui/about.py +95 -0
- package/tui/acp/__pycache__/agent.cpython-314.pyc +0 -0
- package/tui/acp/__pycache__/api.cpython-314.pyc +0 -0
- package/tui/acp/__pycache__/encode_tool_call_id.cpython-314.pyc +0 -0
- package/tui/acp/__pycache__/messages.cpython-314.pyc +0 -0
- package/tui/acp/__pycache__/prompt.cpython-314.pyc +0 -0
- package/tui/acp/__pycache__/protocol.cpython-314.pyc +0 -0
- package/tui/acp/agent.py +886 -0
- package/tui/acp/api.py +55 -0
- package/tui/acp/encode_tool_call_id.py +12 -0
- package/tui/acp/messages.py +190 -0
- package/tui/acp/prompt.py +110 -0
- package/tui/acp/protocol.py +462 -0
- package/tui/agent.py +70 -0
- package/tui/agent_schema.py +76 -0
- package/tui/agents.py +45 -0
- package/tui/ansi/__init__.py +1 -0
- package/tui/ansi/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_ansi.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_ansi_colors.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_control_codes.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_keys.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_sgr_styles.cpython-314.pyc +0 -0
- package/tui/ansi/__pycache__/_stream_parser.cpython-314.pyc +0 -0
- package/tui/ansi/_ansi.py +1689 -0
- package/tui/ansi/_ansi_colors.py +264 -0
- package/tui/ansi/_control_codes.py +37 -0
- package/tui/ansi/_keys.py +251 -0
- package/tui/ansi/_sgr_styles.py +64 -0
- package/tui/ansi/_stream_parser.py +418 -0
- package/tui/answer.py +12 -0
- package/tui/app.py +1236 -0
- package/tui/atomic.py +37 -0
- package/tui/cli.py +313 -0
- package/tui/code_analyze.py +27 -0
- package/tui/complete.py +38 -0
- package/tui/constants.py +61 -0
- package/tui/conversation_markdown.py +30 -0
- package/tui/danger.py +372 -0
- package/tui/data/agents/ampcode.com.toml +51 -0
- package/tui/data/agents/augmentcode.com.toml +40 -0
- package/tui/data/agents/cdh.cloud-dev-harness.toml +22 -0
- package/tui/data/agents/claude.com.toml +41 -0
- package/tui/data/agents/copilot.github.com.toml +29 -0
- package/tui/data/agents/crowai.dev.toml +35 -0
- package/tui/data/agents/cursor.com.toml +38 -0
- package/tui/data/agents/deepagents.langchain.com +33 -0
- package/tui/data/agents/docker.com.toml +59 -0
- package/tui/data/agents/geminicli.com.toml +28 -0
- package/tui/data/agents/goose.ai.toml +51 -0
- package/tui/data/agents/inference.huggingface.co.toml +41 -0
- package/tui/data/agents/kimi.com.toml +35 -0
- package/tui/data/agents/kiro.dev.toml +42 -0
- package/tui/data/agents/openai.com.toml +53 -0
- package/tui/data/agents/openclaw.ai.toml +37 -0
- package/tui/data/agents/opencode.ai.toml +39 -0
- package/tui/data/agents/openhands.dev.toml +45 -0
- package/tui/data/agents/stakpak.dev.toml +61 -0
- package/tui/data/agents/vibe.mistral.ai.toml +30 -0
- package/tui/data/agents/vtcode.dev.toml +62 -0
- package/tui/data/images/frog.png +0 -0
- package/tui/data/sounds/question.wav +0 -0
- package/tui/data/sounds/turn-over.wav +0 -0
- package/tui/db.py +190 -0
- package/tui/dec.py +332 -0
- package/tui/directory.py +234 -0
- package/tui/directory_suggester.py +93 -0
- package/tui/directory_watcher.py +197 -0
- package/tui/format_path.py +25 -0
- package/tui/fuzzy.py +140 -0
- package/tui/fuzzy_index.py +275 -0
- package/tui/gist.py +33 -0
- package/tui/history.py +138 -0
- package/tui/jsonrpc.py +578 -0
- package/tui/menus.py +14 -0
- package/tui/message_log.py +69 -0
- package/tui/messages.py +139 -0
- package/tui/option_content.py +51 -0
- package/tui/os.py +0 -0
- package/tui/path_complete.py +217 -0
- package/tui/path_filter.py +124 -0
- package/tui/paths.py +71 -0
- package/tui/pill.py +23 -0
- package/tui/platform_commands.py +52 -0
- package/tui/prompt/__pycache__/extract.cpython-314.pyc +0 -0
- package/tui/prompt/__pycache__/resource.cpython-314.pyc +0 -0
- package/tui/prompt/extract.py +19 -0
- package/tui/prompt/resource.py +68 -0
- package/tui/protocol.py +28 -0
- package/tui/screens/__init__.py +0 -0
- package/tui/screens/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/log.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/main.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/projects_screen.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/sessions.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/settings.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/store.cpython-314.pyc +0 -0
- package/tui/screens/action_modal.py +94 -0
- package/tui/screens/agent_modal.py +175 -0
- package/tui/screens/command_edit_modal.py +74 -0
- package/tui/screens/log.py +553 -0
- package/tui/screens/main.py +411 -0
- package/tui/screens/main.tcss +655 -0
- package/tui/screens/permissions.py +404 -0
- package/tui/screens/permissions.tcss +72 -0
- package/tui/screens/projects.tcss +66 -0
- package/tui/screens/projects_app.py +319 -0
- package/tui/screens/projects_screen.py +142 -0
- package/tui/screens/session_resume_modal.py +172 -0
- package/tui/screens/session_resume_modal.tcss +35 -0
- package/tui/screens/sessions.py +166 -0
- package/tui/screens/sessions.tcss +119 -0
- package/tui/screens/settings.py +254 -0
- package/tui/screens/settings.tcss +101 -0
- package/tui/screens/store.py +500 -0
- package/tui/screens/store.tcss +274 -0
- package/tui/screens/tool_content_screen.py +59 -0
- package/tui/session_tracker.py +120 -0
- package/tui/settings.py +353 -0
- package/tui/settings_schema.py +431 -0
- package/tui/shell.py +304 -0
- package/tui/shell_read.py +42 -0
- package/tui/slash_command.py +34 -0
- package/tui/tui.tcss +246 -0
- package/tui/twitter.py +38 -0
- package/tui/version.py +80 -0
- package/tui/visuals/__init__.py +0 -0
- package/tui/visuals/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tui/visuals/__pycache__/columns.cpython-314.pyc +0 -0
- package/tui/visuals/columns.py +273 -0
- package/tui/widgets/__init__.py +0 -0
- package/tui/widgets/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/acp_content.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/agent_response.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/agent_thought.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/ask_user.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/condensed_path.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/context_stats.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/conversation.cpython-313.pyc +0 -0
- package/tui/widgets/__pycache__/conversation.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/diff_view.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/directory_input.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/flash.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/future_text.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/grid_select.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/highlighted_textarea.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/mandelbrot.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/markdown_note.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/menu.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/modified_files.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/non_selectable_label.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/note.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/path_search.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/plan.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/project_directory_tree.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/project_grid_select.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/project_summary.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/prompt.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/question.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/session_grid_select.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/session_summary.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/session_tabs.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/shell_result.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/shell_terminal.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/side_bar.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/slash_complete.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/strike_text.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/subagent.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/terminal.cpython-313.pyc +0 -0
- package/tui/widgets/__pycache__/terminal.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/throbber.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/tool_call.cpython-313.pyc +0 -0
- package/tui/widgets/__pycache__/tool_call.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/user_input.cpython-314.pyc +0 -0
- package/tui/widgets/acp_content.py +70 -0
- package/tui/widgets/agent_response.py +77 -0
- package/tui/widgets/agent_thought.py +168 -0
- package/tui/widgets/ask_user.py +264 -0
- package/tui/widgets/command_pane.py +223 -0
- package/tui/widgets/condensed_path.py +115 -0
- package/tui/widgets/context_stats.py +66 -0
- package/tui/widgets/conversation.py +2441 -0
- package/tui/widgets/danger_warning.py +65 -0
- package/tui/widgets/diff_view.py +59 -0
- package/tui/widgets/directory_input.py +8 -0
- package/tui/widgets/flash.py +81 -0
- package/tui/widgets/future_text.py +126 -0
- package/tui/widgets/grid_select.py +234 -0
- package/tui/widgets/highlighted_textarea.py +180 -0
- package/tui/widgets/mandelbrot.py +294 -0
- package/tui/widgets/markdown_note.py +13 -0
- package/tui/widgets/menu.py +147 -0
- package/tui/widgets/modified_files.py +106 -0
- package/tui/widgets/non_selectable_label.py +5 -0
- package/tui/widgets/note.py +18 -0
- package/tui/widgets/path_search.py +492 -0
- package/tui/widgets/plan.py +263 -0
- package/tui/widgets/project_directory_tree.py +90 -0
- package/tui/widgets/project_grid_select.py +35 -0
- package/tui/widgets/project_summary.py +33 -0
- package/tui/widgets/prompt.py +795 -0
- package/tui/widgets/question.py +360 -0
- package/tui/widgets/session_grid_select.py +224 -0
- package/tui/widgets/session_summary.py +115 -0
- package/tui/widgets/session_tabs.py +188 -0
- package/tui/widgets/shell_result.py +35 -0
- package/tui/widgets/shell_terminal.py +40 -0
- package/tui/widgets/side_bar.py +114 -0
- package/tui/widgets/slash_complete.py +235 -0
- package/tui/widgets/strike_text.py +70 -0
- package/tui/widgets/subagent.py +87 -0
- package/tui/widgets/terminal.py +577 -0
- package/tui/widgets/terminal_tool.py +351 -0
- package/tui/widgets/throbber.py +100 -0
- package/tui/widgets/tool_call.py +368 -0
- package/tui/widgets/user_input.py +23 -0
- package/tui/widgets/version.py +5 -0
- package/tui/widgets/welcome.py +31 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Deliver Rules (DLV-*) + Stack Rules (STK-*)
|
|
2
|
+
|
|
3
|
+
## DLV-001: Unified Stack Preview Before Production
|
|
4
|
+
**Severity:** MUST
|
|
5
|
+
**Description:** Every release MUST deploy as unified stack preview with per-component e2e + cross-stack e2e passing before production.
|
|
6
|
+
**Valid:** `deploy_stack --preview` → `pytest tests/cross-stack/ --stack-url $STACK_URL`.
|
|
7
|
+
**Invalid:** Deploying only one component to preview.
|
|
8
|
+
|
|
9
|
+
## DLV-002: Production Approval Gate
|
|
10
|
+
**Severity:** MUST
|
|
11
|
+
**Description:** Production deployment requires explicit human approval reviewing per-component e2e, cross-stack e2e, staging smoke, and contract-diff.md.
|
|
12
|
+
**Valid:** Human reviews all reports and explicitly approves.
|
|
13
|
+
**Invalid:** Automated production deployment triggered solely by test pass.
|
|
14
|
+
|
|
15
|
+
## DLV-003: Stack BVT Validation
|
|
16
|
+
**Severity:** MUST
|
|
17
|
+
**Description:** After production deploy, BVT MUST run against the stack. Failure triggers automatic stack rollback.
|
|
18
|
+
**Valid:** `bvt ${PRODUCTION_URL}` → fail → `deploy_stack --rollback`.
|
|
19
|
+
**Invalid:** BVT skip or success with errors.
|
|
20
|
+
|
|
21
|
+
## DLV-004: Per-Component Preview URL Isolation
|
|
22
|
+
**Severity:** MUST
|
|
23
|
+
**Description:** e2e tests run against dynamic preview URLs, never hardcoded production URLs.
|
|
24
|
+
**Valid:** `pytest apps/web/tests/e2e/ --preview-url $WEB_URL`.
|
|
25
|
+
**Invalid:** Hardcoded `https://prod.example.com` in tests.
|
|
26
|
+
|
|
27
|
+
## STK-001: Component Scope Declaration
|
|
28
|
+
**Severity:** MUST
|
|
29
|
+
**Description:** Every spec delta, design doc, task list MUST declare `affects:`.
|
|
30
|
+
**Valid:** `affects: [web, backend, contracts]`.
|
|
31
|
+
**Invalid:** Missing `affects` declaration.
|
|
32
|
+
|
|
33
|
+
## STK-002: Cross-Component Tasks Have Edges
|
|
34
|
+
**Severity:** MUST
|
|
35
|
+
**Description:** Tasks consuming a contract MUST have explicit `depends_on` edge to producing task.
|
|
36
|
+
**Valid:** `depends_on: [int-contract-auth-login, be-login-endpoint]`.
|
|
37
|
+
**Invalid:** Implicit dependency with no DAG edge.
|
|
38
|
+
|
|
39
|
+
## STK-003: Cross-Stack E2E Mandatory for ≥2 Components
|
|
40
|
+
**Severity:** MUST
|
|
41
|
+
**Description:** Changes affecting ≥2 components MUST have cross-stack e2e testing real flow between components.
|
|
42
|
+
**Valid:** Real web client against real backend preview.
|
|
43
|
+
**Invalid:** Cross-stack test that mocks the other component.
|
|
44
|
+
|
|
45
|
+
## STK-004: Unified Stack Deploy
|
|
46
|
+
**Severity:** MUST
|
|
47
|
+
**Description:** Shared environments MUST use `deploy_stack` orchestrator, not per-component ad-hoc deploys.
|
|
48
|
+
**Valid:** `deploy_stack --preview` deploys all components.
|
|
49
|
+
**Invalid:** Ad-hoc per-component deploy to shared preview.
|
|
50
|
+
|
|
51
|
+
## STK-005: Cross-Component Build Config Injection
|
|
52
|
+
**Severity:** MUST
|
|
53
|
+
**Description:** All client builds receive `BACKEND_URL` as build-time env var, never hardcoded.
|
|
54
|
+
**Valid:** `pnpm --filter web build --env BACKEND_URL=$BACKEND_URL`.
|
|
55
|
+
**Invalid:** Hardcoded URLs in `.env.production`.
|
|
56
|
+
|
|
57
|
+
## STK-006: Stack-Level Rollback
|
|
58
|
+
**Severity:** MUST
|
|
59
|
+
**Description:** Rollback is stack operation. Entire previous stable version reverts together.
|
|
60
|
+
**Valid:** `deploy_stack --rollback v1.2.3` reverts all components.
|
|
61
|
+
**Invalid:** Rolling back only backend while leaving clients on new version.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ai-dlc-plan
|
|
3
|
+
description: "Plan Phase: Design Doc → Task DAG → Test Plan"
|
|
4
|
+
triggers:
|
|
5
|
+
- plan
|
|
6
|
+
- design
|
|
7
|
+
- task-list
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Plan Phase (规划)
|
|
11
|
+
|
|
12
|
+
Convert approved spec into technical design and task decomposition.
|
|
13
|
+
|
|
14
|
+
## Entry
|
|
15
|
+
|
|
16
|
+
See `lifecycle.md` for the full phase flow.
|
|
17
|
+
See `rules.md` for enforceable rules (PLN-001 to PLN-004).
|
|
18
|
+
See `prompt.md` for the sub-agent delegation prompt template.
|
|
19
|
+
|
|
20
|
+
## 当被委派时
|
|
21
|
+
|
|
22
|
+
1. 读取 spec-delta 和 feature 文件
|
|
23
|
+
2. 生成设计文档(per-component + integration)
|
|
24
|
+
3. 分解为带 DAG 依赖的任务单元
|
|
25
|
+
4. 编写测试计划(每层)
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# AI-DLC Phase 2: Plan (规划)
|
|
2
|
+
|
|
3
|
+
Design the solution and decompose work into tracked, dependency-ordered units, including cross-component edges.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Translate approved specifications into a concrete technical plan that can be executed unit by unit, with explicit cross-component dependencies and contract references.
|
|
8
|
+
|
|
9
|
+
## Flow
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Approved Spec + BDD Features (per-component + cross-stack)
|
|
13
|
+
│
|
|
14
|
+
▼
|
|
15
|
+
SDD: Design Doc
|
|
16
|
+
- architecture (per component)
|
|
17
|
+
- data model
|
|
18
|
+
- API contract (references INT-FR-*)
|
|
19
|
+
- state machine
|
|
20
|
+
- integration section (cross-component flow)
|
|
21
|
+
│
|
|
22
|
+
▼
|
|
23
|
+
SDD: Task Decomposition (units with DAG, including cross-component edges)
|
|
24
|
+
│
|
|
25
|
+
▼
|
|
26
|
+
TDD: Test Plan (per scenario, written before implementation)
|
|
27
|
+
- unit / integration / e2e / cross-stack layer
|
|
28
|
+
│
|
|
29
|
+
▼
|
|
30
|
+
INT: Contract plan (which contracts change, version impact)
|
|
31
|
+
│
|
|
32
|
+
▼
|
|
33
|
+
Gate: Human review → approved or revise
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## SDD — Design Document (multi-component aware)
|
|
37
|
+
|
|
38
|
+
A multi-component design doc is organized by **component sections** plus an **integration section**.
|
|
39
|
+
|
|
40
|
+
```markdown
|
|
41
|
+
## Design — CHG-{{id}}
|
|
42
|
+
|
|
43
|
+
**Affects:** [{{components}}]
|
|
44
|
+
**Contracts touched:** {{list or "none"}}
|
|
45
|
+
|
|
46
|
+
### Component: backend (BE-FR-*)
|
|
47
|
+
- Architecture: {{serverless / container / ...}}
|
|
48
|
+
- Data model: {{tables / collections}}
|
|
49
|
+
- API surface: {{references INT-FR-* contract}}
|
|
50
|
+
- State machine: {{...}}
|
|
51
|
+
|
|
52
|
+
### Component: web (WEB-FR-*)
|
|
53
|
+
- Architecture: {{SPA / SSR}}
|
|
54
|
+
- Routes: {{...}}
|
|
55
|
+
- Data flow: {{uses packages/shared generated from INT-FR-001}}
|
|
56
|
+
|
|
57
|
+
### Component: native (NATIVE-FR-*)
|
|
58
|
+
- Architecture: {{native architecture}}
|
|
59
|
+
- Data flow: {{uses packages/shared generated from INT-FR-*}}
|
|
60
|
+
|
|
61
|
+
### Component: desktop (DESKTOP-FR-*)
|
|
62
|
+
- Architecture: {{desktop architecture}}
|
|
63
|
+
- Data flow: {{uses packages/shared generated from INT-FR-*}}
|
|
64
|
+
|
|
65
|
+
### Component: wxa (WXA-FR-*)
|
|
66
|
+
- Architecture: {{WeChat Mini Program}}
|
|
67
|
+
- Data flow: {{uses packages/shared generated from INT-FR-*}}
|
|
68
|
+
|
|
69
|
+
### Component: mya (MYA-FR-*)
|
|
70
|
+
- Architecture: {{Mini Program}}
|
|
71
|
+
- Data flow: {{uses packages/shared generated from INT-FR-*}}
|
|
72
|
+
|
|
73
|
+
### Component: tta (TTA-FR-*)
|
|
74
|
+
- Architecture: {{TikTok Mini Program}}
|
|
75
|
+
- Data flow: {{uses packages/shared generated from INT-FR-*}}
|
|
76
|
+
|
|
77
|
+
### Integration
|
|
78
|
+
- Flow: {{web → backend → DB; or app → backend → event → ...}}
|
|
79
|
+
- Contract refs: INT-FR-001, INT-FR-002
|
|
80
|
+
- Failure modes: {{timeout, retry, fallback}}
|
|
81
|
+
- Backward compat: {{additive / breaking → migration}}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Data Model
|
|
85
|
+
|
|
86
|
+
| Field | Type | Constraints |
|
|
87
|
+
|-------|------|-------------|
|
|
88
|
+
| id | UUID | PK |
|
|
89
|
+
| email | string | UNIQUE, NOT NULL |
|
|
90
|
+
| password_hash | string | NOT NULL |
|
|
91
|
+
|
|
92
|
+
### API Contract
|
|
93
|
+
|
|
94
|
+
| Method | Path | INT FR | Provider | Consumer |
|
|
95
|
+
|--------|------|--------|----------|----------|
|
|
96
|
+
| POST | /auth/login | INT-FR-001 | BE-FR-001 | WEB-FR-001, NATIVE-FR-001, DESKTOP-FR-001, WXA-FR-001, MYA-FR-001, TTA-FR-001 |
|
|
97
|
+
|
|
98
|
+
### State Machine
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
ANONYMOUS → LOGGED_IN → SESSION_EXPIRED
|
|
102
|
+
↓
|
|
103
|
+
LOGGED_OUT
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## SDD — Task Decomposition with DAG (multi-component)
|
|
107
|
+
|
|
108
|
+
Tasks MUST include cross-component edges. A task that produces or consumes a contract depends on the corresponding `INT-FR-*` task.
|
|
109
|
+
|
|
110
|
+
```mermaid
|
|
111
|
+
graph TD
|
|
112
|
+
INT1[INT-FR-001: define /auth/login contract]
|
|
113
|
+
BE1[BE-FR-001 unit-1: DB schema + models]
|
|
114
|
+
BE2[BE-FR-001 unit-2: login endpoint]
|
|
115
|
+
WEB1[WEB-FR-001 unit-1: login form + API client]
|
|
116
|
+
WEB2[WEB-FR-001 unit-2: token storage + redirect]
|
|
117
|
+
CS1[INT-FR-001 cross-stack: e2e login flow]
|
|
118
|
+
|
|
119
|
+
INT1 --> BE2
|
|
120
|
+
INT1 --> WEB1
|
|
121
|
+
BE1 --> BE2
|
|
122
|
+
BE2 --> CS1
|
|
123
|
+
WEB1 --> CS1
|
|
124
|
+
WEB2 --> CS1
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
```yaml
|
|
128
|
+
units:
|
|
129
|
+
- id: int-contract-1
|
|
130
|
+
fr: INT-FR-001
|
|
131
|
+
affects: [contracts]
|
|
132
|
+
depends_on: []
|
|
133
|
+
deliverables: [contracts/api/auth.yaml]
|
|
134
|
+
- id: be-unit-1
|
|
135
|
+
fr: BE-FR-001
|
|
136
|
+
affects: [backend]
|
|
137
|
+
depends_on: []
|
|
138
|
+
scenarios: []
|
|
139
|
+
- id: be-unit-2
|
|
140
|
+
fr: BE-FR-001
|
|
141
|
+
affects: [backend]
|
|
142
|
+
depends_on: [int-contract-1, be-unit-1]
|
|
143
|
+
scenarios: ["BE-FR-001 @positive", "BE-FR-001 @negative"]
|
|
144
|
+
- id: web-unit-1
|
|
145
|
+
fr: WEB-FR-001
|
|
146
|
+
affects: [web]
|
|
147
|
+
depends_on: [int-contract-1]
|
|
148
|
+
scenarios: ["WEB-FR-001 @positive", "WEB-FR-001 @negative"]
|
|
149
|
+
- id: cross-stack-1
|
|
150
|
+
fr: INT-FR-001
|
|
151
|
+
affects: [web, backend]
|
|
152
|
+
depends_on: [be-unit-2, web-unit-1]
|
|
153
|
+
layer: cross-stack
|
|
154
|
+
scenarios: ["INT-FR-001 @positive", "INT-FR-001 @negative", "INT-FR-001 @edge"]
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## TDD — Test Plan (per scenario, per layer)
|
|
158
|
+
|
|
159
|
+
Each scenario gets a test plan that names the **layer** it runs at.
|
|
160
|
+
|
|
161
|
+
```markdown
|
|
162
|
+
## BE-FR-001 @positive: Login API success
|
|
163
|
+
Layer: integration
|
|
164
|
+
Test cases:
|
|
165
|
+
1. test_login_valid_credentials_returns_jwt
|
|
166
|
+
2. test_login_sets_expiry_3600
|
|
167
|
+
|
|
168
|
+
## WEB-FR-001 @positive: Login form happy path
|
|
169
|
+
Layer: e2e
|
|
170
|
+
Test cases:
|
|
171
|
+
1. test_login_form_submits_and_redirects
|
|
172
|
+
|
|
173
|
+
## INT-FR-001 @positive: Full web→backend login flow
|
|
174
|
+
Layer: cross-stack
|
|
175
|
+
Test cases:
|
|
176
|
+
1. test_web_login_e2e_against_preview_url
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## INT — Contract Plan
|
|
180
|
+
|
|
181
|
+
For each contract change, list:
|
|
182
|
+
- Old version, new version
|
|
183
|
+
- Breaking? (yes / no) → if yes, plan migration in `contracts/CHANGELOG.md`
|
|
184
|
+
- Consumers affected (which components will pull the new shared types)
|
|
185
|
+
- Backward-compat strategy (additive vs. deprecate-then-remove)
|
|
186
|
+
|
|
187
|
+
## Artifacts
|
|
188
|
+
|
|
189
|
+
| Artifact | Location | Purpose |
|
|
190
|
+
|----------|----------|---------|
|
|
191
|
+
| Design doc | `openspec/changes/{id}/design.md` | Per-component + integration |
|
|
192
|
+
| Task list | `openspec/changes/{id}/task-list.md` | DAG with cross-component edges |
|
|
193
|
+
| Test plan | Embedded in task-list or separate | Per-scenario, per-layer |
|
|
194
|
+
| Contract plan | `openspec/changes/{id}/contract-diff.md` placeholder | Filled in Verify |
|
|
195
|
+
|
|
196
|
+
## Gate
|
|
197
|
+
|
|
198
|
+
**Before advancing to Verify phase:**
|
|
199
|
+
- [ ] Design doc has per-component sections + integration section
|
|
200
|
+
- [ ] Tasks decomposed with explicit dependency DAG (including cross-component edges)
|
|
201
|
+
- [ ] `INT-FR-*` tasks precede the consuming per-component tasks
|
|
202
|
+
- [ ] Test plans name the layer (`unit` / `integration` / `e2e` / `cross-stack`) per scenario
|
|
203
|
+
- [ ] Contract plan identifies breaking vs. additive
|
|
204
|
+
- [ ] Human reviewed and approved
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Plan Phase Agent Prompt
|
|
2
|
+
|
|
3
|
+
你是一个 AI-DLC Plan Phase Agent。
|
|
4
|
+
由 Master Agent 委派处理方案设计。
|
|
5
|
+
|
|
6
|
+
## 输入
|
|
7
|
+
- `openspec/changes/{id}/spec-delta.md`
|
|
8
|
+
- BDD feature 文件
|
|
9
|
+
|
|
10
|
+
## 任务
|
|
11
|
+
|
|
12
|
+
1. **SDD: Design Doc**
|
|
13
|
+
- 在 `openspec/changes/{id}/design.md` 输出
|
|
14
|
+
- 包含:架构图(Mermaid)、数据模型、API 表、状态机
|
|
15
|
+
- 每组件独立 section + 集成 section
|
|
16
|
+
|
|
17
|
+
2. **SDD: Task Decomposition**
|
|
18
|
+
- 在 `openspec/changes/{id}/task-list.md` 输出
|
|
19
|
+
- YAML 格式,unit 带 `depends_on` DAG
|
|
20
|
+
- 跨组件 task 显示声明 `depends_on` 关系
|
|
21
|
+
|
|
22
|
+
3. **TDD: Test Plan**
|
|
23
|
+
- 每个 BDD scenario 对应最少一个测试 case
|
|
24
|
+
- 标注 layer: unit / integration / e2e / cross-stack / contract
|
|
25
|
+
|
|
26
|
+
4. **Contract Plan**
|
|
27
|
+
- 标注版本影响:additive / breaking
|
|
28
|
+
- 如需 breaking change 标记为 human-approval 阻塞
|
|
29
|
+
|
|
30
|
+
## 输出产物
|
|
31
|
+
- `openspec/changes/{id}/design.md`
|
|
32
|
+
- `openspec/changes/{id}/task-list.md`
|
|
33
|
+
- `openspec/changes/{id}/contract-diff.md`(占位)
|
|
34
|
+
|
|
35
|
+
## 约束
|
|
36
|
+
- 遵守 `rules.md` 中的 PLN-001 到 PLN-004
|
|
37
|
+
- 遵守 STK-001, STK-002(affects 声明 + cross-component 依赖)
|
|
38
|
+
- 完成前必须通过 Human Gate 审查
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Plan Rules (PLN-*)
|
|
2
|
+
|
|
3
|
+
## PLN-001: Design Documentation
|
|
4
|
+
**Severity:** MUST
|
|
5
|
+
**Description:** Each feature MUST have a design document covering architecture, data model, API contracts, and state machine. For multi-component features, MUST have per-component sections and an integration section.
|
|
6
|
+
**Valid:** `openspec/changes/{id}/design.md` with `## Component: backend`, `## Component: web`, `## Integration`.
|
|
7
|
+
**Invalid:** A single flat architecture section with no per-component concerns.
|
|
8
|
+
|
|
9
|
+
## PLN-002: Dependency DAG
|
|
10
|
+
**Severity:** MUST
|
|
11
|
+
**Description:** Units MUST be decomposed with explicit dependency DAG including cross-component edges. A task producing/consuming a contract MUST depend on the corresponding `INT-FR-*` task.
|
|
12
|
+
**Valid:** `depends_on: [int-contract-1, be-unit-1]` for a web task consuming the contract.
|
|
13
|
+
**Invalid:** Per-component task lists with no cross-component edges.
|
|
14
|
+
|
|
15
|
+
## PLN-003: Test Plan Before Implementation
|
|
16
|
+
**Severity:** MUST
|
|
17
|
+
**Description:** Test plans for each scenario MUST be written before implementation and MUST name the test layer (`unit`, `integration`, `e2e`, `cross-stack`, `contract`).
|
|
18
|
+
**Valid:** `BE-FR-001 @positive → layer: integration → test_login_valid_credentials`
|
|
19
|
+
**Invalid:** A test plan with no layer designation.
|
|
20
|
+
|
|
21
|
+
## PLN-004: Contract Plan
|
|
22
|
+
**Severity:** MUST
|
|
23
|
+
**Description:** For each contract change, the design doc MUST identify version impact (additive vs. breaking), consumers affected, and backward-compat strategy.
|
|
24
|
+
**Valid:** `INT-FR-001 change: additive, MINOR bump; no consumer migration needed`
|
|
25
|
+
**Invalid:** Contract change with no version impact noted.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ai-dlc-understand
|
|
3
|
+
description: "Understand Phase: Intent → Spec Delta → BDD Feature Files"
|
|
4
|
+
triggers:
|
|
5
|
+
- understand
|
|
6
|
+
- spec-delta
|
|
7
|
+
- EARS
|
|
8
|
+
- feature file
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Understand Phase (理解)
|
|
12
|
+
|
|
13
|
+
Transform business intent into formal specification and behavior scenarios.
|
|
14
|
+
|
|
15
|
+
## Entry
|
|
16
|
+
|
|
17
|
+
See `lifecycle.md` for the full phase flow.
|
|
18
|
+
See `rules.md` for enforceable rules (UND-001 to UND-006).
|
|
19
|
+
See `prompt.md` for the sub-agent delegation prompt template.
|
|
20
|
+
|
|
21
|
+
## 当被委派时
|
|
22
|
+
|
|
23
|
+
1. 读取 intent 输入
|
|
24
|
+
2. 按 SDD 方法生成 spec-delta(EARS 格式)
|
|
25
|
+
3. 为每个 FR 写 BDD feature 文件(≥3 scenarios: positive, negative, edge)
|
|
26
|
+
4. 输出到 `openspec/changes/{id}/`
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# AI-DLC Phase 1: Understand (理解)
|
|
2
|
+
|
|
3
|
+
Transform business intent into formal specification and behavior scenarios, scoped to the right FR namespace.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Convert a business need into unambiguous, verifiable requirements before any design or code work begins. For multi-component features, capture the **cross-component boundary** in addition to per-component behavior.
|
|
8
|
+
|
|
9
|
+
## Flow
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Intent (business need / user story)
|
|
13
|
+
│
|
|
14
|
+
▼
|
|
15
|
+
Identify scope: which components does this touch?
|
|
16
|
+
│
|
|
17
|
+
▼
|
|
18
|
+
SDD: Proposal (why, what, impact, affects: [native|desktop|web|backend|wxa|mya|tta|contracts])
|
|
19
|
+
│
|
|
20
|
+
▼
|
|
21
|
+
SDD: Spec Delta (EARS format — ADDED/MODIFIED/REMOVED, FR namespaces)
|
|
22
|
+
│
|
|
23
|
+
▼
|
|
24
|
+
BDD: Feature Files
|
|
25
|
+
- features/{component}/{domain}/{feature}.feature (per-component)
|
|
26
|
+
- features/cross-stack/{domain}/{feature}.feature (full flow, if applies)
|
|
27
|
+
│
|
|
28
|
+
▼
|
|
29
|
+
Gate: Human review → approved or revise
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Scope Identification
|
|
33
|
+
|
|
34
|
+
Before writing the spec, declare which components the feature affects. This determines the FR namespaces and which lifecycle paths run.
|
|
35
|
+
|
|
36
|
+
| Affects | Example | FRs |
|
|
37
|
+
|---------|---------|-----|
|
|
38
|
+
| `[backend]` only | Internal API | `BE-FR-NNN` |
|
|
39
|
+
| `[web, backend]` | Login UI + API | `WEB-FR-NNN`, `BE-FR-NNN`, `INT-FR-NNN` |
|
|
40
|
+
| `[native, backend]` | Native login | `NATIVE-FR-NNN`, `BE-FR-NNN`, `INT-FR-NNN` |
|
|
41
|
+
| `[desktop, backend]` | Desktop login | `DESKTOP-FR-NNN`, `BE-FR-NNN`, `INT-FR-NNN` |
|
|
42
|
+
| `[wxa, backend]` | Mini-program login | `WXA-FR-NNN`, `BE-FR-NNN`, `INT-FR-NNN` |
|
|
43
|
+
| `[mya, backend]` | Mini-program login | `MYA-FR-NNN`, `BE-FR-NNN`, `INT-FR-NNN` |
|
|
44
|
+
| `[tta, backend]` | Mini-program login | `TTA-FR-NNN`, `BE-FR-NNN`, `INT-FR-NNN` |
|
|
45
|
+
| `[web, native, desktop, wxa, mya, tta, backend]` | Full feature | `WEB-FR-NNN`, `NATIVE-FR-NNN`, `DESKTOP-FR-NNN`, `WXA-FR-NNN`, `MYA-FR-NNN`, `TTA-FR-NNN`, `BE-FR-NNN`, `INT-FR-NNN` |
|
|
46
|
+
| `[contracts]` | Schema-only change | `INT-FR-NNN` only |
|
|
47
|
+
|
|
48
|
+
`affects: [contracts]` is reserved for **pure contract changes** (e.g. add a new field shared by all components). It still requires Plan + Verify.
|
|
49
|
+
|
|
50
|
+
## SDD — Spec-Driven Development
|
|
51
|
+
|
|
52
|
+
### Intent Capture
|
|
53
|
+
|
|
54
|
+
```markdown
|
|
55
|
+
## Intent
|
|
56
|
+
|
|
57
|
+
**Title:** {{title}}
|
|
58
|
+
**Affects:** [{{components}}]
|
|
59
|
+
**Why:** {{why}}
|
|
60
|
+
**What:** {{what}}
|
|
61
|
+
**Success:** {{success_criteria}}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Spec Delta (EARS) with Namespace
|
|
65
|
+
|
|
66
|
+
```markdown
|
|
67
|
+
## Change: CHG-{{id}} — {{title}}
|
|
68
|
+
|
|
69
|
+
**Affects:** [{{components}}]
|
|
70
|
+
**Contracts touched:** {{list or "none"}}
|
|
71
|
+
|
|
72
|
+
## ADDED Requirements
|
|
73
|
+
|
|
74
|
+
### INT-FR-{{nnn}}: {{contract_title}}
|
|
75
|
+
(only if affects contracts or ≥2 components)
|
|
76
|
+
|
|
77
|
+
**Description (Event-Driven):**
|
|
78
|
+
When a {{event}}, the system SHALL {{behavior}} on the contract boundary.
|
|
79
|
+
|
|
80
|
+
### BE-FR-{{nnn}}: {{backend_title}}
|
|
81
|
+
**Description (Event-Driven):**
|
|
82
|
+
When {{event}}, the backend SHALL {{behavior}}.
|
|
83
|
+
|
|
84
|
+
### WEB-FR-{{nnn}}: {{web_title}}
|
|
85
|
+
**Description (Event-Driven):**
|
|
86
|
+
When {{event}}, the web client SHALL {{behavior}}.
|
|
87
|
+
|
|
88
|
+
### NATIVE-FR-{{nnn}}: {{native_title}}
|
|
89
|
+
**Description (Event-Driven):**
|
|
90
|
+
When {{event}}, the native client SHALL {{behavior}}.
|
|
91
|
+
|
|
92
|
+
### DESKTOP-FR-{{nnn}}: {{desktop_title}}
|
|
93
|
+
**Description (Event-Driven):**
|
|
94
|
+
When {{event}}, the desktop client SHALL {{behavior}}.
|
|
95
|
+
|
|
96
|
+
### WXA-FR-{{nnn}}: {{wxa_title}}
|
|
97
|
+
**Description (Event-Driven):**
|
|
98
|
+
When {{event}}, the WeChat Mini Program SHALL {{behavior}}.
|
|
99
|
+
|
|
100
|
+
### MYA-FR-{{nnn}}: {{mya_title}}
|
|
101
|
+
**Description (Event-Driven):**
|
|
102
|
+
When {{event}}, the Mini Program SHALL {{behavior}}.
|
|
103
|
+
|
|
104
|
+
### TTA-FR-{{nnn}}: {{tta_title}}
|
|
105
|
+
**Description (Event-Driven):**
|
|
106
|
+
When {{event}}, the TikTok Mini Program SHALL {{behavior}}.
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### EARS Patterns
|
|
110
|
+
|
|
111
|
+
| Pattern | Syntax | When to Use |
|
|
112
|
+
|---------|--------|-------------|
|
|
113
|
+
| Ubiquitous | `The system SHALL ...` | Always-active rules |
|
|
114
|
+
| Event-Driven | `When {event}, the system SHALL ...` | Trigger-based behavior |
|
|
115
|
+
| State-Driven | `While {state}, the system SHALL ...` | Active state conditions |
|
|
116
|
+
| Unwanted | `If {condition}, the system SHALL ...` | Error handling |
|
|
117
|
+
| Optional | `Where {feature} enabled, the system SHALL ...` | Feature flags |
|
|
118
|
+
|
|
119
|
+
## BDD — Behavior-Driven Development
|
|
120
|
+
|
|
121
|
+
### Per-Component Feature Files
|
|
122
|
+
|
|
123
|
+
```gherkin
|
|
124
|
+
@WEB-FR-001
|
|
125
|
+
Feature: Web Login UI
|
|
126
|
+
|
|
127
|
+
@WEB-FR-001 @positive
|
|
128
|
+
Scenario: User logs in successfully
|
|
129
|
+
Given the web app is on the login page
|
|
130
|
+
When the user submits valid credentials
|
|
131
|
+
Then the user is redirected to dashboard
|
|
132
|
+
And the user receives a JWT in storage
|
|
133
|
+
|
|
134
|
+
@WEB-FR-001 @negative
|
|
135
|
+
Scenario: Invalid credentials show error
|
|
136
|
+
...
|
|
137
|
+
|
|
138
|
+
@WEB-FR-001 @edge
|
|
139
|
+
Scenario: Empty fields show validation
|
|
140
|
+
...
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Cross-Stack Feature File (mandatory for `affects ≥ 2 components`)
|
|
144
|
+
|
|
145
|
+
```gherkin
|
|
146
|
+
@INT-FR-001
|
|
147
|
+
Feature: Cross-stack login flow
|
|
148
|
+
|
|
149
|
+
@INT-FR-001 @positive
|
|
150
|
+
Scenario: Web login reaches backend and stores token
|
|
151
|
+
Given the web app is on the login page
|
|
152
|
+
When the user submits valid credentials
|
|
153
|
+
Then the backend POST /auth/login returns 200 with JWT
|
|
154
|
+
And the web app stores the token
|
|
155
|
+
And the user is redirected to dashboard
|
|
156
|
+
|
|
157
|
+
@INT-FR-001 @negative
|
|
158
|
+
Scenario: Backend rejects invalid credentials with 401
|
|
159
|
+
...
|
|
160
|
+
|
|
161
|
+
@INT-FR-001 @edge
|
|
162
|
+
Scenario: Backend timeout surfaces a user-friendly error
|
|
163
|
+
...
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Artifacts
|
|
167
|
+
|
|
168
|
+
| Artifact | Location | Purpose |
|
|
169
|
+
|----------|----------|---------|
|
|
170
|
+
| Intent | `requirements.md` | Business need + `affects` |
|
|
171
|
+
| Spec delta | `openspec/changes/{id}/spec-delta.md` | EARS, FR namespaces, `affects` |
|
|
172
|
+
| Per-component BDD | `apps/{component}/features/{domain}/{feature}.feature` | Component behavior |
|
|
173
|
+
| Cross-stack BDD | `features/cross-stack/{domain}/{feature}.feature` | End-to-end flow |
|
|
174
|
+
| Contract spec | `contracts/{api,events}/{name}.{yaml,graphql}` | INT-FR-NNN source of truth |
|
|
175
|
+
|
|
176
|
+
## Gate
|
|
177
|
+
|
|
178
|
+
**Before advancing to Plan phase:**
|
|
179
|
+
- [ ] `affects: [...]` declared in spec-delta
|
|
180
|
+
- [ ] Spec delta uses EARS format
|
|
181
|
+
- [ ] Per-component FRs: each tagged `@FR-{PREFIX}-NNN` (e.g. `@NATIVE-`, `@DESKTOP-`, `@WEB-`, `@BE-`, `@WXA-`, `@MYA-`, `@TTA-`), ≥3 scenarios (positive/negative/edge)
|
|
182
|
+
- [ ] If `affects` includes ≥2 components: at least one `INT-FR-NNN` and a `features/cross-stack/*.feature` with ≥3 scenarios
|
|
183
|
+
- [ ] If `affects` includes contracts: contract file present in `contracts/`
|
|
184
|
+
- [ ] Human reviewed and approved
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Understand Phase Agent Prompt
|
|
2
|
+
|
|
3
|
+
你是一个 AI-DLC Understand Phase Agent。
|
|
4
|
+
由 Master Agent 委派处理需求分析。
|
|
5
|
+
|
|
6
|
+
## 输入
|
|
7
|
+
- Intent 描述(来自用户 / Master)
|
|
8
|
+
- `affects: [component list]` 声明
|
|
9
|
+
|
|
10
|
+
## 任务
|
|
11
|
+
|
|
12
|
+
1. **SDD: Intent Capture**
|
|
13
|
+
- 在 `requirements.md` 记录 Why / What / Success Criteria / Scope
|
|
14
|
+
- 声明 `affects: [native|desktop|web|backend|wxa|mya|tta|contracts]`
|
|
15
|
+
|
|
16
|
+
2. **SDD: Spec Delta (EARS)**
|
|
17
|
+
- 在 `openspec/changes/{id}/spec-delta.md` 输出
|
|
18
|
+
- 使用 EARS 格式:Ubiquitous / Event-Driven / State-Driven / Unwanted / Optional
|
|
19
|
+
- FR 必须使用命名空间前缀(BE-FR-001, WEB-FR-001 等)
|
|
20
|
+
|
|
21
|
+
3. **BDD: Feature Files**
|
|
22
|
+
- 每个 FR ≥3 个 scenario(positive / negative / edge)
|
|
23
|
+
- Per-component: `apps/{component}/features/{domain}/{feature}.feature`
|
|
24
|
+
- Cross-stack: `features/cross-stack/{domain}/{feature}.feature`
|
|
25
|
+
- Tag 使用 `@FR-PREFIX-NNN`
|
|
26
|
+
|
|
27
|
+
4. **Contract First**(跨组件时)
|
|
28
|
+
- 在 `contracts/{api,events}/` 创建合约文件
|
|
29
|
+
- 引用 INT-FR-NNN
|
|
30
|
+
|
|
31
|
+
## 输出产物
|
|
32
|
+
- `requirements.md`
|
|
33
|
+
- `openspec/changes/{id}/spec-delta.md`
|
|
34
|
+
- `apps/{component}/features/{domain}/{feature}.feature`
|
|
35
|
+
- `features/cross-stack/{domain}/{feature}.feature`(跨组件时)
|
|
36
|
+
- `contracts/{api,events}/{name}.yaml`(跨组件时)
|
|
37
|
+
|
|
38
|
+
## 约束
|
|
39
|
+
- 遵守 `rules.md` 中的 UND-001 到 UND-006
|
|
40
|
+
- 遵守 `core/security.md`
|
|
41
|
+
- 完成前必须通过 Human Gate 审查
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Understand Rules (UND-*)
|
|
2
|
+
|
|
3
|
+
## UND-001: Intent Documentation
|
|
4
|
+
**Severity:** MUST
|
|
5
|
+
**Description:** Before any specification or implementation, the business intent MUST be documented. Intent includes: what is being built, why, and how success is measured.
|
|
6
|
+
**Valid:** Intent captured in `requirements.md` with `affects: [...]` before spec delta.
|
|
7
|
+
**Invalid:** Starting spec delta or feature files without documented intent or without an `affects` declaration.
|
|
8
|
+
|
|
9
|
+
## UND-002: EARS Format
|
|
10
|
+
**Severity:** MUST
|
|
11
|
+
**Description:** All functional requirements MUST use EARS syntax (Ubiquitous, Event-Driven, State-Driven, Unwanted, or Optional).
|
|
12
|
+
**Valid:** `When a user submits valid credentials, the system SHALL return a JWT token.`
|
|
13
|
+
**Invalid:** `The login should work well and be fast.`
|
|
14
|
+
|
|
15
|
+
## UND-003: BDD Scenario Coverage
|
|
16
|
+
**Severity:** MUST
|
|
17
|
+
**Description:** Each functional requirement MUST have at least 3 BDD scenarios covering positive, negative, and edge cases. Scenarios MUST be tagged with the FR namespace prefix (`@NATIVE-`, `@DESKTOP-`, `@WEB-`, `@BE-`, `@WXA-`, `@MYA-`, `@TTA-`, or `@INT-`).
|
|
18
|
+
**Valid:** `@WEB-FR-001 @positive` with three scenarios per FR.
|
|
19
|
+
**Invalid:** One scenario per FR, or missing namespace prefix.
|
|
20
|
+
|
|
21
|
+
## UND-004: Affects Declaration
|
|
22
|
+
**Severity:** MUST
|
|
23
|
+
**Description:** Every spec delta MUST declare `affects: [native, desktop, web, backend, wxa, mya, tta, contracts]`.
|
|
24
|
+
**Valid:** `## Change: CHG-001 — User Login\nAffects: [web, backend, contracts]`
|
|
25
|
+
**Invalid:** Spec delta without an `affects` declaration.
|
|
26
|
+
|
|
27
|
+
## UND-005: Cross-Component Feature Decomposition
|
|
28
|
+
**Severity:** MUST
|
|
29
|
+
**Description:** A feature that affects ≥2 components MUST be split into: one FR per component, one or more `INT-*` FRs, and a `features/cross-stack/*.feature` file.
|
|
30
|
+
**Valid:** `affects: [web, backend]` → `WEB-FR-001`, `BE-FR-001`, `INT-FR-001`, plus cross-stack feature file.
|
|
31
|
+
**Invalid:** A single feature file claiming to test both web and backend behavior.
|
|
32
|
+
|
|
33
|
+
## UND-006: Contract-First for Cross-Component
|
|
34
|
+
**Severity:** MUST
|
|
35
|
+
**Description:** When a feature introduces or changes a public API or event consumed by another component, a contract file MUST be added or updated in `contracts/` before any per-component implementation.
|
|
36
|
+
**Valid:** `contracts/api/auth.yaml` defines `POST /auth/login` before any code.
|
|
37
|
+
**Invalid:** Per-component code that depends on a contract not in `contracts/`.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ai-dlc-verify
|
|
3
|
+
description: "Verify Phase: TDD Red-Green-Refactor → Contract Test → Quality Gates"
|
|
4
|
+
triggers:
|
|
5
|
+
- verify
|
|
6
|
+
- TDD
|
|
7
|
+
- test
|
|
8
|
+
- quality-gate
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Verify Phase (验证)
|
|
12
|
+
|
|
13
|
+
Execute TDD per BDD scenario, verify contracts, enforce quality gates.
|
|
14
|
+
|
|
15
|
+
## Entry
|
|
16
|
+
|
|
17
|
+
See `lifecycle.md` for the full phase flow.
|
|
18
|
+
See `rules.md` for enforceable rules (VRF-001 to VRF-006 + INT-001 to INT-006).
|
|
19
|
+
See `prompt.md` for the sub-agent delegation prompt template.
|
|
20
|
+
|
|
21
|
+
## 当被委派时
|
|
22
|
+
|
|
23
|
+
1. 按 DAG 顺序对每个 unit 执行 TDD Red→Green→Refactor
|
|
24
|
+
2. 运行合约测试 + 检查 backward-compat
|
|
25
|
+
3. 运行 cross-stack e2e
|
|
26
|
+
4. 执行质量门禁(cov≥80%, 0 vulns, no TODO)
|