Advisory AI
Verified against commit
942a18727con 2026-09-26 (UTC). Re-verify:git grep -n "serviceName: \"advisoryai\"\|AddServiceDoctorChecks" -- src/AdvisoryAI/StellaOps.AdvisoryAI.WebService/Program.csandgrep -nE "^ advisoryai-(web|worker|data-init):" devops/compose/docker-compose.advisoryai.yml devops/release/bundle/docker-compose.yml.Service rows (host project, image, database and role, compose file, bundle presence, Doctor registration) are generated in
docs/architecture/service-inventory.md; where this page and the inventory differ, the inventory is authoritative.
Advisory AI is the retrieval-augmented assistant of Stella Ops. It turns advisory, VEX, policy, SBOM and finding evidence into cited summaries, conflict explanations, remediation plans, chat answers and Evidence Packs, and it hosts Knowledge Search, Unified Search and the OpsMemory decision ledger.
Purpose
Advisory AI answers operator questions from the platform’s own evidence and records what it answered. Every generated output carries its inputs’ digests and citations. Inference is pluggable: a local in-house gateway, or signed LLM provider plugin bundles admitted at startup. OpsMemory, the decision ledger with playbook suggestions, is a module of this family, not a separate service.
Deployables
| Role | Host project | Compose service | Release bundle |
|---|---|---|---|
| Web | src/AdvisoryAI/StellaOps.AdvisoryAI.WebService/ | advisoryai-web | not in devops/release/bundle/docker-compose.yml |
| Worker | src/AdvisoryAI/StellaOps.AdvisoryAI.Worker/ | advisoryai-worker | not in the bundle |
| Volume init | image stellaops/advisoryai-web | advisoryai-data-init (one-shot) | not in the bundle |
- Both roles and the init container are defined in
devops/compose/docker-compose.advisoryai.yml. That file is a family overlay outside the default compose chain; operators add it with-f. - Build keys
advisoryai-webandadvisoryai-workerlive indevops/docker/build-service-publish.shanddevops/docker/services-matrix.env(slot 45). - The release bundle does not deploy Advisory AI. The bundle’s
platformservice still namesSTELLAOPS_ADVISORYAI_URLandSTELLAOPS_OPSMEMORY_URLashttp://advisoryai.stella-ops.local, so those Platform features have no backend in a bundle-only install. - Router microservice name:
advisoryai(AddRouterMicroservicein the webProgram.cs). - Network aliases:
advisoryai.stella-ops.local,advisoryai-web.stella-ops.local,advisoryai-worker.stella-ops.local.
Database
- Database
stellaops_advisoryai, schemasadvisoryaiandopsmemory. - Connection:
STELLAOPS_POSTGRES_ADVISORYAI_CONNECTION, orPostgres:AdvisoryAI:ConnectionString. There is no generic or legacy fallback; hosts outside an explicit local harness fail closed. - Migrations:
src/AdvisoryAI/__Libraries/StellaOps.AdvisoryAI.Persistence/Migrations/, an immutable consolidated baseline001plus forward migrations.AddConsolidatedAdvisoryAiPersistenceregisters them withAddStartupMigrations; onlyadvisoryai-webcalls it. The worker uses the runtime DAL and never registers migrations. - Queue, plan cache and outputs are file-backed under
/var/lib/advisory-ai/{queue,plans,outputs}, prepared byadvisoryai-data-init.
API surface
The web host maps each family below on its legacy path and again under the native root /api/advisoryai/v1 (Endpoints/AdvisoryAiConsolidatedRouteAliases.cs).
| Family | Legacy path | Source |
|---|---|---|
| Pipeline, outputs, explain, justify, remediation, policy studio, consent, rate limits | /v1/advisory-ai/* | Program.cs |
| Conversations | /v1/advisory-ai/conversations* | Program.cs |
| Chat gateway | /api/v1/chat/* | Endpoints/ChatEndpoints.cs |
| Runs ledger | /v1/advisory-ai/runs/* | Endpoints/RunEndpoints.cs |
| Attestations | /v1/advisory-ai/attestations/*, /v1/advisory-ai/runs/{runId}/attestation | Endpoints/AttestationEndpoints.cs |
| Evidence Packs | /v1/evidence-packs*, /v1/runs/{runId}/evidence-packs | Endpoints/EvidencePackEndpoints.cs |
| Knowledge Search | /v1/advisory-ai/search, /v1/advisory-ai/index/rebuild | Endpoints/KnowledgeSearchEndpoints.cs |
| Unified Search, analytics, feedback | /v1/search/* | Endpoints/UnifiedSearchEndpoints.cs, SearchAnalyticsEndpoints.cs, SearchFeedbackEndpoints.cs |
| LLM adapters | /v1/advisory-ai/adapters/* | Endpoints/LlmAdapterEndpoints.cs |
| OpsMemory | /api/v1/opsmemory/* | src/AdvisoryAI/__Libraries/StellaOps.OpsMemory.Application/Endpoints/OpsMemoryEndpoints.cs |
| Plugin probe | /internal/plugins/status, /internal/plugins/probe | Endpoints/AdvisoryAiPluginProbeEndpoints.cs |
Scopes: advisory-ai:view, advisory-ai:operate, advisory-ai:admin, ops-memory:read, ops-memory:write (StellaOpsScopes.cs). The generated reference is api-reference.md.
Configuration
| Section | Options type |
|---|---|
AdvisoryAI (queue, storage, inference, guardrails, SBOM) | AdvisoryAiServiceOptions (StellaOps.AdvisoryAI.Hosting) |
AdvisoryAI:Chat | AdvisoryChatOptions |
AdvisoryAI:KnowledgeSearch | KnowledgeSearchOptions |
AdvisoryAI:UnifiedSearch | UnifiedSearchOptions |
AdvisoryAI:LlmProviders, AdvisoryAI:LlmProviders:RuntimePlugins | LlmProviderOptions, MountedLlmProviderRuntimePluginLoader |
AdvisoryAI:Adapters:Llm, AdvisoryAI:Adapters:Scm | plugin bridges in StellaOps.AdvisoryAI.WebService/Services/ |
AdvisoryAI:RuntimeBindings | AdvisoryAiRuntimeBindingOptions |
AdvisoryAI:EvidenceRetrieval | AdvisoryAiExplanationRuntimeBindings |
AdvisoryAI:RateLimits | RateLimitsService |
AdvisoryAi:Authority | AdvisoryAiAuthorityOptions |
Guardrail and operator knobs are described in ../policy/guides/assistant-parameters.md.
Doctor checks
AddServiceDoctorChecks("advisoryai-web")registers the standard service checks against the own database.doctor.advisoryai.retention.chat-audit,doctor.advisoryai.retention.conversation-stateanddoctor.advisoryai.retention.search-telemetry(StellaOps.AdvisoryAI.WebService/Retention/).- Registration with the Platform Doctor registry is opt-in through
Doctor:Registration:Enabled. The overlay defaults it tofalse(ADVISORYAI_DOCTOR_REGISTRATION_ENABLED).
Integrations
- The worker drains the file-backed queue with
AdvisoryTaskWorkerand reads advisory documents from the Vulnerabilities hub owner API (AdvisoryAI:DocumentProvider:Hub:BaseAddress). - Unified Search live adapters call the Findings, Vulnerabilities and Policy owner APIs (
AdvisoryAI:KnowledgeSearch:{Findings,Vex,Policy}AdapterBaseUrlin the overlay) with thestellaops-advisory-ai-internalAuthority client. - Unified audit events go to Timeline through
StellaOps.Audit.Emission.
Retention
Every table carries a retention class (SPRINT_20260916_001 RFC-13, settled under owner ruling Q-41 on 2026-09-23). advisoryai.entity_alias is derived-rebuildable: the unified indexer rewrites it on every pass and rebuild (migration 007). Idle conversations are reclaimed after 7 days with their turns (migration 006); the chat audit lineage keeps its 90-day window (migration 003). Receipt: retention-classification-verification-20260923.json. The overlay still ships SearchAnalyticsRetentionEnabled off, so the search telemetry Doctor check reports unhealthy until an operator enables it.
Retired predecessors
advisory-ai-web,advisory-ai-worker: replaced byadvisoryai-webandadvisoryai-workeron 2026-09-07 (SPRINT_20260722_013 AAI-10).opsmemory-web: host frozen atsrc/__Obsoleted/AdvisoryAI/StellaOps.OpsMemory.WebService/; the routes are served byadvisoryai-web. The former OpsMemory dossier is archived atdocs-archive/modules/opsmemory/(the 2026-09-26 retirement copy is underretired-20260926/).
Subordinate documents
| Document | Status |
|---|---|
| architecture.md | current; section 15 is the OpsMemory design |
| api-reference.md, openapi/v1.json | generated from the consolidated host |
| consolidation-design.md | design record of the AAI programme, not re-verified 2026-09-26 |
| deployment.md | current for volumes, storage and model gateway; the frontdoor route list was not re-verified 2026-09-26 |
| knowledge-search.md, unified-search-architecture.md, unified-search-ranking-benchmark.md, unified-search-release-readiness.md | design record, not re-verified 2026-09-26 |
| chat-interface.md, runs.md, orchestration-pipeline.md | design record, not re-verified 2026-09-26 |
| overview.md, architecture-detail.md | design record (2025 drafts), not re-verified 2026-09-26 |
| llm-setup-guide.md, guides/ | operator and API guides, not re-verified 2026-09-26 |
| implementation_plan.md, CHANGELOG.md | planning stub and change log |
| retention-classification-verification-20260923.json | RFC-13 receipt |
The Knowledge Search document manifest (src/AdvisoryAI/StellaOps.AdvisoryAI/KnowledgeSearch/knowledge-docs-manifest.json) records every markdown file in this directory that knowledge search indexes, by path and sha256 (pages carrying a retirement banner are skipped; the rule is in AGENTS.md). Adding, editing, moving or deleting a file here commits the regenerated manifest (python tools/scripts/validate/check-advisoryai-docs-manifest.py --write) in the same change; the Repo hygiene CI lane fails otherwise. See knowledge-search.md.
