Skip to main content

Audit metrics

Every headline number the audit produced, in one place, with the methodology that produced it.

UI surface​

16
Surfaces
Distinct UI states captured
1,627
Elements
Total catalogued
1,115
Interactive
Computed, not asserted
983
With test id
Carrying data-testid
177
Unique test ids
Distinct values
228
Label gaps
Interactive, no derivable label
76
Shared test ids
On more than one surface

API surface​

1,249
Requests observed
Total network traffic
611
Functional
After filtering
57
Endpoints
Deduplicated
11
Domains
Functional groupings
7
Hosts
Distinct origins

How each number was produced​

MetricMethod
SurfacesOne DOM dump per distinct UI state, driven manually through the UI
ElementsEvery node in every dump, deduplicated within a surface
InteractiveComputed from tag, role, tabindex, and contenteditable — never asserted
With test idPresence of a data-testid attribute, independent of interactivity
Unique test idsDistinct data-testid values across all surfaces
Label gapsInteractive elements where the label heuristic returned nothing
Shared test idsTest ids where surfaceCount exceeds one
Requests observedAll network traffic captured during the sessions
FunctionalRequests remaining after removing static assets, telemetry, and duplicates
EndpointsFunctional requests collapsed by method plus host plus normalized path

The three overlapping populations​

1,627 elements
1,115 interactive
983 with test id

1,115 + 983 exceeds 1,627. The sets overlap but neither contains the other: there are interactive elements with no test id, and test-id-bearing elements that are inert.

Treating "has a test id" as a proxy for "is interactive" produces wrong numbers in both directions. See honesty note 1.

Request status distribution​

StatusCountReading
200555Success
40435Mostly optional-resource probes
5009Includes the Teams msteams/app/status failures
4056Method not allowed — probe artifacts
4123Precondition failed — ETag conflicts
FAILED3Network-level failure, no response

555 + 35 + 9 + 6 + 3 + 3 = 611. The distribution accounts for every functional request.

The 9 HTTP 500s are not noise. Some of them are the Teams channel status failure that blocked Phase 6 outright. A status distribution that silently dropped them would have hidden the single hardest blocker in the build.

Numbers deliberately not reported​

Coverage percentage. There is no denominator. Sixteen surfaces were captured; the total number of surfaces in Coral is unknown. Any percentage would be invented.

Defect counts. The 228 label gaps are a lower bound on investigation, not defects. See label gaps.

Performance timings. Captured incidentally, not measured under controlled conditions. Reporting them would imply a rigor the method did not have.

Counts that disagree elsewhere in the source repo​

Four different gallery counts exist across the source repository: 95, 66, 41, and 38. All four are correct for their own scope, and none is a superset of the others.

CountScope
95Every capture in gallery.json
66Numbered originals committed at the repository root
41Curated set in screenshot-map.md
38Images verified HTTP 200 in the darbot-validation run

The disagreement is recorded in the errata rather than resolved by picking one, because each number answers a different question and silently unifying them would lose information. The source repository now scopes all four in a single table, which is the resolution that preserves the distinctions.

Validation run​

Validated 2026-06-07 using @darbotlabs/darbot-browser-mcp@1.3.0 over file://, because Playwright blocks file:// navigation.

CheckResult
Console errors across four tabs0
Gallery images returning HTTP 20038 / 38
PDFs exported4

Known limitation of that driver version: page._snapshotForAI is not a function, which breaks screenshot, snapshot, and click. Navigation and network inspection still worked, which is what the validation needed.