Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
d98f546
docs: update installation instructions with correct commands
DamianReeves Jan 23, 2026
3d7601c
feat: add morphir launcher script with version management
DamianReeves Jan 23, 2026
17de68f
fix: add Poole theme CSS and assets
DamianReeves Jan 23, 2026
62682d8
fix: exclude .gems from yamllint checks
DamianReeves Jan 23, 2026
de7c7d3
chore: improve .gitignore coverage
DamianReeves Jan 23, 2026
a924ab6
chore: track Cargo.lock for reproducible builds
DamianReeves Jan 23, 2026
9984e34
feat: restructure docs with just-the-docs theme
DamianReeves Jan 23, 2026
6807926
chore: add sass quiet_deps and note about theme deprecation warnings
DamianReeves Jan 23, 2026
d36d972
feat: add morphir.finos.org branding and colors
DamianReeves Jan 23, 2026
45b1785
feat: enhance CLI and docs with theme toggle, release notes, and JSON…
DamianReeves Jan 24, 2026
4ccfee6
feat: add TUI pager and structured logging infrastructure
DamianReeves Jan 24, 2026
7bc4285
chore: fix formatting, lint issues, and regenerate docs
DamianReeves Jan 24, 2026
7b1b155
docs: regenerate completions with full usage spec
DamianReeves Jan 24, 2026
0636204
fix: use V4 canonical naming in IR migration output
DamianReeves Jan 24, 2026
06791ff
refactor: rename V4Name to Name for cleaner V4 API
DamianReeves Jan 24, 2026
cdbe329
refactor: make V4 canonical naming the default for Name
DamianReeves Jan 24, 2026
1a7c001
docs: update ir-migrate.md with compact V4 format examples
DamianReeves Jan 24, 2026
5721e2f
feat(ir): simplify Reference with args to array format
DamianReeves Jan 24, 2026
cd917f1
feat(ir migrate): add --expanded flag for verbose V4 output
DamianReeves Jan 24, 2026
94501e7
fix(ir): expanded Variable format now uses name key
DamianReeves Jan 24, 2026
037137a
chore: fix lint and formatting issues
DamianReeves Jan 24, 2026
ca83b58
docs: update generated documentation
DamianReeves Jan 24, 2026
4990715
chore: prepare changelog for v0.1.1 release
DamianReeves Jan 24, 2026
75e76dc
docs: update release notes
DamianReeves Jan 24, 2026
3dc7023
Complete CLI integration: builtin extensions, config merging, and doc…
DamianReeves Jan 24, 2026
d2b35c4
Fix compilation errors and apply code formatting
DamianReeves Jan 24, 2026
40af90f
Migrate to Rust 2024 edition
DamianReeves Jan 24, 2026
1deb199
Fix compilation issues and update dependencies
DamianReeves Jan 24, 2026
477503d
Fix morphir-gleam-binding compilation for chumsky 0.12
DamianReeves Jan 24, 2026
a3b07c5
Add mise code coverage tasks with per-crate thresholds
DamianReeves Jan 24, 2026
d08aad9
Fix type errors in morphir CLI crate
DamianReeves Jan 24, 2026
dbe2161
Fix test compilation errors in morphir-gleam-binding
DamianReeves Jan 24, 2026
4e52ffc
Fix clippy warnings and refactor compile command
DamianReeves Jan 24, 2026
7913410
docs: Update generated documentation
DamianReeves Jan 24, 2026
51d8fd0
feat(gleam-binding): implement roundtrip testing infrastructure
DamianReeves Jan 24, 2026
149b907
feat(gleam-binding): align tokenizer/AST with glexer/glance, add pret…
DamianReeves Jan 24, 2026
24df775
fix(gleam-binding): address clippy warnings
DamianReeves Jan 24, 2026
dbd9888
feat(gleam-binding): enhance parser with module docs, blocks, and lists
DamianReeves Jan 24, 2026
919697c
feat(gleam-binding): emit parse stage JSON to .morphir/out
DamianReeves Jan 24, 2026
3cbfc8a
fix(gleam-binding): address clippy warnings in emit_parse_stage
DamianReeves Jan 24, 2026
4a7f308
feat(gleam-binding): implement proper operator precedence parsing
DamianReeves Jan 24, 2026
211c96a
feat(scripts): add dev mode support to launcher scripts
DamianReeves Jan 24, 2026
04441c6
fix(vfs,gleam-binding): VFS consistency and V4 roundtrip serialization
DamianReeves Jan 24, 2026
999e7a9
docs: add dev mode and self command documentation
DamianReeves Jan 24, 2026
2c888ca
fix(compile): resolve source_directory relative to config file
DamianReeves Jan 24, 2026
85e50ee
docs: update generated documentation
DamianReeves Jan 24, 2026
82c80d8
feat(cli): promote compile and generate commands from experimental
DamianReeves Jan 24, 2026
5375f8d
docs: update generated documentation
DamianReeves Jan 24, 2026
7baf601
chore: bump version to 0.2.0
DamianReeves Jan 24, 2026
4c7703d
docs: update generated documentation for v0.2.0
DamianReeves Jan 24, 2026
9a7fd6c
Merge origin/main into docs/installation-instructions
DamianReeves Jan 24, 2026
54a0c39
feat(gleam-binding): add configurable fatal error mode for parse stag…
DamianReeves Jan 24, 2026
8a89b89
refactor(gleam-binding): eliminate memory duplication in compile resp…
DamianReeves Jan 24, 2026
659d2e6
fix(yaml): remove trailing spaces from feature_registry.yaml
DamianReeves Jan 24, 2026
853518c
fix(gleam-binding): improve roundtrip test and type generation
DamianReeves Jan 24, 2026
dbd8e7e
fix(gleam-binding): address clippy warnings
DamianReeves Jan 24, 2026
3d23041
fix(gleam-binding): skip CLI tests when prerequisites unavailable
DamianReeves Jan 24, 2026
1ba4f18
ci: split tests into unit and integration with binary artifact
DamianReeves Jan 24, 2026
6bb8dcc
docs: Add design documents and technical-writer skill
DamianReeves Jan 24, 2026
4359c22
ci: restructure with mise tasks, integration-tests crate, and WIP tes…
DamianReeves Jan 24, 2026
700820c
bd sync: 2026-01-24 11:35:21
DamianReeves Jan 24, 2026
70a980a
chore(beads): add parser migration and Python binding issues
DamianReeves Jan 24, 2026
d982313
chore(beads): add TypeScript binding issue
DamianReeves Jan 24, 2026
8f04ca5
chore(beads): add daemon and extension system epic
DamianReeves Jan 24, 2026
e94e3bf
ci: install rustfmt and clippy components before lint checks
DamianReeves Jan 24, 2026
0860223
style: fix formatting in integration-tests cli.rs
DamianReeves Jan 24, 2026
e652c35
ci: add concurrency guards to cancel in-progress runs
DamianReeves Jan 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions .beads/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Beads - AI-Native Issue Tracking

Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code.

## What is Beads?

Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.

**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)

## Quick Start

### Essential Commands

```bash
# Create new issues
bd create "Add user authentication"

# View all issues
bd list

# View issue details
bd show <issue-id>

# Update issue status
bd update <issue-id> --status in_progress
bd update <issue-id> --status done

# Sync with git remote
bd sync
```

### Working with Issues

Issues in Beads are:
- **Git-native**: Stored in `.beads/issues.jsonl` and synced like code
- **AI-friendly**: CLI-first design works perfectly with AI coding agents
- **Branch-aware**: Issues can follow your branch workflow
- **Always in sync**: Auto-syncs with your commits

## Why Beads?

✨ **AI-Native Design**
- Built specifically for AI-assisted development workflows
- CLI-first interface works seamlessly with AI coding agents
- No context switching to web UIs

🚀 **Developer Focused**
- Issues live in your repo, right next to your code
- Works offline, syncs when you push
- Fast, lightweight, and stays out of your way

🔧 **Git Integration**
- Automatic sync with git commits
- Branch-aware issue tracking
- Intelligent JSONL merge resolution

## Get Started with Beads

Try Beads in your own projects:

```bash
# Install Beads
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash

# Initialize in your repo
bd init

# Create your first issue
bd create "Try out Beads"
```

## Learn More

- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
- **Quick Start Guide**: Run `bd quickstart`
- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)

---

*Beads: Issue tracking that moves at the speed of thought* ⚡
62 changes: 62 additions & 0 deletions .beads/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Beads Configuration File
# This file configures default behavior for all bd commands in this repository
# All settings can also be set via environment variables (BD_* prefix)
# or overridden with command-line flags

# Issue prefix for this repository (used by bd init)
# If not set, bd init will auto-detect from directory name
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
# issue-prefix: ""

# Use no-db mode: load from JSONL, no SQLite, write back after each command
# When true, bd will use .beads/issues.jsonl as the source of truth
# instead of SQLite database
# no-db: false

# Disable daemon for RPC communication (forces direct database access)
# no-daemon: false

# Disable auto-flush of database to JSONL after mutations
# no-auto-flush: false

# Disable auto-import from JSONL when it's newer than database
# no-auto-import: false

# Enable JSON output by default
# json: false

# Default actor for audit trails (overridden by BD_ACTOR or --actor)
# actor: ""

# Path to database (overridden by BEADS_DB or --db)
# db: ""

# Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON)
# auto-start-daemon: true

# Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE)
# flush-debounce: "5s"

# Git branch for beads commits (bd sync will commit to this branch)
# IMPORTANT: Set this for team projects so all clones use the same sync branch.
# This setting persists across clones (unlike database config which is gitignored).
# Can also use BEADS_SYNC_BRANCH env var for local override.
# If not set, bd sync will require you to run 'bd config set sync.branch <branch>'.
# sync-branch: "beads-sync"

# Multi-repo configuration (experimental - bd-307)
# Allows hydrating from multiple repositories and routing writes to the correct JSONL
# repos:
# primary: "." # Primary repo (where this database lives)
# additional: # Additional repos to hydrate from (read-only)
# - ~/beads-planning # Personal planning repo
# - ~/work-planning # Work planning repo

# Integration settings (access with 'bd config get/set')
# These are stored in the database, not in this file:
# - jira.url
# - jira.project
# - linear.url
# - linear.api-key
# - github.org
# - github.repo
Empty file added .beads/interactions.jsonl
Empty file.
4 changes: 4 additions & 0 deletions .beads/issues.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{"id":"morphir-rust-72s","title":"Implement Python binding using Ruff parser crate","description":"Create a morphir-python-binding crate that uses Ruff's parser and AST crates to parse Python source code and convert it to Morphir IR.\n\n## Background\n\nRuff is a fast Python linter and formatter written in Rust. It provides high-quality parser and AST crates that can be reused:\n- `ruff_python_parser` - Python parser\n- `ruff_python_ast` - Python AST types\n\n## Goals\n\n1. Create `morphir-python-binding` crate following the same pattern as `morphir-gleam-binding`\n2. Use Ruff's parser crate for parsing Python source files\n3. Transform Ruff's Python AST to Morphir IR\n4. Support Python type hints for type information extraction\n5. Enable roundtrip testing (Python → IR → Python)\n\n## Benefits\n\n- **Performance**: Ruff's parser is highly optimized Rust code\n- **Correctness**: Well-tested parser used in production by the Ruff project\n- **Compatibility**: Supports modern Python syntax (3.7+)\n- **Maintenance**: Parser updates come from active Ruff development\n\n## Implementation Steps\n\n1. Add ruff_python_parser and ruff_python_ast as dependencies\n2. Create Python AST to ModuleIR visitor\n3. Implement type annotation parsing for function signatures\n4. Add BDD acceptance tests with Python fixtures\n5. Support Python project parsing (multiple modules)\n\n## References\n\n- Ruff GitHub: https://github.com/astral-sh/ruff\n- ruff_python_parser crate: https://crates.io/crates/ruff_python_parser\n- ruff_python_ast crate: https://crates.io/crates/ruff_python_ast","status":"open","priority":2,"issue_type":"feature","created_at":"2026-01-24T11:35:28.092178725-06:00","created_by":"damian","updated_at":"2026-01-24T11:35:39.738018531-06:00"}
{"id":"morphir-rust-kw8","title":"Design and implement Morphir daemon and extension system","description":"Design and implement a complete Morphir daemon and extension system, enabling long-running services, IDE integration, and pluggable language/backend support.\n\n## Vision\n\nCreate a daemon-based architecture that:\n1. Provides fast, incremental compilation through persistent state\n2. Enables IDE extensions (VS Code, IntelliJ, etc.) via LSP\n3. Supports pluggable frontends (language bindings) and backends (code generators)\n4. Offers real-time validation and type checking\n\n---\n\n## Phase 1: MVP Daemon (P1)\n\n### Goals\n- Basic daemon process that stays running\n- Unix socket or TCP communication\n- Simple request/response protocol (JSON-RPC or custom)\n- File watching for automatic recompilation\n\n### Deliverables\n- `morphir-daemon` crate with basic lifecycle management\n- `morphir daemon start/stop/status` CLI commands\n- Simple compile request handling\n- Basic health check endpoint\n\n### Architecture\n```\n┌─────────────┐ ┌─────────────────┐\n│ CLI/IDE │────▶│ Morphir Daemon │\n└─────────────┘ │ ┌───────────┐ │\n │ │ Compiler │ │\n │ └───────────┘ │\n │ ┌───────────┐ │\n │ │ Cache │ │\n │ └───────────┘ │\n └─────────────────┘\n```\n\n---\n\n## Phase 2: Extension System Design (P1)\n\n### Goals\n- Define extension API and plugin interface\n- Support dynamic loading of language bindings\n- Support dynamic loading of code generators\n- Configuration-driven extension discovery\n\n### Extension Types\n1. **Frontend Extensions** (Language Bindings)\n - Parse source language → Morphir IR\n - Examples: Gleam, Python, TypeScript, Elm\n\n2. **Backend Extensions** (Code Generators)\n - Morphir IR → Target language/platform\n - Examples: Spark, Flink, SQL, JavaScript\n\n3. **Analyzer Extensions**\n - Custom validation rules\n - Type inference plugins\n - Documentation generators\n\n### Plugin Interface\n```rust\npub trait FrontendExtension {\n fn name(\u0026self) -\u003e \u0026str;\n fn file_extensions(\u0026self) -\u003e \u0026[\u0026str];\n fn parse(\u0026self, source: \u0026str) -\u003e Result\u003cModuleIR\u003e;\n}\n\npub trait BackendExtension {\n fn name(\u0026self) -\u003e \u0026str;\n fn generate(\u0026self, ir: \u0026Distribution) -\u003e Result\u003cGeneratedOutput\u003e;\n}\n```\n\n---\n\n## Phase 3: LSP Implementation (P2)\n\n### Goals\n- Language Server Protocol implementation\n- Real-time diagnostics and error reporting\n- Go-to-definition, find references\n- Hover information with type details\n- Code completion suggestions\n\n### Deliverables\n- `morphir-lsp` crate\n- VS Code extension package\n- Support for multiple source languages\n\n---\n\n## Phase 4: Production Hardening (P2)\n\n### Goals\n- Robust error handling and recovery\n- Graceful shutdown and restart\n- Logging and observability (tracing, metrics)\n- Resource limits and throttling\n- Multi-project workspace support\n\n### Deliverables\n- Structured logging with tracing\n- Prometheus metrics endpoint\n- Watchdog and auto-restart\n- Connection pooling and request queuing\n\n---\n\n## Phase 5: IDE Extensions (P3)\n\n### Goals\n- VS Code extension with full feature set\n- IntelliJ plugin\n- Neovim/Vim LSP configuration\n- Emacs support\n\n### Features\n- Syntax highlighting\n- Inline error display\n- Code actions and quick fixes\n- Morphir IR visualization\n- Type hierarchy explorer\n\n---\n\n## Implementation Approach\n\n### Incremental Delivery\n1. Start with MVP daemon (file watch + compile)\n2. Add extension loading mechanism\n3. Implement LSP basics (diagnostics)\n4. Expand LSP features iteratively\n5. Build IDE extensions on stable LSP\n\n### Technology Choices\n- **IPC**: Unix sockets (local), TCP (remote)\n- **Protocol**: JSON-RPC 2.0 (LSP compatible)\n- **Plugin Loading**: Dynamic libraries or WASM\n- **File Watching**: notify crate\n\n---\n\n## Success Criteria\n\n### MVP\n- [ ] Daemon starts and accepts connections\n- [ ] File changes trigger recompilation\n- [ ] Compilation results returned to client\n- [ ] Clean shutdown on signal\n\n### Extension System\n- [ ] Extensions discovered from config\n- [ ] Dynamic loading works\n- [ ] Multiple frontends can coexist\n- [ ] Multiple backends can coexist\n\n### LSP\n- [ ] Diagnostics appear in VS Code\n- [ ] Go-to-definition works\n- [ ] Type information on hover\n- [ ] Extension published to marketplace\n\n---\n\n## Related Issues\n- morphir-cet: Switch to official Gleam parser (frontend extension)\n- morphir-rust-72s: Python binding using Ruff (frontend extension)\n- morphir-rust-ykr: TypeScript binding using SWC (frontend extension)","status":"open","priority":1,"issue_type":"feature","created_at":"2026-01-24T11:37:29.981402829-06:00","created_by":"damian","updated_at":"2026-01-24T11:37:55.123239594-06:00"}
{"id":"morphir-rust-y0l","title":"Fix failing Gleam binding acceptance tests","description":"Several Gleam binding acceptance tests are failing and have been marked as @wip (work in progress):\n\n## Failing Tests\n\n### 1. Roundtrip Tests (roundtrip.feature)\n- **order_validation** scenario - Parser fails on generated function signatures with tupled arguments\n- **order_processing** scenario - Same parser issue with function signatures\n\n### 2. CLI Integration Tests (cli.feature)\n- All CLI tests - Require full CLI functionality to be implemented\n\n### 3. Project Parsing Tests (project.feature)\n- Module name lookup uses full path instead of module name (e.g., looking for 'main' but stored as 'src/main')\n\n### 4. Workspace Tests (workspace.feature)\n- Workspace parsing not yet implemented\n\n### 5. Code Generation Tests (codegen.feature)\n- Code generation steps not yet implemented\n\n## Root Causes\n\n1. **Roundtrip failures**: The Gleam parser generates function signatures with tupled parameters like `fn(#(a, b))` but cannot parse them back. The signature should be `fn(a, b)` or handle tupled parameters correctly.\n\n2. **Project parsing**: Module names need to be derived from the file path relative to src/, not include the full path or 'src/' prefix.\n\n3. **CLI/Workspace/Codegen**: These features are not yet implemented.\n\n## Impact\nBlocking full roundtrip testing for complex business logic fixtures.","status":"open","priority":2,"issue_type":"bug","created_at":"2026-01-24T11:30:03.083133986-06:00","created_by":"damian","updated_at":"2026-01-24T11:30:13.91608221-06:00"}
{"id":"morphir-rust-ykr","title":"Implement TypeScript binding using SWC parser crate","description":"Create a morphir-typescript-binding crate that uses SWC's parser and AST crates to parse TypeScript source code and convert it to Morphir IR.\n\n## Background\n\nSWC (Speedy Web Compiler) is a fast TypeScript/JavaScript compiler written in Rust. It provides production-quality parser and AST crates:\n- `swc_ecma_parser` - ECMAScript/TypeScript parser\n- `swc_ecma_ast` - ECMAScript/TypeScript AST types\n\n## Goals\n\n1. Create `morphir-typescript-binding` crate following the same pattern as `morphir-gleam-binding`\n2. Use SWC's parser crate for parsing TypeScript source files\n3. Transform SWC's TypeScript AST to Morphir IR\n4. Leverage TypeScript's type annotations for rich type information\n5. Enable roundtrip testing (TypeScript → IR → TypeScript)\n\n## Benefits\n\n- **Performance**: SWC is one of the fastest TS/JS parsers available\n- **Correctness**: Battle-tested parser used by Next.js, Deno, and other major projects\n- **Compatibility**: Full TypeScript syntax support including latest features\n- **Maintenance**: Active development with regular releases\n\n## Implementation Steps\n\n1. Add swc_ecma_parser and swc_ecma_ast as dependencies\n2. Create TypeScript AST to ModuleIR visitor\n3. Handle TypeScript-specific constructs (interfaces, type aliases, generics)\n4. Support both .ts and .tsx files\n5. Add BDD acceptance tests with TypeScript fixtures\n6. Support TypeScript project parsing (tsconfig.json awareness)\n\n## TypeScript Features to Support\n\n- Function declarations with type annotations\n- Interface and type alias definitions\n- Class definitions\n- Module imports/exports\n- Generic types\n- Union and intersection types\n\n## References\n\n- SWC GitHub: https://github.com/swc-project/swc\n- swc_ecma_parser crate: https://crates.io/crates/swc_ecma_parser\n- swc_ecma_ast crate: https://crates.io/crates/swc_ecma_ast","status":"open","priority":2,"issue_type":"feature","created_at":"2026-01-24T11:36:03.013293463-06:00","created_by":"damian","updated_at":"2026-01-24T11:36:13.181742356-06:00"}
Loading
Loading