Skip to content

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 02 Jul 15:47
v0.14.0
daf8c63

Added

  • MCP tools advertise readOnlyHint / openWorldHint: false; session_start / session_end set readOnlyHint: false.
  • --lock-wait <secs> on codesage index and git-index; installed hooks pass --lock-wait 60. Rerun codesage install-hooks to refresh existing hooks.
  • found boolean on export_context, feature_bundle, and find_coupling results.
  • Migration runner refuses to open an index carrying an unknown breaking_-prefixed migration.

Changed

  • Parser captures Rust grouped/glob/renamed use, PHP group-use, and Python relative imports as import edges; import-cycle detection, assess_risk, and trust boundaries now see them.
  • Parser captures TypeScript abstract classes, JS/TS generators and top-level var, JS/TS re-exports / extends / new, Rust trait method signatures, Go package-level var, C double-pointer returns, and Java enum constants.
  • assess_risk / codesage risk give structure-aware cycle-breaking guidance (ring: lowest-weight break edge; hub: top decoupling targets).
  • CLI --json for find-symbol / find-references / search / similar wraps results in {"results": [...]}.
  • MCP kind / language filter params are typed enums; an unknown value errors instead of returning unfiltered results.
  • The daemon reloads .codesage/config.toml per project on change without codesage daemon stop.
  • Search: BM25-fused scores rescale onto the semantic span; reranking skipped only when fusion contributed; single English words don't take the identifier rerank weight.
  • MCP budget truncation preserves assess_risk_diff.files and records dropped entries in _meta.dropped_files.
  • codesage doctor fails a non-allowlisted model or reranker, naming CODESAGE_ALLOW_ANY_MODEL.
  • codesage export --format rejects an unknown value instead of rendering markdown.
  • codesage cleanup reports failed vec-table drops and exits non-zero when any drop fails.
  • codesage watch run resolves the project root by walking up, matching watch status / stop / start.

Fixed

  • Chunk end_line no longer counts the chunk's trailing newline, fixing symbol misattribution at chunk boundaries.
  • The filesystem watcher retains and retries reindex / removal work under index-lock contention, cancels a pending removal when a file is re-created, respawns after a panic, avoids duplicate spawns, and no longer pins pooled models against idle eviction.
  • A structural-only reindex no longer leaves a deleted file's chunks, FTS rows, or feature refs in the index; remove_file purges them.
  • Non-Linux daemon startup no longer SIGTERMs a recycled pid; siblings are validated against their own socket.
  • assess_risk / review_rehearsal flag Python os.system / os.popen / os.exec / os.spawn / pty.spawn as process-exec; <system_error> no longer tags C++ as process-exec.
  • Feature mapper: Laravel prefix()->group() inner routes inherit the prefix; # in a CMake string no longer truncates targets; Rust workspace-member bins stay out of library slices; Next.js pages-router skips _app / _document / middleware; crates monorepo members don't cross-attach sibling tests.
  • codesage overview / project_overview surface a query error instead of a false zero-risk result.
  • Drift detection classifies a commit-less repository as never-indexed, not "not a git repository".

Security

  • Embedding/reranker model names from repo config are allowlisted before download or load; CODESAGE_ALLOW_ANY_MODEL=1 overrides.
  • The leak-check pre-commit hook is opt-in via codesage install-hooks --with-leak-check, not auto-installed.
  • scripts/leak-check.sh scans staged files with non-ASCII names instead of reading them as empty.
  • codesage install writes agent MCP configs atomically (temp file + rename).
  • The release workflow passes tag values through the environment, not shell interpolation.