Connect project plans to task completion #245
File diff suppressed because one or more lines are too long
@@ -0,0 +1,308 @@
|
||||
{
|
||||
"source": "SELF",
|
||||
"kind": "Fixed-ref review applicability verification; no test execution or new code review",
|
||||
"refs": {
|
||||
"original_base": "b6974fa0d6fba0d28984fcfcb4418c541b83f915",
|
||||
"original_review_head": "6b0fc8f386d467b955269b2c5557b85908e211fe",
|
||||
"new_main_base": "878e0e7ceba3bb6b78c36c5113eacc846a7f017b",
|
||||
"new_candidate_head": "6e078ed3d15da0eaee8d993ee74499951ed7e6bf"
|
||||
},
|
||||
"commands": [
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6b0fc8f386d467b955269b2c5557b85908e211fe:PROJECT.md"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "083ba30a5fb2aba60d0468f0afbda7897cb08e984abe39417c1d51568bc3beeb",
|
||||
"stdout_bytes": 1720
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6e078ed3d15da0eaee8d993ee74499951ed7e6bf:PROJECT.md"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "083ba30a5fb2aba60d0468f0afbda7897cb08e984abe39417c1d51568bc3beeb",
|
||||
"stdout_bytes": 1720
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6b0fc8f386d467b955269b2c5557b85908e211fe:policy/delivery.md"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "9d2b801d4a84e2ab1d189bcda7ec8d973b5309a448dbafed56ea9d0a34279ecb",
|
||||
"stdout_bytes": 11837
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6e078ed3d15da0eaee8d993ee74499951ed7e6bf:policy/delivery.md"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "9d2b801d4a84e2ab1d189bcda7ec8d973b5309a448dbafed56ea9d0a34279ecb",
|
||||
"stdout_bytes": 11837
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6b0fc8f386d467b955269b2c5557b85908e211fe:policy/adoption.md"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "ce52af8214ee2951e5412d7877b92630c43d441d09cc4ad7a25ce83146b51a9c",
|
||||
"stdout_bytes": 3759
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6e078ed3d15da0eaee8d993ee74499951ed7e6bf:policy/adoption.md"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "ce52af8214ee2951e5412d7877b92630c43d441d09cc4ad7a25ce83146b51a9c",
|
||||
"stdout_bytes": 3759
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6b0fc8f386d467b955269b2c5557b85908e211fe:policy/tool-adaptation-matrix.md"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "6a9a2991be381857348614d4c4019f6b20e832e6e04f81c2138f904240a470c6",
|
||||
"stdout_bytes": 3141
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6e078ed3d15da0eaee8d993ee74499951ed7e6bf:policy/tool-adaptation-matrix.md"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "6a9a2991be381857348614d4c4019f6b20e832e6e04f81c2138f904240a470c6",
|
||||
"stdout_bytes": 3141
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6b0fc8f386d467b955269b2c5557b85908e211fe:scripts/task.sh"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "c0c25e29c62e290fd74d508e4d3195c04e2c2a292288635791f4fc50b14aa7f2",
|
||||
"stdout_bytes": 28944
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6e078ed3d15da0eaee8d993ee74499951ed7e6bf:scripts/task.sh"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "c0c25e29c62e290fd74d508e4d3195c04e2c2a292288635791f4fc50b14aa7f2",
|
||||
"stdout_bytes": 28944
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6b0fc8f386d467b955269b2c5557b85908e211fe:tests/test_task.py"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "330829bc3327a94d10244af03d3e2c0fe17917fc878734ee15afd57b5f765a7e",
|
||||
"stdout_bytes": 50724
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"show",
|
||||
"6e078ed3d15da0eaee8d993ee74499951ed7e6bf:tests/test_task.py"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "330829bc3327a94d10244af03d3e2c0fe17917fc878734ee15afd57b5f765a7e",
|
||||
"stdout_bytes": 50724
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"diff",
|
||||
"--name-status",
|
||||
"878e0e7ceba3bb6b78c36c5113eacc846a7f017b...6e078ed3d15da0eaee8d993ee74499951ed7e6bf"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "79701ff517c50e298b81b5e5a55a7819c1fb6ddfd33b49e2fc9486d8b07cdd62",
|
||||
"stdout_bytes": 201,
|
||||
"stdout": "A\t.task/feature-goal-continuity.md\nA\t.task/reviews/goal-continuity.json\nM\tPROJECT.md\nM\tpolicy/adoption.md\nM\tpolicy/delivery.md\nM\tpolicy/tool-adaptation-matrix.md\nM\tscripts/task.sh\nM\ttests/test_task.py\n"
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"diff",
|
||||
"--raw",
|
||||
"878e0e7ceba3bb6b78c36c5113eacc846a7f017b...6e078ed3d15da0eaee8d993ee74499951ed7e6bf"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "3d7f251b5fceb0db2cfdf5bd65ff9fc7015ad824000d3381c4ae55b668c67789",
|
||||
"stdout_bytes": 449,
|
||||
"stdout": ":000000 100644 0000000 3165698 A\t.task/feature-goal-continuity.md\n:000000 100644 0000000 1ba893e A\t.task/reviews/goal-continuity.json\n:100644 100644 2a3b79c a7f5ad1 M\tPROJECT.md\n:100644 100644 f0e4fed f98ea77 M\tpolicy/adoption.md\n:100644 100644 f487bdc 2549bcb M\tpolicy/delivery.md\n:100644 100644 c0d05d1 4186f58 M\tpolicy/tool-adaptation-matrix.md\n:100755 100755 4fc4cdb 754a888 M\tscripts/task.sh\n:100644 100644 a36c016 9a0c09c M\ttests/test_task.py\n"
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"diff",
|
||||
"b6974fa0d6fba0d28984fcfcb4418c541b83f915..6b0fc8f386d467b955269b2c5557b85908e211fe",
|
||||
"--",
|
||||
"PROJECT.md",
|
||||
"policy/delivery.md",
|
||||
"policy/adoption.md",
|
||||
"policy/tool-adaptation-matrix.md",
|
||||
"scripts/task.sh",
|
||||
"tests/test_task.py"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "fd197477181cba0f04b714dd9862f373e16c5a15f3a078d30c88987a1c7db868",
|
||||
"stdout_bytes": 12277
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"diff",
|
||||
"878e0e7ceba3bb6b78c36c5113eacc846a7f017b...6e078ed3d15da0eaee8d993ee74499951ed7e6bf",
|
||||
"--",
|
||||
"PROJECT.md",
|
||||
"policy/delivery.md",
|
||||
"policy/adoption.md",
|
||||
"policy/tool-adaptation-matrix.md",
|
||||
"scripts/task.sh",
|
||||
"tests/test_task.py"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "fd197477181cba0f04b714dd9862f373e16c5a15f3a078d30c88987a1c7db868",
|
||||
"stdout_bytes": 12277
|
||||
},
|
||||
{
|
||||
"argv": [
|
||||
"git",
|
||||
"diff",
|
||||
"--raw",
|
||||
"6b0fc8f386d467b955269b2c5557b85908e211fe..6e078ed3d15da0eaee8d993ee74499951ed7e6bf",
|
||||
"--",
|
||||
"deps",
|
||||
"modules"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "d7def010b5edb46cc77ae7f3d2da4e5aafee2474a3253ca114ac3ed07804d88c",
|
||||
"stdout_bytes": 201,
|
||||
"stdout": ":160000 160000 65aaebc 343b1e6 M\tdeps/agent-intent\n:160000 160000 c5b9dca ead690b M\tdeps/agent-native\n:160000 160000 fc9620e 029edc0 M\tdeps/agent-squad\n:160000 160000 dc6d998 68addfd M\tmodules/backend\n"
|
||||
}
|
||||
],
|
||||
"comparison_results": [
|
||||
{
|
||||
"path": "PROJECT.md",
|
||||
"byte_identical": true,
|
||||
"old_sha256": "083ba30a5fb2aba60d0468f0afbda7897cb08e984abe39417c1d51568bc3beeb",
|
||||
"new_sha256": "083ba30a5fb2aba60d0468f0afbda7897cb08e984abe39417c1d51568bc3beeb",
|
||||
"bytes": 1720
|
||||
},
|
||||
{
|
||||
"path": "policy/delivery.md",
|
||||
"byte_identical": true,
|
||||
"old_sha256": "9d2b801d4a84e2ab1d189bcda7ec8d973b5309a448dbafed56ea9d0a34279ecb",
|
||||
"new_sha256": "9d2b801d4a84e2ab1d189bcda7ec8d973b5309a448dbafed56ea9d0a34279ecb",
|
||||
"bytes": 11837
|
||||
},
|
||||
{
|
||||
"path": "policy/adoption.md",
|
||||
"byte_identical": true,
|
||||
"old_sha256": "ce52af8214ee2951e5412d7877b92630c43d441d09cc4ad7a25ce83146b51a9c",
|
||||
"new_sha256": "ce52af8214ee2951e5412d7877b92630c43d441d09cc4ad7a25ce83146b51a9c",
|
||||
"bytes": 3759
|
||||
},
|
||||
{
|
||||
"path": "policy/tool-adaptation-matrix.md",
|
||||
"byte_identical": true,
|
||||
"old_sha256": "6a9a2991be381857348614d4c4019f6b20e832e6e04f81c2138f904240a470c6",
|
||||
"new_sha256": "6a9a2991be381857348614d4c4019f6b20e832e6e04f81c2138f904240a470c6",
|
||||
"bytes": 3141
|
||||
},
|
||||
{
|
||||
"path": "scripts/task.sh",
|
||||
"byte_identical": true,
|
||||
"old_sha256": "c0c25e29c62e290fd74d508e4d3195c04e2c2a292288635791f4fc50b14aa7f2",
|
||||
"new_sha256": "c0c25e29c62e290fd74d508e4d3195c04e2c2a292288635791f4fc50b14aa7f2",
|
||||
"bytes": 28944
|
||||
},
|
||||
{
|
||||
"path": "tests/test_task.py",
|
||||
"byte_identical": true,
|
||||
"old_sha256": "330829bc3327a94d10244af03d3e2c0fe17917fc878734ee15afd57b5f765a7e",
|
||||
"new_sha256": "330829bc3327a94d10244af03d3e2c0fe17917fc878734ee15afd57b5f765a7e",
|
||||
"bytes": 50724
|
||||
}
|
||||
],
|
||||
"six_file_patch_identical_to_original_review": true,
|
||||
"final_task_scope": {
|
||||
"changed_paths": [
|
||||
".task/feature-goal-continuity.md",
|
||||
".task/reviews/goal-continuity.json",
|
||||
"PROJECT.md",
|
||||
"policy/adoption.md",
|
||||
"policy/delivery.md",
|
||||
"policy/tool-adaptation-matrix.md",
|
||||
"scripts/task.sh",
|
||||
"tests/test_task.py"
|
||||
],
|
||||
"scope_matches_approved_change": true,
|
||||
"business_or_gitlink_changes_relative_to_new_main": false,
|
||||
"additional_review_artifact": ".task/reviews/goal-continuity.json preserves the original review and original object identity"
|
||||
},
|
||||
"findings": {
|
||||
"Critical": [],
|
||||
"Important": [],
|
||||
"Minor": [
|
||||
{
|
||||
"location": ".task/feature-goal-continuity.md:79,83",
|
||||
"issue": "The fixed candidate still says the product awaits user review, while lines 10-13 already record the user approval and authorized delivery phase.",
|
||||
"impact": "Task handoff status is internally inconsistent; this does not invalidate the unchanged implementation review.",
|
||||
"recommendation": "Refresh these historical status summaries during the already planned delivery-result update before final handoff."
|
||||
}
|
||||
]
|
||||
},
|
||||
"reusable_evidence": {
|
||||
"scope": [
|
||||
"PROJECT.md",
|
||||
"policy/delivery.md",
|
||||
"policy/adoption.md",
|
||||
"policy/tool-adaptation-matrix.md",
|
||||
"scripts/task.sh",
|
||||
"tests/test_task.py"
|
||||
],
|
||||
"conclusion": "Original content-review conclusions remain applicable to the six byte-identical files, and their exact patch against the new main base is also unchanged.",
|
||||
"historical_test_limit": "Original 104-test result retains its original tested HEAD; it is not relabeled as a new-head or new-combination test result.",
|
||||
"original_report": ".task/reviews/goal-continuity.json at 6e078ed3d15da0eaee8d993ee74499951ed7e6bf",
|
||||
"source_limit": "Local analysis and captured command results remain SELF; no promotion to authenticated GATE or REPLAY."
|
||||
},
|
||||
"combination_verification_required": {
|
||||
"changed_component_paths_since_old_review": [
|
||||
"deps/agent-intent",
|
||||
"deps/agent-native",
|
||||
"deps/agent-squad",
|
||||
"modules/backend"
|
||||
],
|
||||
"boundary": "These pointers came from synchronization with the new main base and are absent from the final task diff. Their combined behavior requires the currently running full make test/build and subsequent matching CI; this review does not judge or predict those results."
|
||||
},
|
||||
"not_run_or_judged": [
|
||||
"Tests, full build, CI and platform approval",
|
||||
"Business/component implementation introduced by upstream",
|
||||
"Current remote branch freshness beyond the supplied fixed base",
|
||||
"Final task-card evidence completeness after ongoing tests"
|
||||
],
|
||||
"technical_conclusion": "Review applicability confirmed for the approved unchanged implementation. No content-review blocker; metadata status should be refreshed during delivery. New combination checks and actual merge gates remain separate.",
|
||||
"side_effects": "Only this /tmp JSON report was written; repository access used git show and git diff against fixed refs."
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"review_type": "bounded independent local read-only technical review",
|
||||
"evidence_source": "SELF",
|
||||
"identity_limit": "Independent subagent execution does not authenticate GATE or REPLAY identity; receipt source remains SELF.",
|
||||
"base": "b6974fa0d6fba0d28984fcfcb4418c541b83f915",
|
||||
"head": "6b0fc8f386d467b955269b2c5557b85908e211fe",
|
||||
"worktree": "/home/weichen/projects/Agent-System-Dev-wt-feature-goal-continuity",
|
||||
"files": [
|
||||
"PROJECT.md",
|
||||
"policy/delivery.md",
|
||||
"policy/adoption.md",
|
||||
"policy/tool-adaptation-matrix.md",
|
||||
"scripts/task.sh",
|
||||
"tests/test_task.py",
|
||||
".task/feature-goal-continuity.md"
|
||||
],
|
||||
"checks": [
|
||||
{
|
||||
"receipt": "/tmp/goal-continuity-review-replay-20261007.json",
|
||||
"command": "make test-governance && python3 /tmp/goal-continuity-checks-20261007.py && git diff --check",
|
||||
"before_head": "6b0fc8f386d467b955269b2c5557b85908e211fe",
|
||||
"after_head": "6b0fc8f386d467b955269b2c5557b85908e211fe",
|
||||
"exit_code": 0,
|
||||
"source": "SELF",
|
||||
"receipt_sha256": "5aeb5f32f0647ea71e28a9119af66e94d3b6cdca29f1d96340d2d12e57ced554",
|
||||
"output_sha256": "42ae00efd2eeb1289d1f3125f3d5bd32bbdd6dfe4e8fc47e2ec239f36865e5c4"
|
||||
},
|
||||
{
|
||||
"receipt": "/tmp/goal-continuity-review-static-20261007.json",
|
||||
"command": "bash -n scripts/task.sh && git diff --check b6974fa0d6fba0d28984fcfcb4418c541b83f915..6b0fc8f386d467b955269b2c5557b85908e211fe",
|
||||
"before_head": "6b0fc8f386d467b955269b2c5557b85908e211fe",
|
||||
"after_head": "6b0fc8f386d467b955269b2c5557b85908e211fe",
|
||||
"exit_code": 0,
|
||||
"source": "SELF",
|
||||
"receipt_sha256": "714a438b2ef5e580f06763f6dc62432e1d6556878a2186cf0fe38a3800025236",
|
||||
"output_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
],
|
||||
"strengths": [
|
||||
{
|
||||
"location": "policy/delivery.md:45",
|
||||
"assessment": "Covers unique master record, entrypoint, minimum fields, pending confirmation, current-version task association, progress updates, preferred next task, rationale, prerequisites, acceptance, duplicate checks and authorization boundary."
|
||||
},
|
||||
{
|
||||
"location": "scripts/task.sh:190",
|
||||
"assessment": "Adds literal template fields only; unresolved planning and next-task authorization default to pending/unapproved; existing lifecycle logic and card header remain unchanged."
|
||||
},
|
||||
{
|
||||
"location": "tests/test_task.py:596",
|
||||
"assessment": "Extends a real disposable Git lifecycle test to inspect generated fields and pending/unapproved defaults while retaining existing authorization/review checks."
|
||||
},
|
||||
{
|
||||
"location": "policy/tool-adaptation-matrix.md:18",
|
||||
"assessment": "Documents manual capability without claiming effective planning validation, automatic scheduling or execution controls."
|
||||
},
|
||||
{
|
||||
"location": "scripts/task.sh:325",
|
||||
"assessment": "Existing close/backfill parsing uses unchanged branch/status/header patterns; new fields do not intercept them, and planning references are explicitly rooted at repository root for archive compatibility."
|
||||
}
|
||||
],
|
||||
"findings": {
|
||||
"Critical": [],
|
||||
"Important": [],
|
||||
"Minor": []
|
||||
},
|
||||
"considered_but_declined_to_judge": [
|
||||
{
|
||||
"behavior": "Completeness and approval of historical business plans in proposals",
|
||||
"reason": "Scope adds a policy and directory entrypoint; no authorization to inventory, migrate, approve or rewrite business plans."
|
||||
},
|
||||
{
|
||||
"behavior": "Truth and current freshness of remote open-PR inventory and platform branch protection",
|
||||
"reason": "Remote/API verification was excluded; author receipt remains SELF and its own next-step note requires a fresh pre-start check."
|
||||
},
|
||||
{
|
||||
"behavior": "Formal human stage approval and merge readiness",
|
||||
"reason": "This is a local pre-review with user approval, remote CI and merge explicitly pending; subagent review cannot supply human approval or platform gate identity."
|
||||
},
|
||||
{
|
||||
"behavior": "Automatic enforcement of plan validity, recommendation quality and new-task scheduling",
|
||||
"reason": "Requested capability is documented as manual; template text is not represented as execution-end enforcement."
|
||||
}
|
||||
],
|
||||
"not_reviewed": [
|
||||
"Full make test/build and product/browser acceptance",
|
||||
"Remote CI/platform approval identity",
|
||||
"Business code and component behavior outside changed files",
|
||||
"Entire task-card evidence body line-by-line; first 90 lines and targeted receipt integrity/metadata were inspected"
|
||||
],
|
||||
"recommendations": [],
|
||||
"technical_conclusion": "No material defect found in the fixed diff. Ready for user review of the local change; does not declare remote merge readiness or confer execution authorization.",
|
||||
"preserved_state": "HEAD, index/worktree visible state, and component snapshot unchanged; review artifacts are under /tmp only.",
|
||||
"memory_use": "MEMORY.md:34 used only to retain SELF/GATE/REPLAY distinction; current evidence rules verified from repository."
|
||||
}
|
||||
@@ -4,6 +4,13 @@
|
||||
- 组合:modules/{core,backend,frontend,ui,documents} + deps/{development-guidelines,agent-native,agent-squad,agent-intent,agent-command,error-code-system,logging-system}。
|
||||
- 部署:非容器;Releases 仓从本仓固定提交导出版本。
|
||||
|
||||
## 方向与规划入口
|
||||
|
||||
长期方向、目标及跨任务规划沿用过程仓的 [方案与规划目录](modules/documents/docs/proposals/)。
|
||||
确立或调整具体方向时,在本入口维护其主记录链接;正文、确认依据和进展仍以该主记录为准。
|
||||
目录中的既有文档不因被收录而自动成为已批准规划。记录、任务关联及收尾建议按
|
||||
[交付规范的长期方向与任务衔接](policy/delivery.md#长期方向与任务衔接) 执行。
|
||||
|
||||
## 验证
|
||||
|
||||
`make test` 先核对子模块工作树与固定指针,再运行治理脚本、公开边界、跨仓指针、库及各模块
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
| standards/verification.md | 验收 | 本地 make test-governance + 组合测试;当前证据与历史 scratch 记录分开 |
|
||||
| standards/multi-repo.md | 跨仓/gitlink | manual;受控历史迁移通道已于 2026-09-30 行使一次(documents/records/2026-09-30-history-migration.md) |
|
||||
| 工作区回收 | 交付终点 | advisory(task-finish);负例:合入前 finish 拒绝输出 |
|
||||
| policy/delivery.md(项目收紧) | 需求、试验、实施迭代及交付 | manual:人工评审和有范围的连续推进授权;任务卡提供记录,post-merge 默认只提示,行为回归见 tests/test_task.py |
|
||||
| policy/delivery.md(项目收紧) | 需求、长期方向、试验、实施迭代及交付 | manual:人工评审和有范围的连续推进授权;方向主记录及任务收尾建议;任务卡提供记录,post-merge 默认只提示,行为回归见 tests/test_task.py |
|
||||
| standards/tool-adaptation.md(draft.8) | 为工具创建规则/钩子实例 | 本组合 CLI/git 级实例已登记:policy/tool-adaptation-matrix.md(A1–A7 逐行定级+正负例证据) |
|
||||
| 同上(zcode 实例) | zcode 客户端写路径 | policy/tool-adaptation-zcode.md:PreToolUse 写守卫;脚本负例与客户端接线分开,客户端 pending-live |
|
||||
| core/baseline.md「规范层级」+ documentation.md「记忆分层/机制化」(draft.9) | 层级效力、记忆权威、经验机制化 | manual:本仓 policy/ 仅收紧不放宽;记忆四层按条文执行(任务卡=任务记忆,documents/records=项目记忆,Dev 仓 AGENTS.md 指针已就位) |
|
||||
|
||||
+32
-1
@@ -36,12 +36,43 @@
|
||||
| 7 正式测试与验收 | 需求到证据映射;正常、异常、边界、回归结果及缺项 | 人工审阅当前候选的验证结果;正式验收前同步并固定被测对象 |
|
||||
| 8 代码 Review | 需求符合性、正确性、维护性、测试充分性及问题闭合记录 | 完成必要重放、整改、补测和复审,由有权评审者放行当前版本 |
|
||||
| 9 合入 | 最新 base/head、必要检查及评审、冲突处置、合入授权 | 合入前再次同步核验;经 PR 合入后取得真实合入结果 |
|
||||
| 10 合入核验与收口 | 实际合入内容及组件版本、验证依据、成果保存位置、写者状态、清理清单与任务归档安排 | 清理前取得人工批准或对应连续推进授权;安全回收后核对结果、闭合任务卡 |
|
||||
| 10 合入核验与收口 | 实际合入内容及组件版本、验证依据、成果保存位置、写者状态、清理清单、任务归档安排及适用规划的进展与下一步建议 | 清理前取得人工批准或对应连续推进授权;安全回收后核对结果、闭合任务卡 |
|
||||
|
||||
表中的人工节点仅在明确的连续推进授权范围内按授权执行;阶段产物及验证条件保留。
|
||||
正式测试和最终 Review 的顺序不限制设计阶段试验、实施期测试或提前审阅。
|
||||
文本合并无冲突不证明组合兼容;合入后仍核验真实内容与被测候选是否一致。
|
||||
|
||||
## 长期方向与任务衔接
|
||||
|
||||
用户提出大方向、长期目标或跨任务规划时,必须在项目中留存可接续的主记录,不能仅保留
|
||||
在聊天、IDE 私有计划或执行者记忆中。优先更新已有相关规划;确需新文档时,沿用
|
||||
过程仓的 `modules/documents/docs/proposals/`,并在 [项目入口](../PROJECT.md) 提供链接。
|
||||
正文只维护一处,任务卡和其他入口引用文档及版本,不复制另一份规划状态。
|
||||
|
||||
主记录至少包括:目标及背景、范围及成功标准、阶段或里程碑、关联方案和任务、来源、
|
||||
负责人、确认状态、推进状态及更新时间。只有方向时可以先写简短目标记录,未知项标待定。
|
||||
未确认的想法标“待确认”;确认依据与版本另记,不能由“已记录”推断“已批准”。
|
||||
方向、范围或优先级调整时保留原决定、变更原因及批准依据,更新受影响的方案和任务引用。
|
||||
|
||||
启动或恢复相关任务时,先读取适用方向及规划的当前有效版本,核对本任务所属里程碑、
|
||||
已有实现和在途任务。多个规划相互冲突或优先级不明时,记录冲突并提交人工决定,
|
||||
不凭文档标题、日期或本地旧副本擅自选择权威。
|
||||
|
||||
任务完成时,如果存在适用方案或规划,必须依据实际结果更新其进展,并在任务主记录和
|
||||
最终交付说明中给出下一步任务建议:
|
||||
|
||||
- 说明本任务推进了哪个目标或里程碑,以及剩余差距;区分已实现、已验证、已合入和已部署。
|
||||
- 优先推荐一个下一任务,说明要解决的问题、关联规划及版本、推荐理由和优先顺序依据。
|
||||
- 写明前置条件、依赖、待确认事项、预期产物和可判定验收条件;必要时补充备选及取舍。
|
||||
- 建议前核对已有或在途任务;已有任务覆盖时引用该任务及待续办内容,避免重复安排。
|
||||
- 无适用规划或规划已经完成时如实说明;存在阻塞时列出阻塞条件,优先建议澄清、验证假设
|
||||
或解除阻塞的任务,不为凑出下一步虚构工作。
|
||||
|
||||
进展更新和建议属于当前任务的收尾产物。跨仓更新遵循对应工作区、版本和评审要求;
|
||||
更新尚未获批或合入时,任务卡保留待更新内容、负责人和下一动作,不能声称原规划已更新。
|
||||
**下一步建议不等于启动授权**:没有覆盖该任务的明确授权,建议停留在待确认状态;
|
||||
当前任务的完成、批准或连续推进授权不自动扩展到新任务。
|
||||
|
||||
## 需求表与追溯
|
||||
|
||||
需求表以任务卡为主记录。项目符合度使用“符合 / 需调整后符合 / 不符合 / 待核实”,
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
| A6 秘密 | 本地脱敏及 CI 获取边界;权限与宿主隔离另验 | 命令/输出/摘要脱敏,凭据不持久写 Git 配置 | `tests/test_evidence.py`、`tests/test_ci_credentials.py` |
|
||||
| A7 证据 | 本地 SELF 收据;外部来源独立核验 | 首次捕获、完整脱敏输出/摘要、对象记录、原样导入 | `tests/test_evidence.py`;CI/审阅链接另核 |
|
||||
| A8 阶段评审与迭代 | manual;模板和提示不构成批准身份校验或全流程阻断 | policy/delivery.md;任务卡记录需求、方案/计划、评审与试验迭代;post-merge 默认仅提示 | `tests/test_task.py` 核对模板及钩子不自动写入;人工核对批准范围和版本 |
|
||||
| A9 长期方向与后续任务 | manual;模板不校验规划有效性或自动调度任务 | policy/delivery.md;PROJECT.md 提供规划入口,任务卡关联规划/里程碑并记录下一步建议 | `tests/test_task.py` 核对生成字段与未授权默认值;人工核对当前规划、进展、重复任务和建议依据 |
|
||||
|
||||
## 失败处理
|
||||
|
||||
|
||||
@@ -187,6 +187,12 @@ ${parent_note}
|
||||
|
||||
<预期结果、受影响入口/模块/契约;明确不做什么。>
|
||||
|
||||
## 关联方向与规划
|
||||
|
||||
- 适用状态:待核对(无适用规划时说明原因)
|
||||
- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文)
|
||||
- 对应里程碑:待核对
|
||||
|
||||
## 需求分析
|
||||
|
||||
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|
||||
@@ -238,6 +244,16 @@ ${parent_note}
|
||||
- 验证:<结论摘要 PASS/FAIL/SKIP/NOT_RUN 逐项;逐条证据由 make evidence 写入上方证据表>
|
||||
- 影响与剩余项:
|
||||
|
||||
## 规划进展与下一步
|
||||
|
||||
- 本次推进/剩余:待核对(依据实际成果更新适用方案/规划)
|
||||
- 首选下一任务:待核对(无适用规划、已完成或受阻时如实说明,不虚构任务)
|
||||
- 推荐依据:待填写
|
||||
- 前置条件/待确认:待核对
|
||||
- 预期产物/验收条件:待定义
|
||||
- 重复任务核对:待核对(已有/在途任务、PR 与规划记录)
|
||||
- 启动授权:未授权(建议不自动启动新任务,仍须明确授权)
|
||||
|
||||
## 合入与清理
|
||||
|
||||
- 合入记录:NOT_RUN(授权依据、PR、合入 SHA、验证来源)
|
||||
|
||||
@@ -607,6 +607,13 @@ class TaskLifecycleTests(unittest.TestCase):
|
||||
self.assertIn(f"{field}:无", card)
|
||||
for field in ("当前阶段", "当前增量", "方案引用", "实施计划引用", "测试计划引用"):
|
||||
self.assertIn(field + ":", card)
|
||||
self.assertIn("## 关联方向与规划\n", card)
|
||||
planning = card.split("## 关联方向与规划\n", 1)[1].split("\n## ", 1)[0]
|
||||
for field in ("适用状态", "主记录路径/版本", "对应里程碑"):
|
||||
self.assertIn(field + ":待核对", planning)
|
||||
self.assertIn("无适用规划时说明原因", planning)
|
||||
self.assertIn("路径按仓库根目录定位,归档后不变", planning)
|
||||
self.assertIn("只引用唯一正文", planning)
|
||||
self.assertIn("| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |", card)
|
||||
reviews = card.split("## 阶段评审\n", 1)[1].split("\n## ", 1)[0]
|
||||
self.assertIn("| 阶段 | 对象版本 | 结论 | 评审人 | 时间 | 依据 |", reviews)
|
||||
@@ -618,6 +625,16 @@ class TaskLifecycleTests(unittest.TestCase):
|
||||
self.assertIn("## 探索试验与迭代", card)
|
||||
for field in ("假设", "范围", "判断和停止条件", "批准依据", "结果", "变更影响", "需重审补测"):
|
||||
self.assertIn(field, card.split("## 探索试验与迭代\n", 1)[1].split("\n## ", 1)[0])
|
||||
self.assertIn("## 规划进展与下一步\n", card)
|
||||
next_step = card.split("## 规划进展与下一步\n", 1)[1].split("\n## ", 1)[0]
|
||||
for field in ("本次推进/剩余", "首选下一任务", "前置条件/待确认", "重复任务核对"):
|
||||
self.assertIn(field + ":待核对", next_step)
|
||||
self.assertIn("推荐依据:待填写", next_step)
|
||||
self.assertIn("预期产物/验收条件:待定义", next_step)
|
||||
self.assertIn("无适用规划、已完成或受阻时如实说明,不虚构任务", next_step)
|
||||
self.assertIn("已有/在途任务、PR 与规划记录", next_step)
|
||||
self.assertIn("启动授权:未授权", next_step)
|
||||
self.assertIn("建议不自动启动新任务,仍须明确授权", next_step)
|
||||
self.assertIn("## 合入与清理", card)
|
||||
for field in ("合入记录", "清理记录"):
|
||||
self.assertIn(field + ":NOT_RUN", card)
|
||||
|
||||
Reference in New Issue
Block a user