jcodemunch-mcp 1.108.331__tar.gz → 1.108.332__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/.claude-plugin/plugin.json +1 -1
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/CHANGELOG.md +45 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/ISSUE-HISTORY.md +14 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/PKG-INFO +2 -2
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/README.md +1 -1
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/harness/ARCHAEOLOGY.md +2 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/workflows/LEDGER.md +8 -1
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/pyproject.toml +1 -1
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/server.json +2 -2
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/extractor.py +198 -117
- jcodemunch_mcp-1.108.332/src/jcodemunch_mcp/parser/sql_preprocessor.py +265 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/index_store.py +7 -1
- jcodemunch_mcp-1.108.332/tests/test_a_macro_docstring_is_the_comment_above_it.py +125 -0
- jcodemunch_mcp-1.108.332/tests/test_parse_path_loops_are_linear.py +789 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/uv.lock +4 -4
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/whatsnew.json +7 -7
- jcodemunch_mcp-1.108.331/src/jcodemunch_mcp/parser/sql_preprocessor.py +0 -191
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/.clabot +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/.claude-plugin/marketplace.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/.dockerignore +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/.gitignore +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/AGENTS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/AGENT_HINTS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/AGENT_HOOKS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/AGENT_INSTALL_UNIVERSAL.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/ARCHITECTURE.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/CAPABILITIES.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/CLI-AND-ENV.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/CLIENTS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/CODE_OF_CONDUCT.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/CONFIGURATION.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/CONTEXT_PROVIDERS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/CONTRIBUTING.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/Caddyfile +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/Dockerfile +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/GROQ.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/HEADLESS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/INSTALL_FROM_SOURCE.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/KEY-FILES.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/LANGUAGE_SUPPORT.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/LICENSE +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/QUICKSTART.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/RELEASE_RESTORE.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/ROADMAP.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/SCIP.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/SECURITY.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/SPEC.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/SPEC_MUNCH.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/TOKEN_SAVINGS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/TROUBLESHOOTING.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/TWEAKCC.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/UNDER_THE_HOOD.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/USER_GUIDE.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/badge-kit.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/METHODOLOGY.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/RAG_COMPARISON_NOTES.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/REPRODUCING.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/ab-test-dead-code-2026-03-18.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/ab-test-naming-audit-2026-03-18.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/anchor/measure.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/attic/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/attic/ab_v1_70_0.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/attic/profile_backpressure.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/attic/profile_config_regression.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/attic/profile_language_filter.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/cache_stability/measure.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/cache_stability/results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/calibration/planted_queries.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/codex_surface/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/codex_surface/run_codex_arms.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/codex_surface/tasks.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/deadcode_eval/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/deadcode_eval/results-2026-08-03.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/deadcode_eval/run_eval.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/description_smells/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/description_smells/jcm_tools_full.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/description_smells/jdata_tools.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/description_smells/jdoc_tools.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/description_smells/rubric_upstream.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/description_smells/score_descriptions.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/description_smells/scores.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/events/handlers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/events/protocol.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/events/registry.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/events/web.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/go/collect/plist.go +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/go/collect/queue.go +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/go/collect/ring.go +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/go/mower/mower.go +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/go/talent/recruiter.go +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/payments/applepay_adapter.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/payments/base.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/payments/legacy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/payments/mock_provider.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/payments/paypal_impl.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/payments/stripe_impl.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/pos/hardware.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/pos/legal.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/pos/terminal.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/reporting/base_report.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/reporting/csv_report.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/analytics/banner.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/analytics/toast.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/billing/decorators.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/billing/handlers.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/billing/protocol.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/billing/reports.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/building/elevator.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/factory/conveyor.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/gateway/push.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/notify/base.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/notify/email.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/corpus/ts/notify/sms.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/gold.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/goldset/measure.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/harness/capture_schema_baseline.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/harness/capture_token_baseline.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/harness/run_benchmark.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/harness/run_odysseus_compare.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/harness/run_rag_baseline.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/harness/token_floor.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/jcm_reference.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/odysseus_compare_results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/odysseus_compare_results.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/offload/results-django__django.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/offload/results-fastapi__fastapi.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/offload/results-local__jcodemunch-mcp-0394b683.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/offload/run_offload_criterion.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/provenance/channel_accuracy.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/provenance/measured.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/racket_fidelity/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/racket_fidelity/corpus.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/racket_fidelity/oracle.rkt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/racket_fidelity/reader_corpus.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/racket_fidelity/reader_oracle.rkt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/racket_fidelity/reader_results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/racket_fidelity/results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/racket_fidelity/run_fidelity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/racket_fidelity/run_reader_fidelity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/rag_baseline_results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/rag_baseline_results.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/replay/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/replay/fixtures/self_v1_75_0.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/replay/metrics.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/replay/results/self_v1_75_0-golden.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/replay/results/self_v1_75_0-v1.75.0.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/replay/run_replay.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/requirements-rag-bench.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/results.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/results_v1.70.0.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_binary_pilot/PROTOCOL.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_binary_pilot/RESULT.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_binary_pilot/build_cases.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_binary_pilot/cases.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_binary_pilot/predicate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_binary_pilot/results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_binary_pilot/run_pilot.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/emitted_task_cases.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/emitted_task_holdout.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/emitted_task_results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/explain_misses.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/explanations.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/holdout.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/holdout_results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/measure_route_discriminators.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/queries.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/route_discriminator_results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/run_emitted_task.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/route_recall/run_route_recall.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/rust_fidelity/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/rust_fidelity/corpus.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/rust_fidelity/oracle/Cargo.toml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/rust_fidelity/oracle/src/main.rs +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/rust_fidelity/results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/rust_fidelity/run_fidelity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/schema_baseline.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/self_latency/measure.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/swebench/PROTOCOL.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/swebench/power.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/tasks.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/tier_switch/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/tier_switch/price_tier_switch.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/tier_switch/results.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/token_baselines/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/token_baselines/v1.108.163.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/benchmarks/whitepaper.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/cli/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/cli/cli.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/clients/ts/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/clients/ts/decoder.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docker-compose.yml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/cicd/AUDIT.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/cicd/DESIGN.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/cicd/FINDINGS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/cicd/RUNBOOK.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/cicd/VERIFICATION.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/harness/COVERAGE-MAP.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/harness/DESIGN.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/harness/FINDINGS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/harness/VERIFICATION.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/inbound/AUDIT.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/inbound/DESIGN.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/inbound/FINDINGS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/inbound/POLICY.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/inbound/VERIFICATION.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/prd-extraction-fingerprint.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/standard/DISCOVERY.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/standard/ENFORCEMENT-PLAN.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/standard/NICHE.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/standard/STANDARD.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/workflows/DESIGN.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/workflows/FINDINGS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/workflows/LOOPS.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/docs/workflows/VERIFICATION.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/examples/groq_validate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/examples/otel-collector/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/examples/otel-collector/jcm-exporter.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/__main__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/audit-allowlist.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/corpora.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/corpora.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/release_age.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/results/latest.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/results/self_latency.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/results/self_latency_ci_runs_2026-09-22.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/results/self_latency_three_runs.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/retired.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/thresholds.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/thresholds.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/harness/tiers.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/jcodemunch_whitepaper.pdf +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/mcpb/build.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/mcpb/server/main.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/django.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/express.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/fastapi.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/flask.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/gin.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/jcodemunch.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/langchain.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/nextjs.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/pytorch.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/react.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/requests.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/rust_axum.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/spring_boot.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/corpus/vue.yaml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/leaderboard.html +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/munch_bench/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/munch_bench/cli.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/munch_bench/corpus.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/munch_bench/encoding_bench.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/munch_bench/evaluate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/munch_bench/inference.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/munch_bench/leaderboard.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/munch_bench/retrieval.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/munch_bench/runner.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/results/anthropic_claude-haiku-4-5_express.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/results/anthropic_claude-haiku-4-5_fastapi.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/results/anthropic_claude-haiku-4-5_flask.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/results/anthropic_claude-sonnet-4-6_express.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/results/anthropic_claude-sonnet-4-6_fastapi.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/results/anthropic_claude-sonnet-4-6_flask.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/results/groq_llama-3.3-70b-versatile_2026-04-13.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/tests/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/tests/test_corpus.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/tests/test_evaluate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/munch-bench/tests/test_leaderboard.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/packaging/debian/build_deb.sh +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/schemas/confidence-provenance.schema.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/schemas/evidence-receipt.schema.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/schemas/ranked-context-response.schema.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/schemas/retrieval-verdict.schema.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/scripts/dod_changelog.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/scripts/gap_ledgers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/scripts/handshake.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/scripts/open_regression_issue.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/scripts/pr_bench_comment.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/scripts/refresh_grammar_inventory.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/scripts/registry_verify.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/scripts/release_notes.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/scripts/release_preflight.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/scripts/surface_diff.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/scripts/unstable_modules_diag.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/speedreview/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/speedreview/action.yml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/speedreview/review.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/__main__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/agent_selector.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/delivery.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/digest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/file_risk.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/health.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/hooks/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/hooks/_common.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/hooks/briefing.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/hooks/landmarks.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/hooks/reindex.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/hooks/snapshot.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/hooks/steering.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/hooks/taskcomplete.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/init.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/install_pack.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/observatory.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/parity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/policy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/receipt.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/reflect.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/skills.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/upgrade.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/cli/whatsnew.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/config.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/counter.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/credentials.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/embeddings/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/embeddings/advice.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/embeddings/failures.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/embeddings/local_encoder.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/decoder.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/format.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/gate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/generic.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/json_passthrough.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schema_driven.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/find_importers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/find_references.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/get_blast_radius.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/get_call_hierarchy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/get_dependency_cycles.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/get_dependency_graph.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/get_file_outline.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/get_impact_preview.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/get_ranked_context.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/get_repo_outline.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/get_signal_chains.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/get_tectonic_map.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/registry.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/search_ast.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/search_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/encoding/schemas/search_text.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/enrichment/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/enrichment/lsp_bridge.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/evidence/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/evidence/capability.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/evidence/producers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/evidence/receipts.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/evidence/scip.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/evidence/scip_ingest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/groq/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/groq/cli.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/groq/config.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/groq/explainer.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/groq/inference.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/groq/retriever.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/groq/voice.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/handoff.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/hook_event.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/install_layout.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/investigator/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/investigator/deletion_safety.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/investigator/retrieval_counterfactual.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/investigator/reuse_audit.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/org/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/org/http_routes.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/org/license.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/org/report.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/org/store.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/astro_shared.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/complexity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/_route_utils.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/base.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/dbt.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/decorator_routes.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/django.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/express.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/framework_profiles.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/git_blame.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/go_routers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/laravel.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/nextjs.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/nuxt.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/context/rails.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/fqn.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/grammar_pack.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/hierarchy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/imports.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/languages.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/parse_budget.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/parse_cache.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/racket_reader.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/parser/template_shared.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/path_map.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/progress.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/redact.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/reindex_state.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/confidence.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/embed_drift.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/entropy_prune.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/freshness.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/ledger_trust.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/offload.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/provenance.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/query_shape.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/regret.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/scoring.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/signal_fusion.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/subject_state.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/tuning.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/retrieval/verdict.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/_calls_store.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/confidence.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/diagnostics_ingest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/diagnostics_log.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/http_routes.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/ingest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/otel.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/redact.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/resolve.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/sql_ingest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/sql_log.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/stack_ingest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime/stack_log.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/runtime_identity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/secret_classifier.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/security.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/server.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/service_installer.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/stdio_guard.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/embedding_matrix.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/embedding_store.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/generation.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/git_root.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/process_locks.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/process_registry.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/selective.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/sqlite_store.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/token_tracker.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/storage/transcript_roots.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/summarizer/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/summarizer/batch_summarize.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/summarizer/file_summarize.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/surface_offer.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tier_resolver.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tier_switch_cost.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_arg_contract.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_call_graph.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_corpus_adequacy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_diagnostics_consume.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_dynamic_boundary.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_entry_points.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_git_history.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_indexing_pipeline.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_name_reachability.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_runtime_discovery.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_scip_consume.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_stop_rule.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_test_paths.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/_utils.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/analyze_perf.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/assemble_task_context.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/audit_agent_config.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/check_delete_safe.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/check_edit_safe.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/check_embedding_drift.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/check_references.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/check_rename_safe.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/decision_context.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/digest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/embed_repo.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/find_dead_code.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/find_hot_paths.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/find_implementations.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/find_importers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/find_references.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/find_similar_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/find_unused_paths.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/flow_edges.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_architecture_metrics.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_blast_radius.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_call_hierarchy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_changed_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_churn_rate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_class_hierarchy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_context_bundle.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_coupling_metrics.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_cross_repo_map.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_dead_code_v2.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_decorator_census.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_delivery_metrics.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_dependency_cycles.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_dependency_graph.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_endpoint_impact.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_extraction_candidates.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_file_content.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_file_outline.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_file_risk.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_file_tree.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_group_contracts.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_hotspots.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_impact_preview.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_layer_violations.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_parity_map.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_pr_risk_profile.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_project_intel.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_ranked_context.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_redaction_log.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_related_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_repo_health.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_repo_map.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_repo_outline.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_runtime_coverage.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_session_context.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_session_snapshot.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_session_stats.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_signal_chains.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_symbol.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_symbol_complexity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_symbol_diff.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_symbol_importance.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_symbol_provenance.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_tectonic_map.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_untested_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/get_watch_status.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/health_radar.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/import_runtime_signal.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/import_scip.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/index_dependency.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/index_file.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/index_folder.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/index_repo.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/invalidate_cache.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/list_repos.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/list_workspaces.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/mermaid_viewer.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/observatory.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/observatory_render.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/package_registry.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/pagerank.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/plan_refactoring.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/plan_turn.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/refresh.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/register_edit.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/render_diagram.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/resolve_repo.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/search_ast.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/search_columns.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/search_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/search_text.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/session_journal.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/session_state.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/suggest_corrections.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/suggest_queries.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/summarize_repo.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/test_summarizer.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/tune_weights.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/turn_budget.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/tools/winnow_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/version_check.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/watch_all.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/src/jcodemunch_mcp/watcher.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/conftest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/conftest_helpers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/encoding/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/encoding/test_dispatcher.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/encoding/test_format.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/encoding/test_generic_hardened.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/encoding/test_tier1_roundtrip.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/al/sample.al +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/arduino/sample.ino +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/astro/BaseLayout.astro +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/astro/ClientIsland.astro +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/astro/ContentPage.astro +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/astro/DynamicRoute.astro +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/astro/WidgetComponent.astro +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/astro/WithProps.astro +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/astro/sample.astro +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/astro/sample_bom_crlf.astro +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/astro/sample_malformed_frontmatter.astro +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/astro/sample_multi_script.astro +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/blade/sample.blade.php +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/c/sample.c +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/aider_map.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/cocoindex_mcp.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/code_review_graph_mcp.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/codebase_memory_mcp.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/codegraph_mcp.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/cymbal/imp_json.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/cymbal/index.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/cymbal/inv_default.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/cymbal/inv_json.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/cymbal/refs_json.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/cymbal/search_json.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/cymbal/show_json.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/graft_mcp.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/serena_mcp.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/zvec_grep/README.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/zvec_grep/index.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/zvec_grep/run.sh +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/zvec_grep/self-P1-cache_put.0.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/zvec_grep/self-P2-cache_put.0.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/zvec_grep/self-P4-token_tracker.0.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/zvec_grep/self-T-router.0.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/zvec_grep/status.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/zvec_grep/timings.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/competitive/zvec_grep/tools_list.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/cpp/sample.cpp +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/csharp/sample.cs +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/dart/sample.dart +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/diagnostics/REGENERATE.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/diagnostics/mypy.jsonl +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/diagnostics/pyright.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/diagnostics/ruff.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/diagnostics/sample_a.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/diagnostics/sample_mod.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/diagnostics/tsc.txt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/elixir/sample.ex +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/gap_ledger_issues.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/go/sample.go +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/grammar_declaration_inventory.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/java/Sample.java +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/javascript/sample.js +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/perl/sample.pl +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/php/sample.php +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/pkg_smoke/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/pkg_smoke/app/__init__.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/pkg_smoke/app/cli.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/pkg_smoke/app/inventory.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/pkg_smoke/app/orders.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/pkg_smoke/main.go +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/pkg_smoke/pyproject.toml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/pkg_smoke/web/handlers.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/pkg_smoke/web/router.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/pkg_smoke/web/util.js +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/python/sample.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/racket/REGENERATE.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/racket/atexp-syntax.rkt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/racket/atexp.rkt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/racket/basics.rkt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/racket/forms.rkt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/racket/guards.rkt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/racket/macros.rkt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/racket/reader.rkt +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/racket_oracle.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/racket_reader_oracle.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/razor/Counter.razor +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/razor/dotnet_aspnetcore_layout.cshtml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/razor/sample.cshtml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/ruby/sample.rb +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/rust/REGENERATE.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/rust/basics.rs +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/rust/guards.rs +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/rust/qualification.rs +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/rust/sample.rs +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/rust_oracle.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/svelte/Counter.svelte +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/templates/sample.py.jinja +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/templates/sample.ts.j2 +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/templates/widget.ts.twig +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/typescript/sample.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/verilog/sample.sv +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/vhdl/sample.vhd +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/xml/sample.xml +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/fixtures/xml/sample.xul +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_blast_radius_counts_its_cross_repo_importers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_c_family_class_behind_an_export_macro_is_a_class.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_c_family_enum_behind_an_export_macro_is_an_enum.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_c_prototype_is_a_function.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_c_struct_member_is_indexed.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_c_type_reference_is_not_a_declaration.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_c_typedef_binds_every_name.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_class_in_a_method_body_is_not_published_bare.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_class_member_carries_its_owner.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_cpp_class_defined_with_a_qualified_name_is_nested.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_cpp_function_local_type_is_owned_by_the_function.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_cpp_header_of_prototypes_is_read_as_cpp.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_cpp_out_of_class_definition_is_a_member.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_cpp_specialisation_keeps_its_arguments.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_cpp_template_span_ends_where_it_starts.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_dart_extension_type_and_enum_own_their_members.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_dynamic_import_is_an_edge_or_a_named_boundary.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_failing_tier_names_its_failures.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_function_valued_binding_in_a_component_script_is_indexed.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_go_method_belongs_to_its_receiver.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_grouped_go_binding_records_its_own_span.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_grouped_go_type_block_binds_every_name.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_js_class_expression_is_a_class.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_js_declarator_records_its_own_span.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_kotlin_spilled_accessor_owns_its_body.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_kotlin_top_level_binding_is_not_a_member.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_latency_tail_is_resampled_before_it_fails.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_members_parent_survives_disambiguation.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_near_miss_symbol_id_names_its_candidates.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_prototype_list_binds_every_name.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_red_tier_keeps_its_tracebacks.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_refused_absence_never_reads_as_proof.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_rust_struct_field_is_indexed.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_ts_parameter_property_is_a_field.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_tsx_script_is_read_with_the_tsx_grammar.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_vue_component_with_two_scripts_indexes_both.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_vue_options_script_keeps_its_top_level_declarations.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_vue_or_svelte_script_class_owns_its_members.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_a_zig_qualified_container_is_a_container.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_absence_wiring_guard.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_adaptive_languages.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_agent_selector.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_al.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_an_astro_class_owns_its_members.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_an_fsharp_and_chain_binds_every_name.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_an_fsharp_non_rec_and_chain_binds_every_name.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_an_unbound_class_expression_publishes_its_members.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_analyze_perf_totals.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_anthropic_optional.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_architecture_metrics.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_architecture_tools.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_arrow_functions.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_asm_language.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_assemble_task_context.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_astro.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_audit_agent_config.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_benchmark_grep_baseline.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_benchmark_reference.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_benchmark_tables_mirror_the_reference.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_blade.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_blank_identifier_is_not_a_symbol.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_blast_radius.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_blast_radius_package_granular_verdict.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_bm25_cache_single_flight.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_bm25_correctness.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_bounded_verdicts_declare_whether_absence_was_established.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_branch_indexing.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_build.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_build_tree_spellings.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_byte_offset_symbol_names.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_cache_hit_rate_basis.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_cache_mode.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_call_extraction.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_call_graph_ast.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_call_hierarchy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_call_outcome_contract.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_call_references_model.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_capability_certificate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_catalog_moratorium.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_changed_symbols_blast_describes_until_sha.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_changed_symbols_blast_keeps_its_verdict.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_changed_symbols_names_the_files_it_did_not_diff.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_channel_accuracy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_check_delete_safe.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_check_edit_safe.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_check_edit_safe_reads_the_dynamic_boundary.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_check_references.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_check_rename_safe.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_churn_rate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_churn_rate_never_answers_for_a_target_that_is_not_there.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_ci_env_reproduce_command.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_class_constant_owner.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_class_hierarchy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_class_state_is_indexed_in_four_more_languages.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_class_state_is_indexed_in_three_spec_languages.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_claude_md_policy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_claude_md_rotation.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_claude_md_size.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_cleanup.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_cli.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_cli_env_split.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_cli_output_encoding.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_code_index_path_is_honoured.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_code_scanning_triage.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_aider.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_checks.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_cocoindex.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_code_review_graph.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_codebase_memory.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_codegraph.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_compare_ref.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_fairness_digest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_findings.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_graft.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_image_cost.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_mcp_driver.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_prerequisites.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_reindex_one.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_sandbox.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_serena.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_tier.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_trend.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_workflows.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_competitive_zvec_grep.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_complexity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_confidence.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_confidence_score_scale.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_config.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_config_check_hooks.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_config_check_matches_resolver.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_config_check_names_a_stale_policy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_config_docs_reverse_parity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_config_isolation_guard.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_config_lazy_load.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_config_set.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_config_watcher_keys.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_configuration_md_defaults.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_constant_extraction_guard.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_context_providers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_copilot_hook.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_count_cap_end_to_end.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_counter.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_counter_surface_stability.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_counts_survive_truncation.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_cpp_data_members.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_cpp_function_shaped_variables_are_not_functions.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_credentials.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_cross_repo.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_csharp_operator_forms.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_css.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dart_imports.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dbt_provider.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dead_code_corpus_adequacy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dead_code_reads_the_dynamic_import_boundary.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dead_code_v2.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_deadcode_eval_harness.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_declared_forms_extract.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_decorator_awareness.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_decorator_census.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_decorator_routes.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_deferred_summarization.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_definition_exclusion_is_case_exact.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_delete_index_cli.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_delivery_metrics.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dependency_graph_imports_alias.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_description_smells.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_diagnostics_consumers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_diagnostics_ingest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_digest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dispatch_resolution.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dispatch_schema_parity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dispatcher_arg_mutation.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_django_provider.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_docs_config_parity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dod_checklist_code_roots.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dod_retired_test_detection.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_dod_row1_binding.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_embed_drift.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_embed_model_version_floor.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_embed_repo_error_cause.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_embed_task_type_gate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_embedding_model_change.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_embedding_provider_advice.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_endpoint_impact.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_endpoint_infra_impact.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_enum_members_register.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_every_language_spec_field_has_a_reader.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_every_served_cache_hit_is_counted_once.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_exact_match_survives_the_cut.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_explicit_embed_model_wins.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_express_provider.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_extra_extensions.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_extraction_candidates.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_fast_path_no_hydration.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_file_io_encoding_guard.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_file_summaries.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_file_summary_member_kinds.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_find_dead_code.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_find_implementations.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_find_importers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_find_importers_discloses_the_dynamic_boundary.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_find_references_line_numbers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_find_similar_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_fqn.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_framework_build_trees_are_skipped.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_framework_profiles.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_framework_script_bindings.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_freshness.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_fsharp_abstract_interface_and_constructor_members.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_fsharp_members_after_static_member_val.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_full_save_keeps_embedding_meta.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_full_tier_coverage_core.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_future_version_no_false_absence.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_fuzzy_search.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_gap_ledgers_cite_open_issues.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_gcm.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_generated_policy_matches_tools_list.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_generation_contract.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_get_changed_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_get_context_bundle.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_get_file_outline_integration.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_get_file_risk.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_get_file_tree.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_get_group_contracts.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_get_repo_map.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_get_untested_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_git_history_coverage.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_git_paths_relative_to_index_root.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_git_root_identity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_git_sha_verification.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_gleam_imports.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_go_routers_provider.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_go_variables.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_grammar_spelled_forms.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_groq_explainer.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_groq_voice.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_guide_respects_disabled_tools.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_handshake_watchdog.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_hardening.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_harness_bench_artifact.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_harness_summary.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_harness_verdict_lines.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_haskell_declared_forms.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_health_radar.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_health_radar_action.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_hook_budget_tree_kill.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_hook_output_channels.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_hook_path_table.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_hook_steering_fixes.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_hooks.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_hotspots.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_html_file_class.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_identity_mode.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_identity_normalized_tier.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_importer_walkers_ask_blast_verdict.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_bench_table.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_depeval_apply.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_depkind.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_digest.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_fix_gates.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_intake_plan.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_plumbing.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_prompts.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_scan.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_selfcheck.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_sweep.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_triage_apply.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inbound_workflows.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_incremental.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_index_channel_tri_state.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_index_dependency.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_index_file.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_index_file_head_advance.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_index_folder_empty_discovery.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_init.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_init_client_schemas.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_init_home_isolation.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_init_hooks_paths.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_init_minimal.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_init_policy_matches_surface.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_install_copilot_hooks.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_install_pack.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_install_pack_member_confinement.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_install_uninstall.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_integrity_check_cost.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_inventory_reads_every_channel.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_investigator_deletion_safety.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_investigator_entry_point_importer_is_live.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_investigator_trusts_the_folded_import_match.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_issue_456_perf_correlation.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_java_declaration_forms.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_java_fields.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_js_bindings.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_js_class_field_phantom_methods.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_js_destructured_bindings.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_js_ts_class_state.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_json.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_julia_name_depth.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_julia_short_functions.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_key_files_split.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_kind_enum_is_derived.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_kotlin_properties.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_language_pack_generation.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_language_spec_maps_agree.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_languages.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_laravel_provider.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_ledger_field_types.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_legacy_lock_holder_identity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_license_identifier_agreement.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_list_repos.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_local_encoder.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_local_integration.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_lockfile_version_sync.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_lsp_bridge.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_luau_language.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_mcp_instructions.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_mcp_pin_carries_its_measurement.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_member_kind_audit.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_member_state_is_not_a_constant.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_meta_disclosure.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_migration.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_missing_content_cache_is_reported.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_mtime_optimization.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_name_not_searchable_keeps_its_other_gaps.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_negative_evidence.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_nesting_depth_channels.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_new_languages.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_new_languages_v143.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_next_entry_points.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_nextjs_provider.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_nim_exported_routines_are_indexed.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_non_ascii_names_keep_refusing.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_nuxt_provider.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_nuxt_srcdir.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_observatory.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_observatory_clone_depth.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_offload.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_offload_contract.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_one_declaration_binds_every_name.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_one_test_file_predicate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_optional_dep_skips_are_visible.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_org_http.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_org_license.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_org_rollup.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_pack_api_transport.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_pack_index_survives_orphan_sweep.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_pack_marker_not_a_repo_index.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_package_json_scripts_are_entry_points.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_pagerank.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_paid_embeddings_optin.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_parity_map.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_parse_budget_cancels.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_parse_budget_python_side.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_parse_cache.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_parse_warnings.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_parser.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_parser_generation_upgrade.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_pascal_fsharp_nim_members_are_owned.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_pascal_interface_members_are_indexed.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_pascal_method_implementation_is_indexed.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_path_entry_point_invariants.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_path_map.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_perf_db_path_resolution.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_perf_telemetry.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_perf_trim_is_per_database.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_php_enum_cases_are_indexed.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_php_members.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_pid_reuse_identity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_plan_refactoring.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_plan_turn.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_plan_turn_absence_is_repo_scoped.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_plugin_manifest_sync.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_policy_grants_absence_only_on_a_proven_scan.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_post_tool_use_hook.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_preflight_descriptions_name_every_verdict.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_process_code_freshness.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_process_locks.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_progress.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_project_intel.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_prompts.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_property_based.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_provenance.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_provider_metadata_and_perf.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_psr4.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_pulse.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_python_class_state.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_python_relative_imports.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_python_script_dir_imports.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_python_sibling_imports.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_racket_collections.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_racket_config_reparse.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_racket_fidelity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_racket_fidelity_artifacts.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_racket_lang_gate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_racket_language.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_racket_reader.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_rails_provider.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_ranking_ledger.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_rate_limit.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_razor.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_readonly_annotations.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_receipt.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_redact.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_references_compare_normalised_spellings.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_refresh_campaign.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_refresh_corpus_unreadable.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_register_edit.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_registry_verify_reads_every_page.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_registry_verify_retries_an_unanswered_read.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_reindex_state.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_related_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_release_cadence_gate.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_release_install_is_its_own_probe.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_release_notes_fit_the_github_limit.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_release_preflight.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_render_diagram.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_render_diagram_integration.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_render_diagram_viewer.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_repeat_root_walk_additional.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_repeat_subdir_walk.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_replay_metrics.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_repo_health.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_repo_key_lookup_caches_what_it_learned.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_resolve_repo.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_resolve_repo_nested_repo_boundary.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_response_cap.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_result_cache.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_result_cache_isolation.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_retirement_ledger.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_retrieval_counterfactual.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_retrieval_inflation.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_retrieval_tools.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_reuse_audit.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_route_binary_pilot_is_frozen.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_route_criterion_has_one_authority.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_route_recall_artifacts_are_fresh.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_route_utils.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_runtime_evidence_names_the_body_it_observed.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_runtime_hit_count_column.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_runtime_phase0.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_runtime_phase1.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_runtime_phase2.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_runtime_phase3.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_runtime_phase4.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_runtime_phase5.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_runtime_phase6.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_runtime_phase7.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_rust_fidelity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_rust_fidelity_artifacts.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_savings_baseline.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_savings_by_tool.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_savings_two_carriers.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_savings_usd_basis.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_scala_given.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_scala_parser.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_schema_baseline_transcription.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_schema_budget.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_schtasks_locale.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_scip_evidence.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_sdist_exclusions.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_search_ast_encoder_contract.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_search_columns.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_search_perf.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_search_result_cache.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_search_symbols_defaults.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_search_symbols_tie_order.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_secret_classifier.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_security.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_security_disclosure.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_security_exclusions_are_project_overridable.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_security_md_limits_parity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_security_md_policy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_selective_snapshot.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_semantic_extra_floor.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_semantic_search.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_server.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_server_json_sync.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_session_journal.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_session_snapshot.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_session_state.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_session_state_does_not_leak_between_tests.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_share_savings.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_signal_fusion.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_size_cap_end_to_end.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_skill_candidates.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_skills.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_solidity_declarations.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_source_drift.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_sql_language.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_sqlite_store.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_standard_invariants.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_stdio_guard.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_stop_rule.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_storage.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_storage_path_resolution.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_streamable_http_integration.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_streamable_http_sessions.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_strict_deny_requires_resolvable_target.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_subprocess_encoding_guard.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_suggest_corrections.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_suggest_queries.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_summarize_from_docstrings.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_summarizer.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_surface_cli.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_surface_diff.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_surface_offer.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_svelte.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_swift_deinit_is_a_method.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_swift_parser.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_swift_protocol_requirements.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_symbol_complexity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_symbol_diff.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_taskcomplete_real_contract.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tectonic_map.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tectonic_partition_hub.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tectonic_temporal_signal.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_telemetry_db_skip.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_templates.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_thresholds_are_the_only_copy.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tier_resolver.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tier_runtime.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tier_switch_cost.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_token_benchmark_floor.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_token_budget_context.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_toml_end_line.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tool_kind_sets_derive_from_kind_order.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tool_registration.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tool_surface_clamp.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tools.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_transcript_roots.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tree_id_is_content_identity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_truncated_flag.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_ts_abstract_class.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_ts_module_extensions.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_ts_type_only_imports.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_tsconfig_walk_cost.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_turn_budget.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_undeclared_table_guard.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_unicode_escapes_name_the_same_identifier.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_unloadable_index_rebuild_disclosure.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_unsettled_verdicts_are_never_terminal.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_usage_question_routes_to_usage_tool.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_0.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_101.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_102.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_103.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_104.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_105.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_106.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_107.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_108.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_110.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_114.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_115.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_118.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_119.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_120.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_121.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_122.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_125.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_126.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_127.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_128.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_129.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_134.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_136.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_137.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_139.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_146.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_147.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_148.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_149.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_150.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_151.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_152.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_153.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_156.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_158.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_159.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_160.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_161.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_162.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_163.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_164.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_165.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_166.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_167.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_168.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_169.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_171.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_172.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_173.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_174.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_175.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_176.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_177.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_178.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_179.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_180.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_181.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_182.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_183.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_184.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_185.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_186.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_187.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_188.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_189.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_190.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_191.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_192.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_193.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_194.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_199.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_2.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_200.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_201.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_206.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_207.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_208.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_209.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_210.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_211.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_223.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_224.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_225.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_226.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_227.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_228.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_229.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_230.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_231.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_234.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_269.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_270.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_271.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_272.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_273.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_275.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_276.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_277.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_281.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_55.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_56.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_57.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_58.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_59.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_63.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_64.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_70.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_71.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_72.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_73.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_74.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_78.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_80.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_81.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_83.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_84.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_85.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_86.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_92.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_95.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_108_99.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_80_10_dead_code_intra_file_calls.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_80_7_dead_code_js_reexports.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_v1_80_9_lodash_class.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_verdict_coverage_calibration.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_version_check.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_vue_svelte_comment_lookup_is_linear.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watch_all.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watch_claude.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watch_once.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watcher_dynamic.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watcher_hash_delta.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watcher_knob_parity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watcher_lock.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watcher_memory_cache.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watcher_polling_default.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watcher_registration_indexing.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watcher_root_removed_during_a_poll.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watcher_serve.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_watcher_symlink_safety.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_weekly_results_pr_once.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_weight_tuning.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_whatsnew.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_winnow_symbols.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_workflow_commit_identity.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_workflow_hooks.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_workflows_pinned.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_workflows_registered.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_worktree_identity_resolves_its_own_index.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_yaml_byte_extent.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_yaml_key_coercion.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_yaml_language.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_yaml_line_location.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/tests/test_zig_powershell_matlab_members_are_owned.py +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/vscode-extension/.gitignore +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/vscode-extension/.vscodeignore +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/vscode-extension/README.md +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/vscode-extension/package-lock.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/vscode-extension/package.json +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/vscode-extension/src/extension.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/vscode-extension/src/riskGutter.ts +0 -0
- {jcodemunch_mcp-1.108.331 → jcodemunch_mcp-1.108.332}/vscode-extension/tsconfig.json +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "jcodemunch",
|
|
4
4
|
"displayName": "jCodeMunch",
|
|
5
|
-
"version": "1.108.
|
|
5
|
+
"version": "1.108.332",
|
|
6
6
|
"description": "Token-efficient MCP server for source code exploration via tree-sitter AST parsing",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "J. Gravelle",
|
|
@@ -2,6 +2,51 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [1.108.332] - 2026-10-07 - a macro's docstring is the comment directly above it
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **A macro's docstring is the comment directly above it (LEDGER L-126).** A dbt macro, test,
|
|
10
|
+
snapshot or materialization, and a Jinja or Twig `macro` or `block`, takes the `{# comment #}`
|
|
11
|
+
above it as its docstring. The lookup searched for a comment from the start of the file and
|
|
12
|
+
then checked only that the text before the directive ended in `#}`, so it returned the FIRST
|
|
13
|
+
comment of the file for every directive that had one above it. In a file of documented macros
|
|
14
|
+
each macro after the first carried the first one's description, and a search by what a macro
|
|
15
|
+
does found the wrong one. Through `parse_file` on `main` and then on the fix
|
|
16
|
+
(`evidence/l126_before_after.txt`): in a `.sql` of three macros, `second` under
|
|
17
|
+
`{# about second #}` read `about first` and reads `about second`; in a `.j2` of two, `button`
|
|
18
|
+
read `renders a field` and reads `renders a button`. The comment used now is the one that ENDS
|
|
19
|
+
where the text before the directive ends, read from a table of the file's comments built once,
|
|
20
|
+
so a `#}` that closes no comment, and a comment elsewhere in the file, are nobody's docstring.
|
|
21
|
+
A `--` comment above a directive was already its own and is unchanged. The dashes of a
|
|
22
|
+
whitespace-control comment, `{#- about m -#}`, were served as part of the docstring
|
|
23
|
+
(`- about m -`); they are the delimiter's and are dropped, as are Jinja's `+` and Twig's `~`,
|
|
24
|
+
one mark per side. ⚠ The docstring changes
|
|
25
|
+
on unchanged content, so `PARSER_GENERATION` is 10 and an existing index re-parses once at its
|
|
26
|
+
next index run; no symbol id moves. Not run: a dbt or Jinja corpus, so how many stored
|
|
27
|
+
docstrings move is not measured.
|
|
28
|
+
|
|
29
|
+
- **Three loops on the parse path take time proportional to the file (LEDGER L-117).** Each
|
|
30
|
+
redid whole-file work per item, in Python, after the parse. Attributing calls to their
|
|
31
|
+
enclosing function rebuilt the list of function starts for every call and then walked back
|
|
32
|
+
over every function that did not hold it; it is one sweep now. The Razor `@code {` scan
|
|
33
|
+
started again for every block and ran to the end of the file when a block never closed; the
|
|
34
|
+
blocks of a file share their scans now. The dbt and Jinja directive loop copied the file up
|
|
35
|
+
to each macro, counted its newlines, searched it for a comment and split it into lines; it
|
|
36
|
+
reads tables built once per file. Five parsers (Razor, Astro, VHDL, Verilog, COBOL) numbered
|
|
37
|
+
each symbol by counting newlines from the start of the file; they share one table. Measured
|
|
38
|
+
through `parse_file` with the parse budget off, on `main` and then on the fix
|
|
39
|
+
(`evidence/l117_before_after.txt`): a 418,340-byte Python file of 6250 functions and 20000
|
|
40
|
+
module-level calls took 63.877 s and takes 0.593 s; a 50,000-byte Razor file of 6250
|
|
41
|
+
unclosed `@code {` took 106.431 s and takes 0.031 s; a 26,890-byte `.sql` of 1000 open
|
|
42
|
+
comments and macros took 38.390 s and takes 0.089 s. Each of those three times is past the
|
|
43
|
+
default parse budget of 20 s, at which a file is skipped and named. Every field of every
|
|
44
|
+
symbol is the same before and after over 9830 files (5137 of them Razor, 285 SQL), so no
|
|
45
|
+
re-index is owed by this entry. Not changed by it: the docstring of a macro under a second
|
|
46
|
+
`{# comment #}` (LEDGER L-126, the entry above); three shapes stay superlinear and are listed
|
|
47
|
+
in LEDGER L-127. Not run: a Jinja or Twig corpus; any Python but 3.12.4 on Windows; the files
|
|
48
|
+
above at the default budget.
|
|
49
|
+
|
|
5
50
|
## [1.108.331] - 2026-10-06 - a full re-index keeps the embedding metadata beside its vectors
|
|
6
51
|
|
|
7
52
|
### Fixed
|
|
@@ -2214,3 +2214,17 @@ The 1.108.330 entry, verbatim, dropped when it was compressed to a `Prior` line:
|
|
|
2214
2214
|
The `Tests:` line's 1.108.328 count, verbatim:
|
|
2215
2215
|
|
|
2216
2216
|
- ⚠ Prior (1.108.328): 14684 passed, 25 skipped, **0 failed** (14709 total).
|
|
2217
|
+
|
|
2218
|
+
## Current State rotation (2026-10-07, release 1.108.332)
|
|
2219
|
+
|
|
2220
|
+
The 1.108.329 entry, verbatim as it stood in `CLAUDE.md`:
|
|
2221
|
+
|
|
2222
|
+
- **Prior (1.108.329):** **The parse budget stops a slow tree-sitter parse** (L-114): the deadline lives inside `parse_file` (`parser/parse_budget.py`), bound to every parser by `grammar_pack.get_parser` and ended by tree-sitter's own timeout (rules: the Env Vars row). Full text: `CHANGELOG.md`; verbatim in `ISSUE-HISTORY.md` (2026-10-06, release 1.108.330).
|
|
2223
|
+
|
|
2224
|
+
The 1.108.331 entry, verbatim, dropped when it was compressed to a `Prior` line:
|
|
2225
|
+
|
|
2226
|
+
- **Version:** 1.108.331 — **A full re-index keeps the embedding metadata beside its vectors** (#522, @lsg1103275794). `save_index` deletes the index's own `meta` keys and leaves those starting with `embedding_store.META_KEY_PREFIX`. ⚠ `embed_repo` after a full re-index no longer re-embeds everything; `force=true` does. ⚠ The semantic top-up in `search_symbols` still checks no stored model (L-121), and stale or orphan vectors survive (L-122). Also `embed_repo`'s task-type gate has THREE states (#523): `None` is never recorded and is not a change, `""` is a recorded value, and vectors with no embedding metadata at all are still rebuilt (jjg, 2026-10-06), named by `rebuild_reason`. Also a Vue or Svelte `<script>`'s comment lookup is one table per parent node, linear where it was quadratic (L-115). Forensics: `CHANGELOG.md`, `docs/workflows/LEDGER.md`.
|
|
2227
|
+
|
|
2228
|
+
The `Tests:` line's 1.108.329 count, verbatim:
|
|
2229
|
+
|
|
2230
|
+
- ⚠ Prior (1.108.329): 14726 passed, 25 skipped, **0 failed** (14751 total).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: jcodemunch-mcp
|
|
3
|
-
Version: 1.108.
|
|
3
|
+
Version: 1.108.332
|
|
4
4
|
Summary: Token-efficient MCP server for source code exploration via tree-sitter AST parsing
|
|
5
5
|
Project-URL: Homepage, https://github.com/jgravelle/jcodemunch-mcp
|
|
6
6
|
Project-URL: Repository, https://github.com/jgravelle/jcodemunch-mcp
|
|
@@ -246,10 +246,10 @@ That's the highlight reel. The complete tour of 90+ tools, the MUNCH compact wir
|
|
|
246
246
|
<!-- WHATSNEW:START -->
|
|
247
247
|
#### What's new
|
|
248
248
|
|
|
249
|
+
- **[v1.108.332](https://github.com/jgravelle/jcodemunch-mcp/releases/tag/v1.108.332)** (2026-10-07) — a macro's docstring is the comment directly above it
|
|
249
250
|
- **[v1.108.331](https://github.com/jgravelle/jcodemunch-mcp/releases/tag/v1.108.331)** (2026-10-06) — a full re-index keeps the embedding metadata beside its vectors
|
|
250
251
|
- **[v1.108.330](https://github.com/jgravelle/jcodemunch-mcp/releases/tag/v1.108.330)** (2026-10-06) — the parse budget bounds a file's Python-side time
|
|
251
252
|
- **[v1.108.329](https://github.com/jgravelle/jcodemunch-mcp/releases/tag/v1.108.329)** (2026-10-05) — the parse budget stops a slow parse
|
|
252
|
-
- **[v1.108.328](https://github.com/jgravelle/jcodemunch-mcp/releases/tag/v1.108.328)** (2026-10-04) — a file a package.json script runs is an entry point
|
|
253
253
|
<!-- WHATSNEW:END -->
|
|
254
254
|
|
|
255
255
|
---
|
|
@@ -158,10 +158,10 @@ That's the highlight reel. The complete tour of 90+ tools, the MUNCH compact wir
|
|
|
158
158
|
<!-- WHATSNEW:START -->
|
|
159
159
|
#### What's new
|
|
160
160
|
|
|
161
|
+
- **[v1.108.332](https://github.com/jgravelle/jcodemunch-mcp/releases/tag/v1.108.332)** (2026-10-07) — a macro's docstring is the comment directly above it
|
|
161
162
|
- **[v1.108.331](https://github.com/jgravelle/jcodemunch-mcp/releases/tag/v1.108.331)** (2026-10-06) — a full re-index keeps the embedding metadata beside its vectors
|
|
162
163
|
- **[v1.108.330](https://github.com/jgravelle/jcodemunch-mcp/releases/tag/v1.108.330)** (2026-10-06) — the parse budget bounds a file's Python-side time
|
|
163
164
|
- **[v1.108.329](https://github.com/jgravelle/jcodemunch-mcp/releases/tag/v1.108.329)** (2026-10-05) — the parse budget stops a slow parse
|
|
164
|
-
- **[v1.108.328](https://github.com/jgravelle/jcodemunch-mcp/releases/tag/v1.108.328)** (2026-10-04) — a file a package.json script runs is an entry point
|
|
165
165
|
<!-- WHATSNEW:END -->
|
|
166
166
|
|
|
167
167
|
---
|
|
@@ -352,6 +352,8 @@ Criterion codes: 1 correctness, 2 token reduction, 3 freshness/caches/absence, 4
|
|
|
352
352
|
| tests/test_parity_map.py | `get_parity_map` classifies ported/renamed/diverged/added/orphaned symbols across two scopes, computes `parity_pct`, orders the port plan topologically with SCC grouping, errors on same scope/unindexed/empty, and is read-only. | `07bbb0c get_parity_map: correspondence-aware migration parity map (v1.108.111)`; docstring | 1 | LOAD-BEARING | Fixture is a legacy/ vs v2/ tree with commented expected outcomes per symbol. |
|
|
353
353
|
| tests/test_parse_budget_cancels.py | An over-budget tree-sitter parse is stopped at `JCODEMUNCH_PARSE_BUDGET_SECONDS` and the file is named in `warnings`, on `parse_file`, a full index and an incremental re-index, at any file size; a stop is recognised without a clock; another thread's time is not charged to the file; a first index starts no wait thread; the installed binding can still cancel a parse. | LEDGER L-114 (2026-10-04): the thread wait could not return while the parse held the GIL | 5 | LOAD-BEARING | The slow input is L-113's shape; each cancelled case costs its 0.25 s budget. The fake-parser cases pin both directions of the stop rule and the expired-deadline branch (review rounds found mutants that passed an earlier form). `test_a_first_index_leaves_no_thread_behind` predates L-116's fix and still holds; every route is in `tests/test_parse_budget_python_side.py`. `OLD_WAIT_GATE` is the retired wait's 128 KiB threshold, kept as a fixture boundary. The binding canary fails when `Parser.timeout_micros` is gone |
|
|
354
354
|
| tests/test_parse_budget_python_side.py | A file's Python-side work is stopped at `JCODEMUNCH_PARSE_BUDGET_SECONDS` in the parsing thread and the file is named: the generic walker, dedicated parsers, a regex language, seven walkers on a tree that builds no symbol, and three quadratic loops that are no recursion. Over the source: every `for`/`while` in the six parse-path modules starts with a checkpoint (three named exemptions), no recursion lacks one, every module of `parser/` is classified. Also: a parser that swallows the stop builds nothing more; a parser-side stop raises at the next checkpoint; a file that ends past its deadline with no checkpoint having seen it is named; time the thread did not spend is not charged; a first index and a re-index name the same file the same way; every file is parsed on the calling thread; no clock is read outside a file or with the budget off. | LEDGER L-116 (2026-10-05): the thread wait was wall-clock, skipped one route and left its worker running | 5 | LOAD-BEARING | The clock is the test's: the deadline passes 5.5 s into a 5 s budget when the file's C parse returns, so nothing depends on a slow fixture and a far-over-only stop fails. ⚠ A new loop on the parse path fails the scan until its first statement is `parse_budget.checkpoint()`; do NOT add it to the exemption table to pass (each entry there has its reason beside it). A new module in `parser/` must be put on or off the path. The scans see statements, not a comprehension, a loop's iterable or one slow call (L-118) |
|
|
355
|
+
| tests/test_parse_path_loops_are_linear.py | Three loops on the parse path are linear in the file: attributing calls to their enclosing symbol, the Razor `@code {` brace scan, and the dbt/Jinja directive loop. Each fix returns what the implementation it replaced returns (kept in the file as an oracle) on seeded generated input (since L-126 a directive's docstring is the one exception: the old loop's docstring was that defect, so the field is held to the rule, written the slow way beside the oracle), finishes a file twice as big before the oracle finishes the small one, and where `parse_budget.checkpoint()` sees the loop, passes under 2.6 times the checkpoints for twice the file. The Razor scan searches under 2.6 times the characters for twice the blocks when each opens an unclosed comment; the directive loop copies or searches under 2.6 times the characters for twice the directives; the call sweep raises under 2.6 times the line events for twice the calls. No module of `parser/` counts newlines up to an offset (`_line_numbers` is the one table), and that scan sees both spellings. Also: a call inside two symbols goes to the inner one; a brace in a string or a comment does not close a block; a macro keeps its line, its end and its `--` comment. | "fix: three loops on the parse path take time proportional to the file (LEDGER L-117)" | 5 | LOAD-BEARING | The race is against the oracle on the same machine in the same test, never against a typed number of seconds. A count of checkpoints is blind to work inside one C call (a slice, a `count`, a regex search), which is why the race is there too. The race is blind to a rescan cheaper than the old loop (a copy of the file per directive wins it), which is why the character and line-event counts are there: a new loop on these paths needs a count that can see its work, not only a race. The race is at TWICE the size, not more: coverage's C tracer (the 3.10 and 3.11 jobs) slows the fix and not the oracle, and at eight times the size the fix lost. Before changing a size, read the margins with the tracer on. The oracles are the old code and must not be edited to agree with a change. |
|
|
356
|
+
| tests/test_a_macro_docstring_is_the_comment_above_it.py | A dbt macro, a Jinja template macro and a Twig macro and block each take the `{# comment #}` that ends directly above them as their docstring, through `parse_file`; the dashes of `{#- ... -#}` are not part of it; a comment elsewhere in the file, a stray `#}`, text that only ends like a comment and an unclosed comment are nobody's docstring; of two comments the nearer one is used; a `--` comment nearer than a Jinja one wins; 300 documented macros each keep their own; `PARSER_GENERATION` is at least 10. | "fix: a macro's docstring is the comment directly above it (LEDGER L-126)" | 1 | LOAD-BEARING | The lookup returned the FIRST comment of the file for any directive under a `#}`, so a one-macro fixture cannot fail on it: every case here has a first comment that is NOT the answer. The generation assertion is a floor, not an equality, so the next bump does not edit this file. |
|
|
355
357
|
| tests/test_parse_cache.py | Content-addressed parse cache is a passthrough when disabled, returns identical symbols on hit, and FIFO-evicts past `DEFAULT_MAX_ROWS`. | `c57b070 release: v1.108.40 -- content-addressed parse cache for shared-host indexing`; `444925e v1.108.41 -- bound the shared parse cache (FIFO eviction)` | 3 | LOAD-BEARING | Env-gated by `JCODEMUNCH_PARSE_CACHE`; compares `dataclasses.asdict` of symbols. |
|
|
356
358
|
| tests/test_parse_warnings.py | `index_folder` reports `missing_extractors` for a language with symbols but no import extractor (Elixir), and `get_dead_code_v2` emits `framework_warning` when no entry points are found. | `b4db152 release: v1.21.19 -- Phase 5 uncertainty disclosure (T15-T18)`; docstring T17/T18 | 9 | LOAD-BEARING | Elixir is the representative gap; if an Elixir import extractor is added this fixture language must change. |
|
|
357
359
|
| tests/test_parser.py | Core `parse_file` extraction for Python plus Lua, JS/TS const constants, and Astro frontmatter/components. | `ac91053 feat: add Lua language support (v1.0.1)`; `c984804 feat: extract JS/TS const declarations as constants`; `d1aa0e5 feat(parser): enhance Astro support ... regression tests` | 1 | LOAD-BEARING | Phase 1 file that accreted language cases; one `read_text` on a fixture. |
|
|
@@ -165,7 +165,7 @@ with jjg's reason. Keep the row. To promote a row to an issue, set Status to
|
|
|
165
165
|
| L-114 | 2026-10-04, harness F-41 review | `JCODEMUNCH_PARSE_BUDGET_SECONDS` cannot stop or shorten a slow tree-sitter parse on any route, and one route does not ask it to. All of this is `evidence/l114_budget.txt`, budget 2 s, a 324,035-byte file that takes about 4.5 s to parse (L-113's shape). **The mechanism:** `parse_file_budgeted` waits with `worker.join(budget)`, and tree-sitter's parse holds the GIL for its whole duration: a ticker thread asked to tick every 50 ms ticked ONCE during a 4.57 s parse (about 91 were due), and `join(2.0)` returned after 4.57 s with the worker already finished. So the wait cannot return early, and by the time it returns the parse is usually done: four direct calls in one process raised `ParseBudgetExceeded` once (the cold first call, after 4.44 s) and returned the file's symbols three times (4.57 to 4.72 s), with no warning. The budget therefore bounds neither the latency nor, reliably, the outcome, and while the parse runs no other Python thread in the server runs either. **The routes** in `tools/index_folder.py`: the full-index loop calls `parse_file` directly (line 2928), so the budget is never consulted: a first index took 4.58 s with `incremental=True` (the default) and 4.75 s with `incremental=False`, each `warnings None` and no budgeted call; the incremental re-index (`parse_and_prepare_incremental`, line 2748) and the immediate route (`parse_immediate`, line 2120) reach `parse_file_budgeted`: a re-index after an edit took 4.70 s, made the budgeted call, got symbols back after 4.54 s, and reported no warning. CLAUDE.md's Env Vars row says an overrun file "is skipped and named in the index result's `warnings` instead of the run hanging" and adds that a watchdog cannot stop the work; measured, it does not skip or name the file either, in 4 of the 5 calls quoted here (6 of the 8 over-budget calls in the evidence file; both that raised were a process's cold first call). By the same mechanism the budget does bound time spent in Python code, which releases the GIL between bytecodes (the round-3 reviewer's probe: a 5 s pure-Python loop raised after 2.03 s; not in the evidence file); that was not what stalled here. Not run: the watcher's path, `index_repo`, a grammar whose parse is slow in Python-side walking instead of in the C parse, and a parse long enough that the post-parse walk is still running when the wait returns. Possible fixes, neither tried: tree-sitter's own parse timeout or progress callback if the installed binding has one, or a child process. Decide that first; routing the full-index loop through the budgeted call changes nothing until the budget can fire. | `src/jcodemunch_mcp/tools/_indexing_pipeline.py` (`parse_file_budgeted`); `src/jcodemunch_mcp/tools/index_folder.py` | defect | medium | FIXED 2026-10-04 for the tree-sitter parse; the Python-side half moved to L-116. The limit went one layer down, into the parser (`src/jcodemunch_mcp/parser/parse_budget.py`): `parse_file` opens one deadline per file, `grammar_pack.get_parser` (the one loader every grammar call uses) returns a parser carrying what is left of it, and tree-sitter's `timeout_micros` ends the parse in C. A cancel is recorded on the deadline and raised by `parse_file` after its dispatch, because most dedicated parsers catch `Exception` around their parse. Measured at the same 2 s budget on the same file (`evidence/l114_after.txt`): `parse_file` raised after 2.01 to 2.07 s on four calls of four, and the full index, the incremental first index and the re-index after an edit finished in 2.22 to 2.26 s with the file named in `warnings`. The size gate is gone for the parse. What two review rounds changed: a stop is recognised by what the binding raises, never by a clock (this box's monotonic clock has a resolution of 0.015625 s, `evidence/l115_vue_svelte_walk.txt` line 2, and a clock test called a late cancel a real error, returning the file empty and unnamed; `evidence/l114_r2_tiny_budgets.txt` shows no empty return and no bare error in 750 calls); between a file's parses the deadline is the parsing thread's own time, so another thread's parse cannot spend it (0 of 192 files falsely skipped, `evidence/l114_r2_two_threads.txt`; 0 of 120 across ten first indexes beside another, `evidence/l114_r3_first_index_two_threads.txt`); a parser asked after the deadline is refused and the refusal recorded; a stopped parser is reset before it is let go, because tree-sitter keeps a stopped parse to resume it; the warning filter for the deprecated setter is installed once per process. Round 1 also routed the full-index loop through `parse_file_budgeted`; round 2 measured that as a regression (the wall-clock wait names a fast file over budget beside another thread's parse, L-116 (2), and the first index is the default route) and it was taken back out. Why not the progress callback tree-sitter 0.25 recommends: it is ignored for a bytestring, and with a read callback it killed the interpreter with an access violation on eight variants of eight (`evidence/l114_read_cb_variants.txt`, `evidence/l114_read_cb_direct.txt`; tree-sitter 0.25.2, Python 3.12.4, Windows only). Guard: `tests/test_parse_budget_cancels.py` (35 reintroduced defects of 35 fail it, `evidence/l114_mutants.txt`), which also fails when the installed binding cannot cancel. Not covered: inside a parse the timer is tree-sitter's and it is wall-clock, so other PROCESSES can spend a file's budget (a file that parses in 0.672 s alone was stopped at a 1.01 s budget 12 times of 12 beside 48 CPU-burning processes on 24 cores, `evidence/l114_r4_other_processes.txt`; the file is named); `search_ast` loads its parser outside `parse_file` and has no limit; Python-side time between a file's parses counts toward its deadline, and Python-side time after its last parse has no limit on the first index (L-116); `pyproject.toml` allows any `tree-sitter>=0.25`, and a release that removes `timeout_micros` leaves only the thread wait (logged once at WARNING); on a platform without `time.thread_time` the deadline falls back to the monotonic clock. Not run: the callback crash, or any of this, on another OS or Python. |
|
|
166
166
|
| L-115 | 2026-10-04, L-114 review round 1 | A Vue or Svelte file's plain `<script>` is slow in `parse_file`'s PYTHON-side work, not in the C parse. `evidence/l115_vue_svelte_walk.txt` (the probe sets a 600 s budget, so nothing is stopped, and builds 6000 functions): a 441,827-char `.vue` with those functions in `<script>` took 14.12 s in `parse_file` with its two C parses at 0.006 and 0.109 s, and a 441,806-char `.svelte` with the same script took 14.19 s with C parses of 0.004 and 0.131 s. The same count of functions as a `.ts` file reads at most 0.73 s per call over 25 calls (`evidence/l114_r2_tiny_budgets.txt`, row `a.ts budget 0.25`). Cause (2026-10-05, `evidence/l115_cause_profile.txt`): `_preceding_comment` inside `_parse_vue_symbols` rescans all of the parent's children for each function, 3.127 s of a 3.353 s parse at 3000 functions, and the time is quadratic (0.87 s at 1500 functions, 3.27 s at 3000). Since L-116 every route skips and names such a file once its walk passes the budget; it is still slow below it. Not run: the Svelte parser's profile, Astro, Razor, a `<script setup lang="ts">` block. | `src/jcodemunch_mcp/parser/extractor.py` (`_parse_vue_symbols`, `_parse_svelte_symbols`) | defect | medium | FIXED 2026-10-06. Both walks now read one shared table (`_CommentBefore`), built in one pass per parent node, where each scanned the parent's children from the first one for every declaration. `evidence/l115_before_after.txt`, a 368,717-byte `.vue` of 6000 functions: `parse_file` 22.674 s on 1.108.330 and 0.176 s after, loop iterations 36,168,008 and 174,008; the same script as `.svelte` 22.703 s and 0.122 s. The symbol digest (ids, lines, signatures, docstrings) is equal before and after at 1500, 3000 and 6000 functions for both languages, so no `PARSER_GENERATION` bump. Guard: `tests/test_vue_svelte_comment_lookup_is_linear.py` counts loop iterations at two sizes (on 1.108.330 the ratio read 3.68 for Vue and 3.92 for Svelte against a bound of 2.6) and pins which comment belongs to which function. The review ran the old lookup against the table on every node of 15,402 trees (818,172 nodes) with 0 differences, and every `Symbol` field over 3,696 Vue and Svelte files with 0 differing files; it also measured the same quadratic cost on 1.108.330 under an options-API `methods` object, top-level `const`, `<script setup lang="ts">`, Svelte `export let` and `$:` (iteration ratios 3.97 to 3.99 at 1500 and 3000 declarations), each 2.00 after. A first index of both 6000-function files at the default budget: 1.108.330 skipped and named both, the fix indexed both (`evidence/l115_before_after.txt`, the `index_folder` half). Not run: Astro and Razor script walks; any Python but 3.12.4 on Windows. Not pinned by a test: that the table keeps its parent node (a variant holding only the id gave 6 wrong docstrings in a three-script `.vue` in the review's probe; a valid file has at most two). Unmeasured candidates of the same class: `node.children.index(...)` per item in the SQL `_build_signature` loop and in `_parse_groovy_symbols`. Found on the way: L-124. |
|
|
167
167
|
| L-116 | 2026-10-04, L-114 review round 2 | The thread wait around `parse_file` (`parse_file_budgeted`, since 1.108.182) is what bounds a file's Python-side time, and it has four defects L-114 did not fix. (1) Every route asks it (`parse_and_prepare_incremental`, `parse_immediate` and `parse_and_prepare_full` in `tools/_indexing_pipeline.py`, reached from an incremental `index_folder`, `index_file` and `index_repo`) except `index_folder`'s full-index loop, so the same file is indexed by a first index and skipped by a re-index: L-115's Vue file at a 2 s budget was indexed with 6002 symbols and no warning after 14.91 s on a first index, and skipped and named after 4.27 s on a re-index (`evidence/l114_r2_python_side.txt`). (2) `worker.join(budget)` is wall-clock, so time another thread holds the GIL is charged to the file: a 201,780-char file that parses in 0.28 s alone was named over a 1 s budget in 10 of 60 calls beside one over-budget parse in a second thread (`evidence/l116_wait_two_threads.txt`). (3) The abandoned worker keeps running after the caller moved on, and after `index_folder` returns, and with `JCODEMUNCH_PARSE_CACHE` set it stores its result in the parse cache for a file the caller was told is skipped (`evidence/l116_worker_writes_cache.txt`: 0 rows when the wait expired, 1 after the worker ended); SECURITY.md's background-behaviour list had no line for it until the PR that added this row. (4) Its gate and its message count characters, where the parse limit's message counts bytes, so one file can be named in either unit. Routing the first index through the wait was tried in L-114's review round 1 and taken out in round 2, because (2) and (3) then reach the default route. A fix has to bound the worker's own time, not the waiter's clock. Not run: how often two parsing threads coexist in one server (the dispatcher's `asyncio.to_thread` plus the watcher). | `src/jcodemunch_mcp/tools/_indexing_pipeline.py` (`parse_file_budgeted`); `src/jcodemunch_mcp/tools/index_folder.py` | defect | medium | FIXED 2026-10-05. The wait is gone and no second thread replaces it: the parsing thread checks its own deadline at `parse_budget.checkpoint()`, which raises inside a `parse_file` call once the deadline has passed, and `parse_file` reads the deadline once more when its dispatch returns. So (1) every route and every size has the limit, (2) the clock is the parsing thread's own time, (3) there is no worker to abandon and a stopped file writes no parse-cache row, and (4) the message counts bytes. A cooperative limit holds only where a checkpoint is passed, and three review rounds each found a hole: round 1, seven dedicated walkers that build no symbol; round 2, three quadratic loops that are no recursion (call-site attribution in the generic path, a Razor brace scan, a dbt directive loop), one of which held a re-index 9.62 s at a 2 s budget, unnamed, under the first form of this fix where 1.108.329 released it at 2.03 s; round 3, a file whose time went into one regex call and which then passed fewer checkpoints than a clock read needs, returned unnamed. The rule is therefore over the source: every `for` and `while` statement in the six modules a parse runs through starts with a checkpoint, every function there that can call itself passes one, building a `Symbol` is one, three loops are exempt by name with a reason, and every module of `parser/` is classified on or off the path. L-115's Vue file at a 2 s budget: first index 2.86 s and re-index 2.85 s, both named, against 13.96 s indexed with no warning and 4.39 s on 1.108.329 (`evidence/l116_vue_first_index_and_reindex.txt`); 0 of 60 fast files named beside another thread's parse against 9 of 60 (`evidence/l116_two_threads.txt`); 0 parse-cache rows for the stopped file against 1 (`evidence/l116_parse_cache.txt`); round 2's three shapes stopped and named after 2.02, 2.01 and 2.27 s at a 2 s budget, where 1.108.329 held the Razor file 41.34 s unnamed and the dbt file 48.40 s (`evidence/l116_quadratic_shapes.txt`). SECURITY.md's abandoned-worker line is removed with the worker. Cost: `evidence/l116_checkpoint_cost.txt` (Python), `evidence/l116_checkpoint_cost_other_languages.txt`, `evidence/l116_symbol_build_cost.txt`. Guard: `tests/test_parse_budget_python_side.py` (26 reintroduced defects of 26 fail it, `evidence/l116_mutants.txt`). Not covered: one slow call passes no checkpoint and is not cut short (a regex over the whole file, also as the iterable of a `for`; a comprehension; PyYAML's loader, which is Python code outside the six modules); the file is named when the call returns. At a 0.5 s budget (`evidence/l116_one_call_shapes.txt`) a 140,000-byte EJS file held its caller 30.90 s (30.62 s on 1.108.329, whose wait could not cut a regex short either), an Astro file 11.16 s (11.21 s), a dbt file 23.63 s (23.76 s), and a 400,000-byte YAML list 1.87 s where 1.108.329's wait released its caller at 0.53 s with the load still running: the one measured case where a caller waits longer than before. With the deadline forced past as the C parse returned, 66 inputs of 400 KB and every language enabled, 55 were stopped and named (48 with the forced deadline in effect, none more than 0.12 s past it; 7 by the real 0.3 s budget alone) and 11 load no parser and returned (`evidence/l116_residue_probe.txt`, its own summary). Other limits of L-114's row stand. Not run: any OS or Python but Windows, 3.12.4. Found on the way: L-117, L-118, L-119. |
|
|
168
|
-
| L-117 | 2026-10-05, L-116 review round 2 | Three Python loops on the parse path are quadratic in file size. Since L-116 a file is stopped and named at `JCODEMUNCH_PARSE_BUDGET_SECONDS`; below the budget the time is still spent, and at the default 20 s that is a long wait per file. (1) `_find_enclosing_symbol` rebuilds its list of symbol starts and scans it for every call site, in the generic path every spec language uses: a 309,590-byte Python file of 6,250 functions and 20,000 module-level calls ran 9.62 s under the first form of L-116's fix, which did not stop it. (2) `_extract_razor_brace_block` scans to the end of the file for each `@code {`: a 50,000-byte Razor file held its caller 41.34 s on 1.108.329. (3) The dbt directive loop (`sql_preprocessor.extract_dbt_directives`, `_extract_preceding_docstring`) searches backward per directive: a 25,000-byte `.sql` of open comments and macros took 48.40 s on 1.108.329. All three: `evidence/l116_quadratic_shapes.txt`. Not run: how often real files have these shapes; the Jinja template path through `template_shared.py`. | `src/jcodemunch_mcp/parser/extractor.py` (`_find_enclosing_symbol`, `_extract_razor_brace_block`); `src/jcodemunch_mcp/parser/sql_preprocessor.py` | defect | medium |
|
|
168
|
+
| L-117 | 2026-10-05, L-116 review round 2 | Three Python loops on the parse path are quadratic in file size. Since L-116 a file is stopped and named at `JCODEMUNCH_PARSE_BUDGET_SECONDS`; below the budget the time is still spent, and at the default 20 s that is a long wait per file. (1) `_find_enclosing_symbol` rebuilds its list of symbol starts and scans it for every call site, in the generic path every spec language uses: a 309,590-byte Python file of 6,250 functions and 20,000 module-level calls ran 9.62 s under the first form of L-116's fix, which did not stop it. (2) `_extract_razor_brace_block` scans to the end of the file for each `@code {`: a 50,000-byte Razor file held its caller 41.34 s on 1.108.329. (3) The dbt directive loop (`sql_preprocessor.extract_dbt_directives`, `_extract_preceding_docstring`) searches backward per directive: a 25,000-byte `.sql` of open comments and macros took 48.40 s on 1.108.329. All three: `evidence/l116_quadratic_shapes.txt`. Not run: how often real files have these shapes; the Jinja template path through `template_shared.py`. | `src/jcodemunch_mcp/parser/extractor.py` (`_find_enclosing_symbol`, `_extract_razor_brace_block`); `src/jcodemunch_mcp/parser/sql_preprocessor.py` | defect | medium | FIXED 2026-10-06. (1) `_attribute_calls_to_symbols` sweeps the calls once in offset order with the callables that have started on a stack, and looks a name up in a set; `_find_enclosing_symbol` is gone. (2) `_RazorBraceBlocks` shares one set of scans between every block of a file: a scan stops where an earlier one already was in the same state (code, a comment, a string). `_extract_razor_brace_block` is gone. (3) `extract_dbt_directives` reads line numbers, end tags and the comment above a directive from tables built once per file (`_PrecedingComments`); `_extract_preceding_docstring` is gone. Also five parsers (Razor, Astro, VHDL, Verilog, COBOL) numbered each symbol by counting newlines from the start of the file; they read one table (`_line_numbers`). `evidence/l117_before_after.txt`, `parse_file` with the budget off, `main` then the fix: the 418,340-byte Python file of 6250 functions and 20000 module-level calls 63.877 s and 0.593 s; a 50,000-byte Razor file of 6250 unclosed `@code {` 106.431 s and 0.031 s; a 26,890-byte `.sql` of 1000 open comments and macros 38.390 s and 0.089 s. Every field of every symbol is the same on both trees over 9830 files (5137 Razor, 285 SQL, 1081 Python; one digest), so no `PARSER_GENERATION` bump. Guard: `tests/test_parse_path_loops_are_linear.py` keeps the three old implementations as oracles; the fix must return what they return on generated input, and must finish a file twice as big before the oracle finishes the small one; loop iterations are counted at two sizes where a checkpoint sees them, and the characters the Razor scan searches are counted where it does not. Review round 1 (`evidence/l117_race_margins.txt`, `evidence/l117_r1_mutants.txt`): the first race, at eight times the size, lost under coverage's C tracer, which the 3.10 and 3.11 jobs use; the smallest margin measured under that tracer is now x7.1. The review also found a Razor file whose every `@code {` opens an unclosed comment still quadratic (5000 such blocks, 50,000 bytes: 80.791 s on `main`, 0.035 s now), and the VHDL, Verilog and COBOL copies of the newline count (10000 items: 0.757, 0.722 and 1.165 s on `main`; 0.068, 0.076 and 0.077 s now). Review round 2 (`evidence/l117_r2_sibling_pairs.txt`, `evidence/l117_r2_mutants.txt`): an unclosed block found its closing brace by stepping over every matched pair after it, once per block (4000 commented-out `@code {` lines then 4000 `{}` pairs, 52,000 bytes: 7.987 s after round 1, 0.045 s now); each brace keeps the answer now (`_closer_from`). And the guard passed with four of the per-item rescans put back, because a slice, a search and a list build pass no checkpoint and are too cheap to lose the race: the file now counts the characters the directive loop copies or searches and the line events of the call sweep at two sizes, and each of seven such mutants fails it. Not run: any Python but 3.12.4 on Windows; a Jinja or Twig corpus (the template path shares the dbt function and its equality test runs with the `macro`/`block` keywords). What is still superlinear: L-127. Found on the way: L-126. What the guard still cannot see: L-128. |
|
|
169
169
|
| L-118 | 2026-10-05, L-116 review round 3 | Three regex calls over a whole file are superlinear on unclosed delimiters, and a regex call cannot be stopped part-way by the parse budget (it passes no checkpoint and holds the interpreter), so the caller waits for it and the file is named afterwards. At a 0.5 s budget (`evidence/l116_one_call_shapes.txt`): a 140,000-byte EJS file of `<% x` lines held its caller 30.90 s (`_EJS_SCRIPTLET_RE.finditer`), a 149,996-byte Astro file of `<!-- x` lines 11.16 s (the comment mask's `sub`), a 150,000-byte dbt `.sql` of `{% x` lines 23.63 s (`JINJA_PATTERN.sub`). The same on 1.108.329 (30.62, 11.21, 23.76 s). With the budget off the time about quadruples per doubling of the file: EJS 0.38, 1.47 and 6.50 s at 15, 30 and 60 KB, Astro 0.13, 0.54 and 2.01 s, dbt 0.29, 1.12 and 4.20 s (the same file's GROWTH lines). 61 `for` statements in the six parse-path modules iterate a `finditer`, `findall`, `split` or `splitlines` call, 57 of them in `extractor.py` (`evidence/l116_regex_iterables.txt`); each such call runs before its loop's checkpoint. Not run: which of those patterns can backtrack; any size above 150 KB. | `src/jcodemunch_mcp/parser/extractor.py` (`_parse_ejs_symbols`, the Astro comment mask); `src/jcodemunch_mcp/parser/sql_preprocessor.py` (`strip_jinja`) | defect | medium | OPEN |
|
|
170
170
|
| L-119 | 2026-10-05, L-116 review round 2 | A Racket file with 12,500 nested parentheses (25,000 bytes) raises `RecursionError` out of `parse_file`, on 1.108.329 and after L-116 (`evidence/l116_one_call_shapes.txt`, first line of each half). The reader in `racket_reader.py` recurses per nesting level. What a user sees was not traced: whether the index names the file as a parse failure or loses it. Not run: the depth at which it starts; other recursive walkers on deeply nested input in other languages. | `src/jcodemunch_mcp/parser/racket_reader.py` | defect | low | OPEN |
|
|
171
171
|
| L-120 | 2026-10-05, review of contributor PR #972 | A bare Python module name is resolved against the importer's script directory since #972 (`resolve_specifier`), and four spellings of the same dependency can still build no edge, so `find_importers` returns nothing for the target and `find_dead_code` can list it. (1) A dotted name through a directory with no `__init__.py`: `from helpers import util` beside a namespace `helpers/` (the branch is gated on a name with no dot; in a repo with no package the dotted form does resolve, through the source-root lookup). (2) A nested test directory importing a module that sits beside a `conftest.py` above it (`tests/unit/test_x.py` importing `tests/helpers.py` by bare name; pytest's rootdir insertion is not modelled). (3) A sibling that exists only as `.pyi`. (4) A real script directory kept inside a package (`pkg/tests/`, `pkg/demos/`): the follow-up commit on #972 refuses a directory with no `__init__.py` under a package at any level, because the same shape is a namespace sub-package where the edge is false (reproduced: `import openai` in `app/llms/openai/common_utils.py` resolved to an unimported `app/llms/openai/openai.py`, and `find_dead_code` then listed no dead file). The reviewer counted the branch's firings in the site-packages of this box's `C:\Program Files\Python310` (37,971 `.py`/`.pyi` files): 112 unguarded, 100 with the standard-library refusal, 47 with a refusal on the parent directory alone (round 1), 39 with the any-level refusal that shipped (round 2). Round 2 classed the 53 that the parent-only refusal drops as 39 plausible script edges and 14 names that are also an installed distribution, and the 8 more that the any-level refusal drops as one self-edge and 7 plausible script edges (`onnx/test/version_converter`, `pythonwin/pywin/Demos/app` and `ocx`). The standard-library refusal reads the SERVER's interpreter, so `distutils` is refused on 3.10 and not on 3.12. Also unmodelled: `-m` from the root, `PYTHONPATH`, and a standard-library name a script directory really does shadow. Not run: any corpus but that site-packages tree and this repo (58 new edges, all kept by both refusals). The counts are the review's probe output, not a file under `evidence/`. | `src/jcodemunch_mcp/parser/imports.py` (`resolve_specifier`) | gap | low | OPEN |
|
|
@@ -173,3 +173,10 @@ with jjg's reason. Keep the row. To promote a row to an issue, set Status to
|
|
|
173
173
|
| L-122 | 2026-10-06, review of the #522 fix | `embed_repo` without `force` embeds only symbols that have no vector, keyed by symbol id, so a symbol whose body changed keeps the vector of its old body and a symbol that no longer exists keeps its row: no caller of `EmbeddingStore.delete_many` exists in `src/`. This was already so after an incremental re-index. After a full re-index it was hidden until #522's fix, because the full save erased the `embed_task_type` row and the `task_type` gate (#523) then re-embedded everything. Reviewer's probe (mocked provider): add one file, delete one, rewrite one body, full re-index, `embed_repo` with the same model: 5 symbols embedded and no orphan before the fix, 1 embedded, one orphan row and one stale vector after it, the same as the incremental path gives on both trees. `force=true` rebuilds. Not run: how similarity ranking moves with stale vectors on a real corpus. | `src/jcodemunch_mcp/tools/embed_repo.py`; `src/jcodemunch_mcp/storage/embedding_store.py` | defect | low | OPEN |
|
|
174
174
|
| L-123 | 2026-10-06, CI on PR #980 | `tests/test_v1_108_225.py::TestCachedFreshnessIsRevalidated::test_a_revalidated_hit_does_not_corrupt_later_hits` failed once on `full: test (windows-latest, 3.11)` (run 37464102292, 1 failed of 14812, `a revalidated hit must be reproducible, not a one-shot correction`) and passed when that job was re-run with no change. The other seven matrix jobs of the same run passed, and the test passed in all five local full-tier runs of that branch that day. PR #980 changes which `meta` rows a full save deletes and touches nothing the test exercises (a commit, then two cached `search_symbols` reads of row freshness). The job log shows `assert 'fresh' != 'fresh'` under the failure: the assertion is `first_hit == second_hit != "fresh"`, so the two cached reads AGREED and both said `fresh` after the commit. The hits were reproducible; what failed is that neither read saw the commit, which points at freshness detection after `_commit_edit` (the index's stored HEAD against git's, or a cached HEAD read) and away from the cache write-through the test is named for. Cause not established beyond that. Not run: the test in a loop on a Windows runner. | `tests/test_v1_108_225.py` | flake | low | OPEN |
|
|
175
175
|
| L-124 | 2026-10-06, L-115 fix | In a Vue or Svelte `<script>`, the docstring taken from a `/* block comment */` above a declaration keeps the closing delimiter: `/* block comment */` is served as `block comment */`. `_preceding_comment` strips leading `/` and `*` and never the trailing `*/`. Pinned as it is by `tests/test_vue_svelte_comment_lookup_is_linear.py` so that L-115's fix moved no docstring. A fix changes stored docstrings on unchanged files and needs a `PARSER_GENERATION` bump. The review ran three more: a JSDoc block keeps its inner ` * ` lines and the closing `*/`; `/**/` and `/***/` give the docstring `/`. All the same on 1.108.330. Not run: the same lookup in Astro. | `src/jcodemunch_mcp/parser/extractor.py` (`_preceding_comment` in `_parse_vue_symbols` and `_parse_svelte_symbols`) | defect | low | OPEN |
|
|
176
|
+
| L-125 | 2026-10-06, CI on PR #984 | `tests/test_parse_budget_cancels.py::test_a_first_index_leaves_no_thread_behind` failed once on `full: test (windows-latest, 3.13)` (run 37517459287) and passed when that job was re-run with no change. PR #984 changes one package block of `uv.lock` and no code. The failing assertion is `result.get("symbol_count", 0) >= 2`, and the count read 1. The test indexes two files under a short real-time parse budget, one of them large, so a slow runner that spends the budget on the large file leaves one symbol: that reading fits the count and is not confirmed from the log. Second timing-sensitive test to fail once on a Windows runner that day (L-123 is the first). Not run: the test in a loop on a Windows runner. Second occurrence, 2026-10-07, PR #985: `full: test (ubuntu-latest, 3.10)` (run 37623527802), the same assertion (`assert (True is True and 1 >= 2)`, 1 failed of 14832), passed when that job was re-run with no change; the other seven matrix jobs passed. So it is not a Windows-runner effect. | `tests/test_parse_budget_cancels.py` | flake | low | OPEN |
|
|
177
|
+
| L-126 | 2026-10-06, L-117 fix | A dbt macro (or a Jinja `macro`/`block`) that follows a `{# comment #}` is given the FIRST `{# ... #}` of the file as its docstring, whichever comment it follows. The lookup searches the text before the directive from the start of the file and takes the first match; it checks only that the text ends with `#}`. `evidence/l126_first_comment.txt` on `main`: `{# about first #}` above `first`, `{# about second #}` above `second` gives `second` the docstring `about first`. A macro under `--` lines is right. The L-117 fix keeps this as it was, so it moves no symbol field; fixing it changes docstrings on unchanged files and owes a `PARSER_GENERATION` bump. Not run: how many macros in a real dbt project sit under a second or later Jinja comment. | `src/jcodemunch_mcp/parser/sql_preprocessor.py` (`_PrecedingComments`) | defect | high | FIXED 2026-10-07 (`fix/l126-macro-docstring-comment`). `_PrecedingComments` lists the file's comments once, left to right, and a directive takes the one that ENDS where the text before it ends; a `#}` that closes no comment falls through to the `--` lines. `evidence/l126_before_after.txt`, `parse_file`, `main` then the fix: `second` read `about first` and reads `about second`; a `.j2` `button` read `renders a field` and reads `renders a button`. `PARSER_GENERATION` 10: the docstring moves on unchanged content. Guard: `tests/test_a_macro_docstring_is_the_comment_above_it.py`; the L-117 oracle test holds every field but the docstring to the old loop and the docstring to the rule. Review round 1: the dashes of `{#- ... -#}` were served as part of the docstring (`- about m -`, the same on `main` for a file's first comment); they are dropped, in the same generation, with Jinja's `+` and Twig's `~` (review round 2), one mark per side. What the rule still gets wrong: L-129, L-130, L-131. Not run: a dbt or Jinja corpus. |
|
|
178
|
+
| L-127 | 2026-10-06, L-117 fix | Three shapes on the paths L-117 fixed are still superlinear; each time about quadruples when the file doubles, the same on `main` and after the fix (`evidence/l117_before_after.txt`, the residue lines, budget off). (1) Razor `@code {` blocks nested in each other: every block's body is parsed as C#, and an outer body holds the inner ones, so 150 nested blocks took 0.458 s and 300 took 1.846 s. Not valid Razor; a real file has one or two blocks. (2) The directive regex (`_directive_pattern`) on an unclosed `{% macro m(`: each one reads on for its `)`, so 2000 such lines took 0.681 s and 4000 took 2.577 s. One regex call, so the budget cannot stop it part-way: the L-118 class, and not in L-118's list. (3) A directive on a `--` line takes every `--` line above it as its docstring, so N macros each on its own `--` line produce docstrings that total N * N: 500 took 0.124 s and 1000 took 0.432 s. The output is that size by its own definition. | `src/jcodemunch_mcp/parser/extractor.py` (`_parse_razor_symbols`); `src/jcodemunch_mcp/parser/sql_preprocessor.py` (`_directive_pattern`, `_PrecedingComments.before`) | defect | low | OPEN |
|
|
179
|
+
| L-128 | 2026-10-07, L-117 review round 3 | The count instruments of `tests/test_parse_path_loops_are_linear.py` wrap the spellings the old loops used and nothing else, so a per-item rescan in another spelling passes all 35 tests. The reviewer put five back into a copy of the fix and each stayed green: `text.rfind(...)`, `x in text`, `text.partition(...)` and a slice of the undecoded bytes per directive, and `list(callable_syms)` per call (one line event, however long the list). None of the five has been in the tree. A list membership test per call is seen by the wall-clock race alone. The durable form is a counted `str` that fails on any method it does not list. Also `monkeypatch.undo()` inside the two counting helpers undoes the autouse `_every_language_enabled` patch for the rest of that test; no caller parses a file after a helper today. | `tests/test_parse_path_loops_are_linear.py` (`_characters_read_by_the_directive_loop`, `_line_events`, `_characters_searched`) | test | low | OPEN |
|
|
180
|
+
| L-129 | 2026-10-07, L-126 review round 1 | A Jinja comment that trails code on its own line is taken as the docstring of the directive on the NEXT line: `{% macro a() %}x{% endmacro %} {# end of a #}` then `{% macro b() %}` gives `b` the docstring `end of a`. The `--` branch requires a comment line to start with `--`; the Jinja branch asks only that the comment END where the text before the directive ends. The same on `main` when that comment is the file's first. `tests/test_a_macro_docstring_is_the_comment_above_it.py` pins the same-line reading (`{# a #} x {# b #}` gives `b`), so a fix inverts that case. ⚠ A fix moves stored docstrings on unchanged content and owes its own `PARSER_GENERATION` bump. | `src/jcodemunch_mcp/parser/sql_preprocessor.py` (`_PrecedingComments.before`) | defect | low | OPEN |
|
|
181
|
+
| L-130 | 2026-10-07, L-126 review round 1 | The comment table of `_PrecedingComments` reads `{#` wherever it stands, an expression or a string included: `{% macro first() %}{{ '{#' }}{% endmacro %}`, then `{# about second #}`, then `{% macro second() %}` gives `second` the docstring `' }}{% endmacro %}` + newline + `{# about second` (code in a docstring). `main` gave `about first`: wrong before, wrong differently now. Jinja's own lexer reads `{{ ... }}`, `{% ... %}` and `{# ... #}` left to right, so a `{#` inside an expression opens no comment; `JINJA_PATTERN` in the same module already lexes that way. ⚠ A fix owes its own `PARSER_GENERATION` bump. | `src/jcodemunch_mcp/parser/sql_preprocessor.py` (`_PrecedingComments.__init__`) | defect | low | OPEN |
|
|
182
|
+
| L-131 | 2026-10-07, L-126 review round 3 | The whitespace-control marks dropped from a Jinja comment's ends are the same three for every dialect (`-`, `+`, `~`), and `~` is a mark in Twig only, `+` in Jinja only. A comment whose text starts or ends flush against the delimiter with the other dialect's mark loses that character: in a `.sql`, `{#~approx 5 rows#}` reads `approx 5 rows`; a Twig `{#+1 to the offset #}` reads `1 to the offset`. One punctuation character, and only with no space beside the delimiter (`{# ~approx #}` is untouched). The exact form passes the dialect's marks in beside `directive_keywords`. ⚠ A fix owes its own `PARSER_GENERATION` bump. | `src/jcodemunch_mcp/parser/sql_preprocessor.py` (`_WHITESPACE_CONTROL_MARKS`, `_PrecedingComments.before`) | defect | low | OPEN |
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
"name": "io.github.jgravelle/jcodemunch-mcp",
|
|
4
4
|
"title": "jCodemunch MCP",
|
|
5
5
|
"description": "Token-efficient code exploration via tree-sitter AST parsing. 70+ languages, 86-99% token savings.",
|
|
6
|
-
"version": "1.108.
|
|
6
|
+
"version": "1.108.332",
|
|
7
7
|
"packages": [
|
|
8
8
|
{
|
|
9
9
|
"registryType": "pypi",
|
|
10
10
|
"identifier": "jcodemunch-mcp",
|
|
11
|
-
"version": "1.108.
|
|
11
|
+
"version": "1.108.332",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
}
|