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.
Think18m
Plan5m
Build10m
Verify5m
Assertion ledger
16 claims, each independently verified. Showing 8 — show all →
| ID | Says | Matcher | |
|---|---|---|---|
| A001 | Barrel-index Drizzle schemas aggregate table counts from all files in the directory | verified | ok |
| A002 | The barrel file path is preserved as the schema entry point | verified | ok |
| A003 | Provider is determined from aggregated table helper counts | verified | ok |
| A004 | Single-file schemas with real tables are not affected by the barrel fallback | verified | ok |
| A005 | A schema file with zero tables and no sibling files still reports zero | verified | ok |
| A006 | Monorepo env example in primary source root is detected | verified | ok |
| A007 | Root-level env example still detected when primary is root | verified | ok |
| A008 | AI sub-provider variants are excluded from AGENTS.md services | verified | ok |
Findings 5 total
obspackages/cli/src/engine/scan-engine.ts→ closed
Barrel expansion glob matches .d.ts files — benign since regex filters for table helpers, but could add exclusion
obspackages/cli/src/engine/scan-engine.ts→ closed
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.ts→ closed
generateAgentsMd exported as public API for test access — documented with @internal JSDoc but TypeScript has no enforcement
obspackages/cli/src/commands/init/assets.ts→ closed
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
obs→ closed
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