feat(harness): persist shared Agent Map proposals - #775
Conversation
Closes: SAP-3059
Refs: SAP-3059
…hared-versioned-map-proposal
Review — PR #775 (round 1)No confidentiality problems: the changeset and new comments are provider-neutral, name no company but Sapiom, and the 1. Lockfile drops an integrity hash (supply chain)
2. Receipts grow without bound, and cannot be pruned
Failure: a project whose shared proposal accumulates a few thousand operations turns each single-node edit into a multi-MB rewrite; once a write exceeds the lock timeout, both Worse, the obvious fix is blocked by design: stale-write conflict detection reads the receipt log ( 3.
|
Refs: SAP-3059
Review — PR #775 (round 2, delta since
|
Refs: SAP-3059
|
/review |
Review — PR #775 (round 3, delta since
|
Refs: SAP-3059
|
/review |
Review — PR #775 (round 4, delta since
|
Refs: SAP-3059
Summary
Prepare the one project-wide Agent Map proposal as a strict crash-atomic aggregate for the SAP-3060 MCP transport. Typed batches allocate stable IDs, retain server-authored attribution, conservatively rebase disjoint stale writes from authoritative proposal history, and expose post-commit accepted deltas through a transport-neutral callback.
This PR is stacked on PR #774. Its base is intentionally the SAP-3061 branch so this diff contains only SAP-3059.
Changes
DurableFileLockand use it for catalog and per-project map stateAgentMapProposalServicewith atomic validation/materialization, trusted attribution, canonical idempotent replay, stale conflict preview/rebase, and existing-ID collision fencingrequest_id_expiredplusnew_request@electron/node-gypintegrity hash while retaining only intentional uuid lock changesReview refinements
AgentMapWorkspaceResponsean alias ofAgentMapReadSnapshotTesting
pnpm --filter @sapiom/harness typecheckpnpm --filter @sapiom/harness lintpnpm --filter @sapiom/harness build:serverpnpm --filter @sapiom/harness build:weband no Zod runtime symbols in the emitted JSgit diff --checkRelated
Checklist