docs(contributing): mark GH-C07 landed and point at its regression - #5113
huangruiteng merged 1 commit into
Conversation
The state entry still asked for a concurrent Todo add/update regression over the per-Goal lock, but loopx-project#4048 (merged 2026-09-07) shipped exactly that: `tests/test_todo_write_serialization.py` drives the real `add_goal_todo` and `update_goal_todo` writers against one state file through the shared legacy writer fence, and the global registry keeps its own serialization coverage. An entry that still reads as available costs contributors time: this slice was investigated as open work before the shipped regression was found. Record the landing and name the command that proves it. Validation: `pytest -q tests/test_todo_write_serialization.py tests/test_global_registry_write_serialization.py` -> 8 passed, 1 skipped; `loopx check --scan-path docs/development/contributor-tasks.md` -> errors=0 with a clean public boundary scan. Refs loopx-project#3893. Signed-off-by: kokokoXUY <13682395396@163.com>
|
Queue note: #5080 ( |
huangruiteng
left a comment
There was a problem hiding this comment.
APPROVE:未发现阻塞问题。已独立核对完整差异、合并事实和真实调用链,并在精确 head 84179d12b7ba01739358d609e51fd6b54c2a880a 运行本地验证;本次不执行合并。
动机
GH-C07 旧行仍邀请贡献者增加并发 Todo add/update 回归,但 #4048 已于 2026-09-07 合并。我核对了 GitHub 合并记录、该合并提交在当前主干中的祖先关系,以及主干仍保留的测试和调用边界。因此这不是用“已合并”替代验收,而是消除会诱导重复实现的过期任务描述。本 PR 完成的是这一个公共任务行的纠偏,不宣称整个状态存储或并发体系已完成。
改动思路
沿用现有贡献任务板,把历史落地事实和可重跑证据放回原 GH-C07 行,不新增任务身份或第二份运行时权威。测试调用真实 add_goal_todo / update_goal_todo;当前 legacy_todo_write_transaction 在读取和写回期间持有 per-Goal 协调锁与状态文件锁。刷新、bootstrap、反馈、事件写入等相邻调用点也已核对其持锁边界或明确的调用者锁契约。
正向路径是:贡献者阅读任务行 → 找到合并记录和所属回归 → 用兼容的 checkout 环境验证 → 不再重复领取已交付维度。并发测试里的锁被替换为确定性线程锁;它证明真实 mutation 的持锁次序及最终双写保留,不单独证明所有 OS / provider 的锁实现。
具体改动
关键内容讲解
docs/development/contributor-tasks.md:165:从仍可领取的“增加并发回归”改为Landed: #4048,说明其实际交付是已有 add/update 回归,而不是声称本 PR 修改了生产锁实现。- 同一行保留全局 registry 的独立覆盖,并将验证入口替换为两份所属测试;核对了
atomic_write_state_text的 sibling-lock 契约及调用边界,避免把原子替换错误等同于 read-modify-write 串行化。 - 完整差异只有一个文档行,+1/-1;没有运行时代码、schema、CLI、自动安装的 Agent 指令或权限变更,也没有改变公共首屏。
对主干的风险
本地在该 head 的 Python 3.13 checkout 环境执行:
uv run --extra test python -m pytest -q -rs tests/test_todo_write_serialization.py tests/test_global_registry_write_serialization.py:9 passed,含并发双方结果保留、全局锁内读写和真实子进程覆盖。uv run --extra test python examples/docs-governance-smoke.py:通过。- CI 路径分类器确认
core_tests=false;分类器自身 7 项测试、DCO trailer 核对和git diff --check均通过。 - 文档 public-boundary scan:1 文件 clean、errors=0。空合成 runtime 的未初始化提示不是文档问题。按当前 review 配置未查询或等待远端 CI。
剩余风险主要是文档集成:#5114 携带完全相同的 GH-C07 行;#5080 在 006d9edcd4fab829722476933011accdb7131bd6 重排任务板时,仍将 GH-C07 写为缺少 per-goal 保护及回归。后者若随后合并,应保留这里已验证的事实,不能恢复旧任务。这是另一候选的集成风险,不是本 diff 的缺陷。
我的整体评价
long_horizon=improved:清除重复工作的入口;user_experience=improved:读者得到落地事实和可执行验证,而非过期邀请。没有改变调度、Todo 机器状态、默认开关、强制义务或 actor 权限,相关运行时审查项不适用。
未来向简化检查已考虑任务板维护边界:直接更新现有行足够,不值得加入自动同步框架或再造状态存储;与 #5080 的布局调整集成时应复用同一任务身份。尚未做跨平台/全 provider 锁资格验证,但本 PR 没有修改这些实现,不能把该未测范围当作阻塞此事实纠偏的理由。
English verdict: APPROVE - The GH-C07 landing and regression references are independently verified; no blocking finding on this exact docs-only head.
Goal And Delivered Outcome
main.Scope And Continuation
Landed: #4048 (merged 2026-09-07), namestests/test_todo_write_serialization.pyand the shared legacy writer fence it drives, keeps the global-registry coverage reference, and replaces the validation cell with the command that actually proves the dimension.Validation
84179d12b7ba01739358d609e51fd6b54c2a880aunitpassedpytest -q tests/test_todo_write_serialization.py tests/test_global_registry_write_serialization.py→ 8 passed, 1 skipped. That is the command the row now cites.staticpassedloopx check --scan-path docs/development/contributor-tasks.md→errors=0with a clean public boundary scan. The two warnings are a missing local registry file on this host and are identical before and after the change.mainbefore claiming the landing, rather than trusting the issue text — that text still saysadd_goal_todoandupdate_goal_todo"now both holdexclusive_file_lock", which no longer describes where the lock lives, so the row names the legacy writer fence instead of the helper.Frontend / Visual Evidence
Not applicable: contributor documentation only.