OrgEdge
← Back to SysEdge V-model test coverage

Coverage as a shape, not a percentage.

A single coverage number hides more than it shows. SysEdge maps every test to the specification artefact it verifies — across four V-model tiers — so you can see not just whether a feature is tested, but at what level of abstraction the verification exists, and exactly where the gaps are.

The V-model mapping

Four tiers. Each linked to a specification artefact.

Coverage isn't one number; it's a shape across four V-model tiers. SysEdge maps every test to the spec artefact it verifies — so the graph can answer "does the export feature have a unit test, an API contract test, a UI flow test, and an end-to-end journey?" as four separate yes/no answers, not one aggregated percentage.

Tier Spec artefact verified Test form Session ownership
e2e User Story Playwright cross-tool journey — multiple instances, end-to-end user goal master session
usecase Use Case Playwright single UC flow — one actor, one goal, with exception paths owning session per instance
integration Feature / Module Python pytest API contract — live endpoint, real data, permission boundary checks owning session per instance
component Symbol / Routine Go test or vitest — function level, mocked dependencies, fast feedback owning session per instance

Gaps at any tier are surfaced by test-gaps --instance X with the exact test file to create. The tier structure is enforced by the graph — a test linked at the wrong tier returns a validation warning.

test-gaps — surfacing the shape at session start

Thirty seconds to know exactly which tests are missing.

Every session starts with test-gaps --instance <name>. The command queries the graph for features with missing VERIFIES edges at any tier and returns a structured gap report — grouped by module, annotated with what already exists.

$ python3 cli/sys_edge.py test-gaps --instance manage ══════════════════════════════════════════════════ TEST GAPS — manage (2026-06-02) ══════════════════════════════════════════════════ ✗ USECASE GAPS (3 of 12 features uncovered) MOD-delegation Delegation (3 gaps) ✗ F-DLG-003 Delegation inbox view [has: cmp,int] ✗ F-DLG-008 Bulk reassign on offboarding [has: cmp,int] ✗ F-DLG-012 Delegation audit trail [has: int] → Hint: test_pX_*_ui.py — see uc-ui-testing.md ✓ COMPONENT coverage: 12/12 features covered ✓ INTEGRATION coverage: 12/12 features covered ══════════════════════════════════════════════════ 3 gap(s) across 1 tier(s) ══════════════════════════════════════════════════

The [has: cmp,int] annotation shows what tiers already exist — so sessions know whether they are adding a first test or completing an existing partial coverage picture. A feature showing [has: cmp,int] needs a Playwright UC flow test; a feature with no annotation needs tests at all three tiers.

The hint line links to the relevant testing pattern document. Sessions do not have to discover the right test file name or location — the graph provides it directly.

After one day — measured results on a 12-instance system

9 of 11 instances at 100% integration coverage. Automatically.

After one day of graph-guided sessions on a 12-instance production system, the coverage shape changed measurably — not because sessions wrote more tests, but because they wrote the right tests, guided by the gap report at session start.

9/11
instances reached 100% integration coverage
1,459
vitest tests auto-scanned and linked
5,807
VERIFIES edges created — no manual mapping
Instance Integration Component Use-case Status
core 40/40 40/40 40/40 Full coverage
framework 30/30 30/30 30/30 Full coverage
manage 35/35 35/35 32/35 3 UC gaps remaining
plan 43/43 43/43 43/43 Full coverage
platform 13/13 13/13 13/13 Full coverage
licmcp 22/22 22/22 22/22 Full coverage
training 18/18 18/18 18/18 Full coverage
architect 27/27 27/27 27/27 Full coverage
deploy 19/19 14/19 19/19 5 component gaps
sys-edge 31/31 31/31 31/31 Full coverage
master 11/11 E2E tier only (by design)

Coverage measured after one day of graph-guided sessions across the 12-instance system. 1,459 vitest tests auto-scanned; 5,807 VERIFIES edges created by scan — no manual registration required.

"Without the graph I would have written a new unit test and felt done. Now I can see the shape — this feature has component and integration coverage but no use-case flow. The gap is visible as a specific thing I need to add, not a vague concern."
core session — FB-083
"I wrote tests specifically for 6 features with zero component coverage even though I hadn't touched those components directly. The graph made it obvious they existed and were unprotected."
framework session — FB-063
"MOD-board 0/4 cmp makes visible a gap I would otherwise rationalise away. The number is right there. It's not a metric — it's a list of four things that don't have tests yet."
plan session — FB-068

Formbricks — reproducible external measurement

The export feature had zero tests at every tier.

When SysEdge was run against the Formbricks open-source codebase, test-gaps --instance surveys returned a full gap report for the Response Analysis module. F-ANLYS-003 (Export responses) had zero tests at component, integration, and use-case tiers — not because tests weren't running, but because the feature was never registered in the test graph and therefore invisible to any coverage tool.

$ python3 cli/sys_edge.py test-gaps --instance surveys ══════════════════════════════════════════════════ TEST GAPS — surveys (2026-06-02) ══════════════════════════════════════════════════ ✗ COMPONENT GAPS (11 of 11 features uncovered) MOD-analysis Response Analysis (4 gaps) ✗ F-ANLYS-003 Export responses ✗ F-ANLYS-001 Response dashboard ✗ F-ANLYS-002 Individual response view ✗ F-ANLYS-004 Share survey results link ✗ INTEGRATION GAPS (11 of 11 features uncovered) MOD-analysis Response Analysis (4 gaps) ✗ F-ANLYS-003 Export responses ✗ F-ANLYS-001 Response dashboard ✗ F-ANLYS-002 Individual response view ✗ F-ANLYS-004 Share survey results link ✗ USECASE GAPS (11 of 11 features uncovered) MOD-analysis Response Analysis (4 gaps) ✗ F-ANLYS-003 Export responses ✗ F-ANLYS-001 Response dashboard ✗ F-ANLYS-002 Individual response view ✗ F-ANLYS-004 Share survey results link

F-ANLYS-003 had no unit test, no API contract test, and no Playwright UI flow. The export feature had shipped and been deployed with zero test coverage at any tier. A conventional coverage tool would report 0% for this file — but only if it was included in the coverage scan configuration. Because the feature was not registered in any test graph, it was not included in any scan. The gap was invisible.

DEF-FBK-001 — survey response export includes PII when anonymisation is enabled — had no test catching it. Not because tests weren't running, but because the feature was never registered in the test graph. The graph makes the absence of a VERIFIES edge as visible as the presence of one.

Requirements traceability: how the specification gap caused the defect →

Code scan — language support

Symbols and tests auto-linked. No manual registration.

The code scanner reads your test files and source symbols and creates VERIFIES edges automatically. For fully-supported languages, every test function is matched against the feature it exercises — using import analysis and naming conventions — and linked to the graph without any manual step.

Go
Full scan — functions, types, interfaces, test files. Handler endpoints auto-linked to API features.
TypeScript
Full scan — exports, React components, vitest describe/it blocks, Playwright spec files.
Python
Full scan — classes, functions, pytest test functions. Integration test files auto-registered by naming convention.
Java
Public classes and methods. JUnit test classes auto-linked. Private members require manual linking.
C#
Public classes and methods. NUnit / xUnit test classes auto-linked. Private members require manual linking.
Rust / other
Manual linking via link-symbol. CLI accepts any file path and symbol name — language-agnostic edge creation.

The initial scan runs in under 30 seconds on a 50,000-line codebase. Incremental re-scans (triggered by session end protocol) add only the delta since the last run.

V-model coverage — four tiers, per feature

The export feature had zero tests. The graph knew before the defect did.

F-ANLYS-003 had shipped with no component test, no integration test, and no use-case flow. A coverage percentage wouldn't show this — because the feature wasn't registered in any scan configuration. SysEdge makes the absence of a VERIFIES edge as visible as the presence of one. Nine of eleven instances reached 100% integration coverage in one day of graph-guided sessions.

Four V-model tiers
component · integration · usecase · e2e — per feature, per instance
test-gaps in 30 seconds
exact test file to create — with [has: cmp,int] tier annotations
5,807 VERIFIES edges
auto-created by code scan — no manual mapping required
1,459 vitest tests scanned
Go · TypeScript · Python — full scan with symbol matching
9/11 instances at 100%
integration coverage after one day of graph-guided sessions
Absence is visible
no VERIFIES edge = gap — as queryable as any other fact in the graph