Backend Service Surface Detection

The surface detector has a structural blind spot for backend services. All three existing signals rely on filesystem artifacts: bin fields (Signal 1), directory conventions (Signal 2), and config files (Signal 3). Backend frameworks like Express, Fastify, Koa, Hono, and Elysia are imported as dependencies — they leave no filesystem trace beyond package.json. This causes 6-8 repos in the 85-repo validation set to have legitimate backend services invisible to the scan. A startup with a Next.js frontend + Express API backend detects the frontend but misses the backend entirely.

verdict PASSscore 16 / 16findings 5 (0 risk · 1 debt · 4 obs)duration 1h 11mrejection cycles 0shipped May 23, 2026surface cli

Pipeline timeline

Intent to proven code in 1h 11m across Think, Plan, Build, and Verify.

Think
33m
Plan
4m
Build
5m
Verify
5m

Assertion ledger

16 claims, each independently verified. Showing 8 — show all →

IDSaysMatcher
A001A backend package matching both a config file and a server framework is detected exactly onceverifiedok
A002The server framework list contains exactly ten frameworksverifiedok
A003Express is recognized as a server frameworkverifiedok
A004Fastify is recognized as a server frameworkverifiedok
A005NestJS core is recognized as a server frameworkverifiedok
A006Hono is recognized as a server frameworkverifiedok
A007A server framework in dev dependencies does not trigger backend detectionverifiedok
A008A backend with fewer than fifteen source files is not detected as a surfaceverifiedok

Findings 5 total

debtpackages/cli/tests/engine/detectors/surfaces.test.tsclosed
Test file JSDoc still says 'three signals' instead of 'four signals'
obspackages/cli/src/engine/detectors/surfaces.tsclosed
Signal 4 checks fileCount before deps — minor perf preference but Object.keys().some() runs even when fileCount is sufficient
obspackages/cli/tests/engine/detectors/surfaces.test.tsclosed
No test for package with server dep but NO scripts at all (empty scripts array)
obspackages/cli/tests/engine/detectors/surfaces.test.tsclosed
No test for multiple packages where one is caught by Signal 3 and another by Signal 4 in the same census
obsclosed
Contract A013 matcher 'exists' for a code comment is not mechanically verifiable via test — requires source inspection

Integrity seal

scopesha256:74bc13e414972...
contractsha256:bf0c521621363...
plansha256:b7505f15a9eca...
specsha256:a78e226ed0cf7...
build-reportsha256:75e4ff73b780d...
build-datasha256:41945c0810de0...
verify-reportsha256:ea4d83e7995e4...
verify-datasha256:c1d055e26b8eb...
audit cmd$ ana proof audit add-backend-surface-detection   → all hashes match