diff --git a/docs/book/chapters/core-state-machines.md b/docs/book/chapters/core-state-machines.md index a081ecf84..bffa7a08b 100644 --- a/docs/book/chapters/core-state-machines.md +++ b/docs/book/chapters/core-state-machines.md @@ -203,7 +203,7 @@ flowchart TD [`event_writeback.py`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/todos/event_writeback.py)、 [`local_state_write_correctness.py`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/runtime/local_state_write_correctness.py)、 [`authority_store.ts`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/coordination/authority_store.ts)、 -[`coordination/executor.py`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/coordination/executor.py) +[`coordination/authority_core.py`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/coordination/authority_core.py) 和 [`settlement.py`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/turn_driver/settlement.py)。 所以正确流程是“读 basis -> 提案 -> 验证/guard -> guarded commit -> 事件或 receipt -> 回读”,而不是 diff --git a/docs/book/en/chapters/core-state-machines.md b/docs/book/en/chapters/core-state-machines.md index ae5ddc02e..a145e1785 100644 --- a/docs/book/en/chapters/core-state-machines.md +++ b/docs/book/en/chapters/core-state-machines.md @@ -222,7 +222,7 @@ The matching source anchors are [`event_writeback.py`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/todos/event_writeback.py), [`local_state_write_correctness.py`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/runtime/local_state_write_correctness.py), [`authority_store.ts`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/coordination/authority_store.ts), -[`coordination/executor.py`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/coordination/executor.py), +[`coordination/authority_core.py`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/coordination/authority_core.py), and [`settlement.py`](https://github.com/huangruiteng/loopx/blob/main/loopx/control_plane/turn_driver/settlement.py). The real pattern is “read basis -> propose -> validate/guard -> guarded commit -> event or receipt -> diff --git a/docs/concepts/interaction-pattern-catalog.md b/docs/concepts/interaction-pattern-catalog.md index 06b31b652..5ceb68d5f 100644 --- a/docs/concepts/interaction-pattern-catalog.md +++ b/docs/concepts/interaction-pattern-catalog.md @@ -2555,12 +2555,11 @@ keep "we never heard back" from becoming "nothing happened". second time". 2. **Recover by readback, not by blind retry.** A re-sent operation returns the original receipt rather than a second effect: - `tests/control_plane/test_coordination_recoverable_execution.py:693` asserts - `result == "already_applied"` with an identical `original_receipt`, and - `:694` that the head's `receipt_index` holds exactly one entry per operation - id. `tests/control_plane/test_coordination_provider_parity.py:222` makes - `operation_identity_reuse` a dimension every coordination provider must - answer the same way (expectation recorded at `:308`). + `tests/control_plane_ts/authority_store_conformance.ts:833` replays the same + `archive-completed` request and asserts the second call reports `replayed` + with an identical `original_receipt` and an unchanged authority (`:836`-`:839`), + while the same operation id carrying a changed intent is rejected with + `coordination_operation_identity_mismatch` (`:843`). 3. **Publish the material an authoritative record points at before, or under the same identity as, that record.** A committed pointer with no backing content is worse than no commit, because every later reader must guess. `#5007` is @@ -2620,10 +2619,10 @@ flowchart TD **Validation** -- `tests/control_plane/test_coordination_provider_parity.py` keeps - `operation_identity_reuse` honest across every provider arm, and - `tests/control_plane/test_coordination_recoverable_execution.py` pins the - replay-and-receipt path for leases and renewals. +- `tests/control_plane_ts/authority_store_conformance.ts` keeps operation + identity honest across every provider arm — the shared suite is registered + once per store — and pins the replay-and-receipt path together with the + lease-fenced write paths. - `tests/cli_commands/test_source_session_lifetime.py` pins the negative twin: one identity may not carry two different intents. - `loopx/control_plane/coordination/local_authority_shadow_adapter.py` and @@ -2915,7 +2914,7 @@ from a meta/controller poll that was only authorized to observe. **Validation** - `regression/external-evidence-observation-real-codex.py` -- `examples/benchmark-lifecycle-state-smoke.py` +- `deprecate/benchmark-legacy/examples/benchmark-lifecycle-state-smoke.py` (retired) - `docs/state-interaction-model.md` #### IP-015 Benchmark Lifecycle Countability