Scan Polish — Detection Gaps + AGENTS.md Quality

Five P2-P3 improvements that make the scan more complete and the init output cleaner. None fix wrong data — the scan is already correct for all identity fields after Tier 1. These fill gaps where the scan shows incomplete data or downstream output is noisy.

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

Pipeline timeline

Intent to proven code in 45m across Think, Plan, Build, and Verify.

Think
18m
Plan
5m
Build
10m
Verify
5m

Assertion ledger

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

IDSaysMatcher
A001Barrel-index Drizzle schemas aggregate table counts from all files in the directoryverifiedok
A002The barrel file path is preserved as the schema entry pointverifiedok
A003Provider is determined from aggregated table helper countsverifiedok
A004Single-file schemas with real tables are not affected by the barrel fallbackverifiedok
A005A schema file with zero tables and no sibling files still reports zeroverifiedok
A006Monorepo env example in primary source root is detectedverifiedok
A007Root-level env example still detected when primary is rootverifiedok
A008AI sub-provider variants are excluded from AGENTS.md servicesverifiedok

Findings 5 total

obspackages/cli/src/engine/scan-engine.tsclosed
Barrel expansion glob matches .d.ts files — benign since regex filters for table helpers, but could add exclusion
obspackages/cli/src/engine/scan-engine.tsclosed
Env enrichment pattern check is slightly different from detectSecrets — detectSecrets checks exact filenames while enrichment uses startsWith/endsWith heuristic
debtpackages/cli/src/commands/init/assets.tsclosed
generateAgentsMd exported as public API for test access — documented with @internal JSDoc but TypeScript has no enforcement
obspackages/cli/src/commands/init/assets.tsclosed
Surfaces section has no trailing newline after +N more line when overflow triggers — the empty string push is inside the outer if block but the overflow text has no blank line separator from next section
obsclosed
Contract A001 matcher is 'greater' (value 0) but test correctly uses both toBeGreaterThan(0) AND toBe(3) — contract could be tighter

Integrity seal

scopesha256:97748fb589abd...
contractsha256:2769892e5435e...
plansha256:f1024650e3f51...
specsha256:eab39e6865b59...
build-reportsha256:851318b5cbb6a...
build-datasha256:aec5d02c817ee...
verify-reportsha256:8b5d5309059d4...
verify-datasha256:8ab3d72de9e17...
audit cmd$ ana proof audit scan-polish   → all hashes match