Repository navigation
Expire runtime peer records through atomic overlap batches - #340
Conversation
|
Review of #340 at 1b54624. I verified the following in code (source review; I ran no builds). Contract: OK. A deadline must be strictly in the future and at most 600 s ahead ( Two changes block the merge:
Also required, tests: the Small, in this PR: reserve the Tracked in #343, not blocking: the O(deadlines x peers) compose on every read; mass expiry holding Once the two blockers and the test fixes are pushed I review only the delta and merge, then #341. |
…ng expiry agent-identity: agent/dotfiles/fabric-mesh agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: anthropic/claude-opus-5-5
agent-identity: agent/dotfiles/fabric-mesh agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: anthropic/claude-opus-5-5
…eplay agent-identity: agent/dotfiles/fabric-mesh agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: anthropic/claude-opus-5-5
agent-identity: agent/dotfiles/fabric-mesh agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: anthropic/claude-opus-5-5
|
Delta reviewed at 18c2134 and merged (main fbf74b7). Both blockers are fixed in code: #341 is next: it is now based on main, and my review items there are still open. |
Posted on behalf of @schickling
|
Problem
An old runtime-peer record cannot currently be given a bounded, immutable lifetime. A consumer publishing its prepared NodeID therefore cannot atomically install the new exact grants and schedule retirement of the old record before switching identities.
Goal
Implement the runtime-peer expiry slice from Nathan's decided #338 direction: one atomic add-next/set-grants/expire-old batch, with ordinary revocation and observable cancellation receipts when the old record expires. No dual-identity serving.
Decisions
set_expiryaccepts strictly future signed Unix seconds, at most 600 seconds ahead. The first deadline is immutable; setting exactly the same deadline is a no-op, not a renewal.expiry_request_idin runtime provenance. Expiry uses existing revocation/cancellation machinery and preserves access justified by static or other-owner sources.Verification
Review repair head:
18c2134999897052c30d57169e3fcdacc967df6f. Independent reviewerFabricRekey338.ExpiryReviewDeltareturned GO at that exact head before push; source review only.Local:
gate-slot --class heavy -- env CARGO_TARGET_DIR=/home/schickling/.cache/fabric-mesh-cargo/fabric nix develop -c cargo test --locked -p fabric --lib expiry -- --test-threads=1— 22 passed, clean exact head.Review regression tests:
expiry_receipt_capacity_accounts_for_reservations_and_preserves_withdrawal_reserve;simultaneous_expiry_receipts_name_only_their_own_cancelled_work;fresh_record_expiry_accepts_only_the_next_one_through_600_seconds;expiry_is_bounded_immutable_and_overlap_batch_replays_without_extension(changed-deadline replay);expiry_request_id_prefix_is_system_only_before_and_after_cleanup.Hosted CI: test success; Nix success. No watches used for this revision. Nathan merged this exact repair head in
fbf74b700ed10080e2ca1ec50cbf19b205af59a7; ancestry was checked before updating #341. No follow-up PR or duplicate A fixes are needed.Complexity
Timed policy views are needed because delayed disk I/O must not extend authorization. They are prevalidated and selected without hot-path allocation; expiry persistence continues through the existing transaction/cancellation path.
Concerns
Expiry is per owner record, not a blanket denial of a NodeID: independent static or other-owner trust remains effective. Clock rollback conservatively retires expiring records rather than extending their lifetime.
Open questions: none for this runtime-peer slice.
Friction & bottlenecks
No measured build or runtime bottleneck claimed. Local proofs are targeted and admission-gated; hosted CI is the merge proof.
Follow-ups
The stacked identity prepare/activate/status PR consumes this publish-before-activation contract. Consumer orchestration is outside this PR.
References
Refs #338. Direction: #338 (comment)
Posted on behalf of @schickling
agent_identitysessionagent_personaagent_supervisoragent_toolagent_tool_versionagent_runtimeagent_modelworktree