Roadmap
Phase 1 - Core & MVP symbols [COMPLETE]
Goals:
- Parser lifecycle implementation for all initial languages: Python, JavaScript, TypeScript, TSX, C, C++, Rust, Go.
- Symbol extraction and normalized IR.
- Structured JSON/YAML output (
funcs,classes,objects).
Exit gates:
- All target languages parse on fixtures.
- Stable JSON output for representative projects.
- Contract tests for required keys pass.
Phase 2 - Dependency graph & SCC [COMPLETE]
Goals:
- Build directed dependency/reference graph.
- Compute SCCs and annotate Deployment Units (independent vs. co-deployment required).
Exit gates:
- SCC results match fixture expectations.
- Cross-file dependency mapping validated on mixed-language samples.
- ReferenceEdges appear in graph output with confidence scores in cross-file resolution tests.
Phase 3 - Datagraph & optional sink [COMPLETE]
Goals:
- Extend model with optional data/flow nodes (DataNode, FlowEdge, DataScope, FlowKind).
- Implement intra-procedural def-use extraction for Rust (let bindings, parameters).
- Provide portable graph export contract with schema versioning (v1).
- Pluggable sink adapters (GraphSink trait + JsonSink).
- CLI integration:
--datagraphflag on graph subcommand. - Unified GraphOutput serialization (replaces separate datagraph module).
Exit gates:
- Export format validated via integration tests (JSON roundtrip, field checks).
- Snapshot/version semantics documented and tested (SCHEMA_VERSION = 2).
- End-to-end pipeline extracts data nodes from real Rust fixtures.
- Flow edges created for def-use chains (param→usage, let→let shadowing).
Phase 4 - CLI polish, output formats, visualization [COMPLETE]
Goals:
- Structured output (JSON + YAML) with
--formatflag. - Interactive HTML dashboard with Cytoscape.js via
--htmlflag. - Watch mode and incremental-update strategy.
- C ABI scaffolding and header generation (scoped out, see below).
Exit gates:
DONE--format json|yamlworks for analysis output.DONE--htmlgenerates a dashboard with SCC/Deployment Unit coloring, auto-opens in browser.Watch-mode stability tests pass.DONEIncremental performance target evidence captured.DONE- C ABI smoke tests. DROPPED - issue #21 closed NOT_PLANNED; the C ABI interface was proposed in RFC 0011 but not implemented. The exit gate is removed from scope and tracked as post-GSoC future work in issue #63.
Phase 5 - MetaCall Deploy Manifests [COMPLETE]
Requires --features metacall-deploy. Full documentation in DEPLOY.md.
Goals:
- Implement cross-language call-site detection across all 9 supported language ports
(
metacall_load_from_file,metacall_load_from_memory,metacall_load_from_package,metacall_load_from_configuration), including CommonJSrequire()for JS/TS and bare-name call detection for Rust afteruseimport. - Partition files into same-language pods via Union-Find over dependency edges.
- Resolve external dependencies per-language from lockfiles (preferred for exact version pinning) and package manifests (fallback).
- Generate pod manifest (
metacall.pods.json) with per-pod deployments, inter-pod edges with fused confidence scores, and scoped dependency lists. - Emit mesh annotation (
metacall.mesh.json) from SCC deployment unit analysis, classifying independent Function Mesh candidates vs. co-deployment-required groups with cross-language call-site attribution. - Implement
--checkvalidation mode: fairness check ensuring every cut edge has a corresponding RPC stub entry in the manifest (bijection check, ADR 0003 pattern).
Exit gates:
- Pod manifests generated match expected fixtures for all projects in
tests/fixtures/mixed/. DONE - Mesh annotation correctly classifies deployment units for
auth-function-meshfixture with call-site attribution. DONE --checkdetects missing RPC stubs for cut edges and reports structured diagnostics. DONE- Dynamic call-site arguments emit low-confidence annotation rather than hard failure. DONE
- External dependency resolution identifies
jsonwebtokenfrompackage.json/lockfile in theauth-function-meshfixture with exact version pinning. DONE
Phase 6 - Language expansion [COMPLETE]
Goals:
- Extend language support beyond the initial 8, prioritizing C# and Java.
- Each new language requires: grammar crate, query pack (symbols + imports + references), import resolver, visibility rules, and fixture tests.
- Cross-language Call Site detection extended to new language ports as they ship.
Outcome:
- Ruby shipped end to end: grammar, query pack, resolver, visibility rules,
fixtures, snapshots, and
metacall-deploycall-site and lockfile coverage. - C# (issue #23) and Java (issue #24) were evaluated and closed NOT_PLANNED. Ruby was the third language added, bringing the catalog to nine.
Exit gates:
- New language parses on fixtures. DONE (Ruby)
- New language pack passes extraction and cross-file dependency tests. DONE
metacall-deployfeature detects call sites in the new port bindings. DONE
Phase 7 - Validation and delivery [COMPLETE]
Goals:
- CI/CD hardening.
- Documentation completion.
- Benchmark and portability evidence.
Exit gates:
- Green CI matrix on Linux/macOS/Windows. DONE
- Benchmarks and docs published. DONE - see BENCHMARKS.md and the mdbook site (GitHub Pages).
- Candidate demo narrative aligns with delivered artifacts. DONE - see DEMO.md.
- Release artifacts (binaries, crates) published and verified. DONE - v0.5.0 on GitHub Releases (7 targets x core + deploy binaries) and crates.io.
- Release announcement drafted and scheduled. DONE - v0.5.0 release notes and the Final Report.
Phase 8 - Polyglot LSP Server & Shard Indexing (metacall/lsp) [IN PROGRESS]
Goals:
- Implement Phase 0 engine prerequisites: symbol coordinates (
source_range,file_path), in-memory buffer extraction seam (extract_text_with_id_gen), and modular.metastv2 shard and index persistence (ShardFile,ShardEdge,ShardManifestRecord,ShardHeader). - Implement dynamic cache invalidation across all import resolvers (
clear_cache). - Enable downstream
metacall/lspdevelopment for single-language and polyglot navigation:- Phase 8a: Synchronous language server (goto-definition, hover, diagnostics).
- Phase 8b: Cross-language jump-to-definition and reference resolution over
metacall()boundaries. - Phase 8c: Signature enrichment and cross-language stub generation.
Exit gates:
- Phase 0 engine seams implemented, tested, and schema version bumped to 2. DONE
.metastv2 modular shards, headers, and manifest files persist and restore graph topology. DONE- Resolver cache invalidation handles dynamic configuration updates. DONE
metacall/lsplanguage server crate operational againstmeta-astcore library.
Phase 9 - Engine Refactoring & Graph Reuse [PLANNED]
Goals:
- Zero-allocation resolver dispatch: replace
Box<dyn ImportResolver>trait objects with an enum dispatch model (Resolver) to eliminate heap allocation during pipeline runs (issue #41). - Language module deduplication: introduce declarative macros (
define_language_pack!) to eliminate repetitive spec and query boilerplate across language packs (issue #39). - Deploy pipeline modularization: extract
DeployOrchestratorstruct fromrun_deployfor single-responsibility and independent step reuse by downstream tools (issue #40). - Reusable graph visitor interfaces over
CodeGraphfor custom static analysis passes.
Exit gates:
- Zero heap allocations during per-file import resolution dispatch.
- Language pack boilerplate reduced across Python, Ruby, C, C++, Rust, Go, JS, TS, and TSX.
DeployOrchestratorexposes individual pipeline stages (scan, partition, cuts, manifests, mesh).
Phase 10 - Polyglot Security & Taint Flow Analysis (SAST) [PLANNED]
Goals:
- Deliver cross-language taint-flow analysis across MetaCall FFI boundaries (issue #29,
metacall/polyglot-sast). - Detect untrusted inputs in one language reaching dangerous execution sinks in another language.
- Classify findings into Common Weakness Enumeration (CWE) categories.
- Output native SARIF (v2.1.0) reports for GitHub/GitLab Security tab integration.
- Integrate with MetaSSR as deployment-blocking middleware and dashboard visualization.
Exit gates:
- Cross-language taint flow correctly traces from Python/JS inputs into C/Rust sinks.
- Deterministic rule-based engine emits valid SARIF v2.1.0 reports.
- MetaSSR deploy middleware blocks deployments with critical security findings.
Phase 11 - Developer Ecosystem & Community Tooling [IN PROGRESS]
Goals:
- Cross-platform distribution scripts: Unix
scripts/install.sh(issue #46) and Windowsscripts/install.ps1. - Property-based testing with
proptestfor Tarjan SCC, cycle detection, and edge normalization invariants (issue #48). - Streamline contributor experience: curated “Good First Issues” with detailed task guides.
- CLI output ergonomics: JSON error reporting and enhanced diagnostic formatting (issue #47).
Exit gates:
- Verified curl/PowerShell installation scripts published for all release artifacts.
proptestsuites validating graph normalization and SCC determinism.- Active contributor onboarding through structured issue templates.
Phase 12 - Deep Expression AST & Full Syntax Trees [PLANNED]
Goals:
- Extend
meta-astbeyond coarse symbol-level IR into fine-grained expression syntax trees and intra-procedural Control Flow Graphs (CFG). - Extract statement nodes, binary operations, control flow branches, and expression terms across all 9 supported languages.
- Maintain a layered representation:
- Layer 1 (Default): Fast, lightweight symbol & reference graph.
- Layer 2 (Opt-in): Full expression-level AST with lexical scopes and operator nodes.
- Generate intra-procedural CFGs for abstract interpretation, dead branch elimination, and fine-grained taint propagation.
Exit gates:
- Full expression AST extractable via
--depth fullorextract_full_ast. - Control Flow Graph (CFG) generated with branch conditions and join nodes.
- Zero performance regression on default symbol-only extraction passes.
Phase 13 - Polyglot Code Transformation & Refactoring Engine [PLANNED]
Goals:
- Evolve
meta-astfrom a read-only static analyzer into a bidirectional polyglot code transformation and refactoring engine. - Implement lossless Concrete Syntax Tree (CST) rewriting, preserving whitespace, formatting, and comments.
- Deliver cross-language atomic symbol renaming:
- Renaming a function or method in C, C++, or Rust automatically rewrites and updates all cross-language caller sites in Python, JavaScript, and Ruby.
- Implement automated polyglot code migrations, AST rewrite recipes, and FFI/RPC stub generation
(
meta-ast refactor,meta-ast codegen). - Provide programmatic transformation APIs for language migration tools and automated refactorings.
Exit gates:
- Lossless round-trip source rewriting verified across all 9 languages without formatting loss.
- Cross-language atomic symbol renaming verified on mixed Python/JS/Rust/C fixture codebases.
- Automated refactoring CLI (
meta-ast refactor) and FFI stub generator (meta-ast codegen).
Strategic Architecture Evolution
meta-ast follows a phased strategic evolution from lightweight symbol graph to a full polyglot
transformation engine:
- Current Foundation (Phases 1-11):
- High-speed, read-only static analysis and symbol-level IR.
- Cross-language dependency graph, import resolution, and Tarjan SCC cycle detection.
- Language Server (LSP) seams, shard index persistence (
.metastv2), and security analysis (SAST).
- Deep Syntax Expansion (Phase 12):
- Full expression-level syntax trees and Control Flow Graphs (CFG) layered over the symbol graph.
- Bidirectional Transformation (Phase 13):
- Lossless CST source rewriting, cross-language atomic refactoring, and automated code generation.
Scope boundaries
- Core priority: general-purpose symbol extraction, cross-language dependency graph, cycle detection, shard persistence, zero-cost abstractions.
- Tooling priority: Polyglot LSP server (
metacall/lsp), IDE integration, general-purpose CI gates. - Evolution priority: Full expression AST (Phase 12), Polyglot code transformation & refactoring (Phase 13), SAST security analysis (
metacall/polyglot-sast).