OpsMemory (pointer)
Consolidated into AdvisoryAI. There is no standalone OpsMemory dossier. The authoritative design lives in
advisory-ai/architecture.md§15 — OpsMemory (Operational Memory and RAG).
The standalone deployable is retired (2026-09-07,
SPRINT_20260722_013AAI-10). OpsMemory is a module of the AdvisoryAI family, not a service: its routes are served in-process byadvisoryai-web, its data lives instellaops_advisoryai, and theopsmemory-webcontainer, its compose key and its host project are gone. The host sources are frozen atsrc/__Obsoleted/AdvisoryAI/StellaOps.OpsMemory.WebService/(CODE_OF_CONDUCT §15.4); read that directory’sAGENTS.mdbefore assuming anything about them.
OpsMemory is a decision ledger for security operations: it records the lifecycle of a decision (situation → action → outcome) and retrieves similar precedents via array-stored cosine similarity (no pgvector).
Since 2026-09-10 (SPRINT_20260722_013 AAI-5) a decision recorded through POST /api/v1/opsmemory/decisions (or its /api/advisoryai/v1/opsmemory/... alias) carries the generated similarity vector, so the /suggestions recall can find it once an outcome is recorded. Before that date only decisions written by the chat provider had a vector; API-recorded rows persisted {} and were invisible to the recall.
Where things live
| Thing | Location |
|---|---|
| Domain library | src/AdvisoryAI/__Libraries/StellaOps.OpsMemory/ |
| HTTP surface, tenancy, policies | src/AdvisoryAI/__Libraries/StellaOps.OpsMemory.Application/ |
| Tests | src/AdvisoryAI/__Tests/StellaOps.OpsMemory.Tests/ (library) and src/AdvisoryAI/__Tests/StellaOps.AdvisoryAI.Tests/Integration/AdvisoryAiOpsMemory*Tests.cs (routes, authorization, tenancy) |
| Container | none of its own — served by advisoryai-web (devops/compose/docker-compose.advisoryai.yml) |
| Routes | /api/v1/opsmemory/* and /api/advisoryai/v1/opsmemory/*, both on advisoryai-web |
| Schema | opsmemory inside the family database stellaops_advisoryai, created by the consolidated AdvisoryAI baseline |
| Scopes | ops-memory:read / ops-memory:write — canonical catalog StellaOpsScopes.cs |
| Retired host | src/__Obsoleted/AdvisoryAI/StellaOps.OpsMemory.WebService/ |
Docs in this directory
api-reference.md+openapi/— autogenerated from the service’s OpenAPI document, and generated while the standalone host still existed. They describe the wire shape only; they are not a dossier, they do not carry the auth/tenancy contract, and their server URL still names the retired host. The paths themselves are unchanged and are served byadvisoryai-web.
Tenancy contract (read before trusting the api-reference)
The generated api-reference.md shows tenantId as a plain query parameter. That is not the isolation key. Since Sprint SPRINT_20260712_001 (TEN-1) the OpsMemory route groups carry .RequireTenant() and every handler isolates on the tenant resolved from the authenticated stellaops:tenant claim; the tenantId query parameter and the RecordDecisionRequest.TenantId body field are optional conflict checks only (disagreeing with the claim → 400 tenant_conflict; no tenant → 400 tenant_missing). Since the 2026-09-07 retirement that contract is asserted on the consolidated host by StellaOps.AdvisoryAI.Tests.Integration.AdvisoryAiOpsMemoryTenancyTests — 15 facts across all six routes, read and write paths, on both roots. See advisory-ai/architecture.md §15 “Tenancy contract”.
