Features

Every feature below was verified in the published code of the Open edition, with its status in the Compact profile. Optional or disabled functions are marked as such.

Scope: ragatm-open, ai-gateway-open and ai-gateway-pool-open repositories, main branch, verified on 11 November 2026. Vision, OCR and audio capabilities are detailed on the Multimodal AI page. Multimodal AI · Formats

Documents, retrieval and answers

Spaces, users, ingestion, indexing, retrieval, generation and citations.

  • Enabled by default 46
  • Configurable 7
  • Disabled 1
  • Unavailable 1

Enabled by default in the Compact profile

  • Workspaces and document spaces (multi-tenant)
  • Strict isolation between document spaces
  • User accounts: invitations, password reset, no public sign-up
  • Mandatory TOTP second factor
  • Roles and permissions per workspace
  • Platform admin console and Django admin
  • Workspace and core administration screens
  • Shared business corpus
  • Document import (default formats)
  • Asynchronous ingestion (Celery)
  • Re-import and deduplication
  • Document deletion and space purge
  • Reindexing (durable jobs)
  • Document and chunk metadata
  • Native text extraction
  • Chunking
  • Governed embeddings via the gateway (768 dimensions)
  • Vector search (pgvector)
  • Lexical search (PostgreSQL FTS)
  • Hybrid fusion (RRF)
  • Candidate diversification
  • Cross-encoder reranking via the gateway
  • Retrieval threshold and answer decision
  • Generation via the gateway
  • Streamed answers (SSE)
  • Citations and source format
  • Grounding in sources and abstention
  • Conversation threads and memory
  • Document and corpus summaries
  • Global corpus analysis (jobs)
  • Deterministic chat responses (interceptors)
  • Document viewer
  • User feedback and incidents
  • Audit logs and retention
  • Diagnostics
  • Backup and restore
  • Bilingual interface (FR/EN)
  • REST API v1 and OpenAPI contract
  • Rate limiting
  • Security headers and cookies
  • Request identifier (X-Request-ID)
  • Explicit errors when a dependency is unavailable
  • Document quotas per workspace
  • “Document capabilities” screen and gateway probes
  • Retrieval observability and operations metrics
  • Egress policy (fail-closed)

Configurable, optional or absent

  • Owner scopes and per-space access control Configurable
  • Legacy in-process reranking Disabled
  • Answer-language policy Configurable
  • Action router Configurable
  • Deterministic tabular queries (DuckDB) Configurable
  • Dynamic configuration (core overlay) Configurable
  • .eml e-mails (opt-in) and .msg (removed) Configurable
  • Mailbox connectors Unavailable
  • Query rewriting by the model Configurable
Show all 55 features, with limits and evidence
Documents, retrieval and answers
FeatureStatusDescription and limitsDetails
Workspaces and document spaces (multi-tenant)Enabled by default

A workspace (tenant) holds members and RagSpaces; each RagSpace owns its documents, chunks and LLM/embedding configuration.

Soft deletion of a space (deleted_at); hard purge on DELETE.

Details
Requires
PostgreSQL+pgvector
Enabled in Compact
Yes
Qualification
Exercised by the end-to-end Compact qualification (e2e_qualification.py script).
Sources
Strict isolation between document spacesEnabled by default

rag_space is duplicated on every Chunk and filtered by a double SQL clause; access re-checked before Core calls; anti-enumeration (404).

Owner-level scoping inside a workspace is optional (see "owner scopes").

Details
Enabled in Compact
Yes
Qualification
Isolation checks of the Compact qualification; test "no protected route answers before MFA".
Sources
User accounts: invitations, password reset, no public sign-upEnabled by default

Accounts created by one-shot invitation links (SHA-256 hashed) or admin bootstrap; anti-enumeration password reset; no public sign-up.

Sending e-mail requires an SMTP configuration; by default messages go to the console.

Details
Requires
EMAIL_BACKEND for e-mail delivery (default: console; invitation links can be copied)
Setting
WORKSPACE_INVITATIONS_V2_ENABLED
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Mandatory TOTP second factorEnabled by default

Mandatory TOTP second factor (django-otp) for every account, no opt-out flag; django-axes lockout, anti-replay, backup tokens, OTP-protected Django admin.

TOTP and static backup tokens only; no WebAuthn or SMS.

Details
Setting
MFA_CHALLENGE_TTL_SECONDS, MFA_CHALLENGE_MAX_ATTEMPTS (tuning only)
Enabled in Compact
Yes
Qualification
Documented test: no protected route answers before the second factor.
Sources
Roles and permissions per workspaceEnabled by default

Roles owner/admin/member/viewer; viewer read-only; owner/admin manage members, RagSpaces, LLM settings and audit; superuser is orthogonal (shared corpus, config).

The last owner cannot be removed; an admin cannot remove an owner.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Platform admin console and Django adminEnabled by default

Cross-workspace governance (/api/v1/platform/*, /platform-admin screen): users, workspaces, owners, diagnostics; no content access; Django admin behind OTP.

The superuser has no implicit access to content.

Details
Requires
superuser (is_superuser)
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Workspace and core administration screensEnabled by default

Screens /workspace-admin (members, RagSpaces, invitations), /admin-core (Core config, document capabilities), /ragatm-admin (shared corpus).

Gateway probes from the console are off by default.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Shared business corpusEnabled by default

Shared document layer across workspaces (domain_corpus_* tables), superuser-administered, synchronous ingestion, bi-source retrieval with isolation preserved.

The shared corpus does not take part in answers by default (calibrated admission).

Details
Requires
superuser for administration · explicit corpus access (WorkspaceDomainCorpusAccess)
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Document import (default formats)Enabled by default

Upload via /api/v1/documents/upload/ with content sniffing; default formats PDF, DOCX, PPTX, XLSX, CSV, TXT, MD, HTML, JPEG/PNG/TIFF/WEBP images; 50 MB limit; sha256 dedup.

Images are accepted at upload but fail extraction in Compact (no OCR). Upload limit: 50 MB in Compact (25 MB default elsewhere in the documentation).

Details
Setting
UPLOAD_MAX_FILE_SIZE_MB (50), DOCUMENT_*_ENABLED
Enabled in Compact
Yes
Qualification
Exercised by the end-to-end Compact qualification (e2e_qualification.py script).
Sources
Asynchronous ingestion (Celery)Enabled by default

Ingestion through a Celery/Redis worker; Compact sets RAG_INGEST_ASYNC_DEFAULT=1; OCR/Excel/PPTX/DXF/IFC force async; broker down → 503 dependency_unavailable.

Single worker, concurrency 2 in Compact.

Details
Requires
Redis · worker service
Setting
RAG_INGEST_ASYNC_DEFAULT
Enabled in Compact
Yes
Qualification
Ingestion of 8 documents measured during the Compact qualification.
Sources
Re-import and deduplicationEnabled by default

Dedup by (rag_space, sha256) excluding FAILED; a duplicate creates no file or task; the same file can be imported in another space.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
Exercised by the end-to-end Compact qualification (e2e_qualification.py script).
Sources
Document deletion and space purgeEnabled by default

Hard immediate document deletion (409 while ingesting); RagSpace DELETE = irreversible purge (documents, chunks, vectors, threads) keeping ActionAuditEvent.

No recycle bin.

Details
Enabled in Compact
Yes
Qualification
Exercised by the end-to-end Compact qualification (e2e_qualification.py script).
Sources
Reindexing (durable jobs)Enabled by default

Per-RagSpace reindex jobs on the reindex queue, retry of failed documents, strategies auto / force_ocr / extended_timeout; no implicit reindex on model change.

Changing the embedding model requires an explicit reindex.

Details
Requires
worker consuming the reindex queue
Setting
REINDEX_* settings
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Document and chunk metadataEnabled by default

Document: filename, sniffed content_type, size, sha256, document_date, status, JSON meta, embedding provider/model, reindex_required…; Chunk: chunk_index, page_number, pipeline_id/family, meta (per-format locators).

The document "confidentiality" field is inert (read by no code).

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Native text extractionEnabled by default

pypdf (+pdfminer/pdfplumber fallbacks), DOCX via stdlib, python-pptx, openpyxl, csv/html stdlib; scanned PDF without OCR → explicit failure pdf_scanned_requires_ocr.

DOCX: headers, footers, footnotes, comments and text boxes not extracted; PyMuPDF engine absent (AGPL).

Details
Setting
DOCUMENT_EXTRACTION_TIMEOUT_SECONDS (180), DOCUMENT_PDF_MAX_PAGES (500)
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
ChunkingEnabled by default

Deterministic per-page chunking: 2500 chars / 250 overlap; governed spaces use min(2500, model cap) → 1200/180 with Granite; dedicated Excel (40 rows) and PPTX (one slide = one unit) strategies.

The embedding model’s 1,200-character limit bounds chunk size.

Details
Setting
RAG_CHUNK_SIZE_CHARS, RAG_CHUNK_OVERLAP_CHARS, RAG_GOVERNED_CHUNK_SIZE_CHARS, RAG_GOVERNED_CHUNK_OVERLAP_CHARS
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Governed embeddings via the gateway (768 dimensions)Enabled by default

Single provider ai_gateway; logical model fr-en-retrieval (granite-embedding:278m, 768 dims); identity (pipeline_id, digest, identity_verified) enforced; checks E101/E102; refuses to index/query with a different pipeline.

granite profile qualified "experimental"; the legacy 768 profile is not installed in Compact.

Details
Requires
ai-gateway-open · Ollama with granite-embedding:278m
Setting
AI_GATEWAY_EMBEDDINGS_*, RAG_EMBEDDING_DIM=768, EMBEDDINGS_EXPECTED_MODEL
Enabled in Compact
Yes
Qualification
Embedding identity verified by the Compact qualification; "experimental" qualification on the gateway side.
Sources
Vector search (pgvector)Enabled by default

pgvector cosine leg filtered by rag_space and pipeline_family, subject to the RAG_MIN_SCORE threshold.

Similarity threshold inherited from another model: it may empty the vector leg with granite (see retrieval threshold).

Details
Requires
PostgreSQL 16 + pgvector
Setting
RAG_HYBRID_ENABLED
Enabled in Compact
Yes
Qualification
retrieval-diagnostic.sh script: measures the vector leg before/after threshold.
Sources
Lexical search (PostgreSQL FTS)Enabled by default

PostgreSQL FTS to_tsvector/ts_rank, config simple by default, query plan from most to least selective; stored tsvector column behind a flag (off).

The stored-vector path requires a migration and RAG_FTS_CONFIG=french.

Details
Setting
RAG_FTS_CONFIG (simple), RAG_FTS_STORED_VECTOR_ENABLED (0), RAG_MIN_TEXT_RANK
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Hybrid fusion (RRF)Enabled by default

merge_hybrid fuses FTS and vector legs by Reciprocal Rank Fusion (K=60) with conditional lexical boost on strong identifiers; RAG_HYBRID_ENABLED=1 by default.

No particular limit noted.

Details
Setting
RAG_HYBRID_ENABLED, RAG_RRF_CONDITIONAL_LEXICAL_WEIGHT_ENABLED
Enabled in Compact
Yes
Qualification
Exercised by the end-to-end Compact qualification (e2e_qualification.py script).
Sources
Candidate diversificationEnabled by default

Candidate pool ×3, max 2 per group (document) before decision; on by default.

No particular limit noted.

Details
Setting
RAG_RETRIEVAL_DIVERSITY_ENABLED, RAG_RETRIEVAL_CANDIDATE_MULTIPLIER, RAG_RETRIEVAL_MAX_PER_GROUP
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Cross-encoder reranking via the gatewayEnabled by default

Passage reranking via POST /v1/rerank (TEI bge-reranker-v2-m3 behind the Gateway); OFF in code defaults, ON in Compact (pool 20, timeout 20 s); on failure, counted fallback to the canonical RRF order (fail_open_rrf).

Fallback = hybrid RRF order (not a lexical rerank); CPU latency ≈ 1.5 s per pair; two reranking settings mutually exclusive.

Details
Requires
ai-gateway-open with AI_GATEWAY_RERANK_ENABLED=1 · TEI reranker service
Setting
RAG_RERANKER_ENABLED, RAG_RERANKER_POOL_K, RAG_RERANKER_TIMEOUT_SECONDS, RAG_RERANKER_FAILURE_POLICY
Enabled in Compact
Yes
Qualification
"Experimental" qualification on the gateway side; neither recall nor latency qualified; real reranker exercised by the Compact qualification.
Sources
Retrieval threshold and answer decisionEnabled by default

should_answer: min_sources, lexical threshold, vector threshold RAG_MIN_SCORE (code default 0.76, calibrated for nomic); hard refusal only when zero chunks, else partial/low_confidence mode.

Documentation drift on the default value (0.20 vs 0.76); 0.76 not calibrated for granite.

Details
Setting
RAG_MIN_SCORE, RAG_MIN_SOURCES, RAG_MIN_TEXT_RANK, RAG_LOWCONF_ENABLED
Enabled in Compact
Yes
Qualification
retrieval-diagnostic.sh diagnoses a vector leg emptied by the threshold.
Sources
Generation via the gatewayEnabled by default

All generation goes through the Gateway's POST /v1/generate (logical model compact-generation-8 = qwen2.5:1.5b-instruct in Compact); per-RagSpace model; direct Ollama path reserved for tests.

The 1.5 B model demonstrates the path, not answer quality; unregistered or uninstalled models refused.

Details
Requires
ai-gateway-open · Ollama
Setting
AI_GATEWAY_ENABLED, AI_GATEWAY_MODEL, DEFAULT_RAGSPACE_CHAT_MODEL, RAG_FACTUAL_NUM_PREDICT (2048)
Enabled in Compact
Yes
Qualification
Compact functional qualification; model selection tested end to end.
Sources
Streamed answers (SSE)Enabled by default

/chat/stream/ emits SSE (meta → sources → token(s) → done, + error); with AI_GATEWAY_STREAMING_ENABLED=1 (Compact) fragments come from /v1/generate/stream (NDJSON); at 0, single-block pseudo-stream.

Some documentation pages still say "no real streaming": documentation drift, the Compact configuration enables native streaming.

Details
Requires
AI_GATEWAY_ENABLED=1
Setting
AI_GATEWAY_STREAMING_ENABLED (code default 0, Compact 1)
Enabled in Compact
Yes
Qualification
Compact resilience scenario "client interrupting a stream".
Sources
Citations and source formatEnabled by default

Sources v1 schema (rank, document_id, chunk_id, score, filename, page_number, snippet ≤200); answer contract separating retrieved / prompted / actually cited sources; 'Sources:' line only for real citations.

Citation correctness depends on the model honouring the [n] markers.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Grounding in sources and abstentionEnabled by default

Citation guards at prompt head; no_answer without any LLM call when no source; 'off-documents' Mode B disabled; FR/EN abstention detection; no fabricated answer on failure (typed errors).

Cross-encoder answerability measured but not promoted; anti-over-abstention retry evaluated, not implemented.

Details
Setting
RAG_MODE_B_FALLBACK_ENABLED (0), RAG_ANSWERABILITY_ENABLED (0)
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Conversation threads and memoryEnabled by default

Persisted ChatThread/ChatMessage, private to their author; hierarchical memory (12-message window, summary beyond 18) injected only into the prompt; bounded thread search (3 s).

The memory summary uses the global model, not the space model (known limit).

Details
Setting
CHAT_MEMORY_ENABLED (1), CHAT_MEMORY_*
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Document and corpus summariesEnabled by default

Short synchronous / long Celery map-reduce summaries persisted as ChatMessage; shared-corpus document summaries on by default (not qualified).

Corpus summaries not qualified.

Details
Requires
worker
Setting
DOMAIN_CORPUS_SUMMARY_ENABLED (1)
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Global corpus analysis (jobs)Enabled by default

Asynchronous CorpusAnalysisJob (analytics queue) with lifecycle, progress, cancellation; RagSpace access re-checked on every operation.

No particular limit noted.

Details
Requires
worker consuming the analytics queue
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Deterministic chat responses (interceptors)Enabled by default

Static product help, Excel analytic guard (deterministic refusal), document listing: short-circuit RAG without any LLM call.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Document viewerEnabled by default

Preview routed by preview_kind: pdf (iframe #page=N), spreadsheet, document (DOCX), presentation (PPTX), text, unsupported; always on.

CSV deliberately unsupported by the viewer.

Details
Setting
DOCUMENT_DOCX_PREVIEW_ENABLED, DOCUMENT_PPTX_PREVIEW_ENABLED, PREVIEW_CACHE_ENABLED
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
User feedback and incidentsEnabled by default

Thumbs-down → diagnosable incident (lot 1 on); incident export/import and pseudonymisation behind flags (off).

No particular limit noted.

Details
Setting
FEEDBACK_INCIDENT_EXPORT_ENABLED (0), FEEDBACK_INCIDENT_IMPORT_ENABLED (0), DRF_THROTTLE_FEEDBACK_CREATE
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Audit logs and retentionEnabled by default

RagQueryLog (90 d), ActionAuditEvent (365 d), LlmEgressAuditEvent / EgressPolicyChangeLog (365 d with a check-enforced floor), LlmSettingsChangeLog; periodic purge.

The RAG query log stores question and answer in clear text (conversational data).

Details
Requires
beat + worker for purging
Setting
ACTION_AUDIT_ENABLED (1), CELERY_BEAT_AUDIT_PURGE_SECONDS
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
DiagnosticsEnabled by default

manage.py check (llm_router.*, config.*, rag_core.* checks), diagnose.sh (non-inferential), retrieval-diagnostic.sh, contract_check.py, resilience_check.py, offline-check.sh, e2e_qualification.py.

Inferential gateway probes are never called automatically.

Details
Requires
docker compose access
Enabled in Compact
Yes
Qualification
Scripts used during the Compact qualification.
Sources
Backup and restoreEnabled by default

backup.sh (custom pg_dump, media archive, configs, model manifest, SHA256SUMS) and restore.sh into an isolated instance; secrets, Redis and model weights excluded.

Documents being ingested at backup time must be reindexed after restore; secrets must be backed up separately.

Details
Enabled in Compact
Yes
Qualification
Restore into an isolated instance exercised by the Compact qualification.
Sources
Bilingual interface (FR/EN)Enabled by default

next-intl without route prefix; locales fr (default) and en; ragatm_locale cookie + account preference; 21 symmetric namespaces under test.

Roll-out to application screens in progress per the documentation.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
REST API v1 and OpenAPI contractEnabled by default

~128 DRF routes under /api/v1/ (auth, bootstrap, capabilities, workspaces, invitations, rag-spaces, documents, chat, analyses, prompts, audit, core, admin, platform, tabular); contract shared/contracts/openapi.yaml 1.0.0; cookie token + CSRF or Authorization: Token.

Hand-maintained OpenAPI contract, not automatically checked against the code.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Rate limitingEnabled by default

DRF User/Anon throttles in production: user 120/min, anon 30/min, auth 20/min, mfa 10/min, feedback 10/min, thread search 60/min, invitations 20/10 per min.

Anonymous bucket shared by all clients behind the Next proxy (known limit).

Details
Requires
DJANGO_SETTINGS_MODULE=config.settings.prod (Compact)
Setting
DRF_THROTTLE_ANON, DRF_THROTTLE_USER, DRF_THROTTLE_*
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Security headers and cookiesEnabled by default

prod.py: 1-year HSTS + subdomains + preload, nosniff, X-Frame-Options SAMEORIGIN, Referrer-Policy same-origin, Secure/HttpOnly/SameSite=Strict cookies; TLS expected at a reverse proxy.

No TLS inside the Compact stack; no Content-Security-Policy in the settings reviewed.

Details
Requires
TLS-terminating reverse proxy for any non-loopback access
Setting
DJANGO_SECURE_SSL_REDIRECT
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Request identifier (X-Request-ID)Enabled by default

Middleware relays a conformant X-Request-ID ([A-Za-z0-9._:-]{1,128}) or generates a UUID4; propagated to the Gateway (generation, embeddings, rerank) and SSE streams; present on all responses.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
contract_check.py records X-Request-ID headers.
Sources
Explicit errors when a dependency is unavailableEnabled by default

503 ai_gateway_unavailable (+Retry-After, retryable); 502 ai_gateway_error (not retryable); 503 dependency_unavailable (redis|broker); same payload in the SSE error event; never a fabricated answer.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
resilience_check.py scenarios of the Compact qualification.
Sources
Document quotas per workspaceEnabled by default

max_document_count and max_document_bytes copied from platform defaults; usage aggregated on demand; enforcement on by default.

No unlimited mode.

Details
Setting
WORKSPACE_QUOTAS_ENFORCED (1)
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
“Document capabilities” screen and gateway probesEnabled by default

Read-only superuser screen exposing each capability's real state (ACTIVE/DISABLED/UNAVAILABLE/UNKNOWN); Gateway /health/* probes closed by default.

Service states shown "UNKNOWN" until probes are enabled.

Details
Setting
CAPABILITIES_GATEWAY_PROBES_ENABLED (0)
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Retrieval observability and operations metricsEnabled by default

Structured trace per query_rag (observable degradations), bounded ops counters (rag_reranker_*), /ops/metrics outside /api/ with optional token, non-inferential /api/health/.

No particular limit noted.

Details
Setting
RAG_OPS_METRICS_TOKEN
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Egress policy (fail-closed)Enabled by default

Every LLM call needs an LlmExecutionContext with a resolved policy; any non-local provider is refused; allow_external_fallback is traced but no external provider exists.

Granularity stops at the document space; inert confidentiality field.

Details
Enabled in Compact
Yes
Qualification
Guard tests: no external generation path, no egress from the corpus.
Sources
Owner scopes and per-space access controlConfigurable

Partitioning several owners inside one workspace plus per-RagSpace ACL; implemented end-to-end but off by default.

Not enabled in Compact; scope transfer from the platform console is preview-only.

Details
Requires
OWNER_SCOPE_ENABLED=1 · RAGSPACE_ACL_ENABLED=1
Setting
OWNER_SCOPE_ENABLED, RAGSPACE_ACL_ENABLED
Enabled in Compact
No
Qualification
No dedicated qualification identified.
Sources
Answer-language policyConfigurable

answer_language preference (auto/fr/en) driving generated-answer language, distinct from UI locale; flag off in code.

Off by default in the Open code; Compact does not set it.

Details
Requires
RAG_ANSWER_LANGUAGE_POLICY_ENABLED=1 + redeploy
Setting
RAG_ANSWER_LANGUAGE_POLICY_ENABLED
Enabled in Compact
No
Qualification
No dedicated qualification identified.
Sources
Action routerConfigurable

Chat action routing (apps.actions); mutations never triggered by phrasing; off by default.

No particular limit noted.

Details
Requires
ACTIONS_ROUTER_ENABLED=1
Setting
ACTIONS_ROUTER_ENABLED, ACTIONS_LLM_CLASSIFIER_ENABLED, ACTIONS_ALLOW_NL_DELETE
Enabled in Compact
No
Qualification
No dedicated qualification identified.
Sources
Deterministic tabular queries (DuckDB)Configurable

DuckDB engine computing on the source xlsx/csv file (never the LLM, never chunks); closed schema, row/column/time bounds; off by default and in Compact.

LLM planner and narration not wired.

Details
Requires
TABULAR_QUERY_ENABLED=1
Setting
TABULAR_QUERY_ENABLED
Enabled in Compact
No
Qualification
No dedicated qualification identified.
Sources
Dynamic configuration (core overlay)Configurable

Database-stored configuration overrides, inert by default; editing and runtime effect behind strict flags (off).

No particular limit noted.

Details
Requires
CORE_CONFIG_EDIT_ENABLED=1 · CORE_CONFIG_RUNTIME_ENABLED=1
Setting
CORE_CONFIG_EDIT_ENABLED, CORE_CONFIG_RUNTIME_ENABLED
Enabled in Compact
No
Qualification
No dedicated qualification identified.
Sources
.eml e-mails (opt-in) and .msg (removed)Configurable

.eml ingestion with attachments behind a flag and per-space scope (off); Outlook .msg unsupported in the Open edition (GPL parser dropped, code msg_unsupported_in_open_edition).

Attachments: no vision or structured extraction; IFC/DWG unsupported.

Details
Requires
DOCUMENT_EML_ENABLED=1 + allowed space list
Setting
DOCUMENT_EML_ENABLED, DOCUMENT_MSG_ENABLED (refused)
Enabled in Compact
No
Qualification
No dedicated qualification identified.
Sources
Query rewriting by the modelConfigurable

Query rewrite/keywordisation in explanatory mode; LLM rewrite disabled after A/B measurement (no gain, doubled P95).

No particular limit noted.

Details
Setting
RAG_QUERY_REWRITE_ENABLED (0), RAG_KEYWORDIZE_ENABLED (1)
Enabled in Compact
No
Qualification
A/B test measured on 100 questions (repository documentation).
Sources
Legacy in-process rerankingDisabled

Legacy rerank loading a model in-process (rerank/torch extra); off; never locked for the Compact image.

Exclusive with reranking through the gateway.

Details
Requires
extra [rerank] (torch)
Setting
RAG_RERANK_ENABLED
Enabled in Compact
No
Qualification
No dedicated qualification identified.
Sources
Mailbox connectors
private edition only
Unavailable

No mailbox connector in the Open edition (explicit code comment).

No particular limit noted.

Details
Enabled in Compact
No
Qualification
No dedicated qualification identified.
Sources

Model gateway (AI Gateway Open)

The only path to the models: generation, embeddings, reranking, registry, limits, errors.

  • Enabled by default 14
  • Configurable 1
  • Disabled 1
  • Unavailable 1
  • Not yet qualified 3

Enabled by default in the Compact profile

  • Generation POST /v1/generate
  • Stream POST /v1/generate/stream (NDJSON)
  • Embeddings POST /v1/embeddings
  • Reranking POST /v1/rerank (TEI)
  • Strict model registry
  • Health endpoints
  • Timeouts
  • Concurrency and saturation
  • Request size limits
  • Error envelope and codes
  • Gateway network security
  • No external provider (by construction)
  • Request identifier on the gateway side
  • Hardened gateway image

Configurable, optional or absent

  • gateway-api/1.0 contract (candidate) Not yet qualified
  • Chat POST /v1/chat and /v1/chat/stream Disabled
  • Compact CPU / 12 GB GPU profiles Configurable
  • Structured output (JSON Schema) Not yet qualified
  • Components excluded from the Open edition Unavailable
  • Hardware: CPU qualified, GPU not qualified Not yet qualified
Show all 20 features, with limits and evidence
Model gateway (AI Gateway Open)
FeatureStatusDescription and limitsDetails
Generation POST /v1/generateEnabled by default

prompt, logical model, temperature, system, options{num_ctx,num_predict}, think, keep_alive, format/response_format; extra=forbid; response text/tokens/usage/done_reason; bounds num_ctx ≤16384, num_predict ≤4096 (400).

7 B profile never executed in Open.

Details
Requires
Ollama + compact-generation-8
Setting
OLLAMA_GENERATE_MODEL, AI_GATEWAY_TIMEOUT_SECONDS
Enabled in Compact
Yes
Qualification
Compact qualification; Open tests.
Sources
Stream POST /v1/generate/stream (NDJSON)Enabled by default

delta / done (exactly one) / error events as application/x-ndjson — not SSE; client close → upstream close; structured output not streamable.

No heartbeat/keep-alive event.

Details
Enabled in Compact
Yes
Qualification
Open tests on NDJSON; used by the Compact backend.
Sources
Embeddings POST /v1/embeddingsEnabled by default

Field texts (≤64), model, task query|document; 768-dim response with pipeline_id emb-v2:…, model_digest, identity_verified, normalized; >1200 chars → reject; incompatible dimension → 400.

/api/embeddings fallback only if the /api/embed route is absent.

Details
Requires
Ollama + granite-embedding:278m
Setting
OLLAMA_EMBEDDING_MODEL, AI_GATEWAY_EMBEDDINGS_DIMENSION (768), AI_GATEWAY_EMBEDDINGS_STRICT_REGISTRY
Enabled in Compact
Yes
Qualification
granite qualification "experimental", identity verified.
Sources
Reranking POST /v1/rerank (TEI)Enabled by default

query + documents (1..64, ≤2000/4000 chars) → raw scores (calibrated:false) via TEI BAAI/bge-reranker-v2-m3 on mandatory loopback; off in Settings, on in .env.example and Compact; dedicated timeout (15 s default, 30 s Compact).

No lexical fallback inside the gateway; CPU latency not measured in the repository.

Details
Requires
TEI reranker container in the gateway network namespace
Setting
AI_GATEWAY_RERANK_ENABLED, AI_GATEWAY_RERANK_TIMEOUT_SECONDS, AI_GATEWAY_RERANK_BACKEND_IMAGE_DIGEST
Enabled in Compact
Yes
Qualification
"Experimental" qualification; /health/rerank identity check.
Sources
Strict model registryEnabled by default

models_registry.yaml: logical names, digests, capabilities, governance profiles; unknown → 400 model_not_registered; registered-not-installed → 503 model_not_installed non-retryable; never downloads.

No particular limit noted.

Details
Setting
AI_GATEWAY_MODELS_REGISTRY, AI_GATEWAY_*_STRICT_REGISTRY (1)
Enabled in Compact
Yes
Qualification
Exercised by the end-to-end Compact qualification (e2e_qualification.py script).
Sources
Health endpointsEnabled by default

/health/live (non-inferential), /health/runtime (capabilities, installed, limits, inflight), /health (inventory); /health/ready, /health/embeddings, /health/rerank are inferential (explicit_only); /health/asr, /health/vision → disabled.

No /health/startup route; inferential probes must not be wired to automatic heartbeats.

Details
Setting
AI_GATEWAY_READINESS_CACHE_SECONDS, AI_GATEWAY_READINESS_TIMEOUT_SECONDS
Enabled in Compact
Yes
Qualification
Open test: non-inferential health probes.
Sources
TimeoutsEnabled by default

AI_GATEWAY_TIMEOUT_SECONDS (60 default, 300 Compact) bounds generate/stream/embed; stream: read timeout + wall-clock budget → error upstream_timeout; rerank 15/30 s; readiness 5/30 s.

No particular limit noted.

Details
Setting
AI_GATEWAY_TIMEOUT_SECONDS, AI_GATEWAY_RERANK_TIMEOUT_SECONDS, AI_GATEWAY_READINESS_TIMEOUT_SECONDS
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Concurrency and saturationEnabled by default

Non-blocking BoundedSemaphore: generate/chat 2, embeddings 2, rerank 2, vision 1, ASR 1 → 503 *_saturated + Retry-After; no application queue, no retries toward Ollama/TEI; Ollama NUM_PARALLEL=1.

Load beyond one concurrent generation not verified.

Details
Setting
AI_GATEWAY_GENERATE_MAX_CONCURRENCY (2), *_MAX_CONCURRENCY
Enabled in Compact
Yes
Qualification
Saturation observed (200/200/503) during the Compact qualification.
Sources
Request size limitsEnabled by default

Content-Length > 2 MiB → 413 request_too_large; chunked POST → 411; /v1/audio and /v1/vision exempt.

No particular limit noted.

Details
Setting
AI_GATEWAY_REQUEST_MAX_BYTES
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Error envelope and codesEnabled by default

{detail:{status,provider,message,code?,retryable?}} with fixed public messages; contract code table (model_not_registered 400, model_not_installed 503, *_saturated 503, asr_unavailable 503, vision_not_enabled 503…); validation errors → 400.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
contract_check.py.
Sources
Gateway network securityEnabled by default

No authentication, CORS, rate-limit or security headers in code; network trust: standalone publishes 127.0.0.1:8100, Compact publishes no port (internal networks ai + inference); rerank/ASR backends required on loopback.

No auth, TLS, quotas or audit log (out of scope per the documentation).

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
No external provider (by construction)Enabled by default

Tests forbid provider tokens/SDKs and download calls in app/; contract external_providers: none; local OLLAMA_BASE_URL.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
Open test: no external provider.
Sources
Request identifier on the gateway sideEnabled by default

Relayed if ^[A-Za-z0-9._:-]{1,128}$, else UUID v4; present on all responses incl. middleware errors.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Hardened gateway imageEnabled by default

python:3.12-slim pinned by digest, pip --require-hashes (986 hashes), appuser, HEALTHCHECK /health/live, CI pip-audit/detect-secrets/SBOM (lint advisory).

Non-blocking style (lint) warnings.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Compact CPU / 12 GB GPU profilesConfigurable

compact-generation-8 (qwen2.5:1.5b, experimental, digest recorded) = functionally qualified CPU profile; compact-generation (qwen2.5:7b, candidate, no digest) = 12 GB profile NOT qualified, never run in Open.

GPU budgets are estimates, not measured.

Details
Requires
compose.gpu-12gb.yml + provision --with-12gb (GPU profile)
Setting
OLLAMA_GENERATE_MODEL
Enabled in Compact
Yes
Qualification
CPU profile: functional qualification; GPU: not executed.
Sources
gateway-api/1.0 contract (candidate)Not yet qualified

OpenAPI 3.1, version 1.0.0-candidate.2, status CANDIDATE_FOR_RATIFICATION, 19 routes; file↔served-spec conformance tested; CHANGELOG SHA ≠ committed file SHA.

Not ratified; open points: 503 vs 424, request id in body, inter-service auth.

Details
Enabled in Compact
Yes
Qualification
OpenAPI conformance test; contract_check.py against a real gateway.
Sources
Structured output (JSON Schema)Not yet qualified

format json or response_format json_schema with a closed JSON-Schema subset (no $ref/pattern/combinators; 32 KiB, depth 16, 512 nodes), Draft 2020-12 revalidation; 502 output_invalid/mismatch.

Not streamable.

Details
Enabled in Compact
Yes
Qualification
Documentation: not qualified on Compact models.
Sources
Hardware: CPU qualified, GPU not qualifiedNot yet qualified

CPU profile qualified; GPU optional, 8/12 GB budgets are unmeasured estimates; Ollama 0.30.8 and TEI cpu-1.8 pinned by digest.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
CPU: Compact functional qualification; GPU: not executed.
Sources
Chat POST /v1/chat and /v1/chat/streamDisabled

Governed chat routes (messages, reasoning, response_format) requiring a model with chat capability + reasoning_profile; no Compact model declares it → 400 model_not_registered / chat_not_supported.

RAGatm Open only uses /v1/generate*.

Details
Requires
registered model with chat capability
Enabled in Compact
No
Qualification
No dedicated qualification identified.
Sources
Components excluded from the Open edition
private edition only
Unavailable

Advanced vision, structured-extraction and host-admission modules: absent, flags refused at startup (ConfigurationError), UNAVAILABLE states in /health/runtime.

No particular limit noted.

Details
Setting
AI_GATEWAY_STRUCTURED_EXTRACT_*, AI_GATEWAY_V2H_*, AI_GATEWAY_VISION_SEMANTIC_ENABLED (refused)
Enabled in Compact
No
Qualification
Open test: ASR and vision absent (expected ImportError).
Sources

Deployment and scaling

Direct mode, optional Pool, task queues, documented concurrency limits.

  • Enabled by default 5
  • Optional 3
  • Unavailable 1
  • Not yet qualified 2

Enabled by default in the Compact profile

  • Direct mode (backend → gateway)
  • Component separation (9 services)
  • Celery task queues and worker
  • Capacity management and concurrency limits
  • Single-host document storage

Configurable, optional or absent

  • AI Gateway Pool (optional router) Optional
  • Admission control, circuit breaker and failover (Pool) Optional
  • Transcription job affinity (Redis) Optional
  • Automatic horizontal scaling Unavailable
  • Documented load limits Not yet qualified
  • Multi-node / multi-GPU (Pool) Not yet qualified
Show all 11 features, with limits and evidence
Deployment and scaling
FeatureStatusDescription and limitsDetails
Direct mode (backend → gateway)Enabled by default

The three Gateway URLs (generation, embeddings, rerank) point to http://ai-gateway:8100; empty AI_GATEWAY_POOL_HOSTS ⇒ direct route; nominal Compact profile.

No particular limit noted.

Details
Requires
ai-gateway-open
Setting
AI_GATEWAY_BASE_URL, AI_GATEWAY_EMBEDDINGS_BASE_URL, RAG_RERANKER_BASE_URL, AI_GATEWAY_POOL_HOSTS
Enabled in Compact
Yes
Qualification
Compact qualification.
Sources
Component separation (9 services)Enabled by default

Compact: db (pgvector), redis, backend (gunicorn 2×4), worker (Celery), beat, frontend (Next), ai-gateway, ollama, reranker (TEI) on 5 networks, 4 internal; per-service memory budgets.

Single host; no multi-machine deployment verified.

Details
Requires
Docker Compose v2
Setting
COMPACT_MEM_*
Enabled in Compact
Yes
Qualification
Compact qualification.
Sources
Celery task queues and workerEnabled by default

Public queues celery, reindex, maintenance, analytics consumed by one worker (concurrency 2, max-tasks-per-child 50); dedicated ingest_visual/audio/ifc/dwg queues defined but without consumer in Compact.

Sequential ingestion at workstation scale.

Details
Requires
Redis (task broker)
Setting
COMPACT_WORKER_CONCURRENCY (2), CELERY_*
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Capacity management and concurrency limitsEnabled by default

Gateway 2 concurrent generations (503 beyond), Ollama NUM_PARALLEL=1 / 2 loaded models, worker concurrency 2, gunicorn 2 workers × 4 threads, 600 s timeout; no Gateway-side queue.

Load beyond one concurrent generation not verified.

Details
Setting
AI_GATEWAY_GENERATE_MAX_CONCURRENCY, OLLAMA_NUM_PARALLEL, GUNICORN_WORKERS/THREADS
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Single-host document storageEnabled by default

Originals are written to a local volume (media): storage tied to a single host.

No object or shared storage.

Details
Setting
MEDIA_ROOT
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
AI Gateway Pool (optional router)Optional

Standalone HTTP router relaying the 19 gateway-api/1.0 routes to 1..N Gateways (SINGLE_NODE, WEIGHTED_ROUND_ROBIN, LEAST_INFLIGHT), node registry with allowlist, model governance (no substitution, digest identity); absent from Compact; all-or-nothing switch (llm_router.E008).

ASR/vision not qualified through the Pool; full RAG through the Pool not demonstrated in the repositories.

Details
Requires
ai-gateway-pool-open deployment + Redis (Compose) · AI_GATEWAY_POOL_HOSTS set and all three URLs pointing to the Pool
Setting
POOL_CONFIG_FILE, POOL_ENVIRONMENT, AI_GATEWAY_POOL_HOSTS
Enabled in Compact
No
Qualification
Single-node parity against a real gateway (health, models, generation, stream, embeddings, rerank); multi-node on simulated nodes.
Sources
Admission control, circuit breaker and failover (Pool)Optional

Per-node max_inflight → AT_CAPACITY (refusal, no queue); CLOSED/OPEN/HALF_OPEN breaker on transport failures; soft suspension on 503+Retry-After; failover only before any byte is sent (connect errors); process-local counters.

Process-local state, no distributed coordination; no queueing, priorities or rate limiting.

Details
Requires
“AI Gateway Pool (optional router)” · at least 2 nodes for failover
Setting
nodes[].max_inflight, circuit_breaker.*, failover.enabled
Enabled in Compact
No
Qualification
Unit and integration tests on simulated nodes.
Sources
Transcription job affinity (Redis)Optional

Job→node affinity store (none/memory/sqlite/redis) for asynchronous ASR jobs; the Pool's only Redis use; backend none in Compact (audio routes refused).

No particular limit noted.

Details
Requires
Redis · speech-to-text (ASR) engine behind the gateway
Setting
job_affinity.backend, AIGP_REDIS_URL
Enabled in Compact
No
Qualification
Tests with a real Redis; end-to-end ASR chain not executed.
Sources
Documented load limitsNot yet qualified

README: load beyond one concurrent generation unverified; Pool: high-concurrency throughput not re-measured; sequential ingestion.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Multi-node / multi-GPU (Pool)Not yet qualified

Multi-node configuration prepared (EXAMPLE_ONLY); MULTINODE_HARDWARE_QUALIFIED = NO; LIVE_MULTI_GPU NOT_EXECUTED.

No particular limit noted.

Details
Requires
“AI Gateway Pool (optional router)” · real GPU hosts
Enabled in Compact
No
Qualification
No dedicated qualification identified.
Sources
Automatic horizontal scalingUnavailable

No autoscaling or multi-replica coordination feature: single-process Pool, process-local state; only ASR affinity is shared.

No particular limit noted.

Details
Enabled in Compact
No
Qualification
No dedicated qualification identified.
Sources

Security: functions and limits

The mechanisms below exist in the published code. They reduce risks; they do not remove them.

  • Enabled by default 15
  • Disabled 1

Enabled by default in the Compact profile

  • No external AI provider
  • Single published port (127.0.0.1)
  • Internal networks and offline runtime
  • No secret under version control
  • Non-root containers
  • Images pinned by digest
  • Hash-locked dependencies
  • Security policy and contact
  • Apache-2.0 licence
  • Third-party licences (LGPL/MPL; optional GPL/AGPL)
  • No TLS or inter-service authentication
  • Supply-chain checks in CI
  • HttpOnly cookies, CSRF and anti-enumeration
  • Defensive file validation
  • Audit retention with a security minimum

Configurable, optional or absent

  • Inert “confidentiality” field Disabled
Show all 16 features, with limits and evidence
Security and privacy
FeatureStatusDescription and limitsDetails
No external AI providerEnabled by default

System checks config.E009 / llm_router.E009 refuse any OPENAI_*/ANTHROPIC_*… variable; AI_GATEWAY_FALLBACK_PROVIDER=none only; fail-closed egress policy; Gateway with no remote provider by construction.

No particular limit noted.

Details
Setting
AI_GATEWAY_FALLBACK_PROVIDER (none), AI_GATEWAY_FALLBACK_ENABLED (0)
Enabled in Compact
Yes
Qualification
Guard tests; offline-check.sh script.
Sources
Single published port (127.0.0.1)Enabled by default

Only the frontend publishes 127.0.0.1:${COMPACT_FRONTEND_PORT:-18080}; backend, Gateway, Ollama, TEI, db, redis not published.

LAN exposure requires a TLS reverse proxy.

Details
Setting
COMPACT_FRONTEND_PORT
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Internal networks and offline runtimeEnabled by default

Networks app/data/ai/inference internal: true; Ollama reachable only by the Gateway; model provisioning as a distinct phase (compose.provision.yml); HF_HUB_OFFLINE=1; no download during requests.

The Docker host itself can reach the internal networks (documented; no firewall rule shipped).

Details
Enabled in Compact
Yes
Qualification
offline-check.sh script.
Sources
No secret under version controlEnabled by default

gen-secrets.sh creates .env (0600) with random secrets and refuses demo values; .env git-ignored; manage.py check refuses demo values; no secret in images/Dockerfile/.env.example.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
Secret scan in CI.
Sources
Non-root containersEnabled by default

Backend uid 10001 (app), frontend node user (npm/yarn removed), Gateway appuser, Pool uid 10001.

Third-party images (Ollama, TEI, Redis, pgvector) keep their upstream defaults.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Images pinned by digestEnabled by default

python:3.12-slim, node:22-alpine, pgvector/pgvector:pg16, redis:7.2-alpine, ollama/ollama (0.30.8), TEI referenced by sha256 digest.

The Pool qualification Dockerfile uses a different base digest than its service image.

Details
Setting
AI_GATEWAY_RERANK_BACKEND_IMAGE_DIGEST
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Hash-locked dependenciesEnabled by default

backend/requirements.lock (uv, 1241 hashes, --require-hashes), Gateway requirements.txt (986 hashes), Pool requirements.lock (253 hashes), frontend package-lock.json; CI checks lock consistency.

Lock drift against PyPI is advisory in CI.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Security policy and contactEnabled by default

SECURITY.md in all 3 repos: contact@ragatm.com (private channel), coordinated disclosure ≤90 days, only main maintained, no contractual SLA.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Apache-2.0 licenceEnabled by default

LICENSE + NOTICE Apache-2.0 in all three repos (original code); separate THIRD_PARTY_NOTICES.

Two Compact documentation pages still say "licence to be set" (stale).

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Third-party licences (LGPL/MPL; optional GPL/AGPL)Enabled by default

psycopg LGPL-3.0, ifcopenshell LGPL (extra), certifi MPL-2.0, libvips LGPL (frontend node_modules), caniuse-lite CC-BY-4.0; LibreDWG GPL-3.0 and PyMuPDF AGPL-3.0 never included by default (automated guard); Apache-2.0 models, no weights redistributed.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
Test: core dependencies exclude copyleft libraries.
Sources
No TLS or inter-service authenticationEnabled by default

The Compact stack ships no TLS and no authentication between backend, Gateway, Pool, TEI, Ollama (network trust).

Place a TLS reverse proxy for any non-loopback access.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Supply-chain checks in CIEnabled by default

Workflows: hash-verified install, lock consistency, pip-audit, npm audit (0 advisories), detect-secrets, licence inventory, image build without push; lint advisory.

The gateway workflow header still says "not executed" (stale).

Details
Enabled in Compact
Yes
Qualification
Successful CI runs on GitHub.
Sources
HttpOnly cookies, CSRF and anti-enumerationEnabled by default

Auth token in HttpOnly cookie + double-submit CSRF, SameSite=Strict, MFA challenge in dedicated cookie; 404 for unreadable resources; identical not-found/denied messages.

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Defensive file validationEnabled by default

Content sniffing (never extension), refusal of .docm/.xlsm/.pptm macros, legacy OLE2, archives, videos, executables, XML with DOCTYPE/ENTITY; anti zip-bomb bounds (200 MB uncompressed, ratio 200).

No particular limit noted.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Audit retention with a security minimumEnabled by default

Per-category retention (90/365/365/30 d); security_audit cannot go below SECURITY_AUDIT_MIN_DAYS (blocking check).

No particular limit noted.

Details
Setting
AUDIT_RETENTION_* (per retention.py)
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources
Inert “confidentiality” fieldDisabled

Document.confidentiality exists (default internal) but no code reads it: not a control.

Must not be presented as a protection.

Details
Enabled in Compact
Yes
Qualification
No dedicated qualification identified.
Sources