You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Document the 13 template-less config keys (empty the 'Other' group)
These keys lived in DEFAULTS/CONFIG_TYPES but were never added to the JSONC
config template that config_report parses for group+description, so config
--json emitted them under the 'Other' catch-all with an empty description
(surfaced by the jMunch Console's grouped config screen showing blank rows).
Added all 13 to generate_template() under proper === Section === headers with
inline comments: watch_paths/watch_extra_ignore/watch_follow_symlinks/
watch_idle_timeout/watch_log (Watcher); runtime_ingest_enabled/org_ingest_
enabled/runtime_ingest_max_body_bytes (new Runtime & Org HTTP Ingest);
license_key (new Licensing); cross_repo_default/discovery_hint (Identity &
Indexing Behavior); agent_selector (new Agent Selector); enrichment (new
Enrichment). The 'Other' group is now empty.
Metadata is parsed from the template, not the user's on-disk config, so
descriptions appear immediately on upgrade -- no config --upgrade needed. New
regression test test_no_key_falls_into_other_or_missing_description fails if a
future DEFAULTS key ships template-less. No config value behavior change.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CLAUDE.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,7 @@
1
1
# jcodemunch-mcp — Project Brief
2
2
3
3
## Current State
4
+
- **Version:** 1.108.61 — Config-template completeness. 13 keys lived in `DEFAULTS`/`CONFIG_TYPES` but were never added to the JSONC template that `config_report` parses for `group`+`description`, so `config --json` emitted them under the `Other` catch-all with an empty description (surfaced via the jMunch Console's grouped config screen showing blank rows). Added all 13 to `generate_template()` under proper `=== Section ===` headers + inline comments: `watch_paths`/`watch_extra_ignore`/`watch_follow_symlinks`/`watch_idle_timeout`/`watch_log` → **Watcher**; `runtime_ingest_enabled`/`org_ingest_enabled`/`runtime_ingest_max_body_bytes` → new **Runtime & Org HTTP Ingest**; `license_key` → new **Licensing**; `cross_repo_default`/`discovery_hint` → **Identity & Indexing Behavior**; `agent_selector` → new **Agent Selector (model routing)**; `enrichment` → new **Enrichment (LSP)**. `Other` is now empty. Metadata is parsed from the template (not the user's on-disk config) so descriptions appear immediately on upgrade — no `config --upgrade` needed. New regression test `TestConfigReportGrouping::test_no_key_falls_into_other_or_missing_description` fails if any future `DEFAULTS` key ships template-less. No config *value* behavior change. See [[project_jmunch_console]].
4
5
- **Version:** 1.108.60 — #335 (reported by @mmashwani). `config --check` treated *every* index-storage probe exception as a confirmed `storage` failure (exit 1), so a sandboxed agent shell that can read the index but can't write the index root (`PermissionError` EPERM/EACCES on the `.jcm_probe` write) reported a healthy install as broken — exactly the false-failure an agent might "repair." Fix (his suggested shape): split the probe's `except` — a `PermissionError` with `errno` ∈ {EPERM, EACCES} is **host-confirmation-needed** (`⚠ index storage writability needs host confirmation` + a "rerun outside a sandbox/restricted shell" hint, recorded in a new `host_confirmation` list), NOT a confirmed failure; any other exception (e.g. `EROFS` read-only FS) stays a confirmed `✗ index storage not writable` issue. Exit contract: confirmed `issues` → exit 1 (unchanged); host-confirmation-only (no confirmed issues) → **exit 0** so an agent client doesn't mistake a healthy install for a broken one (a new nonzero exit code would risk the same false-failure, so deliberately not introduced). `import errno` added to server.py. 4 tests `tests/test_config.py::TestServerConfigCheckStorageProbe` (writable→pass/exit0; EROFS→confirmed/exit1; EPERM→host-confirmation/no-exit; output names sandbox + rerun).
5
6
- **Version:** 1.108.59 — Decision-context surfacing in impact analysis (clean-room F-15 #2 from the trace-mcp review; see memory `project_trace_mcp_f15s`). New `tools/decision_context.py::resolve_decision_context` mines the git commit record of the focal symbol's file + impacted files for **decision-bearing commits** (revert/perf/refactor/rename/bugfix), reusing `get_symbol_provenance`'s `_run_git`/`_classify_commit`/`_extract_intent`; dedupes by SHA, ranks by category weight × recency, returns a digest + `by_category` + a `volatility` read + one-line `summary`. `get_blast_radius` and `get_impact_preview` attach it as an additive `decisions` block behind new opt-in `include_decisions` (default false; server schema + dispatch wired). **Clean-room contrast to trace-mcp:** source is the durable git record (not ephemeral agent JSONL), and it is **surface-only — nothing persisted, no decision graph written, no user file touched** (read-only charter [[feedback_jcm_read_only_charter]]); theirs writes a decision graph, ours surfaces and forgets. Bounded cost (≤8 files × ≤20 commits) → opt-in. Honest `{available:false, reason, hint}` for GitHub-indexed/non-git roots. `get_blast_radius` result-cache key now includes `include_decisions`. Flag off → byte-identical. 8 tests `tests/test_v1_108_59.py`. Tool count stays 82. **Both trace-mcp F-15s now shipped** (#1 v1.108.58 flow edges, #2 this release).
6
7
- **Version:** 1.108.58 — Framework flow-edge resolver (clean-room F-15 #1 from the trace-mcp review; see memory `project_trace_mcp_f15s`). New `tools/flow_edges.py::resolve_flow_edges` emits **typed** request-flow edges the AST call graph can't see, over the existing index (symbols + import graph + file content), and `get_signal_chains` consumes them. **route→handler**: a string-dispatched handler (Django `path()`/`re_path()`/`url()`, Express/Fastify/Koa `router.get(p, h)`, Flask `add_url_rule(view_func=)`, Rails `to: "ctrl#action"`) is referenced not called/decorated, so it left no call edge and never surfaced — the resolver detects the registration *shape*, resolves the handler ref to a symbol through the import graph, and `get_signal_chains` promotes it to an `http` gateway (repos that dispatch by string now produce chains where they returned none). Decorator-bound handlers already surface as gateways and are NOT re-emitted (no double-count). **render→view**: a handler rendering a string-named template (`render`/`render_template`/`res.render`/`view`) gets an additive per-chain `views` list, resolved to the template file when that file is indexed. **One shape-keyed resolver, not a plugin per framework** — resolution reuses the same symbol-table + import-graph machinery `find_direct_callees` uses. Pure read path: no reindex, no INDEX_VERSION bump, nothing persisted. New `get_signal_chains(include_flow_edges=True)` param (server schema + dispatch wired); `_meta.flow_edges = {route_gateways, unresolved_routes, render_views}`. Flag off OR no route/render shapes → byte-identical to prior output (the MUNCH `sc2` encoder already drops per-chain list detail like `symbols`/`files_touched`, so `views`/`flow_edges` follow the same lossy-compact contract; route-dispatch gateways still move the declared `gateway_count`/`chain_count` scalars). 10 tests `tests/test_v1_108_58.py`. **Gates the versus.php trace-mcp row** (ship ≥1 F-15 first).
0 commit comments