Fix False Surface Detection

Non-product workspace packages (examples, templates, e2e fixtures, reference apps) are detected as product surfaces, polluting ana.json and misleading the pipeline. This is the #1 priority issue from R5 comprehensive validation — 12 of 35 monorepos (34%) have false surfaces, totaling ~82+ confirmed false detections across 13 repos.

verdict PASSscore 24 / 24findings 5 (0 risk · 1 debt · 4 obs)duration 2h 6mrejection cycles 0shipped May 22, 2026surface cli

Pipeline timeline

Intent to proven code in 2h 6m across Think, Plan, Build, and Verify.

Think
43m
Plan
61m
Build
5m
Verify
6m

Assertion ledger

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

IDSaysMatcher
A001Packages under examples/ are not detected as surfacesverifiedok
A002Packages under templates/ are not detected as surfacesverifiedok
A003Packages under e2e/ are not detected as surfacesverifiedok
A004Packages under test/ are not detected as surfacesverifiedok
A005Packages under playground/ are not detected as surfacesverifiedok
A006Packages under sandbox/ are not detected as surfacesverifiedok
A007Packages under fixtures/ are not detected as surfacesverifiedok
A008Packages ending with -e2e are excluded from surfacesverifiedok

Findings 5 total

obspackages/cli/src/engine/detectors/surfaces.tsclosed
Double path split — detectSurfaces splits relativePath at line 268, then isNonProductPath splits it again at line 85
debtpackages/cli/src/engine/detectors/surfaces.tsclosed
INFRA_PATTERNS is case-sensitive while EXCLUDED_SEGMENTS is case-insensitive — inconsistent casing strategy between the two pre-filters
obspackages/cli/tests/commands/init/monorepoCommandScoping.test.tsclosed
Contract file_changes lists state.test.ts but tests were written in monorepoCommandScoping.test.ts — file mismatch between contract and implementation
obspackages/cli/src/commands/init/state.tsclosed
mergeSurfaces console.warn on removed surfaces may be noisy for intentional removals — pre-existing concern from proof context still applies to legitimate orphaned surfaces
obspackages/cli/src/engine/detectors/surfaces.tsclosed
isNonProductPath returns true for empty string segments from trailing slashes — 'examples/'.split('/') produces ['examples', ''], and '' does not match EXCLUDED_SEGMENTS, so it still works, but edge is unguarded

Integrity seal

scopesha256:652ce6984f4cd...
contractsha256:9730e6b4d4b4c...
plansha256:8f603bec10195...
specsha256:ee2ef823a7e4d...
build-reportsha256:03be07cd7c88e...
build-datasha256:8fce9649b38cb...
verify-reportsha256:d1cc9974c398b...
verify-datasha256:3baa2495ac608...
audit cmd$ ana proof audit fix-false-surface-detection   → all hashes match