@scemoon/cdh 1.0.4 → 1.0.6
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 +4 -2
- package/ai-dlc-skill/agents/master.md +6 -0
- package/ai-dlc-skill/agents/plan-agent.md +2 -2
- package/ai-dlc-skill/agents/understand-agent.md +4 -4
- package/ai-dlc-skill/agents/verify-agent.md +1 -1
- package/ai-dlc-skill/architecture/project-structure.md +10 -10
- package/ai-dlc-skill/brownfield/README.md +2 -2
- package/ai-dlc-skill/brownfield/generate-context.sh +3 -3
- package/ai-dlc-skill/brownfield/scripts/extract-api.sh +5 -5
- package/ai-dlc-skill/components/backend.md +1 -1
- package/ai-dlc-skill/components/web.md +2 -2
- package/ai-dlc-skill/contracts/README.md +3 -3
- package/ai-dlc-skill/cross-tool/cline/export.sh +1 -1
- package/ai-dlc-skill/cross-tool/copilot/export.sh +1 -1
- package/ai-dlc-skill/cross-tool/onecode/export-skills.sh +7 -3
- package/ai-dlc-skill/cross-tool/onecode/export.sh +14 -8
- package/ai-dlc-skill/phases/deliver/lifecycle.md +6 -6
- package/ai-dlc-skill/phases/deliver/prompt.md +2 -2
- package/ai-dlc-skill/phases/deliver/rules.md +1 -1
- package/ai-dlc-skill/phases/plan/lifecycle.md +11 -11
- package/ai-dlc-skill/phases/plan/prompt.md +6 -6
- package/ai-dlc-skill/phases/plan/rules.md +1 -1
- package/ai-dlc-skill/phases/understand/entry.md +1 -1
- package/ai-dlc-skill/phases/understand/lifecycle.md +7 -7
- package/ai-dlc-skill/phases/understand/prompt.md +8 -8
- package/ai-dlc-skill/phases/understand/rules.md +5 -5
- package/ai-dlc-skill/phases/verify/lifecycle.md +24 -24
- package/ai-dlc-skill/phases/verify/prompt.md +8 -8
- package/ai-dlc-skill/phases/verify/rules.md +9 -9
- package/ai-dlc-skill/providers/README.md +2 -2
- package/ai-dlc-skill/providers/aliyun/preview.yaml +2 -2
- package/ai-dlc-skill/providers/tcb/preview.yaml +2 -2
- package/ai-dlc-skill/requirements.md +7 -7
- package/ai-dlc-skill/skill.yaml +4 -4
- package/ai-dlc-skill/templates/integration/CHANGELOG.md +2 -2
- package/ai-dlc-skill/templates/integration/contract-diff.md +7 -7
- package/ai-dlc-skill/templates/integration/contract-spec.md +7 -7
- package/ai-dlc-skill/templates/integration/runtime-contract.yaml +1 -1
- package/ai-dlc-skill/templates/project/README.md +18 -19
- package/ai-dlc-skill/templates/project/template.md +21 -21
- package/ai-dlc-skill/walkthrough/collect.sh +1 -1
- package/ai-dlc-skill/walkthrough/template.md +2 -2
- package/ai-dlc-skill/workflows/ai-dlc.yaml +12 -12
- package/ai-dlc-skill/workflows/deployment.yaml +4 -4
- package/cdh/__pycache__/cdh_mcp_injector.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cdh_mcp_loader.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cdh_mcp_manager.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cdh_session_aggregator.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cdh_skill_loader.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cdh_skill_manager.cpython-314.pyc +0 -0
- package/cdh/__pycache__/cli.cpython-313.pyc +0 -0
- package/cdh/__pycache__/cli.cpython-314.pyc +0 -0
- package/cdh/__pycache__/scaffold.cpython-314.pyc +0 -0
- package/cdh/cdh_mcp_injector.py +115 -0
- package/cdh/cdh_mcp_loader.py +67 -0
- package/cdh/cdh_mcp_manager.py +73 -0
- package/cdh/cdh_session_aggregator.py +258 -0
- package/cdh/cdh_skill_manager.py +105 -0
- package/cdh/cli.py +64 -4
- package/cdh/scaffold.py +192 -41
- package/onecode/__init__.py +1 -1
- 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__/migrate.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__/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__/project_doc.cpython-314.pyc +0 -0
- package/onecode/agent/__pycache__/session.cpython-314.pyc +0 -0
- package/onecode/agent/agents/__pycache__/types.cpython-314.pyc +0 -0
- package/onecode/agent/agents/types.py +47 -164
- package/onecode/agent/attachments.py +0 -1
- package/onecode/agent/cdh_loader.py +17 -25
- package/onecode/agent/context.py +8 -3
- package/onecode/agent/engine.py +835 -220
- package/onecode/agent/hooks.py +1 -1
- package/onecode/agent/onecode_agent_acp.py +460 -47
- package/onecode/agent/onecode_agent_acp.py.bak +2447 -0
- package/onecode/agent/permissions.py +0 -1
- package/onecode/agent/project_doc.py +19 -0
- package/onecode/agent/session.py +17 -3
- package/onecode/agent/snapshot.py +3 -4
- 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__/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__/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__/skill_tools.cpython-314.pyc +0 -0
- package/onecode/agent/tools/__pycache__/todo_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 +4 -6
- package/onecode/agent/tools/apply_patch_tool.py +2 -8
- package/onecode/agent/tools/bash_tool.py +32 -12
- package/onecode/agent/tools/communication_tools.py +4 -5
- package/onecode/agent/tools/config_tool.py +3 -3
- package/onecode/agent/tools/cron_tools.py +4 -5
- package/onecode/agent/tools/file_ops.py +37 -3
- package/onecode/agent/tools/file_tools.py +10 -11
- package/onecode/agent/tools/git_tools.py +2 -2
- package/onecode/agent/tools/lsp_tools.py +2 -2
- package/onecode/agent/tools/mcp_tools.py +3 -5
- package/onecode/agent/tools/permission_handler.py +1 -1
- package/onecode/agent/tools/protocol.py +1 -1
- package/onecode/agent/tools/registry.py +69 -2
- package/onecode/agent/tools/sandbox.py +110 -16
- package/onecode/agent/tools/skill_tools.py +2 -2
- package/onecode/agent/tools/todo_tools.py +38 -19
- package/onecode/agent/tools/web_tools.py +6 -7
- package/onecode/builtin_skills/agent-browser/SKILL.md +212 -0
- package/onecode/builtin_skills/agent-browser/skill.yaml +8 -0
- package/onecode/builtin_skills/skill-creator/SKILL.md +106 -0
- package/onecode/builtin_skills/skill-creator/skill.yaml +8 -0
- package/onecode/cli.py +186 -6
- package/onecode/codebase/__pycache__/chunker.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/chunker.py +0 -5
- package/onecode/codebase/indexer.py +14 -1
- package/onecode/codebase/retriever.py +13 -2
- package/onecode/codebase/storage.py +5 -4
- package/onecode/commands.py +81 -6
- package/onecode/config.py +41 -12
- package/onecode/config_screen.py +7 -3
- package/onecode/mcp/__pycache__/manager.cpython-314.pyc +0 -0
- package/onecode/mcp/manager.py +2 -3
- package/onecode/memory/__init__.py +7 -53
- 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/backend.py +13 -39
- package/onecode/memory/pyramid.py +2 -71
- package/onecode/memory/recall.py +38 -3
- package/onecode/migrate.py +122 -0
- package/onecode/models/__pycache__/messages.cpython-314.pyc +0 -0
- package/onecode/models/__pycache__/provider.cpython-314.pyc +0 -0
- package/onecode/models/messages.py +58 -0
- package/onecode/models/provider.py +20 -2
- package/onecode/models/providers/__pycache__/anthropic_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__/ollama_provider.cpython-314.pyc +0 -0
- package/onecode/models/providers/anthropic_provider.py +59 -12
- package/onecode/models/providers/glm_provider.py +40 -0
- package/onecode/models/providers/minimax_provider.py +3 -0
- package/onecode/models/providers/minimaxi_provider.py +3 -0
- package/onecode/models/providers/ollama_provider.py +3 -0
- package/onecode/server/app.py +1 -1
- package/onecode/skills/__pycache__/argument_substitution.cpython-314.pyc +0 -0
- package/onecode/skills/__pycache__/bootstrap.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/argument_substitution.py +0 -1
- package/onecode/skills/bootstrap.py +124 -0
- package/onecode/skills/loader.py +35 -53
- package/onecode/skills/manager.py +2 -2
- package/onecode/storage/activity.py +3 -4
- package/onecode/storage/session.py +3 -4
- package/onecode/tasks/manager.py +23 -10
- package/onecode/trace/tracer.py +2 -3
- package/package.json +1 -1
- package/pyproject.toml +5 -1
- package/run.js +68 -14
- package/tui/__pycache__/about.cpython-314.pyc +0 -0
- package/tui/__pycache__/app.cpython-313.pyc +0 -0
- package/tui/__pycache__/app.cpython-314.pyc +0 -0
- package/tui/__pycache__/danger.cpython-314.pyc +0 -0
- package/tui/__pycache__/directory_suggester.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__/paths.cpython-314.pyc +0 -0
- package/tui/__pycache__/session_tracker.cpython-314.pyc +0 -0
- package/tui/__pycache__/settings_schema.cpython-314.pyc +0 -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__/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 +125 -58
- package/tui/acp/api.py +12 -0
- package/tui/acp/messages.py +3 -1
- package/tui/acp/prompt.py +0 -57
- package/tui/acp/protocol.py +6 -0
- package/tui/app.py +11 -33
- package/tui/messages.py +2 -0
- package/tui/path_complete.py +1 -1
- package/tui/paths.py +16 -0
- package/tui/screens/__pycache__/agent_modal.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/component_picker.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/diff_screen.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/log.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/main.cpython-313.pyc +0 -0
- package/tui/screens/__pycache__/main.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/permissions.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/projects_app.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__/store.cpython-314.pyc +0 -0
- package/tui/screens/__pycache__/tool_content_screen.cpython-314.pyc +0 -0
- package/tui/screens/component_picker.py +35 -15
- package/tui/screens/diff_screen.py +84 -0
- package/tui/screens/log.py +25 -25
- package/tui/screens/main.py +48 -26
- package/tui/screens/projects.tcss +5 -1
- package/tui/screens/projects_app.py +6 -6
- package/tui/screens/projects_screen.py +19 -39
- package/tui/screens/sessions.py +3 -5
- package/tui/session_tracker.py +3 -0
- package/tui/settings_schema.py +1 -1
- package/tui/visuals/__pycache__/columns.cpython-314.pyc +0 -0
- package/tui/visuals/columns.py +1 -2
- 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__/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__/future_text.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/grid_select.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/load_more.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__/modified_files.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/plan.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__/session_grid_select.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/session_summary.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/shell_result.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/side_bar.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/subagent.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/subagent_screen.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/terminal.cpython-314.pyc +0 -0
- package/tui/widgets/__pycache__/tool_call.cpython-314.pyc +0 -0
- package/tui/widgets/agent_response.py +0 -1
- package/tui/widgets/agent_thought.py +0 -1
- package/tui/widgets/conversation.py +157 -14
- package/tui/widgets/diff_view.py +10 -0
- package/tui/widgets/load_more.py +24 -0
- package/tui/widgets/modified_files.py +86 -12
- package/tui/widgets/plan.py +1 -1
- package/tui/widgets/project_grid_select.py +9 -2
- package/tui/widgets/session_grid_select.py +6 -0
- package/tui/widgets/side_bar.py +10 -0
- package/tui/widgets/subagent.py +92 -58
- package/tui/widgets/subagent_screen.py +638 -115
- package/tui/widgets/terminal.py +1 -2
- package/tui/widgets/terminal_tool.py +11 -2
- package/tui/widgets/tool_call.py +35 -2
- package/onecode/memory/offload.py +0 -114
- package/onecode/memory/symbolic.py +0 -164
|
@@ -24,13 +24,13 @@ For each unit in DAG order (within each affected component):
|
|
|
24
24
|
│
|
|
25
25
|
▼
|
|
26
26
|
After per-component units: regenerate shared types + contract tests
|
|
27
|
-
tools/generate_shared.py
|
|
28
|
-
pytest tests/contract/
|
|
29
|
-
tools/contract_diff.py
|
|
27
|
+
aidlc/tools/generate_shared.py
|
|
28
|
+
pytest aidlc/tests/contract/
|
|
29
|
+
aidlc/tools/contract_diff.py
|
|
30
30
|
│
|
|
31
31
|
▼
|
|
32
32
|
After contracts: cross-stack e2e against unified preview
|
|
33
|
-
pytest tests/cross-stack/
|
|
33
|
+
pytest aidlc/tests/cross-stack/
|
|
34
34
|
│
|
|
35
35
|
▼
|
|
36
36
|
Gate: All layers green + contracts compatible + cross-stack pass
|
|
@@ -43,8 +43,8 @@ Gate: All layers green + contracts compatible + cross-stack pass
|
|
|
43
43
|
| `unit` | Per function / module | `apps/{comp}/tests/unit/` | Local |
|
|
44
44
|
| `integration` | Component + its DB / internal API | `apps/{comp}/tests/integration/` | Local container |
|
|
45
45
|
| `e2e` | Whole component against preview | `apps/{comp}/tests/e2e/` | Component preview URL |
|
|
46
|
-
| `cross-stack` | Full multi-client ↔ backend flow | `tests/cross-stack/` | Unified stack preview URL |
|
|
47
|
-
| `contract` | Contract shape + backward compat | `tests/contract/` | Generated `packages/shared/` |
|
|
46
|
+
| `cross-stack` | Full multi-client ↔ backend flow | `aidlc/tests/cross-stack/` | Unified stack preview URL |
|
|
47
|
+
| `contract` | Contract shape + backward compat | `aidlc/tests/contract/` | Generated `aidlc/packages/shared/` |
|
|
48
48
|
|
|
49
49
|
## TDD — Red
|
|
50
50
|
|
|
@@ -94,30 +94,30 @@ After per-component units pass and before cross-stack e2e:
|
|
|
94
94
|
|
|
95
95
|
```bash
|
|
96
96
|
# 1. Regenerate shared types from contracts
|
|
97
|
-
tools/generate_shared.py
|
|
98
|
-
# → packages/shared/{api,events} updated
|
|
97
|
+
aidlc/tools/generate_shared.py
|
|
98
|
+
# → aidlc/packages/shared/{api,events} updated
|
|
99
99
|
|
|
100
100
|
# 2. Run contract tests
|
|
101
|
-
pytest tests/contract/ --verbose
|
|
101
|
+
pytest aidlc/tests/contract/ --verbose
|
|
102
102
|
# → All contract scenarios pass (uses packages/shared)
|
|
103
103
|
|
|
104
104
|
# 3. Run contract compat check
|
|
105
|
-
tools/contract_diff.py --base main --head HEAD
|
|
105
|
+
aidlc/tools/contract_diff.py --base main --head HEAD
|
|
106
106
|
# → exit 0 = backward-compatible
|
|
107
107
|
# → exit 1 = breaking change detected, BLOCKED unless human-approved
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
**Rule INT-001:** Contract tests must be 100% pass.
|
|
111
111
|
|
|
112
|
-
**Rule INT-002:** Any breaking contract change (field removed, type changed, status code changed, required field added) is BLOCKED until a human approves the major version bump and a migration note is added to `contracts/CHANGELOG.md`.
|
|
112
|
+
**Rule INT-002:** Any breaking contract change (field removed, type changed, status code changed, required field added) is BLOCKED until a human approves the major version bump and a migration note is added to `aidlc/contracts/CHANGELOG.md`.
|
|
113
113
|
|
|
114
|
-
**Rule INT-003:** Shared types must be generated, not hand-written. CI runs `generate_shared` and fails the build if `packages/shared/` is out of date.
|
|
114
|
+
**Rule INT-003:** Shared types must be generated, not hand-written. CI runs `generate_shared` and fails the build if `aidlc/packages/shared/` is out of date.
|
|
115
115
|
|
|
116
116
|
## Cross-Stack E2E (STK-001)
|
|
117
117
|
|
|
118
118
|
```bash
|
|
119
119
|
export STACK_URL=$(deploy_stack --preview --output url)
|
|
120
|
-
pytest tests/cross-stack/ --stack-url $STACK_URL --verbose
|
|
120
|
+
pytest aidlc/tests/cross-stack/ --stack-url $STACK_URL --verbose
|
|
121
121
|
# All cross-stack scenarios pass
|
|
122
122
|
```
|
|
123
123
|
|
|
@@ -136,7 +136,7 @@ pytest-bdd apps/mya/features/ --verbose
|
|
|
136
136
|
pytest-bdd apps/tta/features/ --verbose
|
|
137
137
|
|
|
138
138
|
# Cross-stack
|
|
139
|
-
pytest-bdd features/cross-stack/ --verbose
|
|
139
|
+
pytest-bdd aidlc/features/cross-stack/ --verbose
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
## Quality Gates (Backpressure)
|
|
@@ -151,11 +151,11 @@ pytest apps/{component}/ --cov --cov-fail-under=80 && \
|
|
|
151
151
|
! grep -rn "TODO\|FIXME\|HACK\|XXX" apps/{component}/src/
|
|
152
152
|
|
|
153
153
|
# Cross-component
|
|
154
|
-
pytest tests/contract/ && \
|
|
155
|
-
tools/contract_diff.py --base main --head HEAD
|
|
154
|
+
pytest aidlc/tests/contract/ && \
|
|
155
|
+
aidlc/tools/contract_diff.py --base main --head HEAD
|
|
156
156
|
|
|
157
157
|
# Stack
|
|
158
|
-
pytest tests/cross-stack/ --stack-url $STACK_URL
|
|
158
|
+
pytest aidlc/tests/cross-stack/ --stack-url $STACK_URL
|
|
159
159
|
```
|
|
160
160
|
|
|
161
161
|
| Gate | Threshold | Rule | Scope |
|
|
@@ -176,17 +176,17 @@ pytest tests/cross-stack/ --stack-url $STACK_URL
|
|
|
176
176
|
| TDD tests (unit/integration) | `apps/{comp}/tests/{unit,integration}/test_{feature}.py` |
|
|
177
177
|
| TDD tests (e2e) | `apps/{comp}/tests/e2e/test_{feature}.py` |
|
|
178
178
|
| BDD step defs (component) | `apps/{comp}/features/steps/test_{feature}_steps.py` |
|
|
179
|
-
| BDD step defs (cross-stack) | `features/cross-stack/steps/test_{feature}_steps.py` |
|
|
179
|
+
| BDD step defs (cross-stack) | `aidlc/features/cross-stack/steps/test_{feature}_steps.py` |
|
|
180
180
|
| Implementation | `apps/{comp}/src/{module}/{feature}.py` |
|
|
181
|
-
| Contract tests | `tests/contract/test_{contract}.py` |
|
|
182
|
-
| Cross-stack e2e | `tests/cross-stack/test_{flow}.py` |
|
|
183
|
-
| Contract diff | `openspec/changes/{id}/contract-diff.md` (filled) |
|
|
181
|
+
| Contract tests | `aidlc/tests/contract/test_{contract}.py` |
|
|
182
|
+
| Cross-stack e2e | `aidlc/tests/cross-stack/test_{flow}.py` |
|
|
183
|
+
| Contract diff | `aidlc/openspec/changes/{id}/contract-diff.md` (filled) |
|
|
184
184
|
|
|
185
185
|
## Gate
|
|
186
186
|
|
|
187
187
|
**Before advancing to Deliver phase:**
|
|
188
188
|
- [ ] Per-component: All BDD scenarios pass (100%), coverage ≥80%, 0 vulns, no TODO
|
|
189
|
-
- [ ] Contracts: `tools/contract_diff.py` exits 0; `tests/contract/` 100% pass; `packages/shared/` regenerated and in sync
|
|
190
|
-
- [ ] Cross-stack: `tests/cross-stack/` 100% pass against stack preview
|
|
191
|
-
- [ ] `openspec/changes/{id}/contract-diff.md` is filled and reviewed
|
|
189
|
+
- [ ] Contracts: `aidlc/tools/contract_diff.py` exits 0; `aidlc/tests/contract/` 100% pass; `aidlc/packages/shared/` regenerated and in sync
|
|
190
|
+
- [ ] Cross-stack: `aidlc/tests/cross-stack/` 100% pass against stack preview
|
|
191
|
+
- [ ] `aidlc/openspec/changes/{id}/contract-diff.md` is filled and reviewed
|
|
192
192
|
- [ ] All existing tests still pass
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
由 Master Agent 委派处理测试验证。
|
|
5
5
|
|
|
6
6
|
## 输入
|
|
7
|
-
- `openspec/changes/{id}/design.md` 和 `task-list.md`
|
|
7
|
+
- `aidlc/openspec/changes/{id}/design.md` 和 `task-list.md`
|
|
8
8
|
- BDD feature 文件
|
|
9
9
|
|
|
10
10
|
## 任务
|
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
- 测试按 layer 分类:unit / integration / e2e
|
|
18
18
|
|
|
19
19
|
2. **Contract Verification**
|
|
20
|
-
- 重新生成 `packages/shared/` 类型
|
|
21
|
-
- 运行 `pytest tests/contract/`
|
|
22
|
-
- 运行 `tools/contract_diff.py`
|
|
20
|
+
- 重新生成 `aidlc/packages/shared/` 类型
|
|
21
|
+
- 运行 `pytest aidlc/tests/contract/`
|
|
22
|
+
- 运行 `aidlc/tools/contract_diff.py`
|
|
23
23
|
|
|
24
24
|
3. **Cross-Stack e2e**
|
|
25
|
-
- 对 unified preview 运行 `tests/cross-stack/`
|
|
25
|
+
- 对 unified preview 运行 `aidlc/tests/cross-stack/`
|
|
26
26
|
|
|
27
27
|
4. **Quality Gates**
|
|
28
28
|
- coverage ≥ 80%
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
- `apps/{component}/tests/{unit,integration,e2e}/test_{feature}.py`
|
|
34
34
|
- `apps/{component}/features/steps/test_{feature}_steps.py`
|
|
35
35
|
- `apps/{component}/src/{module}/{feature}.py`
|
|
36
|
-
- `tests/contract/test_{contract}.py`
|
|
37
|
-
- `tests/cross-stack/test_{flow}.py`
|
|
38
|
-
- `openspec/changes/{id}/contract-diff.md`(填充)
|
|
36
|
+
- `aidlc/tests/contract/test_{contract}.py`
|
|
37
|
+
- `aidlc/tests/cross-stack/test_{flow}.py`
|
|
38
|
+
- `aidlc/openspec/changes/{id}/contract-diff.md`(填充)
|
|
39
39
|
|
|
40
40
|
## 约束
|
|
41
41
|
- 遵守 `rules.md` 中的 VRF-001 到 VRF-006
|
|
@@ -33,13 +33,13 @@
|
|
|
33
33
|
## VRF-006: Test Layer Correctness
|
|
34
34
|
**Severity:** MUST
|
|
35
35
|
**Description:** Each BDD scenario MUST be tested at the layer the plan specified. Cross-stack ≠ unit.
|
|
36
|
-
**Valid:** Cross-stack scenarios in `tests/cross-stack/` against STACK_URL.
|
|
36
|
+
**Valid:** Cross-stack scenarios in `aidlc/tests/cross-stack/` against STACK_URL.
|
|
37
37
|
**Invalid:** Cross-stack scenario implemented as mocked unit test.
|
|
38
38
|
|
|
39
39
|
## INT-001: Contract as Source of Truth
|
|
40
40
|
**Severity:** MUST
|
|
41
41
|
**Description:** All cross-component APIs and events MUST be defined in `contracts/` (OpenAPI/AsyncAPI/GraphQL) and tagged with `INT-FR-*`.
|
|
42
|
-
**Valid:** `contracts/api/auth.yaml` defines POST /auth/login; components use generated types.
|
|
42
|
+
**Valid:** `aidlc/contracts/api/auth.yaml` defines POST /auth/login; components use generated types.
|
|
43
43
|
**Invalid:** Duplicate hand-written types across components with no contract file.
|
|
44
44
|
|
|
45
45
|
## INT-002: Backward-Compatibility by Default
|
|
@@ -50,24 +50,24 @@
|
|
|
50
50
|
|
|
51
51
|
## INT-003: Generated Shared Types
|
|
52
52
|
**Severity:** MUST
|
|
53
|
-
**Description:** `packages/shared/` generated from `contracts/`. Component code MUST import from shared.
|
|
54
|
-
**Valid:** `git diff --exit-code packages/shared/` → clean after generation.
|
|
55
|
-
**Invalid:** Hand-edited files under `packages/shared/`.
|
|
53
|
+
**Description:** `aidlc/packages/shared/` generated from `aidlc/contracts/`. Component code MUST import from shared.
|
|
54
|
+
**Valid:** `git diff --exit-code aidlc/packages/shared/` → clean after generation.
|
|
55
|
+
**Invalid:** Hand-edited files under `aidlc/packages/shared/`.
|
|
56
56
|
|
|
57
57
|
## INT-004: Contract Tests at INT FR Level
|
|
58
58
|
**Severity:** MUST
|
|
59
|
-
**Description:** Every `INT-FR-*` MUST have contract tests in `tests/contract/` verifying schema.
|
|
59
|
+
**Description:** Every `INT-FR-*` MUST have contract tests in `aidlc/tests/contract/` verifying schema.
|
|
60
60
|
**Valid:** Provider-agnostic contract tests using generated shared types.
|
|
61
61
|
**Invalid:** Contract tests calling real production backend.
|
|
62
62
|
|
|
63
63
|
## INT-005: Cross-Stack Feature Coverage
|
|
64
64
|
**Severity:** MUST
|
|
65
|
-
**Description:** Every `INT-FR-*` MUST have ≥3 scenarios in `features/cross-stack/` implemented in `tests/cross-stack/`.
|
|
65
|
+
**Description:** Every `INT-FR-*` MUST have ≥3 scenarios in `aidlc/features/cross-stack/` implemented in `aidlc/tests/cross-stack/`.
|
|
66
66
|
**Valid:** Cross-stack scenarios running against unified STACK_URL.
|
|
67
67
|
**Invalid:** INT-FR without cross-stack feature file.
|
|
68
68
|
|
|
69
69
|
## INT-006: Contract Diff Artifact
|
|
70
70
|
**Severity:** MUST
|
|
71
|
-
**Description:** Every contract change MUST produce `openspec/changes/{id}/contract-diff.md`.
|
|
72
|
-
**Valid:** Generated by `tools/contract_diff.py` with added/removed/changed fields.
|
|
71
|
+
**Description:** Every contract change MUST produce `aidlc/openspec/changes/{id}/contract-diff.md`.
|
|
72
|
+
**Valid:** Generated by `aidlc/tools/contract_diff.py` with added/removed/changed fields.
|
|
73
73
|
**Invalid:** Contract change merged without contract-diff.md.
|
|
@@ -82,7 +82,7 @@ cd apps/tta && BACKEND_URL=$BACKEND_URL pnpm build
|
|
|
82
82
|
| `apps/wxa/tests/e2e/` | `BACKEND_URL` (built into app) |
|
|
83
83
|
| `apps/mya/tests/e2e/` | `BACKEND_URL` (built into app) |
|
|
84
84
|
| `apps/tta/tests/e2e/` | `BACKEND_URL` (built into app) |
|
|
85
|
-
| `tests/cross-stack/` | `STACK_URL` (full flow) |
|
|
85
|
+
| `aidlc/tests/cross-stack/` | `STACK_URL` (full flow) |
|
|
86
86
|
|
|
87
87
|
## Dynamic Preview URL
|
|
88
88
|
|
|
@@ -102,7 +102,7 @@ export DESKTOP_URL=$(deploy_stack --preview --output desktop_url)
|
|
|
102
102
|
pytest apps/web/tests/e2e/ --base-url $WEB_URL --api-url $BACKEND_URL
|
|
103
103
|
pytest apps/native/tests/e2e/ --backend-url $BACKEND_URL
|
|
104
104
|
pytest apps/desktop/tests/e2e/ --backend-url $BACKEND_URL
|
|
105
|
-
pytest tests/cross-stack/ --stack-url $STACK_URL
|
|
105
|
+
pytest aidlc/tests/cross-stack/ --stack-url $STACK_URL
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
## Stack Rollback
|
|
@@ -17,7 +17,7 @@ git push feature branch
|
|
|
17
17
|
→ DESKTOP_DIST_URL = internal distribution URL
|
|
18
18
|
→ WXA_URL / MYA_URL / TTA_URL = mini-program preview QR
|
|
19
19
|
→ Per-component e2e: pytest apps/{comp}/tests/e2e/ --base-url $URL
|
|
20
|
-
→ Cross-stack e2e: pytest tests/cross-stack/ --stack-url $STACK_URL
|
|
20
|
+
→ Cross-stack e2e: pytest aidlc/tests/cross-stack/ --stack-url $STACK_URL
|
|
21
21
|
→ TTL: 24h → auto cleanup
|
|
22
22
|
```
|
|
23
23
|
|
|
@@ -78,7 +78,7 @@ pytest apps/mya/tests/e2e/ --backend-url $BACKEND_URL
|
|
|
78
78
|
pytest apps/tta/tests/e2e/ --backend-url $BACKEND_URL
|
|
79
79
|
|
|
80
80
|
# Cross-stack e2e
|
|
81
|
-
pytest tests/cross-stack/ --stack-url $STACK_URL
|
|
81
|
+
pytest aidlc/tests/cross-stack/ --stack-url $STACK_URL
|
|
82
82
|
|
|
83
83
|
# Cleanup (automatic after TTL)
|
|
84
84
|
```
|
|
@@ -17,7 +17,7 @@ git push feature branch
|
|
|
17
17
|
→ DESKTOP_DIST_URL = internal distribution URL
|
|
18
18
|
→ WXA_URL / MYA_URL / TTA_URL = mini-program preview QR
|
|
19
19
|
→ Per-component e2e: pytest apps/{comp}/tests/e2e/ --base-url $URL
|
|
20
|
-
→ Cross-stack e2e: pytest tests/cross-stack/ --stack-url $STACK_URL
|
|
20
|
+
→ Cross-stack e2e: pytest aidlc/tests/cross-stack/ --stack-url $STACK_URL
|
|
21
21
|
→ TTL: 24h → auto cleanup
|
|
22
22
|
```
|
|
23
23
|
|
|
@@ -77,7 +77,7 @@ pytest apps/mya/tests/e2e/ --backend-url $BACKEND_URL
|
|
|
77
77
|
pytest apps/tta/tests/e2e/ --backend-url $BACKEND_URL
|
|
78
78
|
|
|
79
79
|
# Cross-stack e2e
|
|
80
|
-
pytest tests/cross-stack/ --stack-url $STACK_URL
|
|
80
|
+
pytest aidlc/tests/cross-stack/ --stack-url $STACK_URL
|
|
81
81
|
|
|
82
82
|
# Cleanup (automatic after TTL)
|
|
83
83
|
```
|
|
@@ -16,10 +16,10 @@ This skill implements the AI-Driven Development Lifecycle for **monorepo multi-c
|
|
|
16
16
|
│ │ │ │ │
|
|
17
17
|
│ └──────┬───────┴─────┬─────┘ │
|
|
18
18
|
│ │ │ │
|
|
19
|
-
│ contracts/ packages/shared/ │
|
|
20
|
-
│ (INT-FR-*) (generated types)
|
|
19
|
+
│ aidlc/contracts/ aidlc/packages/shared/ │
|
|
20
|
+
│ (INT-FR-*) (generated types) │
|
|
21
21
|
│ │
|
|
22
|
-
│ features/ tests/ openspec/ providers/ │
|
|
22
|
+
│ aidlc/features/ tests/ aidlc/openspec/ aidlc/providers/ │
|
|
23
23
|
└────────────────────────────────────────────────────────┘
|
|
24
24
|
```
|
|
25
25
|
|
|
@@ -34,7 +34,7 @@ FR namespaces:
|
|
|
34
34
|
| `WXA-*` | `apps/wxa` | WeChat Mini Program behavior |
|
|
35
35
|
| `MYA-*` | `apps/mya` | Mini Program (e.g. Alipay) behavior |
|
|
36
36
|
| `TTA-*` | `apps/tta` | TikTok Mini Program behavior |
|
|
37
|
-
| `INT-*` | `contracts/`, `packages/shared/` | Cross-component contract & integration |
|
|
37
|
+
| `INT-*` | `aidlc/contracts/`, `aidlc/packages/shared/` | Cross-component contract & integration |
|
|
38
38
|
|
|
39
39
|
## Functional Requirements
|
|
40
40
|
|
|
@@ -106,10 +106,10 @@ FR namespaces:
|
|
|
106
106
|
**the system SHALL** define and verify the contract between components before integration.
|
|
107
107
|
|
|
108
108
|
**Acceptance Criteria:**
|
|
109
|
-
- All public APIs and async events are described in `contracts/` (OpenAPI/AsyncAPI) and tagged with `INT-FR-NNN`
|
|
109
|
+
- All public APIs and async events are described in `aidlc/contracts/` (OpenAPI/AsyncAPI) and tagged with `INT-FR-NNN`
|
|
110
110
|
- Contract changes require a contract-diff review (backward-compat by default)
|
|
111
|
-
- Shared types are generated from contracts, not hand-written, in `packages/shared/`
|
|
112
|
-
- Contract tests run on every PR that touches `contracts/` or any consumer
|
|
111
|
+
- Shared types are generated from contracts, not hand-written, in `aidlc/packages/shared/`
|
|
112
|
+
- Contract tests run on every PR that touches `aidlc/contracts/` or any consumer
|
|
113
113
|
- A breaking contract change requires a major version bump and human approval
|
|
114
114
|
|
|
115
115
|
### FR-006: Monorepo Stack Awareness
|
package/ai-dlc-skill/skill.yaml
CHANGED
|
@@ -73,8 +73,8 @@ stack:
|
|
|
73
73
|
cross_cutting:
|
|
74
74
|
fr_prefix: INT
|
|
75
75
|
owns:
|
|
76
|
-
- contracts/
|
|
77
|
-
- packages/shared/
|
|
76
|
+
- aidlc/contracts/
|
|
77
|
+
- aidlc/packages/shared/
|
|
78
78
|
e2e_layers:
|
|
79
79
|
- unit
|
|
80
80
|
- integration
|
|
@@ -101,11 +101,11 @@ integration:
|
|
|
101
101
|
breaking_change_gate: human-approval
|
|
102
102
|
shared_types:
|
|
103
103
|
generator: openapi-typescript | openapi-python
|
|
104
|
-
output: packages/shared/
|
|
104
|
+
output: aidlc/packages/shared/
|
|
105
105
|
publish: workspace-package
|
|
106
106
|
event_contract:
|
|
107
107
|
format: asyncapi | cloudevent
|
|
108
|
-
registry: contracts/events/
|
|
108
|
+
registry: aidlc/contracts/events/
|
|
109
109
|
version_strategy: semver-major-for-breaking
|
|
110
110
|
|
|
111
111
|
deploy:
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Contracts Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to any contract in `contracts/` are recorded here. Format follows
|
|
3
|
+
All notable changes to any contract in `aidlc/contracts/` are recorded here. Format follows
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/) and the project uses [SemVer](https://semver.org/).
|
|
5
5
|
|
|
6
6
|
> **Breaking change rule (INT-002):** any MAJOR bump requires human approval and a
|
|
7
|
-
> Migration section. `tools/contract_diff.py` flags breaking changes automatically.
|
|
7
|
+
> Migration section. `aidlc/tools/contract_diff.py` flags breaking changes automatically.
|
|
8
8
|
|
|
9
9
|
## [Unreleased]
|
|
10
10
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Contract Diff — {{change_id}}
|
|
2
2
|
|
|
3
|
-
> Auto-generated by `tools/contract_diff.py`. Reviewed during Verify and Deliver.
|
|
3
|
+
> Auto-generated by `aidlc/tools/contract_diff.py`. Reviewed during Verify and Deliver.
|
|
4
4
|
|
|
5
5
|
## Summary
|
|
6
6
|
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
## OpenAPI Diff
|
|
22
22
|
|
|
23
23
|
```diff
|
|
24
|
-
--- a/contracts/api/{{file}}.yaml
|
|
25
|
-
+++ b/contracts/api/{{file}}.yaml
|
|
24
|
+
--- a/aidlc/contracts/api/{{file}}.yaml
|
|
25
|
+
+++ b/aidlc/contracts/api/{{file}}.yaml
|
|
26
26
|
@@
|
|
27
27
|
- removed: {{field}}
|
|
28
28
|
+ added: {{field}}
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
## AsyncAPI Diff
|
|
33
33
|
|
|
34
34
|
```diff
|
|
35
|
-
--- a/contracts/events/{{file}}.yaml
|
|
36
|
-
+++ b/contracts/events/{{file}}.yaml
|
|
35
|
+
--- a/aidlc/contracts/events/{{file}}.yaml
|
|
36
|
+
+++ b/aidlc/contracts/events/{{file}}.yaml
|
|
37
37
|
@@
|
|
38
38
|
- channel removed: {{name}}
|
|
39
39
|
+ channel added: {{name}}
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
## Breaking Change Detail
|
|
44
44
|
|
|
45
|
-
> _Filled automatically. Each breaking change must link to a migration note in `contracts/CHANGELOG.md`._
|
|
45
|
+
> _Filled automatically. Each breaking change must link to a migration note in `aidlc/contracts/CHANGELOG.md`._
|
|
46
46
|
|
|
47
47
|
- {{breaking_change_1}}
|
|
48
48
|
- Migration: {{link}}
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
## Compat Check Result
|
|
51
51
|
|
|
52
52
|
```
|
|
53
|
-
$ tools/contract_diff.py --base {{base}} --head {{head}}
|
|
53
|
+
$ aidlc/tools/contract_diff.py --base {{base}} --head {{head}}
|
|
54
54
|
RESULT: {{COMPATIBLE | BREAKING}}
|
|
55
55
|
EXIT: {{0 | 1}}
|
|
56
56
|
```
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
## Kind
|
|
8
8
|
|
|
9
|
-
- [ ] REST API (OpenAPI 3.1) — `contracts/api/{{name}}.yaml`
|
|
10
|
-
- [ ] AsyncAPI event — `contracts/events/{{name}}.yaml`
|
|
11
|
-
- [ ] GraphQL schema — `contracts/api/{{name}}.graphql`
|
|
9
|
+
- [ ] REST API (OpenAPI 3.1) — `aidlc/contracts/api/{{name}}.yaml`
|
|
10
|
+
- [ ] AsyncAPI event — `aidlc/contracts/events/{{name}}.yaml`
|
|
11
|
+
- [ ] GraphQL schema — `aidlc/contracts/api/{{name}}.graphql`
|
|
12
12
|
|
|
13
13
|
## Versioning
|
|
14
14
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
- PATCH: doc / example only
|
|
19
19
|
|
|
20
20
|
> Any MAJOR bump requires human approval (INT-002) and a migration note in
|
|
21
|
-
> `contracts/CHANGELOG.md`.
|
|
21
|
+
> `aidlc/contracts/CHANGELOG.md`.
|
|
22
22
|
|
|
23
23
|
## Change
|
|
24
24
|
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
|
|
41
41
|
## Contract Test Mapping
|
|
42
42
|
|
|
43
|
-
- `tests/contract/test_{{contract_name}}.py`
|
|
43
|
+
- `aidlc/tests/contract/test_{{contract_name}}.py`
|
|
44
44
|
- Scenarios: @INT-FR-{{int_fr_id}} @positive / @negative / @edge
|
|
45
45
|
|
|
46
46
|
## See Also
|
|
47
47
|
|
|
48
|
-
- `contracts/CHANGELOG.md` — version history
|
|
49
|
-
- `openspec/changes/{{change_id}}/contract-diff.md` — auto-generated diff
|
|
48
|
+
- `aidlc/contracts/CHANGELOG.md` — version history
|
|
49
|
+
- `aidlc/openspec/changes/{{change_id}}/contract-diff.md` — auto-generated diff
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
| wxa | `WXA-FR-*` | JavaScript | Vant Weapp | `apps/wxa/` | WeChat Mini Program |
|
|
14
14
|
| mya | `MYA-FR-*` | JavaScript | Ant Design Mini | `apps/mya/` | Mini Program (e.g. Alipay) |
|
|
15
15
|
| tta | `TTA-FR-*` | TypeScript | — | `apps/tta/` | TikTok Mini Program |
|
|
16
|
-
| contracts | `INT-FR-*` | — | — | `contracts/`, `packages/shared/` | Cross-component contracts |
|
|
16
|
+
| contracts | `INT-FR-*` | — | — | `aidlc/contracts/`, `aidlc/packages/shared/` | Cross-component contracts |
|
|
17
17
|
|
|
18
18
|
Cloud: {{cloud_provider}} (default: TCB).
|
|
19
19
|
|
|
@@ -21,27 +21,27 @@ Cloud: {{cloud_provider}} (default: TCB).
|
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
23
|
# ① Understand — declare scope + namespaces
|
|
24
|
-
cat > openspec/changes/CHG-001/spec-delta.md <<'YAML'
|
|
24
|
+
cat > aidlc/openspec/changes/CHG-001/spec-delta.md <<'YAML'
|
|
25
25
|
affects: [{{primary_components}}]
|
|
26
26
|
frs:
|
|
27
27
|
- id: {{primary_namespace}}-FR-001
|
|
28
28
|
- id: INT-FR-001 # if cross-component
|
|
29
29
|
YAML
|
|
30
30
|
# write features/{component}/{domain}/{feature}.feature
|
|
31
|
-
# if cross-component, also write features/cross-stack/{domain}/{feature}.feature
|
|
31
|
+
# if cross-component, also write aidlc/features/cross-stack/{domain}/{feature}.feature
|
|
32
32
|
|
|
33
33
|
# ② Plan
|
|
34
|
-
# write openspec/changes/CHG-001/design.md
|
|
35
|
-
# write openspec/changes/CHG-001/task-list.md (DAG with cross-component edges)
|
|
34
|
+
# write aidlc/openspec/changes/CHG-001/design.md
|
|
35
|
+
# write aidlc/openspec/changes/CHG-001/task-list.md (DAG with cross-component edges)
|
|
36
36
|
|
|
37
37
|
# ③ Verify
|
|
38
38
|
# Per component: TDD red-green-refactor
|
|
39
39
|
{{verify_per_component}}
|
|
40
40
|
# Contracts
|
|
41
|
-
tools/generate_shared.py
|
|
42
|
-
pytest tests/contract/
|
|
41
|
+
aidlc/tools/generate_shared.py
|
|
42
|
+
pytest aidlc/tests/contract/
|
|
43
43
|
# Cross-stack (if applies)
|
|
44
|
-
pytest tests/cross-stack/ -k INT-FR-001
|
|
44
|
+
pytest aidlc/tests/cross-stack/ -k INT-FR-001
|
|
45
45
|
|
|
46
46
|
# ④ Deliver
|
|
47
47
|
deploy_stack --preview # unified stack URL
|
|
@@ -66,7 +66,7 @@ bvt ${PRODUCTION_URL} # stack-level BVT
|
|
|
66
66
|
|
|
67
67
|
```
|
|
68
68
|
{{project_name}}/
|
|
69
|
-
├── project.yaml # stack topology, components, contracts
|
|
69
|
+
├── aidlc/project.yaml # stack topology, components, contracts
|
|
70
70
|
├── apps/
|
|
71
71
|
│ ├── native/ # NATIVE-FR-* (native mobile)
|
|
72
72
|
│ ├── desktop/ # DESKTOP-FR-* (desktop)
|
|
@@ -75,19 +75,18 @@ bvt ${PRODUCTION_URL} # stack-level BVT
|
|
|
75
75
|
│ ├── mya/ # MYA-FR-* (Mini Program)
|
|
76
76
|
│ ├── tta/ # TTA-FR-* (TikTok Mini Program)
|
|
77
77
|
│ └── backend/ # BE-FR-* (service)
|
|
78
|
-
├── contracts/ # INT-FR-* (single source of truth)
|
|
78
|
+
├── aidlc/contracts/ # INT-FR-* (single source of truth)
|
|
79
79
|
│ ├── api/ # OpenAPI 3.1
|
|
80
80
|
│ ├── events/ # AsyncAPI / CloudEvent
|
|
81
81
|
│ └── CHANGELOG.md
|
|
82
|
-
├── packages/shared/ # generated from contracts, consumed by all
|
|
83
|
-
├── features/
|
|
84
|
-
|
|
85
|
-
├── tests/
|
|
82
|
+
├── aidlc/packages/shared/ # generated from contracts, consumed by all
|
|
83
|
+
├── aidlc/features/cross-stack/ # INT-FR-*.feature (full flow)
|
|
84
|
+
├── aidlc/tests/
|
|
86
85
|
│ ├── contract/ # contract tests
|
|
87
86
|
│ └── cross-stack/ # cross-stack e2e
|
|
88
|
-
├── openspec/changes/{id}/
|
|
89
|
-
├── providers/{tcb,aliyun}/ # cloud config
|
|
90
|
-
└── tools/ # deploy_stack, contract_diff, generate_shared
|
|
87
|
+
├── aidlc/openspec/changes/{id}/ # spec + design + task-list per change
|
|
88
|
+
├── aidlc/providers/{tcb,aliyun}/ # cloud config
|
|
89
|
+
└── aidlc/tools/ # deploy_stack, contract_diff, generate_shared
|
|
91
90
|
```
|
|
92
91
|
|
|
93
92
|
### AI-DLC Workflow
|
|
@@ -117,8 +116,8 @@ bvt ${PRODUCTION_URL} # stack BVT
|
|
|
117
116
|
|------|---------|-----------|-------|
|
|
118
117
|
| TDD | `pytest --cov` per component | ≥80% | Per component |
|
|
119
118
|
| BDD | `pytest-bdd features/` per component | 100% pass | Per component |
|
|
120
|
-
| Contract | `pytest tests/contract/` | 100% pass | Cross-component |
|
|
121
|
-
| Cross-stack | `pytest tests/cross-stack/` | 100% pass | Stack |
|
|
119
|
+
| Contract | `pytest aidlc/tests/contract/` | 100% pass | Cross-component |
|
|
120
|
+
| Cross-stack | `pytest aidlc/tests/cross-stack/` | 100% pass | Stack |
|
|
122
121
|
| Security | `bandit -r apps/` | 0 vulns | Per component |
|
|
123
122
|
| BVT | `bvt ${URL}` | All checks pass | Stack |
|
|
124
123
|
|
|
@@ -6,8 +6,8 @@ AI-DLC monorepo project. Stack: native + desktop + web + backend + wxa + mya + t
|
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
{{project_name}}/
|
|
9
|
-
├── project.yaml
|
|
10
|
-
├── requirements.md
|
|
9
|
+
├── aidlc/project.yaml # Stack topology
|
|
10
|
+
├── aidlc/requirements.md # Intent + global spec
|
|
11
11
|
├── apps/
|
|
12
12
|
│ ├── native/ # NATIVE-FR-* native mobile
|
|
13
13
|
│ │ ├── src/
|
|
@@ -37,25 +37,25 @@ AI-DLC monorepo project. Stack: native + desktop + web + backend + wxa + mya + t
|
|
|
37
37
|
│ ├── src/
|
|
38
38
|
│ ├── tests/{unit,integration,e2e}/
|
|
39
39
|
│ └── features/
|
|
40
|
-
├── contracts/ # INT-FR-* single source of truth
|
|
40
|
+
├── aidlc/contracts/ # INT-FR-* single source of truth
|
|
41
41
|
│ ├── api/ # OpenAPI 3.1
|
|
42
42
|
│ ├── events/ # AsyncAPI / CloudEvent
|
|
43
43
|
│ └── CHANGELOG.md
|
|
44
|
-
├── packages/shared/ # generated from contracts
|
|
45
|
-
├── features/cross-stack/ # INT-FR-*.feature full flow
|
|
46
|
-
├── tests/
|
|
44
|
+
├── aidlc/packages/shared/ # generated from contracts
|
|
45
|
+
├── aidlc/features/cross-stack/ # INT-FR-*.feature full flow
|
|
46
|
+
├── aidlc/tests/
|
|
47
47
|
│ ├── contract/ # INT contract tests
|
|
48
48
|
│ └── cross-stack/ # cross-stack e2e
|
|
49
|
-
├── openspec/changes/{id}/
|
|
49
|
+
├── aidlc/openspec/changes/{id}/
|
|
50
50
|
│ ├── spec-delta.md # declares affects + FR namespaces
|
|
51
51
|
│ ├── design.md # per-component + integration
|
|
52
52
|
│ ├── task-list.md # DAG with cross-component edges
|
|
53
53
|
│ └── contract-diff.md # auto-generated contract changes
|
|
54
|
-
├── providers/{tcb,aliyun}/
|
|
55
|
-
└── tools/
|
|
54
|
+
├── aidlc/providers/{tcb,aliyun}/
|
|
55
|
+
└── aidlc/tools/
|
|
56
56
|
├── deploy_stack.py # unified stack deploy
|
|
57
57
|
├── contract_diff.py # contract compat check
|
|
58
|
-
└── generate_shared.py # contracts → packages/shared
|
|
58
|
+
└── generate_shared.py # contracts → aidlc/packages/shared
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
## project.yaml
|
|
@@ -73,26 +73,26 @@ stack:
|
|
|
73
73
|
- id: tta { fr_prefix: TTA, tech: miniprogram, dir: apps/tta, default_language: typescript }
|
|
74
74
|
cross_cutting:
|
|
75
75
|
fr_prefix: INT
|
|
76
|
-
contracts: contracts/
|
|
77
|
-
shared_types: packages/shared/
|
|
76
|
+
contracts: aidlc/contracts/
|
|
77
|
+
shared_types: aidlc/packages/shared/
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
## AI-DLC Workflow
|
|
81
81
|
|
|
82
82
|
```bash
|
|
83
83
|
# ① Understand
|
|
84
|
-
# requirements.md → openspec/changes/{id}/spec-delta.md (with affects)
|
|
84
|
+
# aidlc/requirements.md → aidlc/openspec/changes/{id}/spec-delta.md (with affects)
|
|
85
85
|
# → features/{component}/{domain}/{feature}.feature
|
|
86
|
-
# → features/cross-stack/{domain}/{feature}.feature (if cross-component)
|
|
86
|
+
# → aidlc/features/cross-stack/{domain}/{feature}.feature (if cross-component)
|
|
87
87
|
|
|
88
88
|
# ② Plan
|
|
89
|
-
# → openspec/changes/{id}/design.md (per-component + integration)
|
|
90
|
-
# → openspec/changes/{id}/task-list.md (DAG with cross-component edges)
|
|
89
|
+
# → aidlc/openspec/changes/{id}/design.md (per-component + integration)
|
|
90
|
+
# → aidlc/openspec/changes/{id}/task-list.md (DAG with cross-component edges)
|
|
91
91
|
|
|
92
92
|
# ③ Verify
|
|
93
93
|
# For each affected component, per BDD scenario: RED → GREEN → REFACTOR
|
|
94
|
-
# Then: tools/generate_shared.py → pytest tests/contract/
|
|
95
|
-
# Then: pytest tests/cross-stack/ (if cross-component)
|
|
94
|
+
# Then: aidlc/tools/generate_shared.py → pytest aidlc/tests/contract/
|
|
95
|
+
# Then: pytest aidlc/tests/cross-stack/ (if cross-component)
|
|
96
96
|
|
|
97
97
|
# ④ Deliver
|
|
98
98
|
deploy_stack --preview # unified stack URL
|
|
@@ -108,9 +108,9 @@ bvt ${PRODUCTION_URL} # stack BVT
|
|
|
108
108
|
|------|---------|-----------|
|
|
109
109
|
| TDD coverage | `pytest --cov` per component | ≥80% |
|
|
110
110
|
| BDD scenarios | `pytest-bdd features/` per component | 100% pass |
|
|
111
|
-
| Contract | `pytest tests/contract/` | 100% pass |
|
|
112
|
-
| Cross-stack e2e | `pytest tests/cross-stack/` | 100% pass |
|
|
113
|
-
| Contract diff | `tools/contract_diff.py` | backward-compat |
|
|
111
|
+
| Contract | `pytest aidlc/tests/contract/` | 100% pass |
|
|
112
|
+
| Cross-stack e2e | `pytest aidlc/tests/cross-stack/` | 100% pass |
|
|
113
|
+
| Contract diff | `aidlc/tools/contract_diff.py` | backward-compat |
|
|
114
114
|
| Security | `bandit -r apps/` | 0 vulns |
|
|
115
115
|
| Stack BVT | `bvt ${URL}` | all checks pass |
|
|
116
116
|
|
|
@@ -6,7 +6,7 @@ CHANGE_ID="${1:?Usage: collect.sh <change-id>}"
|
|
|
6
6
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
7
7
|
SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
8
8
|
PROJECT_ROOT="$(cd "$SKILL_DIR/../../.." && pwd)"
|
|
9
|
-
CHANGE_DIR="$PROJECT_ROOT/openspec/changes/$CHANGE_ID"
|
|
9
|
+
CHANGE_DIR="$PROJECT_ROOT/aidlc/openspec/changes/$CHANGE_ID"
|
|
10
10
|
|
|
11
11
|
if [ ! -d "$CHANGE_DIR" ]; then
|
|
12
12
|
echo "Error: $CHANGE_DIR not found"
|
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
## Phase By Phase
|
|
16
16
|
|
|
17
17
|
### Understand
|
|
18
|
-
- Spec Delta: `openspec/changes/{{change_id}}/spec-delta.md`
|
|
18
|
+
- Spec Delta: `aidlc/openspec/changes/{{change_id}}/spec-delta.md`
|
|
19
19
|
- BDD 场景数: {{scenario_count}}
|
|
20
20
|
- Positive: {{positive_count}}
|
|
21
21
|
- Negative: {{negative_count}}
|
|
22
22
|
- Edge: {{edge_count}}
|
|
23
23
|
|
|
24
24
|
### Plan
|
|
25
|
-
- Design Doc: `openspec/changes/{{change_id}}/design.md`
|
|
25
|
+
- Design Doc: `aidlc/openspec/changes/{{change_id}}/design.md`
|
|
26
26
|
- Task DAG: {{task_count}} units
|
|
27
27
|
- 跨组件依赖: {{cross_component_edges}}
|
|
28
28
|
|