Skip to content

feat(gleam-binding): add configurable fatal error mode for parse stage emission#38

Merged
DamianReeves merged 2 commits intodocs/installation-instructionsfrom
copilot/sub-pr-36
Jan 24, 2026
Merged

feat(gleam-binding): add configurable fatal error mode for parse stage emission#38
DamianReeves merged 2 commits intodocs/installation-instructionsfrom
copilot/sub-pr-36

Conversation

Copy link

Copilot AI commented Jan 24, 2026

Parse stage emission failures were silently downgraded to warnings, potentially hiding critical tooling integration issues. Added configuration to make these failures fatal when needed.

Changes

  • Config: Added emit_parse_stage_fatal field to FrontendSection (default: false)
  • CLI: Pass emitParseStageFatal option through compile command to extensions
  • Error handling: Propagate parse stage failures as ExecutionFailed when fatal mode enabled; otherwise log as warning (W001)

Usage

[frontend]
emit_parse_stage = true
emit_parse_stage_fatal = true  # Halt compilation on parse stage failures

Default behavior unchanged—failures remain non-fatal warnings for backward compatibility.


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

…error handling

Co-authored-by: DamianReeves <957246+DamianReeves@users.noreply.github.com>
Copilot AI changed the title [WIP] Address feedback on Gleam binding enhancements feat(gleam-binding): add configurable fatal error mode for parse stage emission Jan 24, 2026
Copilot AI requested a review from DamianReeves January 24, 2026 15:21
@DamianReeves DamianReeves marked this pull request as ready for review January 24, 2026 15:50
@DamianReeves DamianReeves merged commit 7cd1f07 into docs/installation-instructions Jan 24, 2026
1 check passed
@DamianReeves DamianReeves deleted the copilot/sub-pr-36 branch January 24, 2026 15:51
DamianReeves added a commit that referenced this pull request Jan 24, 2026
…e emission (#38)

* Initial plan

* feat(gleam-binding): add emitParseStageFatal option for configurable error handling

Co-authored-by: DamianReeves <957246+DamianReeves@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: DamianReeves <957246+DamianReeves@users.noreply.github.com>
DamianReeves added a commit that referenced this pull request Jan 24, 2026
…e emission (#38)

* Initial plan

* feat(gleam-binding): add emitParseStageFatal option for configurable error handling

Co-authored-by: DamianReeves <957246+DamianReeves@users.noreply.github.com>

---------

Co-authored-by: DamianReeves <957246+DamianReeves@users.noreply.github.com>
DamianReeves added a commit that referenced this pull request Jan 24, 2026
…ents (#36)

* docs: update installation instructions with correct commands

Update the Getting Started installation section with working commands:
- mise: use github:finos/morphir-rust backend instead of registry
- cargo-binstall: add --git flag since not published to crates.io
- Add manual download option linking to GitHub Releases
- List all supported platforms

* feat: add morphir launcher script with version management

Add a launcher script that acts as both installer and version manager
for morphir, similar to Mill's approach.

Features:
- Auto-download: Downloads morphir binary on first run
- Version pinning: Supports .morphir-version and morphir.toml files
- Version override: Use +0.1.0 syntax for explicit version
- Multiple backends: mise > cargo-binstall > GitHub releases > cargo
- Self commands: upgrade, list, which, install, prune, update

Scripts:
- scripts/morphir.sh - Unix (bash) launcher
- scripts/morphir.ps1 - Windows (PowerShell) launcher
- scripts/install.sh - Unix bootstrap installer
- scripts/install.ps1 - Windows bootstrap installer

Also includes:
- Jekyll setup with Poole theme for documentation site
- mise tasks for local Jekyll development (docs:serve)
- Updated README with new installation instructions

* fix: add Poole theme CSS and assets

The jekyll-remote-theme plugin only copies layouts, includes, and
sass partials - not static assets. Add:
- docs/styles.scss to generate CSS from theme partials
- docs/public/ with favicon and apple touch icon from Poole v2.1.0

* fix: exclude .gems from yamllint checks

* chore: improve .gitignore coverage

Add entries for:
- OS files (Thumbs.db)
- IDE/Editor files (.idea, .vscode, swap files)
- Environment files (.env, .envrc)
- Root node_modules/
- Morphir launcher local cache

* chore: track Cargo.lock for reproducible builds

Binary/CLI projects should commit Cargo.lock to ensure:
- Reproducible builds for contributors
- Consistent CI builds
- Reproducible `cargo install --path` results

* feat: restructure docs with just-the-docs theme

- Switch from Poole to just-the-docs theme for sidebar navigation
- Add dark/light theme toggle support
- Split documentation into multiple pages:
  - index.md: Landing page
  - getting-started.md: Getting started guide
  - install.md: Detailed installation guide
  - cli/: Auto-generated CLI reference with nesting
  - ir-migrate.md: IR migration guide
- Update docs generator to add just-the-docs front matter
- CLI commands now nest properly in sidebar navigation

* chore: add sass quiet_deps and note about theme deprecation warnings

* feat: add morphir.finos.org branding and colors

- Add logo, favicon, and icon assets from morphir repo
- Create custom color scheme matching morphir.finos.org:
  - Light mode: #2e8555 (green)
  - Dark mode: #25c2a0 (teal)
- Add hero banner to landing page with morphir logo
- Add link to morphir.finos.org in header
- Update footer with FINOS and Morphir links

* feat: enhance CLI and docs with theme toggle, release notes, and JSON output

- Add dark/light theme toggle to docs site with localStorage persistence
- Add release notes page (docs/releases.md) auto-generated from CHANGELOG
- Create file-based mise tasks for docs generation (docs:releases, docs:generate)
- Change ir migrate input from -i flag to positional argument
- Add --json flag to ir migrate for scripting/CI use cases
- Add termimad for console markdown rendering
- Update AGENTS.md with CLI docs generation workflow
- Update release-manager skill with docs:generate task

* feat: add TUI pager and structured logging infrastructure

- Add ratatui-based JSON pager with syntax highlighting, line numbers, scrolling
- Add structured logging module (tracing) with workspace-aware log directories
- Fix --json mode to emit migrated IR to stdout when no output file specified
- Update AGENTS.md with TUI stack (ratatui, crossterm, tui-realm) and logging standards
- Progress messages now go to stderr (stdout reserved for actual output)
- Add universal --help flag support for all commands

* chore: fix formatting, lint issues, and regenerate docs

- Fix Rust formatting in pager.rs
- Add #[allow(dead_code)] to scaffolded but unused logging and help functions
- Fix shell script formatting in releases task
- Fix pre-push task to reference correct lint task names
- Regenerate documentation

* docs: regenerate completions with full usage spec

* fix: use V4 canonical naming in IR migration output

The IR migration from Classic to V4 format was still using Classic-style
array naming (e.g., ["word", "parts"]) instead of V4 canonical naming
(kebab-case strings like "word-parts").

Changes:
- Add V4Name newtype wrapper that serializes as kebab-case string
- Update V4 structs (ConstructorDefinition, ConstructorArg, TypeDefinition)
  to use V4Name instead of Name for proper serialization
- Add comprehensive type/value expression converters:
  - convert_type_expr_to_v4() for Classic array -> V4 object wrapper format
  - convert_value_expr_to_v4() for value expressions with canonical FQNames
  - convert_pattern_to_v4() and convert_literal_to_v4() for patterns/literals
  - extract_fqname_from_classic() for canonical "pkg/path:mod#name" format
- Update extract_type_params() to return Vec<V4Name>
- Update convert_constructor_to_v4() to use V4Name for names

The V4 output now correctly shows:
- Constructor names: "close-deal" instead of ["close", "deal"]
- Type params: ["comparable-node"] strings instead of [[...]] arrays
- FQNames: "morphir/sdk:set#set" canonical format
- Type expressions: {"Variable": {"name": "a"}} object wrapper format

* refactor: rename V4Name to Name for cleaner V4 API

Rename the V4 string-serialized name type from V4Name to Name for a cleaner API:
- V4 types now use `v4::Name` (serializes as kebab-case string)
- Classic types use `naming::Name` (aliased as ClassicName in v4.rs)

This makes V4 code more natural since `Name` is the expected type name,
while making it clear that Classic format uses a different representation.

* refactor: make V4 canonical naming the default for Name

Restructure naming so that V4 format (kebab-case string) is the default:

- `naming::Name` now serializes as kebab-case string ("my-type-name")
- `classic::ClassicName` wraps Name and serializes as array (["my", "type", "name"])
- `v4::Name` is now just a re-export of `naming::Name`
- Both formats support bidirectional conversion via From/Into

This makes V4 the default going forward, with ClassicName available
for backward compatibility when working with Classic IR.

Deserialization remains flexible - both formats accept either
string or array input for seamless migration.

* docs: update ir-migrate.md with compact V4 format examples

Update the Format Differences section to document the compact V4 format:

Type expressions:
- Variables: bare name string ("a")
- References (no args): bare FQName string
- References (with args): {"Reference": {"fqname": ..., "args": [...]}}
- Records: {"Record": {fields}} without wrapper

Value expressions:
- Variables: {"Variable": "name"}
- References: {"Reference": "fqname"}
- Records: {"Record": {fields}}

Also update the LCR example to show compact format output.

* feat(ir): simplify Reference with args to array format

Changed Reference with type arguments from object format:
  {"Reference": {"fqname": "pkg:mod#name", "args": [...]}}

To array format:
  {"Reference": ["pkg:mod#name", arg1, arg2, ...]}

The first element is the FQName, followed by type arguments. This is
more compact and easier to read/write.

* feat(ir migrate): add --expanded flag for verbose V4 output

Adds --expanded flag to `morphir ir migrate` command that outputs
the expanded (non-compact) V4 format:

Compact (default):
- Variable: "a" (bare string)
- Reference (no args): "pkg:mod#name" (bare FQName)
- Reference (with args): {"Reference": ["pkg:mod#name", arg1, ...]}

Expanded (--expanded):
- Variable: {"Variable": "a"}
- Reference: {"Reference": {"fqname": "pkg:mod#name", "args": [...]}}

This is useful for debugging, tooling compatibility, and when a more
explicit format is needed.

* fix(ir): expanded Variable format now uses name key

Change expanded Variable format from {"Variable": "a"} to
{"Variable": {"name": "a"}} for consistency with other expanded
type expressions.

Added comprehensive tests for both compact and expanded formats
for Variable and Reference type expressions.

* chore: fix lint and formatting issues

* docs: update generated documentation

* chore: prepare changelog for v0.1.1 release

* docs: update release notes

* Complete CLI integration: builtin extensions, config merging, and documentation

- Add builtin extension support to extension registry and CLI list command
- Implement explicit config merging (workspace > project > CLI args)
- Extend Vfs trait with remove, copy, and metadata methods
- Implement NotebookVfs for Jupyter notebook-based testing
- Add comprehensive CLI commands (compile, generate, gleam subcommands)
- Implement JSON and JSON Lines output support
- Add rich error handling with miette diagnostics
- Create user documentation (5 tutorials)
- Create contributor documentation (5 design docs)
- Add CLI E2E testing with BDD scenarios
- Add unit and integration tests for CLI commands
- Update .morphir/ folder structure to Mill-inspired layout

* Fix compilation errors and apply code formatting

- Fix nbformat API usage in NotebookVfs (use v4 module correctly)
- Fix PathBuf comparison issues in VFS implementations
- Fix config.rs type mismatch for project_root unwrap_or
- Add uuid dependency for NotebookVfs
- Fix unused variable warnings
- Apply cargo fmt formatting across all files
- Fix import organization and code style issues

* Migrate to Rust 2024 edition

- Update workspace edition from 2021 to 2024 in Cargo.toml
- Add rust-version = "1.85" to workspace package
- Update rustfmt.toml edition to 2024
- Run cargo fix --edition to automatically migrate all crates
- Update dependency version constraints to latest compatible versions:
  - starbase: 0.10
  - ratatui: 0.30
  - crossterm: 0.29
  - chumsky: 1.0.0-alpha.8 (for API compatibility)
  - Various other dependencies updated
- Fix error conversions (anyhow::Error -> CliError) for Rust 2024 compatibility
- Add missing load_ir function to morphir-common::loader
- Fix SourceLocation field access in error conversion
- Remove Logos #[error] attribute (no longer needed in 0.14+)
- Add priority to Logos regex patterns to resolve conflicts
- Add Deserialize to Diagnostic struct
- Fix unused import warnings
- All core crates compile successfully
- All tests pass (105 tests in core crates)

Core crates verified:
- morphir-common ✅
- morphir-design ✅
- morphir-ir ✅
- morphir-daemon ✅

* Fix compilation issues and update dependencies

- Update logos from 0.14 to 0.16 (latest stable)
- Update chumsky to 0.12 (latest stable) and update parser API usage
- Add Hash and Eq traits to Token enum for chumsky compatibility
- Add Hash trait to FeatureStatus enum for HashMap usage
- Fix visitor import in backend/codegen.rs (use super::visitor)
- Update parser function signatures with lifetime parameters for chumsky 0.12
- Remove Error type parameter from Parser trait bounds (not supported in 0.12)
- Fix write_output return type (anyhow::Result -> std::io::Result)
- Fix CliError::report() to clone self before passing to miette
- Update to_parse_error function signature with lifetime parameter
- Fix unused import warnings

Core crates compile successfully:
- morphir-common ✅
- morphir-design ✅
- morphir-ir ✅
- morphir-daemon ✅

All tests pass (105 tests in core crates)

Note: morphir-gleam-binding still has chumsky 0.12 API compatibility issues
that require parser refactoring (separate from edition migration)

* Fix morphir-gleam-binding compilation for chumsky 0.12

Update parser to use chumsky 0.12 API:
- Use IterInput for spanned token input handling
- Update all parser function signatures with ValueInput bounds
- Add .boxed() to recursive parsers for Clone trait requirements
- Fix custom type body parser to use repeated() for Gleam syntax

Fix backend visitor:
- Handle all V4 ValueBody variants (NativeBody, ExternalBody, IncompleteBody)
- Add Decimal literal handling

Fix codegen:
- Resolve OsVfs ownership issues

All 10 library unit tests now pass.

* Add mise code coverage tasks with per-crate thresholds

- Add cargo-llvm-cov tool to mise.toml
- Create check:coverage-report task (generates HTML report with incremental build)
- Create check:coverage task (verifies per-crate thresholds)
- Add coverage threshold to morphir-gleam-binding (40%)
- Add CI coverage job with 14-day artifact retention

Per-crate thresholds are configured via Cargo.toml metadata:
  [package.metadata.coverage]
  threshold = 40

* Fix type errors in morphir CLI crate

- Fix ensure_morphir_structure error mapping (anyhow::Error -> CliError::Config)
- Fix write_output error conversion with map_err(CliError::from)
- Fix report() method to use simple eprintln (CliError can't be cloned)
- Remove unused serde::Serialize import

* Fix test compilation errors in morphir-gleam-binding

- Add Debug derive to CliTestContext for cucumber World compatibility
- Make backend/frontend modules public for test access
- Add rlib crate-type alongside cdylib for test linking
- Fix cucumber expression escaping for slashes in paths
- Add Default derive and fix type inference in acceptance tests
- Add tempfile dev-dependency to morphir crate

* Fix clippy warnings and refactor compile command

- Refactor run_compile to use CompileOptions struct instead of 8 params
- Collapse nested if statements using Rust 2024 let chains
- Fix shell script formatting in coverage tasks (remove trailing \)
- Replace inherent to_string with Display impl for Indent
- Use vec![] macro instead of Vec::new() + push pattern
- Add allow(dead_code) for test helper code not yet fully used
- Update &PathBuf parameters to &Path in frontend visitor
- Add #[allow(clippy::result_large_err)] for ParseError
- Separate AST types into ast.rs, errors into errors.rs, lexer into lexer.rs

* docs: Update generated documentation

* feat(gleam-binding): implement roundtrip testing infrastructure

Add end-to-end roundtrip testing that verifies Gleam → IR V4 → Gleam → IR
equivalence:

- Fix backend visitor to generate actual Gleam code instead of JSON placeholders
- Add deserialize_value_body() to convert V4 JSON back to Value types
- Connect generate_value_expr() and generate_pattern() methods (were dead code)
- Fix Gleam syntax for IfThenElse (use case with True/False branches)
- Create roundtrip.rs with roundtrip_gleam() function
- Create frontend/compare.rs with ModuleIR semantic comparison
- Add comprehensive BDD test scenarios for literals, variables, and types
- Update acceptance.rs to use actual comparison instead of placeholders

* feat(gleam-binding): align tokenizer/AST with glexer/glance, add pretty printer

Phase 1 - Lexer updates (align with glexer):
- Add float operators (+., -., *., /., <., >., <=., >=.)
- Add missing keywords (auto, delegate, derive, echo, implement, macro, opaque, panic, test)
- Add comment tokens (CommentModule, CommentDoc, CommentNormal)
- Add DiscardName pattern for _name
- Add additional operators (|>, <>, <<, >>, <-, @)

Phase 2 - AST updates (align with glance):
- Add Span type for source locations
- Add BinaryOperator enum with 23 operators
- Add Field<T> type for labelled/unlabelled arguments
- Add Statement type for function body statements
- Add BitStringOption and BitStringSegment types
- Update Expr enum with new variants (BinaryOp, NegateInt, NegateBool,
  List, Block, Panic, Todo, Echo, BitString, TupleIndex, FieldAccess,
  FnCapture, RecordUpdate)
- Update Pattern enum with new variants (Discard, Assignment, List,
  Concatenate, BitString)
- Update TypeExpr: Reference→Named, improved Function type

Phase 3 - Pretty printer using `pretty` crate:
- Add `pretty = "0.12"` dependency
- Create GleamPrinter with Wadler-style document algebra
- Support all AST node types with proper formatting
- Handle operator precedence for minimal parenthesization
- Export render_module, render_expr, render_type_expr, render_pattern

All 23 unit tests pass.

* fix(gleam-binding): address clippy warnings

- Remove unnecessary let binding in pretty_printer.rs (let_and_return)
- Change &PathBuf to &Path in roundtrip.rs (ptr_arg)

* feat(gleam-binding): enhance parser with module docs, blocks, and lists

- Add module doc comment extraction from //// comments to ModuleIR.doc
- Support type annotations on function parameters (name: Type)
- Support labelled fields in custom type constructors
- Add list expression parsing [elem, elem, ...]
- Add list pattern parsing with optional tail spread
- Add block expression parsing { let ... expr }
- Support multiple arguments in function application
- Fix case branches to not require comma separators
- Add real-world test fixtures (rentals, order_validation, etc.)

Parser now successfully parses more complex Gleam code patterns
from morphir-examples, improving compatibility with real-world usage.

* feat(gleam-binding): emit parse stage JSON to .morphir/out

- Add emitParseStage option (default: true) to frontend config
- When enabled, writes parsed ModuleIR as JSON to .morphir/out/<project>/parse/<module>.json
- Allows inspection of intermediate AST before IR conversion
- Configurable via [frontend] section in morphir.toml:
  ```toml
  [frontend]
  emit_parse_stage = true  # or false to disable
  ```

* fix(gleam-binding): address clippy warnings in emit_parse_stage

* feat(gleam-binding): implement proper operator precedence parsing

- Implement 7-level precedence hierarchy for binary operators:
  1. Pipe (|>) - lowest
  2. Or (||)
  3. And (&&)
  4. Comparison (== != < > <= >=)
  5. Concatenate (<>)
  6. Addition (+ -)
  7. Multiplication (* / %) - highest

- Use chumsky's foldl for left-associative chaining
- Add .boxed() to enable Clone trait on recursive parsers
- Fixes parsing of complex expressions like `lock_price < market_price * 0.9`

This enables proper parsing of real-world Gleam code like order_processing.gleam
with expressions involving multiple chained operators.

* feat(scripts): add dev mode support to launcher scripts

Enable running morphir from local source instead of downloaded binaries.
Dev mode can be enabled via:
- --dev command-line flag (one-time)
- MORPHIR_DEV=1 environment variable (session)
- "local-dev" value in .morphir-version file (project)
- dev_mode = true in morphir.toml [morphir] section (project)

Features:
- Auto-detect source directory from current path or CI environment
- Use cached debug binary if available and up-to-date
- Fall back to cargo build when sources changed
- Support for GitHub Actions, GitLab CI, Jenkins, and other CI systems
- New `morphir self dev` command to show dev mode status

Also adds dev_mode field to MorphirSection config model.

* fix(vfs,gleam-binding): VFS consistency and V4 roundtrip serialization

VFS improvements:
- Document contract for Vfs trait methods (exists returns true for files OR dirs)
- Fix MemoryVfs::exists() to match OsVfs semantics for directories

Gleam binding improvements:
- Add parsing support for todo and panic expressions
- Fix V4 serialization: use serialize_value for object wrapper format
- Fix roundtrip test path handling for kebab-case module names
- Improve debug output in roundtrip tests

* docs: add dev mode and self command documentation

- Add comprehensive dev mode documentation to install.md
- Create docs/cli/self.md for morphir self command reference
- Add dev mode section to getting-started.md
- Update CHANGELOG.md with v0.1.1 features (dev mode, gleam roundtrip, VFS fix)

Note: CLI index.md and releases.md are regenerated from CHANGELOG.md by pre-push hooks

* fix(compile): resolve source_directory relative to config file

Addresses code review feedback: source_directory from config was being
treated as a path relative to the current working directory instead of
relative to the config file location.

- CLI-provided --input is still resolved relative to cwd (user expectation)
- Config-provided source_directory is now resolved relative to morphir.toml
- Uses existing resolve_path_relative_to_config helper from morphir-design

This fixes issues when invoking morphir compile from a different directory
than where morphir.toml lives, common in workspaces or CI environments.

* docs: update generated documentation

* feat(cli): promote compile and generate commands from experimental

- Remove hide=true from compile and generate commands
- Add comprehensive documentation for compile and generate commands
- compile: Compiles source code to Morphir IR using language extensions
- generate: Generates code from Morphir IR using target extensions

The validate and transform commands remain experimental/hidden.

* docs: update generated documentation

* chore: bump version to 0.2.0

This release includes significant changes that warrant a minor version bump:
- Promoted compile and generate commands from experimental to stable
- Added dev mode for running from local source
- TUI pager with vim-like navigation
- Improved V4 format with compact serialization
- Gleam binding roundtrip testing infrastructure

* docs: update generated documentation for v0.2.0

* feat(gleam-binding): add configurable fatal error mode for parse stage emission (#38)

* Initial plan

* feat(gleam-binding): add emitParseStageFatal option for configurable error handling

Co-authored-by: DamianReeves <957246+DamianReeves@users.noreply.github.com>

---------

Co-authored-by: DamianReeves <957246+DamianReeves@users.noreply.github.com>

* refactor(gleam-binding): eliminate memory duplication in compile response (#39)

* Initial plan

* refactor: avoid disk I/O for format.json in compile response

Co-authored-by: DamianReeves <957246+DamianReeves@users.noreply.github.com>

---------

Co-authored-by: DamianReeves <957246+DamianReeves@users.noreply.github.com>

* fix(yaml): remove trailing spaces from feature_registry.yaml

* fix(gleam-binding): improve roundtrip test and type generation

- Update roundtrip_should_complete to actually perform full roundtrip
- Add to_pascal_case helper for Gleam type constructor names
- Fix type definition generation (constructors space-separated, not pipe)
- Add generate_type_expr method for V4 JSON type conversion

* fix(gleam-binding): address clippy warnings

* fix(gleam-binding): skip CLI tests when prerequisites unavailable

- Add cli_tests_available() to check if morphir binary is accessible
- Update find_workspace_root to locate correct Cargo.toml
- Skip CLI steps gracefully when context is not available
- Write source files to disk when CLI context is present

* ci: split tests into unit and integration with binary artifact

- Add build job that creates morphir binary artifact
- Split test into unit tests (runs in parallel with build)
- Add integration tests that download and use the binary artifact
- This enables CLI e2e tests to run with the actual binary

* docs: Add design documents and technical-writer skill

- Add daemon and extension design documents from main morphir repo
- Format all design documents for Jekyll with proper frontmatter
- Add links to main Morphir site and llms.txt throughout
- Add actor-based extension system design documents (13 files)
- Add technical-writer skill adapted for Jekyll/GitHub Pages
- Include scripts for link checking, structure validation, and API docs
- Update extension README to reference actor-based design docs

All documents are formatted for Jekyll and include proper navigation
structure and cross-references to main Morphir documentation.

* ci: restructure with mise tasks, integration-tests crate, and WIP test tagging

- Add mise tasks for build and test workflows:
  - build:release - Stage release binary to .morphir/build/bin/
  - build:debug - Stage debug binary
  - test:unit - Run unit tests only
  - test:integration - Run integration tests with staged binary
  - test:all - Run all tests

- Create integration-tests crate (publish=false) for CLI tests
  - Move CLI test helpers from morphir-gleam-binding
  - Separate CLI integration tests that require binary

- Set publish=false on morphir-tests crate

- Mark failing acceptance tests as @wip with issue reference:
  - roundtrip.feature: order_validation and order_processing scenarios
  - cli.feature: All CLI tests (not implemented)
  - project.feature: Module name lookup issues
  - workspace.feature: Not implemented
  - codegen.feature: Not implemented

- Update ci.yml to use mise tasks consistently
- Update cli_helpers.rs to check staged binary first

Fixes: #40

* bd sync: 2026-01-24 11:35:21

* chore(beads): add parser migration and Python binding issues

- morphir-cet: Switch from custom Gleam parser to official Gleam parser
- morphir-rust-72s: Implement Python binding using Ruff parser crate

* chore(beads): add TypeScript binding issue

- morphir-rust-ykr: Implement TypeScript binding using SWC parser crate

* chore(beads): add daemon and extension system epic

- morphir-rust-kw8: Design and implement Morphir daemon and extension system
  - Phase 1: MVP Daemon
  - Phase 2: Extension System Design
  - Phase 3: LSP Implementation
  - Phase 4: Production Hardening
  - Phase 5: IDE Extensions

* ci: install rustfmt and clippy components before lint checks

The mise-action installs Rust but doesn't include rustfmt/clippy components
by default. Add explicit rustup component installation step.

* style: fix formatting in integration-tests cli.rs

* ci: add concurrency guards to cancel in-progress runs

When a new commit is pushed to the same branch/PR, any in-progress CI
runs are automatically canceled to avoid wasting resources.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants