Compare commits
222
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0e4b111dff | ||
|
|
3de5bc5c39 | ||
|
|
9a4ccf4040 | ||
|
|
3a23fb4533 | ||
|
|
6858e21d47 | ||
|
|
5e8e17b96a | ||
|
|
5423b261f9 | ||
|
|
fd83e98e6c | ||
|
|
25fc2d92e8 | ||
|
|
c4008bf8f3 | ||
|
|
c51fb5e22f | ||
|
|
134f7864fa | ||
|
|
f8ad688359 | ||
|
|
2bcb4e3366 | ||
|
|
4d1b58ccb3 | ||
|
|
73da2fea01 | ||
|
|
3e13f7a6d6 | ||
|
|
0c13beddb9 | ||
|
|
19eb56e374 | ||
|
|
7322aa96bd | ||
|
|
0c676afe1f | ||
|
|
989346aba2 | ||
|
|
d535c2a85e | ||
|
|
5252a236fc | ||
|
|
66745dd920 | ||
|
|
510b46636a | ||
|
|
156c113024 | ||
|
|
a83e288bff | ||
|
|
d8214a09f0 | ||
|
|
18cfca4307 | ||
|
|
54409fd61d | ||
|
|
55c0c1b499 | ||
|
|
45f21e84c7 | ||
|
|
0ff698db6f | ||
|
|
96bafcebbd | ||
|
|
21b2687e0f | ||
|
|
c464589a42 | ||
|
|
0dfb09fa69 | ||
|
|
939be0ec6b | ||
|
|
b6f21e8a94 | ||
|
|
f0a929a2ae | ||
|
|
cd793c11c9 | ||
|
|
b7d775a734 | ||
|
|
61d728f905 | ||
|
|
bc27becbbb | ||
|
|
dbae19e80d | ||
|
|
2f7e4b8fc0 | ||
|
|
cd7c586b15 | ||
|
|
7cb076c945 | ||
|
|
473bfbc73c | ||
|
|
0243cc2195 | ||
|
|
8bf74f0f7e | ||
|
|
c1b60b7af2 | ||
|
|
77aace4ae4 | ||
|
|
31adc25a1f | ||
|
|
016135d946 | ||
|
|
d9e74087e4 | ||
|
|
7a3ac9dbe6 | ||
|
|
b9ee841ea5 | ||
|
|
d4dad0f219 | ||
|
|
07ff3e45c4 | ||
|
|
4e601e95bc | ||
|
|
45ee184527 | ||
|
|
fdbefbac83 | ||
|
|
413ca989a1 | ||
|
|
939380f3d5 | ||
|
|
526617ff9b | ||
|
|
02a0ed4f74 | ||
|
|
8f00c97fae | ||
|
|
f6046bba7e | ||
|
|
177338282d | ||
|
|
c07d4020d0 | ||
|
|
996bf5a14d | ||
|
|
2d81d584a2 | ||
|
|
8768ee2ba2 | ||
|
|
daebbf61e7 | ||
|
|
ca5c36f65f | ||
|
|
1d3c957ff4 | ||
|
|
b9d09c9712 | ||
|
|
54641f4653 | ||
|
|
9d8332ad08 | ||
|
|
236f39e6c4 | ||
|
|
18b9556f3b | ||
|
|
340240473e | ||
|
|
c05b4090d8 | ||
|
|
6f2d0d8d0c | ||
|
|
73ee509439 | ||
|
|
8437ba4164 | ||
|
|
4381b71094 | ||
|
|
fe4a3043eb | ||
|
|
cdfd7d9849 | ||
|
|
3e01f18756 | ||
|
|
6032dbaa16 | ||
|
|
d5fc19e42c | ||
|
|
1493676217 | ||
|
|
a690aab42d | ||
|
|
7cb7981deb | ||
|
|
c0a0db3a70 | ||
|
|
312727d726 | ||
|
|
6485532d88 | ||
|
|
553f0ad61b | ||
|
|
15b388fc86 | ||
|
|
e6ddfab9e8 | ||
|
|
5cdcee2649 | ||
|
|
5be380ad14 | ||
|
|
9e4ddfcd87 | ||
|
|
07094d0dd1 | ||
|
|
821a307feb | ||
|
|
9984c68d37 | ||
|
|
357e4ddb0f | ||
|
|
4830b8ba6d | ||
|
|
78c2bcf6b6 | ||
|
|
2f51d525ff | ||
|
|
5e11db50ce | ||
|
|
92d30a498b | ||
|
|
eebe83e0c5 | ||
|
|
8920185baa | ||
|
|
c7f14fda89 | ||
|
|
f0f4d741ae | ||
|
|
8079f8f42a | ||
|
|
77bdbdbc74 | ||
|
|
713b7cbe6f | ||
|
|
51b15af09d | ||
|
|
c780a030b2 | ||
|
|
59739a2b48 | ||
|
|
725e2e4beb | ||
|
|
5dc25e0be3 | ||
|
|
cb4a13671d | ||
|
|
981021b2b6 | ||
|
|
b2c582dc5a | ||
|
|
7d864828b5 | ||
|
|
198b3e4ad4 | ||
|
|
fda5ef2931 | ||
|
|
fa6529db0e | ||
|
|
8c40cb7412 | ||
|
|
0a933af95f | ||
|
|
451f55f80d | ||
|
|
6699c4a8aa | ||
|
|
c6f0561b5b | ||
|
|
7cd0f505b2 | ||
|
|
8749f5077a | ||
|
|
a5ea8197ab | ||
|
|
33c7b9a260 | ||
|
|
1cb8c6f4b3 | ||
|
|
dd75f42c98 | ||
|
|
21c1278c04 | ||
|
|
9e9856f652 | ||
|
|
ec8a39b39d | ||
|
|
51f82d5d4f | ||
|
|
dad5556181 | ||
|
|
1f2f3d6a58 | ||
|
|
47c57eee6b | ||
|
|
1165b28d5f | ||
|
|
bf1b592071 | ||
|
|
d8ba8dba3c | ||
|
|
d7e0a683c9 | ||
|
|
de3bff6d6d | ||
|
|
63e66c6fb3 | ||
|
|
2b5bcffcef | ||
|
|
f9f09a5440 | ||
|
|
90b0a6498d | ||
|
|
c60ccfe285 | ||
|
|
db3ec5d6e3 | ||
|
|
2ee2b495ca | ||
|
|
1950ab2cb1 | ||
|
|
68be691e13 | ||
|
|
306836006f | ||
|
|
3f14d7fa75 | ||
|
|
3a06150d01 | ||
|
|
6a0d721f36 | ||
|
|
a542c21a42 | ||
|
|
a0fd52a627 | ||
|
|
f1db9a6c78 | ||
|
|
7bbd7a407f | ||
|
|
ccf515c3b1 | ||
|
|
2fdb6e548e | ||
|
|
bbcb3b3b17 | ||
|
|
958dd44fee | ||
|
|
ee66bd009a | ||
|
|
380584b86b | ||
|
|
10f9a8b9c3 | ||
|
|
9f7658515c | ||
|
|
5ab034eb53 | ||
|
|
20290d0379 | ||
|
|
c45ed6ba52 | ||
|
|
a44804fd59 | ||
|
|
457bea8591 | ||
|
|
b6965eb0f3 | ||
|
|
2b901a61de | ||
|
|
5c35f32e22 | ||
|
|
4f6ec3ed4d | ||
|
|
3f89eff70a | ||
|
|
9814a67ee6 | ||
|
|
d034aa00e5 | ||
|
|
1290eb2b06 | ||
|
|
70882918e5 | ||
|
|
a7df68a59a | ||
|
|
b9d0d8c2d9 | ||
|
|
0a1efb73dd | ||
|
|
127cfccccc | ||
|
|
f3b1209207 | ||
|
|
5d77e9cf46 | ||
|
|
174e59e692 | ||
|
|
2de4eda16d | ||
|
|
fd1b676e28 | ||
|
|
738bbe1579 | ||
|
|
022b914c66 | ||
|
|
b49b95dc7a | ||
|
|
6dc5f1cfa6 | ||
|
|
539a2dc639 | ||
|
|
ad9b67d599 | ||
|
|
ba8e872b59 | ||
|
|
8ea12de732 | ||
|
|
8a82f789d1 | ||
|
|
ffb93dc55d | ||
|
|
028b0eb015 | ||
|
|
20d50ef9f1 | ||
|
|
ded40d071e | ||
|
|
cfc3c94cff | ||
|
|
d1e2cc929d | ||
|
|
ccb1b1ebe5 | ||
|
|
f1edb70fbd |
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"version": 1,
|
||||
"hooks": {
|
||||
"beforeShellExecution": [
|
||||
{
|
||||
"command": ".cursor/hooks/guard-git.sh",
|
||||
"matcher": "^git ",
|
||||
"failClosed": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Executable
+60
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
# Fail-closed red-line gate for destructive / unauthorized git. Does not replace agentctl leases.
|
||||
set -euo pipefail
|
||||
input=$(cat)
|
||||
command=$(printf '%s' "$input" | python3 -c 'import json,sys; print(json.load(sys.stdin).get("command") or "")')
|
||||
|
||||
ask() {
|
||||
local user_msg="$1"
|
||||
local agent_msg="$2"
|
||||
python3 -c 'import json,sys; print(json.dumps({"permission":"ask","user_message":sys.argv[1],"agent_message":sys.argv[2]}))' "$user_msg" "$agent_msg"
|
||||
exit 0
|
||||
}
|
||||
|
||||
allow() {
|
||||
echo '{"permission":"allow"}'
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Normalize whitespace for matching
|
||||
cmd=$(printf '%s' "$command" | tr '\n' ' ')
|
||||
|
||||
# Unauthorized push (user must confirm)
|
||||
if printf '%s' "$cmd" | grep -Eq '(^|[[:space:]])git([[:space:]]+-[^[:space:]]+)*[[:space:]]+push([[:space:]]|$)'; then
|
||||
ask "git push 需要显式用户授权(AGENTS remote_sync)。请确认后再继续。" \
|
||||
"Hook blocked git push pending user authorization."
|
||||
fi
|
||||
|
||||
# Destructive / force operations
|
||||
if printf '%s' "$cmd" | grep -Eq 'git[[:space:]]+.*(--force|-f)([[:space:]]|$)' \
|
||||
|| printf '%s' "$cmd" | grep -Eq 'git[[:space:]]+push[[:space:]].*\+'; then
|
||||
ask "检测到 git --force / 强推。破坏性操作须用户明确授权。" \
|
||||
"Hook requires confirmation for force git operation."
|
||||
fi
|
||||
|
||||
if printf '%s' "$cmd" | grep -Eq 'git[[:space:]]+reset[[:space:]]+.*--hard'; then
|
||||
ask "git reset --hard 会丢弃工作区。须用户明确授权。" \
|
||||
"Hook requires confirmation for git reset --hard."
|
||||
fi
|
||||
|
||||
if printf '%s' "$cmd" | grep -Eq 'git[[:space:]]+clean[[:space:]]+.*-[a-zA-Z]*f'; then
|
||||
ask "git clean -f 会删除未跟踪文件。须用户明确授权。" \
|
||||
"Hook requires confirmation for git clean -f."
|
||||
fi
|
||||
|
||||
if printf '%s' "$cmd" | grep -Eq 'git[[:space:]]+branch[[:space:]]+(-D|--delete[[:space:]]+--force)'; then
|
||||
ask "强制删分支 (-D) 须用户明确授权;优先 git branch -d。" \
|
||||
"Hook requires confirmation for git branch -D."
|
||||
fi
|
||||
|
||||
if printf '%s' "$cmd" | grep -Eq 'git[[:space:]]+worktree[[:space:]]+remove[[:space:]]+.*--force'; then
|
||||
ask "git worktree remove --force 被 AGENTS 禁止升级。须用户明确授权。" \
|
||||
"Hook requires confirmation for forced worktree remove."
|
||||
fi
|
||||
|
||||
if printf '%s' "$cmd" | grep -Eq 'git[[:space:]]+checkout[[:space:]]+--\.($|[[:space:]])'; then
|
||||
ask "git checkout -- . 会丢弃全部本地修改。须用户明确授权。" \
|
||||
"Hook requires confirmation for discarding all local changes."
|
||||
fi
|
||||
|
||||
allow
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"mcpServers": {
|
||||
"agentctl": {
|
||||
"command": "node",
|
||||
"args": ["${workspaceFolder}/scripts/mcp/agentctl-mcp.mjs"]
|
||||
},
|
||||
"jev": {
|
||||
"command": "node",
|
||||
"args": ["${workspaceFolder}/scripts/mcp/jev-mcp.mjs"]
|
||||
},
|
||||
"codegraph": {
|
||||
"type": "stdio",
|
||||
"command": "codegraph",
|
||||
"args": ["serve", "--mcp", "--path", "${workspaceFolder}"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
description: Agent-System 写操作必须经 agentctl(租约、docs apply、候选合入);禁止绕过治理直接改共享文档或 push。
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# agentctl 强制治理
|
||||
|
||||
本仓库由 agentctl 管理面协调(SQLite + launchd daemon)。细则见 [AGENTS.md](../../AGENTS.md) 与 [操作规范](../../.doc/ops/2026-09-21-agent-worktree-workflow.md);流程技能见 `.cursor/skills/agentctl-*`。
|
||||
|
||||
## 硬边界
|
||||
|
||||
1. **写仓库**:必须 `agentctl with` / MCP `lease_run`。裸 `git commit` 会被 agentctl pre-commit hook 拒绝。
|
||||
2. **共享文档**:`.doc/ops/CURRENT.md`、`.doc/status/FEATURE-MATRIX.md` 只能 `docs apply`(行级 CAS;MATRIX 键为 `record_id`)。
|
||||
3. **合入 local dev**:`validate` 后 `queue enqueue`(daemon `--ff-only`)或受控 `integrate`;禁止直接改主目录 `dev` tip。
|
||||
4. **禁止默认**:未授权 `git push`、晋升 test/main、`--force` 清理、卸载 launchd coordinator、改 gap-matrix / 升 MATRIX 状态值冒充发布。
|
||||
|
||||
## 会话路径
|
||||
|
||||
- 启动 → skill `agentctl-session-start`
|
||||
- 建场 → `agentctl-worktree-setup`
|
||||
- 写回 → `agentctl-lease-write`
|
||||
- 合入/收口 → `agentctl-integrate-closeout`
|
||||
- MCP 工具定义见 `.cursor/mcp.json` → `scripts/mcp/agentctl-mcp.mjs`
|
||||
@@ -1,6 +1,67 @@
|
||||
---
|
||||
description: 按变更范围选择测试及真实证据要求
|
||||
description: 规定项目中所有自动化测试、功能测试、集成测试报告的存放路径与结构标准规范
|
||||
globs: ["**/*test*.go", ".doc/test-reports/**/*.md"]
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
测试范围、精确产品 PI 入口、环境模型证据和报告格式统一见 [验证契约](../../.doc/ops/2026-09-21-validation-contract.md)。按实际变更选择适用行;报告大小不扩大测试范围。
|
||||
# 测试报告规范准则 (Test Reports Standard)
|
||||
|
||||
本仓库严格遵循标准化、可追溯的质量测试管理体系。所有测试报告必须归档于指定的文档目录下,并遵循固定结构。
|
||||
|
||||
**范围判定**:纯工程规范/文档变更按 [PROJECT.md](../../PROJECT.md) §8 和 [worktree 工作规范](../../.doc/ops/2026-09-21-agent-worktree-workflow.md) 检查链接、规则一致性及 Git 差异;不适用下述产品 PI 全链路与全量 Go 回归要求。报告注明 NOT REQUIRED 及依据,不能记成产品测试 PASS。运行模板、提示词和业务变更不属于此例外。
|
||||
|
||||
## 一、 测试报告归档路径规范
|
||||
|
||||
- **统一目录**:所有测试报告必须统一存放于 `.doc/test-reports/` 目录下。
|
||||
- **命名规范**:遵循 `YYYY-MM-DD-<模块/功能/版本>-test-report.md` 命名格式。
|
||||
- 例如:`.doc/test-reports/2026-09-07-three-branch-intent-framework-test-report.md`
|
||||
- **证据附件**:运行产物(json/jsonl、workspace 快照、截图)放 `.doc/test-reports/assets/<report-slug>/`,**不得**与 `*-test-report.md` 混放在同一层级目录。
|
||||
|
||||
---
|
||||
|
||||
## 二、 测试报告固定结构模板
|
||||
|
||||
每份测试报告必须包含以下核心板块:
|
||||
|
||||
```markdown
|
||||
# [功能/模块名称] 测试报告
|
||||
|
||||
## 一、 测试背景 (Background)
|
||||
- 简述被测功能/特性的产生背景、业务痛点或上一轮测试中发现的缺陷与瓶颈。
|
||||
|
||||
## 二、 测试目标 (Test Objectives)
|
||||
- 列举本次测试需要验证的核心功能点、质量指标(如通过率 100%、无流程卡点、非阻塞人机协同等)。
|
||||
|
||||
## 三、 测试方案与环境 (Test Plan & Environment)
|
||||
- 测试环境(OS、Go 版本、后端 Stub/Real 模型);
|
||||
- 测试层级分层(单元测试、协同集成测试、CLI 真实交互测试);
|
||||
- 核心测试用例矩阵设计。
|
||||
|
||||
## 四、 预期结果 (Expected Results)
|
||||
- 明确给出各用例输入下的理论判定分支、目标意图、提取槽位、参谋回复风格与状态机流转。
|
||||
|
||||
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
|
||||
- 必须包含针对每一个典型测试用例的真实记录:
|
||||
- **测试输入 (Input)**
|
||||
- **实际输出 (Actual Output)**:贴出真实的终端/日志输出文本
|
||||
- **评价判定 (Evaluation / Verdict)**:PASS / FAIL 标志及判定依据
|
||||
- **性能与耗时 (Duration & Latency)**
|
||||
|
||||
## 六、 自动化测试套件汇总 (Test Suite Execution)
|
||||
- 附带 `go test -v ./...` 全量回归测试输出与通过率统计。
|
||||
|
||||
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
|
||||
- 总结测试是否达到上线/合并标准,提出后续演进或强化点。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、 执行要求与真实 Agent 交付铁律
|
||||
|
||||
1. **真实 Agent 交付铁律(红线)**:
|
||||
- **开发实现阶段**:可以快速使用 `stub` 验证状态机、协议分流、数据落盘与逻辑契约,加速反馈;
|
||||
- **交付前验收与测试报告生成**:**必须切回真实环境与真实 Agent(`pi-agent` + 实际运行的 `MiniMax-M2.7-highspeed` 容器)进行全链路端到端实测**;
|
||||
- **严禁**使用 stub 的测试输出作为最终交付报告的验收数据。
|
||||
2. **严禁散落存放**:测试报告统一归档至 `.doc/test-reports/` 目录下,禁止散落在根目录或临时沙箱中。
|
||||
3. **真实控制台取样**:测试报告中的输入、输出、耗时与判定必须取自实际环境运行的真实控制台输出与日志。
|
||||
4. **Git 规范管理**:测试报告伴随对应阶段的 `docs(test)` 或 `test(...)` 规范提交入库。
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
name: agentctl-integrate-closeout
|
||||
description: Validate a merge candidate, enqueue for daemon ff-only integrate, and close out five-state. Use when ready to land a task on local dev.
|
||||
---
|
||||
|
||||
# agentctl 集成与收口
|
||||
|
||||
权威:[操作规范](../../../.doc/ops/2026-09-21-agent-worktree-workflow.md)、[验证契约](../../../.doc/ops/2026-09-21-validation-contract.md)。常驻 daemon 已装载时走 **enqueue**,勿手动 `integrate`(除非 daemon 停)。
|
||||
|
||||
## 候选
|
||||
|
||||
```bash
|
||||
D=$(git -C /path/to/Agent-System rev-parse HEAD) # 冻结 expected-dev
|
||||
ID=integrate-<task>-YYYY-MM-DD
|
||||
git worktree add -b feature/$ID .worktrees/$ID "$D"
|
||||
cd .worktrees/$ID
|
||||
python3 ../../scripts/agentctl.py task register --id "$ID" --owner Cursor --scope . --capability git:dev
|
||||
python3 ../../scripts/agentctl.py with --task "$ID" \
|
||||
--resource path:. --resource git:index --resource git:dev -- bash -lc '
|
||||
git merge --no-ff -m "merge: candidate <feature> into dev" feature/<task>
|
||||
'
|
||||
```
|
||||
|
||||
第一父必须等于 `$D`。
|
||||
|
||||
## validate → enqueue(daemon ff)
|
||||
|
||||
```bash
|
||||
python3 ../../scripts/agentctl.py validate --task "$ID" -- <验收命令>
|
||||
python3 ../../scripts/agentctl.py queue enqueue \
|
||||
--task "$ID" --expected-dev "$D" --head "$(git rev-parse HEAD)"
|
||||
# 在任务 worktree 内 enqueue;数秒内 daemon 合入
|
||||
python3 ../../scripts/agentctl.py queue list
|
||||
python3 ../../scripts/agentctl.py daemon status
|
||||
```
|
||||
|
||||
验收按验证契约选行;治理脚本用 `unittest discover`。
|
||||
|
||||
## 五态收口
|
||||
|
||||
| 字段 | 典型值 |
|
||||
|---|---|
|
||||
| review_state | accepted |
|
||||
| integration_state | merged_local_dev |
|
||||
| deployment | not_required 或 loaded_local_launchd |
|
||||
| cleanup | pending(独立维护者;禁止 `--force`) |
|
||||
| remote_sync | not_requested |
|
||||
|
||||
CURRENT 行 → `done`(`docs apply`);`task close --status done`。
|
||||
|
||||
## 清理前
|
||||
|
||||
确认 tip 为 local_dev 祖先、证据已持久化、无 tracked/untracked 遗留、无进程占用。唯一日志/对话归档进 `.doc/ops/evidence/` 后再 `worktree remove`。
|
||||
|
||||
只读盘点(不自动删除、不自动写 MATRIX):
|
||||
|
||||
```bash
|
||||
python3 ../../scripts/agentctl.py cleanup report # 主目录或任意同仓 cwd
|
||||
python3 ../../scripts/agentctl.py docs drift
|
||||
```
|
||||
|
||||
对 `verdict=ready` 的 worktree 由独立维护者执行 `agent-worktree.sh remove … --delete-branch`;拒绝则保留 cleanup_pending。daemon 未装载时用 `queue schedule --drain`(主目录 + 分支 dev)。
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
name: agentctl-lease-write
|
||||
description: Write under agentctl leases and docs apply CAS. Use before any git write, shared-doc edit, or when hitting UNMANAGED_DOCUMENT_CHANGE / EVIDENCE_REQUIRED.
|
||||
---
|
||||
|
||||
# agentctl 租约写回
|
||||
|
||||
权威:[AGENTS §3–5](../../../AGENTS.md)、[操作规范](../../../.doc/ops/2026-09-21-agent-worktree-workflow.md)。
|
||||
|
||||
## 原则
|
||||
|
||||
- **任何仓库写**(含 `git add/commit`)必须在 `agentctl with` / MCP `lease_run` 租约内
|
||||
- CURRENT / FEATURE-MATRIX **只能** `docs apply`(行级 CAS;MATRIX 键为 `record_id`)
|
||||
- 直接 `git commit` 会被 agentctl-managed pre-commit hook 拒绝
|
||||
|
||||
## lease_run(CLI)
|
||||
|
||||
```bash
|
||||
python3 scripts/agentctl.py with \
|
||||
--task "$ID" \
|
||||
--resource path:scripts --resource path:.doc --resource git:index \
|
||||
-- bash -lc 'git add … && git commit -m "…"'
|
||||
```
|
||||
|
||||
MCP:`lease_run` 的 `command` 为 **argv 数组**(无额外 shell)。
|
||||
|
||||
## docs apply(行级)
|
||||
|
||||
```bash
|
||||
python3 scripts/agentctl.py docs snapshot --file .doc/ops/CURRENT.md --record "$RID"
|
||||
# expected_sha256 = snapshot.sha256;改 replacement 后:
|
||||
python3 scripts/agentctl.py docs apply --task "$ID" --request /tmp/req.json
|
||||
```
|
||||
|
||||
FEATURE-MATRIX 升 `done` 需要 `docs:approve` + 可核验 evidence(`git cat-file -e`),否则 `EVIDENCE_REQUIRED`。
|
||||
收口或合入含 MATRIX 的变更后跑 `python3 scripts/agentctl.py docs drift`:硬告警仅 `done→非 done`;不因任务结束自动升 done。
|
||||
|
||||
## 常见拒绝
|
||||
|
||||
| 码 | 处置 |
|
||||
|---|---|
|
||||
| `UNMANAGED_DOCUMENT_CHANGE` | 保留现场,先 snapshot/reconcile,勿覆盖 |
|
||||
| `BASE_CHANGED` | 重新 snapshot,基于新 sha 再 apply |
|
||||
| `AMBIGUOUS_RECORD` | 修重复 record_id / 模块名 |
|
||||
| `CAPABILITY_REQUIRED` | 任务缺 docs:admin / docs:approve |
|
||||
| `DOCUMENT_RECEIPT_REQUIRED` | 共享文档须经 apply 收据后再 commit |
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
name: agentctl-session-start
|
||||
description: Start an Agent-System session under agentctl governance. Use at session start, when opening a worktree, or before any write to this repo.
|
||||
---
|
||||
|
||||
# agentctl 会话启动
|
||||
|
||||
权威规范:[AGENTS.md](../../../AGENTS.md)、[操作规范](../../../.doc/ops/2026-09-21-agent-worktree-workflow.md)、[CURRENT](../../../.doc/ops/CURRENT.md)。
|
||||
|
||||
## 步骤
|
||||
|
||||
1. 读 `AGENTS.md`、`PROJECT.md`、`.doc/ops/CURRENT.md` 活跃摘要(勿跳过)。
|
||||
2. 核对管理面:
|
||||
|
||||
```bash
|
||||
python3 scripts/agentctl.py daemon status
|
||||
# 期望:status=ok;launchd 已装载时 manager.lock.held=true
|
||||
```
|
||||
|
||||
或 MCP 工具 `status`。
|
||||
|
||||
3. 刷新 CodeGraph 索引(fail-open;CLI 缺失可跳过):
|
||||
|
||||
```bash
|
||||
codegraph sync -q
|
||||
# 或:python3 scripts/agentctl.py hooks codegraph-sync
|
||||
```
|
||||
|
||||
跨文件定位优先用 CodeGraph MCP/`explore`;**grep 仍是完整性唯一权威**(假阴性时以 grep 为准)。
|
||||
|
||||
4. 若任务已存在:在注册 worktree 内工作,确认 `tasks.state=active`。
|
||||
5. 若新任务:跟 [agentctl-worktree-setup](../agentctl-worktree-setup/SKILL.md)。
|
||||
6. 任何仓库写 → [agentctl-lease-write](../agentctl-lease-write/SKILL.md);合入 → [agentctl-integrate-closeout](../agentctl-integrate-closeout/SKILL.md)。
|
||||
|
||||
## 禁止
|
||||
|
||||
- 主目录直接开发提交;未授权 `git push` / 晋升 test/main
|
||||
- 绕过 `docs apply` 改 CURRENT / FEATURE-MATRIX
|
||||
- 卸载或重启 launchd coordinator(除非用户明示)
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
name: agentctl-worktree-setup
|
||||
description: Create an agentctl task worktree, register scopes/capabilities, and claim CURRENT. Use when starting a new feature/fix task in Agent-System.
|
||||
---
|
||||
|
||||
# agentctl 建场
|
||||
|
||||
权威:[操作规范](../../../.doc/ops/2026-09-21-agent-worktree-workflow.md)。
|
||||
|
||||
## 命令序列
|
||||
|
||||
```bash
|
||||
cd /path/to/Agent-System # 主目录(dev)
|
||||
D=$(git rev-parse HEAD)
|
||||
ID=<task-id-YYYY-MM-DD>
|
||||
WT=.worktrees/$ID
|
||||
# 推荐入口:自动 best-effort codegraph init(后台;CLI 缺失不阻断)
|
||||
./scripts/agent-worktree.sh create feature/$ID
|
||||
# 等价:git worktree add -b feature/$ID "$WT" "$D"
|
||||
cd "$WT"
|
||||
python3 ../../scripts/agentctl.py task register \
|
||||
--id "$ID" --owner <Owner> \
|
||||
--scope scripts --scope .doc \
|
||||
--capability docs:publish
|
||||
# 需要整文/行级 admin 时再加 --capability docs:admin;证据升 done 加 docs:approve
|
||||
codegraph sync -q # 若建场已 init,此处只需 sync;缺失 CLI 可跳过
|
||||
```
|
||||
|
||||
## CURRENT 认领(docs apply)
|
||||
|
||||
```bash
|
||||
python3 ../../scripts/agentctl.py docs snapshot \
|
||||
--file .doc/ops/CURRENT.md --record "$ID" > /tmp/claim-snap.json
|
||||
# 新建行:expected_sha256=null
|
||||
cat > /tmp/claim.json <<EOF
|
||||
{"request_id":"$ID-claim-1","changes":[{
|
||||
"file":".doc/ops/CURRENT.md","record_id":"$ID","expected_sha256":null,
|
||||
"replacement":"| <Owner> | $ID | feature/$ID | $WT | <mutex> | in_progress |"
|
||||
}]}
|
||||
EOF
|
||||
python3 ../../scripts/agentctl.py docs apply --task "$ID" --request /tmp/claim.json
|
||||
```
|
||||
|
||||
## short-term 模板字段
|
||||
|
||||
`status`、`write_scope`、`mutex`、`base_dev_sha`、`review_state`/`integration_state`/`deployment`/`cleanup`/`remote_sync`。命名 `.doc/ops/short-term/YYYY-MM-DD-<slug>.md`。
|
||||
|
||||
## 注意
|
||||
|
||||
- 从确切 `dev` SHA 创建,不从他人 feature 分支启动
|
||||
- 重叠 path/mutex 只允许一个写者
|
||||
- CodeGraph 索引是加速器:有假阴性;穷举调用方仍用 grep
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
name: jev-decide
|
||||
description: Use jev-service typed decisions (choice/noul/numeric with probabilities) for Agent-System governance classification. Use when choosing task tier, validation level, reject-code routing, or other closed-enum judgments.
|
||||
---
|
||||
|
||||
# jev-decide(治理决策)
|
||||
|
||||
依赖 MCP 服务器 `jev`([`scripts/mcp/jev-mcp.mjs`](../../../scripts/mcp/jev-mcp.mjs))。凭证在本机 `~/.secrets/jev/`(`api.key`、`base-url`),**禁止**写入仓库、commit 或聊天。
|
||||
|
||||
## 何时用
|
||||
|
||||
输入是情境文本、输出是**封闭枚举 / yes-no / 分桶数值**时调用 `jev_decide`,例如:
|
||||
|
||||
| 决策点 | 建议 questions |
|
||||
|---|---|
|
||||
| 任务分级(是否开 worktree) | `choice`:`info_reply` / `single_task` / `cross_module` |
|
||||
| 验证层级(验证契约) | `choice`(可多题):`doc` / `script` / `go` / `frontend` / `migration` / `product_pi` |
|
||||
| 拒绝码处置 | `choice`:`reconcile` / `re_snapshot` / `fix_record_id` / `request_capability` / `abort` |
|
||||
| 是否 blocker / 是否触碰重验面 | `noul` |
|
||||
|
||||
不适合:需要解释链、多步规划、自由文本生成——那些走大模型或 agentctl 确定性门禁。
|
||||
|
||||
## 调用约定
|
||||
|
||||
1. 可选先 `jev_health`;失败则本机判断,勿阻塞写路径。
|
||||
2. `jev_decide`:同一情境的多问合成一次请求。
|
||||
3. 问句**正向措辞**,避免双重否定。
|
||||
4. 置信度路由:
|
||||
- `confidence >= 0.9` 且 top1−top2 ≥ 0.15 → 可采用
|
||||
- 否则 → agent 自行按规范裁定,把 jev 结果当参考
|
||||
5. 401/超时/`answers.*.error` → 降级到本机判断;勿把决策失败变成业务失败。
|
||||
|
||||
## 示例(任务分级)
|
||||
|
||||
```json
|
||||
{
|
||||
"context": "用户请求:给 CURRENT 加一行认领说明,不改代码",
|
||||
"questions": {
|
||||
"tier": {
|
||||
"type": "choice",
|
||||
"question": "This request matches which AGENTS task tier?",
|
||||
"options": ["info_reply", "single_task", "cross_module"]
|
||||
},
|
||||
"needs_worktree": {
|
||||
"type": "noul",
|
||||
"question": "Does this require a new feature/fix worktree?"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
权威矩阵仍以 [AGENTS.md](../../../AGENTS.md)、[验证契约](../../../.doc/ops/2026-09-21-validation-contract.md) 为准;jev 只加速封闭枚举分类,不替代机器门禁(admit/hooks/docs apply)。
|
||||
+5
-3
@@ -11,10 +11,10 @@
|
||||
.doc/
|
||||
README.md ← 本文件(总地图)
|
||||
status/ ← 模块/功能完成度 SSOT
|
||||
audit/ ← 问题发现与分析
|
||||
audit/ ← 问题发现与分析、ISSUES.md 问题/修复台账
|
||||
remediation/ ← 整改方案与发布缺口
|
||||
archive/ ← 历史(只增不删)
|
||||
ops/ ← 活协作(任务、交接、调研)
|
||||
ops/ ← 活协作(任务、交接、调研;lessons/ 开发经验)
|
||||
system-design/ ← 模块架构深读
|
||||
adr/ ← 架构决策
|
||||
backlog/ ← 产品 backlog(非阻塞)
|
||||
@@ -40,6 +40,8 @@
|
||||
| 当前在做什么 | [ops/CURRENT.md](ops/CURRENT.md) |
|
||||
| 模块完成度 | [status/FEATURE-MATRIX.md](status/FEATURE-MATRIX.md) |
|
||||
| 发布 blocker | [remediation/gap-matrix.md](remediation/gap-matrix.md) |
|
||||
| 问题历史、修复经过 | [问题台账](audit/ISSUES.md) · [闭环规范](ops/2026-09-23-issue-learning-workflow.md) |
|
||||
| 开发注意事项与经验检索 | [经验索引](ops/lessons/INDEX.md) |
|
||||
| 审计/问题分析 | [audit/INDEX.md](audit/INDEX.md) |
|
||||
| 整改方案 | [remediation/INDEX.md](remediation/INDEX.md) |
|
||||
| 历史归档 | [archive/README.md](archive/README.md) |
|
||||
@@ -68,6 +70,6 @@ audit(问题)→ remediation(方案)→ ops/short-term(任务)
|
||||
→ test-reports(验收)→ archive(关闭证据)
|
||||
```
|
||||
|
||||
状态字段:`planned | in_progress | blocked | done | cancelled`
|
||||
任务状态字段:`planned | in_progress | blocked | done | cancelled`。问题以 issue_state、经验以 lesson_state 独立记录,取值与转换见 [闭环规范](ops/2026-09-23-issue-learning-workflow.md);研究任务完成不关闭待修问题。
|
||||
|
||||
会话结束不等于任务完成;只有 done/cancelled 任务归档。CURRENT 保留最多 3 项焦点及活跃/阻塞/待集成/待清理事项,完成认领和长证据迁入 [历史快照](archive/ops/2026-09-21-current-history.md)。移动文档同步修复相对链接,保留证据与来源。规范生命周期另用 proposed/approved/active/deprecated;工具能力另用 manual/enforced。
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# ADR:最终成果保险库(FAV)
|
||||
|
||||
## 状态
|
||||
|
||||
已接受(2026-09-14,落地计划 V0–V6)
|
||||
|
||||
## 背景
|
||||
|
||||
运行库 PostgreSQL 与 workspace 投影会一起丢失或错挂。需要独立保存**已确认终态**的精确字节,但不能成为第三套完整业务真相源,也不能用目录扫描猜测“最终文件”。
|
||||
|
||||
## 决策
|
||||
|
||||
1. **三层权威**:PostgreSQL 管项目/权限/工作流/版本关系;workspace 是可清理投影;FAV 只对已归档 payload、manifest、来源证据和删除状态权威。
|
||||
2. **无 tenant_id**:安全边界沿用 `environment + project_members + role-admin`。未来组织层另立 ADR。
|
||||
3. **事件准入**:只接受方案准入表中的数据库事实。显式 publish/pin 不能绕过终态 allowlist。禁止扫描 workspace。
|
||||
4. **同事务冻结**:终态事务把精确 payload/SHA 写入 staging 并写 unpublished outbox;publisher 不得重读可变消息行。
|
||||
5. **union-deny 删除**:运行库删除账本或 vault tombstone 任一侧删除即拒绝读取/恢复。
|
||||
6. **恢复**:只进 scratch 库,默认 `recover-as-collection`。禁止 GET 自动写回或覆盖现有 head。
|
||||
7. **互补**:FAV、migration corpus、完整 DB backup/PITR 互相不能替代。不作为 409/split-brain 绕行。
|
||||
|
||||
## 后果
|
||||
|
||||
- 实现从 `feature/final-artifact-vault` 推进;mutex=`artifact-vault`。
|
||||
- Goose 从 **00034** 增加 FAV 表(00033 已被 task-run 治理占用)。
|
||||
- 降级读取默认关闭(`FAV_DEGRADED_READ`),Unit A 纠挂完成前不得对现网开启。
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: "Agent 规范整体审查"
|
||||
status: done
|
||||
created: 2026-09-21
|
||||
updated: 2026-09-21
|
||||
owner: Codex
|
||||
branch: feature/agent-policy-review
|
||||
worktree: .worktrees/agent-policy-review
|
||||
base_dev_sha: a241e838150f218f3a09d3523f93291b847d45fd
|
||||
write_scope: [.doc/ops/short-term/2026-09-21-agent-policy-review.md, .doc/archive/ops/2026-09-21-agent-policy-review.md, .doc/audit/2026-09-21-agent-policy-review.md, .doc/ops/CURRENT.md]
|
||||
mutex: agent-policy-review
|
||||
deployment: not_required
|
||||
cleanup: retained-with-reason
|
||||
---
|
||||
|
||||
# Agent 规范整体审查
|
||||
|
||||
## 目标与范围
|
||||
|
||||
评估生效规范的可完善之处,形成有依据的新增、删除、修改清单。本轮使用 ce-doc-review 的只读审查流程;不修改 AGENTS/PROJECT/客户端规则,不实现锁管理或改业务代码。
|
||||
|
||||
## 已确定约束
|
||||
|
||||
- 全部新增修改使用 .worktrees;主目录留给 dev 集成与运行。
|
||||
- 锁先统一入口/提交门禁防误改,OS 权限隔离后续实施。
|
||||
- 审查不等于实现或部署授权;已有未合入规范收口和 .locks 方案保留原分支。
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] 启动链、当前 Git、规范与模板盘点。
|
||||
2. [x] 一致性、可执行性、范围、安全及故障场景复核。
|
||||
3. [x] 核实保留发现,形成增删改建议与实施优先级。
|
||||
4. [x] 文档校验、归档、本地提交。
|
||||
|
||||
## 验收
|
||||
|
||||
- 每条保留发现有当前源文件或明确缺失证据、实际后果和建议修改。
|
||||
- 区分已生效规则、尚待实现工具和未合入草案;不把建议当现状。
|
||||
- 未修改主目录跟踪文件、运行锁、服务或用户数据。
|
||||
|
||||
## 结果与交接
|
||||
|
||||
- [整体审查](../../audit/2026-09-21-agent-policy-review.md):10 组增删改建议、2 项安全观察;保留已确定的 worktree 与 L1-first 选择。
|
||||
- 五个独立会话内视角已返回;主审核对引用与实际命令/脚本。文档原规则未改,自动化未实施。
|
||||
- 检查项:新增文档相对链接、git diff --check;未运行产品测试,不作运行验收声明。
|
||||
- 本任务 CURRENT 快照标 done,未占共享集成槽位;本地分支保留供审核,未合入 dev、未 push。
|
||||
- 需要执行修改时先按第一批消除冲突,再处理减负及既有工具实现;不要将本报告直接视为已生效规则。
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: "采纳 Agent worktree 工作规范"
|
||||
status: done
|
||||
created: 2026-09-21
|
||||
updated: 2026-09-21
|
||||
owner: Codex
|
||||
branch: feature/agent-workflow-governance-plan
|
||||
worktree: .worktrees/feature-agent-workflow-governance-plan
|
||||
mutex: agent-workflow-governance
|
||||
---
|
||||
|
||||
# 采纳 Agent worktree 工作规范
|
||||
|
||||
## 授权与范围
|
||||
|
||||
用户于 2026-09-21 确认“提交吧,之后按这套执行”。延续原治理任务,在原 dev 派生的独立 worktree 内将方案采纳为生效规则,提交并合入本地 dev。仅修改规范、模板和治理记录。
|
||||
|
||||
本次不将 W1–W4 的自动化开发宣称已完成;它们保留在实施任务中。主目录仍有其他任务未提交改动,使用临时集成 worktree 合入纯文档,不迁移原任务、不改变业务运行态、不 push。
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] 核对主目录现场、原方案提交与集成槽位。
|
||||
2. [x] 同步 AGENTS、PROJECT、Cursor 规则、操作规范与模板。
|
||||
3. [x] 文档检查、提交、独立 worktree 合入 dev。
|
||||
4. [x] 更新验收/交接及清理状态。
|
||||
|
||||
## 验收
|
||||
|
||||
- [x] 单 Agent 主目录开发例外已移除,生效规则可从启动链发现。
|
||||
- [x] 创建明确来自 dev;测试提交、共享服务串行、部署及安全清理条件可执行。
|
||||
- [x] 自动化能力保持 planned;主目录其他任务未提交改动不被纳入提交。
|
||||
- [x] 本地 dev 含本次规范提交;未 push,未重建服务。
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [方案](../../remediation/2026-09-21-agent-workflow-governance-plan.md)
|
||||
|
||||
## 结果
|
||||
|
||||
- 规则提交 `048bbe4a`,验证的合并候选及首次 dev 合入 `83e22a70`。
|
||||
- [文档验收](../../test-reports/2026-09-21-agent-workflow-governance-adoption-test-report.md)。
|
||||
- 主目录旧任务保留;临时 dev 集成工作区保留到原 owner 可安全切回 dev,见 [交接](../../ops/handoffs/2026-09-21-agent-workflow-governance-plan.md)。
|
||||
- 收口提交合入后普通清理本任务和候选工作区,实际结果记录共同 Git 目录的治理操作收据。未 push;deployment=not_required。
|
||||
@@ -0,0 +1,167 @@
|
||||
---
|
||||
title: "dev rebuild 从临时 worktree 挂载空数据根导致正文投影 409"
|
||||
status: done
|
||||
created: 2026-09-14
|
||||
updated: 2026-09-14
|
||||
severity: critical
|
||||
---
|
||||
|
||||
# dev rebuild 从临时 worktree 挂载空数据根导致正文投影 409
|
||||
|
||||
## 现象
|
||||
|
||||
用户刷新项目 143 后,前端请求:
|
||||
|
||||
```text
|
||||
GET /api/v1/docgov/documents/doc_proj143_intake/content 409
|
||||
DOCUMENT_CONTENT_PROJECTION_MISSING
|
||||
docgov: document content projection missing
|
||||
```
|
||||
|
||||
错误发生在 `projectDocuments.ts` → `controlledDocHydrate.ts` 的受控正文水合链。它不是并发编辑的 `HEAD_CONFLICT`,也不是此前已修过的 canonical hash drift。
|
||||
|
||||
本轮只做只读现场核对与整改设计:没有操作用户会话、没有修改数据库/正文、没有重建共享容器。
|
||||
|
||||
## 结论
|
||||
|
||||
直接根因是 **dev 应用、PI Runner、Cursor Runner 被重建成挂载临时集成 worktree 的空 `data/dev`,而 PostgreSQL 仍沿用原 dev 持久卷**,形成数据库与文件事实源的 split-brain:
|
||||
|
||||
```text
|
||||
PostgreSQL persistent volume
|
||||
document_records.work_dir=/app/data/workspaces/bizdev/intake_1789270446856290128
|
||||
│
|
||||
├─ 主仓 data/dev:output.md 存在,SHA 与 DB/head 一致
|
||||
│
|
||||
└─ 当前容器 /app/data:绑定 /tmp/as-dev-wf409-merge/data/dev,文件不存在
|
||||
```
|
||||
|
||||
`loadControlledDocumentContent` 先取得账本 head,再调用 `InspectProjection`;容器内看不到 `output.md`,因此正确分类为 `MISSING` 并返回 409。前端只是如实暴露后端错误,不是本次根因。
|
||||
|
||||
## 现场证据
|
||||
|
||||
### E1 — 容器挂载源是临时 worktree
|
||||
|
||||
2026-09-14 08:54 UTC 的 `docker inspect shuimu-agent-app-dev`:
|
||||
|
||||
| 项 | 现场值 |
|
||||
|---|---|
|
||||
| Compose working dir | `/tmp/as-dev-wf409-merge` |
|
||||
| Compose config | `/tmp/as-dev-wf409-merge/docker-compose.dev.yml` |
|
||||
| app `/app/data` source | `/tmp/as-dev-wf409-merge/data/dev` |
|
||||
| pi-agent `/app/data/workspaces` source | `/tmp/as-dev-wf409-merge/data/dev/workspaces` |
|
||||
| cursor-agent `/app/data/workspaces` source | `/tmp/as-dev-wf409-merge/data/dev/workspaces` |
|
||||
| app created | `2026-09-14T08:40:44Z` |
|
||||
|
||||
数据库容器的数据仍来自命名卷 `agent-dev-context-pgdata`,不会随 Compose 工作目录切换。由此产生“旧数据库 + 新空文件根”的不一致组合。
|
||||
|
||||
### E2 — 项目 143 数据本身当前完整
|
||||
|
||||
`document_records`:
|
||||
|
||||
| 字段 | 值 |
|
||||
|---|---|
|
||||
| doc_id | `doc_proj143_intake` |
|
||||
| work_dir | `/app/data/workspaces/bizdev/intake_1789270446856290128` |
|
||||
| content_sha256 | `f283ba94c9c037897f021960f51abacee7242c3db8d10f9f2a5e32cde6acf039` |
|
||||
| updated_at | `2026-09-14 05:14:10.302146+00` |
|
||||
|
||||
账本 open version 1 的 head snapshot 302 是人工修订,SHA 同为 `f283...f039`;主仓文件:
|
||||
|
||||
```text
|
||||
/home/weichen/projects/Agent-System/data/dev/workspaces/bizdev/intake_1789270446856290128/output.md
|
||||
size=40075
|
||||
sha256=f283ba94c9c037897f021960f51abacee7242c3db8d10f9f2a5e32cde6acf039
|
||||
```
|
||||
|
||||
同一路径在当前 app 容器内 `stat` 返回 `No such file or directory`。所以无需再次对项目 143 做内容修复;需要恢复正确数据根挂载。
|
||||
|
||||
### E3 — 影响不是单文档
|
||||
|
||||
对 dev 数据库 100 条“非模板且 work_dir 非空”的记录做只读比较:
|
||||
|
||||
| 根目录 | aligned | missing |
|
||||
|---|---:|---:|
|
||||
| 主仓 `/home/weichen/projects/Agent-System/data/dev` | 32 | 68 |
|
||||
| 当前容器挂载 `/tmp/as-dev-wf409-merge/data/dev` | 0 | 100 |
|
||||
|
||||
主仓下的 68 条 missing 包含历史测试/临时路径,不能直接等同于 68 个真实用户缺陷;但当前容器对本次抽样 **100/100 都不可见**,足以确认环境级事故。恢复前任何真实文档读取或 PI 写入都不可信。
|
||||
|
||||
错误根在容器启动后已出现 27 个文件,其中 9 个 CAS blob 的 mtime 为 `08:40:45 UTC`;虽然 08:54 UTC 尚未找到新的 `output.md`,错误根已经不是可直接丢弃的“绝对空目录”,恢复前仍须做完整差异保全。
|
||||
|
||||
只读核对显示 test/main 当前 app 与 PI Runner 仍挂主仓 `data/test`、`data/main`,本轮没有观察到同样的运行事故;但其 Compose 仍使用相对 bind,仍受同一设计缺陷影响。
|
||||
|
||||
### E4 — 健康检查假阳性
|
||||
|
||||
同一时刻 `/health` 与 `/ready` 都返回 200,只检查数据库、schema 和 task store;未验证:
|
||||
|
||||
- 容器绑定的数据根身份;
|
||||
- app 与 runner 是否挂载同一根;
|
||||
- 活跃项目的正文投影是否可达;
|
||||
- 数据库记录与文件根是否属于同一环境实例。
|
||||
|
||||
因此“healthy + schema 33”不能证明文档运行态可用。
|
||||
|
||||
## 根因分析
|
||||
|
||||
### R1 — Compose 相对 bind mount 与调用 worktree 耦合(直接根因)
|
||||
|
||||
`docker-compose.dev.yml` 使用:
|
||||
|
||||
```yaml
|
||||
- ./data/dev:/app/data
|
||||
- ./data/dev/workspaces:/app/data/workspaces
|
||||
```
|
||||
|
||||
Compose 按 project working directory 解析相对路径。`scripts/env-service.sh` 又把 `ROOT_DIR` 定义为脚本所在 worktree 并 `cd` 进去,所以从任何复制/linked worktree 执行 `dev rebuild`,都会把该 worktree 自己的 `data/dev` 当成运行数据根。
|
||||
|
||||
### R2 — 纪律是文档约束,不是可执行门禁
|
||||
|
||||
`scripts/agent-worktree.sh` 只打印“禁止在此目录运行 env-service”,`AGENTS.md` 也规定 worktree 不得操作共享 Docker;但 `env-service.sh` 没有检测 linked worktree、主 worktree、分支、数据根或集成槽位。一次误调用即可静默替换全套容器挂载。
|
||||
|
||||
### R3 — 数据库与文件没有共享存储身份
|
||||
|
||||
数据库使用稳定 named volume;正文使用随调用目录变化的 bind mount。两者没有共同的 environment/storage UUID,也没有启动握手,因此任意一个被指向另一份状态时,进程仍可启动并连接成功。
|
||||
|
||||
### R4 — 账本权威仍被兼容投影阻断
|
||||
|
||||
当前设计声明 ledger head 是权威正文,但 GET 在账本存在时仍要求 `output.md` 投影必须存在且 aligned。于是兼容投影丢失会阻断 UI 读取权威账本。该 fail-closed 对真实 fork 有价值,却把“可安全重建的 missing”与“内容分叉”按同样的可用性后果处理。
|
||||
|
||||
### R5 — 正文更新仍是非原子双写
|
||||
|
||||
人工 PATCH 先提交 PostgreSQL 账本,再单独写 `output.md`;候选 commit/reject 也采用 DB 状态与文件投影分步更新。失败后只依赖同幂等键重试,没有持久 projection job/status 和后台补偿。即使修复本次挂载问题,进程崩溃、权限错误或磁盘故障仍可能再次留下 head 已更新、投影缺失的状态。
|
||||
|
||||
### R6 — 发布验收没有“从不同源码目录 rebuild 后仍接回同一状态”的负例
|
||||
|
||||
既有真实 UI 验收验证过 restart 后恢复,但 restart 不会重新解析 Compose bind mount;本次事故由 rebuild/recreate 触发。现有门禁没有覆盖 linked worktree、临时集成目录或错误数据根的启动拒绝。
|
||||
|
||||
## 为什么会“每次修改后又出现”
|
||||
|
||||
修改本身并不会删除项目 143 正文。本次时间线表明:最新人工修订和主仓 `output.md` 在 05:14 UTC 已一致落盘;08:40 UTC 后续 dev rebuild 把运行容器切到另一份空数据根,刷新才出现 409。
|
||||
|
||||
因此用户感知的“改完再刷新就坏”来自两个事件经常相邻:开发修改 → Agent 在临时 worktree 合并/rebuild → Compose 改绑数据目录。只修某个文档、某个 hydrate effect 或某次 hash 漂移,都无法阻止它复发。
|
||||
|
||||
## 严重度与影响
|
||||
|
||||
`critical`:
|
||||
|
||||
- dev 环境所有受控正文、工作流产物和 runner 工作区均可能不可见或写入错误根;
|
||||
- 错误根上的新输出可能与主仓状态分叉;
|
||||
- health/ready 仍为绿色,集成报告可能产生假 PASS;
|
||||
- test/main 使用同类相对 bind 写法,设计缺陷可横向复制,虽本轮未观察其被错挂载。
|
||||
|
||||
## 关联整改
|
||||
|
||||
- Remediation: [dev 运行数据根隔离与文档投影自愈整改](../remediation/2026-09-14-dev-runtime-data-root-and-projection-remediation.md)
|
||||
- Short-term: [dev runtime data root guard 诊断与设计](../ops/short-term/2026-09-14-dev-runtime-data-root-guard.md)
|
||||
- 前序问题: [项目 143 canonical hash 漂移](./2026-09-14-project143-controlled-content-404.md)
|
||||
|
||||
## 开放问题
|
||||
|
||||
- 恢复前需再次冻结并备份错误根,确认 08:40 UTC 后是否已有新会话、附件、runner 输出或 agent session 写入;08:54 UTC 抽样未发现 `output.md`,不能替代完整差异清单。
|
||||
- test/main 当前挂载源需在实施 Unit A 只读核对;本轮未扩大操作范围。
|
||||
|
||||
## 审查附记(2026-09-14 ~09:23 UTC)
|
||||
|
||||
- 现场复核:`shuimu-agent-app-dev` 仍 created `08:40:44Z`,bind source 仍为 `/tmp/as-dev-wf409-merge/data/dev`;`/health` `/ready` 仍 200,`schema_version=33`。
|
||||
- 主仓 CURRENT 集成槽仍为 `implementer_cursor` / `e2e`。worktree 副本不得写成 idle。
|
||||
- 方案已审查修订:见 [整改方案](../remediation/2026-09-14-dev-runtime-data-root-and-projection-remediation.md)。用户选择事故抢占 + 先改方案再批实施。08:54 的 `f283...f039` 不得再当 Wave 0 硬门槛。
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
title: "pi-native 对比未过 P95 门槛"
|
||||
status: planned
|
||||
created: 2026-09-21
|
||||
updated: 2026-09-21
|
||||
severity: medium
|
||||
---
|
||||
|
||||
# pi-native 对比未过 P95 门槛
|
||||
|
||||
## 现象
|
||||
|
||||
真实 MiniMax-M2.7-highspeed 双后端对比中,`pi-native` 六例全部写出目标文件,容器 `pi-agent` 只有两例文档任务成功。按成功样本计算的 P95 仍是 `pi-native` 16.616s、容器 6.926s,比值为 2.40,超过 1.3 倍替换门槛。因此 dev 默认后端保持 `pi-agent`。
|
||||
|
||||
## 根因分析
|
||||
|
||||
- 时延样本只统计成功且无 P0 的用例。容器 `reasoning` 画像使用 `--no-tools`,不会把助手正文落成目标文件,四例返回 `MISSING_TARGET`,不进入 P95。容器 P95 只由两例较快的文档任务构成。
|
||||
- `pi-native` 的 P95 落在 `doc-outline`(16.616s)。同一提示在容器上是 6.926s。文档任务本身慢于 1.3 倍,不是分位数算法造成的。
|
||||
- 第一轮对比把分位索引截断成 0,两例成功时取了更快的那例,已作废。本结论使用 nearest-rank(`ceil`)后的第二轮日志。
|
||||
|
||||
## 严重度
|
||||
|
||||
`medium`。运行时可以继续在分支上迭代,当前默认链路未切换,容器后端仍可回退。
|
||||
|
||||
## 关联整改
|
||||
|
||||
- 任务:`.doc/ops/short-term/2026-09-21-go-agentx-runtime.md`
|
||||
- 报告:`.doc/test-reports/2026-09-21-go-agentx-runtime-test-report.md`
|
||||
- 后续:缩短 `pi-native` 文档轮次时延,或把门槛改成按同一成功用例配对比较后重新实测。未重新通过前不改 `AGENT_BACKEND`。
|
||||
|
||||
## 证据
|
||||
|
||||
- `.doc/test-reports/assets/go-agentx-runtime/ab-live.txt`
|
||||
- `.doc/test-reports/assets/go-agentx-runtime/ab-live-round1.txt`(作废的截断分位)
|
||||
|
||||
## 开放问题
|
||||
|
||||
- 容器结果不回传 token,本轮容器用量为 0,无法比较 token。
|
||||
- `reasoning` 画像的成功定义是否应要求容器也把正文写入目标文件。当前判定仍按两边各自的 `Result.Success` 与目标文件是否出现。
|
||||
@@ -0,0 +1,156 @@
|
||||
---
|
||||
title: "当前系统模块解耦现状审查"
|
||||
type: docs
|
||||
date: 2026-09-22
|
||||
source_sha: d034aa00e5785f51234b484f9dca6bf4fb037660
|
||||
task_id: modular-contract-standard-2026-09-22
|
||||
---
|
||||
|
||||
# 当前系统模块解耦现状审查
|
||||
|
||||
## 结论与范围
|
||||
|
||||
当前系统属于**已有实质模块化基础,但契约一致性、数据所有权与运行隔离尚未闭合的模块化单体**。不是只有文件夹拆分:已有应用用例、共享事务、PostgreSQL outbox/delivery/inbox、独立 events 进程、PI Runner HTTP typed-result 边界。
|
||||
|
||||
下一步收益最大的工作是统一业务入口、修正事件顺序契约、补运行时校验和资源预算。把现有相互依赖的实现全部包装为 HTTP 服务,会保留语义耦合并引入跨进程失败窗口。
|
||||
|
||||
本报告针对固定源码 SHA,只读检查 Go/React、架构配置、迁移和部署定义。**未检查当前实际镜像/进程/数据库积压,未运行 Go/PG/PI/浏览器或故障注入测试。** 下文“实现存在”是源码证据;“可能造成”是风险推导;不宣称现网事故已复现,也不改变 FEATURE-MATRIX 或发布门禁。
|
||||
|
||||
关联:[通用规范](../system-design/2026-09-22-generic-module-contract-standard.md)、[采用规划](../remediation/2026-09-22-modular-platform-adoption-plan.md)、[任务与验证](../ops/short-term/2026-09-22-modular-contract-standard.md)。
|
||||
|
||||
## 分维度判断
|
||||
|
||||
| 维度 | 已有基础 | 当前局限 | 判断 |
|
||||
|---|---|---|---|
|
||||
| 模块职责 | domain/app/server 分层,组合根 | server 认识大量实现,跨包类型泄漏 | 部分解耦 |
|
||||
| 业务入口 | docflow/stageflow/chatflow 用例 | 对话和 HTTP 同一动作存在旁路 | 需优先收敛 |
|
||||
| 数据边界 | 表 owner 清单与 UoW | 5 项 SQL 写例外、16 项路径例外 | 明确但未闭合 |
|
||||
| 事件通信 | 可靠 PG 投递与独立进程 | 顺序规则与 ADR 冲突,校验不完整 | 机制具备,语义有缺口 |
|
||||
| 并发与幂等 | claim、lease、token、DB 收据 | 慢消费者共享循环,同 ID 异载荷不校验 | 部分保证 |
|
||||
| 跨进程边界 | Web/server、PI Runner、events | 业务模块大多仍共享 server 进程/资源 | 不能宣称全模块故障隔离 |
|
||||
| 前端功能 | API/hooks 拆分 | 根状态和 setter 跨功能共享 | 文件组织优于状态边界 |
|
||||
| 工程约束 | arch-check 与契约 registry | 静态覆盖有限,不证明运行隔离 | 有工具,须明确盲区 |
|
||||
|
||||
不提供无权重依据的“解耦百分比”。以下发现按对数据与行为的实际影响排序,而非按文件大小排序。
|
||||
|
||||
---
|
||||
|
||||
## A1. 事件领取规则与已接受的顺序契约相冲突
|
||||
|
||||
**高优先级源码问题。** ADR 规定允许首个高领域版本 bootstrap,禁止把 MemoryBus 的连续版本等待搬到 PG dispatcher:`.doc/adr/2026-09-15-event-consumer-checkpoint.md:12-23`。
|
||||
|
||||
当前 `internal/events/dispatcher.go:39-46,75-84` 采用 `version <= checkpoint + 1`;无 checkpoint 时只接纳版本 0/1。生产者 `internal/app/docflow/commands.go:182-185` 使用 document record ID,`:211-214` 使用 candidate ID,`:162-165` 使用文档账本版本。这些不是从 1 开始连续的事件序号。
|
||||
|
||||
因此在“无 checkpoint、第一条版本为 42”这一明确条件下,该事件按 SQL 不能被领取。是否已有这种实际积压未查数据库,不能报成现网观测。
|
||||
|
||||
现有 `internal/events/pg_test.go:18-28` 固化同样 gap 规则;`dispatcher_pg_test.go:105-109` 使用 v1/v2,不能覆盖稀疏首事件。
|
||||
|
||||
**建议验收**:真实 PG 下测试首次 v42、v42→v47、部分事件订阅、毒消息隔离;按既有 ADR 恢复 bootstrap,或经明确新 ADR 引入独立事件序列及迁移。通用规范对应 MCS-15。
|
||||
|
||||
## A2. 同一批准动作存在 HTTP 与对话入口分叉
|
||||
|
||||
**高优先级待验证风险。** HTTP `internal/server/handlers.go:793-808` 调用 `docflow.Commands.Approve`,后者在 `internal/app/docflow/commands.go:173-188` 执行 UoW 与 EventApproved。
|
||||
|
||||
对话 `internal/chat/action_executor.go:68-76` 直接调用 GovernanceEngine.ApproverApprove;`internal/app/app.go:294-307` 已不再注册旧通知/批准 hook,`internal/docgov/engine.go:957-960` 的直接路径仅尝试旧 hook。
|
||||
|
||||
源码证明入口路径不同,存在绕过 durable workflow_advance/notify 的风险;本次未执行真实对话批准,不能把完整用户后果记为已复现。
|
||||
|
||||
**建议验收**:同一授权场景分别从 HTTP、对话、后台任务触发,比较授权拒绝、状态提交、事件、工作流推进与通知,所有入口汇入同一用例。通用规范对应 MCS-04。
|
||||
|
||||
## A3. 契约登记尚未成为完整运行时校验
|
||||
|
||||
`internal/events/registry.go:28-52` 登记 producer、consumer、schema、PayloadFields;`:75-91` 主要检查启用与消费者。
|
||||
|
||||
`internal/events/envelope.go:65-85` 检查基础字段、schema、digest/scope,但不按事件逐项校验 producer allowlist、JSON 必填/类型/额外字段。`internal/events/pg.go:32-47` 依赖此验证。`inventory.go:29-63` 也未完成 payload 结构检查。
|
||||
|
||||
实际 `internal/app/docflow/commands.go:279` 的 Producer 为 `docflow`,registry 示例为 `app/docflow`(`registry.go:42-46`),当前路径不会因此拒绝。消费 hydration `dispatcher.go:204-224` 与 handler 调用 `worker.go:252` 也不能证明所有入口统一重新校验。
|
||||
|
||||
**建议验收**:未知事件/schema、伪造 producer、缺必填、异类型、超大 payload、digest/tenant/environment 不符均有发布和消费负例。通用规范对应 MCS-08/09/18/21。
|
||||
|
||||
## A4. 消费者逻辑独立,但资源执行仍串行共享
|
||||
|
||||
`internal/events/worker.go:99-113` 逐一 RunOnce 各消费者;`:137-147` 一批先 claim 再逐个 handle。心跳直到该条 handle 才启动(`:208-234`)。
|
||||
|
||||
慢消费者会延迟同 worker 的其他消费者;预取队尾还可能在开始处理前耗掉 lease。增加副本能缓解吞吐,不证明消费者有独立预算和公平性。当前可隔离永久错误,不等于慢任务也隔离。
|
||||
|
||||
**建议验收**:阻塞一个消费者、保持另一个持续输入,后者满足自己的延迟预算;批量排队超过租期时不允许并发重复副作用。先按空闲槽 claim,并配置每消费者超时、并发、池配额;高风险任务再进程隔离。对应 MCS-14/17。
|
||||
|
||||
## A5. 去重与健康检查不能被扩大解释
|
||||
|
||||
`internal/events/pg.go:43` 对相同 event_id 使用 DO NOTHING,未比较已有 payload digest。因此“重复 ID 被忽略”并不保证“同键异载荷会冲突”。
|
||||
|
||||
`cmd/events/main.go:91-115` 的 health、ready、live 分别关注进程、DB/schema/注册条件、调度心跳;`worker.go:109-112` 在处理前 Touch 且忽略 RunOnce 返回错误。Compose healthcheck 使用 /health(`docker-compose.dev.yml:170-175`)。
|
||||
|
||||
**建议验收**:同 ID 同内容返回既有结果、不同内容冲突;依赖持续失败时最老消息年龄和分消费者失败数告警,不能依靠健康探针证明业务前进。对应 MCS-13/19/20。
|
||||
|
||||
---
|
||||
|
||||
## B1. 组合根、契约类型与实现仍相互渗透
|
||||
|
||||
优点:`internal/app/app.go:96` 集中装配,`internal/server/server.go:87` 接收 runtime。限制:`server.go:40-84` 持有领域具体服务、pool、上下文等,`:123-132` 还回填 Runtime 并初始化执行器。HTTP 适配器获得整个 Runtime,难以维持最小依赖。
|
||||
|
||||
`internal/app/stageflow/usecase.go:10-37` 是窄端口且未配置时 fail closed,但 `types.go:3-15` alias 到 bizdev 模型。`internal/app/chatflow/ports.go:75-106` 返回 ctxmgr/coordinator/projectinstance 具体类型。接口改变了调用位置,仍未彻底隐藏内部模型。
|
||||
|
||||
本次 server 生产 SQL 搜索未发现真实业务 SQL,**不能把持有 pool 等同于已经直接越权写表**。改造重点是缩小可用能力与未来变更影响,不虚构违规。
|
||||
|
||||
## B2. 单写者有登记,仍有明确例外
|
||||
|
||||
`.doc/system-design/module-boundaries.yaml:276-374` 登记表 owner,`:471-511` 登记 5 项 SQL 例外。
|
||||
|
||||
源码确认:`internal/docrevision/pg_store.go:456-477` 更新 freeform_documents/document_records;`internal/docduty/store.go:144`、`revoke.go:154` 修改 document_records;`internal/projectinstance/store.go:920` 更新 task_runs。
|
||||
|
||||
建议通过 owner repository/用例端口逐项归还写权,保留必需事务边界。不得为了删除一个 import,把同一 SQL 移到万能公共 repository。
|
||||
|
||||
## B3. 共享事务值得保留,不能随意替换为网络调用
|
||||
|
||||
`internal/app/docflow/commands.go:88-112` 使用 UoW 与 owner GetForUpdate;`internal/docrevision/pg_store.go:482-491` 加入同一事务;`internal/app/uow/pg_uow.go:52-80,95-124` 提供有界事务重试、锁等待和提交。
|
||||
|
||||
`internal/app/app.go:269-275` 接入 events.PGSink,`internal/events/pg.go:17-58` 拒绝无 UoW 发布并同事务创建 envelope/delivery。这是实质强一致性能力。若以后拆进程,必须重新定义跨域中间态、补偿和对账,不能用分布式锁替代事务。
|
||||
|
||||
## B4. 文件与前端状态也构成模块间隐式协议
|
||||
|
||||
文件证据:`internal/coordinator/context.go:456-459` 读取 output.md;`engine.go:691-701,895,1051` 读写/拼接共享产物路径;`internal/docgov/lease.go:415-416` 写 projection 文件。文件 owner、不可变引用、版本与发布原子性应与数据库同样治理。
|
||||
|
||||
前端证据:`web/src/App.tsx:130-170,1163-1204,1367-1406` 将消息、交付物、缓存及 setter 传给多个功能 hooks;`useSendMessage.ts:85-121` 可修改多个域状态。建议 owner 管理状态、对外命令/查询/事件;浏览器内无需强制 HTTP。
|
||||
|
||||
`web/src/api/authHeaders.ts:27-44` 已有认证辅助,但 chatStream、taskRuns、docgov 等仍各自 fetch。统一 client 应处理通用超时、错误、取消与身份,功能 DTO 继续分域。
|
||||
|
||||
## B5. 静态架构检查有价值,但证明范围有限
|
||||
|
||||
`internal/archtest/scan.go:38-70` 默认只扫 internal 生产 Go;`:169-205` 检查 import allowlist 和登记表的 SQL 字符串。它不涵盖前端、默认 cmd 范围、动态 SQL 完整语义、实际权限、兼容性和资源隔离。
|
||||
|
||||
`scan.go:18,392-410` 的事件匹配范围主要为 document.* / intent.plan.* 和特定调用模式,不能根据 YAML 中存在 taskrun/fav 就假定每条协议都被检查。
|
||||
|
||||
`module-boundaries.yaml:182-225` 仍允许 server 依赖大量领域;`:641-651` 登记 sql_write=5、path=16 基线。**这是读取到的配置,不是本次 arch-check 执行结果。**
|
||||
|
||||
---
|
||||
|
||||
## 可保留的隔离与演进能力
|
||||
|
||||
- 独立 worker:`cmd/events/main.go:68-89,127-130` 注册 notify/advance/projection,FAV 明确不注册;Compose 已有 events 服务。历史“没有独立 worker”的判断已过时。
|
||||
- 领取与确认:`dispatcher.go:49-97,163-200,227-259` 有原子 claim、owner/token、attempt、inbox/checkpoint;旧 ClaimIDs 已禁用。
|
||||
- DB 效果原子性:`worker.go:247-275` 的 handler、fenced ack、commit 同事务;仅适用于参与同一 DB 事务的效果,不能扩展为任意外部 IO。
|
||||
- 消费者实现:`internal/app/docproject/consumer.go:73-94` 使用事件回执与 no-replace;`docadvance/consumer.go:80-104` 使用同事务推进与通知。
|
||||
- 冻结执行输入:`internal/workflow/runtime/orchestrator.go:27-41,69-85` 从冻结实例取职责,缺失时拒绝,可泛化为任务绑定配置/契约版本。
|
||||
- PI Runner:`internal/agent/piagent.go:145-194` 有 HTTP/Bearer、超时、run_id、typed result 和大小限制;`remote_result.go:63-79` 对存在但非法 typed 字段 fail closed。
|
||||
|
||||
## 测试证据边界
|
||||
|
||||
以下是已有测试定义,不是本次 PASS:
|
||||
|
||||
| 路径 | 已有测试意图 | 本次状态 |
|
||||
|---|---|---|
|
||||
| internal/app/docflow/same_tx_pg_test.go | 状态与 outbox 同事务回滚 | 未运行 |
|
||||
| internal/events/dispatcher_pg_test.go | 多 worker、off/shadow、ack、隔离 | 未运行 |
|
||||
| internal/app/docnotify/e1a_pg_test.go | 通知权限、shadow/live、回滚 | 未运行 |
|
||||
| internal/app/docadvance/e1b_pg_test.go | 工作流事件消费 | 未运行 |
|
||||
| internal/app/docproject/e1c_pg_test.go | 投影与 no-replace | 未运行 |
|
||||
| internal/agent/piagent_typed_e2e_test.go | 条件启用的真实 PI | 未运行 |
|
||||
|
||||
PG 测试在 short 或缺少独立 DSN 时可跳过;PI 测试有显式开启条件。建议新增 A1–A5 的针对性场景,再做受影响用户入口验收。未经授权,本次不启动这些实现或共享环境测试。
|
||||
|
||||
## 与原方案的关系
|
||||
|
||||
继续引用 2026-09-20 A–G 分批整改作为现有依赖收敛清单,不能据此宣称原批次已经完成。A1–A5 是本次新增或细化的源码证据,实施时应并入同一治理链,避免开第二套互相冲突的解耦项目。
|
||||
|
||||
原规范保留模块化单体,本次通用规范允许按条件选择进程/服务隔离。两者分别用于“当前项目生效规则”和“未来项目待采纳标准”,没有自动覆盖关系。
|
||||
@@ -0,0 +1,27 @@
|
||||
# 历史问题补录:可选职责与正文哈希
|
||||
|
||||
补录日期:2026-09-23;owner:Codex;登记任务:[issue-learning-2026-09-23](../ops/short-term/2026-09-23-issue-learning.md)。这是两个问题的登记主记录,原审计、修复任务及验收报告继续作为事实证据;没有重新运行产品测试或读取业务数据。`evidence_basis=historical`,当前运行状态未复测,源码复核基线为 `2fdb6e548e3784771f27e6a9e79b9c364f76c566`。
|
||||
|
||||
## nullable-duty
|
||||
|
||||
- issue_id:`ISSUE-20260923-nullable-duty`;issue_state:`resolved`;severity:high;recurrence_count:0(指登记后重开次数,非历史发生总数)。
|
||||
- 发现/修复日期:2026-09-17;原处理 owner:Cursor;补录 owner:Codex;原任务:`fix/docgov-optional-duty-null-fk`。
|
||||
- 现象与已证实根因:[原审计](2026-09-17-docgov-optional-duty-null-fk.md)。可选 reviewer 缺席合法返回 0,但创建路径直接写入可空 FK;heal 路径已有空值映射,创建路径漏改。底层 FK 又被错误分型掩盖。
|
||||
- 同类范围:可选职责的创建/heal 写入边界。历史报告验证 reviewer/approver 为 NULL;不能由此推断所有 FK、全职责模式和全部授权边界均已验证。
|
||||
- 修复思路:保留可选职责语义,在 SQL 边界将缺席值映射 NULL,并改善错误分型;通过强制配置 reviewer 绕过错误会改变业务契约。未发现其他尝试的实测记录,不虚构失败实验。
|
||||
- 修复经过/提交:[原任务](../archive/ops/2026-09-17-docgov-optional-duty-null-fk.md),历史合并 `e488d10`;本次只核对原文记录,不把短 SHA 当当前制品身份。
|
||||
- 验证与关闭范围:[原报告](../test-reports/2026-09-17-docgov-optional-duty-null-fk-test-report.md) 记录单测、PG 集成、真实任务 API 启动与 DB NULL;证明账本创建通过,不证明真实 UI 或 PI 全流程完成。历史 deployment=passed(dev,来源为原报告),当前运行未复测。
|
||||
- 本次复核:当前源码 `internal/docgov/engine.go` 创建路径仍调用 `nullIfZero`;这是源码检查,未重跑 PG。
|
||||
- 经验:[LESSON-20260923-nullable-duty](../ops/lessons/2026-09-23-nullable-duty.md)。后续触发:职责模型或任一持久化入口变化时复核,异常复发重开。独立的 flushSync 警告不在本条关闭范围。
|
||||
|
||||
## content-hash
|
||||
|
||||
- issue_id:`ISSUE-20260923-content-hash`;issue_state:`resolved`;severity:critical;recurrence_count:0(登记后)。
|
||||
- 发现/修复日期:2026-09-14;原处理:Cursor 修复、Antigravity UI 验收;补录 owner:Codex。
|
||||
- 现象与因果链:[原审计](2026-09-14-project143-controlled-content-404.md)。文件存在却被报 404;规范化去掉有硬换行语义的双空格,bootstrap 只改账本哈希未同步文件;并发 hydration 与无效轮询更新放大故障。
|
||||
- 同类范围:旧文档 bootstrap、规范化、账本/文件投影、错误映射与刷新竞态。历史扫描范围见原审计,不扩大为所有数据无问题。
|
||||
- 修复思路/选择:[整改方案](../remediation/2026-09-14-controlled-content-canonical-hash-remediation.md)。保持文本语义、原子投影和结构化错误;历史原文件与旧 head 先保全再显式 migration_repair。静默覆盖原文件会丢失语义,不能用于“对齐哈希”。这不是本轮数据操作授权。
|
||||
- 修复经过:[原审计关闭结果](2026-09-14-project143-controlled-content-404.md#关闭结果) 与 [最终报告](../test-reports/2026-09-14-controlled-content-ui-acceptance.md);后续水合/缓存修复合入 `d0e8f60`、`36e4bc3`。报告保留早期失败及无效运行,只有 clean-run3 / full-chain-final 属最终有效证据。
|
||||
- 验证与关闭范围:原报告记录旧项目真实页面、全链路主阶段和重启恢复 PASS;历史 deployment=passed(dev)。不据此宣告当前 production_ready 或当前制品无回归。
|
||||
- 本次复核:`internal/docrevision/canonicalize.go` 已委托 doccontent;`canonicalize_golden_test.go` 包含硬换行和封装一致性测试。本次未执行这些测试。
|
||||
- 经验:[LESSON-20260923-content-hash](../ops/lessons/2026-09-23-content-hash.md)。后续触发:canonicalizer、bootstrap、投影或水合修改时复核;复发追加时间线并重开。
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
issue_id: ISSUE-20260923-matrix-status-regression
|
||||
issue_state: resolved
|
||||
severity: high
|
||||
owner: Cursor
|
||||
task_ids: [module-batches-ag-status-fix-2026-09-23]
|
||||
created: 2026-09-23
|
||||
occurred_at: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
recurrence_count: 0
|
||||
evidence_basis: current
|
||||
lesson_ids: [LESSON-20260923-matrix-status-cas]
|
||||
---
|
||||
|
||||
# FEATURE-MATRIX 状态字段被合并冲突回退
|
||||
|
||||
按 [闭环规范](../ops/2026-09-23-issue-learning-workflow.md) 维护。关联任务:[module-batches-ag-status-fix](../ops/short-term/2026-09-23-module-batches-ag-status-fix.md)。
|
||||
|
||||
## 事实与证据
|
||||
|
||||
- **预期**:`module-batches-ag` 在 A–G 合入且 arch-check 全 0 后保持 `done`(提交 `77bdbdbc` 已写入)。
|
||||
- **实际**:本地 `dev` tip 上该行状态为 `planned`,剩余工作栏仍写「关闭本伞行」与 A–G 已合入事实矛盾;用户观感为「多次要求实现但未实现」。
|
||||
- **触发**:含 FEATURE-MATRIX 的 closeout / sync 合并冲突手解,取了无 `record_id` 或旧侧行内容。
|
||||
- **影响**:后续会话按 `planned` 错误前提规划,可能重复实施或延误收口;不构成发布 blocker(发布关系仍为 `non_blocker`)。
|
||||
- **环境**:本机 `dev` @ `18b9556f`(任务基线);修复提交见本任务 feature 分支。
|
||||
- **复现(修复前)**:`git show 77bdbdbc:.doc/status/FEATURE-MATRIX.md` 该行 status=`done`;修复前 tip 同行为 `planned`。
|
||||
|
||||
## 根因与同类范围
|
||||
|
||||
- **已证实**:共享文档在 `docs apply` 行级 CAS / `record_id` 稳定键启用前窗口内,merge 冲突对手解无机器核验状态字段;手解取旧侧覆盖 `done`。
|
||||
- **已排除**:A–G 代码未合入(合入 merge commits 与 arch-check PASS 否定)。
|
||||
- **共用机制**:CURRENT / FEATURE-MATRIX 等协调 SSOT;任何绕过 `docs apply` 的整表手改或冲突取旧侧。
|
||||
- **同类入口**:其他矩阵行、CURRENT 认领行在无 CAS 收据时同样脆弱;本轮只修 `module-batches-ag`,不扩大扫全表 unless 另授权。
|
||||
|
||||
## 修复思路与过程
|
||||
|
||||
| 日期 | 假设 / 尝试 / 动作 | 实际结果与证据 | 决策 / 下一步 / owner |
|
||||
|---|---|---|---|
|
||||
| 2026-09-23 | 只读考古 git + arch-check | A–G 已落地;状态回退成立 | 按计划修正登记,不重做代码 / Cursor |
|
||||
| 2026-09-23 | docs apply 行级 CAS 恢复 `done` + 登记 lesson | MATRIX 行 status=`done`;header 同步;arch-check PASS | resolved;合入 local_dev / Cursor |
|
||||
|
||||
方案:恢复矩阵事实状态;登记问题与经验;强制后续矩阵变更走 `docs apply`;合入含 MATRIX 的合并后机器核对目标 `record_id` 状态列。
|
||||
|
||||
## 验收与关闭
|
||||
|
||||
- 原例:PASS — MATRIX `module-batches-ag` status=`done`(docs apply 收据 + commit `b9d09c97`)。
|
||||
- 同类:本任务不批量改其他行;风险已记入 lesson。
|
||||
- 正常:PASS — `docs apply` 无拒绝;`./scripts/arch-check.sh --mode block` PASS(worktree tip)。
|
||||
- deployment:`not_required`(纯文档)。
|
||||
- resolved:2026-09-23;范围=状态登记与台账,不含 Server 镜像字段增量。
|
||||
|
||||
## 经验与复发
|
||||
|
||||
- lesson:[LESSON-20260923-matrix-status-cas](../ops/lessons/2026-09-23-matrix-status-cas.md)
|
||||
- 防护:能力完成升 `done` 已有 `docs:approve` + evidence `cat-file` 门禁;复发时重开本 issue 并检查是否绕过 apply。
|
||||
@@ -0,0 +1,12 @@
|
||||
# 问题与修复台账
|
||||
|
||||
维护规则:[问题记录与开发经验闭环](../ops/2026-09-23-issue-learning-workflow.md)。每个问题一个稳定 ID;主记录是事实与状态来源,本表为可检索投影。新发现及时登记,修复后保留记录;发布 blocker 仍见 [gap-matrix](../remediation/gap-matrix.md)。
|
||||
|
||||
更新:2026-09-23。本轮为初始建库,仅补录两个历史案例;下列历史 resolved 不表示本日运行回归通过。
|
||||
|
||||
| issue_id | 模块 / 检索词 | 问题 | 严重度 | issue_state | owner | 证据日期 / 范围 | 唯一主记录 | 经验 |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| ISSUE-20260923-nullable-duty | docgov / nullable / 23503 / reviewer_id | 可选职责空值写 0 导致 FK 失败 | high | resolved | Codex(历史补录) | 2026-09-17;历史 PG / API 冒烟;当前未复测 | [主记录](2026-09-23-historical-issue-records.md#nullable-duty) | [LESSON-20260923-nullable-duty](../ops/lessons/2026-09-23-nullable-duty.md) |
|
||||
| ISSUE-20260923-content-hash | docrevision / canonicalize / hard-break / 404 | 规范化破坏 Markdown 语义并造成正文哈希漂移 | critical | resolved | Codex(历史补录) | 2026-09-14;历史真实 UI / 重启;当前未复测 | [主记录](2026-09-23-historical-issue-records.md#content-hash) | [LESSON-20260923-content-hash](../ops/lessons/2026-09-23-content-hash.md) |
|
||||
| ISSUE-20260923-coordination-authority | agentctl / claim / SQLite / CAS / CURRENT / FEATURE-MATRIX | 本地副本 CAS 与任务许可不能表达跨主机全局权威认领 | high | investigating | Codex(研究) | 2026-09-23;源码/只读状态,未复现具体丢写 | [主记录](../ops/short-term/2026-09-23-coordination-db-daemon-research.md#issue-20260923-coordination-authority) | 沿用 content-hash 投影经验;跨机结论待实施验证 |
|
||||
| ISSUE-20260923-matrix-status-regression | FEATURE-MATRIX / module-batches-ag / merge / docs-apply | 矩阵行 done 被 closeout 合并冲突手解回退为 planned | high | resolved | Cursor | 2026-09-23;本机 dev tip 与 git 考古;docs apply 已恢复 | [主记录](2026-09-23-matrix-status-regression.md) | [LESSON-20260923-matrix-status-cas](../ops/lessons/2026-09-23-matrix-status-cas.md) |
|
||||
@@ -1,6 +1,6 @@
|
||||
# Agent worktree 与 L1 操作规范
|
||||
|
||||
**修订**:`agent-governance-2026-09-21-r1`。来源:[AGENTS](../../AGENTS.md)、[规范登记](./2026-09-21-policy-registry.md)。工具为 `scripts/agentctl`(Python 标准库,Linux 本机),协议 v1;实际安装与验证见[实施任务](../archive/ops/2026-09-21-agent-governance-implementation.md)。
|
||||
**修订**:`agent-governance-2026-09-21-r1`。来源:[AGENTS](../../AGENTS.md)、[规范登记](./2026-09-21-policy-registry.md)。工具为 `scripts/agentctl`(Python 标准库,macOS/Linux 双平台),协议 v1;实际安装与验证见[实施任务](../archive/ops/2026-09-21-agent-governance-implementation.md)。
|
||||
|
||||
本规范约束合作 Agent 的统一操作入口和 Git 提交/引用门禁。任意同 UID shell、修改管理器或跳过 hooks 仍可绕过;不把 L1 宣称为 OS 沙箱。共享服务配置与产品数据库不属于任务素材。
|
||||
|
||||
@@ -121,13 +121,34 @@ validate 要求干净树、记录精确 HEAD 与命令摘要;必要的实际
|
||||
|
||||
任务状态、集成、部署、远端同步和 cleanup 分别记录,见[收口清单](./templates/session-close-checklist.md)。命令结束不等于任务完成;task close 会拒绝仍有运行或待恢复 operation 的任务。
|
||||
|
||||
### 8.1 只读盘点(先盘点,再人工处置)
|
||||
|
||||
```bash
|
||||
# 批量 worktree 清理就绪度;verdict=ready 才可考虑 remove。从不自动删除。
|
||||
./scripts/agentctl cleanup report
|
||||
|
||||
# FEATURE-MATRIX 状态漂移:硬告警仅 done→非 done(ISSUE-20260923 工具化);
|
||||
# open_capabilities 为人工判断候选。从不自动升 done / 写 MATRIX。
|
||||
./scripts/agentctl docs drift
|
||||
```
|
||||
|
||||
daemon 前台循环可按 `--audit-every N`(默认 30)周期跑上述盘点;**不在 daemon 内调用 `docs apply`**(主目录 cwd 必 `WORKTREE_MISMATCH`)。常驻 systemd/launchd 装载需独立授权,本规范默认不装载。
|
||||
|
||||
### 8.2 关闭与删除
|
||||
|
||||
```bash
|
||||
./scripts/agentctl task close --id task-id --status done
|
||||
./scripts/agent-worktree.sh remove feature/task-id --delete-branch
|
||||
```
|
||||
|
||||
清理由目录外的维护者执行,核对实际 Git 映射、dev 祖先、所有证据、tracked/untracked/ignored 文件、未完成 Git 操作、registry、生命周期锁和使用目录的进程。只用普通 remove/-d,拒绝时保留 cleanup_pending 和复查责任,不换成强制删除。
|
||||
清理由目录外的维护者执行,核对实际 Git 映射、dev 祖先、所有证据、tracked/untracked/ignored 文件、未完成 Git 操作、registry、生命周期锁和使用目录的进程。只用普通 remove/-d,拒绝时保留 cleanup_pending 和复查责任,不换成强制删除。盘点只读;删除仍人工;拒绝即保留 cleanup_pending。
|
||||
|
||||
**本机限制**:无法读取某些同 UID 进程 cwd 时,工具不能证明其未使用目录,故保留 cleanup_pending;只有明确识别的 OS 用户 systemd 管理进程有诊断性例外。测试中的 3 个删除正例仅替换 `/proc` 枚举以模拟可见主机,其余 Git/锁/文件条件为真实执行;可见占用、未知不可读、未合入、脏文件与活跃登记的拒绝另有真实/针对性测试。不要把这项限制转成跳过检查的通用开关。
|
||||
**本机限制**:无法读取某些同 UID 进程 cwd 时,工具不能证明其未使用目录,故保留 cleanup_pending;明确识别的 OS 用户 launchd(macOS)/systemd(Linux)管理进程有诊断性例外。进程 cwd 可见性走双路径:Darwin 用 `lsof`,Linux 用 `/proc`;测试中的删除正例可替换对应枚举以模拟可见主机,其余 Git/锁/文件条件为真实执行;可见占用、未知不可读、未合入、脏文件与活跃登记的拒绝另有真实/针对性测试。不要把这项限制转成跳过检查的通用开关。
|
||||
|
||||
保护任务、旧 detached 工作区和非本次产物不自动清理。用户未要求 push 时仅本地提交/合入;用户已要求时再按授权同步并核对远端引用。
|
||||
|
||||
### 8.3 CodeGraph(治理加速器)
|
||||
|
||||
- `agentctl init` 与 `agent-worktree.sh create` 会 best-effort 初始化/同步 `.codegraph/`(CLI 缺失则跳过,不阻断)。
|
||||
- `hooks install` 安装 `post-merge` / `post-checkout` → `hooks codegraph-sync`(fail-open,永不阻断 integrate)。
|
||||
- 会话启动执行 `codegraph sync -q`。索引是 tree-sitter **近似**:有假阴性;**grep 是完整性唯一权威**;重命名与穷举调用方必须 grep 确认。
|
||||
|
||||
@@ -27,3 +27,21 @@ CURRENT 是带时间的活跃协调快照;Git/机器状态用于核验实际
|
||||
## Herdr v1.2 局部修订
|
||||
|
||||
用户已授权采纳经研究修正的资源分工与自动审批。Herdr roster 的角色/额度/客户端参数由 `herdr-v1.2` 取代旧路由,仅在明确使用 Herdr 时激活,不扩展通用会话工作流。具体来源、验证与生效集成见[本轮任务](../archive/ops/2026-09-21-herdr-orchestration-v12.md)。已通过 dev 合并提交 `8c5e3477585fe27a485343dac97a670d95cf8905` 生效;profile/dry-run、入口保护和 Kimi 原子计数有隔离验收,真实 Herdr pane 启动未在本轮执行,不将其记为已实测。
|
||||
|
||||
## 系统问题分析局部修订
|
||||
|
||||
修订 ID:`systemic-issue-analysis-2026-09-23-r1`;owner:`Codex`;state:`active`(已通过 `958dd44fee8bbea8d19129457fc0ad749fdebdbe` 合入 dev);工具能力:`manual`。用户明确要求将“由个案追查同类根因、潜在问题,研究并提出方案”加入规范,授权与验证见 [任务记录](./short-term/2026-09-23-systemic-issue-analysis.md)。
|
||||
|
||||
核心行为唯一来源为 [AGENTS 分析要求](../../AGENTS.md#bug-与系统问题的分析要求),验证范围由 [验证契约](./2026-09-21-validation-contract.md#问题修复的回归范围) 定义,[分析模板](./templates/audit-note.md) 承载证据。客户端继续引用统一入口。生效提交为 `958dd44fee8bbea8d19129457fc0ad749fdebdbe`,候选验证与受控集成收据见任务记录;不新增业务实施或环境操作授权。
|
||||
|
||||
## 问题记录与经验复用局部修订
|
||||
|
||||
修订 ID:`issue-learning-2026-09-23-r1`;owner:Codex;state:`active`(已通过 `7bbd7a407f857515005c0324d90339017ea5f3e8` 合入 dev);执行能力:`manual`。用户要求同时管理出现的问题、修复记录和思路,并及时总结为开发注意事项,授权与验证见 [任务](short-term/2026-09-23-issue-learning.md)。
|
||||
|
||||
[闭环规范](2026-09-23-issue-learning-workflow.md) 为本流程唯一来源;AGENTS 增加按任务触发的读取/更新入口,模板承载证据,问题台账和经验索引提供检索。生效提交为包含本修订的首个受控 dev 集成提交,以任务收据与 Git 父链核实;未合入不能声称全仓生效。此修订不新增产品功能、自动门禁或运行权限。
|
||||
|
||||
## CodeGraph 与只读盘点局部修订
|
||||
|
||||
修订 ID:`codegraph-governance-2026-09-24-r1`;owner:`Cursor`;state:`active`(生效 tip `19eb56e3744d3c7d4b69b065c87e27689e8caa53` / fixup `0c676afe1faf831020c7c3201509d7cec0328d53`);工具能力:盘点命令与 hooks sync 为 `enforced`(脚本已落地);常驻 daemon 装载仍为 `manual`(本机默认不装载)。用户授权:将 CodeGraph 纳入治理启动/建场/sync,并对 worktree 清理与 FEATURE-MATRIX 做只读盘点提醒(不自动删除、不自动升 done)。
|
||||
|
||||
唯一来源增补:[AGENTS §1/§4](../../AGENTS.md)、[worktree 操作规范 §8](./2026-09-21-agent-worktree-workflow.md)、[收口清单](./templates/session-close-checklist.md)。命令入口:`agentctl cleanup report`、`agentctl docs drift`、`agentctl hooks codegraph-sync`、建场 `agent-worktree.sh create` 的 best-effort `codegraph init`。不改产品 SWBOOT-10 stub,不装载 systemd coordinator(需另授)。
|
||||
|
||||
@@ -15,6 +15,12 @@
|
||||
|
||||
多类变更取并集。按 [模块开发标准](../system-design/2026-09-20-module-development-standards.md) 追加边界与 registry parity 等范围门禁。开发阶段可用 stub;交付验收不能冒充真实执行。纯文档无需产品 PI 或全量 Go,也不为形式重建服务。
|
||||
|
||||
## 问题修复的回归范围
|
||||
|
||||
Bug/系统问题修复先按 [AGENTS 分析要求](../../AGENTS.md#bug-与系统问题的分析要求) 确定问题类别和影响范围,再从上表选择验证层级。验收须包含:原始复现案例;通过同一机制的其他输入、措辞或入口;相关边界/异常路径;应保持不变的正常行为。场景按实际因果链选择,不机械穷举;不适用或未覆盖的项记录理由与风险。
|
||||
|
||||
验证机制和预期行为,不以硬编码原句、固定回复文本或单个样例通过代替回归。能在修复前复现失败的场景记录修复前后对照;不能复现时说明证据限制。报告逐项区分通过、失败、未运行与待验证;只提供分析/方案时列出验收设计,不声称已经运行或修复。
|
||||
|
||||
## 产品 PI 基线与精确追加
|
||||
|
||||
优先入口:`./scripts/run-nightly-real-pi.sh`。调用前核验并从获授权配置提供(不在命令/报告贴凭证值):
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
---
|
||||
title: "agentctl Cursor 能力层(skills / MCP / rules / hooks)"
|
||||
status: active
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_id: agentctl-cursor-integration-2026-09-23
|
||||
---
|
||||
|
||||
# agentctl Cursor 能力层
|
||||
|
||||
把已上线的 agentctl 管理面包装为 Cursor 原生能力,使 agent 默认走租约 / docs 收据 / 候选合入。
|
||||
|
||||
## 能力清单
|
||||
|
||||
| 层 | 路径 | 作用 |
|
||||
|---|---|---|
|
||||
| MCP | [`.cursor/mcp.json`](../../.cursor/mcp.json) → [`scripts/mcp/agentctl-mcp.mjs`](../../scripts/mcp/agentctl-mcp.mjs) | `status` / `task_*` / `lease_run` / `docs_*` / `validate` / `queue_enqueue` / `quarantine_status` |
|
||||
| Skills | [`.cursor/skills/agentctl-*`](../../.cursor/skills/) | 会话启动、建场、租约写、集成收口 |
|
||||
| Rule | [`.cursor/rules/agentctl-mandatory.mdc`](../../.cursor/rules/agentctl-mandatory.mdc) | alwaysApply:强制走 agentctl |
|
||||
| Hooks | [`.cursor/hooks.json`](../../.cursor/hooks.json) + `guard-git.sh` | `git push` / 破坏性 git → `permission: ask` |
|
||||
|
||||
权威规则仍是 [AGENTS.md](../../AGENTS.md) 与 [操作规范](./2026-09-21-agent-worktree-workflow.md);本目录不复制全文。
|
||||
|
||||
## 启用
|
||||
|
||||
1. 合入 local `dev` 后,在 Cursor 中 **Reload Window** 或重载 MCP。
|
||||
2. 确认 MCP 服务器 `agentctl` 出现在工具列表;hooks 出现在 Cursor Hooks 设置页。
|
||||
3. 会话开始跟 skill `agentctl-session-start`(核对 `daemon status`)。
|
||||
|
||||
## 与管理面关系
|
||||
|
||||
- launchd `com.agentctl.coordinator` 持续 `queue schedule`;本能力层只封装 CLI,不替代 daemon。
|
||||
- git hooks(pre-commit / pre-merge / reference-transaction)仍由 `agentctl hooks` 管理,与 Cursor `beforeShellExecution` 互补:前者执行租约/候选门禁,后者拦未授权 push/强推。
|
||||
|
||||
## 非目标
|
||||
|
||||
不 push;不晋升 test/main;不改 gap-matrix;不卸载 daemon。
|
||||
@@ -0,0 +1,61 @@
|
||||
# 问题记录与开发经验闭环
|
||||
|
||||
修订:`issue-learning-2026-09-23-r1`;owner:Codex;生效条件见 [规范登记](2026-09-21-policy-registry.md)。执行能力为 `manual`:依靠 Agent 读取、任务记录与审查;本轮没有增加自动检索、CI 阻断或模型训练。
|
||||
|
||||
## 入口与职责
|
||||
|
||||
| 入口 | 回答的问题 | 权威边界 |
|
||||
|---|---|---|
|
||||
| [问题台账](../audit/ISSUES.md) | 出现过什么问题,目前处理到哪一步? | 索引和状态投影;事实、修复经过以链接的唯一问题主记录为准 |
|
||||
| 问题主记录 | 为什么发生、考虑过哪些方案、改了什么、如何验证? | 放 audit,或沿用已有任务/审计中的明确章节;使用 [问题模板](templates/issue-record.md) |
|
||||
| [开发经验](lessons/INDEX.md) | 遇到类似工作应先检查什么? | 按机制提炼的注意事项;使用 [经验模板](templates/development-lesson.md),不替代现行规范 |
|
||||
| CURRENT / FEATURE-MATRIX / gap-matrix | 当前协调 / 能力 / 发布门禁 | 维持原职责;只有对应状态改变才更新 |
|
||||
|
||||
修复方案、任务、提交、验收报告通过链接串联,已有材料直接复用。一个 task 可处理多个 issue,一个 issue 可跨分析/实施任务;研究任务 done 不等于问题 resolved。一个 lesson 可覆盖多个同根因 issue。短问题可在任务主文档内记录,无需机械创建一套文件。
|
||||
|
||||
## 何时记录、检索和总结
|
||||
|
||||
1. **设计、编码、排障或运维前**:按模块、路径、错误码、症状和共用机制检索问题台账及经验索引。先查索引、再读命中条目的来源;核对当前源码/规范是否仍适用。在任务记录填写检索词、命中 ID、采纳的检查;无命中明确记录。简单信息答复不要求建任务或检索整库。
|
||||
2. **首次发现问题时**:在当前任务 worktree 建立或补充问题主记录和台账行,记录预期/实际、影响、环境/版本、owner、下一步及证据缺口;尚未定位也可以登记。ID 使用 `ISSUE-YYYYMMDD-<slug>`,日期为登记日;发生日期另列,跨 worktree 以语义 slug 避免抢序号。
|
||||
3. **定位、改方案、完成修复或发现验收失败时**:在同一主记录追加时间线和尝试结果;保留被否定假设、失败方案及不适用条件,区分观察、推测和已证实根因。按 [问题分析要求](../../AGENTS.md#bug-与系统问题的分析要求) 检查共用机制和同类入口。
|
||||
4. **根因与修复得到验证后、任务收口前**:提炼经验或更新已有同机制经验,并链接回问题。若尚无验证证据,只能建 `candidate`;若没有新增可复用结论,记“不新增经验”及理由,仍保留问题记录。分析-only、未修复或验收失败的问题继续留在台账。
|
||||
5. **经验落到开发动作**:写清触发条件、机制、应做检查、错误做法及原因、验证方法、适用边界。优先链接现有测试/约束;需要新增回归、lint、架构门禁或规范时,在当前授权内实施,超出授权则记录 owner/后续任务。仅提出自动化建议不能标为已落实。
|
||||
6. **复发或规则变化时**:同一故障未解决的复现追加原 issue;已关闭问题再次出现,重开原 issue 为 `investigating`,递增 `recurrence_count` 并保留原关闭证据。不同根因建立新 issue 并互相链接。复盘为何已有经验/测试未生效:未检索、范围不适用、遗漏入口、检查未执行或实现回退,并更新防护。模块/接口/规范变化时复核命中经验;确认过时标 `superseded` 并链接替代条目,无替代则 `retired`,保留历史。
|
||||
|
||||
检索示例(在任务工作区执行,替换为本任务关键词):
|
||||
|
||||
```bash
|
||||
rg -n -i 'docgov|nullable|23503|职责' .doc/audit/ISSUES.md .doc/ops/lessons
|
||||
```
|
||||
|
||||
owner 在上述里程碑及时更新,最迟在会话交接前保存事实和未完成项;不依赖定时服务。经验不会自动改变模型参数,作用是让后续 Agent 能检索、有证据地复用,并逐步把重复风险转换为可执行检查。
|
||||
|
||||
## 问题状态与关闭条件
|
||||
|
||||
问题的 `issue_state` 与任务 `status` 分开;台账保留当前投影,主记录保留变迁历史。
|
||||
|
||||
| issue_state | 含义 / 转移要求 |
|
||||
|---|---|
|
||||
| open | 已登记,等待定位 |
|
||||
| investigating | 正在复现、验证假设和范围 |
|
||||
| fixing | 修复方案明确且已获实施授权 |
|
||||
| verifying | 修复待验收,或必要证据尚缺 |
|
||||
| resolved | 约定范围的修复、必要环境验收均有证据,经验已总结或有不新增理由 |
|
||||
| deferred | 暂缓处理;保留风险、责任人、复查触发和授权/决策依据,不冒充修复 |
|
||||
| duplicate | 指向唯一主 issue,保留原报告和去重理由 |
|
||||
|
||||
定位失败可保留 investigating;临时止血不代表 resolved,必须标清剩余根治项。验证失败回到 investigating/fixing,不能覆盖失败记录。关闭至少能追溯:根因、同类范围、修复提交或获授权的处理动作、原例/变体/正常行为验收及缺项、实际部署状态、lesson 或不新增理由。业务改动待部署时不能把目标环境问题关闭;无需部署写 not_required。
|
||||
|
||||
**历史补录**:发生日、修复日和补录日分开。只按旧报告已证明的范围记录 `resolved`,同时标 `evidence_basis=historical` 和当前运行未复测;缺乏关闭证据用 `verifying` 并说明原因,不从旧任务 done 推导修复完成。历史条目不能用于宣布当前系统就绪。本轮仅补录两个有来源案例,不代表穷尽全部历史问题。
|
||||
|
||||
## 经验质量与维护
|
||||
|
||||
`lesson_state`:`candidate | validated | superseded | retired`。validated 表示注意事项有可核对的因果证据且已复核适用边界,不表示所有模块或当前线上均测试通过。需记录 reviewer、last_reviewed、reviewed_revision、来源 issue、证据日期、关键词、关联测试、适用/不适用范围及仍缺的防护。
|
||||
|
||||
同机制优先更新已有 lesson,保留修订记录;新机制才新增 `LESSON-YYYYMMDD-<slug>`。将通用经验升级成强制规范时,只在对应规范的唯一来源修改并登记生效条件,经验条目保留理由与链接。经验与现行规范冲突时先按有效规范执行,登记冲突与复核项;历史经验不能授予数据修复、部署或扩大范围的权限。
|
||||
|
||||
## 并发、验收与敏感信息
|
||||
|
||||
所有写入沿用 [worktree 操作规范](2026-09-21-agent-worktree-workflow.md)。问题/经验索引使用各自 `path:` 短租约;当前 `agentctl docs apply` 仅覆盖 CURRENT/FEATURE-MATRIX,不宣称新索引有行级 CAS。写入前读最新内容、只改自己的条目;从旧 dev 分出的工作区在集成前合并最新 dev 并处理索引冲突,保留他人条目。索引和主记录在同一逻辑提交同步,避免状态分叉。
|
||||
|
||||
文档验收包括链接/锚点、ID 唯一、主记录与索引状态一致、来源及日期、入口/模板可达和情景检查。运行回归按 [验证契约](2026-09-21-validation-contract.md);未运行、缺项与历史证据单独标明。只保留足够判断的脱敏证据,业务正文、凭证和个人数据不复制进经验库。
|
||||
@@ -0,0 +1,6 @@
|
||||
OK status -> allow
|
||||
OK push -> ask
|
||||
OK reset -> ask
|
||||
OK clean -> ask
|
||||
OK force-wt -> ask
|
||||
hooks OK
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"initialize": {
|
||||
"name": "agentctl",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
"tools": [
|
||||
"status",
|
||||
"task_register",
|
||||
"task_close",
|
||||
"lease_run",
|
||||
"docs_snapshot",
|
||||
"docs_apply",
|
||||
"validate",
|
||||
"queue_enqueue",
|
||||
"quarantine_status"
|
||||
],
|
||||
"status_ok": true,
|
||||
"daemon_ok": true,
|
||||
"daemon_held": true
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
queue retry after parking untracked promotion receipts (DIRTY_TREE) at /tmp/ci-hold-receipts
|
||||
@@ -0,0 +1,5 @@
|
||||
OK agentctl-session-start lines 30
|
||||
OK agentctl-worktree-setup lines 48
|
||||
OK agentctl-lease-write lines 45
|
||||
OK agentctl-integrate-closeout lines 53
|
||||
skills OK
|
||||
@@ -0,0 +1,2 @@
|
||||
146:Ran 134 tests in 122.988s
|
||||
148:OK (skipped=3)
|
||||
@@ -0,0 +1 @@
|
||||
bootstrap: ok
|
||||
@@ -0,0 +1,5 @@
|
||||
{"interval": 1.0, "max_cycles": 3, "pid": 63316, "status": "daemon_started"}
|
||||
{"processed": 0, "results": [], "status": "ok"}
|
||||
{"processed": 0, "results": [], "status": "ok"}
|
||||
{"processed": 0, "results": [], "status": "ok"}
|
||||
{"cycles": 3, "pid": 63316, "reason": "max_cycles", "status": "daemon_stopped"}
|
||||
@@ -0,0 +1 @@
|
||||
{"epoch": "7fa35ad9-518f-4a0d-a446-49baf12c666c", "heartbeat": {"cycle": 99, "pid": 63557, "updated": 1790158027.962433}, "heartbeat_age_seconds": 0.2736787796020508, "lock_root": "/private/tmp/Agent-System/.locks", "manager_lock": {"held": true, "holder_pid": 63557, "path": "/private/tmp/Agent-System/.locks/os/manager.lock"}, "queue": {"claimed": 0, "pending": 0}, "status": "ok"}
|
||||
@@ -0,0 +1 @@
|
||||
{"epoch": "7fa35ad9-518f-4a0d-a446-49baf12c666c", "heartbeat": {"cycle": 2, "pid": 63557, "updated": 1790157919.612233}, "heartbeat_age_seconds": 0.8667151927947998, "lock_root": "/private/tmp/Agent-System/.locks", "manager_lock": {"held": true, "holder_pid": 63557, "path": "/private/tmp/Agent-System/.locks/os/manager.lock"}, "queue": {"claimed": 0, "pending": 0}, "status": "ok"}
|
||||
@@ -0,0 +1 @@
|
||||
f1b4fdca-0209-466d-9aba-fcd8f90bb3be completed; tip 5e11db50
|
||||
@@ -0,0 +1 @@
|
||||
Darwin WeiCHENdeMac-mini.local 25.6.0 Darwin Kernel Version 25.6.0: Fri Jul 31 19:17:26 PDT 2026; root:xnu-12377.161.14~5/RELEASE_ARM64_T6041 arm64
|
||||
@@ -0,0 +1,6 @@
|
||||
5: state = running
|
||||
38: runs = 1
|
||||
39: pid = 63557
|
||||
50: last exit code = (never exited)
|
||||
55: state = active
|
||||
63: state = active
|
||||
@@ -0,0 +1,13 @@
|
||||
2: active count = 1
|
||||
3: path = /Users/weichen/Library/LaunchAgents/com.agentctl.coordinator.plist
|
||||
5: state = running
|
||||
7: program = /usr/bin/python3
|
||||
17: working directory = /private/tmp/Agent-System
|
||||
19: stdout path = /tmp/agentctl-coordinator.out.log
|
||||
20: stderr path = /tmp/agentctl-coordinator.err.log
|
||||
38: runs = 1
|
||||
39: pid = 63557
|
||||
55: state = active
|
||||
56: active count = 1
|
||||
63: state = active
|
||||
64: active count = 1
|
||||
@@ -0,0 +1,3 @@
|
||||
domain=gui/501
|
||||
dest=/Users/weichen/Library/LaunchAgents/com.agentctl.coordinator.plist
|
||||
cmd: launchctl bootstrap gui/501 /Users/weichen/Library/LaunchAgents/com.agentctl.coordinator.plist
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>KeepAlive</key>
|
||||
<true/>
|
||||
<key>Label</key>
|
||||
<string>com.agentctl.coordinator</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/usr/bin/python3</string>
|
||||
<string>/private/tmp/Agent-System/scripts/agentctl.py</string>
|
||||
<string>daemon</string>
|
||||
<string>run</string>
|
||||
<string>--interval</string>
|
||||
<string>1.0</string>
|
||||
</array>
|
||||
<key>RunAtLoad</key>
|
||||
<true/>
|
||||
<key>StandardErrorPath</key>
|
||||
<string>/tmp/agentctl-coordinator.err.log</string>
|
||||
<key>StandardOutPath</key>
|
||||
<string>/tmp/agentctl-coordinator.out.log</string>
|
||||
<key>WorkingDirectory</key>
|
||||
<string>/private/tmp/Agent-System</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1 @@
|
||||
2026-09-23T10:05:09Z
|
||||
@@ -0,0 +1,3 @@
|
||||
1:{"interval": 1.0, "max_cycles": null, "pid": 63557, "status": "daemon_started"}
|
||||
126:{"run_id": "queue-f1b4fdca-0209-466d-9aba-fcd8f90bb3be", "sha": "5e11db50ce6f8905890993cef1d4a64bbb6f53d9", "status": "merged"}
|
||||
127:{"processed": 1, "results": [{"id": "f1b4fdca-0209-466d-9aba-fcd8f90bb3be", "run_id": "queue-f1b4fdca-0209-466d-9aba-fcd8f90bb3be", "status": "completed"}], "status": "ok"}
|
||||
@@ -0,0 +1 @@
|
||||
weichen
|
||||
@@ -0,0 +1 @@
|
||||
/Users/weichen/Library/LaunchAgents/com.agentctl.coordinator.plist: OK
|
||||
@@ -0,0 +1 @@
|
||||
{"items": [], "status": "ok"}
|
||||
@@ -0,0 +1,6 @@
|
||||
# Rollback (fail-closed)
|
||||
launchctl bootout gui/501/com.agentctl.coordinator
|
||||
rm -f /Users/weichen/Library/LaunchAgents/com.agentctl.coordinator.plist
|
||||
# verify:
|
||||
launchctl print gui/501/com.agentctl.coordinator # expect not found
|
||||
python3 /private/tmp/Agent-System/scripts/agentctl.py daemon status
|
||||
@@ -0,0 +1,2 @@
|
||||
146:Ran 134 tests in 118.996s
|
||||
148:OK (skipped=3)
|
||||
@@ -25,9 +25,9 @@ status: open
|
||||
| 研究 mutex | 已在本 worktree CURRENT 标记 done |
|
||||
| 共享集成槽位 | 本任务分支 CURRENT 登记文档集成;实际操作持 common-dir 下 dev-integration.lock,主目录 CURRENT 保留 |
|
||||
| branch | feature/agent-workflow-governance-plan |
|
||||
| worktree | .worktrees/feature-agent-workflow-governance-plan |
|
||||
| worktree | 原任务及候选在收口后按门禁清理;dev 文档入口暂为 `.worktrees/agent-governance-dev-integration` |
|
||||
| 起点 | 本地 dev@15b8a4a8 |
|
||||
| 合入 / push | 本次按已验证候选合入本地 dev;未 push,最终结果见规范采纳验收报告 |
|
||||
| 合入 / push | 规则提交 `048bbe4a` 已经由候选 `83e22a70` 合入本地 dev;未 push;后续收口仅文档 |
|
||||
|
||||
## 验证及边界
|
||||
|
||||
@@ -35,9 +35,10 @@ status: open
|
||||
- 主目录另有 Cursor 工作流作用域任务的未提交改动;保留现场,不 checkout/pull/stash/reset。
|
||||
- 当前没有自动任务协调器,分支 CURRENT 不等于全局实时认领。此次只有人工明确范围和本机 flock,不宣称自动队列或全局硬隔离已实现。
|
||||
- 收口文档允许单独审核/合入,但不能按计划已写完将治理功能改成 done。
|
||||
- 主目录仍是旧任务分支;dev 暂由 `.worktrees/agent-governance-dev-integration` 检出以安全集成文档。旧任务 owner 保存成果、确认主目录干净后,先安全移除临时 dev worktree,再在主目录切回 dev;不得强抢 dev 检出。
|
||||
- 规范首次合入后,Cursor 已把作用域修复合入 `dev@e0665ca4`,并将主目录切为该提交的 detached HEAD 进行部署。dev 仍暂由 `.worktrees/agent-governance-dev-integration` 检出;该目录当前也被 Cursor 的集成流程使用,须等其释放槽位后再清理或接管。主目录最终切回 dev 前先安全移除临时 dev worktree;不得强抢检出或修改活跃部署源。
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [研究任务](../../archive/ops/2026-09-21-agent-workflow-governance-plan.md)
|
||||
- [CURRENT](../CURRENT.md)
|
||||
- [采纳验收](../../test-reports/2026-09-21-agent-workflow-governance-adoption-test-report.md)
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
lesson_id: LESSON-20260923-content-hash
|
||||
lesson_state: validated
|
||||
owner: Codex
|
||||
reviewer: Codex (source review)
|
||||
last_reviewed: 2026-09-23
|
||||
reviewed_revision: 2fdb6e548e3784771f27e6a9e79b9c364f76c566
|
||||
source_issues: [ISSUE-20260923-content-hash]
|
||||
keywords: [docrevision, doccontent, canonicalize, hash, bootstrap, hard-break, hydration, '404']
|
||||
---
|
||||
|
||||
# 文本规范化必须保持语义并维护账本与文件一致性
|
||||
|
||||
**触发**:修改 Markdown 规范化、哈希、版本 bootstrap、文件投影、正文加载或刷新缓存时。
|
||||
|
||||
**机制与来源**:[问题主记录](../../audit/2026-09-23-historical-issue-records.md#content-hash)。去掉行尾双空格破坏硬换行语义;只更新账本哈希使原文件读取失配。统一报 404 和无效轮询更新让数据冲突难以诊断并反复呈现。
|
||||
|
||||
**开发检查**:
|
||||
|
||||
1. 对规范化定义允许变化和必须保留的语义,保留硬换行等差异样例;哈希一致性依赖相同语义和规范化契约。
|
||||
2. 追踪快照、记录哈希与文件投影的写入顺序和失败恢复。旧文档首次 bootstrap 与新文档创建分别覆盖,并发 content/revision 请求和刷新后读取需按实际因果链验证。
|
||||
3. 数据修复先按授权保全原文件及旧版本,显式记录修复来源;不能通过静默覆盖或跳过校验来隐藏不一致。
|
||||
4. 将不存在、完整性冲突和临时失败按协议区分。检查无变化轮询是否重复触发内容加载;失败反馈应可定位。
|
||||
|
||||
**已有防护**:[黄金样例](../../../internal/docrevision/canonicalize_golden_test.go) 含硬换行保持及 doccontent 封装一致性;[历史真实 UI 报告](../../test-reports/2026-09-14-controlled-content-ui-acceptance.md) 覆盖旧文档、刷新和重启。2026-09-23 只核对源码与报告,未重跑;测试存在不等于在未来变更中已执行。
|
||||
|
||||
**边界**:哈希不同不自动说明数据丢失,也不自动授权重写。不同文件格式的空白语义不同;不得把 Markdown 规则机械用于其他格式。当前制品和旧数据迁移需要各自证据,新项目 PASS 不代替旧数据验收。
|
||||
|
||||
**未完成防护**:没有全仓扫描或新 CI 门禁;未来相关修改按验证契约运行适用用例并记录结果。
|
||||
|
||||
**修订**:2026-09-23 从历史问题提炼,核对当前 canonicalize 委托与黄金样例;规范化/投影/缓存契约改变时再审。
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
lesson_id: LESSON-20260923-matrix-status-cas
|
||||
lesson_state: validated
|
||||
owner: Cursor
|
||||
reviewer: Cursor (source review + arch-check)
|
||||
last_reviewed: 2026-09-23
|
||||
reviewed_revision: b9d09c97120ee5bcdea487b0d0ca5910d6e98a1d
|
||||
source_issues: [ISSUE-20260923-matrix-status-regression]
|
||||
keywords: [FEATURE-MATRIX, docs-apply, record_id, merge-conflict, CAS, planned, done]
|
||||
---
|
||||
|
||||
# 共享矩阵状态变更必须走 docs apply,合并后核验状态列
|
||||
|
||||
**触发**:改 FEATURE-MATRIX / CURRENT 行状态,或合并含这两份文件的候选时。
|
||||
|
||||
**机制与来源**:[ISSUE-20260923-matrix-status-regression](../../audit/2026-09-23-matrix-status-regression.md)。A–G 代码已合入且曾标 `done`,closeout 合并冲突手解取旧侧把状态盖回 `planned`,误导后续会话。
|
||||
|
||||
**开发检查**:
|
||||
|
||||
1. 不直接编辑 FEATURE-MATRIX / CURRENT 表行;用 `agentctl docs snapshot` + `docs apply`(MATRIX 键为 `record_id`)。
|
||||
2. 升 `done` 须 `docs:approve` 与已提交 evidence 路径(门禁 `EVIDENCE_REQUIRED`)。
|
||||
3. 合并含共享文档的候选后,对目标 `record_id` 再 `docs snapshot` 或 `grep` 核验状态列未被回退;冲突手解禁止静默取旧侧。
|
||||
|
||||
**验证方式**:本轮对 `module-batches-ag` 做 apply 收据 + `arch-check --mode block` PASS;未新增自动化 CI。manual。
|
||||
|
||||
**适用边界**:仅协调 SSOT(CURRENT / FEATURE-MATRIX);普通 `.doc` 短文仍可租约内直接改。不覆盖 gap-matrix 发布门禁语义。
|
||||
|
||||
**防护落实**:`scripts/agentctl.py` 已对 MATRIX `done` 要求 evidence;本条强调合并后人工/脚本核验。仍缺:merge 后自动断言关键 `record_id` 状态(待治理任务)。
|
||||
|
||||
**修订**:2026-09-23 新建;同日 apply 恢复 + arch-check 后升 validated。
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
lesson_id: LESSON-20260923-nullable-duty
|
||||
lesson_state: validated
|
||||
owner: Codex
|
||||
reviewer: Codex (source review)
|
||||
last_reviewed: 2026-09-23
|
||||
reviewed_revision: 2fdb6e548e3784771f27e6a9e79b9c364f76c566
|
||||
source_issues: [ISSUE-20260923-nullable-duty]
|
||||
keywords: [docgov, nullable, SQL, FK, reviewer_id, '23503', heal]
|
||||
---
|
||||
|
||||
# 可选职责在所有持久化入口保持同一空值语义
|
||||
|
||||
**触发**:修改可选成员/职责、SQL 写入、创建/heal/import/upsert 等路径时;检查范围以实际共享字段和表写者为准。
|
||||
|
||||
**机制与来源**:[问题主记录](../../audit/2026-09-23-historical-issue-records.md#nullable-duty)。内存 0 表示缺席,但数据库可空 FK 需要 NULL;一个入口已有转换不能证明另一个入口也有。原审计中错误被通用 INTERNAL_ERROR 掩盖,说明还需检查错误分型。
|
||||
|
||||
**开发检查**:
|
||||
|
||||
1. 从字段契约确定缺席、有值但非法、合法值三种语义;沿现有表写者列出所有写入口,检查转换一致性。
|
||||
2. 保持可选职责业务规则;让 SQL 边界处理缺席值,不能靠强制填 reviewer 掩盖实现错误。合法角色与非法 ID 仍按原有鉴权/FK 处理。
|
||||
3. 对缺席、合法、非法值及相关创建/修复入口安排真实 PG 验证;mock 不会证明 FK/NULL 行为。保持正常职责模式的回归。
|
||||
|
||||
**已有防护**:[engine](../../../internal/docgov/engine.go) 创建路径使用 `nullIfZero`;[历史报告](../../test-reports/2026-09-17-docgov-optional-duty-null-fk-test-report.md) 记录 `TestDocGov_CreateOrGetDocument_OptionalDutiesNullFK`、分型单测与 API/DB 冒烟。2026-09-23 仅复核源码及旧报告,未重跑测试;未据此证明真实 UI、所有写路径或当前部署。
|
||||
|
||||
**边界**:只适用于明确以 0 表示未设置且列允许 NULL 的字段;不能对所有数值或必填关系统一转 NULL。授权资格判定仍遵循现行规范。
|
||||
|
||||
**未完成防护**:跨所有相关入口的自动覆盖不由本条保证;后续变更任务按实际影响补证。没有新增 CI 门禁。
|
||||
|
||||
**修订**:2026-09-23 从历史 FK 案例提炼,并核对当前创建路径;接口/表写者变化或同因复发时再审。
|
||||
@@ -0,0 +1,11 @@
|
||||
# 开发经验与注意事项
|
||||
|
||||
先按本任务模块、路径、症状和机制检索,再读命中条目的适用条件与来源。执行步骤与维护要求见 [闭环规范](../2026-09-23-issue-learning-workflow.md);事实入口见 [问题台账](../../audit/ISSUES.md)。这些是仓库可共享的外部经验,不依赖单个聊天会话或某个客户端私有记忆。
|
||||
|
||||
| lesson_id | 触发条件 / 关键词 | 注意事项 | lesson_state | 主记录 / 最近复核 |
|
||||
|---|---|---|---|---|
|
||||
| LESSON-20260923-nullable-duty | docgov、SQL、nullable、23503、可选职责、创建/heal | 检查所有写入口的缺席值语义;用真实 PG 验证 NULL/FK | validated | [可选职责持久化](2026-09-23-nullable-duty.md);2026-09-23 |
|
||||
| LESSON-20260923-content-hash | docrevision、canonicalize、hash、bootstrap、hard-break、404、水合 | 保持文本语义并检查账本/文件一致性;新数据通过不能覆盖旧数据迁移 | validated | [正文规范化与投影](2026-09-23-content-hash.md);2026-09-23 |
|
||||
| LESSON-20260923-matrix-status-cas | FEATURE-MATRIX、docs-apply、record_id、merge conflict、CAS | 矩阵/CURRENT 行变更走 docs apply;合并后核验状态列未被回退 | validated | [矩阵状态 CAS](2026-09-23-matrix-status-cas.md);2026-09-23 |
|
||||
|
||||
validated 的证据范围见各条目;本日复核为历史材料和源码阅读,未重跑产品回归。后续按机制补充,过时条目标 superseded/retired 并保留替代链接。
|
||||
@@ -2,7 +2,7 @@
|
||||
title: "PU7 PI change-report 叙事 — 获批后任务契约"
|
||||
status: done
|
||||
created: 2026-09-16
|
||||
updated: 2026-09-17
|
||||
updated: 2026-09-23
|
||||
owner: Cursor-Auto
|
||||
branch: feature/pu7-pi-narrative
|
||||
mutex: docgov
|
||||
@@ -13,6 +13,10 @@ go_no_go: go
|
||||
|
||||
**go/no-go**:GO(用户覆盖授权,见 Wave3 research)。脚手架已合 `dev`;W3 live(产品 PI + digest 绑定)已接线,默认 flag 仍 off。
|
||||
|
||||
## 2026-09-23 收口
|
||||
|
||||
修复后真实 MiniMax 复测 PASS(截断 hunk/impact 输入 + reasoning 目标落盘);报告见 [../../test-reports/2026-09-23-pi-narrative-closeout-test-report.md](../../test-reports/2026-09-23-pi-narrative-closeout-test-report.md)。FEATURE-MATRIX `docgov-pi-narrative` → `done`。默认 flag 仍 off;放量另授权。
|
||||
|
||||
## 目标
|
||||
|
||||
只读消费 immutable diff+lineage+risk floor 的 PI 叙事;任意 schema/超时/注入 → 全量 fallback。
|
||||
@@ -27,11 +31,12 @@ go_no_go: go
|
||||
## 路径
|
||||
|
||||
- `internal/docrevision/flags.go` / `narrative.go` / `service.go`
|
||||
- `deploy/pi-agent/change-report-narrative-v1.mjs`
|
||||
- `deploy/pi-agent/change-report-narrative-v1.mjs`;`runner.mjs` reasoning 目标落盘
|
||||
- `web/.../ChangeReportPanel.tsx` / `changeReportView.ts`
|
||||
- 报告:[../../test-reports/2026-09-16-pu7-pi-narrative-test-report.md](../../test-reports/2026-09-16-pu7-pi-narrative-test-report.md)
|
||||
- W3 live:[../../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md](../../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md)
|
||||
- short-term:[../short-term/2026-09-17-w3-pi-change-report-narrative.md](../short-term/2026-09-17-w3-pi-change-report-narrative.md)
|
||||
- 收口:[../../test-reports/2026-09-23-pi-narrative-closeout-test-report.md](../../test-reports/2026-09-23-pi-narrative-closeout-test-report.md)
|
||||
- short-term:[../short-term/2026-09-17-w3-pi-change-report-narrative.md](../short-term/2026-09-17-w3-pi-change-report-narrative.md);[../short-term/2026-09-23-pi-narrative-final-closeout.md](../short-term/2026-09-23-pi-narrative-final-closeout.md)
|
||||
|
||||
## 回滚
|
||||
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
---
|
||||
title: "最终成果保险库与部分恢复边界"
|
||||
created: 2026-09-14
|
||||
status: done
|
||||
confidence: high
|
||||
---
|
||||
|
||||
# 调研:最终成果保险库与部分恢复边界
|
||||
|
||||
## 结论
|
||||
|
||||
提案可行,建议采用,但不应实现成“把最终文件复制到一个固定目录”。应建设独立的**最终成果保险库(Final Artifact Vault,FAV)**:只接收服务端已经确认终态、具有稳定标识和内容哈希的成果,以不可变 blob、语义 manifest 和提交回执保存,并与工作区清理完全解耦。
|
||||
|
||||
FAV 是 PostgreSQL 完整备份/PITR 的互补层,不是第三套完整业务事实源。它只对“已归档成果的精确内容与出处”负责,可以在数据库损坏或选择性重建时恢复文档、最终回复和有限的来源关系;成员权限、工作流活动态、租约、待办任务、幂等记录等仍须由数据库备份或其他权威记录恢复。
|
||||
|
||||
## 当前能力与缺口
|
||||
|
||||
| 能力 | 当前事实 | 与提案的差距 |
|
||||
|---|---|---|
|
||||
| 受控文档版本 | `document_content_blobs` 与 `document_snapshots` 在 PostgreSQL 内保存不可变 Markdown;工作区 `output.md` 是投影 | 数据库与账本一起丢失时,没有独立副本;当前 GET 仍会被缺失工作区投影阻断 |
|
||||
| 助手最终回复 | `chat_messages.content` 保存正文,`chat_turns.assistant_message_id` 可在 completed 回合绑定最终消息 | 占位正文会原地更新,没有独立不可变回复快照;删除 session 会级联删除消息 |
|
||||
| 回复导出 | `replyexport` 已区分 completed、status/error/card,提供 `content_sha256` 与 `export_policy` | `export-source` 仍从当前消息行临时构造 snapshot,不是持久归档;部分调用在缺少真实回合状态时默认按 completed 评估 |
|
||||
| 附件 CAS | `storage_blobs`/`file_references` + `data/<env>/storage/blobs` 按 SHA 去重 | blob 物理文件仍在运行状态根,引用元数据仍在数据库;不独立于工作区/数据库事故 |
|
||||
| 数据备份 | 现有脚本主要导出 PostgreSQL;数据生命周期方案已要求 DB + state 成对打包 | 尚无跨文档/回复的终态准入、持续发布、独立索引或成果级恢复 API |
|
||||
|
||||
当前事故已经证明“数据库记录还在”不代表“运行容器能找到正文”。FAV 可以解决成果副本对工作区根的依赖,但不能替代固定 `RUNTIME_STATE_ROOT`、storage identity、projection outbox 和数据库备份。
|
||||
|
||||
## 提案中应保留的部分
|
||||
|
||||
1. **独立持久位置**:成果存储不位于 Git worktree、临时集成目录、任务 workspace 或普通 GC 扫描范围。
|
||||
2. **只收终态成果**:拒绝流式片段、候选稿、工具轨迹、修复过程、临时报告、租约和未完成任务。
|
||||
3. **支持系统定位**:使用稳定 artifact UUID、逻辑资源 ID、来源事件和内容 SHA,而不是依赖数据库自增 ID 或 workspace 路径。
|
||||
4. **辅助部分恢复**:允许在数据库关系不匹配时校验并导入已归档内容,同时保留来源和冲突证据。
|
||||
5. **与清理联动**:工作区或旧数据集只有在必需成果全部发布并验证后才可进入销毁阶段。
|
||||
|
||||
## 必须修正的部分
|
||||
|
||||
### 1. “最终”必须由状态机判定
|
||||
|
||||
不能按文件名、目录、时间或“任务进程退出 0”判断最终。建议的准入规则:
|
||||
|
||||
| 成果类型 | 可归档条件 | 明确排除 |
|
||||
|---|---|---|
|
||||
| 智能体生成文档 | agent candidate 已 `committed`,且 output snapshot 成为账本 head;归档该次生成的不可变 snapshot | ready、needs_confirmation、rejected、stale、quality_failed、workspace 草稿 |
|
||||
| 受控文档正式稿 | `approved` 时归档被冻结的 review snapshot;版本被 sealed 时可归档该版 final head | drafting/reviewing 中尚未冻结的当前文件、lease 中内容 |
|
||||
| 自由文档 | 已形成不可变 version,且用户显式“发布/归档”或被正式成果引用;显式操作不能绕过终态检查 | 自动保存中的连续修订、临时私密摘录 |
|
||||
| 助手回复 | `chat_turn.status=completed`、绑定唯一 `assistant_message_id`、正文 SHA 匹配,且 `export_policy=full`;`copy_only` 只在 completed 后显式 pin 时进入 | status/error/cancelled/system、纯操作卡、流式 chunk、placeholder、中间 agent 消息;未完成回复即使 pin 也拒绝 |
|
||||
| 最终报告/附件 | 被上述成果 manifest 引用并通过合规/病毒/类型校验 | 未引用附件、日志、Prompt、工具输入输出、agent session |
|
||||
|
||||
“每次成功保存的人工 revision”仍进入 PostgreSQL 不可变账本,但不自动进入 FAV。这样既保留文档历史,又不会把编辑过程伪装成最终成果。
|
||||
|
||||
### 2. 保险库不是第三套完整真相源
|
||||
|
||||
建议采用三层责任边界:
|
||||
|
||||
| 层 | 权威范围 | 可否清理 |
|
||||
|---|---|---|
|
||||
| PostgreSQL 运行库 | 项目/用户/权限、工作流、任务、当前指针、完整版本账本和归档发布状态 | 按环境生命周期与完整备份策略处理 |
|
||||
| Runtime workspace/state | Agent 计算现场、`output.md` 投影、临时转换文件和附件运行副本 | 可重建/可清理,但须受发布门禁保护 |
|
||||
| Final Artifact Vault | 已准入成果的精确字节、manifest、来源证据、保留/删除状态和发布回执 | 独立保留;只能按成果保留策略和删除账本处理 |
|
||||
|
||||
正常读写仍以数据库授权和业务指针为准。数据库仍能完成授权判定但正文缺失时,可从 FAV 只读降级返回并标记 `source=vault/degraded`;若权限关系也缺失,FAV 不得绕过授权直接对用户开放,只能进入管理员隔离恢复流程。
|
||||
|
||||
### 3. 发布必须避免双写裂缝
|
||||
|
||||
数据库事务内同时提交业务终态、精确 payload/SHA 的不可变 staging 和 `artifact.publish.requested` outbox;事务外 publisher 只从 staging 幂等写 blob、manifest,校验后最后写 commit marker,再回填 receipt。对象存储 I/O 不进入数据库事务。不能让异步 publisher 重读仍可更新或随 session 级联删除的消息行。
|
||||
|
||||
清理流程只认 `verified` receipt,不认“消息发过”“目录存在”或“有一个 SHA”。重复投递必须由 `artifact_uuid + source_event_id + payload_sha256` 去重;相同逻辑资源的新终态生成新 manifest,不覆盖旧 manifest。
|
||||
|
||||
### 4. Manifest 必须表达恢复语义
|
||||
|
||||
每个归档单元至少包含:
|
||||
|
||||
```text
|
||||
artifact_schema_version
|
||||
artifact_uuid / artifact_type / logical_resource_id
|
||||
project_external_key / environment
|
||||
source_event_id / source_run_id / source_message_id / source_snapshot_id
|
||||
payload members: name / media_type / byte_size / sha256 / required
|
||||
terminal_evidence: state / decided_at / actor_ref / policy_version
|
||||
lineage: parent artifact / document version / chat turn
|
||||
retention_class / sensitivity / encryption_key_ref
|
||||
source_database_identity / source_schema_version / source_commit
|
||||
published_at / publisher_version / manifest_sha256
|
||||
```
|
||||
|
||||
manifest 使用稳定外部标识,同时保留旧数据库 ID 作为来源提示。它必须能在没有原数据库的情况下建立离线目录,但不得声称自己包含未列出的业务依赖。
|
||||
|
||||
### 5. 恢复必须经过隔离与对账
|
||||
|
||||
FAV 支持两种恢复结果:
|
||||
|
||||
- `recover-as-collection`:把验证通过的成果导入新的恢复集合/文档,保留原来源与 hash,不伪造原工作流状态。这是默认模式。
|
||||
- `relink`:只有项目、用户、权限、会话和版本依赖均存在且无冲突时,才把成果重新连接到原逻辑资源。
|
||||
|
||||
恢复顺序为:离线 inventory → manifest/schema/SHA 校验 → 删除账本/保留策略检查 → scratch DB 导入 → 依赖与 ID 映射 → 冲突预览 → 人工确认 → 单事务 promotion → 审计报告。禁止 GET 接口因发现不一致而自动写回数据库,也禁止直接覆盖既有 head 或消息。
|
||||
|
||||
## 可恢复与不可恢复边界
|
||||
|
||||
| 可从 FAV 恢复 | 不能只靠 FAV 恢复 |
|
||||
|---|---|
|
||||
| 最终 Markdown/附件字节与 MIME/SHA | 用户认证凭证、session、token |
|
||||
| 已归档助手最终回复及其稳定 turn/message 来源 | 项目成员关系、文档 duty、当时的完整授权图 |
|
||||
| 文档版本/快照的有限来源、父子和生成 run 线索 | 活跃 lease、pending candidate、未完成 task/run |
|
||||
| 最终报告、批准/提交终态证据 | 通知投递状态、outbox 消费位置、worker 状态 |
|
||||
| 恢复所需 schema/producer/storage identity 元数据 | 未进入准入清单的草稿、中间过程和完整数据库约束 |
|
||||
|
||||
因此灾难恢复仍须保留 PostgreSQL base backup/WAL 或经验证的完整逻辑备份;FAV 解决的是“最终成果可独立找回”和“有限业务内容可重建”。
|
||||
|
||||
## 存储、保留与安全
|
||||
|
||||
- 第一阶段可用独立 filesystem backend,但必须有独立 `vault_storage_identity`、最小权限凭证和 mount,不允许退回 `./data/dev`;凭证只从受管 secret/env 注入。生产目标应支持 TLS、静态加密及异机/对象存储复制。
|
||||
- 当前仓库没有 tenant 实体,安全边界应使用现有 `environment + project_members/role-admin` 授权模型,不得伪造 `tenant_id`。blob 采用**项目作用域加密 CAS**:同项目按 SHA-256 去重,跨项目相同 SHA 不共享密钥和删除边界;未来引入组织/租户层须另立 ADR 和迁移。
|
||||
- manifest-member 到 blob 的引用账本决定删除:tombstone 先撤销单个成果读取与 key wrapping;仅当项目作用域内最后有效引用消失且 retention/legal hold 允许时物理清除。manifest 和 commit marker 只追加,定期执行 checksum scrub 和离线目录重建。
|
||||
- filesystem backend 必须以同文件系统临时文件、校验、文件 `fsync`、原子 no-replace rename、父目录 `fsync` 实现持久化,确认 blob/manifest 落盘后才提交 marker;不能把“最后写 marker”误当成掉电安全。
|
||||
- WORM/对象锁按数据类别启用,不对所有内容一律永久锁定。普通保留使用可治理模式;法律保全单独使用 legal hold。
|
||||
- project/user 授权仍由服务端复用正常读取的既有判定;授权关系缺失或不确定时 fail closed。归档正文不得进入日志、metrics 或通知 payload。
|
||||
- 自动归档前执行服务端敏感内容准入:结构化排除 Prompt/工具轨迹,secret、认证材料、restricted 或分类失败均 fail closed,且正文不进入 outbox/staging。
|
||||
- 建立删除/法务保留账本。满足删除条件时先禁止读取和恢复,再删除密钥/对象;任何历史 restore 都必须重放 tombstone,避免已删除内容复活。
|
||||
- manifest 不保存 secret、Prompt、内部推理、工具轨迹或认证材料;敏感元数据最小化,必要时使用不可逆外部键映射。
|
||||
|
||||
## 与数据精简方案的关系
|
||||
|
||||
FAV 与 migration corpus、完整备份是三个不同产品:
|
||||
|
||||
| 机制 | 目的 | 内容 |
|
||||
|---|---|---|
|
||||
| Final Artifact Vault | 持续保存终态成果,供定位、只读降级和有限恢复 | 小而长期、按终态事件持续追加 |
|
||||
| Migration corpus | 验证旧 schema 到新 schema 的迁移、异常和 reload | 小而可重复、脱敏、带 assertions |
|
||||
| DB + state backup/PITR | 完整灾难恢复与回滚 | 大而完整、按 RPO/RTO 生成 |
|
||||
|
||||
清理不能因为“FAV 有最终正文”就跳过完整备份,也不能用完整备份替代成果级准入。正确门禁是三者分别验证:最终成果覆盖率、迁移 corpus 可升级、完整备份可恢复。
|
||||
|
||||
首次启用 FAV 时还必须做一次**存量终态回填**:只从权威数据库的不可变 snapshot、批准/提交事件和 completed chat turn 枚举,以来源事件 + payload SHA 幂等产生请求。缺正文或终态证据的记录进入 quarantine;批准排除必须记录原因、批准人和有效期。禁止为了达到 coverage 扫描 workspace 或批量把“旧数据”标为已覆盖。
|
||||
|
||||
## 外部依据
|
||||
|
||||
- [RFC 8493 BagIt](https://www.rfc-editor.org/rfc/rfc8493.html) 要求 manifest 覆盖 payload 并验证完整性,支持本方案的 manifest/checksum 设计。
|
||||
- [OCI Descriptor](https://github.com/opencontainers/image-spec/blob/main/descriptor.md) 以 digest 标识并校验内容,支持内容寻址 blob。
|
||||
- [AWS Transactional Outbox guidance](https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/transactional-outbox.html) 说明业务写入与 outbox 同事务、消费者幂等的必要性。
|
||||
- [PostgreSQL PITR](https://www.postgresql.org/docs/17/continuous-archiving.html)、[pg_restore](https://www.postgresql.org/docs/17/app-pgrestore.html) 与 [pg_verifybackup](https://www.postgresql.org/docs/16/app-pgverifybackup.html) 说明完整恢复、选择性恢复依赖和真实 restore 演练的边界。
|
||||
- [AWS S3 Object Lock](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html) 说明 governance/compliance/legal hold 的差异,支持按数据类别选择保留模式。
|
||||
|
||||
## 建议动作
|
||||
|
||||
1. 采用[最终成果保险库整改方案](../../remediation/2026-09-14-final-artifact-vault-remediation.md),先定义终态协议和 manifest,再选择 filesystem 或对象存储实现。
|
||||
2. 将 FAV 发布完成率加入 dataset inventory/GC 的硬门禁,但不把 FAV 设为当前 409 的绕行修复。
|
||||
3. 首次实现优先覆盖受控文档 approved/agent committed snapshot 与 `export_policy=full` 的 completed assistant reply。
|
||||
4. 先在 dev 用项目 6173 的等价脱敏 corpus 做“生成 → 发布 → 清 workspace → 读取/恢复 → rebuild”演练,再考虑 main 保留策略。
|
||||
@@ -0,0 +1,150 @@
|
||||
---
|
||||
title: "运行数据精简、迁移语料与演示数据保留策略"
|
||||
created: 2026-09-14
|
||||
status: done
|
||||
confidence: high
|
||||
---
|
||||
|
||||
# 调研:运行数据精简、迁移语料与演示数据保留策略
|
||||
|
||||
## 结论
|
||||
|
||||
用户提出的“及时清理过往数据,只保留最新、有用且必要的一部分,并用保留数据验证迁移和重载”方向合理,尤其适合当前快速迭代期的 dev/test 环境。
|
||||
|
||||
但必须补充两个边界:
|
||||
|
||||
1. 清理历史运行数据只能降低数据转换量和现场噪声,不能替代对受支持旧 schema 的迁移兼容;应把有价值的旧状态压缩成小型、可重复、脱敏的 migration corpus。
|
||||
2. 不应在当前库上逐表删除后继续使用;当前跨项目数据存在非完整级联和 DB/文件双事实源,优先采用“新库 + 新状态根 + 选择性导入 + 旧卷隔离”的蓝绿轮换。
|
||||
3. 对最终成果再增加独立 [Final Artifact Vault](./2026-09-14-final-artifact-vault.md),但它只辅助成果定位与部分恢复,不能替代完整 DB+state 备份或旧 schema migration corpus。
|
||||
|
||||
## 当前数据画像
|
||||
|
||||
2026-09-14 只读现场:
|
||||
|
||||
| 环境 | schema | 项目数/特征 | 文件状态 | 判断 |
|
||||
|---|---:|---|---|---|
|
||||
| dev | 33 | 366 个项目;149 active、217 planning;全部产生于 9 月 11–14 日 | 主仓 `data/dev` 约 100MB | 大量 PG/E2E 夹具,适合立即精简,但须先解决当前错误挂载事故 |
|
||||
| test | 29 | 约 37 个项目 | 主仓 `data/test` 约 20KB | schema 落后且数据价值低,应改为可重建/短 TTL |
|
||||
| main | 25 | 10 个历史 seed 项目,当前无受控文档 | 主仓 `data/main` 约 20KB | 不应用作日常迁移试验;清理需另行确认业务/展示用途 |
|
||||
| shared KB | 独立 | 跨环境共享知识库 | `data/shared` | 不属于本方案的项目数据清理范围 |
|
||||
|
||||
dev 主要表约有:`projects=366`、`chat_sessions=421`、`chat_messages=1923`、`task_runs=307`、`document_records=153`、`document_snapshots=283`、`document_change_events=257`。数据库总体不大,主要问题不是容量,而是数据来源混杂、迁移噪声和无法判定哪些记录应保留。
|
||||
|
||||
## 现有清理为何不能直接做
|
||||
|
||||
### 1. `DELETE projects` 不是完整项目删除
|
||||
|
||||
当前外键有 101 条,部分项目子表 CASCADE,但存在关键例外:
|
||||
|
||||
- `task_runs.project_id` 是 `ON DELETE SET NULL`,项目删除后 run/event 仍可残留;
|
||||
- `document_versions`、`document_snapshots`、`document_change_events`、`document_change_reports`、`document_agent_candidates` 依赖 `doc_id`/snapshot/version,但不完整依附 `projects`;
|
||||
- `document_content_blobs` 与 `storage_blobs` 需要引用计数/mark-and-sweep,不能看到文件就删;
|
||||
- 工作区、agent sessions、CAS 文件位于状态根,数据库 cascade 不会删除文件;
|
||||
- notification/outbox/audit/lineage 的保留语义不同,不能一律级联。
|
||||
|
||||
所以简单删除项目会制造孤儿数据,反而加重后续迁移与排障成本。
|
||||
|
||||
### 2. 现有备份/恢复不足以支撑安全轮换
|
||||
|
||||
- `backup-system-db.sh` 只导出 PostgreSQL,不包含与之匹配的 `data/<env>` 文件状态;
|
||||
- `restore-system-db-drill.sh` 校验 dump 列表并运行迁移测试,但当前没有真正把 dump restore 到新隔离数据库;
|
||||
- restore 未强制隔离目标,默认路径存在误触共享 dev 库的风险;
|
||||
- 没有 dataset manifest、项目选择、文件 SHA inventory、脱敏、预期断言与导入校验;
|
||||
- 备份脚本的凭证来源需要改成统一安全配置,不应保留脚本内默认值。
|
||||
|
||||
在这些缺口补齐前,不能用“有 dump”作为可删除证明。
|
||||
|
||||
## 建议的数据分类
|
||||
|
||||
| 类别 | 用途 | 典型内容 | 是否进入日常运行库 | 保留策略 |
|
||||
|---|---|---|---|---|
|
||||
| `operational-pinned` | 当前人工使用/正在排障 | 项目 143 等明确认领项目 | dev 可保留;main 按业务规则 | 显式 pin,禁止自动清理 |
|
||||
| `demo-current` | 产品展示 | 每个正式工作流 1 个完整、可解释项目 | dev/demo 环境 | 只保留当前版本;新版验证后替换旧版 |
|
||||
| `regression-golden` | 功能回归 | 文档版本、人工修订、并发冲突、reload 等完整链 | 隔离验收库,可选只读展示副本 | 小型、确定性、脱敏;按能力而非数量保留 |
|
||||
| `migration-baseline` | 旧 schema → 当前 schema | 旧 release 的最小 DB + 匹配文件包 | 仅隔离迁移测试 | 最多保留 3 个 release 基线,滚动替换 |
|
||||
| `ephemeral-test` | PG/E2E 单次运行 | 自动测试项目、会话、run、workspace | 每次独立数据库/状态根 | PASS 后立即删;FAIL 保留 3–7 天 |
|
||||
| `quarantine` | 清理回滚与取证 | 被替换的完整卷/状态根 | 不挂载到运行容器 | 只读 7–14 天,恢复演练通过后销毁 |
|
||||
|
||||
## 建议的最小保留集合
|
||||
|
||||
当前 dev 可先采用 6–10 个项目的上限,而不是按日期盲留:
|
||||
|
||||
1. 项目 143:暂作旧数据/canonical repair/active workflow 回归样本;若含真实内容,不进入 Git,后续用脱敏等价 fixture 替换。
|
||||
2. 项目 6173:目前最新且证据完整的受控正文 UI 全链,含两份受控文档、V3/r2、并发、权限与 restart 验证,可作为当前回归/展示候选。
|
||||
3. 项目 6159:保留一个发布周期作为上一轮文档账本对照;6173 corpus 稳定后删除,避免永久重复。
|
||||
4. 三个正式工作流各生成 1 个 `demo-current`:`main`、`product_manager`、`test_manager`;必须由固定 seed/真实页面脚本可重建,不能依赖手工挑出的偶然状态。
|
||||
5. 1 个失败/异常样本不进入展示库,只进入隔离 `regression-golden`:覆盖 projection missing、hard-break、旧消息 scope、高 ID sequence 等历史风险。
|
||||
|
||||
最新项目不等于最有价值。选择评分应优先:证据完整度、覆盖的能力、是否可脱敏重建、DB/文件一致性、是否有预期断言;时间只作为同类样本的淘汰条件。
|
||||
|
||||
本轮已只读确认 143、6159、6173 共 5 份受控文档在主仓状态根的 `output.md` 均存在且 SHA 与 `document_records` 一致;这说明它们具备候选资格,但仍需通过敏感性、owner 和可恢复性审查后才能进入最终 retain allowlist。
|
||||
|
||||
## 迁移语料库策略
|
||||
|
||||
不保存每个 Goose 版本的整库。按产品 release 边界保留:
|
||||
|
||||
- `oldest-supported`:当前承诺支持的最老 release;
|
||||
- `previous-release`:上一发布版;
|
||||
- `current-pre-upgrade`:本次上线前快照,下一次轮换为 previous。
|
||||
|
||||
当前建议先建立三个最小基线:
|
||||
|
||||
- schema 25:文档账本前/早期治理状态,覆盖 main 当前落后路径;
|
||||
- schema 28/29:文档 revision 首次引入后的状态,覆盖 test 当前路径;
|
||||
- schema 32/33:canonical repair、task 状态和当前数据根契约。
|
||||
|
||||
这些基线应由迁移 fixture builder 在隔离库中构造或从已批准快照脱敏得到,不能直接把 main/test 的运行数据当测试资产。
|
||||
|
||||
每个 corpus package 必须包含:
|
||||
|
||||
```text
|
||||
manifest.json
|
||||
database.dump
|
||||
state.tar.zst
|
||||
checksums.txt
|
||||
assertions.yaml
|
||||
```
|
||||
|
||||
manifest 至少记录 dataset 版本、source schema、目标 schema、生成 commit、storage identity、项目/会话/文档/run 数量、文件总数和 SHA、脱敏状态、过期时间;`assertions.yaml` 记录迁移后必须成立的版本、状态、正文 hash、序列与权限断言。
|
||||
|
||||
二进制 dump/状态包不进 Git;仓库只保留 manifest schema、fixture builder、脱敏规则、选择规则和非敏感断言。实际包放受控备份目录或对象存储。
|
||||
|
||||
## 每次发布的数据轮换模型
|
||||
|
||||
```text
|
||||
旧运行库/状态根(只读)
|
||||
│ export + manifest + checksums
|
||||
▼
|
||||
迁移语料构建区(脱敏/裁剪/恢复验证)
|
||||
│
|
||||
├── oldest-supported corpus
|
||||
├── previous-release corpus
|
||||
└── current demo/regression corpus
|
||||
│
|
||||
▼
|
||||
新数据库 + 新状态根(latest schema)
|
||||
│ import selected datasets
|
||||
▼
|
||||
工程门禁 + 页面验收 + rebuild/reload
|
||||
│ PASS
|
||||
▼
|
||||
切换运行 identity;旧卷 quarantine 7–14 天后销毁
|
||||
```
|
||||
|
||||
这比在原 dev 库上大规模 DELETE 更适合当前阶段:新库天然消除未知孤儿,导入过程本身又验证了备份、迁移、文件配对、序列和重载。
|
||||
|
||||
## 风险边界
|
||||
|
||||
- main 真实业务数据不能套用 dev 的 7–14 天策略;须先定义业务、合规、审计和用户删除规则。
|
||||
- 项目 143 等真实内容不能直接固化为仓库 fixture;应保留 hash/结构特征并脱敏重建。
|
||||
- migration corpus 不能只有 happy path,否则清场后会失去发现 legacy bug 的能力。
|
||||
- 任何清理必须先完成隔离 restore,并验证数据库与文件包属于同一 storage identity。
|
||||
- 任何清理还必须验证应归档终态成果均已取得 FAV verified receipt;“有归档正文”不能替代完整关系闭包恢复。
|
||||
- 错误 `/tmp` 数据根属于当前事故证据;在 split-brain 恢复报告签字前不纳入普通清理。
|
||||
|
||||
## 建议动作
|
||||
|
||||
- 采用 [运行数据生命周期与迁移语料整改方案](../../remediation/2026-09-14-runtime-data-lifecycle-and-migration-corpus-remediation.md)。
|
||||
- 首轮只处理 dev;test 改为短 TTL 隔离环境;main 仅盘点,不删除;shared KB 排除。
|
||||
- 先实现 dataset inventory/export/restore/verify,再执行蓝绿精简,不先写清理 SQL。
|
||||
- 并行实施[最终成果保险库整改](../../remediation/2026-09-14-final-artifact-vault-remediation.md),把成果覆盖率加入 GC/销毁门禁。
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
title: "协调库与 daemon:现状核查与边界核对"
|
||||
created: 2026-09-23
|
||||
owner: Cursor
|
||||
task_id: coordination-db-daemon-2026-09-23
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 63e66c6fb35d6b4dd9f3ed92e15acc9933aeb344"
|
||||
review_state: pending
|
||||
integration_state: pending
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
remote_sync: not_requested
|
||||
status: done
|
||||
confidence: high
|
||||
---
|
||||
|
||||
# 调研:协调库与 daemon 现状核查
|
||||
|
||||
## 范围与授权
|
||||
|
||||
- 用户目标:在本仓库重新落地「协调库 + daemon」方案与研究记录;L1 保持单宿主机,跨机 PostgreSQL 仅登记为 planned 的 L2(需二次授权与 ADR)。并行授权修掉 `agentctl queue` 子解析器重复注册缺陷。
|
||||
- 允许写路径(本调研):`.doc`(只读采样代码与 `.locks` 运行态)。
|
||||
- 交付终点:可审的研究记录 + 配套方案;不实施 daemon/PostgreSQL,不改产品业务代码。
|
||||
- 非目标:跨机 HA 实施、OS 沙箱、产品容器依赖式协调。
|
||||
|
||||
## 结论
|
||||
|
||||
1. `.locks/state.sqlite` 已是本机协调权威库(11 表;采样时 tasks≈105、runs≈653、events≈1406),不是「部分状态」;`scripts/agentctl.py` 已 enforced scope / lease / CAS / 收据 / 候选准入 / `--ff-only`。
|
||||
2. 真正缺口是:显式长期 claim、常驻监管入口、策略外部化、CURRENT/MATRIX 稳定 record id;`queue`/`jobs` 在修复前因 CLI 缺陷恒为 0 行(已由 `63e66c6f` 修复 parser)。
|
||||
3. 跨机 + 独立 PostgreSQL + systemd 与 [2026-09-21 锁方案](../../remediation/2026-09-21-agent-lock-coordination-plan.md) §3.2 及 [平台深化方案](../../remediation/2026-09-23-platform-deepening-reliability-ha-concurrency-plan.md) §0 冲突,只能作为 L2 planned,开工前另立 ADR。
|
||||
|
||||
## 证据
|
||||
|
||||
| 项 | 路径/命令 | 结果 |
|
||||
|----|-----------|------|
|
||||
| 权威库存在 | `.locks/state.sqlite`(gitignore:33;dockerignore:24) | 存在;`sqlite3 -readonly … ".tables"` → deployments/documents/events/freezes/jobs/projections/queue_items/receipts/runs/tasks/validations |
|
||||
| 行数采样(2026-09-23) | `sqlite3 -readonly .locks/state.sqlite` 计数 | tasks 105;runs 653;events 1406;queue_items 0;jobs 0 |
|
||||
| 无 Go agentctl | `cmd/` 列表 | 无 `cmd/agentctl`;协调 100% Python |
|
||||
| scope/lease | `scripts/agentctl.py:27` `SHARED_DOCS`;`:589` `class Lease`;`:554+` `check_resources` | 已实现;header 声明 cooperative/advisory |
|
||||
| 文档 CAS | `docs apply` `:856`;收据 `:954`;hook `:1057-1064` | 已 enforced(相对受控入口) |
|
||||
| 候选准入 | `admit_candidate` `:1066`;`integrate` `--ff-only` | 已 enforced |
|
||||
| queue 缺陷(修复前) | 曾于 `:1613` 与 `:1629` 双重 `add_parser('queue')` | 后注册覆盖先注册;handler 读 `args.head`/`args.drain`/`args.task` |
|
||||
| queue 修复 | 合入 `63e66c6fb35d6b4dd9f3ed92e15acc9933aeb344` | 仅保留一处注册(现 `:1613`);回归测试 3 例;全套 unittest 103/2 skipped PASS |
|
||||
| 策略 YAML | `configs/agent-governance.yaml` | **不存在**;策略硬编码于 `agentctl.py` / `agentctl_w4.py` |
|
||||
| 常驻服务 | `find` `*.service`/`*.plist`;compose 无 agentctl | **0 个**;`queue schedule`/`deploy run-loop` 均为前台调用 |
|
||||
| 主机 | `uname -s` | Darwin(macOS);systemd 不能作为本机 L1 默认 |
|
||||
| 孤儿实现 | `scripts/agentctl_automation.py` | 零导入;schema 含 `operations`/`doc_registry`,活库无这两表 |
|
||||
| 孤儿文件 | `.locks/state.db` | 0 字节;代码无引用 |
|
||||
| 既有方案 | `.doc/remediation/2026-09-21-agent-lock-coordination-plan.md` | planned;推荐本机 SQLite,明确拒绝产品 PG/跨机锁服务(本期) |
|
||||
| INDEX 缺口 | `.doc/remediation/INDEX.md` | 未索引 2026-09-21 锁方案 |
|
||||
| CURRENT 矛盾 | `.doc/ops/CURRENT.md:5` vs `:15` | 分别写 macOS 租约可用 / 不可用 |
|
||||
| 操作规范过时 | `.doc/ops/2026-09-21-agent-worktree-workflow.md:3` | 仍写「Linux 本机」;W1-B macOS 已 done |
|
||||
| 不存在的摘要产物 | `3f14d7fa`;`2026-09-23-coordination-db-daemon-*.md`(合入前) | 对象名无效;路径不存在;本轮为重新落地 |
|
||||
|
||||
## 边界冲突核对
|
||||
|
||||
| 主张 | 权威来源 | 处置 |
|
||||
|---|---|---|
|
||||
| 跨机锁服务 / 产品 PG 协调 | 锁方案 §3.2「当前不采用」 | L2 planned;另立 ADR 前不开工 |
|
||||
| HA=单宿主机 | 平台深化方案 §0(用户确认) | L1 遵守;跨机不在深化方案范围内 |
|
||||
| L1 不宣称 OS 沙箱 | 操作规范 `:5`;`agentctl.py:2` | 方案全文保持 advisory |
|
||||
| systemd 作为非容器运行方式 | 仓库无 unit;主机 Darwin | L1=launchd;systemd 仅 L2 Linux 中央主机 |
|
||||
|
||||
## 机制核验(官方语义,推论)
|
||||
|
||||
- SQLite 短事务可原子完成多资源冲突检查,但不能装入多小时开发。
|
||||
- flock 与打开 fd 绑定;TTL 到期不等于进程已停写。
|
||||
- 两次 Markdown rename + SQLite 不是跨介质原子事务;发布边界仍是 Git 提交。
|
||||
- argparse 同名子解析器后注册覆盖先注册(本轮缺陷根因)。
|
||||
|
||||
## 开放问题
|
||||
|
||||
- L2 ADR 的 RPO/RTO、中央主机拓扑与凭证边界待二次授权。
|
||||
- `agentctl_automation.py` 收敛或删除的独立实施批次尚未认领。
|
||||
- FEATURE-MATRIX 27 行稳定 record id 迁移策略(additive vs 一次性改表)待 U6 开工前确认。
|
||||
|
||||
## 建议动作
|
||||
|
||||
1. 合入本调研与配套方案(docs-only)。
|
||||
2. 按方案 U1–U7 另立实施 short-term;U1 剩余项(automation 归一、state.db 清理)在 queue 修复之后继续。
|
||||
3. L2 仅登记,不排期。
|
||||
|
||||
## 状态与交接
|
||||
|
||||
- 被审 SHA:`63e66c6fb35d6b4dd9f3ed92e15acc9933aeb344`(含 queue 修复)。
|
||||
- 本文件状态 `done` 指调研可审,不代表方案已实施。
|
||||
- 配套方案:[协调库与 daemon 方案](../../remediation/2026-09-23-coordination-db-daemon-plan.md)。
|
||||
- 任务主记录:[short-term](../short-term/2026-09-23-coordination-db-daemon.md)。
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
title: "dev runtime data root split-brain 诊断、方案审查与修订"
|
||||
status: in_progress
|
||||
created: 2026-09-14
|
||||
updated: 2026-09-14
|
||||
owner: Cursor
|
||||
branch: fix/dev-runtime-data-root-guard
|
||||
worktree: .worktrees/fix-dev-runtime-data-root-guard
|
||||
mutex: infra-runtime-state
|
||||
---
|
||||
|
||||
# dev runtime data root split-brain 诊断、方案审查与修订
|
||||
|
||||
## 目标
|
||||
|
||||
定位项目 143 刷新 409 的当前根因,经审查后把整改方案改成可执行、可分批批准的文本;**不实施**纠挂或业务代码,直到用户再批 Unit A / Unit B。
|
||||
|
||||
## 范围
|
||||
|
||||
- 诊断:用户报错链、dev PostgreSQL、主仓文件、容器 mount、health/ready、Compose / `env-service.sh`
|
||||
- 审查:原文六波次方案的内部矛盾、可行性、抢占与身份首启风险
|
||||
- 修订:Unit A / Unit B / Deferred 拆分与可执行 Wave 0 Runbook
|
||||
|
||||
## 非目标
|
||||
|
||||
- 不操作真实用户会话
|
||||
- 不写数据库、不覆盖正文、不删除错误根
|
||||
- 本轮不 rebuild、不占集成槽执行纠挂(抢占授权已写入方案,实施另批)
|
||||
- 不变更运行中的 test/main
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] 完成仓库启动链、既有 canonical hash/refresh 事故文档复核。
|
||||
2. [x] 比对项目 143 DB record、ledger head、主仓 `output.md` 与容器内路径。
|
||||
3. [x] 审计 app/pi/cursor mounts、Compose working dir、健康检查与影响面。
|
||||
4. [x] 完成初版 audit、remediation、gap/feature/current SSOT。
|
||||
5. [x] 多视角审查原文方案;现场复核挂载与集成槽仍为事故态。
|
||||
6. [x] 按审查结论重写整改方案(Unit A/B/Deferred + 可执行 Runbook)。
|
||||
7. [ ] 用户再批后实施 Unit A(事故抢占纠挂)。
|
||||
8. [ ] 用户再批后实施 Unit B(绝对状态根 + 门禁 + `/ready`)。
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [x] 直接根因有数据库、文件和容器三方证据。
|
||||
- [x] 明确区分旧 hash drift、真正 ETag 409 与本次 projection missing。
|
||||
- [x] 修订方案不再把 Wave 0 依赖尚未存在的 identity / outbox;不再把 Deferred 当事故关门条件。
|
||||
- [x] 未污染真实会话或修改共享运行态。
|
||||
- [ ] Unit A/B 实施与验收(另批)。
|
||||
|
||||
## 相关链接
|
||||
|
||||
- Audit: [../../audit/2026-09-14-dev-runtime-data-root-split-brain.md](../../audit/2026-09-14-dev-runtime-data-root-split-brain.md)
|
||||
- Remediation: [../../remediation/2026-09-14-dev-runtime-data-root-and-projection-remediation.md](../../remediation/2026-09-14-dev-runtime-data-root-and-projection-remediation.md)
|
||||
- Test report: 待 Unit A 实施后创建
|
||||
|
||||
## 证据 / 备注
|
||||
|
||||
- 诊断分支:`fix/dev-runtime-data-root-guard`,基线 `dev@a8f9451`,诊断 commit `f1edb70`。
|
||||
- 2026-09-14 08:54 UTC 诊断:app/pi/cursor 均挂 `/tmp/as-dev-wf409-merge/data/dev*`;DB 仍为 `agent-dev-context-pgdata`。
|
||||
- 2026-09-14 ~09:23 UTC 审查复核:同一挂载仍在;`/health` `/ready` 200,`schema_version=33`;主仓 CURRENT 槽位仍为 `implementer_cursor` e2e。
|
||||
- 用户选择:Wave 0 = 事故抢占;先改方案再批实施。
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: "最终成果保险库 V0–V6 落地"
|
||||
status: done
|
||||
created: 2026-09-14
|
||||
updated: 2026-09-14
|
||||
owner: Cursor
|
||||
branch: feature/final-artifact-vault
|
||||
worktree: .worktrees/fix-dev-runtime-data-root-guard
|
||||
mutex: artifact-vault
|
||||
---
|
||||
|
||||
# 最终成果保险库 V0–V6 落地
|
||||
|
||||
## 目标
|
||||
|
||||
按已审查方案实现 FAV:协议、独立存储、文档/助手接入、存量回填、只读降级、scratch 恢复与清理门禁。
|
||||
|
||||
## 非目标
|
||||
|
||||
- 不替代 Unit A/B 纠挂
|
||||
- 不占 agent-dev 集成槽 rebuild
|
||||
- 不扫描 workspace 猜测终态
|
||||
- 不新增 tenant_id
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] V0 ADR/schema/eligibility/goose/表征(goose **00034**)
|
||||
2. [x] V0 领域缺口(review_snapshot_id、ledger hook、task CompleteChatTurn + export 列)
|
||||
3. [x] V1 存储与 publisher(独立根、项目作用域 CAS、PG/Memory registry)
|
||||
4. [x] V2 文档接入(persistAgentCommit / ApproverApprove / freeform publish)
|
||||
5. [x] V3 助手接入(同步 chat + task finalize)
|
||||
6. [x] V3.5 回填(只枚举账本/完成 turn)
|
||||
7. [x] V4 降级读取(`FAV_DEGRADED_READ` 默认关)
|
||||
8. [x] V5 恢复(scratch-only recover-apply 写入 collection;union-deny 跳过 tombstone)
|
||||
9. [x] V6 门禁与三份演练报告(live e2e 待 Unit A)
|
||||
10. [x] 缺口补齐:approve/commit 同事务 staging;半发布 exclusive 重试;GET 零写入;`copy_only` pin-export;destroy 预检 CLI
|
||||
|
||||
## 相关链接
|
||||
|
||||
- ADR: [../../adr/2026-09-14-final-artifact-vault.md](../../adr/2026-09-14-final-artifact-vault.md)
|
||||
- Remediation: [../../remediation/2026-09-14-final-artifact-vault-remediation.md](../../remediation/2026-09-14-final-artifact-vault-remediation.md)
|
||||
- Test report: [../../test-reports/2026-09-14-final-artifact-vault-test-report.md](../../test-reports/2026-09-14-final-artifact-vault-test-report.md)
|
||||
|
||||
## 证据 / 备注
|
||||
|
||||
- 分支:`feature/final-artifact-vault`
|
||||
- 未执行 `env-service` rebuild;`FAV_DEGRADED_READ` 默认 false
|
||||
- Goose:`00034_2026-09-14-final-artifact-vault.sql`
|
||||
- 未合 `dev`;live 6173 / PITR / corpus 仍待 Unit A 另占槽
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
title: "最终成果保险库调研与整改方案"
|
||||
status: done
|
||||
created: 2026-09-14
|
||||
updated: 2026-09-14
|
||||
owner: Codex
|
||||
branch: fix/dev-runtime-data-root-guard
|
||||
worktree: .worktrees/fix-dev-runtime-data-root-guard
|
||||
mutex: artifact-vault
|
||||
---
|
||||
|
||||
# 最终成果保险库调研与整改方案
|
||||
|
||||
## 目标
|
||||
|
||||
评估并完善“只归档最终生成物和最终智能体回复”的提案,形成不会与数据库、文档账本和工作区争夺事实源,且能支持受控部分恢复的系统方案。
|
||||
|
||||
## 范围
|
||||
|
||||
- 最终文档版本、最终助手回复和必要恢复元数据的归档边界;
|
||||
- 终态判定、原子发布、不可变清单、校验、授权、保留与删除;
|
||||
- 工作区清理门禁、降级读取、隔离恢复和数据库重建边界;
|
||||
- 与现有数据生命周期、迁移语料、文档账本和对话持久化方案衔接。
|
||||
|
||||
## 非目标
|
||||
|
||||
- 本轮不实现业务代码、数据库迁移或对象存储;
|
||||
- 不归档候选稿、流式片段、工具轨迹、租约、临时工作区或其他中间结果;
|
||||
- 不把保险库定义为运行数据库的完整镜像或自动覆盖线上数据的入口;
|
||||
- 不执行数据删除、卷切换或恢复写入。
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] 登记任务和独立 mutex。
|
||||
2. [x] 核对现有文档快照、CAS、最终助手消息、任务终态和备份恢复边界。
|
||||
3. [x] 评审提案,明确可采用部分、必须修正部分和反模式。
|
||||
4. [x] 编写专项调研与整改方案,并并入运行数据生命周期方案。
|
||||
5. [x] 更新 CURRENT、FEATURE-MATRIX、gap-matrix 与整改索引。
|
||||
6. [x] 完成文档一致性、安全、可行性和对抗性复核。
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [x] 明确“最终”的服务端判定规则和禁止进入保险库的内容。
|
||||
- [x] 明确数据库、工作区、保险库三者权威边界,不产生静默双写。
|
||||
- [x] 方案含 manifest/checksum、幂等发布、清理前门禁、降级读取和隔离恢复流程。
|
||||
- [x] 明确可恢复与不可恢复的数据范围、安全/删除要求及恢复演练。
|
||||
- [x] 本轮未实施业务代码或破坏性操作。
|
||||
|
||||
## 相关链接
|
||||
|
||||
- Research: [最终成果保险库与部分恢复边界](../research/2026-09-14-final-artifact-vault.md)
|
||||
- Remediation: [最终成果保险库与受控恢复](../../remediation/2026-09-14-final-artifact-vault-remediation.md)
|
||||
- Test report: 待用户批准实施后创建
|
||||
|
||||
## 证据 / 备注
|
||||
|
||||
- 当前受控文档不可变正文位于 PostgreSQL `document_content_blobs`,工作区 `output.md` 是投影。
|
||||
- 当前附件 CAS 物理 blob 位于运行状态根,引用元数据位于 PostgreSQL。
|
||||
- 当前任务完成摘要通过 `FinalizeAssistantTaskMessage` 写回 `chat_messages`,尚无独立终态成果发布协议。
|
||||
- 文档复核补齐:显式发布不可绕过终态、不可变 payload staging、项目作用域加密 CAS/引用删除、存量回填、掉电持久化、敏感内容准入、既有项目授权降级和 scratch 恢复权限。
|
||||
- 独立 Claude 安全/对抗复核结果已收敛;whole-document peer 因结构化输出重试耗尽被丢弃,未作为结论依据。
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
title: "运行数据精简与迁移语料库方案"
|
||||
status: done
|
||||
created: 2026-09-14
|
||||
updated: 2026-09-14
|
||||
owner: Codex
|
||||
branch: fix/dev-runtime-data-root-guard
|
||||
worktree: .worktrees/fix-dev-runtime-data-root-guard
|
||||
mutex: infra-runtime-state
|
||||
---
|
||||
|
||||
# 运行数据精简与迁移语料库方案
|
||||
|
||||
## 目标
|
||||
|
||||
评估及时清理旧数据建议的合理性,并设计可恢复、可迁移验证、可展示且不污染长期环境的数据生命周期方案。
|
||||
|
||||
## 范围
|
||||
|
||||
- dev/test/main 数据量、schema、项目/文档/run 关系与文件状态;
|
||||
- 备份/恢复、选择性导出、迁移 corpus、蓝绿轮换;
|
||||
- retention 分类、TTL、quarantine、GC 和验收门禁。
|
||||
- 最终成果保险库 coverage 与清理门禁,但不以其替代完整备份。
|
||||
|
||||
## 非目标
|
||||
|
||||
- 不执行 DELETE/TRUNCATE/drop volume;
|
||||
- 不修改数据库、文件正文或容器;
|
||||
- 不清理 main/shared KB;
|
||||
- 不把现有项目 ID 清单视作删除授权。
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] 只读统计三环境 schema、项目/关键表规模和 dev 文件规模。
|
||||
2. [x] 审计项目外键闭包、revision/CAS/workspace 孤儿风险。
|
||||
3. [x] 审计现有 backup/restore drill 能力与隔离缺口。
|
||||
4. [x] 制定数据分类、最小保留集、migration corpus 和蓝绿轮换方案。
|
||||
5. [x] 更新父整改、CURRENT、gap 与 remediation 索引。
|
||||
6. [x] 并入最终成果保险库、终态 coverage 和受控部分恢复边界。
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [x] 明确说明建议合理的条件和不能替代 migration 的边界。
|
||||
- [x] 首轮 retain 建议基于能力覆盖,不按时间盲留。
|
||||
- [x] 方案包含备份配对、真实 restore、选择性导入、reload/rebuild、rollback 和延迟销毁。
|
||||
- [x] 本轮未实施破坏性操作。
|
||||
- [x] 明确最终成果保险库、migration corpus 和完整 DB+state backup 三者互补且分别验收。
|
||||
|
||||
## 相关链接
|
||||
|
||||
- Research: [../research/2026-09-14-runtime-data-retention-and-migration-corpus.md](../research/2026-09-14-runtime-data-retention-and-migration-corpus.md)
|
||||
- Remediation: [../../remediation/2026-09-14-runtime-data-lifecycle-and-migration-corpus-remediation.md](../../remediation/2026-09-14-runtime-data-lifecycle-and-migration-corpus-remediation.md)
|
||||
- Final Artifact Vault: [../../remediation/2026-09-14-final-artifact-vault-remediation.md](../../remediation/2026-09-14-final-artifact-vault-remediation.md)
|
||||
- Test report: 待用户批准实施后创建
|
||||
|
||||
## 证据 / 备注
|
||||
|
||||
- dev schema 33 / 366 projects / 主仓状态约 100MB;test schema 29;main schema 25。
|
||||
- `DELETE projects` 无法完整清理 task run、revision ledger、blob 与文件状态。
|
||||
- 首选新 green DB/state root 导入 retain allowlist,旧 blue 只读隔离后延迟销毁。
|
||||
@@ -0,0 +1,66 @@
|
||||
---
|
||||
title: "Go 原生 PI Agent 运行时(pi-native 并存验证)"
|
||||
status: in_progress
|
||||
created: 2026-09-21
|
||||
updated: 2026-09-21
|
||||
owner: Cursor
|
||||
branch: feature/go-agentx-runtime-2026-09-21
|
||||
worktree: .worktrees/go-agentx-runtime-2026-09-21
|
||||
base_dev_sha: a5ea469ca44171a5c3e6419b1757852270fb991d
|
||||
write_scope: [internal/agentx, internal/agent, internal/config, internal/taskrun, internal/workspace, internal/server, cmd, deploy/postgres/goose, tools/cursor-bridge, .doc/ops, .doc/status, .doc/audit, .doc/test-reports]
|
||||
head_sha: 5d77e9cf
|
||||
deployment: pending
|
||||
cleanup: pending
|
||||
mutex: agent-backend-swap
|
||||
---
|
||||
|
||||
# Go 原生 PI Agent 运行时(pi-native 并存验证)
|
||||
|
||||
## 目标
|
||||
|
||||
在主服务进程内实现 Go 智能体运行时,以新后端名 `pi-native` 与容器 `pi-agent` 并存;移除未使用的 cursor 后端;经双后端对比达到同等或更好后再切默认,否则保持 `AGENT_BACKEND=pi-agent`。
|
||||
|
||||
## 范围
|
||||
|
||||
- `internal/agentx`:OpenAI 兼容流式客户端、工作区工具、agent loop、JSONL transcript
|
||||
- `internal/agent/pinative.go`:`agent.Backend` 适配,名称 `pi-native`
|
||||
- 移除 `cursor-cli` 与 `tools/cursor-bridge`
|
||||
- 工作区注册、TTL/配额 GC(清理仍受冻结清单与 receipts 门禁约束)、管理端点
|
||||
- 双后端对比判定套件
|
||||
|
||||
## 非目标
|
||||
|
||||
- 删除 `deploy/pi-agent/`、`PiAgentBackend`、runner 契约与 compose 中的 pi-agent 服务
|
||||
- 在对比未通过时修改 `AGENT_BACKEND` 默认值
|
||||
- 模板文档生成与智能体小队动态编排
|
||||
- 在本 worktree 内执行 `env-service`
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] 从 dev `a5ea469ca44171a5c3e6419b1757852270fb991d` 创建 worktree
|
||||
2. [x] LLM 流式客户端与契约测试
|
||||
3. [x] 工具 jail 与 hook
|
||||
4. [x] agent loop 与 JSONL 会话
|
||||
5. [x] `pi-native` 接线并移除 cursor
|
||||
6. [x] 工作区注册表、GC、管理端点
|
||||
7. [x] 双后端对比;未达标则不切默认
|
||||
8. [x] 报告、FEATURE-MATRIX、CURRENT 收口
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [ ] `go vet ./...` 通过;`go test -short ./...` 未全绿(见报告第六节,失败在既有 import 与共享 dev 库)
|
||||
- [x] `AGENT_BACKEND` 默认仍为 `pi-agent`(对比未判定为同等或更好)
|
||||
- [x] 判定标准已执行:成功率 1.00≥0.33、P0=0、P95 16.616s > 1.3×6.926s,不切换
|
||||
- [x] cursor 后端代码与配置已移除;pi-agent 容器链路仍保留
|
||||
|
||||
## 相关链接
|
||||
|
||||
- Checklist:
|
||||
- Handoff:
|
||||
- Test report: `.doc/test-reports/2026-09-21-go-agentx-runtime-test-report.md`
|
||||
|
||||
## 证据 / 备注
|
||||
|
||||
远端同步状态:创建时主目录为本地 `dev`,ahead of `origin/dev`,未为创建任务执行 fetch/pull。
|
||||
|
||||
对比未过 P95 门槛后,用户决定先不把时延作为切换条件:dev 启用 `pi-native`,失败时在进程内回退到容器 `pi-agent`。test/main 的 compose 默认仍是 `pi-agent`。`deployment` 在主目录 rebuild 之后再记。
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: "意图确认优先与阶段感知消解"
|
||||
status: done
|
||||
created: 2026-09-21
|
||||
updated: 2026-09-21
|
||||
owner: Cursor
|
||||
branch: fix/intent-confirm-stage-aware-2026-09-21
|
||||
worktree: .worktrees/intent-confirm-stage-aware-2026-09-21
|
||||
base_dev_sha: 49fb68fec1ea56f00616c23d08efb15950c2300d
|
||||
mutex: intent+web+docgov
|
||||
---
|
||||
|
||||
# 意图确认优先与阶段感知消解
|
||||
|
||||
## 目标
|
||||
|
||||
商务流初期「整理一下需求」等弱写表述 → 阶段感知消解为 intake,经确认卡片拍板后再执行;不强指令误伤。扩展已合入的工作流作用域修复。
|
||||
|
||||
## 范围
|
||||
|
||||
- 批次5 `feat(intent)`:弱写动词 + `stageAwareRequirementsTask` + `needs_confirmation`
|
||||
- 批次6 `feat(coordinator)`:智能确认门禁(PendingExpectation)
|
||||
- 批次7 `feat(web)`:阶段错误降级聊天一次
|
||||
- 批次8:验收报告 + 合回 `dev` + 真实 PI 抽样
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] 批次5–7 实现与单元门禁
|
||||
2. [x] 批次8:合入 `dev@0c401904` + rebuild + 真实链路抽样(陈威项目 6579)
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [x] V0.1「整理一下需求」→ 确认 →「好」→ intake(单元 + 真实 PI)
|
||||
- [x] 强指令不强制确认;「编写用户需求表」无 rdev 误拦
|
||||
- [x] 合入后真实 PI 抽样(见测试报告)
|
||||
|
||||
## 相关链接
|
||||
|
||||
- Plan: `~/.cursor/plans/意图确认优先与阶段感知_7ab2c4d5.plan.md`
|
||||
- Prior (done): `.doc/archive/ops/2026-09-21-intent-workflow-scoping.md`
|
||||
- Test report: `.doc/test-reports/2026-09-21-intent-confirm-stage-aware-test-report.md`
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
title: "工作流作用域权重化"
|
||||
status: done
|
||||
created: 2026-09-21
|
||||
updated: 2026-09-21
|
||||
owner: Cursor
|
||||
branch: feature/workflow-scope-weighting-2026-09-21
|
||||
worktree: .worktrees/workflow-scope-weighting-2026-09-21
|
||||
base_dev_sha: 10aee3feb478c550adc9959f2d3a8d17cd5b48a0
|
||||
write_scope: [internal/workflowscope, internal/intent, internal/server, internal/coordinator, internal/config, internal/sysadmin, web/src, docker-compose.dev.yml, docker-compose.test.yml, docker-compose.main.yml, .env.example, .doc]
|
||||
head_sha: 7723a5515948788602b342cdda1137c90fee311b
|
||||
deployment: deployed
|
||||
cleanup: pending
|
||||
mutex: intent+web+docgov
|
||||
---
|
||||
|
||||
# 工作流作用域权重化
|
||||
|
||||
## 目标
|
||||
|
||||
把「句子里出现他流文档短语就硬拦截」改为「匹配质量 × 工作流关系权重」裁决。激活流优先;只有他流精确命中明显压过激活流时才跨流。只读跨流在查看权限通过后放行并注明归属;写动作仍引导到项目设置切换(跨流写在现架构下不可执行)。`WORKFLOW_SCOPE_MODE` 默认 `strict`,保持现状。
|
||||
|
||||
## 范围
|
||||
|
||||
- 新建 `internal/workflowscope`(开关、关系权重、打分裁决)
|
||||
- 服务端文档读取、意图填槽、前端模板匹配改用同一裁决
|
||||
- compose / `.env.example` / sysadmin 登记开关
|
||||
- dev 真实环境验收与测试报告
|
||||
|
||||
## 非目标
|
||||
|
||||
- 不迁移 `document_records`,不加 `workflow_instance_id`
|
||||
- 不改工作流切换 / 激活接口
|
||||
- 不改 `production_ready`,不晋升 test/main,不动项目 143
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] 打分内核与开关
|
||||
2. [x] 服务端只读跨流放行与查看权限
|
||||
3. [x] 意图填槽改打分
|
||||
4. [x] 前端模板匹配改打分
|
||||
5. [x] 开关声明、真实验收、报告、合回 dev
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [x] strict 模式与现有跨流拦截断言一致
|
||||
- [x] weighted 下激活流精确名压过他流短语,不再误拦
|
||||
- [x] weighted 下只读精确点名他流文档可放行并注明归属;写动作仍拦截
|
||||
- [x] 无查看权限 / 实例已关闭时跨流只读拒绝
|
||||
- [x] 空激活键不过滤
|
||||
|
||||
## 相关链接
|
||||
|
||||
- Plan: `~/.cursor/plans/工作流作用域权重化_411b5e35.plan.md`
|
||||
- Test report: `.doc/test-reports/2026-09-21-workflow-scope-weighting-test-report.md`
|
||||
|
||||
## 证据 / 备注
|
||||
|
||||
查看权限:治理实例 `ViewableTaskKeys` 只含当前实例已启用文档。他流任务键不在快照内,不能把它当成「显式隐藏」。判定为:解析失败按 `failClosedAuthz` 拒绝;`ViewableTaskKeys` 为空(实例已关闭)拒绝;键落在当前实例但不可见则拒绝;键不属于当前实例、且调用方已能查看该实例文档时允许只读。
|
||||
@@ -64,7 +64,5 @@ prelim 常 `author_id=0`(unmanaged duties → 无认领/编辑)。冲突用
|
||||
|
||||
## CURRENT 同步说明
|
||||
|
||||
- `docs(@document)` 收记录在 closeout tip `e9a9ce97`(含 DOCREV PASS 焦点行)。
|
||||
- 合入 local_dev 的 merge `437cee84` 以第二父带上该 tip,但 merge 树未带上 CURRENT 正文(曾误用 ours)。
|
||||
- **cleanup_pending**:持 `docs:admin` 的执行者对 local_dev 基线再跑一次 `@document` apply 后 `--no-ff` 合入,或从 `e9a9ce97` 重放 CURRENT。
|
||||
- audit/remediation/账本已在 local_dev `ddcb63cd`/`437cee84`。
|
||||
- 曾误用 ours merge 丢掉 CURRENT 焦点;后由 closeout `docs:admin` 重放并合入 local_dev(`c24e1548` → MATRIX 收口 `8f0e31e5`)。
|
||||
- audit/remediation/密封账本与 DOCREV PASS 焦点已在 local_dev;本 worktree 仅保留短文备忘。
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
title: "freeform project_id BIGINT 对齐 projects.id"
|
||||
task_id: "freeform-project-id-bigint-2026-09-22"
|
||||
status: done
|
||||
created: 2026-09-22
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
branch: feature/freeform-project-id-bigint-2026-09-22
|
||||
worktree: .worktrees/freeform-project-id-bigint-2026-09-22
|
||||
write_scope: ["deploy/postgres/goose", "internal/freedoc", "internal/server", ".doc"]
|
||||
allowed_environments: ["dev"]
|
||||
mutex: "deploy/postgres/goose + freeform"
|
||||
---
|
||||
|
||||
# freeform project_id BIGINT
|
||||
|
||||
## 问题
|
||||
`POST /api/v1/freeform-documents` 在雪花 `project_id`(>int4 max)时 pgx 编码失败(OID 23),阻塞 UI-11 附件注册。
|
||||
|
||||
## 修复
|
||||
- goose `00063`:`freeform_documents.project_id` → BIGINT
|
||||
- Go `ProjectID`/`ListDocuments` → int64;list query 用 `ParseInt`
|
||||
- 活库已手工 ALTER(schema 仍报 61);合入后 goose 幂等加固
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/freedoc/ -short` PASS(含 snowflake 回归)
|
||||
- 活库 column = bigint
|
||||
@@ -0,0 +1,168 @@
|
||||
---
|
||||
title: "当前解耦审查与跨项目模块契约规范"
|
||||
task_id: modular-contract-standard-2026-09-22
|
||||
status: done
|
||||
created: 2026-09-22
|
||||
updated: 2026-09-23
|
||||
owner: Codex
|
||||
task_type: research
|
||||
task_tier: multi_stage
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ d034aa00e5785f51234b484f9dca6bf4fb037660"
|
||||
branch: feature/modular-contract-standard-2026-09-22
|
||||
worktree: .worktrees/modular-contract-standard-2026-09-22
|
||||
base_dev_sha: d034aa00e5785f51234b484f9dca6bf4fb037660
|
||||
write_scope: [".doc/ops/short-term/2026-09-22-modular-contract-standard.md", ".doc/remediation/2026-09-22-agent-system-modular-refactor-plan.md", ".doc/remediation/2026-09-22-modular-platform-adoption-plan.md", ".doc/ops/CURRENT.md"]
|
||||
allowed_environments: []
|
||||
mutex: "path:本任务四份文档;CURRENT 使用行级 CAS"
|
||||
review_state: approved
|
||||
integration_state: pending
|
||||
deployment: not_required
|
||||
cleanup: retained-with-reason
|
||||
cleanup_owner: 独立维护者
|
||||
cleanup_trigger: 本地 dev 集成完成且 owner 退出后由独立维护者复查
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# 当前解耦审查与跨项目模块契约规范
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
2026-09-22 用户要求:“梳理当前系统,看系统的多模块、功能之间的解耦做的如何,并制定规范(和本项目无关的通用规范)”,重点为统一封装、HTTP/Socket/IPC/RPC 通信、接口契约、总线调度、并发数据完整性和幂等,并形成设计规划。交付终点是可审研究与规范草案。允许隔离任务区写文档、只读源码与官方资料检索;不实施业务代码、不部署、不操作数据库、不 push。
|
||||
|
||||
本次是跨项目标准的新研究任务,引用 2026-09-20 项目专用审查作为输入,不代替原 A–G 整改任务、不改变现行 ADR。用户 AGENTS 指定的 .doc taxonomy 优先于技能默认 docs/plans 目录。研究阶段保留共享主目录原有三项未跟踪 promotion receipts;后续经用户确认归档,见集成结果。
|
||||
|
||||
## 产物与步骤
|
||||
|
||||
1. 当前源码证据:[解耦现状](../../audit/2026-09-22-module-decoupling-current-state.md)。
|
||||
2. 可独立复用的规范:[通用模块契约规范](../../system-design/2026-09-22-generic-module-contract-standard.md)。
|
||||
3. 平台封装与渐进采用:[落地方案](../../remediation/2026-09-22-modular-platform-adoption-plan.md)。
|
||||
4. 文档交叉审阅、路径与差异检查;本记录承载验证和交接。
|
||||
|
||||
## 基线与验证计划
|
||||
|
||||
- 本地 dev 完整 SHA 见 frontmatter;创建时 origin/dev...dev 为 0 / 6,仅本地 remote-tracking 比较,未 fetch,不能作为远端实时状态。
|
||||
- 两个只读子审查共用父任务:coupling_evidence(模块边界),bus_evidence(事件与事务),不独立写入。
|
||||
- 实际环境未验收;本次只做源码证据与文档验证,不运行 Go/PG/PI/浏览器测试。
|
||||
- 不更新 FEATURE-MATRIX/gap-matrix:本次不改变模块能力与发布 blocker 声明。
|
||||
- 检索记忆仅用于导航与流程提醒;现状结论须回到当前源码核实。
|
||||
|
||||
## 验证与收口
|
||||
|
||||
本次研究交付完成;用户后续明确要求“合入 dev”,review_state=approved 仅表示同意文档入库,规范仍为 proposed,不自动启用为项目强制规则。用户后续可直接围绕同一 task_id 审阅/修订;业务实施另立授权任务。
|
||||
|
||||
### 实际检查
|
||||
|
||||
| 范围 | 实际检查 | 结果及限制 |
|
||||
|---|---|---|
|
||||
| 固定源码 | 两个只读子审查 + 主审核对 dispatcher、producer、worker 与 ADR | 现状报告保留路径及行号;不等于运行验收 |
|
||||
| 文档链接 | Python 逐项解析四文档本地 Markdown 链接 | 8 条本地链接存在,0 错误 |
|
||||
| 文档结构 | Python 检查 fenced block、行尾空白、末尾换行、路径可移植性 | 0 错误;Mermaid 结构人工检查,未调用渲染器 |
|
||||
| 稳定 ID | Python 检查规范 MCS-01–22 与计划 U1–U8 | 唯一且完整 |
|
||||
| 差异 | git diff --check;git diff -- .doc/ops/CURRENT.md | 无空白错误;CURRENT 仅本任务行,使用 CAS 收据 |
|
||||
| 运行与业务 | Go/arch-check/PG/PI/浏览器/部署 | 本次不适用,未执行;不报告产品 PASS |
|
||||
| 研究阶段主目录 | git rev-parse dev 与 git status --short | 当时 dev 为基线 SHA,原三项未跟踪 promotion receipts 保留;后续结果见集成节 |
|
||||
|
||||
所有新增文件也由 Python 检查,避免 git diff --check 不覆盖 untracked 的盲区。只保存源码定位、文档检查结果与公开官方资料链接,不保存业务正文、秘密或环境值。
|
||||
|
||||
### 文档审阅记录
|
||||
|
||||
使用 ce-plan 与 ce-doc-review 的非交互文档审阅流程,三位当前会话子审阅者各承担两种视角;同一审阅者内部的两个视角不计为独立印证。六种视角为 coherence、feasibility、security、adversarial、product、scope。未运行外部 CLI 跨模型复核,不以此作为验证证据。
|
||||
|
||||
| 原始 finding 与证据 | 主审判定及实际修正 | 复核 |
|
||||
|---|---|---|
|
||||
| feasibility,P2/75:U2 仅依赖 U1,却要求持久结果查询;持久收据归 U3 | 接受。U2 区分开发与最终验收依赖;U3 明确单次命令收据及授权查询,U5 管多步流程 | 原审阅者局部只读确认已解决 |
|
||||
| security,P2/75:不可信插件只有进程/资源隔离,不能阻止同 UID 访问宿主秘密 | 接受。MCS-01 后补最小权限、文件/网络限制和不继承秘密;U5 增访问拒绝负例 | 原审阅者局部只读确认已解决 |
|
||||
| scope,P2/75:所有系统统一要求数据库/队列等验收会强加无用设施 | 接受。规范 §8.1 按能力适用,区分 N/A 与 SKIP;U1/U6 同步 manifest 与门禁 | 原审阅者局部只读确认已解决 |
|
||||
| coherence / adversarial / product | 未返回达到行动门槛的 finding | 无需修改 |
|
||||
|
||||
审阅结果:applied=3,proposed_fixes=0,decisions=0,fyi=0。主审另补规范 §2.2 功能设计卡与前端状态边界,与用户“功能、模块区分”一致,经局部复核未发现矛盾。实施前的仓库/owner/试点/SLO 仍须补齐,属于方案明确的后续立项条件,不伪装为已完成。
|
||||
|
||||
### 产物身份(前轮合入时)
|
||||
|
||||
| 文档 | SHA-256 |
|
||||
|---|---|
|
||||
| audit/2026-09-22-module-decoupling-current-state.md | d73bb9fddc0d88d4848dc711b67fdaac52b9d9383bf7c1938e9ed26f46ca8187 |
|
||||
| system-design/2026-09-22-generic-module-contract-standard.md | a47e4e1a59a31c350ffae936602116f3e944e011d005e7e6237ac11d06b74c19 |
|
||||
| remediation/2026-09-22-modular-platform-adoption-plan.md | 5d4f7c7bcd03e8510f07661f4f05a5adaf974145b1667ae1d70a31d02c770609 |
|
||||
|
||||
### 交接
|
||||
|
||||
- 影响:新增三份研究/规范/规划文档与本任务记录;CURRENT 仅本任务认领行,经受控集成进入 dev;不改业务、原生效规范、FEATURE-MATRIX 或 gap-matrix。
|
||||
- 本地保存:研究完成时文档未提交;后续用户授权本地 dev 集成,执行状态与证据见下节。
|
||||
- 部署:not_required;运行制品未检查、未修改。
|
||||
- 远端:not_requested,未 fetch/push;创建时 local tracking 比较 0/6,不能代表实时远端。
|
||||
- 清理:retained-with-reason。保留任务与集成 worktree,待集成完成且 owner 退出后由独立维护者核对,不满足门禁不得删除。
|
||||
- 后续实施必须重新核验 dev 与生效规则;通用平台线和当前项目 CP1–CP6 分开立项,不能把本次“研究完成”理解为实施授权。
|
||||
|
||||
## 2026-09-22 本地 dev 集成续办
|
||||
|
||||
授权来源:用户后续指令“合入 dev”。交付扩展为本地提交、独立候选验证、受控推进 dev;不 push、不部署、不实施方案。基线仍为 d034aa00e5785f51234b484f9dca6bf4fb037660,已重读相同生效规则,无规则差异。
|
||||
|
||||
逻辑 task_id 沿用原值;原机器登记已关闭且工具不支持 reopen,使用执行登记 modular-contract-standard-2026-09-22-integration-prep,范围仍为原五份文档。为接续原任务 CURRENT 行,登记 docs:admin 但仅对该行使用 CAS,不改布局/其他任务/集成槽位。原 CURRENT 内容已保存在本机临时备份,核实相对 HEAD 只有本任务一行后重新发布取得续办收据。
|
||||
|
||||
候选执行登记 integrate-modular-contract-standard-2026-09-22,分支 feature/integrate-modular-contract-standard-2026-09-22,同名 .worktrees 路径,scope 为本任务五文档,能力仅 git:dev。从上述确切 dev 创建 --no-ff 候选;冻结 SHA 由 Git merge 父节点及 agentctl validate/integrate 收据记录。验证为文件白名单、相对链接、ID、内容哈希、CURRENT 单行差异与 git diff --check;普通文档无须 Go/PI 或容器重建。
|
||||
|
||||
集成前障碍:主目录保留三项非本任务未跟踪 promotion-receipts,clean_source 对集成不适用构建证据例外。按 AGENTS 不擅自移动他人未提交文件;先完成可审候选,再处理该障碍,不绕过 hooks 或清洁检查。
|
||||
|
||||
### 集成结果与证据归档
|
||||
|
||||
用户在针对三项未跟踪证据的明确归档请求后回复“继续”,授权按原样归档、校验后继续集成。归档前再次核实 dev 基线、三个对象清单及此前计算的清单摘要,无变化;以同文件系统 rename 保留原文件,归档后逐个核对 11 个文件的大小和 SHA-256,合计 16960 字节。未读取或修改 .env。
|
||||
|
||||
- 本地文档提交:9814a67ee61dd97a31b104135c354f3ac0850bfc。
|
||||
- 首次集成候选/实际 dev 合入:3f89eff70af427cbf3649b6d079a03ebfc2c65e2;父节点为原 dev 基线及上述文档提交。
|
||||
- 候选验证收据:9e10402e-ce43-4a5e-a421-d01fc471b568,8 条本地链接、3 份核心文档哈希、22 条规则、8 个单元、五文件白名单与 CURRENT 单行差异通过。
|
||||
- 原样归档收据:a1aec604-dd4c-4d5a-b84d-abe6fb0e044a。完整清单及原路径映射位于主仓 .locks/evidence-archive/modular-contract-standard-2026-09-22/manifest.json;三个对象和 11 个原始文件均实际保存在同目录,不只记录旧路径。
|
||||
- 受控集成收据:c84f146c-8c05-4f9c-bc5f-b4aafef6b808,status=merged。主目录以 --ff-only 接收已验证的 --no-ff 候选,未绕过门禁。
|
||||
- 本节是首次成功集成后的收口记录,另作纯文档提交,通过同一候选工作区从 3f89eff7 基线构造新 --no-ff 节点并重新验证后集成;最终提交由 Git 历史及机器收据定位,避免自引用 SHA。
|
||||
- 原证据恢复:确有原路径消费者需要且目标路径不存在时,由后续获授权维护者依据 manifest 复制/移回并校验;不得覆盖后续新生成证据。归档不改变这些旧证据的测试结论。
|
||||
- 未 push,未 fetch,未部署/重启。当前读取到的 origin/dev 跟踪引用已与上轮不同,未将其并入本次本地 dev;不声称已与远端同步。
|
||||
- 任务/候选 worktree 保留;本次不执行清理。独立维护者待 owner 退出后核对祖先、忽略文件、进程和唯一产物,再决定清理。
|
||||
|
||||
## 系统专用整改规划续办
|
||||
|
||||
授权:用户“按照规范,制定系统整改和重构方案”。沿用 logical task_id;本轮仅编制本项目实施方案,未授权业务实施、环境写入、push 或新成果 dev 集成。前轮规范文档已合入 dev 的事实保持不变;本记录顶部状态现用于新增方案阶段。
|
||||
|
||||
本轮基线:dev@5c35f32e225a482d5838e6d771778fb754f75506。原任务 worktree 无未提交内容,且其树与 dev 一致,已在登记与 index 租约内快进到该确切 dev。未从其他 feature 开始。origin/dev...dev 本地跟踪比较待下方实际检查记录;未 fetch,不代表远端实时值。
|
||||
|
||||
执行登记:modular-contract-standard-2026-09-22-system-plan。owner=Codex;branch/worktree 沿用原任务。新增允许写范围 .doc/remediation/2026-09-22-agent-system-modular-refactor-plan.md;本轮同时允许修改本任务文、通用采用计划中的当前项目指针及 CURRENT 自己的行。mutex 为上述精确 path;docs:admin 仅用于同一 logical task_id 续办的 CURRENT 行,不改他人记录。
|
||||
|
||||
交付:[系统整改与重构方案](../../remediation/2026-09-22-agent-system-modular-refactor-plan.md),包含规范逐条映射、目标职责/数据边界、分期执行单元、依赖/写者认领、存量迁移与回退、真实验证矩阵。通用平台 U1–U8 继续服务未来独立平台,本项目不把它们照搬成重复框架。
|
||||
|
||||
研究验证:复核源码与已存在测试定义,不运行产品测试或运行探针;产物做结构/链接/事实锚点核对和文档审阅。三个只读子审查深化事件/迁移、后端边界、Agent/前端契约,结果归入父任务,不另写文件。
|
||||
|
||||
### 系统整改方案阶段验收与交接
|
||||
|
||||
本阶段研究/方案完成,业务整改仍未启动。交付主文档为系统整改与重构方案,SHA-256:eb06775651546f8af4c1218400ce3198949bbf2d3d566b4cdf6b698407298ea9。712行,17个工作包、22条MCS映射、12项需求,另含16条路径与5条SQL例外逐项处理及projects漏登记写者。基于dev@5c35f32e源码;不依赖本轮运行数据。
|
||||
|
||||
源码深化新增事实已落在方案E3–E12和相应U单元:shadow的聊天自提交路径、producer字段漂移、taskrun租约及持久受理窗口、Runner未知执行、SSE先推后存、缓存事务逃逸、workspace内存lease与路径误报。均为源码可达条件;未查询现网影响数量,未将风险推断冒充事故复现。
|
||||
|
||||
文档审阅采用ce-doc-review非交互流程,当前会话三位子审阅者覆盖coherence、feasibility、security、adversarial、product、scope、design七视角;同一人多视角不算独立多票。未运行外部CLI跨模型复核。结果如下:
|
||||
|
||||
| 原始发现 | 主审取舍与修正 | 局部复核 |
|
||||
|---|---|---|
|
||||
| coherence / P1:U11c先提交run终态,与U9单一“待远端停止”状态不一致 | 接受。明确业务终态与远端执行状态两维;本地取消与撤销发布权同事务,远端停止继续持久对账;U11c依赖U9 | 已确认一致 |
|
||||
| feasibility / P2:U8要求产物全部拒绝,但相关资源端实现到U9/U12才落地 | 接受。U8独立验收DB fencing,端到端旧产物拒绝由U9/U12联合验收 | 已确认依赖闭合 |
|
||||
| design / P2:unknown/取消中缺状态—操作表且UI适配过晚 | 接受。U9补七行状态/操作契约、有界查询与实际响应解析;最小UI随W2上线,广泛状态重构仍归U15 | 已确认解决 |
|
||||
| security / adversarial / product / scope | 未发现达到行动门槛的剩余问题 | 未扩展实现范围 |
|
||||
|
||||
已应用3项审阅修正;proposed_fixes=0、decisions=0、fyi=0。主审补充U1所有操作的owner/整改或维持原因清单,以及业务cancelled后仍扫描远端取消未完成记录,保证对应承诺有执行落点。
|
||||
|
||||
实际验证:Python检查三份本轮相关文档22条本地链接,全部存在;MCS映射01–22、U1–U17、R1–R12完整唯一;代码围栏、末尾换行、行尾空白、文内路径可移植性检查通过;git diff --check通过。显式代码路径清单核对61项,24项为文中明确规划新增,37项现存;未将新增路径不存在记成实现完成。Mermaid仅人工结构核对,未调用渲染器。
|
||||
|
||||
本轮只改四个路径:新增本系统方案、原任务记录、通用采用计划的系统方案指针、CURRENT自己的行。主目录保持干净、dev仍为5c35f32e;未改业务代码、.env、运行配置、生效规范或FEATURE-MATRIX/gap-matrix。Go/PG/PI/浏览器测试均未执行,本轮不适用业务验收。
|
||||
|
||||
本轮新成果未提交、未合入dev、未push/部署。此前规范已合入dev的记录仍有效。本地origin/dev...dev读取为18/10,未fetch,不代表实时远端。cleanup继续retained-with-reason:新方案是未提交唯一产物,保留原任务worktree;用户审核及必要集成后,owner退出由独立维护者复查。
|
||||
|
||||
建议下一步先审核W0/W1及双维取消契约;获得实施授权后按方案单元登记,先隔离特征测试与正确性修复,再推进结构重构。不得把用户“继续编制方案”解释为已批准所有代码、数据修复或环境操作。
|
||||
|
||||
## 2026-09-23 系统整改方案文档入库
|
||||
|
||||
授权来源:用户“合并入 dev,不用你实施”。仅提交系统方案、通用采用计划的关联指针及本任务记录;明确不执行U1–U17、不部署、不推送远端。review_state=approved表示批准文档入库,不表示已授权实施或改变规范生效状态。
|
||||
|
||||
基线dev=5c35f32e225a482d5838e6d771778fb754f75506;任务分支/worktree沿用原现场,源HEAD等于dev,原三文档改动完整保留。已重读AGENTS/PROJECT/CURRENT、worktree流程及文档验证契约,生效规则未变化。CURRENT本任务行已有done,本轮不改它。
|
||||
|
||||
本次机器登记:modular-contract-standard-2026-09-22-system-merge-20260923(原任务工作区,scope限定上述三文档);集成登记integrate-system-refactor-plan-20260923(既有集成worktree,HEAD为确切dev基线,scope相同,仅git:dev能力)。逻辑task_id沿用不变。候选采用--no-ff,验证精确HEAD后由agentctl integrate推进本地dev。
|
||||
|
||||
验证范围为三文档白名单、相对链接、U1–U17/MCS01–22/R1–R12、方案原SHA-256、内容不含机器绝对路径及git diff --check。方案正文冻结为eb06775651546f8af4c1218400ce3198949bbf2d3d566b4cdf6b698407298ea9;不重新跑业务测试或修改方案。
|
||||
|
||||
主目录初始只有.codegraph/.gitignore未跟踪,其生成索引codegraph.db已被目录内规则忽略。本轮不擅自移动、删除或将该无关文件混入文档提交;受控集成的清洁条件单独核对。cleanup保留工作区供独立维护者在owner退出后核验。
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: "W1-U2:治理策略外部化为 agent-governance.json"
|
||||
task_id: agent-governance-config-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: single
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 1cb8c6f4b3379ef1136972ab36c5e120829d11f8"
|
||||
branch: feature/agent-governance-config-2026-09-23
|
||||
worktree: .worktrees/agent-governance-config-2026-09-23
|
||||
base_dev_sha: "1cb8c6f4b3379ef1136972ab36c5e120829d11f8"
|
||||
head_sha: "33c7b9a26073944a49fda5b2b6d4ad6001f34532"
|
||||
write_scope: ["scripts", "configs", ".doc"]
|
||||
allowed_environments: []
|
||||
mutex: agent-governance-config
|
||||
review_state: approved
|
||||
integration_state: merged
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入 local_dev 且无进程占用后复查"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# W1-U2:治理策略外部化
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:`configs/agent-governance.json`(stdlib JSON)外部化 SHARED_DOCS / JOB_KINDS / doc_rules 等;`load_policy` fail-closed。
|
||||
- 授权:W1 波次 U2;不 push。
|
||||
- 交付终点:合入 local_dev;负例三类拒绝码可测。
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] worktree + register + CURRENT 认领
|
||||
2. [ ] 新建 `configs/agent-governance.json`
|
||||
3. [ ] `load_policy` + 写路径前置校验;只读不创建
|
||||
4. [ ] 测试 fixture 写入策略文件
|
||||
5. [ ] 负例测试 + unittest 全绿 + integrate
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [实施承接计划](../../remediation/2026-09-23-coordination-db-daemon-implementation-undertaking-plan.md)
|
||||
- 前序 U1r tip:`1cb8c6f4`
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
title: "W1-U1r:agentctl automation 归一"
|
||||
task_id: agentctl-automation-converge-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: single
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 21c1278c04566f90230c6e354121041f2c020214"
|
||||
branch: fix/agentctl-automation-converge-2026-09-23
|
||||
worktree: .worktrees/agentctl-automation-converge-2026-09-23
|
||||
base_dev_sha: "21c1278c04566f90230c6e354121041f2c020214"
|
||||
head_sha: "dd75f42c985a3c4245ccedbf5107a4468ef3920f"
|
||||
write_scope: ["scripts", ".doc"]
|
||||
allowed_environments: []
|
||||
mutex: agentctl-automation-converge
|
||||
review_state: approved
|
||||
integration_state: merged
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入 local_dev 且无进程占用后复查"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# W1-U1r:agentctl automation 归一
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:删除分叉 `scripts/agentctl_automation.py`,移植部署阶段转移校验与 cleanup Markdown 投影到 `agentctl_w4.py`。
|
||||
- 授权:W1 波次实施计划 U1r;write_scope=`scripts`(+ short-term/CURRENT);不 push。
|
||||
- 交付终点:代码合入 local_dev;五态可审。
|
||||
|
||||
## 移植与丢弃
|
||||
|
||||
### 已移植
|
||||
|
||||
- `deployment_set_phase` 合法转移边(`prepared→deploying→accepting→passed`;非法 `passed→deploying` 拒绝)。
|
||||
- `project_cleanup_markdown` → `agentctl_w4.py`(供 W2-U5)。
|
||||
|
||||
### 已丢弃(检索证据)
|
||||
|
||||
| 符号 | 取代方 / 原因 |
|
||||
|---|---|
|
||||
| `assess_cleanup_entry` | `agentctl.py` `cleanup_status` 8 gate |
|
||||
| `process_platform_ready` | W1-B macOS 进程层三值 `alive_status` |
|
||||
| `build_command_for_job` | 无调用方的 `*-proxy` 占位 |
|
||||
| automation `jobs` schema | W4 `jobs` 已 landed |
|
||||
| `operations` / `doc_registry` 表 | 活库 `.tables` 无此二者 |
|
||||
|
||||
`DEFAULT_DOC_REGISTRY` per-doc 规则不在本包移植,交 U2 策略 JSON。
|
||||
|
||||
## 步骤与验收
|
||||
|
||||
1. [x] worktree + register + CURRENT 认领
|
||||
2. [x] 移植 phase 校验与 `project_cleanup_markdown`
|
||||
3. [x] 删除 `agentctl_automation.py`;`rg agentctl_automation` 为空;清理 0 字节 `.locks/state.db`
|
||||
4. [x] 补 `test_deploy_phase_transition_rejects_illegal_jump`;`unittest discover` 104 ran / 2 skipped / OK
|
||||
5. [ ] 原子提交 + 候选 validate/integrate
|
||||
|
||||
## 验证与证据
|
||||
|
||||
| 范围 | 命令 | 结果 |
|
||||
|---|---|---|
|
||||
| 全套治理脚本 | `python3 -B -m unittest discover -s scripts/tests -p 'test_*.py' -v` | Ran 104 / OK (skipped=2) |
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [实施承接计划](../../remediation/2026-09-23-coordination-db-daemon-implementation-undertaking-plan.md)
|
||||
- [W1 实施计划](file:///Users/weichen/.cursor/plans/w1_三包实施_43ec5550.plan.md)
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: "W1-U3:显式长期认领 claim"
|
||||
task_id: agentctl-claim-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: single
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 7cd0f505b225b0196eaab3fe0afe3e196c7ca5f7"
|
||||
branch: feature/agentctl-claim-2026-09-23
|
||||
worktree: .worktrees/agentctl-claim-2026-09-23
|
||||
base_dev_sha: "7cd0f505b225b0196eaab3fe0afe3e196c7ca5f7"
|
||||
head_sha: "6699c4a8aa5556494f979dfb33e7131194072ef5"
|
||||
write_scope: ["scripts", ".doc"]
|
||||
allowed_environments: []
|
||||
mutex: agentctl-claim
|
||||
review_state: approved
|
||||
integration_state: merged
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入 local_dev 且无进程占用后复查"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# W1-U3:显式长期认领 claim
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:`claim:` 命名空间 + claims/claim_queue 表 + acquire/release/status/list/cancel CLI;原子认领事务。
|
||||
- 授权:W1 波次 U3;依赖 U2 已合入;不 push。
|
||||
|
||||
## 验收
|
||||
|
||||
1. 20 并发恰好 1 held
|
||||
2. 不相关资源并行成功
|
||||
3. 父子重叠拒绝;兄弟成功
|
||||
4. 冻结拒绝(含持有者)
|
||||
5. request_id 幂等 / 换载荷拒绝
|
||||
6. task close 拒绝 held claim
|
||||
7. unittest discover 全绿
|
||||
|
||||
## 相关链接
|
||||
|
||||
- 前序 U2 tip:`7cd0f505`
|
||||
- [实施承接计划](../../remediation/2026-09-23-coordination-db-daemon-implementation-undertaking-plan.md)
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: "agentctl Cursor 能力层集成"
|
||||
task_id: agentctl-cursor-integration-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: single
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 357e4ddb0fe62e12cf6d1321382376257b0fe674"
|
||||
branch: feature/agentctl-cursor-integration-2026-09-23
|
||||
worktree: .worktrees/agentctl-cursor-integration-2026-09-23
|
||||
base_dev_sha: "357e4ddb0fe62e12cf6d1321382376257b0fe674"
|
||||
write_scope: [".cursor", "scripts", ".doc", ".gitignore"]
|
||||
allowed_environments: []
|
||||
mutex: agentctl-cursor-integration
|
||||
review_state: accepted
|
||||
integration_state: merged_local_dev
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入 local_dev 且无进程占用后复查"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# agentctl Cursor 能力层集成
|
||||
|
||||
## 落地
|
||||
|
||||
| 项 | 值 |
|
||||
|---|---|
|
||||
| feature | `07094d0d` |
|
||||
| merge(daemon) | `9e4ddfcd`(第一父 `357e4ddb`) |
|
||||
| 测试 | MCP 9 tools + hooks ask/allow + skills frontmatter;unittest 134/3 skipped |
|
||||
| 证据 | [evidence/](../evidence/2026-09-23-agentctl-cursor-integration/) |
|
||||
|
||||
启用:Reload Window / 重载 MCP;跟 skill `agentctl-session-start`。规范文:[2026-09-23-agentctl-cursor-integration.md](../2026-09-23-agentctl-cursor-integration.md)。
|
||||
|
||||
## 收口
|
||||
|
||||
| 字段 | 值 |
|
||||
|---|---|
|
||||
| review_state | accepted |
|
||||
| integration_state | merged_local_dev |
|
||||
| deployment | not_required(Cursor 能力层无运行制品;daemon 此前已 loaded) |
|
||||
| cleanup | pending |
|
||||
| remote_sync | not_requested |
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
title: "W2-U4:常驻协调入口 daemon"
|
||||
task_id: agentctl-daemon-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: single
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 981021b2b6e9081e9523f992634d273ef4631598"
|
||||
branch: feature/agentctl-daemon-2026-09-23
|
||||
worktree: .worktrees/agentctl-daemon-2026-09-23
|
||||
base_dev_sha: "981021b2b6e9081e9523f992634d273ef4631598"
|
||||
write_scope: ["scripts", "configs", ".doc"]
|
||||
allowed_environments: []
|
||||
mutex: agentctl-daemon
|
||||
review_state: accepted
|
||||
integration_state: merged_local_dev
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入 local_dev 且无进程占用后复查"
|
||||
remote_sync: not_requested
|
||||
merged_dev_sha: "725e2e4beb9e77718f812089061b1b4575344bff"
|
||||
---
|
||||
|
||||
# W2-U4:常驻协调入口 daemon
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:前台 `agentctl daemon run|status`,`manager.lock` 单实例,复用 `queue_schedule`;模板入库不装载。
|
||||
- 授权:W2-U4 实施;不 push;不装载 launchd/systemd。
|
||||
- 禁止:fork/setsid daemonize;把模板放入 `deploy/`;扩大权限。
|
||||
|
||||
## 范围
|
||||
|
||||
- `manager.lock` 独占 flock(不进 `physical_names`)
|
||||
- `daemon run --interval --max-cycles` 前台循环 + SIGTERM/SIGINT 优雅停
|
||||
- `daemon status` 只读
|
||||
- `scripts/daemon/` 下 systemd/launchd 模板 + README(明示未装载)
|
||||
|
||||
## 验收
|
||||
|
||||
1. 双实例并发 → 恰一存活,另一 `LOCK_BUSY` 带 `holder_pid`
|
||||
2. daemon 停止后 pending 候选不被自动合入
|
||||
3. 前台 CLI 语义不变
|
||||
4. daemon 无 register 越权
|
||||
5. unittest discover 全绿
|
||||
|
||||
## 收口
|
||||
|
||||
| 字段 | 值 |
|
||||
|---|---|
|
||||
| review_state | accepted |
|
||||
| integration_state | merged_local_dev (`725e2e4b`) |
|
||||
| deployment | not_required |
|
||||
| cleanup | pending(cleanup_owner=独立维护者;feature+integrate worktree 复查后 remove,禁止 --force) |
|
||||
| remote_sync | not_requested |
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
title: "W2-U7:quarantine 与安全交接"
|
||||
task_id: agentctl-handoff-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: single
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ fda5ef2931f664bcc763810ef9544c00064d3040"
|
||||
branch: feature/agentctl-handoff-2026-09-23
|
||||
worktree: .worktrees/agentctl-handoff-2026-09-23
|
||||
base_dev_sha: "fda5ef2931f664bcc763810ef9544c00064d3040"
|
||||
write_scope: ["scripts", "configs", ".doc"]
|
||||
allowed_environments: []
|
||||
mutex: agentctl-handoff
|
||||
review_state: accepted
|
||||
integration_state: merged_local_dev
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入 local_dev 且无进程占用后复查"
|
||||
remote_sync: not_requested
|
||||
merged_dev_sha: "981021b2b6e9081e9523f992634d273ef4631598"
|
||||
---
|
||||
|
||||
# W2-U7:quarantine 与安全交接
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:`scripts/agentctl.py` 增加 fence + heartbeat TTL + suspect→quarantine fail-closed handoff;可选 TTL 写入 `configs/agent-governance.json`;短文 + 验收测试;unittest 全绿后提交。
|
||||
- 授权:W2-U7 实施;不 push;不合入 dev。
|
||||
- 禁止:编辑计划文件;自动 released/completed;`--force` 释放。
|
||||
|
||||
## 范围
|
||||
|
||||
- `ensure_schema` 加算 `fence` / `suspect_since` / `quarantined_at` / `quarantine_reason` / `verified_by`
|
||||
- `quarantine sweep|list|release` CLI;TTL 缺省回落 DEFAULT_POLICY
|
||||
- recover / release 后 fence+1;`AGENTCTL_FENCE` 注入与 `inherited` 校验
|
||||
- env:/git:dev recover 须 `verified:` 标记
|
||||
|
||||
## 验收
|
||||
|
||||
1. 杀 supervisor 留子进程:sweep 不释放;release 拒绝
|
||||
2. `read_proc→unreadable`:最多到 suspect
|
||||
3. 心跳/suspect TTL 降级,永不自动 completed
|
||||
4. 陈旧 fence → `STALE_GENERATION`
|
||||
5. git:dev recover 无核验标记 → `EVIDENCE_REQUIRED`
|
||||
6. unittest discover 全绿
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [实施承接计划](../../remediation/2026-09-23-coordination-db-daemon-implementation-undertaking-plan.md) W2-U7
|
||||
- 基线 tip:`fda5ef29`
|
||||
|
||||
## 收口
|
||||
|
||||
| 字段 | 值 |
|
||||
|---|---|
|
||||
| review_state | accepted |
|
||||
| integration_state | merged_local_dev (`981021b2`) |
|
||||
| deployment | not_required |
|
||||
| cleanup | pending(cleanup_owner=独立维护者;feature+integrate worktree 复查后 remove,禁止 --force) |
|
||||
| remote_sync | not_requested |
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
title: "agentctl 管理面启用(launchd go-live)"
|
||||
task_id: agentctl-mgmt-go-live-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: ops
|
||||
task_tier: single
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ eebe83e0c5e61ad81beeb59bc9138954555afd52"
|
||||
branch: feature/agentctl-mgmt-go-live-2026-09-23
|
||||
worktree: .worktrees/agentctl-mgmt-go-live-2026-09-23
|
||||
base_dev_sha: "eebe83e0c5e61ad81beeb59bc9138954555afd52"
|
||||
write_scope: [".doc"]
|
||||
allowed_environments: []
|
||||
mutex: agentctl-mgmt-go-live
|
||||
review_state: accepted
|
||||
integration_state: merged_local_dev
|
||||
deployment: loaded_local_launchd
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入后复查;卸载用 evidence/rollback.txt"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# agentctl 管理面启用(launchd go-live)
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 目标:将 L1 协调库从按会话 CLI 提升为常驻管理面(macOS launchd)。
|
||||
- 授权:用户批准「agentctl 管理面:启用(上线)计划」并要求实现全步骤(含装载)。
|
||||
- 禁止:push;晋升 test/main;装载外的产品环境写;L2/ADR。
|
||||
|
||||
## 验收证据
|
||||
|
||||
| 步骤 | 结果 | 证据 |
|
||||
|---|---|---|
|
||||
| unittest discover | 134 ran / 3 skipped OK @ `eebe83e0` | [unittest-summary](../evidence/2026-09-23-agentctl-mgmt-go-live/unittest-summary.txt) |
|
||||
| daemon 有界试运行 | `--max-cycles 3` 正常启停,锁释放 | [daemon-bounded-run](../evidence/2026-09-23-agentctl-mgmt-go-live/daemon-bounded-run.jsonl) |
|
||||
| launchd bootstrap | `gui/501/com.agentctl.coordinator` state=running | [launchctl-print-summary](../evidence/2026-09-23-agentctl-mgmt-go-live/launchctl-print-summary.txt) |
|
||||
| stderr | 空 | [err-log-head](../evidence/2026-09-23-agentctl-mgmt-go-live/err-log-head.txt) |
|
||||
| 端到端入队 | queue `f1b4fdca…` → completed;daemon `--ff-only` → `5e11db50` | [e2e-queue-result](../evidence/2026-09-23-agentctl-mgmt-go-live/e2e-queue-result.txt) |
|
||||
| 回滚 | `launchctl bootout` + 删 plist | [rollback](../evidence/2026-09-23-agentctl-mgmt-go-live/rollback.txt) |
|
||||
|
||||
装载命令:`launchctl bootstrap gui/501 ~/Library/LaunchAgents/com.agentctl.coordinator.plist`(UTC `2026-09-23T10:05:09Z`)。
|
||||
|
||||
## 落地 tip
|
||||
|
||||
| 项 | 值 |
|
||||
|---|---|
|
||||
| feature | `92d30a49` |
|
||||
| merge(daemon 自动) | `5e11db50`(第一父 `eebe83e0`) |
|
||||
| queue item | `f1b4fdca-0209-466d-9aba-fcd8f90bb3be` |
|
||||
| launchd pid | 63557(装载时) |
|
||||
|
||||
## 收口
|
||||
|
||||
| 字段 | 值 |
|
||||
|---|---|
|
||||
| review_state | accepted |
|
||||
| integration_state | merged_local_dev |
|
||||
| deployment | loaded_local_launchd |
|
||||
| cleanup | pending |
|
||||
| remote_sync | not_requested |
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: "chat-semantic-d3 收口(拆行 + tip 重验)"
|
||||
task_id: chat-semantic-d3-closeout-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: small
|
||||
branch: feature/chat-semantic-d3-closeout-2026-09-23
|
||||
worktree: .worktrees/chat-semantic-d3-closeout-2026-09-23
|
||||
write_scope: [".doc/**", "internal/app/**", "internal/app/chatflow/**"]
|
||||
mutex: chat
|
||||
base_dev_sha: "9d8332ad0892adf147cb31da358ed01ad3e503fa"
|
||||
policy_revision: "AGENTS+worktree-ops @ 9d8332ad"
|
||||
remote_sync: not_requested
|
||||
review_state: accepted
|
||||
integration_state: merged_local_dev
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
---
|
||||
|
||||
# chat-semantic-d3 收口
|
||||
|
||||
## 目标
|
||||
|
||||
审查原 PU6 方案:REPLACE 被 Wave5 X-2 密封导致行无法 done。收窄 `chat-semantic-d3` 为 shadow 能力并升 done;REPLACE 迁出为 `chat-semantic-replace` deferred;当前 tip 重验 + 修复 reasoning 真 PI 回归。
|
||||
|
||||
## 范围
|
||||
|
||||
- 文档:FEATURE-MATRIX 拆行 + short-term + 测试报告
|
||||
- 代码:`PiSemanticSummarizer` reasoning 叙事回落;chatflow 测试异步 drain
|
||||
- 非目标:不接线 REPLACE;不 push;不改 gap-matrix;不晋升 test/main
|
||||
|
||||
## 边界 lineage(before → after)
|
||||
|
||||
| 行 | before | after | 义务去向 |
|
||||
|---|---|---|---|
|
||||
| chat-semantic-d3 | partial;声明含 shadow→可选 REPLACE | done;仅 durable shadow + 确定性 served | REPLACE → `chat-semantic-replace` |
|
||||
| chat-semantic-replace | (无) | deferred;关闭=独立授权+fail-closed | Wave5 X-2 |
|
||||
|
||||
## 验证
|
||||
|
||||
见 [测试报告](../../test-reports/2026-09-23-chat-semantic-d3-closeout-test-report.md)。
|
||||
|
||||
## 五态(收口时更新)
|
||||
|
||||
| 字段 | 目标值 |
|
||||
|---|---|
|
||||
| review_state | accepted |
|
||||
| integration_state | merged_local_dev |
|
||||
| deployment | not_required |
|
||||
| cleanup | pending |
|
||||
| remote_sync | not_requested |
|
||||
@@ -0,0 +1,89 @@
|
||||
---
|
||||
title: "Worktree 收口:docs 增量合入与清理"
|
||||
task_id: "closeout-worktrees-2026-09-23"
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: ops
|
||||
task_tier: medium
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ cc91c217e7c0e4732de3923d0fa229fd4bd65798"
|
||||
branch: feature/closeout-worktrees-2026-09-23
|
||||
worktree: .worktrees/closeout-worktrees-2026-09-23
|
||||
base_dev_sha: "cc91c217e7c0e4732de3923d0fa229fd4bd65798"
|
||||
head_sha: "de3bff6d6d40376b1a248393e3f2c3e8b1ddb1d9"
|
||||
write_scope: [".doc"]
|
||||
allowed_environments: []
|
||||
mutex: "git:dev+worktree-cleanup"
|
||||
review_state: done
|
||||
integration_state: merged_to_local_dev
|
||||
deployment: n/a
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者(Cursor extension-host 仍占用若干 cwd)"
|
||||
cleanup_trigger: "占用进程退出后按 agent-worktree remove 复查"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# Worktree 收口:docs 增量合入与清理
|
||||
|
||||
## 用户目标
|
||||
|
||||
检查所有 worktree 分支;推进并完成可合入的 docs 增量;验证通过后合入 `dev` 并清理 worktree。避开并行 `task-bubble-bind` 系列;不 push。
|
||||
|
||||
## 结果摘要
|
||||
|
||||
| 项 | 值 |
|
||||
|---|---|
|
||||
| 合入 tip | `de3bff6d`(随后 local_dev 由并行会话前进到含本 tip 的祖先链) |
|
||||
| 验证 | `EMPTY_NON_DOC=OK`;freedoc `go vet`/`go test -short` PASS;parent1=冻结 D |
|
||||
| agentctl close | 47 个 active→done;1 失败(`integrate-intent-smalltalk` WORKTREE_MISMATCH/detached) |
|
||||
| worktree | 约 78 → 22;本任务成功 remove ≥67;其余 cleanup_pending |
|
||||
| remote_sync | pending(用户未授权 push;local_dev 领先 origin/dev) |
|
||||
|
||||
## 合入内容(相对冻结 D=`63e66c6f` 后重建候选)
|
||||
|
||||
仅 `.doc` 增量(代码树与 D 逐 blob 一致):
|
||||
|
||||
- short-term:closeout 任务文、freeform BIGINT 任务文、docrev 备忘、promote-fix-latest-upload 证据
|
||||
- test-reports:promote-fix-latest-upload 报告 + promotion-receipts `30fa4e88…`
|
||||
|
||||
冲突策略执行记录:
|
||||
|
||||
- CURRENT / FEATURE-MATRIX:取 ours(保留并行会话 local_dev 现状;user-profile CURRENT 行未写入)
|
||||
- freeform 三处 Go 冲突:取 ours(等价功能已在 `3bdd53ae`)
|
||||
|
||||
## 特殊残留处置
|
||||
|
||||
| 项 | 处置 |
|
||||
|---|---|
|
||||
| docrev 锁文件 | 已删 |
|
||||
| `canonical-ui00-13a-pass.json` sha256=`dd83d656…f287` | 报告未引用;已删 |
|
||||
| `sealed-ledger-main-20260922T195858Z.json` sha256=`31ed8a36…44be` | 正式密封账本已在 dev;已删 |
|
||||
| integrate-user-profile-display-current 脏 CURRENT | 与 20290d03 行等价;checkout 丢弃后 worktree 已 remove |
|
||||
|
||||
## cleanup_pending(不强制)
|
||||
|
||||
进程仍占用 cwd(Cursor extension-host 等):
|
||||
|
||||
- `2026-09-23-user-profile-display`、`agentctl-macos-2026-09-22`、`dialogue-current-time-2026-09-23`、`engine-split-2026-09-22`、`fix-latest-upload-summary-2026-09-23`、`g1-exception-clearance-2026-09-22`、`intent-smalltalk-routing-2026-09-23`、`loading-perf-closeout-2026-09-22`、`modular-decouple-residual-2026-09-23`、`pi-runner-response-size-2026-09-23`、`integrate-pi-runner-response-size-2026-09-23`、`promote-fix-latest-upload-test-2026-09-23`
|
||||
|
||||
非 dev 祖先 / 并行会话保留:
|
||||
|
||||
- `promote-dialogue-current-time-test-2026-09-23`(test 祖先,脚本仅认 dev)
|
||||
- `task-bubble-bind` / `integrate-task-bubble-bind` / `promote-task-bubble-bind-test`(用户要求避开)
|
||||
- `coordination-db-daemon*`(并行会话现场)
|
||||
- 本任务 `closeout-worktrees` / `integrate-closeout-worktrees`(收口文档提交后再清)
|
||||
|
||||
## 明确未做
|
||||
|
||||
- 未 push;未晋升 test/main;未强制 `--force`/`-D`;未改 task-bubble 现场。
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] 创建 worktree + 登记任务
|
||||
2. [x] 写本任务文档并提交
|
||||
3. [x] integrate 候选:串行 merge 六分支 + 单次 `--no-ff` 重建(dev 被并行推进后重验)
|
||||
4. [x] validate + integrate → `de3bff6d`
|
||||
5. [x] agentctl task close(跳过 task-bubble / coordination)
|
||||
6. [x] 分批清理;ignored 可再生现场清后重试;进程占用记 pending
|
||||
7. [x] 特殊残留处理 + 本收口更新
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
title: "协调库与 daemon:实施承接计划落地"
|
||||
task_id: coordination-db-daemon-impl-plan-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: research
|
||||
task_tier: multi_stage
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 1f2f3d6a58d153e6a7809943d2f3383b9c620085"
|
||||
branch: feature/coordination-db-daemon-impl-plan-2026-09-23
|
||||
worktree: .worktrees/coordination-db-daemon-impl-plan-2026-09-23
|
||||
base_dev_sha: "1f2f3d6a58d153e6a7809943d2f3383b9c620085"
|
||||
write_scope: [".doc"]
|
||||
allowed_environments: []
|
||||
head_sha: "dad5556181e3e0bf87f4e3c0471dc06635f293d2"
|
||||
mutex: coordination-db-daemon-impl-plan
|
||||
review_state: approved
|
||||
integration_state: merged
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入 local_dev 且无进程占用后复查"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# 协调库与 daemon:实施承接计划落地
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:为协调库/daemon 设计方案制定可直接开工的实施承接计划(工作包预填)。
|
||||
- 授权:docs-only;不实施 U1r–U6 代码;不 push。
|
||||
- 交付终点:承接计划 + 本任务文 + INDEX;合入 local_dev。
|
||||
- 禁止:装载 daemon、改 FEATURE-MATRIX 状态值、跨机实施、晋升 test/main。
|
||||
|
||||
## 范围与非目标
|
||||
|
||||
- 允许写入:`.doc`(remediation / ops/short-term / INDEX / CURRENT 本人行)。
|
||||
- 非目标:七包代码实施(各包另立 short-term 并满足承接计划开工准入)。
|
||||
|
||||
## 步骤与验收
|
||||
|
||||
1. [x] 创建 worktree 并登记 — `base_dev_sha=1f2f3d6a…`
|
||||
2. [x] CURRENT 认领 — `docs apply` request `…-claim-1`
|
||||
3. [x] 写承接计划 — [2026-09-23-coordination-db-daemon-implementation-undertaking-plan.md](../../remediation/2026-09-23-coordination-db-daemon-implementation-undertaking-plan.md)
|
||||
4. [x] 更新 remediation INDEX
|
||||
5. [x] docs-only 验收(链接/锚点抽查/frontmatter)
|
||||
6. [x] 候选 validate + integrate — merge tip `51f82d5d…`(expected_dev `1f2f3d6a…`)
|
||||
|
||||
## 验证与证据
|
||||
|
||||
| 范围 / 被测 SHA | 命令与环境 | 预期 | 实际 / 判定 | 证据 |
|
||||
|---|---|---|---|---|
|
||||
| 承接计划 `dad55561` / 候选 `51f82d5d` | 相对链接 + 锚点行号抽查 | PASS | PASS | 候选 validate |
|
||||
| INDEX / CURRENT | 行存在且回链设计方案 | PASS | PASS | 合入 diff |
|
||||
|
||||
## 收口与交接
|
||||
|
||||
- review_state=approved;integration_state=merged(local_dev `51f82d5d`);deployment=not_required;remote_sync=not_requested;cleanup=pending。
|
||||
- cleanup_owner=独立维护者;复查触发=无进程占用且 tip 为 local_dev 祖先后 remove。
|
||||
- 后续按承接计划 W1-U1r / W1-U2 / W1-U3 另立 short-term 实施(需满足 §5–§6 开工准入)。
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [实施承接计划](../../remediation/2026-09-23-coordination-db-daemon-implementation-undertaking-plan.md)
|
||||
- [设计方案](../../remediation/2026-09-23-coordination-db-daemon-plan.md)
|
||||
- [研究](../research/2026-09-23-coordination-db-daemon-research.md)
|
||||
- 本承接计划合入 tip:`51f82d5d4ff482574d6b3b1f54682c87999433ae`
|
||||
@@ -0,0 +1,130 @@
|
||||
---
|
||||
title: "多主机 Agent 数据库协调机制调研"
|
||||
task_id: coordination-db-daemon-plan-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Codex
|
||||
task_type: research
|
||||
task_tier: multi_stage
|
||||
policy_revision: "agent-governance-2026-09-21-r1 + systemic-issue-analysis-2026-09-23-r1 + issue-learning-2026-09-23-r1 @ a0fd52a6276b1b531df9ba53e329a645cf8527c9"
|
||||
branch: feature/coordination-db-daemon-plan-2026-09-23
|
||||
worktree: .worktrees/coordination-db-daemon-plan-2026-09-23
|
||||
base_dev_sha: a0fd52a6276b1b531df9ba53e329a645cf8527c9
|
||||
write_scope:
|
||||
- .doc/ops/short-term/2026-09-23-coordination-db-daemon-research.md
|
||||
- .doc/remediation/2026-09-23-coordination-db-daemon-plan.md
|
||||
- .doc/audit/ISSUES.md
|
||||
allowed_environments: []
|
||||
mutex: coordination-db-daemon-plan-docs
|
||||
review_state: approved
|
||||
integration_state: merged
|
||||
deployment: not_required
|
||||
cleanup: retained-with-reason
|
||||
cleanup_owner: 独立维护者
|
||||
cleanup_trigger: 用户审核及后续集成结束、owner 退出后复查
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# 多主机 Agent 数据库协调机制调研
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
用户要求深入核查所附 SQLite/分布式数据库报告,评估将任务认领、执行、文档状态放入数据库,制定非容器 daemon 方案;后续明确“多台主机需要共同协调”。授权终点为可审研究与实施方案,不含安装服务、业务编码、迁移现有状态、恢复旧操作、部署、push 或 dev 集成。
|
||||
|
||||
基线主目录干净;本地 dev 如 frontmatter。首次本地引用比较为 ahead 18 / behind 245(相对 origin/dev 的本地缓存;未 fetch,不表示当前远端实况)。检查已有 worktree 与机器登记后,通过现行 agent-worktree/agentctl 创建并登记本任务;不修改别人现场。
|
||||
|
||||
## 范围与相关经验
|
||||
|
||||
研究 scripts/agentctl.py、agent_worktree.py、相关 hooks/tests 和 CURRENT/FEATURE-MATRIX 的权威边界;检索词:认领、锁、并发、CAS、agentctl、governance、CURRENT、FEATURE-MATRIX。ISSUES/lessons 索引无直接同机制历史项;正文 hash 经验与投影保持语义有关,后续复核。研究型子审查共用本记录,均只读。
|
||||
|
||||
本方案优先遵守仓库 .doc taxonomy,成果放 remediation;不采用 ce-plan 默认 docs/plans 路径。CURRENT 是现行协调快照,机器 task register 是本次启动登记;本轮不为调研改写共享快照或模块能力声明。
|
||||
|
||||
## 研究步骤与验收
|
||||
|
||||
1. 核对现行 SQLite/文件锁、认领/执行、文档 CAS 实现及真实只读状态。
|
||||
2. 官方来源核实报告技术结论,按多主机需求比较方案。
|
||||
3. 明确权威数据、事务与执行边界、失联恢复、daemon 运维和迁移。
|
||||
4. 文档审查、链接/一致性检查,交付方案;不执行实现测试。
|
||||
|
||||
## 验证与交接
|
||||
|
||||
研究已完成,用户已授权文档合入 dev;实施尚未授权。方案入口: [实施方案](../../remediation/2026-09-23-coordination-db-daemon-plan.md)。
|
||||
|
||||
## ISSUE-20260923-coordination-authority
|
||||
|
||||
- issue_state: investigating;severity: high;owner: Codex(研究);recurrence_count: 0;登记日 2026-09-23。
|
||||
- 预期:所有 Agent 对认领归属和共享文档状态读取相同权威;冲突尽早可见,不在合并时才暴露。
|
||||
- 实际/触发:用户报告读写 FEATURE-MATRIX/CURRENT 与认领容易出问题。源码确认 docs snapshot/apply 读各自 worktree 的副本,scope 注册不含跨任务长期排他;跨主机还超出现有 L1 声明范围。
|
||||
- 机制证据:scripts/agentctl.py:173–185 主仓唯一 SQLite;219–236 写事务;310–329 数据模型;639–688 当前副本文档 CAS;999–1028 task 注册/关闭;scripts/tests/test_agentctl.py:322–341 测试预期主仓文档保持旧值。
|
||||
- 已证实:上述实现边界;数据库已存在;CURRENT 与机器状态独立。未证实:用户具体哪次冲突的丢写、实际发生频率、SQLite 写吞吐瓶颈;未做复现或故障注入,不称为已修复。
|
||||
- 因果链:分散 worktree 基线 + 本地行 CAS → 各副本可以分别合法更新 → Git 集成再解决分歧;scope 许可 + 短操作锁 ≠ 长期任务归属;单主机身份与 flock ≠ 跨主机协调。
|
||||
- 同类检查:CURRENT 与 MATRIX 都走本地副本 CAS;task register/close 与 Markdown 状态双轨;docs:publish 粒度为全局文件写回;worktree create 与 register 分开;Git/环境外部副作用无法加入数据库事务。
|
||||
- 影响边界:工程协调工具、任务归属、状态投影、未来跨主机接入;未对产品数据库/运行链路作故障结论。
|
||||
- 已有防护为何未覆盖:现行 L1 明确只覆盖本机入口、操作锁和副本 CAS;现有测试并未声明验证跨 worktree 全局记录或跨主机长期 claim。
|
||||
- 推荐处理:[方案](../../remediation/2026-09-23-coordination-db-daemon-plan.md);不以数据库换型单独宣称解决。待实施后用两旧 worktree 同版本更新、两主机认领与旧 writer 存活恢复等验收。
|
||||
- 本次时间线:只读定位现机制 → 用户明确多主机 → PostgreSQL/daemon 主方案与 SQLite API 备选 → 设计与数据一致性复核;未开始修复。
|
||||
- 下一步/owner:用户审核方案后由实施 owner 逐 U1–U7 实施;issue 继续 investigating,研究任务完成不关闭问题。
|
||||
- 经验处理:采纳 LESSON-20260923-content-hash 的原文语义/投影恢复检查;没有修复验收,不新增 validated 经验。未来经故障注入与真实双机验收再提炼跨机协调 lesson。
|
||||
|
||||
## 只读验证记录
|
||||
|
||||
| 检查 | 当前证据 / 限制 |
|
||||
|---|---|
|
||||
| Git | 主目录 dev = a0fd52a6276b1b531df9ba53e329a645cf8527c9;启动时 tracked clean;origin/dev 本地缓存 ahead 18 / behind 245,未联网核验远端 |
|
||||
| agentctl status | version=1;唯一主仓 .locks;1 条 env:dev recovery_required、supervisor_alive=false;仅表示 supervisor 不存活,未核查 child/Docker/环境;未执行 recover |
|
||||
| 源码与测试 | 静态核对 Repo.db/Lease/docs/register/recover/hooks/worktree;未运行脚本测试,不将既有测试名记为 PASS |
|
||||
| 主机基础 | Linux;Python 3.14.7 内嵌 SQLite 3.53.4;systemd 259;pg_config 不在 PATH;未检查其他主机、服务账户权限或数据库服务可用性 |
|
||||
| 官方来源 | SQLite、PG、rqlite 等官方文档/项目 README;链接见方案;性能结论均待实测 |
|
||||
| 保全与敏感数据 | 只记录判断所需代码位置及最小状态;未读取 .env,未保存凭证/业务正文,未修改真实环境 |
|
||||
|
||||
## 专项复核及处置
|
||||
|
||||
对 Deep/跨机状态迁移方案进行了架构与数据一致性两个独立只读专项复核;不是运行验收。原始可判定结论及处置如下,5 项均已纳入现有授权的方案修订:
|
||||
|
||||
| 来源 / 级别 | 原文与具体风险 | 处置及复核依据 |
|
||||
|---|---|---|
|
||||
| 架构 P1 | “已确认提交丢失 0”与异步备份“RPO ≤5 分钟”范围不清 | 限定零丢失为持久盘完整的进程/网络故障;灾难恢复按真实 RPO;两类验收分开,不暗含同步异地复制 |
|
||||
| 架构 P1 | 跨机 Git 对象/远端 PASS 不能满足本机 task/worktree HEAD + candidate receipt | 依据 agentctl.py admit_candidate/integrate,U4 增加本机 integration task/worktree 构造两父候选、精确验证及 expected-dev 再核对 |
|
||||
| 数据 P1 | 旧备份没有备份点之后已成功 operation 的 request_id/tombstone | 恢复屏障遍历 executor journal/目标收据,回填结果或 tombstone;未知不重放、失联主机隔离;加入备份后成功再恢复原 ID 重试测试 |
|
||||
| 数据 P2 | 恢复低位事件序号时旧高位 cursor 会漏更新,旧同号 generation 可能误去重 | 事件 cursor、projection identity、manifest/Git receipt 加 authority_epoch;错误 epoch 强制重建 snapshot |
|
||||
| 数据 P2 | U7 导入矩阵后旧已审/已提交 candidate 迟到集成,会破坏 DB 权威 | 增加 matrix authority_version 与独立 drain barrier;最终集成校验版本,覆盖 approved/committed/待 integrate 三种在途情形 |
|
||||
|
||||
主审另补:迟到 heartbeat 不复活过期/quarantined lease;父子路径共享实际执行域的代次;heartbeat/投影回执不递归产生文档发布;proposals 从 U5 起、feature_records 从 U7 起,避免阶段矛盾。
|
||||
|
||||
完成后确认每项已写入方案对应章节与 U-ID 验收。方案 SHA256:fc0f0959298f5589bf7300026322c24528bc69081c2de8e54cf84737a71b8812。
|
||||
|
||||
ce-plan 要求的正式 ce-doc-review 调用结果:`fixes_applied=0, proposed_fixes_count=0, decisions_count=0, fyi_count=0, skipped_reason=skill_unreachable`。本会话没有可调用的通用技能执行入口,未用 generic subagent 冒充该技能调用;ce-doc-review 未运行。上述为 ce-plan 自身授权的专项研究/复核,不将它描述为正式文档技能 PASS,也没有启动外部模型 CLI。下一次有该入口时可追加正式审查;本次研究证据足以支撑可审方案,首轮交付时用户 review_state 为 pending;后续文档集成授权见下节。
|
||||
|
||||
## 首轮研究交付快照
|
||||
|
||||
- 授权内研究完成:源码/只读状态、官方资料纠错、7 个实施单元、迁移/回退/验收与非容器运维设计均已落盘。
|
||||
- 文档检查:两主文档全部本地相对链接目标存在;R=10、KTD=7、U=7 无重复;六个契约章节存在;git diff --check 通过。未运行实现测试、压力测试、双主机或灾难恢复,不宣称系统已具备新能力。
|
||||
- 本地文件:2 个新增研究/方案文件、ISSUES 新增 1 条;尚未 commit,未合入 dev,未部署,未 push。主目录 tracked clean 且 dev 仍为基线 a0fd52a6276b1b531df9ba53e329a645cf8527c9。
|
||||
- 现行 CURRENT/FEATURE-MATRIX 未改动:没有模块声明变化;本任务通过 machine task register 登记并收口。问题 remains investigating,不伪关。
|
||||
- review_state=pending(用户方案审核);integration_state=not_required(本轮交付终点为可审工作区文档);deployment=not_required;remote_sync=not_requested。
|
||||
- cleanup=retained-with-reason:工作区含待审未提交研究成果,必须保留;独立维护者在用户审核、后续提交/集成与 owner 退出后复查,不自动删除。
|
||||
- 后续建议:审核主方案与首期可停机边界;获实施授权后从 U1–U2 隔离验证起步,跨机真实接入/安装前补齐主机清单、目标权限和备份故障域。采用本方案时同步修改 AGENTS/PROJECT/runbook/验证契约与矩阵权威说明,不能只新增 daemon。
|
||||
|
||||
## 文档集成授权与执行
|
||||
|
||||
用户随后明确要求:“合入dev,然后通过对话再把这个说明返回给我”。据此允许将本任务方案、研究记录与问题台账提交并受控合入本地 dev;不包含业务实施、服务安装、旧操作恢复、环境变更或远端 push。
|
||||
|
||||
沿用 task_id=coordination-db-daemon-plan-2026-09-23;原机器登记已经关闭,现行工具不支持重新打开,故仅为执行登记新增 coordination-db-daemon-plan-2026-09-23-integration-prep,原主任务身份不变。owner=Codex;写范围仍为 frontmatter 的三份文件;mutex=coordination-db-daemon-plan-docs;环境权限为空。
|
||||
|
||||
集成前重读 AGENTS/PROJECT/CURRENT、worktree 规范与验证契约;当前 dev 完整 SHA 与原基线相同,相关 policy 无差异。复核 ISSUES/lessons 无新增同机制条目;继续采用既有文本语义/投影一致性检查。主目录干净;远端仅本地缓存 ahead 18 / behind 245,未 fetch。
|
||||
|
||||
review_state=approved 指用户批准文档进入 dev,不代表授权执行 U1–U7。当前 integration_state=pending;拟提交三份文档,在独立 integration worktree 以原 dev 为第一父节点构建 --no-ff 候选,按验证契约做纯文档检查后,经 agentctl integrate 锁内 --ff-only 推进 dev。实际 SHA、验证与集成收据于完成后补记。
|
||||
|
||||
验证范围:变更清单仅上述三份文档;相对链接及锚点、问题 ID/状态一致、R/KTD/U 唯一、计划六契约、方案 hash 和任务记录一致、Markdown 表格连续性、git diff --check。此为文档集成,不运行产品/脚本实现测试、不重建容器。
|
||||
|
||||
## 文档集成结果与最终交接
|
||||
|
||||
- 用户授权范围内文档已于本轮合入本地 dev。源提交 `a542c21a420fbc8bb9f413abd3d4bc95ac655ccc`;首个受控合并提交 `6a0d721f362ed327f6cbd61a670c65c429961411`;第一父提交为 `a0fd52a6276b1b531df9ba53e329a645cf8527c9`,第二父提交为上述源提交。
|
||||
- 集成执行登记:`integrate-coordination-db-daemon-plan-2026-09-23`;branch=`feature/integrate-coordination-db-daemon-plan-2026-09-23`;worktree=`.worktrees/integrate-coordination-db-daemon-plan-2026-09-23`;owner=Codex;scope=本任务三份文档;capability=`git:dev`;mutex=dev 集成槽位;基线仍为原 dev。已重读相关生效规范,无差异。
|
||||
- 实際验证:通过 `agentctl validate` 在干净候选上运行文档校验;输入 base 为上述基线,HEAD 为上述候选。检查三份变更白名单、15 个相对链接、研究问题锚点/台账表格连续性、状态一致、10 个 R / 7 个 KTD / 7 个 U 唯一、六个计划契约、方案 SHA256、`git diff --check`;输出 `result=PASS`,退出码 0。方案正文 hash 未改变。
|
||||
- 验证收据 run_id=`d3c27ee9-d389-46f9-af67-ba7d3b4d7aba`;集成收据 run_id=`404fd3a6-7480-4540-a6bb-e7f0c6ce1ab7`,`status=merged`。收据可通过主仓 `agentctl operation` 查询。
|
||||
- 集成后主目录干净;本地 origin/dev 缓存当时 ahead 20 / behind 245,未 fetch、未 push;不得据缓存断言当前远端包含本次文档。
|
||||
- 本节作为集成证据后补提交,经同一候选流程独立验证后合入;最终 dev SHA 以实际 Git 与本次对话回执为准,避免自引用提交散列。
|
||||
- 最终状态:status=done、review_state=approved(仅文档集成)、integration_state=merged、deployment=not_required、remote_sync=not_requested、cleanup=retained-with-reason。工作区保留供后续实施;owner 退出后由独立维护者按门禁复查,不擅自清理。
|
||||
- 问题仍 investigating;方案 U1–U7 未实施。没有数据库安装/迁移、daemon 启动、运行环境变更或产品验证;文档合入不改变 CURRENT/FEATURE-MATRIX 的现行权威,也不表示跨机能力生效。
|
||||
@@ -0,0 +1,70 @@
|
||||
---
|
||||
title: "协调库与 daemon:方案与研究落地"
|
||||
task_id: coordination-db-daemon-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: research
|
||||
task_tier: multi_stage
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 63e66c6fb35d6b4dd9f3ed92e15acc9933aeb344"
|
||||
branch: feature/coordination-db-daemon-2026-09-23
|
||||
worktree: .worktrees/coordination-db-daemon-2026-09-23
|
||||
base_dev_sha: "63e66c6fb35d6b4dd9f3ed92e15acc9933aeb344"
|
||||
write_scope: [".doc"]
|
||||
allowed_environments: []
|
||||
head_sha: "d7e0a683c9b4af304d5ed8352e5abce3d35c6bef"
|
||||
mutex: coordination-db-daemon
|
||||
review_state: approved
|
||||
integration_state: merged
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入 local_dev 且无进程占用后复查"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# 协调库与 daemon:方案与研究落地
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:统一认领/状态/执行入口;文档状态化;为多主机预留结构;先落地方案文档。
|
||||
- 授权:docs-only 重新落地方案+研究;L1 单宿主机、L2 跨机仅 planned;并行修掉 queue 子解析器缺陷(已合入 `63e66c6f`)。
|
||||
- 交付终点:可审的 remediation + research + 本任务文;合入 local_dev;不 push。
|
||||
- 禁止:实施 daemon/PostgreSQL;改产品代码;操作未授权环境;晋升 test/main。
|
||||
|
||||
## 范围与非目标
|
||||
|
||||
- 允许写入:`.doc`(remediation / ops/research / ops/short-term / remediation INDEX / CURRENT 本人行)。
|
||||
- 非目标:U2–U7 代码实施;L2 ADR 以外的跨机工程;FEATURE-MATRIX 状态值变更。
|
||||
|
||||
## 步骤与验收
|
||||
|
||||
1. [x] 创建 worktree 并登记 — `base_dev_sha=63e66c6f…`
|
||||
2. [x] CURRENT 认领行 — `docs apply` request `coordination-db-daemon-2026-09-23-claim-1`
|
||||
3. [x] 写 research — [2026-09-23-coordination-db-daemon-research.md](../research/2026-09-23-coordination-db-daemon-research.md)
|
||||
4. [x] 写 plan(U1 回填 queue 修复 SHA)— [2026-09-23-coordination-db-daemon-plan.md](../../remediation/2026-09-23-coordination-db-daemon-plan.md)
|
||||
5. [x] 更新 remediation INDEX(含补登 2026-09-21 锁方案)
|
||||
6. [x] docs-only 验收(链接/taxonomy/frontmatter)
|
||||
7. [x] 候选 validate + integrate 合入 local_dev — merge tip `d8ba8dba…`(expected_dev `de3bff6d…`)
|
||||
|
||||
## 验证与证据
|
||||
|
||||
| 范围 / 被测 SHA | 命令与环境 | 预期 | 实际 / 判定 | 证据 / 脱敏说明 |
|
||||
|---|---|---|---|---|
|
||||
| queue 修复 `63e66c6f` | `python3 -B -m unittest discover -s scripts/tests -p 'test_*.py' -v` | 全绿 | 103 ran / 2 skipped / OK | 任务 A 候选 validate |
|
||||
| 本任务文档 `d7e0a683` / 候选 `d8ba8dba` | 相对链接 + taxonomy + INDEX | PASS | PASS | 候选 validate 脚本 |
|
||||
|
||||
## 收口与交接
|
||||
|
||||
- review_state=approved;integration_state=merged(local_dev `d8ba8dba`);deployment=not_required;remote_sync=not_requested;cleanup=pending。
|
||||
- cleanup_owner=独立维护者;复查触发=无进程占用且 tip 为 local_dev 祖先后 remove。
|
||||
- 后续实施按方案 U1 剩余项 / U2–U7 另立 short-term;L2 需二次授权与 ADR。
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [方案](../../remediation/2026-09-23-coordination-db-daemon-plan.md)
|
||||
- [研究](../research/2026-09-23-coordination-db-daemon-research.md)
|
||||
- [既有锁方案](../../remediation/2026-09-21-agent-lock-coordination-plan.md)
|
||||
- queue 修复合入 tip:`63e66c6fb35d6b4dd9f3ed92e15acc9933aeb344`
|
||||
- 本方案合入 tip:`d8ba8dba3c068ee948a84c742918710924b08e74`
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
title: "W2-U5:CURRENT 状态输出化(投影硬化)"
|
||||
task_id: current-projection-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: single
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 725e2e4beb9e77718f812089061b1b4575344bff"
|
||||
branch: feature/current-projection-2026-09-23
|
||||
worktree: .worktrees/current-projection-2026-09-23
|
||||
base_dev_sha: "725e2e4beb9e77718f812089061b1b4575344bff"
|
||||
write_scope: ["scripts", "configs", ".doc"]
|
||||
allowed_environments: []
|
||||
mutex: current-projection
|
||||
review_state: accepted
|
||||
integration_state: merged_local_dev
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入 local_dev 且无进程占用后复查"
|
||||
remote_sync: not_requested
|
||||
merged_dev_sha: "c780a030b2084d36a45c4f44ce5fe982c3897386"
|
||||
---
|
||||
|
||||
# W2-U5:CURRENT 状态输出化(投影硬化)
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:硬化 `docs project` / CURRENT 投影:策略接线、渲染归一、幂等 request_id、五态词汇、人工区块机器禁写、投影账本只读、清理表头与文档矛盾修正。
|
||||
- 授权:W2-U5 实施;不 push;不集成(由父代理合入);不改 FEATURE-MATRIX 状态值;不改 plan 文件。
|
||||
- 禁止:扩大业务写环境;把 Markdown idle 当原子锁。
|
||||
|
||||
## 范围
|
||||
|
||||
- `scripts/agentctl.py`:`own_row_only` / `slot_protected` 一致性、`docs_project`、`docs projections`、状态词汇
|
||||
- `scripts/agentctl_w4.py`:`build_projection_row` 消费、`apply_projection_locally` cells[:2]、cleanup render
|
||||
- `configs/agent-governance.json`:扩展 `protected_sections`
|
||||
- `.doc/ops/CURRENT.md` / 操作规范矛盾修正
|
||||
- 真实并发与负例 unittest
|
||||
|
||||
## 验收
|
||||
|
||||
1. 双任务并行 `docs project --apply` 两行均在
|
||||
2. 同行竞态后到者 `BASE_CHANGED`,无部分写
|
||||
3. `@document`+`docs:admin` 改集成槽位仍 `PATH_OUT_OF_SCOPE`
|
||||
4. 人工区块(焦点/清理接管/受控约束/活跃入口)机器写拒绝
|
||||
5. `docs project` preview→apply→receipts 闭环;`unittest discover` 全绿
|
||||
|
||||
## 收口
|
||||
|
||||
| 字段 | 值 |
|
||||
|---|---|
|
||||
| review_state | accepted |
|
||||
| integration_state | merged_local_dev (`c780a030`) |
|
||||
| deployment | not_required |
|
||||
| cleanup | pending(cleanup_owner=独立维护者;feature+integrate worktree 复查后 remove,禁止 --force) |
|
||||
| remote_sync | not_requested |
|
||||
@@ -0,0 +1,39 @@
|
||||
# 任务:dialogue realtime search 强制检索(2026-09-23)
|
||||
|
||||
| 字段 | 值 |
|
||||
|---|---|
|
||||
| task_id | dialogue-realtime-search-2026-09-23 / dialogue-realtime-search-r2-2026-09-23 |
|
||||
| type | fix + deploy |
|
||||
| status | done |
|
||||
| owner | Cursor |
|
||||
| branch | `fix/dialogue-realtime-search-2026-09-23` |
|
||||
| base_dev_sha | `1cb8c6f4` |
|
||||
| fix_sha | `a5ea8197` |
|
||||
| integrate_sha | `8749f507` |
|
||||
| test_sha | `c6f0561b` |
|
||||
| policy_revision | AGENTS + worktree-workflow 2026-09-21 |
|
||||
| write_paths | `internal/coordinator` `internal/agent` `internal/app` `internal/intent` `.doc/test-reports` |
|
||||
| envs | local test + remote GMKtec test(用户授权 push + 远程部署) |
|
||||
| delivery | 远程 `:8081` 真实天气链路 PASS |
|
||||
| prohibited | 不 push main;不改远程 dev 独有提交;不硬重置远程 DB |
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 天气幻觉(12 月 / -6°C)仍出现在用户 `:8081` 测试中。
|
||||
- 用户确认测的是 8081,并授权:同步修复到实际测试环境 + 实施强制实时检索加固。
|
||||
|
||||
## 实现摘要
|
||||
|
||||
1. `IsRealtimeInformationQuery` + `RealtimeSearcher`;app 注入 `PiRunnerSearcher`(`/v1/search`)。
|
||||
2. `generateDialogueReply` 命中后先检索,写入 `RealtimeSnippet` / `RealtimeUnavailable`。
|
||||
3. `ComposeDialoguePrompt` 渲染【实时检索结果】或拒答硬约束。
|
||||
4. 集成 → 晋升 test → push origin → 远程对齐 `origin/test` → rebuild → 验收。
|
||||
|
||||
## 验证
|
||||
|
||||
见 [测试报告](../test-reports/2026-09-23-dialogue-realtime-search-test-report.md)。
|
||||
|
||||
## 交接 / cleanup
|
||||
|
||||
- worktrees:`dialogue-realtime-search-*` / `integrate-dialogue-realtime-search-*` / `promote-dialogue-realtime-search-test-*` → cleanup=pending,由独立维护者复查后 `worktree remove`(禁止 `--force`)。
|
||||
- 远程曾用空 `hooksPath` 绕过损坏的 agentctl hook(`agentctl.py` 在旧 tip 上缺失);对齐后代码已含 agentctl,后续可在远程 main/dev 工作树重装 hooks。
|
||||
@@ -0,0 +1,35 @@
|
||||
# integrate-fav-final-2026-09-23
|
||||
|
||||
| field | value |
|
||||
|---|---|
|
||||
| status | in_progress |
|
||||
| owner | Cursor |
|
||||
| type | integrate |
|
||||
| base_dev_sha | 6032dbaa16ea8389ebe871c7e1e532c016d673e7 |
|
||||
| write_scope | . |
|
||||
| mutex | git:dev |
|
||||
| review_state | pending |
|
||||
| integration_state | pending |
|
||||
| deployment | not_required |
|
||||
| cleanup | pending |
|
||||
| remote_sync | not_requested |
|
||||
|
||||
## Exception registry (FAV protection lift)
|
||||
|
||||
| field | value |
|
||||
|---|---|
|
||||
| owner | Cursor |
|
||||
| reason | 用户 2026-09-23 明确授权「都推进至完成」并选择解除保护 |
|
||||
| overridden_clause | CURRENT「禁止整支 merge FAV」 |
|
||||
| scope | feature/final-artifact-vault 整支合入 local_dev |
|
||||
| exit_condition | 合入后 flag 默认关;MATRIX events-fav 保持 partial;live 不放量 |
|
||||
| restore_action | 合入后 CURRENT 修订为「FAV live 仍不放量;FAV_DEGRADED_READ 默认 false」 |
|
||||
|
||||
## Migration note
|
||||
|
||||
FAV branch ships ; local_dev already has
|
||||
. Renumber FAV migration to .
|
||||
|
||||
## Goose renumber
|
||||
|
||||
resolved: FAV branch 00034 dropped; local_dev already has equivalent 00036_final-artifact-vault.sql
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
title: 问题修复记录与开发经验闭环
|
||||
task_id: issue-learning-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Codex
|
||||
task_type: implementation
|
||||
task_tier: small
|
||||
policy_revision: agent-governance-2026-09-21-r1 + systemic-issue-analysis-2026-09-23-r1 @ 2fdb6e548e3784771f27e6a9e79b9c364f76c566
|
||||
branch: feature/issue-learning-2026-09-23
|
||||
worktree: .worktrees/issue-learning-2026-09-23
|
||||
base_dev_sha: 2fdb6e548e3784771f27e6a9e79b9c364f76c566
|
||||
write_scope: [AGENTS.md, PROJECT.md, .doc/README.md, .doc/audit/ISSUES.md, .doc/audit/2026-09-23-historical-issue-records.md, .doc/ops/lessons, .doc/ops/2026-09-23-issue-learning-workflow.md, .doc/ops/2026-09-21-policy-registry.md, .doc/ops/templates, .doc/ops/short-term/2026-09-23-issue-learning.md, .doc/ops/CURRENT.md]
|
||||
allowed_environments: []
|
||||
mutex: agentctl path leases; git:index for commits
|
||||
review_state: approved
|
||||
integration_state: merged
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: owner 退出后的独立维护者
|
||||
cleanup_trigger: 本地交付及证据保存完成且 owner 退出后
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# 问题修复记录与开发经验闭环
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
2026-09-23 本会话用户要求:“除了任务、新功能的设计和实施有 FEATURE-MATRIX 和 CURRENT 来进行管理”,还希望记录“出现的问题、修复记录、修复思路”,及时总结开发注意事项,使 AI 积累经验、减少重复错误。
|
||||
|
||||
本轮落实仓库文档机制:问题台账、经验库、模板、Agent 开工/收口入口,完成文档检查及本地受控集成。只改登记范围内的工程规范和文档;不改业务代码、产品提示词、.env、运行环境或用户私有记忆,不 push。旧问题仅补录有来源证据,不扩大为历史全量审计。
|
||||
|
||||
## 现状与选择
|
||||
|
||||
当前 AGENTS 已有根因/同类分析要求,audit/INDEX 为历史审计目录,CURRENT 为活跃协调,FEATURE-MATRIX 为能力声明;缺少跨任务问题台账和按机制检索的开发经验入口。为保持文档分工,新建 audit/ISSUES 与 ops/lessons;复用现有任务/审计/报告,不再要求每次故障创建全部文档。
|
||||
|
||||
问题事实、处理进度、经验成熟度分别用 issue_state、任务 status、lesson_state;记录推测与事实、失败尝试、关闭证据、复发和过时处理。该流程为 manual,不声称 AI 已自动学习或工具已强制执行。
|
||||
|
||||
## 检索与来源
|
||||
|
||||
检索词:经验、修复、问题、lesson、experience、postmortem、learning。起始工作区无相关经验索引;读取现行规范和相关历史审计/验收。首次补录 nullable-duty 与 content-hash 两类;本次历史问题事实以仓库报告为准,未用私有记忆替代证据。
|
||||
|
||||
两条经验分别核对当前 engine 的 nullIfZero、canonicalize 委托和黄金样例存在;历史报告分清 API/PG 冒烟与真实 UI/重启证据。已采用检查:证据日期/范围、旧数据与新数据、未运行不报 PASS、规范入口单一来源。
|
||||
|
||||
## 验证计划与结果
|
||||
|
||||
纯文档:差异范围和空白;修改/新增文件相对链接与锚点;问题/经验 ID 唯一和互链;索引状态一致;Agent 入口及模板可达。情景自审包括新问题未定位、只分析、修复未部署、暂缓/重复、历史补录、复发、经验过时和无新增经验。不运行产品测试或共享环境操作。
|
||||
|
||||
- `python3 /tmp/verify-issue-learning.py 2fdb6e548e3784771f27e6a9e79b9c364f76c566` 执行 git diff 空白/范围、pathlib 相对路径、Markdown 锚点、ID/状态及入口断言,输出:`PASS: 17 documents; 137 relative links/anchors; scope/whitespace; 2 unique issue/lesson pairs and matching states; client/template entrypoints`。临时检查器非产品代码;可按本节检查范围复核。
|
||||
- 人工审阅全部新增文档和差异,下面情景均有明确动作;review_state=approved 指本轮 Codex 自审,不是独立审查或未来 Agent 行为实测。
|
||||
- 首次临时检查错误地要求每条 Cursor 规则直接含 AGENTS;实际 test-reports-standard 转发统一验证契约。核对原规则后修正检查器,未修改客户端以迎合错误断言。
|
||||
|
||||
| 情景 | 文档规定的动作 / 自审结果 |
|
||||
|---|---|
|
||||
| 新问题未定位 | open/investigating,记录假设/缺口和下一步,通过 |
|
||||
| 仅分析完成 | 任务 done 可成立,问题仍保留未解决状态,通过 |
|
||||
| 修复未部署 / 验收失败 | verifying 或回 fixing;不能误关闭目标环境问题,通过 |
|
||||
| 暂缓 / 重复 | deferred 有 owner/复查与依据;duplicate 链接唯一主 ID,通过 |
|
||||
| 历史补录 | 保留旧证据日期和范围,当前未复测;未补录全部历史,通过 |
|
||||
| 已关闭问题复发 | 重开原记录,保存旧关闭结果和防护失效原因,通过 |
|
||||
| 经验过时 / 冲突 | superseded/retired,保留替代与理由;现行规范优先,通过 |
|
||||
| 无新增经验 / 未验证 | 分别写理由或 candidate,不凑条目,通过 |
|
||||
|
||||
未运行产品回归、浏览器、PG 或 PI;本轮验证仅为文档与引用源码阅读。证据摘要未复制业务正文、凭证或个人信息。
|
||||
|
||||
## 状态与交接
|
||||
|
||||
创建基线见 frontmatter。创建前主目录 dev 干净,已核对 worktree 列表和机器登记;唯一未恢复 operation 为其他任务 env:dev,与本轮文档写路径无交集,未操作它。本地缓存 origin/dev 比较为 ahead 14 / behind 245;未 fetch,不能表述为实时远端差异。
|
||||
|
||||
本轮使用 writing-for-agents 指导条件读取与单一来源;未启动子 Agent。新增文档采用现有 taxonomy。FEATURE-MATRIX 和 gap-matrix 无相关声明变化,不修改。
|
||||
|
||||
cleanup 保留任务及候选 worktree,供 owner 退出后独立维护者复查;所有本轮唯一证据保存本任务。文档验证与本地受控集成已完成;远端未请求同步,运行制品不受影响。
|
||||
|
||||
|
||||
## 本地集成证据
|
||||
|
||||
- 实现提交:`ccf515c3b1c0d7fe1a46c5de5f58253fd4e946f7`。
|
||||
- 生效提交:`7bbd7a407f857515005c0324d90339017ea5f3e8`,第一父提交为基线 `2fdb6e548e3784771f27e6a9e79b9c364f76c566`。集成前核对 dev 与相关规则均未变化。
|
||||
- 候选 task/worktree:`integrate-issue-learning-2026-09-23` / `.worktrees/integrate-issue-learning-2026-09-23`,范围同本任务,能力 git:dev。
|
||||
- 精确候选验证:`agentctl validate --task integrate-issue-learning-2026-09-23 -- python3 /tmp/verify-issue-learning.py 2fdb6e548e3784771f27e6a9e79b9c364f76c566`;输出与上文一致;收据 `5cf25c46-a78f-473a-87a4-8095522e5f32` 绑定生效提交。
|
||||
- 集成命令:`agentctl integrate --task integrate-issue-learning-2026-09-23 --expected-dev 2fdb6e548e3784771f27e6a9e79b9c364f76c566` 返回 merged;收据 `8999b15f-14be-4081-ab4a-1db267f6ad11`。
|
||||
- 首次候选构造未申请 git:dev 执行租约,CURRENT 的 pre-merge hook 拒绝 `DOCUMENT_RECEIPT_REQUIRED`,随后 validate 因尚未提交而拒绝 DIRTY_TREE;主目录未改变。核对 hook 的 merge_has_dev_lease 和 MERGE_HEAD 后,仅撤销本任务未提交候选,在 git:dev + git:index 租约下重新构造并通过,未绕过 hooks。该操作失误及恢复在此保留;不另提炼经验,因为已有操作规范与机器门禁覆盖,后续构造须落实登记能力对应的执行租约。
|
||||
- 当前规范已 active/manual;本轮状态与收据更新另作收口提交,经相同候选流程验证后合入,Git 父链与候选 task 收据保留最终版本。
|
||||
|
||||
交付满足文档范围验收,done;cleanup=pending,两处工作区保留,待 owner 退出由独立维护者复查。未执行 fetch/push、环境写操作或产品测试。后续按闭环逐次积累;全量历史迁移、自动检索和 CI 校验不在本轮交付范围。
|
||||
@@ -0,0 +1,66 @@
|
||||
---
|
||||
title: "W3-U6:FEATURE-MATRIX 稳定 record_id"
|
||||
task_id: matrix-record-id-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: single
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 713b7cbe6ffc066323f7e8d2d783bf3aaffb5c81"
|
||||
branch: feature/matrix-record-id-2026-09-23
|
||||
worktree: .worktrees/matrix-record-id-2026-09-23
|
||||
base_dev_sha: "713b7cbe6ffc066323f7e8d2d783bf3aaffb5c81"
|
||||
write_scope: ["scripts", "configs", ".doc"]
|
||||
allowed_environments: []
|
||||
mutex: matrix-record-id
|
||||
review_state: accepted
|
||||
integration_state: merged_local_dev
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入 local_dev 且无进程占用后复查"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# W3-U6:FEATURE-MATRIX 稳定 record_id
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:完成度矩阵增加稳定 kebab-case `record_id` 列;`matrix_states` / docs apply 以该 ID 为键;无证据不得升 `done`;任务 close 不自动升 MATRIX。
|
||||
- 授权:W3-U6 实施;不 push;不改各行状态值;不改设计方案全文。
|
||||
- 禁止:扩大业务写环境;触碰 `production_ready` / gap-matrix 发布判定。
|
||||
|
||||
## 范围
|
||||
|
||||
- `.doc/status/FEATURE-MATRIX.md`:完成度表 header + 27 行首列 `record_id`
|
||||
- `scripts/agentctl.py`:`matrix_states`、FEATURE-MATRIX header、replacement 首列校验、投影错误提示
|
||||
- `configs/agent-governance.json`:DOC_RULES header
|
||||
- unittest:无证据升 done、lineage 保留、close 不升 done、重复/改名拒绝
|
||||
|
||||
## 验收
|
||||
|
||||
1. 无证据升 `done`(行更新与 `@document`)→ `EVIDENCE_REQUIRED` — PASS
|
||||
2. 未知列 / Wave 0 等尾部段落在 `@document` 编辑后保留 — PASS
|
||||
3. `task close` 不改变 MATRIX 行状态 — PASS
|
||||
4. 重复 `record_id` / 改名 / 缺 ID → `INVALID_DOCUMENT` 或 `INVALID_REQUEST` — PASS
|
||||
5. `unittest discover` 全绿;`production_ready` 未改 — PASS(134 ran / 3 skipped)
|
||||
|
||||
## 落地
|
||||
|
||||
| 项 | 值 |
|
||||
|---|---|
|
||||
| feature tip | `77bdbdbc` |
|
||||
| merge tip | `8079f8f4`(第一父 `713b7cbe`) |
|
||||
| validate | `fd0c7221` → validated @ `8079f8f4` |
|
||||
| integrate | `fd553227` → merged |
|
||||
|
||||
## 收口
|
||||
|
||||
| 字段 | 值 |
|
||||
|---|---|
|
||||
| review_state | accepted |
|
||||
| integration_state | merged_local_dev |
|
||||
| deployment | not_required |
|
||||
| cleanup | pending |
|
||||
| remote_sync | not_requested |
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
title: "module-batches-ag 状态回退修正与收口"
|
||||
task_id: module-batches-ag-status-fix-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: small
|
||||
policy_revision: "AGENTS+issue-learning+module-dev-standards @ 18b9556f3be4f2c5381673532ad71ec8a33e90f0"
|
||||
branch: feature/module-batches-ag-status-fix-2026-09-23
|
||||
worktree: .worktrees/module-batches-ag-status-fix-2026-09-23
|
||||
base_dev_sha: "18b9556f3be4f2c5381673532ad71ec8a33e90f0"
|
||||
write_scope:
|
||||
- .doc/audit/
|
||||
- .doc/ops/
|
||||
- .doc/remediation/
|
||||
- .doc/status/
|
||||
allowed_environments: []
|
||||
head_sha: "8768ee2ba26b60dbeb939c60f2b8e3d7dbf95001"
|
||||
mutex: module-decoupling-spec
|
||||
review_state: accepted
|
||||
integration_state: merged_local_dev
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: 独立维护者
|
||||
cleanup_trigger: tip 为 local_dev 祖先且无进程后 remove
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# module-batches-ag 状态回退修正与收口
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:检查解耦/总线/高可用/高并发是否按规范落地;按规范完善方案;对应 FEATURE-MATRIX `module-batches-ag`。
|
||||
- 授权来源:用户确认计划「module-batches-ag 状态回退修正与收口」。
|
||||
- 交付终点:MATRIX 行 `planned → done`;问题与经验登记;batch-plan 文档状态一致;合入 local_dev;不 push。
|
||||
- 禁止:不重做 A–G 代码;不 push;不改 FAV live / production_ready / gap-matrix。
|
||||
|
||||
## 范围与非目标
|
||||
|
||||
- 允许:共享文档 CAS 修正、问题/经验台账、batch-plan frontmatter、验收复核证据。
|
||||
- 非目标:Server 镜像字段增量收口(另立任务);重跑全量 Go/PI。
|
||||
|
||||
## 相关问题与经验
|
||||
|
||||
- issue:`ISSUE-20260923-matrix-status-regression`(resolved)
|
||||
- 开工检索:`matrix|FEATURE-MATRIX|merge conflict|docs apply` → lessons INDEX 无命中;新建 lesson。
|
||||
- 经验:`LESSON-20260923-matrix-status-cas`(validated)
|
||||
|
||||
## 调查结论(只读复核,本机 2026-09-23)
|
||||
|
||||
- A–G 合入证据:`server-assembly` / `chat-app-decouple` / `docgov-vocabulary` / `workflow-def-unidirect` / `engine-split` / `web-api-client` / `g1` / `g2-g3` merge commits 均在 `dev` 祖先链。
|
||||
- `./scripts/arch-check.sh --mode block` PASS;`module-boundaries.yaml` `exceptions: []`,baseline 全 0。
|
||||
- 巨型文件已拆(例:`coordinator/engine.go` 1844→344)。
|
||||
- 提交 `77bdbdbc` 曾标 MATRIX 行 `done`;其后 closeout 合并冲突手解取旧侧盖回 `planned`。
|
||||
|
||||
## 步骤与验收
|
||||
|
||||
1. [x] agentctl 建场与 CURRENT 认领
|
||||
2. [x] 登记 issue + lesson + ISSUES 投影
|
||||
3. [x] batch-plan `status: done`
|
||||
4. [x] docs apply MATRIX `planned → done`(evidence 指向已合入 short-term)
|
||||
5. [x] arch-check block 复核 + 文档差异/链接
|
||||
6. [x] validate → integrate → 五状态收口(local_dev `8768ee2b`)
|
||||
|
||||
## 验证与证据
|
||||
|
||||
| 范围 / 被测 SHA | 命令与环境 | 预期 | 实际 / 判定 | 证据 / 脱敏说明 |
|
||||
|---|---|---|---|---|
|
||||
| 架构门禁 | `./scripts/arch-check.sh --mode block` @ candidate `8768ee2b` | PASS | PASS | 纯文档变更;Go 全量 / PI **NOT REQUIRED**(验证契约) |
|
||||
| MATRIX 行 | docs apply + snapshot | status=done | PASS(done) | record_id=`module-batches-ag`;main tip 已核验 |
|
||||
| 链接一致性 | 目标路径存在性 | 可达 | PASS | issue/lesson/A–G short-term / boundaries |
|
||||
|
||||
## 收口与交接
|
||||
|
||||
| 字段 | 值 |
|
||||
|---|---|
|
||||
| review_state | accepted |
|
||||
| integration_state | merged_local_dev @ `8768ee2b` |
|
||||
| deployment | not_required |
|
||||
| cleanup | pending(独立维护者) |
|
||||
| remote_sync | not_requested |
|
||||
|
||||
- Server 镜像字段债务不在本任务。
|
||||
|
||||
## 相关链接
|
||||
|
||||
- Plan:用户确认的状态回退修正计划
|
||||
- 分批计划:[../../remediation/2026-09-20-module-decoupling-batch-plan.md](../../remediation/2026-09-20-module-decoupling-batch-plan.md)
|
||||
- 问题:[../../audit/2026-09-23-matrix-status-regression.md](../../audit/2026-09-23-matrix-status-regression.md)
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
title: "docgov-pi-narrative 收口:修复后复测升 done"
|
||||
task_id: pi-narrative-final-closeout-b-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: small
|
||||
policy_revision: "AGENTS+worktree-ops @ 9d8332ad0892adf147cb31da358ed01ad3e503fa"
|
||||
branch: feature/pi-narrative-final-closeout-b-2026-09-23
|
||||
worktree: .worktrees/pi-narrative-final-closeout-b-2026-09-23
|
||||
base_dev_sha: "9d8332ad0892adf147cb31da358ed01ad3e503fa"
|
||||
write_scope: ["internal/app", "internal/sysadmin", ".doc"]
|
||||
allowed_environments: []
|
||||
head_sha: "c1b60b7af2ae8631ebfe9d6a052d4e82e076abae"
|
||||
mutex: docgov
|
||||
review_state: accepted
|
||||
integration_state: merged_local_dev
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "合入 dev 祖先且无进程占用后 remove"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# docgov-pi-narrative 收口:修复后复测升 done
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:审查并调整既有方案,推进 FEATURE-MATRIX `docgov-pi-narrative` 从 `partial` 结束为 `done`。
|
||||
- 授权来源:用户确认「docgov-pi-narrative 收口计划(复测后升 done)」并指示实施。
|
||||
- 交付终点:修复后真实 PI 复测 + 测试报告 + MATRIX 升 done + 合入 local `dev`;不 push;不放量 flag。
|
||||
- 禁止项:不默认开启仓库/compose `PI_CHANGE_REPORT_NARRATIVE`;不改 gap-matrix / `production_ready`;不晋升 test/main。
|
||||
|
||||
## 范围与非目标
|
||||
|
||||
- 允许:补强 `TestPiChangeReportNarrator_LiveMiniMax`(含 hunks + flag-on Resolve);sysadmin reason;MATRIX/CURRENT/pu7/short-term/test-report。
|
||||
- 非目标:dev 常驻开启叙事 flag;Playwright flag-on 全链路;触碰 Cline partial-deferred 总控实现。
|
||||
|
||||
## 相关问题与经验
|
||||
|
||||
- 开工检索:docgov / PI narrative / change_report_narrative / `--no-tools`。
|
||||
- ISSUES / lessons:无直接命中 PI 叙事;沿用 content-hash 投影经验(证据与状态分轨)。
|
||||
- 历史缺口(2026-09-20):计数-only 输入、prompt-only no-tool → 已修;本轮补修复后真实链路复测。
|
||||
|
||||
## 步骤与验收
|
||||
|
||||
1. [x] 建场并认领 mutex `docgov`
|
||||
2. [x] 补强 live 测试输入与 flag-on Resolve 断言
|
||||
3. [x] 真实 PI 复测 + 前端分区 + vet/short/arch(live PASS @ MiniMax-M2.7-highspeed 7.65s)
|
||||
4. [x] MATRIX → done;CURRENT/pu7/sysadmin 同步
|
||||
5. [x] 测试报告归档;validate + integrate;五态收口
|
||||
|
||||
## 验证与证据
|
||||
|
||||
| 范围 / 被测 SHA | 命令与环境 | 预期 | 实际 / 判定 | 证据 / 脱敏说明 |
|
||||
|---|---|---|---|---|
|
||||
| live PI(进程 env flag) | `RUN_PI_E2E=1 … TestPiChangeReportNarrator_LiveMiniMax` | PASS;digest 原样;含截断差异 | PASS(7.65s) | [assets](../../test-reports/assets/2026-09-23-pi-narrative-closeout/live-minimax.txt) |
|
||||
| 前端分区 | `overlayMode.test.ts` | PASS | PASS(14) | [overlay](../../test-reports/assets/2026-09-23-pi-narrative-closeout/overlay-mode.txt) |
|
||||
| 门禁 | `go vet` / short narrative / `arch-check --mode block` | 全绿 | PASS | 收口报告 |
|
||||
|
||||
## 收口与交接
|
||||
|
||||
- review_state=accepted;integration_state=merged_local_dev(`c1b60b7a` 含证据 + MATRIX done);deployment=not_required;remote_sync=not_requested;cleanup=pending(独立维护者)。
|
||||
- CURRENT 任务行已登记 done;`## 焦点` 为 protected section,仍写「PI 叙事 flag 不放量」——与「默认 off;放量另授权」同义,未强改 protected 文案。
|
||||
- cleanup 交独立维护者:确认 tip 祖先、无进程占用后 `worktree remove`(禁 `--force`)。
|
||||
|
||||
## 相关链接
|
||||
|
||||
- Plan: 用户确认的收口计划(复测后升 done)
|
||||
- Contract: [../long-term/2026-09-16-pu7-pi-narrative-contract.md](../long-term/2026-09-16-pu7-pi-narrative-contract.md)
|
||||
- W3: [../../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md](../../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md)
|
||||
- 红线负例: [../../test-reports/2026-09-22-redline-evidence-pi-narrative-test-report.md](../../test-reports/2026-09-22-redline-evidence-pi-narrative-test-report.md)
|
||||
@@ -0,0 +1,57 @@
|
||||
---
|
||||
title: "晋升 latest-upload summary + parse-wait 至 test"
|
||||
task_id: promote-fix-latest-upload-test-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: ops
|
||||
task_tier: multi_stage
|
||||
policy_revision: "AGENTS+worktree-ops @ 30fa4e88"
|
||||
branch: feature/promote-fix-latest-upload-test-2026-09-23
|
||||
worktree: .worktrees/promote-fix-latest-upload-test-2026-09-23
|
||||
base_dev_sha: "30fa4e88b21ddc918a4f408a13ef4d2c2d5acd6e"
|
||||
head_sha: "54955c9d1a61f671556508ab7c89db088aaef7d7"
|
||||
write_scope: [".", ".doc/"]
|
||||
allowed_environments: ["test"]
|
||||
mutex: git:test+env:test
|
||||
review_state: not_required
|
||||
integration_state: merged_local_test
|
||||
deployment: test_ok
|
||||
cleanup: pending
|
||||
cleanup_owner: 独立维护者
|
||||
cleanup_trigger: tip 为 local_dev/origin 祖先且无进程占用后 remove
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# 晋升 latest-upload summary + parse-wait 至 test
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:合入 test,便于人工实测「总结刚刚上传的文档」与 MinerU 解析等待。
|
||||
- 授权来源:用户明确「合入 test,我来进行实际测试」(dev→local test;未要求 push/main)。
|
||||
- 交付终点:local `test` 含功能祖先、rc tag、pinned 镜像 recreate、`:8081` health。
|
||||
- 禁止:不晋升 main;不 push;不删 Volumes。
|
||||
|
||||
## 结果
|
||||
|
||||
- local `test@54955c9d` + `rc-v1.1.0-beta.3`
|
||||
- 含 `30fa4e88`(local_dev tip)与实现祖先 `f6e14f97`
|
||||
- test `:8081` schema_version=65;ready ok;pinned app digest `ba834cb1…`
|
||||
- 报告:[../../test-reports/2026-09-23-promote-fix-latest-upload-test-report.md](../../test-reports/2026-09-23-promote-fix-latest-upload-test-report.md)
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] 登记 promote 任务 / worktree(基线 test@e217929c)
|
||||
2. [x] candidate images + PASS receipt(`30fa4e88` suite=`scoped-latest-upload-summary`)
|
||||
3. [x] merge local_dev → promote tip(CURRENT/FEATURE-MATRIX 保留 test 侧,走 docs apply 通道外)
|
||||
4. [x] `agentctl validate` 聚焦 go test + arch-check
|
||||
5. [x] 推进 local `test` + `rc-v1.1.0-beta.3`;apply pin;`env-service.sh test rebuild`
|
||||
6. [x] health/ready 冒烟
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [x] `test` 含 latest-upload summary / parse-wait 祖先
|
||||
- [x] `:8081` `/health` `/ready` ok,schema_version≥64
|
||||
- [x] 运行镜像 digest 与 receipt pin 一致
|
||||
- [ ] 人工:上传 PDF →「总结我刚刚上传的文档」可见 `document_parsing` / 总结结果(用户实测)
|
||||
@@ -0,0 +1,35 @@
|
||||
# remaining-worktrees-closeout-2026-09-23
|
||||
|
||||
| field | value |
|
||||
|---|---|
|
||||
| status | done |
|
||||
| owner | Cursor |
|
||||
| type | integrate/cleanup |
|
||||
| base_dev_sha | 3e01f1875661c8303d255661d5d6239de54d07fb (pre-closeout tip after FAV) |
|
||||
| tip_sha | (see closeout fav-constraint merge) |
|
||||
| go_agentx_merge | 6032dbaa |
|
||||
| fav_merge | 3e01f187 |
|
||||
| write_scope | .doc |
|
||||
| mutex | git:dev+worktree-cleanup |
|
||||
| review_state | accepted |
|
||||
| integration_state | merged_local_dev |
|
||||
| deployment | not_required |
|
||||
| cleanup | done |
|
||||
| remote_sync | not_requested |
|
||||
|
||||
## Exception (FAV)
|
||||
|
||||
见 `.doc/ops/short-term/2026-09-23-integrate-fav-final.md`(已合入 local_dev)。
|
||||
|
||||
## CURRENT 受控约束
|
||||
|
||||
用户 2026-09-23 授权临时放开 `protected_sections` 后,已将第一条改为:
|
||||
|
||||
FAV live 仍不放量;`FAV_DEGRADED_READ` 默认 false;不删 origin/*(本轮仅前进 local dev,不 push)。
|
||||
|
||||
保护已恢复。`## 焦点` 仍受保护未改。
|
||||
|
||||
## Goose
|
||||
|
||||
- go-agentx registry: `00066_2026-09-21-agentx-workspace-registry.sql`
|
||||
- FAV: 保留既有 `00036_2026-09-14-final-artifact-vault.sql`;丢弃分支重复 `00034`
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
title: "Bug 与系统问题的同类根因分析规范"
|
||||
task_id: systemic-issue-analysis-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Codex
|
||||
task_type: implementation
|
||||
task_tier: small
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 5c35f32e225a482d5838e6d771778fb754f75506"
|
||||
branch: feature/systemic-issue-analysis-2026-09-23
|
||||
worktree: .worktrees/systemic-issue-analysis-2026-09-23
|
||||
base_dev_sha: "5c35f32e225a482d5838e6d771778fb754f75506"
|
||||
write_scope: ["AGENTS.md", ".doc/ops/templates/audit-note.md", ".doc/ops/2026-09-21-validation-contract.md", ".doc/ops/2026-09-21-policy-registry.md", ".doc/ops/short-term/2026-09-23-systemic-issue-analysis.md", ".doc/ops/CURRENT.md"]
|
||||
allowed_environments: []
|
||||
mutex: "认领路径的 agentctl path 租约;提交另持 git:index"
|
||||
review_state: approved
|
||||
integration_state: merged
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "owner 退出后的独立集成/维护执行者"
|
||||
cleanup_trigger: "dev 集成与证据保存完成且 owner 退出后复查"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# Bug 与系统问题的同类根因分析规范
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
2026-09-23 本会话用户要求“规范中加入一些要求”,报告 bug 或系统问题后应尝试找到这类问题的原因、潜在问题,思考研究并提出方案;以“今天天气怎么样”的异常回复作为示例,强调不能只改一个提问或细节。这是规范修改授权,天气问题只是说明,不构成产品缺陷诊断或业务修复任务。
|
||||
|
||||
交付终点:完成统一规范、配套模板与验证要求并检查一致性;在仓库门禁允许时本地集成。禁止修改业务代码、产品提示词、运行环境、.env,禁止推送或处理他人未提交现场。
|
||||
|
||||
## 当前证据与变更
|
||||
|
||||
- 已阅读 AGENTS、PROJECT、CURRENT、文档地图、worktree 操作规范、验证契约、规范登记和收口清单。
|
||||
- 当前已有授权/验证规则,但没有从个案归纳共用机制、横向排查和形成方案的明确要求;分析模板只有现象和根因占位。
|
||||
- AGENTS 新增四步要求和天气示例,限制有证据关联的扩展,区分研究/实施授权。
|
||||
- 分析模板补充事实、同类范围、证据分级与方案验收;验证契约补充问题类别回归;规范登记现为 active/manual,实际生效提交见下文。
|
||||
- CODEX、CLAUDE、GEMINI、ANTIGRAVITY、KIMI 与四个 Cursor 规则均转发统一入口,无需另复制规则。
|
||||
|
||||
## 验证计划与结果
|
||||
|
||||
纯文档:检查 diff、修改文档的相对链接及新增锚点、状态和客户端入口一致性;人工按天气示例、无法复现、仅个案证据、已授权修复四种情形检查规则是否可执行。不运行产品测试,不声称验证过未来 Agent 行为。
|
||||
|
||||
- 基于 base_dev_sha 的工作区差异:`git diff --check` 退出 0;人工审阅全部规范差异通过。
|
||||
- Python pathlib/re 扫描上述 5 个修改文档的 Markdown 相对链接:`PASS: 5 changed documents; 34 relative links; new anchors resolve`;目标存在,新增两个锚点可解析。
|
||||
- 人工情景审阅通过:天气示例从机制出发而非预设根因;无法复现须保留假设/缺口及验证方法;仅个案须给范围依据;已授权修复可继续,不新增重复审批。
|
||||
- 客户端入口一致性通过:所有已读入口仍引用 AGENTS/统一验证契约,无重复新规则。
|
||||
- 本次只验证文档结构与要求一致性,未执行产品测试;输出无业务内容或凭证,无需脱敏。review_state=approved 指本轮自审,不代表独立评审。
|
||||
- 文档修改与验证已完成;前轮曾因主目录未跟踪项阻塞,本轮完成本地工具文件分类与受控集成后解除。
|
||||
|
||||
## 集成与交接
|
||||
|
||||
启动时本地 dev 为上述 base_dev_sha;相对本地缓存 origin/dev 为 ahead 10 / behind 245,未 fetch、未核验远端实时状态,不同步远端。
|
||||
|
||||
2026-09-23 用户在同一会话明确要求“合入 dev”,沿用本 task_id。再次读取当前 dev 的相关规范,与初始基线无差异。
|
||||
|
||||
复核 `git status --short --untracked-files=all`:唯一未跟踪文件为 `.codegraph/.gitignore`;其内容明确说明目录用于本机代码索引,数据库已经由其中规则忽略。本轮仅在 `.git/info/exclude` 添加 `/.codegraph/` 本地排除,保留现有排除规则;未更改、移动或删除 CodeGraph 文件,操作前后两个文件的 SHA-256 一致。此配置只影响本机 Git 展示,不提交缓存;要撤销可删除本轮添加的注释与排除行。主目录随后干净,原有 hooks、validate 与 integrate 门禁均保持启用。
|
||||
|
||||
- 任务实现提交:`380584b86bd2ae53b2896a784ee892dad998e1bf`。
|
||||
- 生效集成提交:`958dd44fee8bbea8d19129457fc0ad749fdebdbe`;第一父提交为 `5c35f32e225a482d5838e6d771778fb754f75506`,第二父提交为任务实现提交。
|
||||
- 候选 worktree:`.worktrees/integrate-systemic-issue-analysis-2026-09-23`;机器登记 ID 同名(去掉路径前缀),owner Codex,允许写路径与本任务相同,能力仅 `git:dev`。
|
||||
- 精确候选验证:`agentctl validate --task integrate-systemic-issue-analysis-2026-09-23 -- python3 -` 执行差异范围/空白、6 个修改文档的 47 个相对链接、新增锚点和客户端入口检查,输出 `PASS: diff scope; 6 documents; 47 relative links; new anchors; client entrypoints`。收据 `107bab9a-6f66-4d7f-91eb-4881d030c834` 绑定上述生效提交。
|
||||
- 受控集成:`agentctl integrate --task integrate-systemic-issue-analysis-2026-09-23 --expected-dev 5c35f32e225a482d5838e6d771778fb754f75506` 返回 `status=merged`;收据 `557480b8-4705-4eb7-b39f-12d3578c78b5`。
|
||||
- 本轮状态/登记收口作为后续文档提交,同样从精确 dev 基线构造候选并验证后受控合入;其合并节点不改变上述规范生效提交。机器操作收据按候选 task 查询,Git 保留完整父链。
|
||||
- 本地 dev 已包含规范;`deployment=not_required`,运行制品未变;`remote_sync=not_requested`,未 fetch 或 push。
|
||||
|
||||
任务验收已满足,状态 done;两个 worktree 保留供独立维护者在 owner 退出后复查清理,cleanup=pending。无业务遗留工作,不操作其他任务或共享服务。影响限于工程 Agent 的问题处理要求;FEATURE-MATRIX、发布门禁和产品运行版本无变化。
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: "W2 收口:U7/U4/U5"
|
||||
task_id: w2-closeout-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: single
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ c780a030b2084d36a45c4f44ce5fe982c3897386"
|
||||
branch: feature/w2-closeout-2026-09-23
|
||||
worktree: .worktrees/w2-closeout-2026-09-23
|
||||
base_dev_sha: "c780a030b2084d36a45c4f44ce5fe982c3897386"
|
||||
write_scope: [".doc"]
|
||||
allowed_environments: []
|
||||
mutex: w2-closeout
|
||||
review_state: accepted
|
||||
integration_state: pending
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "本收口合入后复查 feature/integrate worktrees"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# W2 收口:U7 / U4 / U5
|
||||
|
||||
基线 W1 tip `fda5ef29` → 终态 tip `c780a030`。
|
||||
|
||||
| 包 | tip / merge | 测试 |
|
||||
|---|---|---|
|
||||
| U7 quarantine/fence | `198b3e4a`… → merge `981021b2` | 118→119 ran / 3 skipped |
|
||||
| U4 daemon manager.lock | `cb4a1367`/`5dc25e0b` → merge `725e2e4b` | 122 ran / 3 skipped |
|
||||
| U5 CURRENT projection | `59739a2b` → merge `c780a030` | 129 ran / 3 skipped |
|
||||
|
||||
## 五态
|
||||
|
||||
| 字段 | 值 |
|
||||
|---|---|
|
||||
| review_state | accepted(三包验收用例 + unittest discover) |
|
||||
| integration_state | merged_local_dev(串行 `git:dev`) |
|
||||
| deployment | not_required(未装载 launchd/systemd;不接触产品环境) |
|
||||
| cleanup | pending(U7/U4/U5/W1 遗留 worktree 交独立维护者;禁止 `--force`) |
|
||||
| remote_sync | not_requested |
|
||||
|
||||
## 非目标守住
|
||||
|
||||
未 push;未改 FEATURE-MATRIX 状态值;未装载 daemon;未做 L2/ADR;未晋升 test/main。
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: "W3-U6 收口:MATRIX 稳定 record_id"
|
||||
task_id: w3-u6-closeout-2026-09-23
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: single
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 8079f8f42aba862decca883cbf4186cfa76e6c68"
|
||||
branch: feature/w3-u6-closeout-2026-09-23
|
||||
worktree: .worktrees/w3-u6-closeout-2026-09-23
|
||||
base_dev_sha: "8079f8f42aba862decca883cbf4186cfa76e6c68"
|
||||
write_scope: [".doc"]
|
||||
allowed_environments: []
|
||||
mutex: w3-u6-closeout
|
||||
review_state: accepted
|
||||
integration_state: pending
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "本收口合入后复查 feature/integrate worktrees"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# W3-U6 收口:MATRIX 稳定 record_id
|
||||
|
||||
基线 tip `713b7cbe` → 终态 tip `8079f8f4`。七包队列(U1r–U6)清空。
|
||||
|
||||
| 项 | 值 |
|
||||
|---|---|
|
||||
| feature | `77bdbdbc` feat(ops): add stable record_id column to FEATURE-MATRIX |
|
||||
| merge | `8079f8f4`(第一父=`713b7cbe`) |
|
||||
| 测试 | unittest discover 134 ran / 3 skipped |
|
||||
|
||||
## 五态
|
||||
|
||||
| 字段 | 值 |
|
||||
|---|---|
|
||||
| review_state | accepted(5 项验收 + discover 全绿) |
|
||||
| integration_state | merged_local_dev |
|
||||
| deployment | not_required |
|
||||
| cleanup | pending(matrix/integrate/closeout worktree 交独立维护者;禁止 `--force`) |
|
||||
| remote_sync | not_requested |
|
||||
|
||||
## 非目标守住
|
||||
|
||||
未 push;未改 FEATURE-MATRIX 状态值;未装载 daemon;未做 L2/ADR;未触碰 gap-matrix / `production_ready`。
|
||||
@@ -0,0 +1,67 @@
|
||||
---
|
||||
title: "Worktree 批量收口:合入 dev + 清理"
|
||||
task_id: "worktree-closeout-batch-2026-09-23"
|
||||
status: done
|
||||
created: 2026-09-23
|
||||
updated: 2026-09-23
|
||||
owner: Cursor
|
||||
task_type: operations
|
||||
task_tier: multi_stage
|
||||
policy_revision: "agent-governance-2026-09-21-r1 @ 3f14d7fa"
|
||||
branch: feature/worktree-closeout-batch-2026-09-23
|
||||
worktree: .worktrees/worktree-closeout-batch-2026-09-23
|
||||
base_dev_sha: "3f14d7fa755269d69b3c1729a6c3180f27ed8630"
|
||||
write_scope: ["."]
|
||||
allowed_environments: []
|
||||
head_sha: "a690aab42d820058974ca38a363cb71ebe9e0bc9"
|
||||
mutex: "git:dev+worktree-cleanup"
|
||||
review_state: accepted
|
||||
integration_state: merged_local_dev
|
||||
deployment: not_required
|
||||
cleanup: retained-with-reason
|
||||
cleanup_owner: "独立维护者"
|
||||
cleanup_trigger: "全部合入验证通过且 worktree 清理完成"
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# Worktree 批量收口:合入 dev + 清理
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 用户目标:检查当前所有 worktree,完成后测试合入 local `dev`,并清理 worktree。
|
||||
- 授权决策(计划确认):
|
||||
1. `merge_remote`:创建 integrate 候选,将 `origin/dev` 合入本地 `dev`,解决冲突后推进本地 dev;不默认 push。
|
||||
2. `keep_protected`:FAV / go-agentx 保留不合入不清理。
|
||||
- 交付终点:本地 `dev` 含远端 + 本地独有 + 未合 docs 分支;无争议 worktree 清理完毕。
|
||||
- 禁止项:不 push;不晋升 test/main;不强删;不整支合入 FAV;不清理 go-agentx cancelled 现场。
|
||||
|
||||
## 范围与非目标
|
||||
|
||||
- 允许:同步 `origin/dev`、合入未完成 docs 分支、抢救未跟踪任务文档与 mineru gofmt、关闭 active 任务、普通 remove worktree/stale 目录、CURRENT docs apply。
|
||||
- 非目标:远端 push;FAV / go-agentx;test/main 晋升。
|
||||
|
||||
## 步骤与验收
|
||||
|
||||
1. [x] 建场 + recover `dac0865f` + 关闭 promote 任务 + 主目录切回 `dev`
|
||||
2. [ ] 同步 `origin/dev` 进本地 `dev`(冲突解决 + validate + integrate)
|
||||
3. [ ] 合入 modular / lock / policy / workflow-governance + 抢救文档/gofmt
|
||||
4. [ ] 关闭其余 active 任务;清理已合入 worktree / stale 目录(保留保护项)
|
||||
5. [ ] 验证报告 + CURRENT 收口
|
||||
|
||||
## 验证与证据
|
||||
|
||||
| 范围 / 被测 SHA | 命令与环境 | 预期 | 实际 / 判定 | 证据 / 脱敏说明 |
|
||||
|---|---|---|---|---|
|
||||
| 前置 | recover + task close + checkout dev | recovery 清空、主目录在 dev | recovered;promote 任务 cancelled;主目录 `dev` | agentctl status |
|
||||
|
||||
独立报告:`.doc/test-reports/2026-09-23-worktree-closeout-batch-test-report.md`(阶段完成后补)。
|
||||
|
||||
## 收口与交接
|
||||
|
||||
- 本地提交 / dev 集成 / 远端:本轮仅本地;`remote_sync=not_requested`。
|
||||
- 保护项:`.worktrees/fix-dev-runtime-data-root-guard`(FAV)、`.worktrees/go-agentx-runtime-2026-09-21`。
|
||||
|
||||
## 相关链接
|
||||
|
||||
- 计划:`~/.cursor/plans/worktree_批量收口_c72b246f.plan.md`
|
||||
- 操作规范:`../2026-09-21-agent-worktree-workflow.md`
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
status: in_progress
|
||||
task_id: codegraph-governance-2026-09-24
|
||||
owner: Cursor
|
||||
mutex: agent-workflow-governance+codegraph
|
||||
base_dev_sha: 0ff698db6f3e49df7808a30ae328f3b81f9dd4ba
|
||||
write_scope: scripts, .doc, .cursor, .gitignore, AGENTS.md
|
||||
review_state: in_progress
|
||||
integration_state: not_merged
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
remote_sync: not_requested
|
||||
policy_revision: codegraph-governance-2026-09-24-r1
|
||||
---
|
||||
|
||||
# CodeGraph 纳入治理 + worktree/MATRIX 只读盘点
|
||||
|
||||
## 目标
|
||||
|
||||
1. 治理层接入 CodeGraph:MCP、gitignore、建场 init、hooks sync、会话 sync;soundness 边界(grep 权威)。
|
||||
2. 只读盘点:`cleanup report` / `docs drift`;daemon `--audit-every`;不自动删除、不自动升 done。
|
||||
3. 不碰产品 SWBOOT-10;不装载本机 systemd coordinator。
|
||||
|
||||
## 验收
|
||||
|
||||
- unittest(scripts/tests)+ 针对性正负例
|
||||
- 真实命令:cleanup report / docs drift / hooks codegraph-sync
|
||||
- 测试报告:`.doc/test-reports/2026-09-24-codegraph-governance-test-report.md`(工程规范变更,PI/全量 Go 标 NOT REQUIRED)
|
||||
- fixup landed note: trailing-slash check-ignore
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
title: "Track I2:shadow 层 + 项目 allowlist + 冻结阈值"
|
||||
task_id: intent-plan-i2-shadow-allowlist-2026-09-24
|
||||
status: in_progress
|
||||
created: 2026-09-24
|
||||
updated: 2026-09-24
|
||||
owner: Cursor
|
||||
task_type: implementation
|
||||
task_tier: small
|
||||
policy_revision: "AGENTS+CURRENT @ 9d8332ad"
|
||||
branch: feature/intent-plan-i2-shadow-allowlist-2026-09-24
|
||||
worktree: .worktrees/intent-plan-i2-shadow-allowlist-2026-09-24
|
||||
base_dev_sha: "9d8332ad0892adf147cb31da358ed01ad3e503fa"
|
||||
write_scope: ["internal/app", "internal/app/intentflow", "internal/chat", "internal/sysadmin", "docker-compose.*.yml", ".doc/ops/short-term", ".doc/test-reports"]
|
||||
allowed_environments: ["dev"]
|
||||
mutex: intent-plan
|
||||
review_state: pending
|
||||
integration_state: pending
|
||||
deployment: pending
|
||||
cleanup: pending
|
||||
cleanup_owner: 独立维护者
|
||||
remote_sync: not_requested
|
||||
---
|
||||
|
||||
# Track I2:shadow 层 + 项目 allowlist + 冻结阈值
|
||||
|
||||
## 用户目标与授权
|
||||
|
||||
- 关闭 FEATURE-MATRIX `intent-plan-u1u8`:实现 I2 代码门禁后在 dev 逐级放量验收。
|
||||
- 本任务(T1)只交付代码:shadow 持久不可执行计划、`INTENT_PLAN_PROJECT_ALLOWLIST`、进程内对账指标、冻结阈值登记。
|
||||
- 禁止:升 compose 默认值、升 full、push、操作 test/main。
|
||||
|
||||
## 冻结阈值(Foundation 0 / I2 进入 auto_read 前)
|
||||
|
||||
对 U2 `plan-proposal-eval-v1.json` counterfactual 基线:
|
||||
|
||||
| 指标 | 阈值 |
|
||||
|---|---|
|
||||
| hard-negative 错误自动执行(would_execute) | **0** |
|
||||
| 安全红线 / 越权副作用 | **0** |
|
||||
| 写意图漏判为 auto_read | **0** |
|
||||
| read_only would_execute 覆盖(非 hard-negative) | ≥ 基线分母内全部命中 |
|
||||
| 确认放弃率 / 主动拆单(放量观察) | 记录;不达不升 confirm 写扩面 |
|
||||
|
||||
放量观察窗以标注数据集 + 手工样本为主证据;不以事后结果下调阈值。
|
||||
|
||||
## 步骤
|
||||
|
||||
1. [x] `TierShadow`:持久 `proposed` + `validated_only`,零执行;不占 active-write
|
||||
2. [x] `INTENT_PLAN_PROJECT_ALLOWLIST`(空拒绝 / `*` / id 列表)
|
||||
3. [x] 进程指标 + chat 对 shadow 不抢 legacy 路由
|
||||
4. [x] 单测 + arch-check
|
||||
5. [ ] 合入 local_dev;T2 做真实放量验收
|
||||
|
||||
## 相关链接
|
||||
|
||||
- 方案:多意图两行收口推进方案
|
||||
- 上位:[capability-enablement Track I](../../remediation/2026-09-20-capability-enablement-impact-plan.md)
|
||||
- 设计:[multi-intent-hitl-plan](../../system-design/2026-09-15-multi-intent-hitl-plan.md)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
status: done
|
||||
write_scope: internal/app,intentflow,internal/sysadmin,.doc/ops/short-term
|
||||
mutex: intent-plan
|
||||
base_dev_sha: 4e601e95
|
||||
review_state: self-reviewed
|
||||
integration_state: merged_local_dev
|
||||
deployment: loaded_shared_dev
|
||||
cleanup: pending
|
||||
remote_sync: not_pushed
|
||||
owner: Cursor
|
||||
task_id: intent-plan-u9u12-live-2026-09-24
|
||||
---
|
||||
|
||||
# intent-plan U9–U12 live 接线(Track I3)
|
||||
|
||||
## 目标
|
||||
|
||||
- **U9**:`HandleTurn` 在 `RulesCanDecide==false` 且 elevated tier 时调用 `ActiveSegmentProposer`;失败 fail-closed;成功用 LLM spans + 确定性识别构建计划(`segmenter.v2.llm`)。
|
||||
- **U10**:`project.fact.supplement` → `MutateOwner`(`ctxmgr.UpdateProjectBlackboard`,与 SupplementInfo 同源黑板)。
|
||||
- **U11**:`document.claim`、`document.review.submit` → `DocGovOwner`(docgov 引擎);其余 docgov key 仍 dry-run。
|
||||
- **U12**:`workflow.run`、`run.resume` → `RunControlOwner`(projectworkflow + taskrun);其余仍 dry-run。
|
||||
|
||||
## 验证
|
||||
|
||||
```bash
|
||||
./scripts/arch-check.sh --mode block
|
||||
go test -short ./internal/app/intentflow/ ./internal/app/ ./internal/sysadmin/ -count=1 \
|
||||
-run '^(TestHandleTurn|TestMutate|TestDocGov|TestRunControl|TestExpansion|TestBatch|TestActive|TestStub|TestRule|TestU10|TestU11|TestU12|TestBuild|TestDryRun|TestDefault|TestFeatures|TestQuery|TestTask|TestLive|TestProductionComposition)'
|
||||
```
|
||||
|
||||
## 未 live 的 action key(MATRIX 开放清单)
|
||||
|
||||
| 域 | 仍为 validated-only / dry-run |
|
||||
|---|---|
|
||||
| U10 | (仅 `project.fact.supplement` live;无其它 mutate key) |
|
||||
| U11 | `document.review.approve/reject`, `document.final.approve/reject`, `document.proposal.decide` |
|
||||
| U12 | `workflow.switch`, `run.restart` |
|
||||
|
||||
## 收口
|
||||
|
||||
- 合入:`agentctl validate` → `queue enqueue` 或 integrate
|
||||
- FEATURE-MATRIX:由父任务更新
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
status: done
|
||||
write_scope: configs/.env.dev(local),env:dev,.doc
|
||||
mutex: env:dev+jevdecide
|
||||
base_dev_sha: 156c1130
|
||||
review_state: self-reviewed
|
||||
integration_state: docs_pending
|
||||
deployment: local_dev_assist_on
|
||||
cleanup: pending
|
||||
remote_sync: not_pushed
|
||||
owner: Cursor
|
||||
task_id: jev-dev-assist-on-2026-09-24
|
||||
---
|
||||
|
||||
# local_dev 启用 jev-service(assist)并多样本对话验收
|
||||
|
||||
## 目标
|
||||
|
||||
将 `JEV_DECIDE_MODE` 从 shadow 升为 **assist**,用 ≥20 条真实 `/api/v1/chat` 验证:规则漏检时能否加成打开实时检索,且业务问句不被误伤。
|
||||
|
||||
## 做法
|
||||
|
||||
1. `configs/.env.dev`:`JEV_DECIDE_MODE=assist`(URL/KEY 不变)
|
||||
2. `env:dev` 租约下 force-recreate app → 日志 `jevdecide wired mode=assist`
|
||||
3. 20 轮真实对话;证据 [assets](../../test-reports/assets/2026-09-24-jev-dev-assist-enable/);报告 [test-report](../../test-reports/2026-09-24-jev-dev-assist-enable-test-report.md)
|
||||
|
||||
## 回退
|
||||
|
||||
`JEV_DECIDE_MODE=shadow` 或 `off` 后 recreate app。
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
status: done
|
||||
write_scope: configs/.env.dev(local),env:dev,.doc
|
||||
mutex: env:dev+jevdecide
|
||||
base_dev_sha: d8214a09
|
||||
review_state: self-reviewed
|
||||
integration_state: docs_only
|
||||
deployment: local_dev_shadow_on
|
||||
cleanup: pending
|
||||
remote_sync: not_pushed
|
||||
owner: Cursor
|
||||
task_id: jev-dev-shadow-on-2026-09-24
|
||||
---
|
||||
|
||||
# local_dev 启用 jev-service(shadow)
|
||||
|
||||
## 目标
|
||||
|
||||
在运行中的 `local_dev` 打开产品侧 `JEV_DECIDE_MODE=shadow`,对接本机 jev-service,不改 compose 默认(仍 `off`),不放量 `assist`。
|
||||
|
||||
## 做法
|
||||
|
||||
1. `configs/.env.dev`(gitignore)写入:
|
||||
- `JEV_DECIDE_MODE=shadow`
|
||||
- `JEV_BASE_URL=http://172.17.0.1:8767`(容器经 docker0 网桥访问宿主机;`host.docker.internal` 本机不可达)
|
||||
- `JEV_API_KEY` 自 `~/.secrets/jev/api.key` 注入(不入库)
|
||||
2. `agentctl with --resource env:dev` → `./scripts/env-service.sh dev rebuild`(旧镜像无 jevdecide 接线,仅 recreate 不够)
|
||||
3. 验证见 [启用报告](../../test-reports/2026-09-24-jev-dev-shadow-enable-test-report.md)
|
||||
|
||||
## 回退
|
||||
|
||||
将 `configs/.env.dev` 中 `JEV_DECIDE_MODE=off`(或删 JEV_*)后 `env-service.sh dev` recreate/restart app。
|
||||
|
||||
## 非目标
|
||||
|
||||
- 不改 compose 默认、不推远端、不晋升 test/main、不启用 assist
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
status: done
|
||||
write_scope: scripts/mcp,.cursor,.doc/ops/short-term,.doc/test-reports
|
||||
mutex: jev-mcp+docs
|
||||
base_dev_sha: b6f21e8a947c4bb8ab1171e05f7404b35f7bd2f1
|
||||
review_state: self-reviewed
|
||||
integration_state: merged_local_dev
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
remote_sync: not_pushed
|
||||
owner: Cursor
|
||||
task_id: jev-mcp-integration-2026-09-24
|
||||
---
|
||||
|
||||
# jev-service 治理侧 MCP 接入
|
||||
|
||||
## 目标
|
||||
|
||||
将本机 jev-service(类型化 decision API)以独立 MCP 服务器 `jev` 接入本仓库治理链路,供 agent 在封闭枚举决策点调用;凭证仅存 `~/.secrets/jev/`,不进 git。
|
||||
|
||||
## 交付物
|
||||
|
||||
- `scripts/mcp/jev-mcp.mjs` — `jev_decide` / `jev_health`
|
||||
- `.cursor/mcp.json` — 注册 `jev` server
|
||||
- `.cursor/skills/jev-decide/SKILL.md` — 治理用例指引
|
||||
- `.doc/test-reports/2026-09-24-jev-mcp-integration-test-report.md` — 真实链路证据
|
||||
|
||||
## 非目标
|
||||
|
||||
- 不改 Go 产品路径(intent / coordinator / pi-agent)
|
||||
- 不 push、不晋升 test/main
|
||||
- 不把 API key / 完整 secret 写入仓库或报告正文
|
||||
|
||||
## 验证计划
|
||||
|
||||
1. MCP initialize + tools/list(stdio NDJSON 或 Content-Length)
|
||||
2. `jev_health` 对本机与 frp 备用 URL
|
||||
3. `jev_decide` 治理样例(任务分级 + 验证层级)
|
||||
4. 401 负例(错误 key)
|
||||
5. 产品 PI 全链路:NOT REQUIRED(工程 MCP/文档变更,依据 PROJECT.md §验证入口与 test-reports-standard 例外)
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
status: done
|
||||
write_scope: internal/jevdecide,internal/coordinator,internal/app,internal/config,internal/sysadmin,configs,deploy,.doc
|
||||
mutex: jevdecide+coordinator
|
||||
base_dev_sha: 0ff698db6f3e49df7808a30ae328f3b81f9dd4ba
|
||||
review_state: self-reviewed
|
||||
integration_state: merged_local_dev
|
||||
deployment: not_required
|
||||
cleanup: pending
|
||||
remote_sync: not_pushed
|
||||
owner: Cursor
|
||||
task_id: jev-product-shadow-2026-09-24
|
||||
---
|
||||
|
||||
# jev-service 产品侧 shadow 接入
|
||||
|
||||
## 目标
|
||||
|
||||
产品 Go 路径接入 jev-service:离线评测过双门禁后,以 `JEV_DECIDE_MODE=off|shadow|assist` 灰度接入 realtime_query 与 ProfileTask;默认 off,失败 fail-open 回规则。
|
||||
|
||||
## 交付
|
||||
|
||||
- `internal/jevdecide` 客户端 + 熔断 + 指标 + 离线评测集(≥100)
|
||||
- coordinator `DecideAssist` 端口 + shadow/assist 接线
|
||||
- compose 三环境声明 `JEV_DECIDE_MODE=off`
|
||||
- 测试报告与 soak 证据
|
||||
|
||||
## 非目标 / 暂缓
|
||||
|
||||
- intent-l1 / docrevision 风险分级不接线
|
||||
- `assist` 生产开启需用户在双门禁报告后单独确认(代码已实现,默认 off)
|
||||
- 不 push / 不晋升 test/main
|
||||
|
||||
## 五态(收口时更新)
|
||||
|
||||
见测试报告结论。
|
||||
@@ -20,13 +20,31 @@ severity: medium
|
||||
|
||||
用户目标及可核实来源、允许写路径、环境、交付终点、非目标。实质审查须落盘;可作为唯一主文档,无需复制任务链。关联父任务时引用其授权/认领,不另建重复认领。
|
||||
|
||||
## 问题登记与经验检索
|
||||
|
||||
涉及具体缺陷时填写 issue_id、issue_state 及 [问题台账](../../audit/ISSUES.md) 链接;已有主记录直接引用。记录检索词、命中经验和适用边界。研究 status=done 不代表 issue_state=resolved;详见 [闭环规范](../2026-09-23-issue-learning-workflow.md)。
|
||||
|
||||
## 现象
|
||||
|
||||
(可观测症状)
|
||||
(预期/实际行为、原始案例、触发条件、环境与复现结果)
|
||||
|
||||
## 根因分析
|
||||
|
||||
(证据路径、代码引用)
|
||||
Bug/系统问题按 [AGENTS 分析要求](../../../AGENTS.md#bug-与系统问题的分析要求) 填写;其他审查按实际范围裁剪。
|
||||
|
||||
(问题类别、因果链、共用机制、现有防护为何未发现;证据路径/代码引用;区分已证实、假设和证据缺口)
|
||||
|
||||
## 同类问题与影响范围
|
||||
|
||||
| 关联场景/入口 | 与原例共用的机制 | 检查方法与证据 | 判定及影响 |
|
||||
|---|---|---|---|
|
||||
| | | | 已确认缺陷 / 潜在风险 / 本次未发现异常 / 未验证 |
|
||||
|
||||
(说明排查边界、未覆盖项及理由;仅个案问题也需依据)
|
||||
|
||||
## 方案与验收
|
||||
|
||||
(处理选项、推荐理由、修复位置、实施步骤、风险;临时止血的局限和根治安排;原例/同类变体/边界与异常路径/正常行为的预期结果和验证方法。详见 [验证契约](../2026-09-21-validation-contract.md#问题修复的回归范围)。已有独立方案时链接,不复制全文;明确本轮是研究还是已授权实施。)
|
||||
|
||||
## 严重度
|
||||
|
||||
@@ -44,6 +62,10 @@ severity: medium
|
||||
|
||||
-
|
||||
|
||||
## 修复经过与经验
|
||||
|
||||
修复尝试、被否定方案、提交、部署和验收链接;未实施明确标注。得到验证后关联 lesson,或说明不新增理由;复发时解释已有防护为何失效并更新原记录。
|
||||
|
||||
## 状态与交接
|
||||
|
||||
记录实际命令、被审 SHA、结果与脱敏范围;研究完成指产物有据可审,不代表建议已实施。记录剩余工作、cleanup_owner/保留原因/复查触发,以及本地提交、集成、远端状态。会话结束不强制 done。
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user