All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.2.1 - 2026-03-02
- Comment/string-aware pattern matching: extractors now skip patterns inside comments, strings, and doc comments across all 14 languages
- Type system coverage: C, Ruby, PHP, Swift added to Language enum with type parsers, primitives, and inhabitation edges
- Tier 2 language promotion: Swift (extensions), Kotlin (value classes, typealias), C# (delegates, IAsyncEnumerable), Ruby (visibility tracking, attr_accessor), PHP (union return types)
- Dynamic scope inhabitation: when Homer scope data is available, user-defined types generate inhabitation edges automatically
- Multi-line extractor state machines: Go grouped imports, Rust where clauses, Java annotation handling, Python multi-line signatures
- Property-based tests: parser crash safety, primitive round-trips, optional wrapping, BFS reflexivity, edge monotonicity, builtin edge validity, comment filtering, pattern determinism
- Inline tests for all 9 Tier 1 extractors (previously had zero)
- Per-language precision: Go multi-line imports, Rust Box/Arc/Rc/HashMap/dyn Trait, Java wildcard generics, TypeScript N-ary unions + utility types, C++ smart pointers
- Test count: 473 -> 512 Zig tests (+39), 144 Rust tests unchanged
0.2.0 - 2026-03-02
- Formal constraint lattice with bounded meet-semilattice properties (commutativity, associativity, idempotency, bottom propagation)
- Five constraint domains in two tiers:
- Hard tier (binary pass/fail): Syntax (Earley parser/PDA), Types (prefix automata), Imports (vocabulary subset masks)
- Soft tier (graded 0.0–1.0): ControlFlow (error handling, async patterns), Semantics (pre/postconditions, invariants)
- Cross-domain morphisms: bidirectional (Types ↔ Imports), one-way (Hard → Soft), with monotonicity guarantee
- Architectural invariant: soft constraints never block generation. Adding soft constraints cannot make a satisfiable set unsatisfiable
- Adaptive intensity levels: NONE, SYNTAX_ONLY, STANDARD, FULL_HARD, FULL, EXHAUSTIVE
- Domain shedding under latency pressure: Semantics → ControlFlow → Imports (Syntax is the floor)
src/braid/domain_fusion.zig(13 tests)
- Distribution-preserving hard domain fusion via exact intersection (~10μs/token, ~48KB memory bandwidth)
- Relaxation cascade on empty intersection: drop Imports → Types → Syntax-only → unconstrained
- Soft domain fusion via additive logit reweighting within the feasible set (not multiplicative; preserves conditional distribution shape)
- CRANE-style adaptive switching: relaxed constraints during reasoning tokens, full constraints for structured output
- Generation phase detection: reasoning, structured_output, transition
- Configurable soft weights and temperature
src/braid/domain_fusion.zig(13 tests)
- Arena-allocated cross-language type representation (TypeArena) supporting 10 languages
- Type enum: Primitive (20 variants), Array, Tuple, Object, Function, Union, Intersection, Optional, Named, Generic, Reference, ErrorUnion
- TypeParser: parses string type signatures from TypeScript, Python, Rust, Go, Java, C++, C#, Kotlin, Zig into unified representation
- InhabitationGraph: BFS reachability analysis with 9 edge kinds (Coercion, BinaryOp, Property, Method, Application, Indexing, Construction, Template, Assertion)
- Per-language builtin edge sets (TypeScript, Python, Rust, Go, Java, C++, C#, Kotlin, Zig)
- MaskGenerator: converts inhabitation analysis to token masks for constrained decoding
- TypeInhabitationState: progressive generation state tracking
src/braid/types/(24 tests) across 4 modules (type_system, parser, inhabitation, mask_generator)
- IDE-quality FIM via grammar quotienting: left-quotient by prefix, right-quotient by suffix
- FimContext with prefix, suffix, language, hole_scale, file_path, cursor position
- PrefixAnalysis: delimiter balance, string/comment state, indentation tracking
- SuffixAnalysis: leading close-delimiters, first token detection, trailing newline requirement
- HoleScale enum: expression, statement, block, function, module. Maps to constraint intensity
- CLI support:
ananke generate --fim --prefix "..." --suffix "..." --language zig src/braid/fim.zig(12 tests)
- Scope context from Homer scope graphs: cross-file name resolution, canonical imports, binding kinds (type_definition, function, variable, module, type_alias)
- Call graph context (InlineCoder-style): upstream callers (up to 3) + downstream callees (up to 5), with argument types and result usage
- Four-quadrant salience scoring (centrality × churn): FoundationalStable, ActiveHotspot, PeripheralActive, QuietLeaf
- Composite salience weights: PageRank 30%, betweenness 15%, HITS 15%, churn 15%, bus factor 10%, code size 5%, test presence 10%
- Salience-based intensity selection: FoundationalStable → FULL_HARD, ActiveHotspot → FULL, PeripheralActive → STANDARD, QuietLeaf → SYNTAX_ONLY
- Temporal analysis: stability classes (StableCore, ActiveCore, StableLeaf, ActiveLeaf), centrality trends, co-change partners (Jaccard similarity)
- Convention mining: naming, import ordering, error handling, documentation, code organization → soft-tier CLaSH constraints
- All Homer context is optional. System degrades gracefully without it
src/clew/scope_context.zig(11 tests)src/clew/call_graph_context.zig(7 tests)src/braid/salience.zig(10 tests)src/braid/temporal.zig(7 tests)src/clew/conventions.zig(5 tests)
- Kotlin: tree-sitter AST + 25 patterns
- C#: tree-sitter AST + 26 patterns
- Ruby: tree-sitter AST + 16 patterns
- PHP: tree-sitter AST + 22 patterns
- Swift: tree-sitter AST + 24 patterns (alex-pinkus fork, v0.7.1 tag)
- Total patterns across 14 languages: 383 (up from 101 across 5)
- All languages support full CLaSH domain compilation
- OpenAI-compatible HTTP endpoint with
constraint_specextension field - ConstraintSpec carries per-domain structured context: type_bindings, function_signatures, class_definitions, imports, control_flow, semantic_constraints, scope_bindings
- Backend auto-detection: sglang (if configured) → Modal (fallback)
export-speccommand: one-shot pipeline (extract + compile + rich context → ConstraintSpec JSON)- Environment variable or
.ananke.tomlconfiguration
- Multi-sample pass@k evaluation (configurable samples per task, default 5)
- Paired constrained vs. unconstrained comparison
- Statistical significance testing (paired t-test, p < 0.05)
- 24 task categories, 4 difficulty levels, 2 languages (TypeScript, Python)
- Quality scoring: correctness (60%), constraint adherence, pattern conformity, code quality, security
- Batch evaluation with aggregate statistics and effect size interpretation
eval/core/: evaluator, task_spec, quality_scorer, pass_at_k, statistical_tests
- Constraint set satisfiability checking
- Conflict detection: mutual exclusion, ordering violations, semantic conflicts
- Tightness scoring with per-kind weights and keyword modifiers
- Community-aware feasibility: Louvain community detection, cross-community architectural tension flagging
- Relaxation priority ordering (syntactic first → security last)
src/braid/feasibility.zig(7 tests)
- Parallel serialization path from tree-sitter ASTs preserving structured information
- RichContext struct: type_bindings_json, function_signatures_json, class_definitions_json, imports_json, control_flow_json, semantic_constraints_json, scope_bindings_json
- Control flow extraction: async, generator, loop depth, try/catch, error handling patterns
- Semantic constraint extraction: docstring keyword matching (requires/ensures/maintains)
- Cross-domain morphism implementation: Types ↔ Imports fixpoint loop
export-speccommand: one-shot extract + compile + context → ConstraintSpec JSON- FIM mode:
--fim --prefix --suffix --hole-scale --cursor-line --cursor-column - Backend selection:
--backend sglang|modal - Rich context:
--context <source-file>for automatic extraction - Total: 8 commands (added export-spec; help was already present)
- Test count: 301 → 617 (473 Zig + 144 Rust, 113 build steps)
- Pattern count: 101 across 5 languages → 383 across 14 languages
- Constraint compilation now includes domain fusion, type inhabitation, and FIM analysis
- Braid pipeline: graph → IR now includes feasibility check, salience scoring, temporal analysis
- Tree-sitter integration fully working (was listed as "pending" in v0.1.0 known limitations)
- tree-sitter-swift pinned to v0.7.1 tagged release (alex-pinkus fork with generated parser.c)
0.1.0 - 2025-11-24
- 101 constraint patterns across 5 languages
- TypeScript/JavaScript (30 patterns)
- Python (25 patterns)
- Rust (20 patterns)
- Go (15 patterns)
- Zig (11 patterns)
- Static syntax analysis via tree-sitter
- Optional Claude API integration for semantic analysis
- Pattern-based constraint discovery (functions, types, security, async, control flow)
- Multi-source constraint aggregation
- HTTP client with retries and timeout handling
- 50+ passing unit tests
- JSON Schema Draft 7 generation (src/braid/json_schema_builder.zig - 440 lines)
- Comprehensive type parsing and conversion
- Support for objects, arrays, unions, nested types
- llguidance-compatible output
- Topological sort and dependency graphs
- Kahn's algorithm for O(V+E) optimal dependency ordering
- DFS-based cycle detection
- Grammar building (EBNF rule generation)
- Pattern-driven rule generation for functions, async, control flow
- Syntactic constraint compilation
- Regex pattern extraction and optimization
- Multi-pattern marker support
- Case-insensitive matching with OR operator
- Security token masking
- 5 security pattern categories (credentials, URLs, file paths, SQL, code execution)
- Token-level constraint rules
- Constraint operations (merge, deduplicate, prioritize)
- 31 passing unit tests
- Production-ready Modal GPU inference service
- vLLM 0.11.0 + llguidance 0.7.11 deployment
- Working endpoint: https://<YOUR_MODAL_WORKSPACE>--ananke-inference-generate-api.modal.run
- JSON Schema constraint enforcement (V1 structured outputs)
- Context-free grammar constraints
- Regex pattern constraints
- Token mask support
- Environment-based cost controls (dev/demo/prod modes)
- Scale-to-zero architecture (cost: $4.09/hr active)
- FastAPI web interface with health check
- 805-line comprehensive documentation
- Constraint types with 6 categories (syntactic, type_safety, semantic, architectural, operational, security)
- ConstraintSource union with 11 source types
- ConstraintPriority enum (Critical, High, Medium, Low, Optional)
- Severity levels (err, warning, info, hint)
- EnforcementType with 6 strategies
- ConstraintSet with deduplication and iteration
- ConstraintIR intermediate representation
- TokenMaskRules for token-level control
- 25 passing unit tests
- Comprehensive build.zig (334+ lines)
- Zig 0.15.2+ compatibility
- Multi-platform support (Linux, macOS, Windows)
- Module system for component isolation
- Integrated benchmarking infrastructure
- WebAssembly support (experimental)
- All core tests passing
- 7 commands: extract, compile, generate, validate, init, version, help
- 4 output formats: pretty (default), json, compact, verbose
- Configuration file support
- Environment variable integration
- Streaming output support
- GitHub Actions CI/CD pipeline
- Multi-platform testing (Linux, macOS, Windows)
- Automated benchmarking
- Security auditing
- Docker containerization
- Multi-stage builds
- Production-optimized images
- Installation scripts for all platforms
- Performance benchmarking suite
- 120+ passing unit tests
- 26 integration test scenarios
- Memory leak detection (zero leaks)
- Segmentation fault elimination
- Performance benchmarking targets
- Comprehensive test strategy (1,409 lines in TEST_STRATEGY.md)
- QUICKSTART.md (12,000+ words) - Getting started guide
- ARCHITECTURE.md - System design deep dive
- API_REFERENCE_ZIG.md - Zig library API (38,600 lines)
- API_REFERENCE_RUST.md (29,400 lines) - Maze Rust API
- CLI_GUIDE.md - Command reference
- DEPLOYMENT.md - Production deployment guide
- SECURITY.md - Security guidelines
- DEVELOPMENT_HISTORY.md - Development narrative
- FFI_GUIDE.md - Cross-language integration
- FAQ.md - Common questions
- Example projects (6 working examples)
- Fixed 16 memory leaks in src/clew/clew.zig
- Changed allocPrint() to use constraintAllocator() arena
- All constraint strings now properly managed
- Result: 0 memory leaks verified after fixes
- Updated GitHub Actions workflows to setup-zig v2
- Fixed Zig 0.15.2 download compatibility
- Improved mirror support for reliable builds
- All workflows validated for YAML correctness
- ArrayList API migration for Zig 0.15.x
- Updated append() error handling
- Fixed items field access (slice vs pointer)
- Build system modularization
- Modal inference: 22.3 tokens/sec with JSON schema constraints
- llguidance overhead: ~50μs per token
- Constraint validation: <1ms (type system)
- Extraction: <100ms for typical files
- Compilation: ~10-50ms for typical constraint sets
- Cache hit latency: ~0.5-1ms
- Memory overhead: ~45MB
- Exceeded constraint validation target (50μs)
- Met extraction time target (<100ms)
- Met compilation time target (<50ms)
- Exceeded invalid output rate target (<0.1% vs 0.12% target)
- Modal GPU infrastructure (A100-80GB)
- Qwen2.5-Coder-32B-Instruct model deployment
- Environment-based configuration
- HuggingFace token integration
- Scale-to-zero architecture
- Development mode: 2-minute scaledown ($4.09/hr active)
- Demo mode: 10-minute scaledown
- Production mode: 5-minute scaledown
- Zig 0.15.2 or later
- Rust 1.70+ (for Maze)
- vLLM 0.11.0
- llguidance 0.7.11+
- PyTorch with CUDA support
- HuggingFace Transformers
- tree-sitter (vendored)
- Modal CLI (for deployment)
- Docker (optional)
- Tree-sitter integration pending upstream Zig 0.15.x compatibility
- Streaming generation: Basic implementation (full bidirectional in v0.2)
- Local GGUF model support: Planned for v0.2
- Windows CLI: Experimental (full support in v0.2)
- Multi-model orchestration: Planned for v0.2
- Web UI: Planned for v0.3
- No hardcoded credentials in source code
- Environment-based secret management
- Input validation on all API calls
- Rate limiting on inference endpoints
- HTTPS-only external API communication
- CONTRIBUTING.md with contribution guidelines
- Test requirements and standards
- Code style and formatting guidelines
- Commit message conventions
For future releases, use this template:
## [X.Y.Z] - YYYY-MM-DD
### Added
- New features and capabilities
### Changed
- Changes to existing functionality
### Deprecated
- Features marked for removal
### Removed
- Removed features
### Fixed
- Bug fixes
### Security
- Security improvements
### Performance
- Performance optimizations