Skip to content

MVP Definition of Done — Roadmap Reference

Definition

A team of 5–9 developers using GitHub (repositories + Projects v2 + Pages), Terraform, and Kubernetes can do all of the following with a single self-hosted Substrate instance running on a NVIDIA DGX Spark node.

This definition is the governing contract for the v1.0 release. A release is not MVP-complete until every one of these 12 criteria is verified against a real team setup — not a synthetic test, not a mocked connector, not a pre-populated database. Real repositories, real PRs, real infrastructure state, real team membership.


12 Acceptance Criteria

# Criterion Measured By Pass Threshold
1 Connect all 6 priority connectors in under 30 minutes Wall-clock time from docker compose up completion to first graph node written in Neo4j ≤ 30 minutes from startup to first node
2 See a full dependency graph within 1 hour of connection Time to 80% Observed Graph population — at least 80% of services discoverable from GitHub + Terraform + K8s are present as Service nodes with edges ≤ 60 minutes from connector activation
3 PR blocked with ADR reference GitHub Checks API blocks the PR; violation comment contains the specific ADR identifier and a working link to the ADR source document Block + comment within 2 seconds of PR webhook receipt
4 Ask a structural question in natural language in under 8 seconds API response time p95 for RSN endpoints; measured on RSN-UC-01 ("What does X depend on?") and RSN-UC-02 ("Who owns X?") p95 ≤ 8 seconds (simpler queries must be ≤ 1 second)
5 "Why was this decision made?" returns sourced rationale RSN-UC-05 query returns a DecisionNode with source URL linking to the original ADR or post-mortem document Response includes source link; latency ≤ 5 seconds
6 SSH host inspection detects undeclared services SSH Runtime Connector identifies a service running on a host that is not declared in the Observed Graph; alert appears in UI Detection and alert within 15 minutes of inspection cycle
7 Simulation returns before/after policy delta in under 15 seconds SIM-UC-01 through SIM-UC-04 measured end-to-end from simulation trigger to before/after delta table rendered in UI p95 ≤ 15 seconds
8 Daily structural digest delivered by 9am PRO-UC-11 digest confirmed as delivered via Celery Flower task log; digest contains violation delta and top 3 action items Delivered by 09:00 on all weekdays
9 Sprint retro structural insight generated on sprint close PRO-UC-02 triggered by GitHub Projects v2 iteration close webhook; structural debt report with violation delta generated and displayed Report generated within 5 minutes of sprint close webhook
10 Memory gaps visible in UI Verification Queue populated with services that have no ADR coverage (no WHY edges), no ownership (no OWNS edges), or no test coverage data ADR gap list present in UI; updated nightly
11 Team member onboarded via SCIM creates correct graph nodes IdP SCIM POST /Users event triggers creation of Developer node in Neo4j with correct properties; MEMBER_OF edge created to correct team Neo4j write confirmed within 5 seconds of SCIM event
12 Member offboarded triggers key-person risk scan and alert Keycloak user deactivation (SCIM PATCH active:false) triggers immediate key-person risk scan; any services with no remaining active owner are flagged CRITICAL in UI within 30 seconds CRITICAL flag in Verification Queue within 30 seconds of deactivation event

Connector Set for MVP Verification

The 6 priority connectors that must be live for MVP acceptance testing:

# Connector Primary Data Trigger
1 GitHub (repos) Repository structure, PRs, branches, CODEOWNERS, ADRs, post-mortems Webhooks (push, pull_request) + poll
2 GitHub Projects v2 SprintNode, IntentAssertion, project item status Webhook (projects_v2_item) + poll
3 GitHub Pages Documentation staleness, doc coverage 6-hour poll
4 Terraform InfraResource nodes, HOSTS edges, declared ports, region Post-apply webhook + state file poll
5 Kubernetes Running pods, services, deployments; reconciliation with Terraform state 15-minute API poll
6 Jira (basic) IntentAssertion nodes from tickets; sprint close events Webhook (issue_created, sprint_closed)

Persona Coverage for MVP Verification

12 personas must be tested against the acceptance criteria, representing all roles and access patterns:

Persona Role Primary Criteria Tested
Alice (Backend Developer) Developer AC-3 (PR blocked), AC-4 (NL query), AC-10 (memory gaps visible)
Bob (Frontend Developer) Developer AC-3 (PR blocked), AC-4 (NL query), AC-11 (SCIM onboarding as Bob)
Carol (Platform Architect) Architect AC-5 (ADR rationale), AC-7 (simulation), AC-3 (ADR reference in block)
Dan (DevOps Engineer) DevOps/SRE AC-6 (SSH detection), AC-2 (dependency graph), AC-7 (blast radius)
Emma (Scrum Master) Scrum Master AC-8 (daily digest), AC-9 (sprint retro), AC-10 (memory gaps)
Frank (Engineering Manager) Viewer AC-4 (NL query), AC-2 (dependency graph), AC-10 (memory gaps)
Grace (New Hire) Developer AC-11 (SCIM onboarding as Grace), AC-4 (NL query as first user experience)
Hiro (Departing Employee) Developer AC-12 (SCIM offboarding as Hiro, triggering key-person risk)
Iris (CI/CD Service Account) Service Account AC-3 (GitHub Checks API integration), AC-1 (connector setup)
Jack (External Contractor) Viewer Read-only access verification; cannot trigger governance actions
Karen (VP Engineering) Viewer AC-8 (daily digest delivery), executive dashboard access
Liam (Security Architect) Architect AC-6 (SSH drift), security controls verification, audit log integrity

Measurement Protocol

For Latency Criteria (AC-3, AC-4, AC-5, AC-7)

Latency is measured end-to-end from the triggering event to the result being available: - AC-3: From GitHub webhook receipt timestamp to GitHub Checks API result posted - AC-4: From HTTP request received at FastAPI gateway to HTTP response sent - AC-5: From HTTP request to full response body sent (including source URL in payload) - AC-7: From simulation trigger (HTTP request) to before/after delta rendered in UI (measured with browser DevTools)

p95 is measured over a minimum of 20 test runs per criterion. The p95 requirement means 95% of runs must meet the target; occasional outliers above the threshold do not constitute a pass failure.

For Coverage Criteria (AC-1, AC-2)

  • AC-1: Clock starts when docker compose up returns healthy status on all services. Clock stops when MATCH (n:Service) RETURN count(n) in Neo4j returns a non-zero result.
  • AC-2: Coverage is computed as: (services in Neo4j) / (services discoverable from GitHub + Terraform + K8s repos manually counted). 80% threshold means we allow for some entity resolution failures, private services not accessible to connectors, and services in flight at the time of ingestion.

For Event-Driven Criteria (AC-6, AC-8, AC-9, AC-11, AC-12)

These criteria are verified by triggering the event and observing the outcome within the specified window: - AC-6: Add an undeclared service to a test VM (start a process on a new port); observe SSH Runtime Connector alert in UI within 15 minutes - AC-8: Observe Celery Flower task completion log for PRO-UC-11 at or before 09:00 - AC-9: Close a GitHub Projects v2 iteration; observe sprint retro report in UI within 5 minutes - AC-11: Provision a new user in Keycloak (triggering SCIM push); verify Developer node in Neo4j within 5 seconds - AC-12: Deactivate a user in Keycloak; verify CRITICAL flag on orphaned services in Verification Queue within 30 seconds


Non-Negotiable Pre-Conditions for MVP Acceptance Testing

The following must be true before MVP acceptance testing begins. These are not acceptance criteria — they are prerequisites for a meaningful test:

  1. Flyway migrations have run clean: No pending migrations; all PostgreSQL schemas are at the latest version
  2. neo4j-migrations have run clean: All graph constraints and indexes are applied
  3. All 4 databases are healthy: Neo4j, PostgreSQL, Redis, NATS all pass their health checks
  4. All 5 vLLM endpoints are running: bge-m3, bge-reranker, Dense 70B (all 4 LoRA adapters loaded), Llama 4 Scout
  5. Keycloak substrate realm is configured: 3 clients, SCIM plugin installed, Group Membership Mapper configured
  6. At least one real GitHub organization is connected: Not a test repository with synthetic data — a real organization with at least 5 repositories, 3 developers, and at least 2 months of commit history
  7. At least one Terraform state file is accessible: Representing at least 3 InfraResource nodes
  8. At least one ADR exists in the connected repository: So AC-3 can cite a real ADR rather than a synthetic one