Internal · not linked from the site nav

Build status, all 39 modules.

Generated from site/data/module-inventory.json (2026-09-28 read-only research pass over specs/, docs/, code, and evals evidence; status rows updated as modules close (D7 verified 2026-09-29, E3 verified 2026-09-30, B7 and A7 verified 2026-10-01, D8 measured 2026-10-03; D8 verified on the measured record 2026-10-16, docs/28 #315f; D8 frozen 2026-10-22 with the final-runtime residuals named, #320f/#320g)) by site/build-features.py, the same data and the same renderer as the public features page. If a claim differs between the two pages, one of them is a bug in this script — not a difference of opinion.

read-only research pass over specs/, docs/, code, and evals evidence; no code changes, no commits.

Cross-cutting facts

Where the build stands overall

Contracts version
Contracts version 0.3.3 (contracts/openapi.yaml line 5); adjudication records docs/03 through docs/20. The C6 canvas contract landed as 0.3.1 (docs/19), sheet citations as 0.3.2 (docs/20), and 0.3.3 added canvas.edit cited_spans.
Blueprint foundation
Everything is built ON TOP of the NVIDIA RAG Blueprint, never forking it (ruling 2026-09-18, docs + memory). The Blueprint supplies ingestion (nv-ingest), embedding/rerank/LLM NIMs, the vector store and citations; every module in this inventory is a gap the Blueprint deliberately does not fill.
Commits ahead / unpushed
70 local commits are ahead of origin/main and unpushed (git rev-list --count origin/main..main = 70; the brief estimated ~65). The working tree is clean (git status --porcelain -uno = 0 entries). Pushing needs Rian's express approval.
Browser-QA suite
The browser-QA suite is the verification instrument: evals/browser-qa/{PLAN,PROGRAM,RUNBOOK,SPEC_COVERAGE}.md drive groups A-N, Q, R, W1-W12 and C6 passes 1-7, run through Playwright's own Chromium/Firefox/WebKit and chrome-devtools MCP against the deployed nginx bundle at localhost:8080 — not a dev server. Records in evals/reports/browser-qa/<date>/.
Spec-coverage baseline
evals/browser-qa/SPEC_COVERAGE.md is a per-requirement reading of every spec, but it is dated 2026-09-20 and is explicitly historical: its claims that C6 and D6 have no implementation are now false. Requirement counts below start from it and are adjusted by evidence that landed after it.
Corpus measurement
Corpus measurement state: the grounded corpus is assembled (3,306 inventory rows, ready-20260923) and a bounded product-door run of 240 files / 30 strata / 556 turns passed through the real upload and chat doors on the Mac (evals/ingestion_corpus/report-2026-09-27.md). Every certification row reads insufficient or NOT certifiable, correctly: it is a sample, 0 of 3,306 rows carry a validated transcription reference, and every model in the path is NVIDIA-hosted. Headline measured numbers: 240/240 files reached indexed, right document 87.1%, expected fact 71.0% (exact-match lower bound), citation lands on the right place 46.5%.
Format compatibility
Format compatibility is proven at 91 files / 29 extensions with full-page OCR on: 91/91 indexed, 91/91 content checks, 51/51 text markers (evals/file_types/results/2026-09-25/RESULTS-full-page-ocr.md).
Held on hardware or tenant
VM-held / tenant-held items: the 3,076-file main-corpus capacity and reliability run, F2 sizing measurement, B5/B6 large-corpus capacity, real Microsoft Graph tenant proof for B1/A3, Confluence tenant for B2, and air-gapped site proof for F3/F5. The standing ruling (2026-09-27) is that no GPU box is rented until the build-out is done, so these stay held rather than pending.
Modules with no tier line
Two specs carry no Offer tier line at all (C5, G1); they are recorded as tier Open rather than being assigned a tier this inventory would be inventing.
Open decisions for Rian
Open decisions for Rian:
  1. the next build item after C6 — docs/15 proposes E4 feedback, then F6 notifications, then D7 watchers, then E3/B7/A7, then D8
  2. whether to push the 70 local commits
  3. C6 pass 8 is owed — commit d7c727d claims fixes for pass-7 defects P7-D1..D5 and the pass-8 run folders exist with no results file, so those fixes are not yet proven through the product
  4. whether to rent a GPU box, which is the single gate on B5/B6 capacity, F2, and corpus certification
  5. the twin-validation pass that would make any corpus stratum certification-eligible
  6. the B1 tombstone-deletion defect (a deleted SharePoint document still answers) is open and graph-mock cannot express a tombstone, so closing it needs either a mock change or a real tenant.

Legend

39 modules, five states

verified28
implemented1
partial6
spec only3
held1
total39
verified
implemented AND proven through the product / a real browser / live installed-code evidence, with the report cited
implemented
substantive code plus green tests, not live-proven through the product
partial
some of the module exists and is named; the missing part is named too
spec only
a spec exists; no dedicated implementation was found in the inspected surface
held
blocked on a decision, a rented GPU box, or a customer tenant — the blocker is named

Requirement counts are honest estimates, not a re-derivation: where a requirement has a demo rung and a [prod] rung, the done count credits the demo rung only. See “What could not be assessed” at the foot of this page.

Every row

All 39 modules, sorted by category then id

Remaining items are verbatim from the inventory. Evidence paths are relative to the repository root. The table scrolls sideways inside its own container — the page does not.

IDModuleCategoryTierStatusReqs doneTouchedRemainingEvidence
A1 SSO Gateway Identity & access Pilot verified 9/12 2026-09-22
  • R6 [prod]: the Graph transitiveMemberOf path for a groups-claim overage is not implemented (no ENCLAVE_AUTH_GROUP_OVERAGE anywhere); the demo rung warns and keeps memberships
  • R11: the auth.token_rejected audit event does not exist — a rejected token is logged, never audited
  • R12 [prod]: JWKS 24 h refresh schedule and exponential discovery backoff are absent; stale-cache serving is covered
  • A real Entra tenant has never been used; every proof is against the dev OIDC issuer
specs/A1-sso.md services/enclave-api/src/enclave_api/auth/ services/enclave-api/tests/test_auth_validation.py services/enclave-api/tests/test_identity_sync.py services/enclave-api/tests/test_route_auth_sweep.py services/enclave-api/tests/test_jwks_http.py evals/reports/browser-qa/2026-09-22/results-A.md evals/reports/browser-qa/2026-09-22/results-R.md evals/reports/browser-qa/2026-09-23/results-A-rerun.md evals/reports/browser-qa/2026-09-22/results-W1.md evals/browser-qa/SPEC_COVERAGE.md
A2 RBAC Core Identity & access Pilot verified 13/13 2026-09-18
  • Q4 (more granted collections than the retrieval budget) failed on 2026-09-22 and passed on the 2026-09-23 re-run; the fix is live-proven once, not soaked
  • The authorisation matrix covers every contract operation (77 operations x 7 personas, 0 deviations) with a coverage gate, but only against the dev issuer's personas
specs/A2-rbac.md services/enclave-api/src/enclave_api/rbac.py services/enclave-api/tests/test_rbac.py services/enclave-api/tests/test_admin.py services/enclave-orchestrator/tests/unit/test_scope_guard.py evals/reports/browser-qa/2026-09-22/results-J.md evals/reports/browser-qa/2026-09-22/results-Q.md evals/reports/browser-qa/2026-09-23/results-B-rerun.md evals/security/authz_matrix.py evals/reports/browser-qa/2026-09-23/results-W1-rerun.md
A3 ACL Permission-Sync Identity & access Production partial 10/11 2026-09-22
  • R8: the nightly acl_full_sweep arq job does not exist — grep over services/ returns nothing, and the workers cron list has no sweep entry; only delta-driven ACL passes run
  • R9 [prod]: collection quarantine after N failed runs is implemented and unit-tested but has never been observed end to end (browser-QA row Q6 is a [P2] skip)
  • R7's re-tag cost on a real library is a VERIFY-ON-INSTALL item; graph-mock cannot measure it
  • Depth boundary is honest and unchanged: no folder-scoped unique permissions, no sharing links, no external users
specs/A3-acl-permission-sync.md services/enclave-workers/src/enclave_workers/connectors/acl.py services/enclave-workers/tests/test_acl_mirror.py services/enclave-workers/tests/test_acl_quarantine.py packages/enclave-blueprint/src/enclave_blueprint/acl.py services/enclave-api/tests/test_acl_audience.py services/enclave-orchestrator/tests/unit/test_acl_legs.py evals/reports/browser-qa/2026-09-23/results-B-rerun.md evals/browser-qa/SPEC_COVERAGE.md
A4 Audit Trail Identity & access Production verified 11/12 2026-09-27
  • R12 [prod]: ENCLAVE_AUDIT_STRICT (fail admin mutations closed when even the sync fallback fails) does not exist
  • R3 [prod]: deploy/ops/sql ships ops-readonly-role.sql and retention-role.sql, but not a restricted INSERT+SELECT runtime role for the application
  • R9: month-range partitioning was deliberately superseded by the bounded-prefix purge contract decision in docs/18 — recorded as a decision, not claimed as the spec's design; the purge is now scheduled (workers maintain_retention cron, minute 41) and deployed locally at 365/400 days
  • R8's CSV-equals-table row-for-row parity was never observed (browser-QA Q7 recorded a harness gap, not a product defect)
specs/A4-audit.md services/enclave-api/src/enclave_api/audit/ services/enclave-api/tests/test_audit.py services/enclave-api/tests/test_audit_route.py services/enclave-workers/src/enclave_workers/retention.py services/enclave-workers/tests/test_retention.py docs/17-RETENTION-HANDOFF-2026-09-26.md docs/18-RETENTION-CONTRACT-DECISIONS.md docs/evidence/retention-completion-2026-09-26/RESULTS.md evals/reports/browser-qa/2026-09-22/results-W6.md evals/reports/browser-qa/2026-09-27/results-codex-fixes.md
A5 Usage Accounting & Admin Analytics Identity & access Production verified 9/11 2026-09-27
  • R5: POST /internal/v1/usage does not exist in the contract or the router, so worker-originated model calls (transcription, LLM extraction) are not in the ledger at all
  • R6 [prod]: the weekly OTel-span-versus-ledger reconciliation job with a drift metric does not exist
  • R9's 1-million-row latency bar has never been seeded; the rollup was measured under 2 s only on a small dev ledger (Q8)
specs/A5-usage-accounting.md services/enclave-api/src/enclave_api/usage/ services/enclave-api/src/enclave_api/routers/usage.py services/enclave-api/tests/test_usage.py services/enclave-api/tests/test_sse_relay.py services/enclave-ui/src/admin/UsagePage.tsx services/enclave-ui/tests/unit/usage-dashboard.test.tsx services/enclave-workers/tests/test_usage_retention.py evals/reports/browser-qa/2026-09-22/results-Q.md docs/17-RETENTION-HANDOFF-2026-09-26.md
A6 Classification & Sensitive-Data Controls Identity & access Production+ partial 8/12 2026-09-27
  • Nothing runs a detector over an ingested document — grep for detector in services/ finds only configuration and comments, so markings must be supplied, never discovered
  • The clearance ladder, clearance hash, retrieval clause and admin clearance routes are live-proven (Q9: level 3 refused as a non-ordinal with 422, level 30 + NOFORN assigned, the member's next turn carried the byte-identical recomputed hash, removal returned it to level 0, both writes audited); the 2026-09-22 failure where the hash never moved is closed
  • The wider admin surface for classification (scheme browsing, per-collection mode management beyond collection creation) is not built
  • Redaction of sensitive spans in output is code in the guardrails chassis, not a proven A6 product surface
specs/A6-classification-and-redaction.md packages/enclave-blueprint/src/enclave_blueprint/classification.py packages/enclave-blueprint/tests/test_classification.py deploy/config/classification/schemes/ services/enclave-api/src/enclave_api/routers/admin.py (classification clearances, from line 777) services/enclave-api/src/enclave_api/rbac.py (clearance resolution, lines 249-268) services/enclave-orchestrator/tests/unit/test_classification_legs.py evals/reports/browser-qa/2026-09-23/results-B-rerun.md (Q9 PASS) evals/browser-qa/SPEC_COVERAGE.md
A7 Human-in-the-Loop Approval Workflows Identity & access Production+ verified 13/13 2026-10-01
  • Opt-in by ruling: zero policies ship and the flag is off by default; policies are data with a bounded condition over a closed set of facts, versioned snapshots, four-eyes and quorum, a 60-second time-limit sweep with escalation; a policy with history is archived, never deleted (rulings #247–#274)
  • A chat answer can be held only on a classification posture; today that posture is collection-grained because A6's label detector has no emitter and no admin surface writes a collection's classification mode (ruling #254) — the label-grained case is A6's prerequisite, not A7's
  • The reviewer sees the held output under their own grants: citations and the excerpt are withheld with a counted reason when they hold no grant (rulings #268/#268a/#268b); an admin who is not an approver gets a triage read and can release nothing (ruling #260)
  • A tool-call hold released after the requester kept using the thread runs on its pinned checkpoint for the stream only, so the later turns stay the thread's head (ruling #272d); a refused release is reported as such, never as released
  • Email delivery holds were proven at the relay hand-off; the dev stack has no SMTP relay configured, so the mailbox side is suppressed either way
specs/A7-approval-workflows.md docs/26-CONTRACTS-V040-APPROVALS.md docs/15-BUILD-BACKLOG-2026-09-25.md evals/reports/browser-qa/2026-10-01/results-A7.md evals/reports/browser-qa/2026-10-01/results-A7-fixes.md evals/reports/browser-qa/2026-10-01/results-A7-scope.md evals/reports/browser-qa/2026-10-01/results-A7-regression.md evals/reports/browser-qa/2026-10-01/results-A7-fixes2.md
B1 SharePoint Connector Connectors & ingestion Production partial 11/15 2026-09-22
  • R9(a) is broken in the only way it can be measured here: a delta entry marked deleted did not drive a delete — the second run reported deleted 0, the connector_items row survived, and the removed document still answered with a citation. The report's own finding is that the tombstone never reaches a connector and graph-mock cannot express one
  • R10 [prod] global per-tenant token bucket across the worker pool is not implemented
  • R15 [prod] multi-site scope discipline is documented, not exercised
  • No real Microsoft Graph tenant has ever been used; every run is against deploy/graph-mock
  • R12b's unique-permission survey is bounded and tested but no run with a non-empty acl block was available, so acl.unmappable is not re-observed through the admin surface
specs/B1-sharepoint-connector.md services/enclave-workers/src/enclave_workers/connectors/sharepoint.py services/enclave-workers/src/enclave_workers/connectors/graph.py services/enclave-workers/tests/test_sharepoint_sync.py services/enclave-workers/tests/test_graph_client.py services/enclave-api/src/enclave_api/routers/connectors.py services/enclave-api/tests/test_connectors.py services/enclave-ui/src/admin/ConnectorsPage.tsx evals/reports/browser-qa/2026-09-22/results-Q.md (Q12 PASS: stats schema-locked) evals/reports/browser-qa/2026-09-23/results-B-rerun.md (Q11 FAIL: tombstone)
B2 Confluence Connector Connectors & ingestion Production spec only 0/10 2026-09-12
  • The connector type enum admits confluence; no sync engine, no CQL cursor, no space inventory sweep exists
  • The spec is deliberately shape-only (its own heading says 'shape, not final') and expands to B1 depth when an engagement pays for it
  • Needs a Confluence tenant
specs/B2-confluence-connector.md docs/15-BUILD-BACKLOG-2026-09-25.md evals/browser-qa/SPEC_COVERAGE.md
B3 File Lifecycle Service Connectors & ingestion Pilot verified 16/17 2026-09-27
  • An hourly sweep tick is not estate coverage: at 293 collections the default batch revisits a project about every 15 h, and the deepest project needs a further visit per 100 rows. The revisit period is computed per tick and published as enclave_files_sweep_project_revisit_seconds — the honest figure, not a fix
  • Collections at or above 10,000 documents are deliberately skipped by reconciliation
  • Large-estate behaviour above the Mac's ceiling is unmeasured: nv-ingest was OOM-killed at 583 files on this box (2026-09-22)
specs/B3-file-lifecycle.md services/enclave-api/src/enclave_api/files/ services/enclave-api/tests/test_files.py services/enclave-workers/src/enclave_workers/file_reconciliation.py services/enclave-workers/tests/test_file_reconciliation.py services/enclave-workers/tests/test_file_reconciliation_live.py docs/evidence/b3-reconciliation-2026-09-26/RESULTS.md docs/evidence/b3-reconciliation-2026-09-26/deployment/RESULTS.md docs/16-HANDOFF-2026-09-26.md evals/reports/browser-qa/2026-09-22/results-C.md evals/reports/browser-qa/2026-09-27/results-codex-fixes.md (Row 8 PASS) evals/ingestion_corpus/report-2026-09-27.md
B4 MCP Connector Framework Connectors & ingestion Production implemented 10/12 2026-09-16
  • No real MCP server has ever been connected: the Atlassian instance R6 names as the proven case has not been stood up, so tool discovery and invocation are proven only against fixtures
  • R12 [prod]: minimal-env stdio subprocess launch is specified, not asserted
  • Q16 recorded two shape findings — the callback is a GET (a POST is 405) and state is a signed URL token rather than a connector_oauth_states row, which is empty
  • Each external connection needs its own acceptance pass
specs/B4-mcp-connector-framework.md services/enclave-orchestrator/src/enclave_orchestrator/mcp/ services/enclave-orchestrator/tests/unit/test_mcp_bridge.py services/enclave-orchestrator/tests/unit/test_mcp_registry.py services/enclave-orchestrator/tests/unit/test_mcp_auth_and_session.py services/enclave-api/src/enclave_api/connectors/oauth_state.py services/enclave-api/src/enclave_api/connectors/tokens.py evals/reports/browser-qa/2026-09-22/results-Q.md (Q16 PASS: OAuth start + wrong-state callback)
B5 Ingestion Tuning Pack Connectors & ingestion Pilot partial 5/11 2026-09-27
  • R7: evals/make_tuning_report.py and evals/templates/tuning_report.md do not exist, so the per-engagement tuning report — the billable deliverable — has no generator
  • deploy/config/ingestion-presets holds only a README; the five presets are the in-code built-ins, with no yaml library accreted yet
  • R8 (contribute-back), R9 [prod] (query-side companions), R11 (scratch-collection hygiene verification) are procedure, not code
  • Large-corpus capacity is not established (docs/15 records an NVIDIA hold); the 91-file compatibility matrix and the 240-file product-door run are what exist instead
  • What IS proven: full-page OCR raised the 91-file suite from 86/91 content checks and 46/51 markers to 91/91 and 51/51
specs/B5-ingestion-tuning-pack.md packages/enclave-blueprint/src/enclave_blueprint/presets.py deploy/config/ingestion-presets/README.md evals/TUNING.md evals/file_types/results/2026-09-25/RESULTS-full-page-ocr.md evals/file_types/results/2026-09-25/OCR-mitigation.md evals/ingestion_corpus/report-2026-09-27.md docs/SUPPORTED_FILE_TYPES.md evals/browser-qa/SPEC_COVERAGE.md
B6 Data Pipeline Engine Connectors & ingestion Production+ verified 10/11 2026-09-27
  • Q19 half-unobservable: the typed-records console rows are correct, but query_records is not in the enabled tool set on this deployment, so the assistant-side read of pipeline records was never driven
  • 10 of the 11 requirements are [prod]-rung; the 3,076-file main-corpus capacity and reliability run is deferred to a provisioned VM (docs/15)
  • What IS proven live: an every-minute cron is refused by design (15-minute floor), a */15 schedule fired exactly once with trigger: schedule, and quarantine release returns 422 verbatim on an unknown principal with counts untouched
specs/B6-data-pipeline-engine.md services/enclave-workers/src/enclave_workers/pipelines/ services/enclave-workers/tests/test_pipeline_engine.py services/enclave-workers/tests/test_pipeline_tabular.py services/enclave-workers/tests/test_pipeline_mail.py services/enclave-workers/tests/test_pipeline_imaging.py services/enclave-workers/tests/test_pipeline_task_recovery.py services/enclave-api/src/enclave_api/routers/pipelines.py services/enclave-api/tests/test_pipelines.py services/enclave-ui/src/admin/PipelinesPage.tsx packages/enclave-pipeline-spec/ evals/reports/browser-qa/2026-09-22/results-Q.md (Q17, Q18 PASS; Q19 FAIL)
B7 Provenance & Lineage Connectors & ingestion Production verified 13/13 2026-10-01
  • Lineage is assembled at read time from existing rows (no lineage tables) with four node statuses: resolved, restricted (by grants, never by role — an admin without the grant sees a withheld node too, ruling #231), unresolved (names what it was resolving from) and expired (names the retention floor)
  • The lineage report is markdown and self-contained HTML carrying its source-row ids and digest; a .docx rendering is deferred with its cost named (ruling #236), and a PROV/OpenLineage projection is deferred until a redacted node has a vocabulary (ruling #243)
  • Grant snapshots are write-once, self-verifying and retention-exempt (rulings #232/#240); pipeline extraction model calls are now recorded and linked (ruling #246)
  • Lineage ships on by default (ruling #241); its redaction was verified through the product in three rounds
specs/B7-provenance-lineage.md docs/25-CONTRACTS-V038-LINEAGE.md docs/15-BUILD-BACKLOG-2026-09-25.md evals/reports/browser-qa/2026-09-30/results-B7.md evals/reports/browser-qa/2026-09-30/results-B7-fixes.md evals/reports/browser-qa/2026-09-30/results-B7-regression.md evals/reports/browser-qa/2026-10-01/results-B7-final.md
C1 Production Chat UI Chat & workspace Pilot verified 20/21 2026-09-28
  • R11's drag-and-drop half failed on 2026-09-22 (no dropzone of any spelling) and was implemented afterwards in commit f3344e6 — Composer.tsx and CorpusTab.tsx now carry onDrop and a corpus-dropzone testid, but that fix has not been re-observed through the browser
  • R18's security headers pass (Q22), and the citation page-map, mobile breakpoint and long-conversation defects found on 2026-09-21/22 are fixed and re-run
  • Citation precision is the honest limit, not a UI gap: citations land on the right place 46.5% of the time on long PDFs in the 2026-09-27 corpus run
specs/C1-chat-ui.md services/enclave-ui/src/components/chat/ services/enclave-ui/src/components/upload/ services/enclave-ui/tests/unit/ (45 unit suites) services/enclave-ui/tests/live/chat-d.spec.ts evals/reports/browser-qa/2026-09-22/results-D.md evals/reports/browser-qa/2026-09-22/results-L.md evals/reports/browser-qa/2026-09-22/results-N.md evals/reports/browser-qa/2026-09-22/results-K.md evals/reports/browser-qa/2026-09-23/results-D-rerun.md evals/reports/browser-qa/2026-09-22/results-I.md
C2 Reasoning Transparency Chat & workspace Pilot verified 13/13 2026-09-22
  • Nothing outstanding against the spec; the trail is pure rendering of contract events, so its honesty depends on the orchestrator emitting them (D1/D2)
specs/C2-reasoning-transparency.md services/enclave-ui/src/components/chat/ReasoningTrail.tsx services/enclave-ui/tests/unit/reasoning-trail.test.tsx services/enclave-ui/tests/unit/reasoning-trail-depth.test.tsx services/enclave-ui/tests/unit/trail-collection-labels.test.tsx services/enclave-ui/tests/e2e/reasoning-trail.spec.ts evals/reports/browser-qa/2026-09-22/results-D.md evals/reports/browser-qa/2026-09-28/results-C6-pass7.md (trail renders on a co-edit turn)
C3 Projects / Workspaces Chat & workspace Pilot verified 16/16 2026-09-27
  • Archive/restore, member pagination, activity ordering, tab deep links and tab memory are all live-proven in three engines; nothing outstanding against the spec
specs/C3-projects.md services/enclave-ui/src/components/project/ services/enclave-api/src/enclave_api/routers/projects.py services/enclave-api/tests/test_api_projects.py services/enclave-ui/tests/live/projects.spec.ts services/enclave-ui/tests/live/members.spec.ts evals/reports/browser-qa/2026-09-22/results-B.md evals/reports/browser-qa/2026-09-22/results-E.md evals/reports/browser-qa/2026-09-23/results-E-rerun.md evals/reports/browser-qa/2026-09-22/results-Q.md (Q23 PASS)
C4 Admin Console Chat & workspace Production verified 20/21 2026-09-23
  • The collections list is joined with live Blueprint state and the drift field is served on all rows, but the deliberate-drift sub-check (a row with no upstream collection) was never exercised (Q1 note)
  • Audit export row-for-row parity with the on-screen table is unobserved (Q7 harness gap)
specs/C4-admin-console.md services/enclave-ui/src/admin/ services/enclave-api/src/enclave_api/routers/admin.py services/enclave-api/tests/test_admin.py services/enclave-ui/tests/unit/admin-console.test.tsx services/enclave-ui/tests/live/admin-f.spec.ts evals/reports/browser-qa/2026-09-22/results-F.md evals/reports/browser-qa/2026-09-23/results-F1-rerun.md evals/reports/browser-qa/2026-09-23/results-F2-rerun.md evals/reports/browser-qa/2026-09-22/results-Q.md (Q1, Q2 PASS)
C5 Interface Settings & Embedded Copilot Chat & workspace Open verified 15/17 2026-09-22
  • R9's focus return failed on 2026-09-22 (focus landed on the host div, not the launcher); loader.ts now calls launcher.focus() after commit f3344e6, but the fix has not been re-observed through the browser
  • R5: the logo URL is the one interface field that does not move the live preview; the other six do, without a save
  • The spec carries no Offer tier line — tier Open here means unassigned, not free
  • Loader budget is proven at 5,309 bytes (2,369 gzipped) with one window global and frame-ancestors scoped to /embed only
specs/C5-interface-and-copilot.md services/enclave-api/src/enclave_api/routers/interface.py services/enclave-api/src/enclave_api/interface_defaults.py services/enclave-api/tests/test_interface_settings.py services/enclave-ui/src/admin/InterfacePage.tsx services/enclave-ui/src/routes/EmbedRoute.tsx services/enclave-ui/embed/loader.ts services/enclave-ui/tests/live/copilot-embed.spec.ts evals/reports/browser-qa/2026-09-22/results-G.md evals/reports/browser-qa/2026-09-22/results-Q.md (Q22, Q24, Q25 PASS; Q26 FAIL)
C6 Document Canvas Chat & workspace Production verified 11/14 2026-10-01
  • R14 production rung deferred by spec: per-block comment threads, multi-user concurrent editing with presence
  • The creator of a private canvas can find and archive it after its permissions lapse (ruling #89a, 2026-10-01); opening it stays refused with the api's own reason
specs/C6-document-canvas.md docs/19-CONTRACTS-V031-CANVAS.md services/enclave-api/src/enclave_api/canvases.py services/enclave-api/src/enclave_api/routers/canvases.py services/enclave-api/tests/test_canvases.py services/enclave-orchestrator/src/enclave_orchestrator/canvas.py services/enclave-orchestrator/tests/unit/test_canvas.py services/enclave-workers/src/enclave_workers/canvas_export/render.py services/enclave-workers/tests/test_canvas_export.py services/enclave-ui/src/components/canvas/ services/enclave-ui/tests/live/canvas.spec.ts evals/reports/browser-qa/2026-09-27/results-C6.md evals/reports/browser-qa/2026-09-27/results-C6-rerun.md evals/reports/browser-qa/2026-09-28/results-C6-pass7.md evals/reports/browser-qa/2026-09-28/results-C6-pass8.md evals/reports/browser-qa/2026-09-28/results-C6-final.md evals/reports/browser-qa/2026-09-28/results-C6-final2.md evals/reports/browser-qa/2026-09-28/results-C6-cosmetic.md evals/reports/browser-qa/2026-09-28/results-C6-marktext.md
D1 LangGraph Orchestration Core Agents & generation Pilot verified 18/19 2026-09-27
  • Q28 (20 concurrent turn streams with no interleaving) is a [P2] skip — concurrency is proven at group N's scale, not at the spec's 20
  • Retrieval is bounded at 45 s and a stalled search surfaces as upstream_unavailable rather than being blamed on the model (fixed 2026-09-21)
specs/D1-langgraph-core.md services/enclave-orchestrator/src/enclave_orchestrator/graph/ services/enclave-orchestrator/src/enclave_orchestrator/bridge.py services/enclave-orchestrator/src/enclave_orchestrator/checkpoint.py services/enclave-orchestrator/tests/unit/ (60 suites incl. test_graph_behaviour, test_cancel_redis, test_checkpoint) evals/reports/browser-qa/2026-09-22/results-D.md evals/reports/browser-qa/2026-09-22/results-N.md evals/reports/browser-qa/2026-09-22/results-Q.md (Q27 PASS: keep-alive ping at 15 s) evals/reports/browser-qa/2026-09-22/results-W7.md (failure injection + 60-minute soak)
D2 RAG Agent Agents & generation Pilot verified 17/18 2026-09-27
  • Measured retrieval quality is the honest ceiling, not a spec gap: right document 87.1%, expected fact 71.0% exact-match lower bound, citation location 46.5% over 556 turns on hosted models
  • Sheet citations and ordinal back-references landed after the 09-23 run and are proven by their own records (commits d91c2cb, 14155bd, 9d9af77)
  • Identifier reads carry a measured silent-error rate (19 wrong reads in 75 on the 09-25 run); the bar is bounded measured error, never zero
specs/D2-rag-agent.md services/enclave-orchestrator/src/enclave_orchestrator/agents/rag/ services/enclave-orchestrator/src/enclave_orchestrator/retrieval.py services/enclave-orchestrator/tests/unit/test_acl_legs.py services/enclave-orchestrator/tests/unit/test_identifier_retrieval.py services/enclave-orchestrator/tests/unit/test_scope_guard.py evals/reports/browser-qa/2026-09-22/results-L.md evals/reports/browser-qa/2026-09-22/results-D.md evals/reports/browser-qa/2026-09-23/results-B-rerun.md (Q4 PASS after the 09-22 failure) evals/ingestion_corpus/report-2026-09-27.md
D3 Tool & Action Framework Agents & generation Production verified 11/12 2026-09-22
  • query_records is implemented and unit-tested but is not in the enabled tool set on the dev deployment, so Q19's assistant-side half is unobservable
  • Tool-call redaction and the per-turn budget are asserted in unit tests and in the injection suite, not in a dedicated live row
specs/D3-tool-framework.md services/enclave-orchestrator/src/enclave_orchestrator/tools/ services/enclave-orchestrator/tests/unit/test_tool_registry.py services/enclave-orchestrator/tests/unit/test_tool_guard.py services/enclave-orchestrator/tests/unit/test_tool_sdk.py services/enclave-orchestrator/tests/unit/test_tools_config_and_builtins.py services/enclave-orchestrator/tests/unit/test_tool_query_records.py evals/reports/browser-qa/2026-09-22/results-Q.md (Q29 PASS through the tool path) evals/reports/browser-qa/2026-09-22/results-M.md
D4 Code Interpreter / Analysis Agent Agents & generation Production verified 12/12 2026-09-27
  • Proven on the dev stack only; the sandbox image and the 60 s kill are asserted there, not on customer hardware
specs/D4-code-interpreter.md services/enclave-orchestrator/src/enclave_orchestrator/agents/analysis/ services/enclave-workers/src/enclave_workers/sandbox/ services/enclave-workers/tests/test_sandbox_runner.py services/enclave-workers/tests/test_sandbox_image.py services/enclave-workers/tests/test_sandbox_collect.py services/enclave-orchestrator/tests/unit/test_analysis_node.py evals/reports/browser-qa/2026-09-22/results-Q.md (Q29 PASS: name-to-file-id, code never in the deltas, real PNG, network_mode=none, nothing left behind)
D5 Model Router Agents & generation Production verified 12/12 2026-09-22
  • Failover between two genuinely different backends has been exercised against configured endpoints, not across a real NVAIE-plus-open-weights estate
  • Repeated provider reliability under sustained load is a release check, not proven (docs/15)
specs/D5-model-router.md packages/enclave-router/ packages/enclave-router/tests/ services/enclave-orchestrator/tests/unit/test_router.py services/enclave-orchestrator/tests/unit/test_breaker.py services/enclave-orchestrator/tests/unit/test_live_router.py services/enclave-orchestrator/tests/unit/test_live_routing_stability.py evals/reports/browser-qa/2026-09-22/results-Q.md (Q30 PASS: every usage frame names a configured backend)
D6 Structured Document Generation Agents & generation Production+ verified 7/9 2026-09-27
  • R6: no per-template E1-style acceptance rubric exists (no rubric slice in evals/ or the contract), so a generated document is not scored against its template
  • Repeated provider reliability is not proven — docs/15 says so explicitly; the live gate was three engines in 4.3 minutes
  • 8 of the 9 requirements are [prod]-rung and NVIDIA capacity validation waits on a provisioned VM
  • R9's source-to-output traceability appendix is implemented in the docx renderer
specs/D6-structured-document-generation.md docs/14-CONTRACTS-V030-DOCUMENTS.md services/enclave-api/src/enclave_api/documents.py services/enclave-api/src/enclave_api/routers/documents.py services/enclave-api/tests/test_documents.py services/enclave-orchestrator/src/enclave_orchestrator/documents.py services/enclave-orchestrator/tests/unit/test_documents.py services/enclave-workers/src/enclave_workers/document_export/render.py services/enclave-workers/tests/test_document_export.py services/enclave-ui/src/components/project/DocumentsTab.tsx evals/reports/browser-qa/2026-09-27/results-codex-fixes.md (Row 2 PASS end to end through the UI; Row 4 PASS refused section)
D7 Scheduled & Proactive Agents Agents & generation Production+ verified 16/16 2026-09-30
  • Event triggers cover three facts: pipeline_run_finished, connector_run_finished and file_indexed (the per-file trigger landed 2026-09-30 with B3's file.indexed, ruling #209; a bulk upload coalesces into one run)
  • Two of the spec's three output actions (artifact, thread_post) are refused, not deferred: they widen disclosure (ruling #152)
  • Three shapes could not be produced through the product and are recorded as method limits, not failures: readyz 'degraded', a cursor rewind replay, the flag-off internal execute route
  • Recovery after an outage fires a missed cron slot once (ruling #213); a watchers-off replica on a shared queue hands the run job and cron slots back instead of failing them (#216a, proven 2026-09-30)
specs/D7-scheduled-agents.md docs/23-CONTRACTS-V036-WATCHERS.md docs/15-BUILD-BACKLOG-2026-09-25.md evals/reports/browser-qa/2026-09-29/results-D7.md evals/reports/browser-qa/2026-09-29/results-D7-fixes.md evals/reports/browser-qa/2026-09-29/results-D7-regression.md evals/reports/browser-qa/2026-09-29/results-D7-final.md
D8 Deep Research (private corpus) Agents & generation Production+ verified 16/16 2026-10-22
  • FROZEN 2026-10-22 on the measured record. PRECISION: across 21 paid acceptance runs since 2026-10-11 every statement delivered was a verified excerpt — eight audits at zero on every run, no unsupported lead sentence. RECALL against the authored government pack (v2.1, denominators 11/18/17 known-reachable facts): the ten-run acceptance matrix was credited 10 of 10 on runtime d294b3b (gov-001 11/11 x4, gov-003 19/19, 18/19, 18/18, gov-004 17/17 x3). After that the index cleanup (docs/28 #320a-e: superseded renditions retired, U+0002 marker removed, 44 files re-indexed) and the deterministic section index (#319b) landed, gated and verified by replay and nine fresh-plan dry probes on the final runtime (gov-003 18/18 x3, gov-004 17/17 x3, gov-001 9/11 x3). The paid runs on that final runtime are INCOMPLETE and recorded as such: one gov-003 run scored 16/18 with 548 passages unread because the hosted model answered 57% slower than the clock was sized for (#320g); gov-001's 9/11 is a measured residual (#320f: two body paragraphs of a 3,189-chunk volume, previously reached only through a retired duplicate rendition). Record: evals/reports/d8-recovery/acceptance441-matrix.json; every failed attempt kept with its cause.
  • What the two weeks of acceptance found and fixed, each measured before and after (docs/28 #306g-#306k): heading-shaped facts in large volumes (a contents line, a section heading, a clause heading) were reached only by luck; three retrieval tiers now complete a short or medium document the window holds one page of, read the contents pages of a large held document, and run on the survey window too. A second, separate failure mode was the run clock: with larger windows the 20% delivery reserve truncated reading (459 of 1,463 survey passages unread in one run); the acceptance clock is sized from the measured read rate (~670 passages/h), 25,200 s. Both modes are named per run in the matrix.
  • Known limits, not hidden: recall is a measured rate on three questions over one government estate, not a guarantee; a question over a larger corpus can hit the wall clock and gets a partial report that names what was not read (#284); a single search timeout after one retry still ends a run with an error instead of a gap (seen once, infrastructure, recorded); the survey window spends the whole medium budget so there it selects among documents; the principled next step for heading-shaped facts is a deterministic per-document section index (backlog). Probe method for any change to a stochastic path: fresh-plan dry probes (~$0.09) before any paid run.
  • Budgets are platform defaults by ruling: 8 sections, 24 sub-questions, 72 searches, 2 follow-ups, 1500/8000 tokens, 1200 s wall clock with a 180 s assembly grace, 3 concurrent runs; a wall-clock trip delivers a partial report, never nothing (#284a-#284e). The acceptance configuration (evals/reports/d8-recovery/nebius120-compose-347.yaml) widens these for the measurement and is not a product default.
  • The scope of a run is every collection the requester can read, named on the run page before the plan (#276a); a per-run scope picker that narrows below grants is an open product decision.
  • Routing and planning quality depend on each collection's description, which an admin fills in the console (#303a/#303b); an undescribed collection is routed by project name and counted, not named, on the trail.
  • A run orphaned by an api restart is closed by the workers' sweep as error/orphaned with nothing delivered (#282a); cancel first — cancel delivers the partial report.
  • Known limits of the honesty filters: the absence filter is English-only; spreadsheet sheet footnotes are lost in chunking (an ingestion item, not D8's); a soft-hyphen (U+0002) artifact sits in 4.3% of indexed chunks across 48 documents (ingestion item). Presets (report outlines) are config data; none ship.
specs/D8-deep-research.md docs/27-CONTRACTS-V041-RESEARCH.md docs/15-BUILD-BACKLOG-2026-09-25.md evals/research/README.md evals/reports/browser-qa/2026-10-02/results-D8.md evals/reports/browser-qa/2026-10-02/results-D8-check1.md evals/reports/browser-qa/2026-10-02/depth-gov-003.md evals/reports/browser-qa/2026-10-02/results-D8-regression.md evals/reports/browser-qa/2026-10-02/results-D8-check2.md evals/reports/browser-qa/2026-10-02/results-D8-regression2.md evals/reports/browser-qa/2026-10-02/depth-false-gaps.md evals/reports/browser-qa/2026-10-02/results-D8-check3.md evals/reports/browser-qa/2026-10-02/depth-map-step-measurement.md evals/reports/browser-qa/2026-10-02/results-D8-check4.md evals/reports/d8-recovery/acceptance441-matrix.json docs/28-CONTRACTS-V042-RESEARCH-CONTENT.md evals/reports/d8-recovery/lane-R1.md evals/reports/d8-recovery/lane-R2.md evals/reports/d8-recovery/lane-R3.md evals/reports/d8-recovery/lane-R4.md evals/reports/d8-recovery/lane-R5.md docs/CLAUDE-CODE-HANDOFF.md
E1 Eval Harness & Acceptance Kit Evaluation & safety Production verified 11/11 2026-09-27
  • One real finding stands: the run's two error tolerances contradict each other in the same output (max_errored_questions: 0 and the VOID line versus the gate's 'ok 1 question(s) errored (limit 2)')
  • Ragas metrics scored live (faithfulness 0.944, answer relevancy 0.831) with 0 RBAC leaks; the honest part is that the harness VOIDed its own run for one errored question, which is the behaviour the spec asks for
  • Full expansion beyond the seed gold set is deferred per docs/02
specs/E1-eval-harness.md evals/harness/enclave_evals/ evals/goldsets/ evals/personas.yaml evals/tests/ evals/reports/acceptance_20260916-1947_a7069f4fd6a7.md evals/reports/browser-qa/2026-09-22/results-Q.md (Q31 PASS: validate plus a 15-question scored run) evals/ops/run-evals.sh
E2 Guardrails Profile & Injection Defense Evaluation & safety Pilot verified 8/10 2026-09-27
  • The NemoGuard topic/content rung is off on the dev profile (ENCLAVE_GUARDRAILS_ENABLED=false gates the NemoGuard-dependent heuristic only), so the NIM-backed half of the profile is unproven live; the injection, fencing, exfiltration and output guards run regardless and are what M and W10 measured
  • PII handling policy is code (guardrails/pii.py) with a detector pack, not a proven product surface
  • Guard steps are announced before a refusal so a block is not mistaken for a model failure (fix 2026-09-21)
specs/E2-guardrails.md services/enclave-orchestrator/src/enclave_orchestrator/guardrails/ deploy/profiles/guardrails/ services/enclave-orchestrator/tests/unit/test_injection_suite.py services/enclave-orchestrator/tests/unit/test_guardrails_profiles.py services/enclave-orchestrator/tests/unit/test_guardrails_layer.py services/enclave-orchestrator/tests/fixtures/injection/corpus.json evals/reports/browser-qa/2026-09-22/results-M.md evals/reports/browser-qa/2026-09-22/results-W10.md (52 hostile cases) evals/reports/browser-qa/2026-09-22/results-K.md
E3 Continuous Eval Dashboard Evaluation & safety Production+ verified 12/12 2026-09-30
  • The regression alert is proven end to end with a real measured drop (a retrieval setting degraded through configuration, restored after): confirmed regression reading, notification with a deep link, recovery reading
  • Fabrication grading is claim-level and zero-tolerance (ruling #220): any unsupported claim fails the question and the run. The judge was measured against a 44-item known-truth slice with the adopted judging (strict instruction, three-sample vote): recall of planted defects 0.955 (95% CI 0.77–1.00), precision 0.875 (95% CI 0.68–0.97); every run carries and prints that calibration. The residual is disclosed by design: zero tolerance trades a false alarm on a derived or paraphrased statement, which costs a human one look, for never missing a fabrication.
  • Worker replicas on one Redis may run with different flags: a flag-off replica hands a job or cron slot back (jittered, 15-minute budget) and the flag-on replica runs it, proven for E3 and D7
  • The period report is rendered by the api from the stored rows, not by E1's renderer (ruling #203); the classifier reading is shared so the two cannot disagree
  • The workers image grew from 523 MB to 1.39 GB to carry the judged metrics (Ragas); reversible to the base harness with judged metrics honestly 'not computed'
specs/E3-continuous-eval-dashboard.md docs/24-CONTRACTS-V037-EVAL.md docs/15-BUILD-BACKLOG-2026-09-25.md evals/reports/browser-qa/2026-09-29/results-E3.md evals/reports/browser-qa/2026-09-30/results-E3-fixes.md evals/reports/browser-qa/2026-09-30/results-E3-fixes2.md evals/reports/browser-qa/2026-09-30/results-E3-fixes3.md evals/reports/browser-qa/2026-09-30/results-E3-regression.md evals/reports/browser-qa/2026-09-30/results-E3-fixes4.md evals/reports/browser-qa/2026-09-30/results-E3-final.md evals/reports/browser-qa/2026-09-30/results-E3-regression-proof.md evals/reports/browser-qa/2026-09-30/results-E3-fixes5.md evals/reports/browser-qa/2026-09-30/results-handback-recheck.md evals/calibration/ evals/reports/browser-qa/2026-09-30/results-E3-judge-gate3.md
E4 Feedback to Retrieval Improvement Loop Evaluation & safety Production verified 12/13 2026-09-28
  • R8 per-collection retrieval overrides deferred by ruling #113 (B5's rag.per_collection_overrides is a production config key only); marker_gone / null orphan residuals have no live path (api-tested)
specs/E4-feedback-retrieval-loop.md docs/15-BUILD-BACKLOG-2026-09-25.md evals/browser-qa/SPEC_COVERAGE.md evals/reports/browser-qa/2026-09-28/results-E4.md evals/reports/browser-qa/2026-09-28/results-E4-fixes.md evals/reports/browser-qa/2026-09-28/results-E4-final.md docs/21-CONTRACTS-V034-FEEDBACK.md
F1 Deployment Framework Deployment & operations Pilot verified 9/11 2026-09-27
  • R7 [prod] mTLS bring-up with a certless client refused is a [P2] skip (Q38) — the overlay exists, the proof does not
  • R9 [prod] collector stripping identity attributes from spans is a [P2] skip (Q36)
  • Deployment has only ever been proven on this Mac and on a fresh Linux box stand-up; NVIDIA-hardware deployment proof remains open (docs/15)
  • Ray log flooding (1.7 TB on 2026-09-21) is bounded by RAY_ROTATION_MAX_BYTES in a profile-agnostic override plus a Docker disk cap
specs/F1-deploy-framework.md deploy/ (up.sh, down.sh, build.sh, smoke.sh, check-env.sh, check-stale.sh, profiles/, env/, certs/) deploy/docker-compose.enclave.yaml deploy/docker-compose.mtls.yaml deploy/standup-mac.sh deploy/standup-linux.sh evals/reports/browser-qa/2026-09-22/results-Q.md (Q32, Q35, Q37 PASS; Q36, Q38 [P2] skips) evals/reports/browser-qa/2026-09-22/results-P8.md (full down/up preserves the estate) evals/reports/browser-qa/2026-09-22/results-W7.md evals/reports/browser-qa/2026-09-27/results-codex-fixes.md (Row 1 readiness components)
F2 Sizing Workbook & MIG Allocation Deployment & operations Pilot held 0/10 2026-09-12
  • No sizing workbook exists in the repo (the only file matching 'sizing' is evals/corpus/sizing-guide.md, which is demo-corpus content, not a deliverable)
  • Held on GPU measurement: the standing ruling is that no GPU box is rented until the build-out is done, so the 256 GB RAM per node figure stays a planning input, never a measured minimum (docs/15 says exactly this)
  • MIG recipes are unwritten and unmeasured
specs/F2-sizing-mig.md docs/15-BUILD-BACKLOG-2026-09-25.md deploy/GPU_LAB_RUNBOOK.md evals/browser-qa/SPEC_COVERAGE.md
F3 Air-Gap Install Kit Deployment & operations Production spec only 1/8 2026-09-12
  • No kit builder, no OCI bundle layout, no signed manifest or verify.sh exists
  • The REGISTRY_PREFIX seam F3 depends on is present in F1's compose surface, which is the one piece in place
  • Activates with the first air-gapped engagement; deliberately specced now so F1 does not paint the deploy layer into a corner
specs/F3-airgap-kit.md docs/15-BUILD-BACKLOG-2026-09-25.md evals/browser-qa/SPEC_COVERAGE.md
F4 Managed Ops Pack Deployment & operations Production+ partial 7/9 2026-09-27
  • Recovery drills and service commitments need separate validation — docs/15 says the runbooks and tooling existing is not the same as a validated recovery posture
  • RB-5's quarterly quality report depends on E1 recurring, which has run once, not on a cadence
  • No customer has ever been under a managed contract, so the cadence itself is untested
specs/F4-ops-pack.md docs/runbooks/RB-1-model-refresh.md through RB-8-mtls.md docs/runbooks/ON-CALL-QUICK-REFERENCE.md docs/runbooks/MANAGED-COVERAGE-ONEPAGER.md deploy/ops/ (backup.sh, restore.sh, restore-verify.sh, restore_probe.py, reconcile.py, quarterly-report.py, lint-runbooks.py) deploy/docker-compose.restore-drill.yaml evals/reports/browser-qa/2026-09-22/results-Q.md (Q33, Q34 PASS) evals/reports/browser-qa/2026-09-22/results-W12.md (backup, restore, metrics) evals/reports/browser-qa/2026-09-23/results-F4-check.md
F5 Air-Gap Model Lifecycle Deployment & operations Production+ spec only 1/11 2026-09-16
  • No bundle builder, no staged promotion, no rollback path exists
  • D5's role-based backend config is the seam it would use, and that exists
  • Activates alongside F3 with the first air-gapped Production or Managed engagement
specs/F5-airgap-model-lifecycle.md docs/15-BUILD-BACKLOG-2026-09-25.md evals/browser-qa/SPEC_COVERAGE.md
F6 Notification Service Deployment & operations Production verified 15/15 2026-09-29
  • Webhooks refused by ruling #119 (a second egress destination); D7's watcher.run.finished and watcher.paused events landed 2026-09-29
specs/F6-notification-service.md docs/15-BUILD-BACKLOG-2026-09-25.md evals/browser-qa/SPEC_COVERAGE.md docs/22-CONTRACTS-V035-NOTIFICATIONS.md evals/reports/browser-qa/2026-09-29/results-F6.md evals/reports/browser-qa/2026-09-29/results-F6-final.md evals/reports/browser-qa/2026-09-29/results-F6-final2.md
G1 Security Posture & Audit-Readiness Readiness Open partial not assessed — G1 is an assessment document, not a requirement list (it declares no R1..Rn) 2026-09-16
  • The document's own first line stands: no SOC 2, no CMMC, no ISO 27001, no independent audit and no penetration test
  • No ISMS, no policy set, no SSP, no data-flow/DPIA — those are named as later G-items that hang off G1
  • Its standards references carry explicit verify-before-citing markers, which have not all been URL-verified
  • Never claim end-to-end encryption; the honest claim is the control-by-control evidence table
specs/G1-security-audit-readiness.md deploy/SECURITY.md evals/security/authz_matrix.py evals/security/audit_reconcile.py docs/STANDARDS-ALIGNMENT-FINDINGS.md evals/reports/browser-qa/2026-09-22/results-Q.md (Q35 PASS: tokens in memory only, internal routes refused, gen-secrets coverage) evals/reports/browser-qa/2026-09-22/results-W1.md

Reconciliation

9 differences from docs/15

Where this inventory disagrees with the build backlog, verbatim.

C6

docs/15 says: Spec only — D6 DocumentsTab is a section review surface, not a general co-edit canvas

Found: partial — built since docs/15 was written: contracts v0.3.1-v0.3.3, API canvases router, orchestrator co-edit graph, worker docx/md export, a full React split-pane canvas, and seven live browser passes (latest: pass 7, 2026-09-28, part A 9 PASS / 1 SKIP). Four named defects remain and pass 8 is unreported.

A6

docs/15 says: Present, partial scope

Found: partial, and the specific 2026-09-22 break is now closed: clearance assignment, the 422 ordinal refusal, the hash moving on the member's next turn, and the audit rows were all verified live on 2026-09-23. What is still missing is narrower than docs/15 implies — no detector is ever run over a document.

B1

docs/15 says: Present — real Graph tenant proof separate

Found: partial with an open functional defect, not just a tenant gap: R9(a) deletion reconciliation did not fire on a tombstoned item on 2026-09-23 (deleted 0, row survived, the removed document still answered), and no commit has touched graph-mock or the connector since.

A3

docs/15 says: Present, partial scope — deep ACL semantics and full-sweep coverage require separate reconciliation

Found: partial, and the full sweep is specifically absent rather than merely unreconciled: acl_full_sweep exists nowhere in services/ and the workers cron list has no sweep entry.

A5

docs/15 says: Retention implemented/tested/deployed locally; usage replay protection and privileged maintenance functions implemented

Found: verified for what it claims, but two requirements are absent that docs/15 does not mention: POST /internal/v1/usage (so worker model calls are not in the ledger at all) and the OTel-span-versus-ledger reconciliation job.

F3

docs/15 says: Spec only / deployment track

Found: spec_only, with the one qualification that the REGISTRY_PREFIX seam F3 depends on already exists in F1 — recorded as 1 of 8 rather than 0 of 8.

F5

docs/15 says: Spec only / deployment track

Found: spec_only, same qualification: D5's role-based backend configuration, the seam F5 would promote models through, exists.

D6

docs/15 says: Implemented, live browser gate passed; repeated provider reliability not proven

Found: verified, and one further gap worth naming: R6's per-template acceptance rubric does not exist, so a generated document is never scored against its own template.

F2

docs/15 says: Not validated / NVIDIA hold

Found: held — same conclusion, but recorded as blocked on the 2026-09-27 no-GPU-until-build-out-is-done ruling rather than on NVIDIA, and with the note that the only file in the tree matching 'sizing' is demo-corpus content.

Limits of this inventory

What could not be assessed

Authority order used: specs/*.md (headers + Purpose + R1..Rn); docs/15-BUILD-BACKLOG-2026-09-25.md (verified against code, not copied); docs/02-BUILD-ORDER.md; the actual code in services/*/src, packages/, deploy/, evals/; evals/reports/browser-qa/2026-09-2{0,1,2,3,7,8}/, docs/evidence/*, evals/ingestion_corpus/report-2026-09-27.md; git log; business/ENCLAVE_MODULE_CATALOG.md + spec offer tiers for customer grouping.