Skip to content

v1.0.0 — API Stability Milestone

Released: 2026-04-14

The API stability milestone. All 21 MCP tool signatures, 11 CLI commands, and the plugin YAML schema are now frozen. Breaking changes require a major version bump. This page also covers the full v0.x development history leading up to this release.


  • docs/api-reference.md — complete API reference for all 21 MCP tools and 11 CLI commands, including full parameter types, the plugin YAML schema, and stability guarantees
  • Stable API guarantee — MCP tool signatures, CLI flags, and plugin YAML schema are now stable. Breaking changes require a major version bump (v2.0.0).
  • Workspace version bumped from 0.5.5 to 1.0.0
  • resolve_repo in forge-cli returned a bare OS error when given a nonexistent path. Now names the offending path and suggests the corrective forge index <path> command.

v0.5.x — Phase 5: Integration, Quality, and Distribution

Section titled “v0.5.x — Phase 5: Integration, Quality, and Distribution”

Added: CHANGELOG.md (this file) and LICENSE (Apache-2.0 with Ironpine Labs copyright).

Added: forge-mcp/src/tools/util.rs — path normalization utilities shared across all tool handlers. Repository path threading through MCP dispatch so all tools resolve paths relative to the indexed repo.

Fixed: forge map workspace grouping broken when paths had a ./ prefix; forge serve required an explicit path argument — made optional with current-directory fallback.

Fixed: MCP tool dispatch not protected against panics. Added catch_unwind around each tool call so a panic in any handler returns a structured JSON-RPC error instead of crashing the server.

Added: Rust language support in structural pattern search (forge_pattern_search and forge pattern CLI). tree-sitter-rust grammar registered with full node-type mapping: function_item, struct_item, impl_item, trait_item, enum_item, type_alias, const_item, static_item, use_declaration.

Fixed:

  • forge health and forge_health_check returned only a summary count — health runner now returns individual findings alongside the summary, printed grouped by severity
  • forge health exited with code 1 on warnings-only results — corrected: exit 0 for warnings/info, exit 1 only for errors or critical findings

Fixed: Rust import resolution — 0 of 83 internal use declarations resolved before this fix.

Root causes: JS-centric is_external() called instead of the extractor’s import.is_external field; resolve_rust never invoked; strip_rust_use_suffix helper missing; super:: base directory computed from wrong ancestor; no symbol-level fallback; path format mismatch between resolver output and database records.

Fix: language-aware import dispatch in the incremental indexer; complete rewrite of resolve_rust with three new helpers; multi-format DB path lookup (exact, ./-prefixed, bare relative, suffix match). Result: 83/83 internal imports resolve correctly.

Fixed: MCP tool handlers used relative file paths that did not resolve when the server’s working directory differed from the indexed repository root. All tool handlers now normalize paths against the repo root before querying the database.

Fixed: Full re-index (forge index --full) did not clear the Tantivy full-text search index, causing duplicate chunks to accumulate across repeated full rebuilds. Tantivy directory is now wiped at the start of a full rebuild.

Changed: forge-cli --version now reflects the workspace version correctly.

Internal: Phase 1 code quality sweep — 55 clippy warnings resolved (28 auto-fixed, 27 manually), zero unwrap() calls in production source paths, 9 stale TODO/FIXME comments removed. Dead code removed: forge-core/src/indexer/full.rs and forge-core/src/indexer/incremental.rs (Phase 1 stubs superseded by forge-indexer). 184 tests passing.

Changed: Workspace version bumped to 0.5.5 to reflect integration of all five build phases. MCP server instructions updated: replaced em-dashes with ASCII for compatibility with all MCP clients.

Internal: Integration merge of Phase 2 (SCIP + coverage), Phase 3 (search), and Phase 4 (git + multi-language) onto forge/phase-5. 166 tests passing across 10 crates, 20,613 lines of Rust.

Added: .mcp.json registration for Forge as an MCP server (replaces legacy pith-codebase TypeScript server). CLAUDE.md updated: Forge pre-execution gate replaces verify-wiring.ts and manual MCP queries.

Added: examples/pith-plugins/ — four YAML plugin files demonstrating the plugin system applied to a real monorepo: critical-files.yaml (34-file high-risk watchlist), asset-counts.yaml (asset directory coverage checks), startup-wiring.yaml (entry-point reachability checks).

Added: build.sh (cross-compilation for Linux x86-64, Linux ARM64, macOS), .cargo/config.toml (linker settings), Dockerfile (multi-stage: rust:slim builder + debian:bookworm-slim runtime), docker-compose.yml (containerized forge serve).

Fixed: File watcher and git blame error handling — replaced panicking paths with structured errors and graceful degradation.

Added: Plugin system (forge-health/src/plugins.rs, 972 lines) — extend health checks with project-specific rules defined in .forge/plugins/*.yaml.

Plugin YAML schema: id, name, description, severity (info/warning/error/critical), pattern (ast-grep), language, include/exclude glob lists.

Plugins discovered automatically on every forge health run and forge_health_check MCP call. 18 new tests. Full README (525 lines) with CLI reference, MCP tool catalog, plugin guide, architecture overview, supported language matrix, and quick-start instructions.


v0.4.x — Phase 4: Git History + Multi-Language

Section titled “v0.4.x — Phase 4: Git History + Multi-Language”

Added: forge serve --watch — background file-system watcher triggers incremental re-index on file save. forge index --with-git and forge ingest-git CLI commands wired to forge-git.

Added: Go language extractor (forge-ast/src/extractors/go.rs, 532 lines) — functions, types, structs, interfaces, methods; import blocks; exported identifiers (capitalized names).

Added: Rust language extractor (560 lines) — functions, structs, enums, traits, impls, type aliases, constants; use declarations; pub items. Python extractor (518 lines) — functions, classes, decorators; import and from ... import statements.

Added: forge_git_history and forge_git_blame MCP tools. forge git-blame <file> CLI command. Git hotspot analysis in forge_prepare — surfaces recently modified files and high-churn paths.

Added: forge-git crate (1,059 lines) — pure-Rust git history and blame ingestion via gix. GitIngester walks commit history and stores commits and per-file change records in SQLite. BlameReader handles per-file line-range blame queries.


Added: forge-search crate (2,398 lines):

  • Tantivy-powered full-text index with camelCase/snake_case tokenization — searching “payment” finds processPayment, payment_handler, PaymentService
  • forge_search MCP tool (keyword search with language and chunk-type filters)
  • forge_search_symbols MCP tool (symbol name search)
  • forge_pattern_search MCP tool (structural pattern search with $VAR and $$$SPREAD wildcards)
  • forge search and forge pattern CLI commands
  • forge index --with-search flag

Added: Coverage data integrated into forge_prepare and forge_understand — test state of every symbol shown in the pre-modification report. forge_coverage extended to support per-symbol queries by symbol name.

Added: forge ingest-coverage CLI — auto-detects LCOV, Istanbul JSON, or Cobertura XML by file extension. Coverage-to-symbol cross-reference joins coverage line ranges to symbol definitions in SQLite.

Added: Coverage ingestion for three formats: LCOV (.lcov, .info), Istanbul JSON (.json), Cobertura XML (.xml). forge_coverage MCP tool — repo-wide summary sorted by lowest coverage, or per-file detail.

Added: forge-ingest crate (1,884 lines) — SCIP index ingestion via prost protobuf parser. Upgrades heuristic import edges to compiler-resolved edges. forge_ingest_scip MCP tool.


v0.1.x — Phase 1: Core + Indexing + Graph

Section titled “v0.1.x — Phase 1: Core + Indexing + Graph”

Added: forge_prepare, forge_validate, and forge_understand workflow MCP tools. MCP server instructions injected at initialize handshake — agents receive behavioral rules automatically.

Added: forge_health_check and forge_architecture_map MCP tools. forge health and forge map CLI commands. Secret scanning health check.

Added: forge_trace_imports, forge_trace_dependents, forge_check_wiring, forge_find_cycles, forge_dependency_graph MCP tools.

Added: forge_parse_file, forge_extract_symbol, forge_index_status, forge_reindex MCP tools. forge status CLI command.

Added: forge-graph crate — dependency graph queries (import tracing, cycle detection, dead-code identification, entry-point reachability). forge-health crate — health check runner with built-in checks for broken imports, dead exports, circular dependencies.

Added: forge-indexer crate — full and incremental indexing using forge-ast and forge-core. forge serve MCP stdio server (JSON-RPC 2.0 over stdin/stdout) with 21 tool stubs. forge index <path> CLI command.

Initial release. Cargo workspace with 7 crates: forge-core, forge-ast, forge-indexer, forge-graph, forge-health, forge-mcp, forge-cli.

  • forge-core: SQLite storage layer (rusqlite), repository configuration, file discovery. Schema: files, symbols, imports, health_findings, chunks tables. Config layering: built-in defaults → ~/.forge/config.toml (global) → <repo>/.forge/config.toml (per-repo), last-wins.
  • forge-ast: tree-sitter AST parsing for TypeScript and JavaScript. TypeScript extractor: functions, classes, interfaces, types, enums, variables; ES module imports/exports. JavaScript extractor: functions, classes, variables; ES module and CommonJS require imports. Import resolver with tsconfig.json path mapping support.
  • forge-cli: clap-based CLI skeleton with index and serve subcommand stubs.