Harden durable effect substrate across identity, retention, and recovery #83
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!83
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/issue-80-effect-substrate-adversarial-hardening"
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?
Closes #80
Closes #81
Closes #82
Refs #57 #79 #53 #54 #44 #45.
Summary
This hardens the generic effect substrate merged in #78 without expanding into #79 canonical provider/tool/MCP adoption.
effect_prepare/5;abandonedterminal rather than retry authorization;The implementation follows the logic-native durable control-plane direction in
research/RLM-RESEARCH-010-logic-native-control-plane.org: durable state-machine facts remain authoritative, host-controlled authority stays separate, and uncertain external outcomes are never converted into implicit permission to execute again. The four authority tiers remain unchanged and #54 retains execute → Future → sync-await.Adversarial verification
New deterministic tests cover:
Local verification used SWI-Prolog 9.2.9 for module loading, runtime checks, focused restart/crash tests, and 30 repeated adversarial race-suite runs. Existing tests that use SWI 10 dict-function expansion inside
assertion/1are not portable to that fallback runtime, so this PR's canonical SWI 10 GitHub Actions suite is the merge gate.Compatibility and scope
legacy_effect_store_requires_migration; no unsafe silent migration is attempted.Second adversarial review — final head
ca6fa05b920c28bc7eff2fc90bc9ea41a7a9d60aI re-reviewed the final implementation against #80/#81/#82 after the initial canonical CI pass.
The review specifically rechecked lock ordering and atomicity around prepare/admit/cancel/dispatch/observe/resolve/prune; epoch-advance-before-delete crash behavior; store namespace restart and alias behavior; lease cleanup and store-switch rejection; adapter identity trust/override behavior; local-observation reconciliation; event projection idempotence; and legacy-store failure mode.
That pass found coverage omissions against the literal acceptance matrix. Commit
ca6fa05adds deterministic barrier cases for prune racing dispatch, observation, pre-dispatch cancellation, and indeterminate resolution; prune racing preparation; namespace persistence through relative/absolute reopen; and cross-store reconciliation refusal. The 18-case adversarial suite passed 20 consecutive local runs after the addition.No unresolved correctness, authority-boundary, retention, or scope findings remain in this review. #79 is still intentionally untouched and #57 must remain open. Merge remains gated on both jobs for the exact final head, including REAL OpenRouter.