Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1ebd46edc5 | ||
|
|
0af9701fce | ||
|
|
671d638305 | ||
|
|
7671aad421 | ||
|
|
cc96ca2cb4 | ||
|
|
171cbacdcd | ||
|
|
f093762448 | ||
|
|
ffb9ebf63e | ||
|
|
319d249920 | ||
|
|
007247f1e7 | ||
|
|
ba20628701 | ||
|
|
97a48f7f54 | ||
|
|
053a74cc36 | ||
|
|
e4718e1068 | ||
|
|
174bc1ce65 | ||
|
|
8f7aed7181 | ||
|
|
e4105f7d30 | ||
|
|
27ff982d27 | ||
|
|
35645bc76c | ||
|
|
1b1d191261 | ||
|
|
39c20f6656 | ||
|
|
28a4dbcbf4 | ||
|
|
2c466e2c9a | ||
|
|
92295ff211 | ||
|
|
e9f1cf3a26 | ||
|
|
2d902d15ef | ||
|
|
e922c207f2 | ||
|
|
829602b002 | ||
|
|
2c3c481613 | ||
|
|
253dbe2d4e | ||
|
|
25ee37f090 | ||
|
|
521c137efc | ||
|
|
9acc79f8b5 | ||
|
|
c637d9516d | ||
|
|
86b83e83dd | ||
|
|
67e2b601ce | ||
|
|
0fff9a04e8 | ||
|
|
c25583137c | ||
|
|
7763db58c8 | ||
|
|
8c80ed8eeb | ||
|
|
d5953ff689 | ||
|
|
e4099eab2a | ||
|
|
132b059310 | ||
|
|
41fd6f2519 | ||
|
|
c4e2fbef26 | ||
|
|
749f327986 | ||
|
|
acbe2c761c | ||
|
|
88b5dc635c | ||
|
|
60960d21b8 | ||
|
|
4261fad59b | ||
|
|
a24f9df193 | ||
|
|
fa53230ac5 | ||
|
|
efa36186c3 | ||
|
|
36ea6fc613 | ||
|
|
22cc9cf768 | ||
|
|
d42ec175ad | ||
|
|
d32b58829c | ||
|
|
7b73dd19b8 | ||
|
|
aeadcf98a4 | ||
|
|
7b44f61944 | ||
|
|
6f02d75889 | ||
|
|
a5c4258d5e | ||
|
|
86c4c969d5 | ||
|
|
45585e8fcf | ||
|
|
d4381d11d0 | ||
|
|
c150355bce | ||
|
|
bb313606a4 | ||
|
|
8f4f162759 | ||
|
|
01c9d60bc9 | ||
|
|
27885ceb3e | ||
|
|
41fe38a7a0 | ||
|
|
e94b941d72 | ||
|
|
8285713c70 | ||
|
|
1af68b192f | ||
|
|
9bdec04633 | ||
|
|
9713601216 | ||
|
|
673acf14a6 | ||
|
|
6dbe1ea846 | ||
|
|
b292cae768 | ||
|
|
34a2bbe157 | ||
|
|
b7be4c99ee | ||
|
|
ffa61e5fcb | ||
|
|
efd71b9055 | ||
|
|
a641f44a8e | ||
|
|
e5e2fc2d68 | ||
|
|
6167c1012e | ||
|
|
f2d39354b4 | ||
|
|
d69d5a972e | ||
|
|
18a9e64003 | ||
|
|
de266afb66 | ||
|
|
4561bcbd6b | ||
|
|
4e856f17aa | ||
|
|
00a5b95d5f | ||
|
|
5add2b83b0 | ||
|
|
bde6d8716c | ||
|
|
ac20f82db3 | ||
|
|
1e70f74ace | ||
|
|
ab60b0443f | ||
|
|
f808359699 | ||
|
|
1f20f08fe0 | ||
|
|
c50ce9600f | ||
|
|
165c04b64f | ||
|
|
218fc4b1ba | ||
|
|
72c84b5519 | ||
|
|
f45ee90a6f | ||
|
|
564c52a410 | ||
|
|
939c4adce6 | ||
|
|
1033a56f72 | ||
|
|
bbb4a4c5e1 | ||
|
|
17e5c92238 | ||
|
|
55366fb171 | ||
|
|
d25d1fad0d | ||
|
|
1c84261a38 | ||
|
|
4ebdc4ec4a | ||
|
|
a0fe729c64 | ||
|
|
e02f0cb0f1 | ||
|
|
7f1d87dbb9 | ||
|
|
8965ce386c | ||
|
|
c8ce4ebfb4 | ||
|
|
947ae7767a | ||
|
|
4454b2337c | ||
|
|
ee4ca0798e | ||
|
|
46be89c0c5 | ||
|
|
e75bd88e34 | ||
|
|
79ad9dc712 | ||
|
|
829f146eb6 | ||
|
|
9343255d39 | ||
|
|
c9e5d49a13 | ||
|
|
59abe72b65 | ||
|
|
c5b52b0c07 | ||
|
|
2274561496 | ||
|
|
17918d2c75 | ||
|
|
e6689e6e3a | ||
|
|
e656a67dd1 | ||
|
|
df8db91af4 | ||
|
|
f6446344cd | ||
|
|
78409a9cea | ||
|
|
7225af0df1 | ||
|
|
452c00a38d | ||
|
|
14de82f418 | ||
|
|
f7d3a98d7a | ||
|
|
fdc3b017a0 | ||
|
|
27ed0edfd4 | ||
|
|
982c059c1a | ||
|
|
8c736fe915 | ||
|
|
cbc369604d | ||
|
|
a6a9710269 | ||
|
|
60352de964 | ||
|
|
1e85198578 | ||
|
|
167f5ec638 | ||
|
|
8dcfc0ec63 | ||
|
|
a30c55425a | ||
|
|
618279074c | ||
|
|
2836a875f8 | ||
|
|
9f6b0bff06 | ||
|
|
2ee76ed03d | ||
|
|
32f7e68f63 | ||
|
|
5a7c11d26d | ||
|
|
b1e23cd23e | ||
|
|
aa8b281f07 | ||
|
|
a5232457fe | ||
|
|
31e3a76f71 | ||
|
|
d92219fca2 | ||
|
|
95c20e0cf7 | ||
|
|
8be8802370 | ||
|
|
ba9e1dfd23 | ||
|
|
81dbef26e9 | ||
|
|
145d1e7c30 | ||
|
|
d332de2567 | ||
|
|
0e12b73e66 | ||
|
|
900dcbb99b | ||
|
|
7e3ba10e79 | ||
|
|
592ab3c0dd | ||
|
|
034633c168 | ||
|
|
c900684df5 | ||
|
|
1ce62f6ec4 | ||
|
|
acd1aa37f6 | ||
|
|
1ad3b00234 | ||
|
|
bf8a3511dd | ||
|
|
1c0ebeb5e2 | ||
|
|
f912f48abd | ||
|
|
6aabb9e9d6 | ||
|
|
92e54a8e23 | ||
|
|
cef71626ec | ||
|
|
4577b0d6f2 | ||
|
|
c5e6e6011d | ||
|
|
eae6992ae8 | ||
|
|
7492f7350d | ||
|
|
8386cc1efa | ||
|
|
eb0d4b5a49 | ||
|
|
b99ce02860 | ||
|
|
c5bbc16681 | ||
|
|
8e06863c28 | ||
|
|
f384214d87 | ||
|
|
d1425ec7ce | ||
|
|
6b8314eadd | ||
|
|
f1bb2d8531 | ||
|
|
a064df6771 | ||
|
|
14f31f2831 | ||
|
|
6e078ed3d1 | ||
|
|
08298bd2d9 | ||
|
|
761c2954dc | ||
|
|
2d12865aae | ||
|
|
878e0e7ceb | ||
|
|
c02f02a77a | ||
|
|
d308ed6619 | ||
|
|
733f3c7474 | ||
|
|
43f61b0862 | ||
|
|
ac553897ca | ||
|
|
0507c68543 | ||
|
|
ad7c2f2443 | ||
|
|
a7772dca82 | ||
|
|
0212d2e50b | ||
|
|
2806371b52 | ||
|
|
cb6171a02c | ||
|
|
11eea9530d | ||
|
|
7bffffe8a1 | ||
|
|
f2ba460c73 | ||
|
|
7d70086b5e | ||
|
|
ba36d47c2f | ||
|
|
1a02139026 | ||
|
|
7bddc5cb7e | ||
|
|
b43ba1cf72 | ||
|
|
516cdf624c | ||
|
|
bb92690e39 | ||
|
|
2e5d968f99 | ||
|
|
9c109d1a10 | ||
|
|
2683850e20 | ||
|
|
cc6970c72d | ||
|
|
625691f2e4 | ||
|
|
082244d444 | ||
|
|
bec26c597d | ||
|
|
f08abd1c2a | ||
|
|
9c0fc6aeb1 | ||
|
|
3bf2441b05 | ||
|
|
8a1c841939 | ||
|
|
74316b9e3a | ||
|
|
2e4dacf97e | ||
|
|
ec1362a91e | ||
|
|
3c35334509 | ||
|
|
3e0385d4f5 | ||
|
|
9964bce0ed | ||
|
|
c5a2037571 | ||
|
|
eafe1e1fbf | ||
|
|
9c1cdbb10f | ||
|
|
8865beb983 | ||
|
|
9b745e2736 | ||
|
|
3711be36ef | ||
|
|
c3e90bb673 | ||
|
|
83bb8b3962 | ||
|
|
037c678fae | ||
|
|
1f7217f5bb | ||
|
|
e793587677 | ||
|
|
b7beb9450d | ||
|
|
612b51bdb4 | ||
|
|
75434a429a | ||
|
|
e780e1f765 | ||
|
|
6c71ee5493 | ||
|
|
3fc766085b | ||
|
|
460603f659 | ||
|
|
3e8d2d3ba3 | ||
|
|
01a9dcc36d | ||
|
|
0de23d0d9d | ||
|
|
eb8719a91b | ||
|
|
ae40cee917 | ||
|
|
1a4053810a | ||
|
|
d464d0a9b1 | ||
|
|
d78692c9d7 | ||
|
|
acc0372927 | ||
|
|
cbcfc30054 | ||
|
|
f9d51b3f99 | ||
|
|
b27096e9db | ||
|
|
6b0fc8f386 | ||
|
|
e5d5c98403 | ||
|
|
3f90a90564 | ||
|
|
37d1f820e5 | ||
|
|
a9ed69a15d | ||
|
|
908504e8b5 | ||
|
|
78ab913652 | ||
|
|
b6974fa0d6 | ||
|
|
af9eb8d82a | ||
|
|
c2e5de0d63 | ||
|
|
a4e4ac8b5a | ||
|
|
2c37f83c88 | ||
|
|
fa0e30bd83 | ||
|
|
02180816e0 | ||
|
|
42f5ac4b76 | ||
|
|
479f7163e0 | ||
|
|
3f82479094 | ||
|
|
f318492334 | ||
|
|
f8525792c0 | ||
|
|
3fb6e631db | ||
|
|
9c9483ac54 | ||
|
|
0384abc9af | ||
|
|
34e955f422 | ||
|
|
2b1d94939c | ||
|
|
c592fb0b5b | ||
|
|
bc3f74f826 | ||
|
|
e698c64624 | ||
|
|
de4a66fd25 | ||
|
|
c3df1d3255 | ||
|
|
df2b72b480 | ||
|
|
5f9e43abdb | ||
|
|
8a8026338e | ||
|
|
9229a2f952 | ||
|
|
74e4382452 | ||
|
|
04a2e44fba | ||
|
|
7c524d6cb6 | ||
|
|
02555f56a9 | ||
|
|
14c55def98 | ||
|
|
6af6d046ff | ||
|
|
125e159924 | ||
|
|
50e5b6400a | ||
|
|
571eef05e1 | ||
|
|
527b36aefa | ||
|
|
94548195c4 | ||
|
|
9f85eff8e5 | ||
|
|
c2ebb47a1c | ||
|
|
1ac79c2a90 | ||
|
|
2147d5cb65 | ||
|
|
ddfd6a2b67 | ||
|
|
524fc1a2a9 | ||
|
|
047fb41e04 | ||
|
|
46904b521d | ||
|
|
99b880545d | ||
|
|
af11ff8325 | ||
|
|
c40df8a32a | ||
|
|
c413586c7a | ||
|
|
f394bcd93b | ||
|
|
ee5866730d | ||
|
|
769451889f | ||
|
|
af32f8640f | ||
|
|
047c791d50 | ||
|
|
6fa05736a0 | ||
|
|
c4985e96ce | ||
|
|
12cda45fe8 | ||
|
|
0e8262c72d | ||
|
|
ad2cfc4ea3 | ||
|
|
007106d42d | ||
|
|
21193300d9 | ||
|
|
eb4c6eaea8 | ||
|
|
2304104a21 | ||
|
|
c06da57359 | ||
|
|
f5c83534fe | ||
|
|
45594cc560 | ||
|
|
59855d5ee0 | ||
|
|
d20e2c36d1 | ||
|
|
2f2f912745 | ||
|
|
c50682058f | ||
|
|
3efa2b915c |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
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."
|
||||||
|
}
|
||||||
@@ -0,0 +1,207 @@
|
|||||||
|
{
|
||||||
|
"source": "SELF",
|
||||||
|
"scope": "Closure metadata and receipt integrity only; independent read-only verification except this /tmp report",
|
||||||
|
"reviewer": "workflow_gate_audit",
|
||||||
|
"reviewed_at": "2026-10-07T03:25:21.422644+00:00",
|
||||||
|
"head": "8a8026338e3568943e02626f653524c8a7226941",
|
||||||
|
"base": "74e4382452a59fab598c09bb3ded96ff9495e153",
|
||||||
|
"result": "PASS",
|
||||||
|
"checks": [
|
||||||
|
{
|
||||||
|
"check": "closure_diff_scope",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": {
|
||||||
|
"head": "8a8026338e3568943e02626f653524c8a7226941",
|
||||||
|
"base": "74e4382452a59fab598c09bb3ded96ff9495e153",
|
||||||
|
"changed_paths": [
|
||||||
|
".task/archive/feature-iterative-delivery.md",
|
||||||
|
".task/feature-iterative-delivery.md"
|
||||||
|
],
|
||||||
|
"status": " M .task/archive/feature-iterative-delivery.md\n",
|
||||||
|
"stat": ".task/{ => archive}/feature-iterative-delivery.md | 413 +++++++++++++++++++++-\n 1 file changed, 401 insertions(+), 12 deletions(-)",
|
||||||
|
"uncommitted_only_appends_receipts": true,
|
||||||
|
"card_sha256": "7a898aa0d45a9ce75e862ea64a23fdd20e6fbf22510d0bbab3edc7e37dc6783d"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "all_receipt_checksums",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": {
|
||||||
|
"count": 29,
|
||||||
|
"source_values": [
|
||||||
|
"SELF"
|
||||||
|
],
|
||||||
|
"failed_receipt_ids": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "available_originals_equal",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": {
|
||||||
|
"matched_count": 24,
|
||||||
|
"without_separate_tmp_original": [
|
||||||
|
{
|
||||||
|
"receipt_sha256": "298bd599936b05ed105cfd1dcc7072915393dea050bdfa2b3e40ffacd5ba9145",
|
||||||
|
"command": "python3 /tmp/iterative-delivery-check-docs-20261007.py && git diff --check && bash -n scripts/task.sh scripts/hooks/post-merge"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"receipt_sha256": "b43f740acdb11127cf4b9218fbb5000e20ac9516fabcaad2fa707b42269eb9bc",
|
||||||
|
"command": "make task-sync"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"receipt_sha256": "d6cc055aacf7973c4d1b098585f0ad44e0a600e92e95677896761945d7ec6efa",
|
||||||
|
"command": "make task-sync"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"receipt_sha256": "646d460f8597fde2486cfa7eaf87cd7c089d7800a729fd087dc183a221790d59",
|
||||||
|
"command": "make task-sync"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"receipt_sha256": "908b6b049717604136ad43f72545653591fa103534a3c22a1603e87d14084e68",
|
||||||
|
"command": "make task-sync"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "three_red_results_restored_without_success_rewrite",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": [
|
||||||
|
{
|
||||||
|
"original": "iterative-delivery-red-20261007-tooling-01.json",
|
||||||
|
"receipt_sha256": "d1cefbefe5f188cb69c959b5707b384c8a2252b8835a4a727a9054488a1b0c00",
|
||||||
|
"equal": true,
|
||||||
|
"exit_code": 1,
|
||||||
|
"failed_output_retained": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"original": "iterative-delivery-red-20261007-tooling-02.json",
|
||||||
|
"receipt_sha256": "80b8169cf23cb2e3c1cf625950561365f47c013d5e930ca194605aaf248ce0e8",
|
||||||
|
"equal": true,
|
||||||
|
"exit_code": 1,
|
||||||
|
"failed_output_retained": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"original": "iterative-delivery-archive-link-red-20261007.json",
|
||||||
|
"receipt_sha256": "66fe51b5f69302232ff578266e6f4956e64a749cb77ae68512a1a87a1d1b95d2",
|
||||||
|
"equal": true,
|
||||||
|
"exit_code": 1,
|
||||||
|
"failed_output_retained": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "merged_receipts_preserved_except_documented_output_repair",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": {
|
||||||
|
"merged_receipt_count": 18,
|
||||||
|
"missing": [],
|
||||||
|
"changed": [
|
||||||
|
{
|
||||||
|
"receipt_sha256": "d1cefbefe5f188cb69c959b5707b384c8a2252b8835a4a727a9054488a1b0c00",
|
||||||
|
"changed_fields": [
|
||||||
|
"output"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"receipt_sha256": "80b8169cf23cb2e3c1cf625950561365f47c013d5e930ca194605aaf248ce0e8",
|
||||||
|
"changed_fields": [
|
||||||
|
"output"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"receipt_sha256": "66fe51b5f69302232ff578266e6f4956e64a749cb77ae68512a1a87a1d1b95d2",
|
||||||
|
"changed_fields": [
|
||||||
|
"output"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"added_count": 11
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "three_red_originals_match_pre_link_commit",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": {
|
||||||
|
"commit": "7c524d6cb6ff5d54d671edc5cea94eaaf5a10ceb",
|
||||||
|
"receipt_ids": [
|
||||||
|
"66fe51b5f69302232ff578266e6f4956e64a749cb77ae68512a1a87a1d1b95d2",
|
||||||
|
"80b8169cf23cb2e3c1cf625950561365f47c013d5e930ca194605aaf248ce0e8",
|
||||||
|
"d1cefbefe5f188cb69c959b5707b384c8a2252b8835a4a727a9054488a1b0c00"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "saved_ci_record_matches_merged_candidate",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": {
|
||||||
|
"expected_head": "04a2e44fbaa00f6782be24b312fb11a271c68d71",
|
||||||
|
"run": 997,
|
||||||
|
"job": 1383,
|
||||||
|
"runner": "home-runner",
|
||||||
|
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/actions/runs/997/jobs/1383",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"name": "make test (boundaries, pins, libs, core, backend, frontend, ui, agent-command)",
|
||||||
|
"conclusion": "success"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Build the single binary",
|
||||||
|
"conclusion": "success"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"record_source": "SELF captured API response; CI API not re-requested in this audit"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "finish_receipt_matches_current_local_and_remote_state",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": {
|
||||||
|
"receipt_sha256": "af87912fcd3c02e0e3dedb27da397ecc5d90abbf11b27337ebfe81e9cba4727a",
|
||||||
|
"exit_code": 0,
|
||||||
|
"after": null,
|
||||||
|
"after_error": "Git object could not be recorded: rev-parse --show-toplevel",
|
||||||
|
"task_worktree_exists": false,
|
||||||
|
"local_refs": "",
|
||||||
|
"ls_remote_output": "74e4382452a59fab598c09bb3ded96ff9495e153\trefs/heads/main\n",
|
||||||
|
"registered_worktrees": "worktree /home/weichen/projects/Agent-System-Dev\nHEAD 8a8026338e3568943e02626f653524c8a7226941\nbranch refs/heads/feature/card-close-20261007-031829Z\n\nworktree /home/weichen/projects/Agent-System-Dev-wt-feature-agent-stack-n1\nHEAD 6af6d046ff413b31d38cad0def629345ba85b53b\nbranch refs/heads/feature/agent-stack-n1\n\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "merged_tree_matches_tested_candidate",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": {
|
||||||
|
"candidate": "04a2e44fbaa00f6782be24b312fb11a271c68d71",
|
||||||
|
"merged": "74e4382452a59fab598c09bb3ded96ff9495e153",
|
||||||
|
"candidate_is_ancestor": true,
|
||||||
|
"tree_diff_paths": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "reviewed_snapshot_stable",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": {
|
||||||
|
"start_head": "8a8026338e3568943e02626f653524c8a7226941",
|
||||||
|
"end_head": "8a8026338e3568943e02626f653524c8a7226941",
|
||||||
|
"card_sha256": "7a898aa0d45a9ce75e862ea64a23fdd20e6fbf22510d0bbab3edc7e37dc6783d"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "uncommitted_card_change_only_appends_validated_receipts",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": {
|
||||||
|
"base_head": "8a8026338e3568943e02626f653524c8a7226941",
|
||||||
|
"appended_receipt_count": 1,
|
||||||
|
"card_sha256": "7a898aa0d45a9ce75e862ea64a23fdd20e6fbf22510d0bbab3edc7e37dc6783d"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"knownlimit": [
|
||||||
|
"No full governance, make test or make build rerun; this audit does not replace the earlier code review.",
|
||||||
|
"CI run/job data checked against captured original JSON and Git commit identity, not a new authenticated CI API query.",
|
||||||
|
"Checksums and available originals establish consistency, not authorship or trusted executor identity; this report remains SELF.",
|
||||||
|
"Other task worktree currently remains registered; this audit cannot prove every historical action in another session.",
|
||||||
|
"Report applies to the fixed reviewed HEAD and card SHA; later added receipts require their own integrity check.",
|
||||||
|
"One valid make task-sync receipt is appended after reviewed HEAD 8a80263 and is uncommitted; archive card SHA identifies the audited worktree content."
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,257 @@
|
|||||||
|
{
|
||||||
|
"status": "complete",
|
||||||
|
"verdict": "Ready with fixes",
|
||||||
|
"verdict_reason": "R1-R10 are addressed. One confirmed P3 needs a localized template/reference fix; there are no P0-P2 findings. This source review does not establish platform merge readiness: no GATE was verified.",
|
||||||
|
"scope": {
|
||||||
|
"mode": "branch-remote",
|
||||||
|
"base": "2147d5cb6566c301eaea3c65448bdda873093aea",
|
||||||
|
"branch": "feature/iterative-delivery",
|
||||||
|
"head_sha": "125e159924d90954c3bafc8572cc260e1e12eadc",
|
||||||
|
"pr_url": null,
|
||||||
|
"files_changed": 9
|
||||||
|
},
|
||||||
|
"intent": "Make Dev delivery iterative with ten stages and a requirements/fit table; default to stage-by-stage human review while honoring explicit scoped continuous authorization. Align generated task cards, entrypoint docs, and capability matrix; remove implicit task closure writes from post-merge without weakening safe cleanup or claiming manual approvals are machine verified.",
|
||||||
|
"intent_confidence": "explicit",
|
||||||
|
"reviewers": [
|
||||||
|
"correctness",
|
||||||
|
"project-standards",
|
||||||
|
"testing",
|
||||||
|
"agent-native",
|
||||||
|
"adversarial"
|
||||||
|
],
|
||||||
|
"findings": [
|
||||||
|
{
|
||||||
|
"#": 1,
|
||||||
|
"autofix_class": "gated_auto",
|
||||||
|
"confidence": 100,
|
||||||
|
"evidence": [
|
||||||
|
"scripts/task.sh:184 -- - 流程依据:[policy/delivery.md](../policy/delivery.md)",
|
||||||
|
"scripts/task.sh:322-340 -- card_backfill updates status and main record, then appends closure notes; it does not rewrite relative links.",
|
||||||
|
"scripts/task.sh:391 and 401 -- git mv \"$c\" \".task/archive/${c##*/}\"",
|
||||||
|
"git ls-tree 125e159924d90954c3bafc8572cc260e1e12eadc:.task contains no policy subtree; policy/delivery.md exists at repository root."
|
||||||
|
],
|
||||||
|
"file": "scripts/task.sh",
|
||||||
|
"first_evidence": "scripts/task.sh:184 -- - 流程依据:[policy/delivery.md](../policy/delivery.md)",
|
||||||
|
"independent_reviewers": [],
|
||||||
|
"line": 184,
|
||||||
|
"owner": "downstream-resolver",
|
||||||
|
"pre_existing": false,
|
||||||
|
"requires_verification": true,
|
||||||
|
"reviewers": [
|
||||||
|
"scope-audit"
|
||||||
|
],
|
||||||
|
"severity": "P3",
|
||||||
|
"suggested_fix": "Use a plain-text repository-root reference, such as 流程依据:仓库根目录 policy/delivery.md, in the generated card and update its template assertion. This keeps the reference meaningful in both active and archived cards without modifying the generic archive mechanism.",
|
||||||
|
"title": "Keep the delivery reference valid after task archival",
|
||||||
|
"why_it_matters": "Every newly generated card has a working link while stored in .task/, but normal task-close moves it into .task/archive/ and leaves the link unchanged. The link then resolves to the nonexistent .task/policy/delivery.md, so historical task cards lose their clickable policy reference. A plain-text repository-root reference avoids dependence on the card directory.",
|
||||||
|
"validation_status": "confirmed",
|
||||||
|
"validation_reason": "The diff newly adds scripts/task.sh:184's ../policy/delivery.md link, while scripts/task.sh:391 and :401 move every closed card from .task/ to .task/archive/ without rewriting it, so it resolves to the absent .task/policy/delivery.md at reviewed head (the root policy/delivery.md exists); this occurs whenever a new task card is closed, and tests/test_task.py:605 only checks the pre-archive form.",
|
||||||
|
"protected_subject": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actionable_findings": [
|
||||||
|
{
|
||||||
|
"#": 1,
|
||||||
|
"autofix_class": "gated_auto",
|
||||||
|
"confidence": 100,
|
||||||
|
"evidence": [
|
||||||
|
"scripts/task.sh:184 -- - 流程依据:[policy/delivery.md](../policy/delivery.md)",
|
||||||
|
"scripts/task.sh:322-340 -- card_backfill updates status and main record, then appends closure notes; it does not rewrite relative links.",
|
||||||
|
"scripts/task.sh:391 and 401 -- git mv \"$c\" \".task/archive/${c##*/}\"",
|
||||||
|
"git ls-tree 125e159924d90954c3bafc8572cc260e1e12eadc:.task contains no policy subtree; policy/delivery.md exists at repository root."
|
||||||
|
],
|
||||||
|
"file": "scripts/task.sh",
|
||||||
|
"first_evidence": "scripts/task.sh:184 -- - 流程依据:[policy/delivery.md](../policy/delivery.md)",
|
||||||
|
"independent_reviewers": [],
|
||||||
|
"line": 184,
|
||||||
|
"owner": "downstream-resolver",
|
||||||
|
"pre_existing": false,
|
||||||
|
"requires_verification": true,
|
||||||
|
"reviewers": [
|
||||||
|
"scope-audit"
|
||||||
|
],
|
||||||
|
"severity": "P3",
|
||||||
|
"suggested_fix": "Use a plain-text repository-root reference, such as 流程依据:仓库根目录 policy/delivery.md, in the generated card and update its template assertion. This keeps the reference meaningful in both active and archived cards without modifying the generic archive mechanism.",
|
||||||
|
"title": "Keep the delivery reference valid after task archival",
|
||||||
|
"why_it_matters": "Every newly generated card has a working link while stored in .task/, but normal task-close moves it into .task/archive/ and leaves the link unchanged. The link then resolves to the nonexistent .task/policy/delivery.md, so historical task cards lose their clickable policy reference. A plain-text repository-root reference avoids dependence on the card directory.",
|
||||||
|
"validation_status": "confirmed",
|
||||||
|
"validation_reason": "The diff newly adds scripts/task.sh:184's ../policy/delivery.md link, while scripts/task.sh:391 and :401 move every closed card from .task/ to .task/archive/ without rewriting it, so it resolves to the absent .task/policy/delivery.md at reviewed head (the root policy/delivery.md exists); this occurs whenever a new task card is closed, and tests/test_task.py:605 only checks the pre-archive form.",
|
||||||
|
"protected_subject": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"triage_groups": [],
|
||||||
|
"pre_existing_findings": [],
|
||||||
|
"requirements_completeness": {
|
||||||
|
"plan_source": "explicit",
|
||||||
|
"plan": ".task/feature-iterative-delivery.md",
|
||||||
|
"requirements": [
|
||||||
|
{
|
||||||
|
"id": "R1",
|
||||||
|
"status": "met",
|
||||||
|
"assessment": "Ten stages name their artifacts and exits.",
|
||||||
|
"evidence": "policy/delivery.md: stages and exits"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R2",
|
||||||
|
"status": "met",
|
||||||
|
"assessment": "Generated cards include stable requirement IDs, fit evidence, acceptance criteria and disposition.",
|
||||||
|
"evidence": "scripts/task.sh: requirement table"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R3",
|
||||||
|
"status": "met",
|
||||||
|
"assessment": "Manual review defaults and scoped continuous authorization are explicit; templates start unreviewed.",
|
||||||
|
"evidence": "policy/delivery.md: authorization; scripts/task.sh: stage review table"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R4",
|
||||||
|
"status": "met",
|
||||||
|
"assessment": "Design, implementation and test plans retain versioned approval objects, assumptions and verification methods.",
|
||||||
|
"evidence": "policy/delivery.md: stages, exploration and feedback loops"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R5",
|
||||||
|
"status": "met",
|
||||||
|
"assessment": "Four impact classes determine continuation, revision and renewed review.",
|
||||||
|
"evidence": "policy/delivery.md: feedback-loop impact table"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R6",
|
||||||
|
"status": "met",
|
||||||
|
"assessment": "Post-merge defaults to reminders; governance tests exercise real merge/pull without closure writes.",
|
||||||
|
"evidence": "scripts/hooks/post-merge; tests/test_task.py; independent local replay"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R7",
|
||||||
|
"status": "met",
|
||||||
|
"assessment": "Merge and cleanup exits preserve registered-workspace, writer and unique-file checks, with receipts outside deleted workspaces.",
|
||||||
|
"evidence": "policy/delivery.md: merge, cleanup and recovery; policy/governance.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R8",
|
||||||
|
"status": "met",
|
||||||
|
"assessment": "Entrypoint, adoption records, generated cards and capability classifications align; governance replay passed. Finding #1 is a narrow archival-reference defect.",
|
||||||
|
"evidence": "AGENTS.md; policy/adoption.md; policy/tool-adaptation-matrix.md; scripts/task.sh"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R9",
|
||||||
|
"status": "met",
|
||||||
|
"assessment": "Bounded experiments can precede complete design, with explicit approval and separate acceptance.",
|
||||||
|
"evidence": "policy/delivery.md: design exploration loop"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "R10",
|
||||||
|
"status": "met",
|
||||||
|
"assessment": "Incremental work records discoveries, adjustments, renewed review/tests, decisions, outcomes and stopping conditions.",
|
||||||
|
"evidence": "policy/delivery.md: feedback loops; scripts/task.sh: exploration and iteration table"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"implementation_units": []
|
||||||
|
},
|
||||||
|
"learnings": [],
|
||||||
|
"agent_native_gaps": [],
|
||||||
|
"deployment_notes": [],
|
||||||
|
"residual_risks": [],
|
||||||
|
"testing_gaps": [
|
||||||
|
"Full application suite and build were not rerun at the reviewed head; the reported earlier author run is not independently verified.",
|
||||||
|
"Remote PR CI and GATE identity/SHA were not verified.",
|
||||||
|
"The later uncommitted archival-reference fix and assertion were not reviewed or verified."
|
||||||
|
],
|
||||||
|
"coverage": {
|
||||||
|
"notes": [
|
||||||
|
"Reviewed only the nine-file diff between fixed base and head; main checkout source was not used for changed files. Full roster selected because instruction prose and changed tests rule out lite coverage.",
|
||||||
|
"Project standards used root AGENTS.md as instruction fallback; no CODING_STANDARDS.md applies. No matching solutions corpus or declared local pack was selected.",
|
||||||
|
"Independent replay by /root/delivery_review at fixed head 125e159924d90954c3bafc8572cc260e1e12eadc: make test-governance && git diff --check; exit 0, 104 tests passed. Receipt /tmp/iterative-delivery-review-replay-20261007.json remains source SELF; local evidence does not authenticate CI or reviewer identity.",
|
||||||
|
"Full application suite and build were not rerun by this review. Author reported they passed on 9454819 with only task metadata changed afterward; remote PR CI is not yet available and is not validated by this review.",
|
||||||
|
"Supplemental scope-audit is a non-independent source inspection; the five dispatched specialist reviewers returned no findings.",
|
||||||
|
"The root caller is preparing the minimal archival-reference fix outside the fixed review head. Review does not claim that uncommitted fix verified."
|
||||||
|
],
|
||||||
|
"reviewer_selection": [
|
||||||
|
{
|
||||||
|
"reviewer": "correctness",
|
||||||
|
"tier": "session",
|
||||||
|
"reason": "always-on"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"reviewer": "project-standards",
|
||||||
|
"tier": "mid",
|
||||||
|
"reason": "AGENTS.md governs all changed files"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"reviewer": "testing",
|
||||||
|
"tier": "mid",
|
||||||
|
"reason": "real-Git hook tests and generated task-card assertions changed"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"reviewer": "agent-native",
|
||||||
|
"tier": "mid",
|
||||||
|
"reason": "agent instructions, commands and task-card context changed"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"reviewer": "adversarial",
|
||||||
|
"tier": "session",
|
||||||
|
"reason": "post-merge persistence side effects and command composition changed"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"lite": false,
|
||||||
|
"cross_model": {
|
||||||
|
"outcome": "in-process-fallback",
|
||||||
|
"note": "Independent external cross-model pass not run: branch-remote scope uses the local adversarial reviewer against fixed refs. No code sent externally."
|
||||||
|
},
|
||||||
|
"validator": {
|
||||||
|
"outcome": "verdicts",
|
||||||
|
"batches": 1,
|
||||||
|
"confirmed": 1,
|
||||||
|
"rejected": 0,
|
||||||
|
"unresolved": 0,
|
||||||
|
"malformed": 0,
|
||||||
|
"failed": 0,
|
||||||
|
"shortcut_skipped": 0,
|
||||||
|
"shortcut_basis": "No verified independent cross-model corroboration.",
|
||||||
|
"bound_exceeded": false,
|
||||||
|
"results": [
|
||||||
|
{
|
||||||
|
"#": 1,
|
||||||
|
"status": "confirmed",
|
||||||
|
"protected_subject": null,
|
||||||
|
"reason": "The diff newly adds scripts/task.sh:184's ../policy/delivery.md link, while scripts/task.sh:391 and :401 move every closed card from .task/ to .task/archive/ without rewriting it, so it resolves to the absent .task/policy/delivery.md at reviewed head (the root policy/delivery.md exists); this occurs whenever a new task card is closed, and tests/test_task.py:605 only checks the pre-archive form."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"protected_subject_reclassifications": 0,
|
||||||
|
"degraded_blockers": []
|
||||||
|
},
|
||||||
|
"suppressed_by_confidence": {},
|
||||||
|
"malformed_findings": 0,
|
||||||
|
"malformed_returns": 0,
|
||||||
|
"mode_aware_demotions": 0,
|
||||||
|
"missing_first_evidence_demotions": 0,
|
||||||
|
"first_evidence_backfilled": 0,
|
||||||
|
"settlement_evaluated": true,
|
||||||
|
"settlement_suppressed": 0,
|
||||||
|
"non_independent_attributed_sources": [
|
||||||
|
"scope-audit"
|
||||||
|
],
|
||||||
|
"confidence_basis": "Direct fixed-head source evidence; no confidence promotion from scope-audit attribution or validator agreement.",
|
||||||
|
"independent_replay": {
|
||||||
|
"source": "SELF",
|
||||||
|
"reviewer": "/root/delivery_review",
|
||||||
|
"reviewer_identity_authenticated": false,
|
||||||
|
"head_sha": "125e159924d90954c3bafc8572cc260e1e12eadc",
|
||||||
|
"command": "make test-governance && git diff --check",
|
||||||
|
"exit_code": 0,
|
||||||
|
"tests_passed": 104,
|
||||||
|
"receipt": "/tmp/iterative-delivery-review-replay-20261007.json"
|
||||||
|
},
|
||||||
|
"gate_verified": false,
|
||||||
|
"failed_reviewers": [],
|
||||||
|
"bound_exceeded": [],
|
||||||
|
"compound_packs": {
|
||||||
|
"roots": [],
|
||||||
|
"errors": [],
|
||||||
|
"warnings": []
|
||||||
|
},
|
||||||
|
"apply": "Skipped: agent report-only; later author edits are outside the fixed review head."
|
||||||
|
},
|
||||||
|
"artifact_path": "/tmp/compound-engineering-1000/ce-code-review/20261007-025812-7b611869",
|
||||||
|
"run_id": "20261007-025812-7b611869"
|
||||||
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
{
|
||||||
|
"schema": "planning-index-readonly-followup/v1",
|
||||||
|
"source": "SELF",
|
||||||
|
"reviewer": "/root/planning_platform",
|
||||||
|
"reviewed_at": "2026-10-07T14:05:35.489168+00:00",
|
||||||
|
"scope": "仅复核前次P2及同次INDEX修订增量;复用前次完整复核,不重审全套",
|
||||||
|
"previous_report": "/tmp/planning-index-review-20261007.json",
|
||||||
|
"fixed_objects": {
|
||||||
|
"documents_before": "b87b92967387a7cd0d2a3c0be42f892e037dc29a",
|
||||||
|
"documents_reviewed": "f8cc211296bd52074b5727ea4cd0ad7160be6dac",
|
||||||
|
"changed_files": [
|
||||||
|
"docs/proposals/INDEX.md"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"verdict": "READY_FOR_USER_REVIEW",
|
||||||
|
"finding_resolution": [
|
||||||
|
{
|
||||||
|
"id": "PI-OWNER-1",
|
||||||
|
"previous_priority": "P2",
|
||||||
|
"status": "RESOLVED",
|
||||||
|
"evidence": [
|
||||||
|
"docs/proposals/INDEX.md:71-73 准确区分14份显式owner与5份缺项,并声明作者/PR账号不能代填",
|
||||||
|
"docs/proposals/INDEX.md:119 新增负责人缺项待确认行",
|
||||||
|
"固定SHA逐份检查19案:14份显式owner=weichen;双档/配置/跨会话/文件预览/N2五份未单列owner,文件预览第3行仅列作者"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"new_findings": [],
|
||||||
|
"checks": [
|
||||||
|
{
|
||||||
|
"name": "改动范围",
|
||||||
|
"result": "PASS",
|
||||||
|
"detail": "old..new只有INDEX变化;原19案与源JSON/receipt均未变"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "最小文档检查",
|
||||||
|
"result": "PASS",
|
||||||
|
"command": "python3 /tmp/planning-index-check-20261007.py",
|
||||||
|
"exit_code": 0,
|
||||||
|
"observed_summary": {
|
||||||
|
"proposals_covered": 19,
|
||||||
|
"dev_pin_files": 18,
|
||||||
|
"verified_pr_records": 55,
|
||||||
|
"merged_in_fixed_main": 54,
|
||||||
|
"source_proposals_unchanged": true,
|
||||||
|
"relative_links": "valid",
|
||||||
|
"source_receipt": "valid and equals snapshot"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "固定修订diff空白检查",
|
||||||
|
"result": "PASS",
|
||||||
|
"command": "git diff --check b87b92967387a7cd0d2a3c0be42f892e037dc29a f8cc211296bd52074b5727ea4cd0ad7160be6dac",
|
||||||
|
"exit_code": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "来源快照与本地组合测试范围",
|
||||||
|
"result": "PASS",
|
||||||
|
"evidence": "INDEX:33-35;未把make test当业务里程碑/用户流程/部署/下游验收"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "新增历史记录链接与标题",
|
||||||
|
"result": "PASS",
|
||||||
|
"evidence": "INDEX:51-52;固定SHA的历史P0-P5实施记录:1/8-15、双档实施记录:3/8-13与双档测试报告:1/3一致,仍明示不当当前验收"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "N2本地包含与正式采纳边界",
|
||||||
|
"result": "PASS",
|
||||||
|
"evidence": "INDEX:25-30 明确本地候选带入N2文件且正式采纳须协调在途#244,不等于批准业务实施"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"not_run": [
|
||||||
|
"未重复完整业务make test/build或浏览器、模型、数据库、部署、下游验收;主执行者当前测试不属于本审阅者证据",
|
||||||
|
"未联网刷新PR/API或核验人类批准记录;保留原带时间SELF快照边界",
|
||||||
|
"未重新完整评审未修改段落,沿用前次报告其余结论",
|
||||||
|
"未写项目文件、Git索引、提交或分支;未派代理"
|
||||||
|
],
|
||||||
|
"conclusion": "前次P2已解决;增量未引入新的实质问题。可提交用户审核,不表示已批准、可自行合入或业务已验收。"
|
||||||
|
}
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
{
|
||||||
|
"schema": "planning-index-readonly-review/v1",
|
||||||
|
"reviewed_at": "2026-10-07T13:56:53.817202+00:00",
|
||||||
|
"reviewer": "/root/planning_platform",
|
||||||
|
"source": "SELF",
|
||||||
|
"scope": "既有规划索引、入口和随附快照的有界只读文档复核;不评审业务实现,不替用户作产品裁定",
|
||||||
|
"fixed_objects": {
|
||||||
|
"dev_head": "92e54a8e23cfcc8a17f1ddab6105398fcb1ed0fa",
|
||||||
|
"documents_head": "b87b92967387a7cd0d2a3c0be42f892e037dc29a",
|
||||||
|
"documents_base": "5542319a0474fd4e866b6daacb937b587c833ede",
|
||||||
|
"dev_baseline": "eb0d4b5a499322a23155c8d89a024247f6e7830d",
|
||||||
|
"review_end_trees_clean_and_same_sha": true
|
||||||
|
},
|
||||||
|
"replay": {
|
||||||
|
"status": "PASS",
|
||||||
|
"receipt_path": "/tmp/planning-index-review-replay-20261007.json",
|
||||||
|
"receipt_sha256": "486c738ea57e9f3c037fea841833c7b7bb575dd59f7fe391e90a8f7a120f0f66",
|
||||||
|
"command": "python3 /tmp/planning-index-check-20261007.py && git diff --check",
|
||||||
|
"exit_code": 0,
|
||||||
|
"evidence_source": "SELF",
|
||||||
|
"observed_output": "{\"proposals_covered\": 19, \"dev_pin_files\": 18, \"verified_pr_records\": 55, \"merged_in_fixed_main\": 54, \"source_proposals_unchanged\": true, \"relative_links\": \"valid\", \"source_receipt\": \"valid and equals snapshot\"}\n"
|
||||||
|
},
|
||||||
|
"verdict": "REVISE_ONE_FACT_THEN_READY_FOR_USER_REVIEW",
|
||||||
|
"user_review_readiness": "修正 INDEX.md:68 的 owner 归属事实后,可提交用户审核;这项修正不需要新产品裁定。除此之外未发现阻碍既有规划索引用途的实质问题。",
|
||||||
|
"findings": [
|
||||||
|
{
|
||||||
|
"id": "PI-OWNER-1",
|
||||||
|
"priority": "P2",
|
||||||
|
"confidence": 100,
|
||||||
|
"category": "incorrect_source_attribution",
|
||||||
|
"location": {
|
||||||
|
"file": "modules/documents/docs/proposals/INDEX.md",
|
||||||
|
"line": 68
|
||||||
|
},
|
||||||
|
"title": "把未标注负责人和作者字段一并写成原文 owner",
|
||||||
|
"claim": "前 18 份原文 owner 均为 weichen。",
|
||||||
|
"consequence": "用户会把索引编者推定误认成规划原文的负责人声明,掩盖四份平台专题缺 owner 的事实;违背本轮要求保存原文状态与 owner,也与索引16–17行的禁止推断规则不一致。",
|
||||||
|
"evidence": [
|
||||||
|
{
|
||||||
|
"file": "docs/proposals/2026-09-30-dual-tier-storage-and-multitenancy.md",
|
||||||
|
"line": 3,
|
||||||
|
"text": "仅状态 accepted;全篇未单列 owner/负责人"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "docs/proposals/2026-09-30-configuration-surface.md",
|
||||||
|
"line": 3,
|
||||||
|
"text": "状态已批准,主任务 Backend feature/config-surface;全篇未单列 owner/负责人"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "docs/proposals/2026-09-30-cross-session-reading.md",
|
||||||
|
"line": 3,
|
||||||
|
"text": "状态已批准,主任务 Dev feature/cross-session-reading;全篇未单列 owner/负责人"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "docs/proposals/2026-09-30-file-preview-and-reserved-capabilities.md",
|
||||||
|
"line": 3,
|
||||||
|
"text": "作者:weichen + Agent;没有 owner 字段;作者不等于负责人声明"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "docs/proposals/INDEX.md",
|
||||||
|
"lines": "16-17",
|
||||||
|
"text": "不能仅凭任务创建人推断全部规划的负责人"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"recommended_change": "改为“原文显式标注 owner 的方案均为 weichen;双档存储、启动配置、跨会话读取未单列 owner,文件预览仅列作者,N2 亦未单列 owner,责任归属待补齐。”或者等价的限定表述。不要把任务卡 owner 回填成原文事实。",
|
||||||
|
"requires_new_product_decision": false,
|
||||||
|
"applied": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coverage": [
|
||||||
|
{
|
||||||
|
"check": "19份Markdown方案全覆盖、相对链接和PR链接匹配快照",
|
||||||
|
"result": "PASS",
|
||||||
|
"basis": "最小重放脚本;手读索引19行"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "源方案正文未改、前18份在Dev pin与Docs main中的blob相同",
|
||||||
|
"result": "PASS",
|
||||||
|
"basis": "重放逐文件hash-object;Docs基线diff仅README/INDEX/两份source JSON"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "角色与主从关系不按日期推定;harness未被栈总案整体作废",
|
||||||
|
"result": "PASS",
|
||||||
|
"basis": "harness:9、roadmap:58、stack-completion:6、N1Q1I1:4/7/315、N2:3、RDM:5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "原文声明、PR合入、人工批准、运行验收明确区分",
|
||||||
|
"result": "PASS_WITH_OWNER_FINDING",
|
||||||
|
"basis": "INDEX:21-35、43-66;快照55PR/54merged/reviews=[];owner唯一事实错误见PI-OWNER-1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "未把全部实现、全篇替代或尚未批准当统一结论",
|
||||||
|
"result": "PASS",
|
||||||
|
"basis": "INDEX:48-66、79-86、113;原文proposed仍保留,PR合入不被扩写成验收"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "N2不重复启动,已有在途Dev#244与Docs#42采纳顺序明确",
|
||||||
|
"result": "PASS",
|
||||||
|
"basis": "INDEX:66、85、88-89、119、127;Dev任务卡方案与计划节"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "已裁定但待同步与需新确认的差异分开",
|
||||||
|
"result": "PASS",
|
||||||
|
"basis": "INDEX:108-109先给统一区分;UI/auth页首与PPTX§5已有明文裁定;D25与新预览tab无明确例外;N1/Q1转出范围被保留为待核实"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "N1/Q1/I1/I2范围差异有实际文本支持",
|
||||||
|
"result": "PASS",
|
||||||
|
"basis": "N1卡:23-24/40/42;Q1卡:26/76-78对案WP5与验收;I1卡:77;I2卡:18/77;N1Q1I1案:315"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "RDM里程碑与依赖是规划目标,不按历史零功能快照推断现状",
|
||||||
|
"result": "PASS",
|
||||||
|
"basis": "INDEX:93-104;RDM:22-27/123-169,P3降级边界见162"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"check": "只改授权文档范围与入口",
|
||||||
|
"result": "PASS",
|
||||||
|
"basis": "Dev diff为PROJECT/Docs gitlink/本任务卡;Docs diff为README/INDEX/两份source JSON;原有19案均不变"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"not_run": [
|
||||||
|
"未重跑业务make test/make build或浏览器/模型/数据库/部署/下游验收;主执行者已有组合测试声明不提升为本审阅者重放结果",
|
||||||
|
"未重新联网读取PR/API;本次验证快照与收据一致性和相关本地文档,远端状态采用明确标时的作者SELF快照,不当作本审阅实时确认",
|
||||||
|
"未读取外部further-objective、RDM下游仓或IDE私有计划",
|
||||||
|
"未验证全部功能是否实现、批准会话真实性或CI执行身份;只核对索引没有过度声称",
|
||||||
|
"未修订任何项目文件/原文/分支/git索引;未新增代理"
|
||||||
|
],
|
||||||
|
"skill_use": {
|
||||||
|
"skill": "ce-doc-review",
|
||||||
|
"adaptation": "委托限定单审阅者只读并输出JSON,因此本地做一致性与可执行性核对,不分发persona、不应用修改、不询问用户"
|
||||||
|
},
|
||||||
|
"other_substantive_findings": 0
|
||||||
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
# Agent 工作说明(Agent-System-Dev)
|
# Agent 工作说明(Agent-System-Dev)
|
||||||
|
|
||||||
本仓开发遵循 Development-Guidelines(见 `deps/development-guidelines`,gitlink 固定版本):
|
本仓开发遵循 Development-Guidelines(见 `deps/development-guidelines`,gitlink 固定版本):
|
||||||
核心规则与术语见其 `core/`,按任务触发阅读 `standards/` 专题;日常交付走 `workflows/delivery.md`。
|
核心规则与术语见其 `core/`,按任务触发阅读 `standards/` 专题;通用交付依据为 `workflows/delivery.md`。
|
||||||
|
本项目的需求、设计试验、实施调整及交付**必读 [policy/delivery.md](policy/delivery.md)**:
|
||||||
|
默认逐阶段人工评审,阶段内迭代、按影响回退;仅在用户明确授权范围内连续推进。
|
||||||
|
|
||||||
## UI 设计门禁(强制)
|
## UI 设计门禁(强制)
|
||||||
|
|
||||||
@@ -37,9 +39,8 @@
|
|||||||
`make task-finish ABANDON="--abandon <原因>"` 并记录原因;放弃不豁免现场保护。
|
`make task-finish ABANDON="--abandon <原因>"` 并记录原因;放弃不豁免现场保护。
|
||||||
- **任务卡闭合(防欠账)**:分支合入 main 后,其任务卡须回填"已完成"+主记录 PR 链接并
|
- **任务卡闭合(防欠账)**:分支合入 main 后,其任务卡须回填"已完成"+主记录 PR 链接并
|
||||||
归档至 `.task/archive/`。`task-finish` 回收后提示所有者运行 `make task-close`,不借回收修改
|
归档至 `.task/archive/`。`task-finish` 回收后提示所有者运行 `make task-close`,不借回收修改
|
||||||
共享主检出或推送另一任务。自动路径保留主检出 pull 触发 post-merge
|
共享主检出或推送另一任务。主检出 pull/merge 的 post-merge 钩子仅提示待办,不自动写入或推送。
|
||||||
钩子(实测 ff-only pull 也触发);钩子内 close 只扫主检出本地 `.task/`,远端刚合入的卡片
|
`make task-close` 会提交、推送并可能创建 PR,须先核对闭合范围和对应授权。闭合在主检出运行→建
|
||||||
要等 pull 完成才能被看到,扫不到时由手动 `make task-close` 兜底。手动闭合在主检出运行→建
|
|
||||||
`feature/card-close-*` 分支+PR,任务分支内加 `FOLD=--fold` 随当前 PR 合入。
|
`feature/card-close-*` 分支+PR,任务分支内加 `FOLD=--fold` 随当前 PR 合入。
|
||||||
precheck 的 `[cards]` 行报告欠账,验收前应清零;闭合 PR 由所有者合入。
|
precheck 的 `[cards]` 行报告欠账,验收前应清零;闭合 PR 由所有者合入。
|
||||||
|
|
||||||
@@ -102,5 +103,5 @@
|
|||||||
- **SSH key**:`~/.ssh/home_gitea`(ED25519,公钥指纹
|
- **SSH key**:`~/.ssh/home_gitea`(ED25519,公钥指纹
|
||||||
`SHA256:GYXaOXIMeloQ1fKSfdJ/ndgPQzs/Ix7Hk62ekfkfQ20`,Gitea 侧密钥名 GMKtec);
|
`SHA256:GYXaOXIMeloQ1fKSfdJ/ndgPQzs/Ix7Hk62ekfkfQ20`,Gitea 侧密钥名 GMKtec);
|
||||||
`~/.ssh/config` 已有 `git-ssh.u1680832.nyat.app` 主机条目,克隆/推送直接可用。
|
`~/.ssh/config` 已有 `git-ssh.u1680832.nyat.app` 主机条目,克隆/推送直接可用。
|
||||||
- 任务卡闭合 PR(`make task-close` / `task-finish` 自动闭合)经 API 建 PR 时以
|
- 任务卡闭合 PR(获授权后运行 `make task-close`)经 API 建 PR 时以
|
||||||
`GITEA_TOKEN` 环境变量传入同上的 token。
|
`GITEA_TOKEN` 环境变量传入同上的 token。
|
||||||
|
|||||||
@@ -4,6 +4,14 @@
|
|||||||
- 组合:modules/{core,backend,frontend,ui,documents} + deps/{development-guidelines,agent-native,agent-squad,agent-intent,agent-command,error-code-system,logging-system}。
|
- 组合:modules/{core,backend,frontend,ui,documents} + deps/{development-guidelines,agent-native,agent-squad,agent-intent,agent-command,error-code-system,logging-system}。
|
||||||
- 部署:非容器;Releases 仓从本仓固定提交导出版本。
|
- 部署:非容器;Releases 仓从本仓固定提交导出版本。
|
||||||
|
|
||||||
|
## 方向与规划入口
|
||||||
|
|
||||||
|
长期方向、目标及跨任务规划从过程仓的 [项目方向与规划索引](modules/documents/docs/proposals/INDEX.md)
|
||||||
|
查找主记录、里程碑和关联任务;原始正文沿用 [方案与规划目录](modules/documents/docs/proposals/)。
|
||||||
|
确立或调整具体方向时,在本入口维护其主记录链接;正文、确认依据和进展仍以该主记录为准。
|
||||||
|
目录中的既有文档不因被收录而自动成为已批准规划。记录、任务关联及收尾建议按
|
||||||
|
[交付规范的长期方向与任务衔接](policy/delivery.md#长期方向与任务衔接) 执行。
|
||||||
|
|
||||||
## 验证
|
## 验证
|
||||||
|
|
||||||
`make test` 先核对子模块工作树与固定指针,再运行治理脚本、公开边界、跨仓指针、库及各模块
|
`make test` 先核对子模块工作树与固定指针,再运行治理脚本、公开边界、跨仓指针、库及各模块
|
||||||
|
|||||||
Vendored
+1
-1
Submodule deps/agent-intent updated: 65aaebca1e...343b1e6d9a
Vendored
+1
-1
Submodule deps/agent-native updated: 3a110a728c...37c5e6fbd6
Vendored
+1
-1
Submodule deps/agent-squad updated: 5a57636cc0...819b0c5f82
@@ -88,6 +88,9 @@ func (f fakeHost) ArtifactGet(artifactID string) (core.Artifact, error) {
|
|||||||
return core.Artifact{}, errors.New("not found")
|
return core.Artifact{}, errors.New("not found")
|
||||||
}
|
}
|
||||||
func (f fakeHost) ArtifactContent(artifactID string) ([]byte, error) { return nil, nil }
|
func (f fakeHost) ArtifactContent(artifactID string) ([]byte, error) { return nil, nil }
|
||||||
|
func (f fakeHost) ParseDocument(ctx context.Context, filename, mime string, content []byte) (core.ParsedDocument, error) {
|
||||||
|
return core.ParsedDocument{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func TestRdmPingHandler(t *testing.T) {
|
func TestRdmPingHandler(t *testing.T) {
|
||||||
out, err := rdmPing(context.Background(), fakeHost{owner: "alice"}, extension.Request{
|
out, err := rdmPing(context.Background(), fakeHost{owner: "alice"}, extension.Request{
|
||||||
|
|||||||
+1
-1
Submodule modules/backend updated: cb26e4c947...f1c9cc0644
+1
-1
Submodule modules/core updated: 0b5c7747a3...a253a40b8e
+1
-1
Submodule modules/documents updated: 19e89ae10b...d3c9b4554e
+1
-1
Submodule modules/frontend updated: 50c7244601...84b73ab328
+1
-1
Submodule modules/ui updated: 27d5adb5c6...76d6633736
@@ -16,6 +16,7 @@
|
|||||||
| standards/verification.md | 验收 | 本地 make test-governance + 组合测试;当前证据与历史 scratch 记录分开 |
|
| standards/verification.md | 验收 | 本地 make test-governance + 组合测试;当前证据与历史 scratch 记录分开 |
|
||||||
| standards/multi-repo.md | 跨仓/gitlink | manual;受控历史迁移通道已于 2026-09-30 行使一次(documents/records/2026-09-30-history-migration.md) |
|
| standards/multi-repo.md | 跨仓/gitlink | manual;受控历史迁移通道已于 2026-09-30 行使一次(documents/records/2026-09-30-history-migration.md) |
|
||||||
| 工作区回收 | 交付终点 | advisory(task-finish);负例:合入前 finish 拒绝输出 |
|
| 工作区回收 | 交付终点 | advisory(task-finish);负例:合入前 finish 拒绝输出 |
|
||||||
|
| 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 逐行定级+正负例证据) |
|
| 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 |
|
| 同上(zcode 实例) | zcode 客户端写路径 | policy/tool-adaptation-zcode.md:PreToolUse 写守卫;脚本负例与客户端接线分开,客户端 pending-live |
|
||||||
| core/baseline.md「规范层级」+ documentation.md「记忆分层/机制化」(draft.9) | 层级效力、记忆权威、经验机制化 | manual:本仓 policy/ 仅收紧不放宽;记忆四层按条文执行(任务卡=任务记忆,documents/records=项目记忆,Dev 仓 AGENTS.md 指针已就位) |
|
| core/baseline.md「规范层级」+ documentation.md「记忆分层/机制化」(draft.9) | 层级效力、记忆权威、经验机制化 | manual:本仓 policy/ 仅收紧不放宽;记忆四层按条文执行(任务卡=任务记忆,documents/records=项目记忆,Dev 仓 AGENTS.md 指针已就位) |
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
| 原规则/章节 | 项目采用方式 | 原因与风险 | 负责人/复查条件 |
|
| 原规则/章节 | 项目采用方式 | 原因与风险 | 负责人/复查条件 |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| baseline 硬边界 1(授权范围) | 高后果双钥匙:改写历史/解除分支保护/删归档/发布——Agent 只准备,用户执行(AGENTS.md 条文) | 单人+Agent 场景下消除单点;风险=用户不在场时高后果操作排队 | weichen;首次触发时复查 |
|
| baseline 硬边界 1(授权范围) | 高后果双钥匙:改写历史/解除分支保护/删归档/发布——Agent 只准备,用户执行(AGENTS.md 条文) | 单人+Agent 场景下消除单点;风险=用户不在场时高后果操作排队 | weichen;首次触发时复查 |
|
||||||
|
| delivery.md §2、design-verification.md 的轻量流程默认做法 | 按 [policy/delivery.md](delivery.md) 默认逐阶段人工评审;小任务简化篇幅,阶段内可迭代;明确授权时在指定范围连续推进 | 保留需求、方案和实施决策权;按变化影响重审,避免每条命令审批及全流程重复返工 | weichen;阶段等待或试验边界影响交付时复查 |
|
||||||
|
|
||||||
- 历史记录(2026-09-30)报告 11 个组合仓 main 禁直推、拒绝陈旧候选;当前平台能力须独立重验,本地脚本测试不替代远端证据。
|
- 历史记录(2026-09-30)报告 11 个组合仓 main 禁直推、拒绝陈旧候选;当前平台能力须独立重验,本地脚本测试不替代远端证据。
|
||||||
- 当前规范内容以 gitlink 及其 VERSION 为准。治理可靠性修复的命令与证据约定见 [开发门禁](governance.md),本地与客户端/平台能力分别登记;本轮不改变分支保护、发布授权或通用库版本。
|
- 当前规范内容以 gitlink 及其 VERSION 为准。治理可靠性修复的命令与证据约定见 [开发门禁](governance.md),本地与客户端/平台能力分别登记;本轮不改变分支保护、发布授权或通用库版本。
|
||||||
|
|||||||
@@ -4,7 +4,9 @@
|
|||||||
"backend/app backend/cmdbus",
|
"backend/app backend/cmdbus",
|
||||||
"backend/app backend/config",
|
"backend/app backend/config",
|
||||||
"backend/app backend/hostapi",
|
"backend/app backend/hostapi",
|
||||||
|
"backend/app backend/ingest",
|
||||||
"backend/app backend/intentgate",
|
"backend/app backend/intentgate",
|
||||||
|
"backend/app backend/intentsem",
|
||||||
"backend/app backend/pgbus",
|
"backend/app backend/pgbus",
|
||||||
"backend/app backend/plugins",
|
"backend/app backend/plugins",
|
||||||
"backend/app backend/profiles",
|
"backend/app backend/profiles",
|
||||||
@@ -26,16 +28,20 @@
|
|||||||
"backend/pgbus backend/store",
|
"backend/pgbus backend/store",
|
||||||
"backend/plugins backend/settings",
|
"backend/plugins backend/settings",
|
||||||
"backend/plugins backend/store",
|
"backend/plugins backend/store",
|
||||||
|
"backend/plugins backend/skills",
|
||||||
"backend/plugins backend/tools",
|
"backend/plugins backend/tools",
|
||||||
"backend/plugins backend/workflow",
|
"backend/plugins backend/workflow",
|
||||||
"backend/profiles backend/store",
|
"backend/profiles backend/store",
|
||||||
"backend/prompts backend/store",
|
"backend/prompts backend/store",
|
||||||
"backend/rag backend/settings",
|
"backend/rag backend/settings",
|
||||||
"backend/rag backend/store",
|
"backend/rag backend/store",
|
||||||
|
"backend/route backend/intentgate",
|
||||||
"backend/runmgr backend/bus",
|
"backend/runmgr backend/bus",
|
||||||
"backend/runmgr backend/cardsvc",
|
"backend/runmgr backend/cardsvc",
|
||||||
"backend/runmgr backend/ingest",
|
"backend/runmgr backend/ingest",
|
||||||
|
"backend/runmgr backend/intentgate",
|
||||||
"backend/runmgr backend/profiles",
|
"backend/runmgr backend/profiles",
|
||||||
|
"backend/runmgr backend/route",
|
||||||
"backend/runmgr backend/runtime",
|
"backend/runmgr backend/runtime",
|
||||||
"backend/runmgr backend/settings",
|
"backend/runmgr backend/settings",
|
||||||
"backend/runmgr backend/store",
|
"backend/runmgr backend/store",
|
||||||
@@ -46,7 +52,7 @@
|
|||||||
"backend/runtime backend/prompts",
|
"backend/runtime backend/prompts",
|
||||||
"backend/runtime backend/quality",
|
"backend/runtime backend/quality",
|
||||||
"backend/runtime backend/squadadapter",
|
"backend/runtime backend/squadadapter",
|
||||||
"backend/runtime backend/tools",
|
"backend/runtime backend/wfcompile",
|
||||||
"backend/runtime backend/workflow",
|
"backend/runtime backend/workflow",
|
||||||
"backend/server backend/cardsvc",
|
"backend/server backend/cardsvc",
|
||||||
"backend/server backend/cmdbus",
|
"backend/server backend/cmdbus",
|
||||||
@@ -56,6 +62,7 @@
|
|||||||
"backend/server backend/profiles",
|
"backend/server backend/profiles",
|
||||||
"backend/server backend/prompts",
|
"backend/server backend/prompts",
|
||||||
"backend/server backend/ratelimit",
|
"backend/server backend/ratelimit",
|
||||||
|
"backend/server backend/route",
|
||||||
"backend/server backend/runmgr",
|
"backend/server backend/runmgr",
|
||||||
"backend/server backend/settings",
|
"backend/server backend/settings",
|
||||||
"backend/server backend/store",
|
"backend/server backend/store",
|
||||||
@@ -65,6 +72,8 @@
|
|||||||
"backend/squadadapter backend/quality",
|
"backend/squadadapter backend/quality",
|
||||||
"backend/store backend/blobstore",
|
"backend/store backend/blobstore",
|
||||||
"backend/tools backend/quality",
|
"backend/tools backend/quality",
|
||||||
|
"backend/wfcompile backend/tools",
|
||||||
|
"backend/wfcompile backend/workflow",
|
||||||
"frontend/app frontend/components",
|
"frontend/app frontend/components",
|
||||||
"frontend/components frontend/app"
|
"frontend/components frontend/app"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -0,0 +1,141 @@
|
|||||||
|
# 需求、试验与迭代交付
|
||||||
|
|
||||||
|
适用:本项目的需求、修复、规范修改和其他交付任务。依据固定版本的
|
||||||
|
[通用交付流程](../deps/development-guidelines/workflows/delivery.md),本项目收紧为
|
||||||
|
**默认逐阶段人工评审;阶段内迭代,按影响回退,按增量交付**。
|
||||||
|
本文件是阶段与评审的权威表述;启动、同步、命令证据和回收操作见
|
||||||
|
[开发门禁](governance.md)。规则的执行能力见 [能力矩阵](tool-adaptation-matrix.md)。
|
||||||
|
|
||||||
|
## 授权与阶段评审
|
||||||
|
|
||||||
|
任务卡默认记为 `manual`。完成当前阶段产物并取得人工评审结论后,才进入下一阶段。
|
||||||
|
评审记录包含阶段、对象版本、评审人、时间、结论、意见及可追溯依据;结论使用
|
||||||
|
未评审、通过、需修改、拒绝、不适用。人工结论与命令执行证据分开记录;Agent 自审、
|
||||||
|
测试通过、工具写入或用户沉默均不能代替人工批准,也不能由作者代签独立审核。
|
||||||
|
|
||||||
|
只有用户明确要求自动或连续推进时,才将对应范围记为 `authorized-continuous`,记录
|
||||||
|
授权来源、覆盖阶段、允许动作、交付终点、资源约束和停止条件。未覆盖阶段仍逐阶段评审。
|
||||||
|
授权连续推进不免除需求分析、试验判定、测试、代码 Review、证据和平台准入;
|
||||||
|
既有独立审核要求及高后果操作双钥匙仍有效。单独的合入授权不补齐尚不存在的前序产物。
|
||||||
|
|
||||||
|
阶段内已授权的调查、编辑、自检、缺陷修复和等价实现可以持续进行,无需逐命令批准。
|
||||||
|
需求拆解、评估、需求表可以共用一份任务卡,但分别保留阶段结论。小任务缩短篇幅;
|
||||||
|
确实不适用的内容说明原因,经人工确认或在明确授权的裁剪范围内处理,不能静默跳步。
|
||||||
|
任务启动检查、独立工作区和收据用于准备现场,不表示任何阶段评审已通过。
|
||||||
|
|
||||||
|
## 阶段与出口
|
||||||
|
|
||||||
|
| 阶段 | 必需产物 | 进入下一阶段的条件 |
|
||||||
|
|---|---|---|
|
||||||
|
| 1 需求拆解 | 目标、用户场景、子需求、边界、非目标及待澄清问题 | 人工确认拆解与原始意图一致 |
|
||||||
|
| 2 需求评估 | 价值、可行性、成本、风险、依赖、现有能力及在途任务重叠;与项目定位、模块职责和公开契约的符合度 | 人工确认取舍;重大未知转入下述受控试验 |
|
||||||
|
| 3 需求表确认 | 稳定 ID、描述、适配依据、优先级、可判定验收条件、依赖和处理结论 | 人工确认本增量范围;影响实施的关键待核实项已处理 |
|
||||||
|
| 4 方案设计 | 推荐方案与主要备选、职责和接口、数据与权限影响、失败恢复、待验证假设及试验结论 | 人工批准当前方案版本及剩余风险处理方式 |
|
||||||
|
| 5 实施计划 | 关联需求的工作项、依赖顺序、责任人、文件或模块范围、测试方法与环境、完成条件及停止条件 | 人工批准当前实施和测试计划;远期工作可保留粗粒度 |
|
||||||
|
| 6 实施与自检 | 可审查变更、局部测试、计划偏差与迭代记录 | 人工确认当前增量实现产物,必要设计调整已重新获批 |
|
||||||
|
| 7 正式测试与验收 | 需求到证据映射;正常、异常、边界、回归结果及缺项 | 人工审阅当前候选的验证结果;正式验收前同步并固定被测对象 |
|
||||||
|
| 8 代码 Review | 需求符合性、正确性、维护性、测试充分性及问题闭合记录 | 完成必要重放、整改、补测和复审,由有权评审者放行当前版本 |
|
||||||
|
| 9 合入 | 最新 base/head、必要检查及评审、冲突处置、合入授权 | 合入前再次同步核验;经 PR 合入后取得真实合入结果 |
|
||||||
|
| 10 合入核验与收口 | 实际合入内容及组件版本、验证依据、成果保存位置、写者状态、清理清单、任务归档安排及适用规划的进展与下一步建议 | 清理前取得人工批准或对应连续推进授权;安全回收后核对结果、闭合任务卡 |
|
||||||
|
|
||||||
|
表中的人工节点仅在明确的连续推进授权范围内按授权执行;阶段产物及验证条件保留。
|
||||||
|
正式测试和最终 Review 的顺序不限制设计阶段试验、实施期测试或提前审阅。
|
||||||
|
文本合并无冲突不证明组合兼容;合入后仍核验真实内容与被测候选是否一致。
|
||||||
|
|
||||||
|
## 长期方向与任务衔接
|
||||||
|
|
||||||
|
用户提出大方向、长期目标或跨任务规划时,必须在项目中留存可接续的主记录,不能仅保留
|
||||||
|
在聊天、IDE 私有计划或执行者记忆中。优先更新已有相关规划;确需新文档时,沿用
|
||||||
|
过程仓的 `modules/documents/docs/proposals/`,并在 [项目入口](../PROJECT.md) 提供链接。
|
||||||
|
正文只维护一处,任务卡和其他入口引用文档及版本,不复制另一份规划状态。
|
||||||
|
|
||||||
|
主记录至少包括:目标及背景、范围及成功标准、阶段或里程碑、关联方案和任务、来源、
|
||||||
|
负责人、确认状态、推进状态及更新时间。只有方向时可以先写简短目标记录,未知项标待定。
|
||||||
|
未确认的想法标“待确认”;确认依据与版本另记,不能由“已记录”推断“已批准”。
|
||||||
|
方向、范围或优先级调整时保留原决定、变更原因及批准依据,更新受影响的方案和任务引用。
|
||||||
|
|
||||||
|
启动或恢复相关任务时,先读取适用方向及规划的当前有效版本,核对本任务所属里程碑、
|
||||||
|
已有实现和在途任务。多个规划相互冲突或优先级不明时,记录冲突并提交人工决定,
|
||||||
|
不凭文档标题、日期或本地旧副本擅自选择权威。
|
||||||
|
|
||||||
|
任务完成时,如果存在适用方案或规划,必须依据实际结果更新其进展,并在任务主记录和
|
||||||
|
最终交付说明中给出下一步任务建议:
|
||||||
|
|
||||||
|
- 说明本任务推进了哪个目标或里程碑,以及剩余差距;区分已实现、已验证、已合入和已部署。
|
||||||
|
- 优先推荐一个下一任务,说明要解决的问题、关联规划及版本、推荐理由和优先顺序依据。
|
||||||
|
- 写明前置条件、依赖、待确认事项、预期产物和可判定验收条件;必要时补充备选及取舍。
|
||||||
|
- 建议前核对已有或在途任务;已有任务覆盖时引用该任务及待续办内容,避免重复安排。
|
||||||
|
- 无适用规划或规划已经完成时如实说明;存在阻塞时列出阻塞条件,优先建议澄清、验证假设
|
||||||
|
或解除阻塞的任务,不为凑出下一步虚构工作。
|
||||||
|
|
||||||
|
进展更新和建议属于当前任务的收尾产物。跨仓更新遵循对应工作区、版本和评审要求;
|
||||||
|
更新尚未获批或合入时,任务卡保留待更新内容、负责人和下一动作,不能声称原规划已更新。
|
||||||
|
**下一步建议不等于启动授权**:没有覆盖该任务的明确授权,建议停留在待确认状态;
|
||||||
|
当前任务的完成、批准或连续推进授权不自动扩展到新任务。
|
||||||
|
|
||||||
|
## 需求表与追溯
|
||||||
|
|
||||||
|
需求表以任务卡为主记录。项目符合度使用“符合 / 需调整后符合 / 不符合 / 待核实”,
|
||||||
|
附当前源码、项目约束或实测依据。处理结论使用“纳入本增量 / 后续处理 / 拒绝 / 待定”,
|
||||||
|
与符合度分开;关键依据缺失时保留待核实,不凭推测判定通过。
|
||||||
|
|
||||||
|
每个纳入实施的需求必须能追溯到:
|
||||||
|
|
||||||
|
`需求 ID 与验收条件 → 方案及工作项 → 测试或审阅方法 → 当前版本结果与证据`。
|
||||||
|
|
||||||
|
没有可判定验收方法的需求先澄清;待定或不符合的需求未经重新评审不得进入正式实施。
|
||||||
|
跨模块、权限、持久化、异步和恢复需求按实际风险补充真实链路及故障场景。
|
||||||
|
规范和文档任务采用差异、链接、规则一致性及相关工具行为检查,不制造无关业务测试。
|
||||||
|
|
||||||
|
## 设计探索循环
|
||||||
|
|
||||||
|
需求分析和设计阶段允许先试验再完善方案,无须先批准尚未能确定的完整设计。
|
||||||
|
执行试验前提交最小试验计划:待回答的问题或假设、对象和隔离环境、方法、预期判据、
|
||||||
|
允许副作用、时间或成本边界、停止条件及产物保存或处置方式,并取得人工批准;
|
||||||
|
已有连续推进授权明确覆盖该试验范围时,引用该授权。
|
||||||
|
|
||||||
|
在已批准范围内可以反复尝试:
|
||||||
|
|
||||||
|
`初步方案 → 批准试验范围 → 原型或测试 → 分析证据 → 修订方案与计划 → 结果评审`。
|
||||||
|
|
||||||
|
记录成功、失败及不确定结果,以及下一步继续探索、采用、换方案或暂停的理由。
|
||||||
|
超出范围、触及未授权共享环境、达到预算或持续无有效进展时,暂停受影响试验并提交决策。
|
||||||
|
无需强求全部未知一次消除;影响下一步的关键假设必须有结论,其余风险有责任人与处理安排。
|
||||||
|
|
||||||
|
原型标明用途和限制,不自动成为正式实现。决定复用时纳入方案、计划、代码 Review 与正式验证。
|
||||||
|
试验成功仅证明相应假设,不能替代验收;失败结果用于调整方案,不能静默降低验收标准。
|
||||||
|
|
||||||
|
## 实施、测试与 Review 的反馈循环
|
||||||
|
|
||||||
|
按可独立验证的增量推进;近期工作细化到可执行,后续工作根据证据逐步细化。
|
||||||
|
每轮形成“发现与证据 → 原假设或困难 → 调整及影响 → 重审和补测范围 → 决策 → 结果”。
|
||||||
|
记录放在同一任务卡,较长材料只引用文件或 PR,避免多份状态。
|
||||||
|
|
||||||
|
| 变化 | 执行动作与评审边界 |
|
||||||
|
|---|---|
|
||||||
|
| 已批准范围内的内部组织、等价实现、局部缺陷修正 | 当前阶段继续调整、自测并记录;阶段出口统一人工评审 |
|
||||||
|
| 技术路线、模块职责、公开契约、数据或权限设计、外部影响,或计划的关键依赖、交付顺序和资源约束变化 | 暂停受影响工作,修订方案或计划,经人工重审后继续;已有明确授权覆盖该类调整时按其边界执行 |
|
||||||
|
| 目标、范围、优先级或验收条件变化 | 返回需求评估和需求表,取得对应批准后更新下游方案、计划和验证 |
|
||||||
|
| 影响不明 | 先调查;仍无法判定时提交人工决定,不自行归入细节调整 |
|
||||||
|
|
||||||
|
未受影响且已有授权的工作可以继续。测试或 Review 发现实现缺陷,返回实施修复;
|
||||||
|
发现设计缺陷返回方案;发现需求理解错误返回需求阶段。只重走受影响环节,并说明
|
||||||
|
未重走部分为何仍有效。新版本不能沿用已受影响的批准、测试或 Review 结论。
|
||||||
|
|
||||||
|
批准对象使用文档修订或提交标识;正式验证固定源码、组件组合与相关配置。
|
||||||
|
对 head/base、依赖、需求或契约变化重新判断证据及评审的有效性,按影响补测和复审。
|
||||||
|
阶段状态、测试状态、代码审核状态及合入状态分别记录,不以一个“完成”互相替代。
|
||||||
|
|
||||||
|
## 合入、清理与恢复
|
||||||
|
|
||||||
|
合入与清理分别核对授权及条件。仅回收本任务登记工作区,按开发门禁核对当前权威目标、
|
||||||
|
父子仓成果、未跟踪和 ignored 文件、独有提交与引用、活动 Git 操作以及所有写者退出。
|
||||||
|
无法证明成果已保存时保留现场;本地删除与远端分支删除分别报告。
|
||||||
|
|
||||||
|
清理前保存任务主记录与证据。执行回收时将命令输出用 evidence 的 `RECEIPT` 模式保存到
|
||||||
|
待删目录之外;回收后的结果写入后续闭合记录,不能向已删除的任务卡补写收据。
|
||||||
|
任务卡须回填真实主 PR 和完成状态并归档;闭合 PR 的创建、合入均依当前授权执行。
|
||||||
|
post-merge 默认只提示,不因 pull 或 merge 自动提交、推送或创建闭合 PR。
|
||||||
|
|
||||||
|
中断或交接时记录当前有效版本、批准范围、未决假设、最新试验结论、剩余事项及下一动作。
|
||||||
|
恢复后核对现场和授权,从最早未满足的环节续办;不重做仍有效的工作,不省略失效环节。
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
本文件细化根 AGENTS.md 的启动、验证和回收规则。通用语义以固定的
|
本文件细化根 AGENTS.md 的启动、验证和回收规则。通用语义以固定的
|
||||||
`deps/development-guidelines` 为准;门禁实现及回归用例随本仓版本管理。
|
`deps/development-guidelines` 为准;门禁实现及回归用例随本仓版本管理。
|
||||||
|
需求表、设计试验、迭代调整、阶段产物与人工评审按 [迭代交付](delivery.md) 执行。
|
||||||
|
任务卡记录批准来源与对象版本;本地 evidence 仅记录命令,不能证明人工批准。
|
||||||
|
|
||||||
## 启动与恢复
|
## 启动与恢复
|
||||||
|
|
||||||
@@ -64,6 +66,9 @@ Git 对含子模块的工作区需要显式删除选项时,只有全部现场
|
|||||||
owner 须先独立确认其保存与归属,工具不把缓存的远端引用当作唯一数据已经备份的证据。
|
owner 须先独立确认其保存与归属,工具不把缓存的远端引用当作唯一数据已经备份的证据。
|
||||||
远端分支删除与本地回收分别报告,失败不能声明两者全部完成。
|
远端分支删除与本地回收分别报告,失败不能声明两者全部完成。
|
||||||
回收后由所有者执行 `make task-close` 闭合卡片;回收命令不顺带改写共享主检出。
|
回收后由所有者执行 `make task-close` 闭合卡片;回收命令不顺带改写共享主检出。
|
||||||
|
post-merge 仅提示,不自动调用闭合。`make task-close` 会提交、推送并可能创建 PR,
|
||||||
|
执行者先按迭代交付规则核对该动作的授权及所选任务,保留未授权的其他任务现场。
|
||||||
|
回收命令使用待删目录之外的 `RECEIPT` 保存输出,清理结果由后续闭合记录引用。
|
||||||
|
|
||||||
## CI 凭据边界
|
## CI 凭据边界
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
| A5 回收 | 本地命令检查;写者退出由 owner 确认 | 登记根目录、锁/操作状态、父子仓与唯一文件、合入核验 | `tests/test_task.py` |
|
| A5 回收 | 本地命令检查;写者退出由 owner 确认 | 登记根目录、锁/操作状态、父子仓与唯一文件、合入核验 | `tests/test_task.py` |
|
||||||
| A6 秘密 | 本地脱敏及 CI 获取边界;权限与宿主隔离另验 | 命令/输出/摘要脱敏,凭据不持久写 Git 配置 | `tests/test_evidence.py`、`tests/test_ci_credentials.py` |
|
| A6 秘密 | 本地脱敏及 CI 获取边界;权限与宿主隔离另验 | 命令/输出/摘要脱敏,凭据不持久写 Git 配置 | `tests/test_evidence.py`、`tests/test_ci_credentials.py` |
|
||||||
| A7 证据 | 本地 SELF 收据;外部来源独立核验 | 首次捕获、完整脱敏输出/摘要、对象记录、原样导入 | `tests/test_evidence.py`;CI/审阅链接另核 |
|
| 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` 核对生成字段与未授权默认值;人工核对当前规划、进展、重复任务和建议依据 |
|
||||||
|
|
||||||
## 失败处理
|
## 失败处理
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# 本地钩子(post-merge):pull/merge 落地后尝试闭合已合入任务卡;ff-only 也会触发。
|
# 本地钩子(post-merge):pull/merge 落地后提示 owner 按授权闭合任务卡;ff-only 也会触发。
|
||||||
# precheck [cards] 报告欠账,所有者可用 make task-close 手动兜底。
|
# precheck [cards] 报告欠账;此钩子只提示,不执行闭合或其他写入。
|
||||||
# 触发条件收紧到"主检出 + 集成分支 main"——任务 worktree 里 task-sync 的 merge 不触发,
|
# 触发条件收紧到"主检出 + 集成分支 main"——任务 worktree 里 task-sync 的 merge 不触发,
|
||||||
# 防止把卡片闭合混进任务分支现场。失败只警告,绝不阻断 pull。
|
# 防止把卡片闭合提示混进任务分支现场。
|
||||||
# 注意:task.sh close 在主检出会另建 feature/card-close-* 分支提交(集成分支不直推),
|
|
||||||
# 结束后切回 main;PR 由所有者合入。
|
|
||||||
common=$(git rev-parse --git-common-dir) && common=$(cd "$common" 2>/dev/null && pwd) || exit 0
|
common=$(git rev-parse --git-common-dir) && common=$(cd "$common" 2>/dev/null && pwd) || exit 0
|
||||||
mainrepo=$(dirname "$common")
|
mainrepo=$(dirname "$common")
|
||||||
[ "$mainrepo" = "$PWD" ] || exit 0
|
[ "$mainrepo" = "$PWD" ] || exit 0
|
||||||
[ "$(git rev-parse --abbrev-ref HEAD)" = "main" ] || exit 0
|
[ "$(git rev-parse --abbrev-ref HEAD)" = "main" ] || exit 0
|
||||||
[ -f "$mainrepo/scripts/task.sh" ] || exit 0
|
[ -f "$mainrepo/scripts/task.sh" ] || exit 0
|
||||||
bash "$mainrepo/scripts/task.sh" close \
|
echo "[next] owner 按已有授权在主检出运行 make task-close 闭合已合入任务卡;未授权时先取得授权。"
|
||||||
|| echo "[warn] post-merge 卡片自动闭合失败——在主检出手动运行 make task-close" >&2
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ done
|
|||||||
while IFS= read -r f; do
|
while IFS= read -r f; do
|
||||||
grep -q '"agent-intent/' "$f" || continue
|
grep -q '"agent-intent/' "$f" || continue
|
||||||
case "$f" in
|
case "$f" in
|
||||||
*/deps/agent-squad/adapters/intent/*|*/modules/backend/internal/intentgate/*) ;;
|
*/deps/agent-squad/adapters/intent/*|*/modules/backend/internal/intentgate/*|*/modules/backend/internal/intentsem/*) ;;
|
||||||
*)
|
*)
|
||||||
echo "boundary: $f imports agent-intent" >&2
|
echo "boundary: $f imports agent-intent" >&2
|
||||||
fail=1
|
fail=1
|
||||||
|
|||||||
+59
-1
@@ -99,7 +99,7 @@ cmd_precheck() {
|
|||||||
else
|
else
|
||||||
echo "[facts] WARN policy/facts.md 不存在——外部事实登记表缺失(AGENTS.md 证据与验证门禁)"
|
echo "[facts] WARN policy/facts.md 不存在——外部事实登记表缺失(AGENTS.md 证据与验证门禁)"
|
||||||
fi
|
fi
|
||||||
echo "[required-reading] core/baseline.md, workflows/delivery.md §1$([ "$dirty" -gt 0 ] && echo ", standards/collaboration.md(树脏=他人或未收尾现场,不得写入)")"
|
echo "[required-reading] core/baseline.md, workflows/delivery.md §1$([ -f policy/delivery.md ] && echo ", policy/delivery.md")$([ "$dirty" -gt 0 ] && echo ", standards/collaboration.md(树脏=他人或未收尾现场,不得写入)")"
|
||||||
echo "[R0] $(echo "$rmain" | cut -c1-10)(完整:$rmain)"
|
echo "[R0] $(echo "$rmain" | cut -c1-10)(完整:$rmain)"
|
||||||
if [ "$dirty" -gt 0 ] || [ "${sub_drift:-0}" -gt 0 ]; then
|
if [ "$dirty" -gt 0 ] || [ "${sub_drift:-0}" -gt 0 ]; then
|
||||||
echo "[verdict] SHARED_WORKSPACE_BUSY — 工作树不干净,不得写入;先收尾或经 owner 确认"
|
echo "[verdict] SHARED_WORKSPACE_BUSY — 工作树不干净,不得写入;先收尾或经 owner 确认"
|
||||||
@@ -178,11 +178,54 @@ cmd_start() {
|
|||||||
- 工作区:${wt}(worktree);分支:${name}
|
- 工作区:${wt}(worktree);分支:${name}
|
||||||
${parent_note}
|
${parent_note}
|
||||||
- 授权与交付终点:<本次允许的动作与终点;未授权事项写明>
|
- 授权与交付终点:<本次允许的动作与终点;未授权事项写明>
|
||||||
|
- 交付模式:manual(逐阶段人工评审);明确授权后可记为 authorized-continuous
|
||||||
|
- 自动推进授权:无;授权范围:无;授权来源:无;授权终点:无;停止条件:无(未授权)
|
||||||
|
- 当前阶段:需求拆解;当前增量:I1(待定义)
|
||||||
|
- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
|
||||||
|
|
||||||
## 目标与非目标
|
## 目标与非目标
|
||||||
|
|
||||||
<预期结果、受影响入口/模块/契约;明确不做什么。>
|
<预期结果、受影响入口/模块/契约;明确不做什么。>
|
||||||
|
|
||||||
|
## 关联方向与规划
|
||||||
|
|
||||||
|
- 适用状态:待核对(无适用规划时说明原因)
|
||||||
|
- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文)
|
||||||
|
- 对应里程碑:待核对
|
||||||
|
|
||||||
|
## 需求分析
|
||||||
|
|
||||||
|
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|
||||||
|
|---|---|---|---|---|---|---|
|
||||||
|
| R1 | 待填写 | 待评估 | 待定 | 待定义 | 待确认 | 待评审 |
|
||||||
|
|
||||||
|
## 方案与计划
|
||||||
|
|
||||||
|
- 方案引用:待填写(含对象版本)
|
||||||
|
- 实施计划引用:待填写(含增量与需求 ID)
|
||||||
|
- 测试计划引用:待填写(含需求 ID 与验收条件)
|
||||||
|
|
||||||
|
## 阶段评审
|
||||||
|
|
||||||
|
| 阶段 | 对象版本 | 结论 | 评审人 | 时间 | 依据 |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| 需求拆解 | 待定 | 未评审 | — | — | — |
|
||||||
|
| 需求评估 | 待定 | 未评审 | — | — | — |
|
||||||
|
| 需求表确认 | 待定 | 未评审 | — | — | — |
|
||||||
|
| 方案设计 | 待定 | 未评审 | — | — | — |
|
||||||
|
| 实施计划 | 待定 | 未评审 | — | — | — |
|
||||||
|
| 实施与自检 | 待定 | 未评审 | — | — | — |
|
||||||
|
| 正式测试与验收 | 待定 | 未评审 | — | — | — |
|
||||||
|
| 代码 Review | 待定 | 未评审 | — | — | — |
|
||||||
|
| 合入 | 待定 | 未评审 | — | — | — |
|
||||||
|
| 合入核验与收口 | 待定 | 未评审 | — | — | — |
|
||||||
|
|
||||||
|
## 探索试验与迭代
|
||||||
|
|
||||||
|
| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 批准依据 | 结果 | 变更影响 | 需重审补测 |
|
||||||
|
|---|---|---|---|---|---|---|---|
|
||||||
|
| 待定义 | — | — | — | 未批准 | NOT_RUN | 待评估 | 待评估 |
|
||||||
|
|
||||||
## 同步记录
|
## 同步记录
|
||||||
|
|
||||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||||
@@ -200,6 +243,21 @@ ${parent_note}
|
|||||||
- 结果:
|
- 结果:
|
||||||
- 验证:<结论摘要 PASS/FAIL/SKIP/NOT_RUN 逐项;逐条证据由 make evidence 写入上方证据表>
|
- 验证:<结论摘要 PASS/FAIL/SKIP/NOT_RUN 逐项;逐条证据由 make evidence 写入上方证据表>
|
||||||
- 影响与剩余项:
|
- 影响与剩余项:
|
||||||
|
|
||||||
|
## 规划进展与下一步
|
||||||
|
|
||||||
|
- 本次推进/剩余:待核对(依据实际成果更新适用方案/规划)
|
||||||
|
- 首选下一任务:待核对(无适用规划、已完成或受阻时如实说明,不虚构任务)
|
||||||
|
- 推荐依据:待填写
|
||||||
|
- 前置条件/待确认:待核对
|
||||||
|
- 预期产物/验收条件:待定义
|
||||||
|
- 重复任务核对:待核对(已有/在途任务、PR 与规划记录)
|
||||||
|
- 启动授权:未授权(建议不自动启动新任务,仍须明确授权)
|
||||||
|
|
||||||
|
## 合入与清理
|
||||||
|
|
||||||
|
- 合入记录:NOT_RUN(授权依据、PR、合入 SHA、验证来源)
|
||||||
|
- 清理记录:NOT_RUN(授权依据、写者退出确认、worktree/分支/任务卡处置)
|
||||||
EOF
|
EOF
|
||||||
(cd "$wt" && IMPORT_RECEIPT="$PRECHECK_RECEIPT" bash "${SCRIPT_DIR}/evidence.sh")
|
(cd "$wt" && IMPORT_RECEIPT="$PRECHECK_RECEIPT" bash "${SCRIPT_DIR}/evidence.sh")
|
||||||
git -C "$wt" add .task
|
git -C "$wt" add .task
|
||||||
|
|||||||
+118
-1
@@ -89,6 +89,18 @@ class TaskLifecycleTests(unittest.TestCase):
|
|||||||
self.assertNotEqual(result.returncode, 0, result.stdout)
|
self.assertNotEqual(result.returncode, 0, result.stdout)
|
||||||
self.assertIn("SYNC_REQUIRED", result.stdout)
|
self.assertIn("SYNC_REQUIRED", result.stdout)
|
||||||
|
|
||||||
|
def test_precheck_routes_existing_project_delivery_policy(self):
|
||||||
|
result = self.task(self.repo, "precheck")
|
||||||
|
self.assertNotIn("policy/delivery.md", result.stdout)
|
||||||
|
policy = self.repo / "policy/delivery.md"
|
||||||
|
policy.parent.mkdir()
|
||||||
|
policy.write_text("# Project delivery policy\n")
|
||||||
|
self.git(self.repo, "add", "policy")
|
||||||
|
self.git(self.repo, "commit", "-m", "Adopt project delivery policy")
|
||||||
|
result = self.task(self.repo, "precheck")
|
||||||
|
reading = next(line for line in result.stdout.splitlines() if line.startswith("[required-reading]"))
|
||||||
|
self.assertIn("policy/delivery.md", reading)
|
||||||
|
|
||||||
def test_sync_materializes_updated_component(self):
|
def test_sync_materializes_updated_component(self):
|
||||||
child = self.add_submodule()
|
child = self.add_submodule()
|
||||||
wt = self.worktree()
|
wt = self.worktree()
|
||||||
@@ -586,11 +598,116 @@ class TaskLifecycleTests(unittest.TestCase):
|
|||||||
self.task(self.repo, "start", "feature/new", env=self.env | {"PRECHECK_RECEIPT": str(receipt)})
|
self.task(self.repo, "start", "feature/new", env=self.env | {"PRECHECK_RECEIPT": str(receipt)})
|
||||||
wt = self.root / "repo-wt-feature-new"
|
wt = self.root / "repo-wt-feature-new"
|
||||||
self.assertTrue((wt / ".task/feature-new.md").is_file())
|
self.assertTrue((wt / ".task/feature-new.md").is_file())
|
||||||
self.assertIn("make precheck", (wt / ".task/feature-new.md").read_text())
|
card = (wt / ".task/feature-new.md").read_text()
|
||||||
|
self.assertIn("make precheck", card)
|
||||||
|
self.assertIn("交付模式:manual(逐阶段人工评审)", card)
|
||||||
|
self.assertIn("authorized-continuous", card)
|
||||||
|
self.assertIn("流程依据:仓库根目录 policy/delivery.md", card)
|
||||||
|
for field in ("授权范围", "授权来源", "授权终点", "停止条件"):
|
||||||
|
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)
|
||||||
|
for stage in ("需求拆解", "需求评估", "需求表确认", "方案设计", "实施计划", "实施与自检",
|
||||||
|
"正式测试与验收", "代码 Review", "合入", "合入核验与收口"):
|
||||||
|
row = next(line for line in reviews.splitlines() if line.startswith(f"| {stage} |"))
|
||||||
|
self.assertEqual(row.split("|")[3].strip(), "未评审")
|
||||||
|
self.assertNotIn("通过", reviews)
|
||||||
|
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)
|
||||||
body = self.git(wt, "log", "-1", "--format=%B").stdout
|
body = self.git(wt, "log", "-1", "--format=%B").stdout
|
||||||
for field in ("Why:", "Evidence:", "Impact:", "Refs:"):
|
for field in ("Why:", "Evidence:", "Impact:", "Refs:"):
|
||||||
self.assertIn(field, body)
|
self.assertIn(field, body)
|
||||||
|
|
||||||
|
def install_post_merge_hook(self):
|
||||||
|
hook = self.repo / ".git/hooks/post-merge"
|
||||||
|
shutil.copyfile(SOURCE / "scripts/hooks/post-merge", hook)
|
||||||
|
hook.chmod(0o755)
|
||||||
|
|
||||||
|
def publish_merged_task(self):
|
||||||
|
publisher = self.root / "publisher"
|
||||||
|
self.git(self.root, "clone", str(self.remote), str(publisher))
|
||||||
|
self.git(publisher, "switch", "-c", "feature/merged")
|
||||||
|
card = publisher / ".task/feature-merged.md"
|
||||||
|
card.parent.mkdir()
|
||||||
|
card.write_text("# Merged task\n任务主记录:待回填;状态:进行中;owner:test\n"
|
||||||
|
"- 工作区:fixture;分支:feature/merged\n")
|
||||||
|
self.git(publisher, "add", ".task")
|
||||||
|
self.git(publisher, "commit", "-m", "Record merged task")
|
||||||
|
self.git(publisher, "switch", "main")
|
||||||
|
self.git(publisher, "merge", "--no-ff", "feature/merged", "-m",
|
||||||
|
"Merge pull request 'Task' (#7) from feature/merged into main")
|
||||||
|
self.git(publisher, "push", "origin", "main")
|
||||||
|
return self.git(publisher, "rev-parse", "HEAD").stdout.strip(), card.read_text()
|
||||||
|
|
||||||
|
def assert_post_merge_only_reminds_owner(self, operation):
|
||||||
|
expected_head, expected_card = self.publish_merged_task()
|
||||||
|
self.git(self.repo, "fetch", "origin")
|
||||||
|
old_head = self.git(self.repo, "rev-parse", "HEAD").stdout.strip()
|
||||||
|
local_heads = self.git(self.repo, "show-ref", "--heads").stdout
|
||||||
|
worktrees = self.git(self.repo, "worktree", "list", "--porcelain").stdout
|
||||||
|
remote_refs = self.git(self.remote, "show-ref").stdout
|
||||||
|
self.install_post_merge_hook()
|
||||||
|
result = self.git(self.repo, *operation)
|
||||||
|
self.assertIn("make task-close", result.stdout)
|
||||||
|
self.assertIn("授权", result.stdout)
|
||||||
|
self.assertNotIn("[close]", result.stdout)
|
||||||
|
self.assertEqual(self.git(self.repo, "branch", "--show-current").stdout.strip(), "main")
|
||||||
|
self.assertEqual(self.git(self.repo, "rev-parse", "HEAD").stdout.strip(), expected_head)
|
||||||
|
self.assertEqual(self.git(self.repo, "show-ref", "--heads").stdout,
|
||||||
|
local_heads.replace(old_head, expected_head))
|
||||||
|
self.assertEqual(self.git(self.repo, "worktree", "list", "--porcelain").stdout,
|
||||||
|
worktrees.replace(old_head, expected_head))
|
||||||
|
self.assertEqual(self.git(self.remote, "show-ref").stdout, remote_refs)
|
||||||
|
self.assertEqual(self.git(self.repo, "status", "--porcelain").stdout, "")
|
||||||
|
self.assertEqual((self.repo / ".task/feature-merged.md").read_text(), expected_card)
|
||||||
|
self.assertFalse((self.repo / ".task/archive").exists())
|
||||||
|
|
||||||
|
def test_post_merge_main_merge_only_reminds_owner(self):
|
||||||
|
self.assert_post_merge_only_reminds_owner(("merge", "--ff-only", "origin/main"))
|
||||||
|
|
||||||
|
def test_post_merge_main_pull_only_reminds_owner(self):
|
||||||
|
self.assert_post_merge_only_reminds_owner(("pull", "--ff-only"))
|
||||||
|
|
||||||
|
def test_post_merge_is_silent_outside_main_checkout(self):
|
||||||
|
wt = self.worktree()
|
||||||
|
self.install_post_merge_hook()
|
||||||
|
self.advance_remote()
|
||||||
|
result = self.git(wt, "merge", "--ff-only", "origin/main")
|
||||||
|
self.assertNotIn("make task-close", result.stdout)
|
||||||
|
self.assertNotIn("[close]", result.stdout)
|
||||||
|
self.git(self.repo, "switch", "-c", "feature/primary")
|
||||||
|
self.git(wt, "switch", "-c", "feature/advance")
|
||||||
|
(wt / "feature-work").write_text("another task\n")
|
||||||
|
self.git(wt, "add", "feature-work")
|
||||||
|
self.git(wt, "commit", "-m", "Advance feature")
|
||||||
|
result = self.git(self.repo, "merge", "--ff-only", "feature/advance")
|
||||||
|
self.assertNotIn("make task-close", result.stdout)
|
||||||
|
self.assertNotIn("[close]", result.stdout)
|
||||||
|
|
||||||
def test_start_stacked_branch_records_parent_and_main_baseline(self):
|
def test_start_stacked_branch_records_parent_and_main_baseline(self):
|
||||||
base = self.git(self.repo, "rev-parse", "origin/main").stdout.strip()
|
base = self.git(self.repo, "rev-parse", "origin/main").stdout.strip()
|
||||||
parent = self.worktree("feature/parent")
|
parent = self.worktree("feature/parent")
|
||||||
|
|||||||
Reference in New Issue
Block a user