From 84179d12b7ba01739358d609e51fd6b54c2a880a Mon Sep 17 00:00:00 2001 From: kokokoXUY <13682395396@163.com> Date: Sat, 26 Sep 2026 23:07:18 +0800 Subject: [PATCH] docs(contributing): mark GH-C07 landed and point at its regression The state entry still asked for a concurrent Todo add/update regression over the per-Goal lock, but #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 #3893. Signed-off-by: kokokoXUY <13682395396@163.com> --- docs/development/contributor-tasks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/contributor-tasks.md b/docs/development/contributor-tasks.md index 31f58adbf6..74bcd6725e 100644 --- a/docs/development/contributor-tasks.md +++ b/docs/development/contributor-tasks.md @@ -162,7 +162,7 @@ and keep the first PR as a narrow slice. | ID | Area | Task | Validation | | --- | --- | --- | --- | -| GH-C07 | state | Global registry sync now writes inside a lock (`tests/test_global_registry_write_serialization.py`); extend the same lock or optimistic-revision guard to per-goal todo/refresh/history writers and include a concurrent todo add/update regression. | New concurrency regression plus `python3 -m py_compile loopx/*.py` | +| GH-C07 | state | Landed: #4048 (merged 2026-09-07) added `tests/test_todo_write_serialization.py`, a deterministic concurrent add/update regression that drives the real `add_goal_todo` and `update_goal_todo` writers against one state file through the shared legacy writer fence, so a second mutation can no longer be lost. The global registry keeps its own serialization coverage in `tests/test_global_registry_write_serialization.py`, and the remaining `atomic_write_state_text` call sites either hold the sibling lock or document that contract on the caller. | `pytest -q tests/test_todo_write_serialization.py tests/test_global_registry_write_serialization.py` | | GH-C47 | state | Task leases now back Turn fencing and typed CLI acquire/release, the OpenCode 2 goal worker fences its own live worker lease, a lease generation ABA fix is shipped (#3393), and a Pi `loopx_task_lease` facade over the shipped `task_lease_v0` CLI merged (#3559, closing #3549); claim coordination lives there. Adopt the same facade in one more real host integration (for example TraeX): advertise the capability explicitly, preserve soft-claim routing, expose acquire/renew/transfer/release outcomes, and prove overlapping write scopes fail without making `quota should-run` enforce undeclared lease authority. | `python3 examples/control_plane/task-lease-runtime-smoke.py`, `python3 -m pytest -q tests/control_plane/test_task_lease.py tests/test_loopx_turn_driver.py`, and a host-focused fake fixture | ### Design / RFC