Enterprise readiness plan
Status: planned. Owner direction (22 October 2026): make Maia enterprise ready to certification standard. This document owns the gap register, the order and the evidence; the roadmap owns the E1–E5 and ORG1–ORG7 slices. Nothing here is a compliance claim. Dates and requirements were researched on 22 October 2026; items marked unverified need a primary source or counsel before anyone relies on them.
Which standards apply
A self-hosted product cannot hold SOC 2 or ISO 27001. Those certify the organization (vllnt): how it builds, ships, supports and runs Maia, and any hosted service. Buyers then check the product's own controls.
| Standard | Kind | Applies to Maia |
|---|---|---|
| EU Cyber Resilience Act (2024/2847) | Law, product | Once supplied commercially in the EU. Reporting (Art. 14) from 11 Sep 2026; all rules from 11 Dec 2027. CE marking, Annex I requirements |
| EU AI Act | Law | Lightly: Maia provides an AI system over third-party models. Art. 50 disclosure from 2 Aug 2026. Coding agents are not high-risk |
| GDPR | Law | When vllnt runs a hosted service, accounts, telemetry or support access; then a processor agreement (Art. 28) |
| NIS2, DORA | Law for customers | Indirect: supply-chain questionnaires, incident cooperation, audit and exit clauses |
| SOC 2 Type II | Procurement (US) | vllnt's organization and pipeline; 3–12 month observation period |
| ISO/IEC 27001:2022 | Procurement (EU, global) | vllnt's security management system; 93 Annex A controls, yearly surveillance |
| Third-party penetration test | Procurement | Yearly and after major changes |
| OWASP ASVS 5.0 level 2 | Procurement | HTTP API, web client, any hosted plane |
| OWASP Top 10 for LLMs, agentic Top 10 | Expected | Central to an agent platform: injection, excessive agency, tool supply chain |
| ISO/IEC 42001 (AI management) | Differentiator, rising | vllnt as an AI provider; AI risk and impact assessment |
| NIST SSDF, SLSA, OpenSSF Scorecard | Best practice | Secure development evidence; SLSA build level 2, then 3 |
| NIST AI RMF and GenAI profile | Best practice | AI governance structure |
| FedRAMP, HIPAA, CSA STAR, ISO 27701, CC | On demand | Only for a hosted service in those markets |
| PCI DSS | Not applicable | Maia holds no card data |
Gap register
Status from a repository inventory on 22 October 2026. Evidence paths are relative to the repository root.
| Gap | Standards | Today | Owner |
|---|---|---|---|
Public vulnerability reporting, security.txt, CVE process | CRA Annex I Part II, SSDF | Private advisories for collaborators only (SECURITY.md) | E1 |
| CRA reporting runbook (24 h, 72 h, 14 days) and ENISA access | CRA Art. 14 | Absent | E1 |
| Signed releases with provenance | CRA, SLSA, SSDF | npm provenance off (.github/workflows/publish.yml); Desktop unsigned | E1 |
| Code, dependency and secret scanning; dependency updates | SSDF, SOC 2, ASVS | Native code only: sanitizers, analyzer, fuzzing; nothing for TypeScript | E1 |
| Threat model | CRA, SSDF, ISO 27001 | Absent | E1 |
| Required review, branch protection, coverage gate | SOC 2, ISO 27001, SLSA source | Not documented; no coverage floor (docs/testing.md) | E1 |
| LICENSE, CHANGELOG, support period of at least 5 years | CRA | "All rights reserved" (README.md); CHANGELOG is RL1 | E1 |
| SSO (OIDC, SAML), SCIM, MFA | SOC 2, ASVS, CRA | One local principal | ORG2 |
| People, teams and roles; invitations; offboarding and access transfer | SOC 2 CC6.2–CC6.3, ISO 27001 A.5.18 | One local principal | ORG1, ORG6 |
| Two-person approval for chosen operations | ISO 27001 A.5.3 | One person confirms | ORG4 |
| Service accounts and scoped tokens | SOC 2 CC6.1, ASVS | Session credentials only; event-source credentials planned (S51) | ORG3 |
| Tamper-evident audit log | SOC 2, ISO 27001, CRA | Receipts and events exist; no hash chain, signing or export | E2 |
| Audit search, export and streaming to a security monitoring system | ISO 27001 A.8.15, A.8.16; SOC 2 CC7.2 | Receipts and events, read per operation | ORG5 |
| Encryption at rest; a keychain for secrets | CRA, ASVS | Owner-only files; managed store: source candidate (D-139, D-155); encryption at rest has no design yet | E2 |
| TLS beyond loopback | CRA, ASVS | Loopback HTTP; remote transport is an MN0–MN1 entry condition | E2 |
| Enforced retention and deletion; secret masking | GDPR, CRA, SOC 2 | Stream retention default 30 days (D-128); purge and masking not built (S12r purge, S12t masking) | E2 |
| Personal data export and erasure; legal hold | GDPR Art. 15, 17, 20 | Absent | ORG6 |
| Backup and restore | SOC 2, ISO 27001 | Pre-migration copy only (S63) | E2 |
| Signed updates and rollback | CRA Annex I | maia-node remote rollback over SSH is a source candidate with no signature check; local updates are RL4, RL5 | E2 |
| AI risk and impact assessment | ISO 42001, NIST AI RMF | Absent | E3 |
| Agents identify as AI in PRs and comments | AI Act Art. 50 | Absent | E3 |
| Model-provider inventory, data use and retention | ISO 42001, GDPR | Model catalog planned (R10) | E3 |
| Configuration and policy management: versioned, diffable, rollback, explained allow and deny | SOC 2 change management, ISO 27001 A.8.9 and A.8.32 | Preview, confirmation and receipt exist; S13 configurator, S47e action policy and S71 tool admission planned | E5, S47e, S71 |
| Security management system, policies, risk register, evidence | SOC 2, ISO 27001 | Absent | E4 |
| Access reviews, incident exercises, recovery tests, vendor reviews | SOC 2, ISO 27001 | Incident steps in SECURITY.md; runbooks planned in docs/operations.md | E4 |
| Privacy policy and processor agreement | GDPR | Absent; needed with a managed version, tracked outside this repository | E4 |
Already in place: a random loopback bearer compared in constant time; Session credentials stored as digests with a 24-hour life; exact Host and Origin checks; preview, confirmation and receipt for consequential changes; person-only operations; Linux containment with Landlock, seccomp and cgroups; untrusted prompt sections; restricted worker tools; a CycloneDX SBOM per executable; pinned CI actions and an exact lockfile.
Order
Items overlap: each starts once its own dependencies hold.
- E1, now, except licensing, support period and signing, which wait for their decisions. Cheap, and every later audit reuses its evidence.
- E5, its model after S49 and S54, then joined to S13, S47, S55 and S57 as each ships: one view and change path for configuration and policy, which change-management controls audit.
- ORG1–ORG7 people, roles, sign-in, approvals, audit and data controls (organizations and people), with E2 alongside ORG1–ORG2, MN0–MN1 and RL4–RL5.
- E3 with Agent definitions (S49).
- E4. SOC 2 Type II (Security, then Confidentiality) through a compliance platform, with a yearly penetration test; then ISO 27001, then ISO 42001. CRA conformity before 11 December 2027.
Acceptance per slice
Each item is tested at the lowest useful boundary (testing policy); nothing here is a compliance claim.
- E1.
security.txtnames the public reporting channel; a dry run of the CRA runbook meets the 24-hour, 72-hour and 14-day steps with timestamps; code, dependency and secret scanning runs on every pull request and fails on a new high-severity finding; the threat model covers every trust boundary inSECURITY.md; branch protection requires review and green checks. After their decisions: a LICENSE and support period are published, and CI verifies each release artifact's signature and SLSA provenance. - E2. Changing or deleting a stored audit record breaks verification at that record once a checkpoint seals it, newer records are reported as unsealed, and a database rolled back behind the latest checkpoint fails startup (D-169); secrets cannot be read from the database file without its key; a Node whose key is unavailable starts without decrypting and reports why; remote transport refuses plain HTTP; a restored backup yields the same state digest; an unsigned update is refused.
- E2a. Once set up, no managed key is readable from a file; a locked or unavailable store blocks the launches that need it with a typed state, and managed mode has no plaintext fallback.
- E3. Each release has an AI risk assessment listing every model provider with its data use and retention; each agent-authored PR or comment carries an AI disclosure; a tuned model's record names its dataset snapshot and base model.
- E4. Each SOC 2 control has evidence collected from E1, E2 and E5 artifacts; a third-party penetration test report exists with every finding triaged; the CRA conformity file maps each Annex I requirement to evidence.
- E5. A configuration change shows its diff before confirmation; a Project
change that would remove or weaken a Workspace rule is refused even when a
person confirms it, and the change succeeds only in the Workspace policy;
drift between
.maiaand admitted state is reported; a rollback is previewed and receipted, and a failed rollback leaves the previous state; every allow or deny names its rule and revision. - ORG1. An invitation works once and never after its expiry; a suspended
or removed person's next request fails; nobody sees a Workspace or Project
outside their roles in lists, search, counts or exports; a guest sees only
their named Projects until the expiry; nobody grants a role above their own
or widens their own access alone; the last owner cannot leave or be demoted,
suspended, deactivated or deprovisioned, even by a sync or by two owners
demoting each other at once; a role change applies from the next request;
access explainnames the grants behind every allow. - ORG2. Sign-in through an unverified identity provider fails; a person of a verified domain cannot sign in locally, except the one fallback admin; a sync never grants admin or owner and stops above its confirmed change count; deprovisioning revokes sessions, devices, tokens and any standing approvals within the bound.
- ORG3. A token or service account never exceeds its person's current
grants or its scopes, stops at its expiry or revocation, and its
confirmation, like an agent's, gets
role_denied. - ORG4. A requester, or the accountable person of an Agent, Routine, service account or token, never confirms their own two-person request; a standing approval never satisfies it; an expired request, or a confirmation for another digest, revision or target set, changes nothing.
- ORG5. Search and export return only what the reader's role allows; every administration action appears in the audit log.
- ORG6. A held scope deletes nothing; after erasure, receipts and the audit log hold the person ID with no personal data behind it; a transfer moves only the previewed IDs and no Connection or standing approval.
- ORG7. A Session of one person cannot read another person's home, credentials, worktrees or context, checked by negative tests on a shared Node; a delegated agent acts only within the consent's scope, operations and expiry, stops at revocation and never confirms for the delegator.
- All. Each administration action previews, confirms and leaves a receipt naming its person.
Open decisions and unverified points
- CRA product class. Default class allows self-assessment; a core function matching Annex III (identity or privileged access management, container runtimes) would need a harmonised standard or a notified body. Counsel decides.
- When Maia is placed on the market. Pre-release software is not yet on the EU market; the obligations start when it is sold.
- Unverified: the harmonised CRA standards were not yet cited in the Official Journal in early October 2026; the AI Act high-risk dates moved under Regulation (EU) 2026/1744; OMB M-26-05 ended the US federal software attestation requirement; cost ranges (SOC 2 roughly $25k–150k in the first year) come from vendor estimates.
Sources
Imported from Maia OS docs at 3dc3e07