No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
nsaspy/prolog-rlm!86
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "79-tool-effect-boundary"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Slice 1 of #79. Effectful
rlm_toolexecution crosses the #57 durable effect identity / observation boundary before the handler mutation, with the reviewed authority/identity defects hardened.Canonical path implemented
There is no second preparation after authority. A stale store namespace, execution epoch, call identity, executable fingerprint, attempt identity, mode, or parent lineage fails closed through the existing #57 ticket validation contract; authority over Ticket A is never permission to silently prepare Ticket B.
Trusted tool executor identity
Effectful tool executable semantics now include a stable code-owned executor identity digest derived from the trusted preflight/handler predicate entrypoints, plus the trusted effect class and effective execution limits. The digest is separate from:
rlm_tool;registry_Nallocation;The callable itself is not persisted or exposed to the model. The live registry handle remains metadata only for dispatch lookup.
Authority / edit invariants
approve_diff,allow_once,allow_session,dangerous.effect:readtools retain the direct fresh-read path and are not memoized through #57.Result-contract corrections
effect_store_required, preservingstore_not_openas the cause;effect_store_required;fingerprintremains scalar and usesnonewhen no authoritative fingerprint is available, never an observation dict.Tests
The original nine PR #86 behavioral/crash tests remain in
test/rlm_tool_effect_test.pland its fresh-process fixtures. Added adversarial coverage proves:registry_Nallocation is not semantic identity;effect_store_requiredwithstore_not_opencause;noneon replay) and external mutation count remains 1.Mutation-count assertions use fixture state independent from the effect ledger. The stale-ticket race uses deterministic state/epoch advancement, not sleeps.
Documentation
docs/effect-adapters.mdnow documents the prepared-ticket executor ABI, literal Ticket-A authority/admission invariant, stale-ticket failure behavior, stable trusted tool executor identity, edit behavior, and the distinction between semantic identity, adapter identity, ephemeral registry identity, model-facing names, and metadata.Non-goals
No Slice 2+ work is included:
#79 and #57 remain open. This PR does not claim #79 complete.
Verification
The branch is pushed and exact-head GitHub CI is the source of truth for final verification. Do not treat the prior head's deterministic or REAL OpenRouter result as verification of the hardened head.
Exact commands required by this slice:
REAL OpenRouter is only considered passed when the GitHub Actions job on the final exact head completes successfully.
Regression audit
perform_tool_effect(effectful tools)perform_tool_effect(read tools)model_complete/http_post)mcp_transport_exchangeNo unrelated cleanup.