| Tool | Purpose | How to Use |
|---|---|---|
| 37-data-model (CLOUD) | SINGLE SOURCE OF TRUTH — All project entities | https://marco-eva-data-model.livelyflower-7990bc7b.canadacentral.azurecontainerapps.io/model/projects/37-data-model |
| 29-foundry | Agentic capabilities (search, RAG, eval, observability) | C:\AICOE\eva-foundation\29-foundry |
| 48-eva-veritas | Trust score and coverage audit | MCP tool: audit_repo / get_trust_score |
| 07-foundation-layer | Copilot instructions primer + governance templates | MCP tool: apply_primer / audit_project |
All agents must query the CLOUD API ONLY to ensure single source of truth. Do NOT use localhost:8010.
Agent rule: Query the cloud data model API before reading source files.
$base = "https://marco-eva-data-model.livelyflower-7990bc7b.canadacentral.azurecontainerapps.io"
Invoke-RestMethod "$base/model/agent-guide" # complete protocol
Invoke-RestMethod "$base/model/agent-summary" # all layer countsComponent: 37-data-model
Status: GA (Cloud Only) -- validate-model PASS 0 violations - LOCAL SERVICE DISABLED (Mar 5) - Cloud remains OPERATIONAL: 41 layers (31 base + Evidence + 9 governance) - ACA deployed (Cosmos 24x7, 100% uptime) - MTI=100 - DATA-MODEL-FIRST ARCHITECTURE (Bootstrap queries API, not files) - Evidence Layer LIVE (L31, patent-worthy) - Branch Protection ACTIVE
Last Updated: March 6, 2026 11:51 AM ET -- Sessions 28-30 COMPLETE: USER-GUIDE.md v2.8 deployed. All 7 governance layers (L33-L39) designed & implemented. Layer audit script (300 lines) & IaC integration design (500+ lines) delivered. See SESSION-28-30-CLOSURE-REPORT.md for details. Ready for production deployment.
THE ONLY AI WITH IMMUTABLE AUDIT TRAILS
GitHub Copilot, Cursor, Replit Agent, Devin = ZERO audit trail. No proof. No history. No compliance.
EVA Foundation = FULL PROVENANCE. 31+ receipts with correlation IDs, test results, artifacts.Patent filed: March 8, 2026 (provisional) -- "Immutable Audit Trail for AI-Generated Code with Correlation ID Linking"
TAM: $119B/year (EVA Veritas $24B + EVA Data Model $66B + EVA Foundry $29B)
Exit valuation: $2-5B (based on Snyk $7.4B, GitHub $7.5B, Databricks $62B comps)Insurance carriers will require this. FDA auditors will require this. Banks will require this.
They will pay $199-$500K/year for provably correct AI.Read: docs/library/11-EVIDENCE-LAYER.md for the strategic narrative
Use: USER-GUIDE.md Section 9 for agent patterns
The EVA Data Model is the single source of truth for the entire EVA ecosystem ? a machine-queryable repository of every significant object in the application and how objects relate to each other across service, UI, and infrastructure boundaries.
The principle: every significant object in the system is a typed node with explicit cross-references. Renaming a field, changing an endpoint, or adding a screen is a model operation first ? not a grep operation.
EVA Data Model applies that principle to the modern cloud stack:
If it is not in the model, agents will rediscover it by reading source files every session. That is a 10-turn grep spiral. The model makes it a 3-line PowerShell query.
Agents: start with USER-GUIDE.md ? a task-by-task guide covering bootstrap, context gathering, implementation, debugging, refactoring, and the model write cycle. Every EVA task should open with a model query, not a file read.
| Component | Type | Port / URL |
|---|---|---|
| 33-eva-brain-v2 / eva-brain-api | FastAPI backend | 8001 |
| 33-eva-brain-v2 / eva-roles-api | FastAPI backend | 8002 |
| 31-eva-faces / admin-face | React SPA | 5174 |
| 31-eva-faces / chat-face | React SPA | 5173 |
| 31-eva-faces / agent-fleet | FastAPI agent orchestrator | 8000 |
| 37-data-model / model-api | FastAPI model service -- see docs/library/03-DATA-MODEL-REFERENCE.md for layer catalog | 8010 |
| 17-apim | Azure API Management | gateway |
| 29-foundry | Azure AI Foundry | models |
| 16-engineered-case-law | Jurisprudence pipeline | ? |
| 20-AssistMe | Legacy assistant | ? |
Layer 0 services What services exist, their ports, tech stack, health endpoint
Layer 1 personas Who can act ? admin, translator, viewer, auditor, machine-agent
Layer 2 feature_flags What features each persona can access (maps to @require_feature)
Layer 3 containers Cosmos DB containers ? fields, partitionKey, indexes
Layer 4 endpoints Every HTTP endpoint ? method, path, auth, request, response, cosmos_reads/writes
Layer 5 screens Every React screen ? route, components, api_calls, fields_displayed
Layer 6 literals Every UI string key ? default_en, default_fr, which screen uses it
Layer 7 agents Agent-fleet agents ? input, output, LLM deployment, skill file
Layer 8 infrastructure APIM routes, Key Vault secrets, Azure resource names
Layer 9 requirements Epics/REQs ? satisfied_by endpoints + screens ? test coverage
# Control-plane catalog (EVA Automation Operating Model)
Layer 10 planes Three-plane taxonomy ? GitHub / Azure / ADO
Layer 11 connections System connections catalog ? ADO, GitHub App, Azure Managed Identity
Layer 12 environments Environment registry ? DEV / STG / PROD with approval gates
Layer 13 cp_skills Control-plane skills catalog (7 skills across 3 planes)
Layer 14 cp_agents Control-plane agents (gh-dev, gh-ci, azure-deploy, ado-scrum)
Layer 15 runbooks Runbook catalog ? RB-001 to RB-004 with steps, evidence, RBAC
Layer 16 cp_workflows Compiled workflow definitions ? wf-pr-ci-evidence, wf-promote-dev
Layer 17 cp_policies Guardrails ? PR-only, evidence-required, env-approval-gates
# Frontend object layers (E-01/E-02/E-03)
Layer 18 components React component catalog ? Fluent UI v9, i18next, WCAG 2.1 AA
Layer 19 hooks Custom React hooks ? useAnnouncer, useFeatureFlags, useRBAC
Layer 20 ts_types TypeScript type definitions ? interfaces, enums, union types
# Catalog & Ops (added post-Phase-4)
Layer 21 mcp_servers MCP server catalog ? azure-search, cosmos, blob (29-foundry)
Layer 22 prompts Prompty template catalog ? system prompts, few-shot patterns (29-foundry)
Layer 23 security_controls OWASP LLM Top 10 + ITSG-33 security controls
Layer 24 runbooks Operational runbook catalog ? RB-001 to RB-004
# Project plane (E-07/E-08) ? waterfall WBS + agile scrum + CI/CD linkage
Layer 25 projects EVA Platform project catalog -- 19 projects, ADO epic IDs, maturity, goals, phase, dependencies
Layer 26 wbs Work Breakdown Structure -- program --> stream --> project --> deliverable --> sprint_block
# DPDCA evolution plane (2026-02-25) -- sprint velocity + RUP milestones + risk register + ADRs
Layer 27 sprints Sprint velocity records -- velocity_planned/actual, mti_at_close, ado_iteration_path
Layer 28 milestones RUP phase gates -- deliverables, sign_off_by, wbs_ids
Layer 29 risks 3x3 risk matrix -- probability, impact, risk_score, mitigation_owner
Layer 30 decisions ADRs (Architecture Decision Records) -- context/decision/consequences, superseded_by, deciders
# Observability plane (L11 – 2026-03-01) – proof-of-completion + LM call tracing
Layer 31 evidence DPDCA phase completions – sprint_id, story_id, phase (D1/D2/P/D3/A), validation gates, merge blockers, metrics (cost, duration, coverage)
Layer 32 traces Emerging: LM call telemetry – model, tokens, cost_usd, latency_ms, correlation_id
# Governance plane (L33-L34 – 2026-03-05) – data-model-first architecture
Layer 33 workspace_config Workspace-level best practices, bootstrap rules, data model config
Layer 34 project_work Active work sessions – replaces STATUS.md with queryable DPDCA sessions, tasks[], blockers[], metrics{}
# Agent automation plane (L35-L38 – 2026-03-05/06) – rules-as-code for CI/CD and quality gates
Layer 35 github_rules GitHub branch protection, PR checks, CI/CD policies per project
Layer 36 deployment_policies Container App config, resource limits, health probes, scaling policies
Layer 37 testing_policies Coverage thresholds (80-95%), CI workflows, test strategies
Layer 38 validation_rules Schema enforcement, compliance gates, data integrity checks
**Architecture Evolution (March 5-6-6, 2026):**
- **File-First → Data-Model-First**: Bootstrap now queries `GET /model/projects/{id}` for governance metadata
- **Session 27**: Enhanced Layer 25 (projects) with `governance{}` and `acceptance_criteria[]` fields
- **Session 27**: Added Layer 33 (workspace_config) and Layer 34 (project_work)
- **Session 28-29**: Added Layer 33 (agent_policies), Layer 34 (quality_gates), Layer 35 (github_rules)
- **Session 30**: Added Layer 36 (deployment_policies), Layer 37 (testing_policies), Layer 38 (validation_rules)
- **Portfolio Queries**: `GET /model/projects/` returns all 56 projects in one call vs 224 file reads (56 × 4 files)
- **Files as Exports**: README/STATUS/ACCEPTANCE become snapshots generated from data model
The Evidence Layer captures proof-of-completion for every story in the DPDCA cycle. Every phase (D1 Discover, D2 Audit, P Plan, D3 Do, A Act) produces an evidence receipt.
For agents: Use the Python library to record evidence after each phase:
import sys
sys.path.insert(0, r"C:\AICOE\eva-foundry\37-data-model")
from .github.scripts.evidence_generator import EvidenceBuilder
gen = EvidenceBuilder(
sprint_id="ACA-S11",
story_id="ACA-14-001",
phase="A",
story_title="Rule loader"
)
gen.add_validation(test_result="PASS", lint_result="PASS", coverage_percent=92)
gen.add_metrics(duration_ms=8450, files_changed=3, tokens_used=12000, cost_usd=0.00045)
gen.add_artifact(path="services/rules/app/loader.py", type_="source", action="modified")
receipt = gen.build()
# PUT /model/evidence/{receipt['id']} (Cosmos records proof automatically)Query evidence across all projects:
# All evidence in a sprint
GET /model/evidence/?sprint_id=ACA-S11
# Evidence with test failures (find what broke)
GET /model/evidence/ | Where { $_.validation.test_result -eq "FAIL" }
# Portfolio audit: count stories per phase
GET /model/evidence/ | Group-Object -Property phase | Select-Object Name, CountMerge gates (CI/CD):
Evidence validation script (scripts/evidence_validate.ps1) blocks merge if:
test_result = "FAIL"? all tests must passlint_result = "FAIL"? all linting must pass
See Evidence Layer Documentation for complete usage.
All entity layers are available over HTTP on port 8010 (local dev) or via ACA (24x7 Cosmos). For complete layer catalog, see docs/library/03-DATA-MODEL-REFERENCE.md.
# Start (local / MemoryStore ? auto-seeds from disk JSON)
$env:PYTHONPATH = "C:\AICOE\eva-foundation\37-data-model"
C:\AICOE\.venv\Scripts\python -m uvicorn api.server:app --port 8010 --reload
# Docs: http://localhost:8010/docs| Route | What it does |
|---|---|
GET /model/{layer}/ |
List all objects in a layer (cached) |
GET /model/{layer}/{id} |
Get one object; 404 if soft-deleted |
PUT /model/{layer}/{id} |
Upsert ? stamps audit columns (created_*, modified_*, row_version) |
DELETE /model/{layer}/{id} |
Soft-delete (is_active=false) |
GET /model/endpoints/filter |
Filter by status, cosmos_writes, cosmos_reads, auth, feature_flag |
GET /model/impact?container=X |
Cross-layer impact: what endpoints/screens/agents break if X changes |
POST /model/admin/seed |
Seed store from disk JSON (idempotent) |
GET /model/admin/validate |
In-process validation ? same checks as validate-model.ps1 |
GET /model/admin/audit |
Audit trail ? last N writes across all layers |
GET /model/graph |
Typed edge list across entity layers -- nodes, edges, BFS traversal, filters |
GET /model/graph/edge-types |
Edge-type vocabulary (20 types: calls, reads, writes, depends_on, ?) |
POST /model/admin/export |
Export store ? enriched JSON with full audit trail ? model/*.json |
Test evidence: 40/41 pytest (T36 pre-existing only) ? 0 violations ? 60 repo_line coverage warnings (non-blocking)
Control-plane catalog routes (layers 10?17):
| Route | What it does |
|---|---|
GET /model/planes |
List planes (GitHub / Azure / ADO) |
GET /model/connections |
List system connections |
GET /model/environments |
List environments (DEV/STG/PROD) |
GET /model/cp_skills |
List control-plane skills |
GET /model/cp_agents |
List control-plane agents |
GET /model/runbooks |
List runbooks (RB-001 to RB-004) |
GET /model/cp_workflows |
List compiled workflow definitions |
GET /model/cp_policies |
List guardrail policies |
? Runtime records (runs, step_runs, artifacts, evidence packs): see 40-eva-control-plane (port 8020)
Shipped: February 25, 2026 10:14 ET ? integrated into 31-eva-faces / portal-face.
Two routes are available to any user with the view:model permission (admin + analyst personas):
| Route | Description |
|---|---|
/model |
Layer Browser -- sidebar of all entity layers, live object count per layer, searchable EvaDataGrid, EvaDrawer detail panel with full JSON viewer |
/model/report |
Data Model Report ? 4-tab dashboard: Overview stats (total objects, ep breakdown, graph node/edge counts), Endpoint Matrix (by service/status), Edge Types, Layer Counts |
Implementation:
31-eva-faces/portal-face/src/api/modelApi.ts? typed HTTP client; default base = ACA endpoint; override withVITE_DATA_MODEL_URLenv var31-eva-faces/portal-face/src/pages/ModelBrowserPage.tsx31-eva-faces/portal-face/src/pages/ModelReportPage.tsx- Permission gate:
view:modeladded toAuthContext.tsx(admin+analystpersonas) - Nav: "Data Model" link in
NavHeader.tsxinside<PermissionGate requires="view:model">
ACA direct (no auth, 24x7):
https://marco-eva-data-model.livelyflower-7990bc7b.canadacentral.azurecontainerapps.io
Default for all portal-face API calls and veritas model_audit tool.
Rule: query the HTTP API first. Never read source files when the model has the answer.
?? Full agent task guide: USER-GUIDE.md Task-by-task patterns for bootstrap, context gathering, implementation, debugging, refactoring, and the model write cycle. Read it before your first session.
Invoke-RestMethod http://localhost:8010/health
# {"status":"ok","service":"model-api","version":"...","store":"MemoryStore","cache":"memory","cache_ttl":60}If the API is not running, start it (takes ~3 s):
$env:PYTHONPATH = "C:\AICOE\eva-foundation\37-data-model"
C:\AICOE\.venv\Scripts\python -m uvicorn api.server:app --port 8010 --reload# What does GET /v1/translations return?
Invoke-RestMethod "http://localhost:8010/model/endpoints/GET /v1/config/translations/{language}"
# All screens in admin-face and their status
Invoke-RestMethod "http://localhost:8010/model/screens/" |
Where-Object { $_.app -eq 'admin-face' } | Select-Object id, route, status
# What screens call that endpoint?
Invoke-RestMethod "http://localhost:8010/model/screens/" |
Where-Object { $_.api_calls -contains 'GET /v1/config/translations/{language}' }
# Cross-layer impact: what breaks if I change the translations container?
Invoke-RestMethod "http://localhost:8010/model/impact/?container=translations"
# Which personas can call POST /v1/ingest/upload?
(Invoke-RestMethod "http://localhost:8010/model/endpoints/POST /v1/ingest/upload").auth
# What literals does TranslationsPage display?
Invoke-RestMethod "http://localhost:8010/model/literals/" |
Where-Object { $_.screens -contains 'TranslationsPage' }
# Filter endpoints ? stub only, writing to jobs container
Invoke-RestMethod "http://localhost:8010/model/endpoints/filter?status=stub&cosmos_writes=jobs"
# ?? E-09 / E-10 ? Provenance ?????????????????????????????????????????????????
# Who created this endpoint and when? (E-09)
$ep = Invoke-RestMethod "http://localhost:8010/model/endpoints/GET /v1/health"
Write-Host "Created: $($ep.created_at) by $($ep.created_by) v$($ep.row_version)"
Write-Host "Source: $($ep.source_file)"
# Jump directly to the route decorator in VS Code (E-10)
$ep = Invoke-RestMethod "http://localhost:8010/model/endpoints/GET /v1/health"
code --goto "C:\AICOE\eva-foundation\$($ep.implemented_in):$($ep.repo_line)"
# Same for a React hook:
$h = Invoke-RestMethod "http://localhost:8010/model/hooks/useTranslations"
code --goto "C:\AICOE\eva-foundation\$($h.repo_path):$($h.repo_line)"
# ?? E-11 ? Graph / DER (live) ????????????????????????????????????????????????
# Edge objects: { from_id, from_layer, to_id, to_layer, edge_type, via_field }
# Node objects: { id, layer, label, status }
# Meta: { node_count, edge_count, depth, duration_ms, ... }
# Full edge type vocabulary (see docs for complete catalog)
Invoke-RestMethod "http://localhost:8010/model/graph/edge-types" |
Select-Object edge_type, from_layer, to_layer, cardinality | Format-Table
# Full graph (all nodes and edges)
$g = Invoke-RestMethod "http://localhost:8010/model/graph/"
Write-Host "nodes=$($g.meta.node_count) edges=$($g.meta.edge_count) ms=$($g.meta.duration_ms)"
# BFS from TranslationsPage 2 hops deep (screen ? endpoint ? container)
$g = Invoke-RestMethod "http://localhost:8010/model/graph/?node_id=TranslationsPage&depth=2"
$g.edges | Select-Object from_id, from_layer, to_id, to_layer, edge_type | Format-Table
# Which screens write to the translations container? (two-hop pattern)
$writes = (Invoke-RestMethod "http://localhost:8010/model/graph/?edge_type=writes").edges |
Where-Object { $_.to_id -eq "translations" }
$callers = (Invoke-RestMethod "http://localhost:8010/model/graph/?edge_type=calls").edges |
Where-Object { $_.to_id -in $writes.from_id }
$callers | Select-Object from_id, to_id
# All services that depend on eva-roles-api
(Invoke-RestMethod "http://localhost:8010/model/graph/?edge_type=depends_on").edges |
Where-Object { $_.to_id -eq "eva-roles-api" } | Select-Object from_id
# Which endpoints are gated by the action.admin.translations flag?
(Invoke-RestMethod "http://localhost:8010/model/graph/?edge_type=gated_by").edges |
Where-Object { $_.to_id -eq "action.admin.translations" } | Select-Object from_id
# Filter graph: only screens ? endpoints
Invoke-RestMethod "http://localhost:8010/model/graph/?from_layer=screens&to_layer=endpoints" |
ForEach-Object { $_.edges } | Format-Table from_id, to_id$m = Get-Content C:\AICOE\eva-foundation\37-data-model\model\eva-model.json | ConvertFrom-Json
$m.endpoints | Where-Object { $_.path -eq '/v1/config/translations/{language}' }
$m.screens | Where-Object { $_.api_calls -contains 'GET /v1/config/translations/{language}' }
$m.literals | Where-Object { $_.screens -contains 'TranslationsPage' }| You want to? | Use |
|---|---|
| Find an endpoint, screen, container, or persona | GET /model/{layer}/{id} |
| List all objects in a layer | GET /model/{layer}/ |
| Filter endpoints by status / auth / cosmos_writes | GET /model/endpoints/filter?? |
| Know what breaks if a container field changes | GET /model/impact/?container=X |
| Traverse object relationships (DER/ERD ? live) | GET /model/graph |
| Traverse N hops from a specific node | GET /model/graph?node_id=X&depth=2 |
| List all edge types in the model | GET /model/graph/edge-types |
| Filter edges by type, source layer, or target layer | GET /model/graph?edge_type=calls&from_layer=screens |
Navigate to exact source line (code --goto) |
GET /model/{layer}/{id} ? .repo_path + .repo_line |
| Who created/modified an object, which file | .source_file, .created_by, .created_at, .modified_by, .row_version |
| Update a model object | PUT /model/{layer}/{id} (stamps audit columns, increments row_version) |
| Materialise audit trail to disk (cold-deploy artifact) | POST /model/admin/export ? assemble-model.ps1 |
| Audit who changed what | GET /model/admin/audit |
| Validate all cross-refs pass | GET /model/admin/validate |
| Seed Cosmos from disk JSON (first connect) | POST /model/admin/seed |
37-data-model/
README.md This file
ANNOUNCEMENT.md GA announcement ? what the model contains, accuracy boundaries
USER-GUIDE.md Agent skills playbook, query examples by audience
PLAN.md Layer-by-layer build plan
ACCEPTANCE.md Done criteria per layer
STATUS.md Current state and sprint history
schema/ JSON Schema ? what each object must look like
service.schema.json
persona.schema.json
feature_flag.schema.json
container.schema.json
endpoint.schema.json
screen.schema.json
literal.schema.json
agent.schema.json
infrastructure.schema.json
requirement.schema.json
model/ Actual EVA data ? populated incrementally
services.json
personas.json
feature_flags.json
containers.json
endpoints.json
screens.json
literals.json
agents.json
infrastructure.json
requirements.json
# Control-plane catalog
planes.json
connections.json
environments.json
cp_skills.json
cp_agents.json
runbooks.json
cp_workflows.json
cp_policies.json
eva-model.json Assembled root (generated by scripts/assemble-model.ps1)
scripts/
assemble-model.ps1 Concatenate layer files ? eva-model.json
validate-model.ps1 Check model against schema, report violations
impact-analysis.ps1 Given a field/endpoint/screen, report what else changes
query-model.ps1 Interactive PowerShell query REPL
sync-from-source.ps1 Read source files and update model (semi-automated)
.github/
copilot-instructions.md Rules for every agent that reads or writes the model
The model is updated in the same PR that changes the source. It is never deferred.
| Change type | Model update required |
|---|---|
| New endpoint added | endpoints.json + containers.json if new cosmos read/write |
| New screen added | screens.json + literals.json for all string keys |
| Field added to Cosmos container | containers.json + affected endpoints.json response schemas |
| New persona | personas.json + feature_flags.json + endpoints.json auth arrays |
| New literal string key | literals.json |
| New agent added | agents.json |
33-eva-brain-v2/docs/artifacts.json is a file registry ? one service, file-level metadata.
37-data-model/model/eva-model.json is the application object model ? all services, semantic layer.
They answer different questions:
| Question | File to query |
|---|---|
| Which Python files have < 70% coverage? | artifacts.json |
What does GET /v1/translations return? |
eva-model.json |
| Which screens break if I rename a Cosmos field? | eva-model.json |
| Which route file implements that endpoint? | artifacts.json ? endpoints.json cross-ref |
See STATUS.md for the full session log and current metrics.
| Metric | Value |
|---|---|
| Layers | 31 (27 original + 4 DPDCA: sprints, milestones, risks, decisions) |
| validate-model.ps1 | PASS 0 violations |
| Total objects | 4006 (Cosmos-backed, ACA 24x7) |
| Tests | 40/41 (T36 pre-existing only) |
| Veritas MTI | 100/100 (2026-02-25) |
| FP estimate API | /model/fp/estimate -- IFPUG UFP calculator live |
| 4th MTI component | complexity_coverage (weight 0.15) -- active after story_ids stamped |
Unblocked next work (no dependencies):
- PUT
transaction_function_type(EI/EO/EQ) +story_ids[]on each endpoint -- unlocks FP calc + 4th MTI - PUT
data_function_type(ILF/EIF) on each container - Seed
sprints.json-- unlocks 39-ado-dashboard velocity calc
See PLAN.md F37-10 for the full Sprint 8-9 work definition. See ACCEPTANCE.md for done criteria per layer group.
See PLAN.md F37-10 for full Sprint 8-9 work items.
| Item | Points | Status |
|---|---|---|
| Stamp FP fields on endpoints (story_ids, transaction_function_type) | 3 | NOT STARTED |
| Stamp FP fields on containers (data_function_type) | 1 | NOT STARTED |
| Seed sprints.json | 2 | NOT STARTED |
| DM-MAINT-WI-2 Same-PR enforcement | 2 | NOT STARTED |
| DM-MAINT-WI-3 Drift detection | 3 | NOT STARTED |
| E-11-WI-7 Mermaid output | 3 | NOT STARTED |
| Gap | Ticket | Detail |
|---|---|---|
storage-account.azure_resource_name = eva-storage |
DM-CAT-WI-12 | Actual: marcosand20260203 |
cosmos-account.azure_resource_name = eva-cosmos-account |
DM-CAT-WI-12 | Actual: marco-sandbox-cosmos |
appinsights.type = foundry_project |
Pre-existing | Should be application_insights |
5 admin-face screens: components[] + hooks[] empty |
Phase 6 | IngestionRunsPage, SearchHealthPage, SupportTicketsPage, FeatureFlagsPage, RbacRolesPage |
Route mismatch: /admin/audit/logs (model) ? /admin/audit (App.tsx) |
Phase 6 | Same for RbacPage |
12 eva-devbench + eva-jp-spark screen stubs: api_calls/components empty |
Phase 6 | |
ChatPane screen: id?filename (ChatInterface.tsx) ? repo_line not found |
E-10 follow-up | Fix: align id with file name or add explicit repo_line field |
10 hooks + 18 endpoints missing repo_line (files not on this clone) |
E-10 follow-up | Run backfill on full monorepo checkout |
| Deliverable | Notes |
|---|---|
| E-09 Provenance export | 636 objects enriched with source_file, created_by, row_version on all entity layers |
E-10 repo_line backfill |
44 objects stamped ? scripts/backfill-repo-lines.py ? validator WARNs for gaps |
E-11 GET /model/graph |
304 nodes / 533 edges ? 20 edge types ? BFS traversal ? 7/7 tests |
| 3 PM Plane feature flags | action.programme, action.ado_sync, action.ado_write (total flags: 13) |
tests/test_graph.py T40?T46 |
7 / 7 passing |
tests/test_provenance.py T50?T52 |
3 / 3 passing |
scripts/coverage-gaps.ps1 (DM-MAINT-WI-0) |
89 gaps: 77 ep stubs, 9 unwired flags, 2 screens, 1 component |
Seed pipeline fixed: bulk_load replaces per-object upsert |
Prevents row_version inflation on restart |
POST /model/admin/export endpoint |
Closes write-cycle gap |
E-07 projects (L25) + E-08 wbs (L26) |
18 projects + 12 WBS nodes |
Immediate Next Actions
See PLAN.md F37-10 for the full Sprint 8-9 backlog.