coverage/*.html should be filtered by directory, not extension
Repo
safishamsi/graphify — https://github.com/safishamsi/graphify
Summary
The existing noise filter excludes the coverage/ directory at file-collection time, so .ts / .js source files inside coverage/ (rare, but they happen if someone ships a coverage-aware util there) get correctly skipped. However, the generated HTML files produced by Vitest / Istanbul / nyc — coverage/lcov-report/<source-path>.html — are categorised as document and sent to the semantic-extraction subagents. There's typically one HTML file per source file under the report tree, so a project with 800 source files generates ~828 noise documents.
Concrete numbers from one repo on 2026-05-14:
- 1,277 documents detected in total
- 828 of those (65%) were
coverage/lcov-report/<x>.html
- The 828 files are mechanically-generated, contain only the coverage report markup for an existing source file, and produce no useful semantic information when extracted
After manual filter:
- Document count dropped from 1,277 → 449
- Semantic subagent dispatch dropped from ~64 → 37
- Net token saving on a single corpus build: ~27 subagents × ~100K tokens = ~2.7M tokens
Repro
Run /graphify . against any Vitest-based monorepo that has run tests recently (coverage/ directory present). Inspect .graphify_detect.json:
$(cat graphify-out/.graphify_python) -c "
import json
from pathlib import Path
d = json.loads(Path('graphify-out/.graphify_detect.json').read_text())
docs = d.get('files', {}).get('document', [])
in_coverage = sum(1 for f in docs if '/coverage/' in f or '/lcov-report/' in f)
print(f'{in_coverage} of {len(docs)} documents are in coverage/')
"
You'll see most of them are in coverage/.
Suggested fix
The detect step should apply the directory-noise filter to all file categories, not just code. Today's behaviour (inferred from observed results — I haven't read your detect.py) appears to be:
# Current behaviour (inferred)
if category == 'code' and any(noise_dir in path for noise_dir in NOISE_DIRS):
skip
What it should be:
# Suggested
if any(noise_dir in path for noise_dir in NOISE_DIRS):
skip # regardless of category
This is a one-line conceptual fix though it may require adjusting the
detect() function's per-category collection logic.
Workaround (today)
Filter .graphify_detect.json between Step 2 (detect) and Step 3 (extract):
def is_noise(f: str) -> bool:
return (
'/coverage/' in f or '/lcov-report/' in f or
'/__snapshots__/' in f or f.endswith('.snap') or
'/node_modules/' in f or 'package-lock' in f or
'/dist/' in f or '/dist-protected/' in f or '/build/' in f
)
for cat, files in detect['files'].items():
detect['files'][cat] = [f for f in files if not is_noise(f)]
Mechanical but every user has to know to do it.
Related
This is closely related to the visual-tests/ filter request (issue 1). Both share the same root cause: directory-level filtering is currently per-category instead of universal. A single fix covers both.
coverage/*.htmlshould be filtered by directory, not extensionRepo
safishamsi/graphify— https://github.com/safishamsi/graphifySummary
The existing noise filter excludes the
coverage/directory at file-collection time, so .ts / .js source files insidecoverage/(rare, but they happen if someone ships a coverage-aware util there) get correctly skipped. However, the generated HTML files produced by Vitest / Istanbul / nyc —coverage/lcov-report/<source-path>.html— are categorised asdocumentand sent to the semantic-extraction subagents. There's typically one HTML file per source file under the report tree, so a project with 800 source files generates ~828 noise documents.Concrete numbers from one repo on 2026-05-14:
coverage/lcov-report/<x>.htmlAfter manual filter:
Repro
Run
/graphify .against any Vitest-based monorepo that has run tests recently (coverage/directory present). Inspect.graphify_detect.json:You'll see most of them are in coverage/.
Suggested fix
The detect step should apply the directory-noise filter to all file categories, not just
code. Today's behaviour (inferred from observed results — I haven't read your detect.py) appears to be:What it should be:
This is a one-line conceptual fix though it may require adjusting the
detect()function's per-category collection logic.Workaround (today)
Filter
.graphify_detect.jsonbetween Step 2 (detect) and Step 3 (extract):Mechanical but every user has to know to do it.
Related
This is closely related to the
visual-tests/filter request (issue 1). Both share the same root cause: directory-level filtering is currently per-category instead of universal. A single fix covers both.