Library writes that took in part are partial, read back #41

Manually merged
vinny merged 0 commits from vinny/library-partial into master 2026-10-14 17:05:34 -04:00 AGit
Owner

Part of #23.

When CMO refuses some units but takes others, the tester's missions.assign_units answers with ok false, ordered true, a refused list and an expect for what took. CMOnet recorded that as rejected, saying "no requested effect was accepted", and released the units' reservations while the assignment stood.

What changes:

  • library/runtime.py: refusal(result) recognises a write that took in part. The read-back observation carries its refusal.
  • RuntimePort._library_write: sends such a result on to its read-back, like any accepted write.
  • The coordinator: when the read-back shows what took, the call is partial. It has one evidenced completed effect, one rejected effect with CMO's refusal, and reconcile_before_retry advice. When the read-back doesn't show it, the call is outcome_unknown. Partial calls refresh the observation families like completed ones.

Tests: tests/library/test_library.py assigns two units where CMO refuses one. The call comes out partial, its read-back ran, and no reservation is left.

Still to do: the tester tools that error() after an earlier step took are to answer this same way, in a tester change and a later library sync.

🤖 Generated with Claude Code

Part of #23. When CMO refuses some units but takes others, the tester's `missions.assign_units` answers with `ok` false, `ordered` true, a `refused` list and an `expect` for what took. CMOnet recorded that as rejected, saying "no requested effect was accepted", and released the units' reservations while the assignment stood. What changes: - **`library/runtime.py`:** `refusal(result)` recognises a write that took in part. The read-back observation carries its refusal. - **`RuntimePort._library_write`:** sends such a result on to its read-back, like any accepted write. - **The coordinator:** when the read-back shows what took, the call is `partial`. It has one evidenced completed effect, one rejected effect with CMO's refusal, and `reconcile_before_retry` advice. When the read-back doesn't show it, the call is `outcome_unknown`. Partial calls refresh the observation families like completed ones. Tests: `tests/library/test_library.py` assigns two units where CMO refuses one. The call comes out `partial`, its read-back ran, and no reservation is left. Still to do: the tester tools that `error()` after an earlier step took are to answer this same way, in a tester change and a later library sync. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The tester's missions.assign_units answers ok false and ordered true when
CMO refused some units but took the others, with expect for what took.
CMOnet recorded that as refused, "no requested effect was accepted", and
released the units while the assignment stood. Such a result now goes to
its read-back like any other write; when the read-back shows what took,
the call is partial: one evidenced completed effect and one rejected, with
CMO's refusal and reconcile-before-retry advice. If the read-back does not
show it, the outcome is unknown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Version 0.7.25 (library-partial)
Some checks failed
check / check (ubuntu-latest) (push) Has been cancelled
check / check (windows-latest) (push) Has been cancelled
check / check (ubuntu-latest) (pull_request) Has been cancelled
check / check (windows-latest) (pull_request) Has been cancelled
5e5e10730c
vinny manually merged commit 5e5e10730c into master 2026-10-14 17:05:34 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
vinny/CMOnet!41
No description provided.