Repository navigation
Prepare and activate consumer identities in place - #341
Conversation
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
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
…ewed' into agent/identity-rekey338
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
|
Review of #341 at 96c1b08 (stacked on #340), source review of the key state machine and the daemon restart path; I ran no builds. Key state machine: no blockers. Every key file is created 0600 with Required before merge:
Should fix here if small, otherwise #343: take the runtime-peers mode from the live daemon (return it in the The remaining items are in #343. Push these and I review only the delta; I merge #340 first. |
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
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
…ewed' into agent/identity-rekey338
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
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
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
96c1b08 to
cb4e01d
Compare
…ent/identity-rekey338 # Conflicts: # CHANGELOG.md # README.md # docs/errors.md # docs/json-output.md # src/control.rs # src/daemon.rs # src/identity.rs # src/main.rs # src/service.rs # tests/json_output.rs
Posted on behalf of @schickling
|
|
Round-2 delta at a8fc2f5 reviewed (source review of every item in code, then of the new tests; no builds). No blockers. I merge when Verified fixed: the Status liveness probe in Four small things remain in the new code. I would like them in one follow-up PR before the next release, not in this one:
Also tracked in #343, not required: the |
|
Merged (main 4f63a18) at a8fc2f5 with all checks green. Next: the one small follow-up PR with the four items in my review (stop-timeout recovery, prepare scratch-key cleanup, replace-only-on-parse-failure, signals during the critical window). I cut 0.9.4 with #340, #341 and that follow-up once it is merged and the Linux gate has passed, so smalltalk should pin to the 0.9.4 tag, not main. |
…6-10-30-identity-review-followups338 Identity activation follow-ups from #341 review
Problem
Replacing identity.toml by hand does not provide a durable prepared identity, guarded retries, or a restart barrier proving that the new NodeID is live. Switching before peers trust the replacement can strand a consumer.
Goal
Implement Nathan's #338 direction: prepare → publish over the old identity using the atomic expiry batch in #340 → activate. There is no dual-identity serving, no request-ID protocol, and no changes to consumer orchestration outside Fabric.
Decisions
identity.tomlremains the only active-key authority. Preparation publishes a synced 0600 pending file; activation retains a private retired copy and replaces the authoritative key by one rename under a nonblocking cross-process identity lock.upcannot load the retired identity in the stop/swap gap. A failed stop leaves the home prepared rather than swapping beneath an old serving endpoint. Replacement startup consumes the one-start handoff independently of the CLI's survival; persisted exposure configuration remains authoritative.Verification
Review repair head:
a8fc2f5c6ec5f68518fc557357fee9445d530cde. Independent reviewerFabricRekey338.IdentityReviewDeltareturned GO at this exact head before push (source review only). The new #340 fixes were merged normally, then Nathan’s owner-rebased #341 and 0.9.3 release metadata were integrated by a second ordinary merge; no force push. #340 is already on main atfbf74b700ed10080e2ca1ec50cbf19b205af59a7.New review regressions:
identity_foreground_activation_failed_swap_and_stale_socket_recovery_keep_runtime_off.pre_rename_recovery_retains_identity_lock_on_stop_and_write_failures.identity_control_wait_is_bounded_and_coded,identity_native_command_timeout_is_bounded_and_coded.identity_snapshot_abort_removes_handoff_and_unfences_exposures.cleanup_errors_and_corrupt_pending_do_not_block_status_or_prepare.private_scratch_writes_do_not_follow_the_old_shared_symlink,activation_rechecks_pending_guard_after_preservation.identity_reconcile_waits_for_fresh_daemon_before_shutdown,identity_activation_waits_for_an_already_stopping_foreground_node,identity_foreground_stop_waits_for_lifetime_lease_after_socket_refusal.identity_missing_native_tool_preserves_uninstalled_ownership.Local commands all run one at a time inside
gate-slot --class heavy, withCARGO_TARGET_DIR=/home/schickling/.cache/fabric-mesh-cargo/fabricandnix develop -c:8e532d0(same repaired code before the owner metadata merge):cargo test --locked -p fabric --lib identity::tests -- --test-threads=114 passed;--lib service::tests::identity_2 passed;--bin fabric identity_4 passed;--test json_output identity_3 passed.a8fc2f5:cargo test --locked -p fabric --bin fabric identity_ -- --test-threads=14 passed;cargo test --locked -p fabric --test json_output identity_ -- --test-threads=13 passed.cargo clean: 5.4 GiB); its parent directory is empty.Deferred #343 work was not added to this PR. The two “small if feasible” items were both implemented here: live-daemon runtime mode in the IdentitySnapshot reply plus OFF-stays-OFF coverage, and a short Status readiness poll before stopping a newly starting daemon.
Complexity
One identity module owns key state, guard/lock, retirement and restart recovery. Existing daemon teardown, service ownership, peer persistence and sync-author transition remain authoritative; no second endpoint or parallel identity policy is introduced.
Concerns
Re-keying intentionally interrupts old transport sessions. The caller must publish the prepared NodeID before activation; Fabric cannot prove that every remote peer has installed its batch.
Open questions: none. Nathan confirmed activation + 600 seconds as the retired-secret upper bound and retiring persisted dial declarations in his review.
Friction & bottlenecks
No measured runtime bottleneck claimed. Local checks are targeted and admission-gated. Review pins exact committed heads and scoped deltas; no uncommitted work is included in an attestation.
Follow-ups
Consumer-side publish/activation orchestration remains outside this repository and PR. No merge or auto-merge is requested; Nathan owns bottom-up review and merge.
References
Refs #338. Depends on #340. Direction: #338 (comment)
Posted on behalf of @schickling
agent_identitysessionagent_personaagent_supervisoragent_toolagent_tool_versionagent_runtimeagent_modelworktree