detect: exempt Office/Workspace sidecars from the ignore check (#3504) - #3516
detect: exempt Office/Workspace sidecars from the ignore check (#3504)#3516ayushcodes10 wants to merge 1 commit into
Conversation
detect() converts Office files and Google Workspace shortcuts into markdown sidecars under a converted subdirectory of the output dir, then ran the same scan ignore check on the sidecar's own path. The documented gitignore advice puts the whole output dir inside a gitignored tree, so that check rejected the tool's own output for the same reason a user would gitignore it, and the source document vanished from the corpus with nothing recorded about why. The check exists to keep user files out of the scan, not to filter output this same pass just produced from an already admitted source, so a sidecar under the converted directory is now exempt from it. Fixes Graphify-Labs#3504. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017qfdzgbA5KedGEjD1AayNh
There was a problem hiding this comment.
Graphify reviewed this change.
Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).
Formal verification. No changes could be formally verified in this run.
Graphify review — findings
Exempts converted sidecars living under converted_dir from the _ignored_for_scan check in detect, so Office and Google Workspace conversions aren't dropped when the documented .gitignore advice puts graphify-out/ in an ignored tree. Without the exemption, every .docx/.xlsx/.gdoc silently vanishes from the corpus once a repo follows that advice, since the tool's own output dir is gitignored for the same reason. Adds tests covering both conversion branches landing a sidecar in a gitignored output dir.
No blocking issues surfaced. 5 lower-confidence candidates did not survive cross-model review.
Analysis details — impact, health, verification
Impact & health
Graphify review
Impact — 2392 functions depend on the 524 functions this change touches.
Health — this change adds coupling hotspots:
- new:
extract()— 585 callers, 44 callees - new:
_rebuild_code()— 115 callers, 51 callees - new:
detect()— 112 callers, 15 callees - new:
_extract_generic()— 18 callers, 26 callees - new:
save_manifest()— 40 callers, 11 callees - new:
extract_files_direct()— 17 callers, 20 callees - new:
extract_js()— 85 callers, 4 callees - new:
extract_xaml()— 19 callers, 17 callees - …and 44 more — each is listed as a finding
Verification — 2392 functions in the blast radius were not formally verified this run (proofs are advisory here).
Gate & verification
graphify gate
PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.
Advisory (not blocking):
- verification_scope: 963 function(s) in the blast radius were not formally verified this run
Test selection
Test selection
51 of 273 test file(s) selected (19%) via static blast radius.
tests/test_astro_extraction.py— impacttests/test_atomic_writes.py— impacttests/test_build.py— impacttests/test_charmap_encoding.py— impacttests/test_chunking.py— impacttests/test_cjs_module_extension.py— impacttests/test_claude_cli_backend.py— impacttests/test_cpp_nested_and_cli.py— impacttests/test_detect.py— impact, changed-testtests/test_dotnet.py— impacttests/test_evidence_binding.py— impacttests/test_extract.py— impacttests/test_extract_cli.py— impacttests/test_file_slice.py— impacttests/test_ignore_file_encoding.py— impacttests/test_image_vision.py— impacttests/test_import_extension_resolution.py— impacttests/test_incremental_mtime_collision.py— impacttests/test_indirect_dispatch.py— impacttests/test_indirect_dispatch_assign_return.py— impacttests/test_indirect_dispatch_getattr.py— impacttests/test_js_exported_scalar_bindings.py— impacttests/test_languages.py— impacttests/test_llm_backends.py— impacttests/test_long_path_hashing.py— impacttests/test_manifest_ingest.py— impacttests/test_mcp_ingest.py— impacttests/test_multilang.py— impacttests/test_non_regular_files.py— impacttests/test_office_incremental.py— impacttests/test_office_limits.py— impacttests/test_ollama.py— impacttests/test_out_dir_evidence.py— impacttests/test_oversized_document_slicing.py— impacttests/test_package_json_subpath_imports.py— impacttests/test_pdf_slicing.py— impacttests/test_pdf_token_estimate.py— impacttests/test_phantom_external_import.py— impacttests/test_pipeline.py— impacttests/test_python_underscore_resolution.py— impacttests/test_rationale.py— impacttests/test_ruby_resolution.py— impacttests/test_scala_self_type.py— impacttests/test_stale_prune.py— impacttests/test_swift_computed_properties.py— impacttests/test_ts_new_expression_calls.py— impacttests/test_typescript_module_extensions.py— impacttests/test_unmapped_at_alias_resolution.py— impacttests/test_vue_extraction.py— impacttests/test_watch.py— impact- … and 1 more
Selection is safe under the controlled-regression assumption; always-run tests + a periodic full run are the backstops. Advisory — it never changes the check verdict.
Formal verification
Could not verify: Could not verify detect.
The verifier did not have enough to check detect, so it is saying so rather than guessing. No false assurance is the whole point.
Guarantee: No guarantee either way, this is an honest abstention, not a pass.
Note: Reason: parameter `root` is annotated `Path` — outside the synthesizable primitive/collection set
· 52 more finding(s) on lines outside this diff (see the check run).
|
Shipped in v0.9.60 — landed on |
Summary
Fixes #3504.
detect()converts.docx/.xlsxfiles and Google Workspace shortcuts into markdown sidecars undergraphify-out/converted/, then ran the same scan-ignore check against the sidecar's own freshly-written path. The documented "Migration and portability" gitignore advice puts the whole output directory inside a gitignored tree, so that check rejected the tool's own output for the same reason a user would gitignore it — the source document silently vanished from the corpus, with nothing recorded inskipped_sensitiveor anywhere else to explain why. Installinggraphifyy[office]therefore appeared to fix Office support while changing nothing observable.The ignore check exists to keep user files out of the scan, not to filter output this same detection pass just produced from an already-admitted source file. Both conversion branches (Office and Google Workspace) now exempt a sidecar that lands under
converted_dirfrom the ignore check — matching the issue's own suggested fix exactly.Test plan
tests/test_detect.py, one per conversion branch, each writing a.gitignorecoveringgraphify-out/(matching the documented advice) and mocking the converter to confirm the sidecar still reachesfiles['document'].detect.py, confirmedAssertionError: 0 == 1on both) and pass with it.python3 -m pytest -q— 5457 passed, only the pre-existing unrelated failures (test_ollama_retry_cap.pymissingopenaiin this env, one flaky timing assertion intest_ts_import_type_arguments.py).python3 -m tools.skillgen --check— OK.🤖 Generated with Claude Code
https://claude.ai/code/session_017qfdzgbA5KedGEjD1AayNh