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_013 AAI-10). OpsMemory is a module of the AdvisoryAI family, not a service: its routes are served in-process by advisoryai-web, its data lives in stellaops_advisoryai, and the opsmemory-web container, its compose key and its host project are gone. The host sources are frozen at src/__Obsoleted/AdvisoryAI/StellaOps.OpsMemory.WebService/ (CODE_OF_CONDUCT §15.4); read that directory’s AGENTS.md before 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

ThingLocation
Domain librarysrc/AdvisoryAI/__Libraries/StellaOps.OpsMemory/
HTTP surface, tenancy, policiessrc/AdvisoryAI/__Libraries/StellaOps.OpsMemory.Application/
Testssrc/AdvisoryAI/__Tests/StellaOps.OpsMemory.Tests/ (library) and src/AdvisoryAI/__Tests/StellaOps.AdvisoryAI.Tests/Integration/AdvisoryAiOpsMemory*Tests.cs (routes, authorization, tenancy)
Containernone 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
Schemaopsmemory inside the family database stellaops_advisoryai, created by the consolidated AdvisoryAI baseline
Scopesops-memory:read / ops-memory:write — canonical catalog StellaOpsScopes.cs
Retired hostsrc/__Obsoleted/AdvisoryAI/StellaOps.OpsMemory.WebService/

Docs in this directory

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”.