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.
Think43m
Plan61m
Build5m
Verify6m
Assertion ledger
24 claims, each independently verified. Showing 8 — show all →
| ID | Says | Matcher | |
|---|---|---|---|
| A001 | Packages under examples/ are not detected as surfaces | verified | ok |
| A002 | Packages under templates/ are not detected as surfaces | verified | ok |
| A003 | Packages under e2e/ are not detected as surfaces | verified | ok |
| A004 | Packages under test/ are not detected as surfaces | verified | ok |
| A005 | Packages under playground/ are not detected as surfaces | verified | ok |
| A006 | Packages under sandbox/ are not detected as surfaces | verified | ok |
| A007 | Packages under fixtures/ are not detected as surfaces | verified | ok |
| A008 | Packages ending with -e2e are excluded from surfaces | verified | ok |
Findings 5 total
obspackages/cli/src/engine/detectors/surfaces.ts→ closed
Double path split — detectSurfaces splits relativePath at line 268, then isNonProductPath splits it again at line 85
debtpackages/cli/src/engine/detectors/surfaces.ts→ closed
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.ts→ closed
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.ts→ closed
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.ts→ closed
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