Task 51 — Shared memory sync
Phase: 4
Initiative: 21
Status: done
Owner: —
Slug: shared-memory-sync
Goal
Избранные факты и навыки синхронизируются только между trusted агентами: explicit namespaces, provenance, conflict resolution, TTL, encryption in transit, per-field data-classification policy.
Acceptance criteria
SharedMemorySyncConfiginAppConfig.cs: Enabled, DefaultTtlMinutes, MaxFactsPerAgent, EncryptionRequired, MaxAllowedSensitivity- Extend
SharedMemoryFactwithTtlMinutes,ExpiresAt,CreatedAt,Sensitivity,Source,Tagsfields PublishFactAsyncacceptsTtlMinutes,Sensitivity,Source,TagsparametersReceiveFact/LoadLocalFactsfilter out expired facts (TTL enforcement)GetLocalFacts/GetFactsForAgentenforce sensitivity filter (maxAllowedSensitivity from config)SharedMemorySyncConfigregistered inMeshServiceExtensions.AddMeshServices- Unit tests: TTL expiry filtering, sensitivity filtering, provenance fields
dotnet build+dotnet testpass
Implementation notes
2026-08-13
SharedMemorySync.cs — extended with full task_051 requirements:
SharedMemorySensitivityenum added (Public/Internal/Sensitive/Restricted)SharedMemoryFactextended:TtlMinutes,ExpiresAt,CreatedAt,Sensitivity,Source,Tags;IsExpiredhelperPublishFactAsyncnow acceptsttlMinutes,sensitivity,source,tagsparameters; uses config defaultsReceiveFactrejects Restricted facts at the gate; enforcesMaxAllowedSensitivity; rejects expired factsLoadLocalFacts(includeExpired)— prunes expired facts on readGetLocalFacts/GetFactsForAgent— sensitivity filter viaIsSensitivityAllowed()SharedMemorySyncconstructor now takesSharedMemorySyncConfigIntentEnvelopeusages updated to recommended object initializer pattern
Config/AppConfig.cs — added SharedMemorySyncConfig:
Enabled(bool, default false),DefaultTtlMinutes(1440),MaxFactsPerAgent(500),EncryptionRequired(true),MaxAllowedSensitivity(“Sensitive”),SyncIntervalMinutes(30)
MeshServiceExtensions.cs — wired SharedMemorySyncConfig into DI
tests/.../SharedMemorySyncTests.cs — 21 tests (was 8):
- TTL tests: expiry on publish/receive, default TTL from config, prune expired on read
- Sensitivity tests: Restricted blocked, excessive sensitivity rejected, sensitivity filtering
- Provenance tests: source/tags/createdAt/updatedAt fields
- Max facts limit, JSON round-trip
Validation:
dotnet build src/agent/Hercules.csproj -c Release → 0 errors
dotnet test --filter "FullyQualifiedName~SharedMemorySync" -c Release → 21/21 pass
dotnet test tests/Hercules.Agent.Tests/ -c Release → 1353/1361 pass (8 pre-existing failures unchanged)
Scope / Likely files
src/agent/Mesh/SharedMemorySync.cs
Dependencies
- блокирует / опирается на: task_011 — layered-memory
- блокирует / опирается на: task_014 — audit-privacy
- блокирует / опирается на: task_040 — trust-admission
Risks / Rollback
Утечка чувствительных данных; data classification enforcement.
Links
- Backlog: ../backlog.md
- Roadmap (EN): ../../ROADMAP-EN.md
- Roadmap (RU): ../../ROADMAP-RU.md