Files
Entropyk/project-context.md
Sepehr ab5dc7e568 chore: remove BMAD framework files and IDE configuration artifacts
Clean up unused BMAD workflow, agent, and command files across all IDE
configurations (.agent, .clinerules, .cursor, .gemini, .github, .kilocode,
.opencode) and internal module files (_bmad/bmb, _bmad/bmm).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-25 15:01:09 +02:00

29 lines
2.2 KiB
Markdown

# Entropyk Project Context & Rules
This file serves as the system-wide foundational reference (`project-context.md`) for all AI agents working on Entropyk.
## Component Integration Process - CRITICAL RULE
When adding a new thermodynamic component, it **MUST** be fully integrated across all supported target interfaces natively. Follow this protocol:
### 1. Core Rust & Solver Representation (`crates/components`)
- **Implement Trait**: Implement `entropyk::Component` (`compute_residuals`, `jacobian_entries`, `n_equations`, `get_ports`, `signature`, `energy_transfers`).
- **Jacobian Accuracy**: The Jacobian **MUST** be exact. Do not use numerical differentiation unless explicitly requested. Verify with tests.
- **Type-State APIs**: Use `Disconnected` -> `Connected` typestate pattern for port connections (`new()` returns disconnected, `connect()` returns connected).
- **Facade Export**: Export in `crates/components/src/lib.rs` AND re-export in `crates/entropyk/src/lib.rs`.
- **Solver Constraints API**: If the component has control variables (e.g., fan speed, opening, frequency), ensure these fields can be manipulated and registered via the `embedding` / `Bounded` / `Constraint` API for inverse calibration/Eurovent rating.
### 2. CLI Integration (`crates/cli`)
- **Config Parsing**: Add a new match arm in `crates/cli/src/run.rs` inside `create_component`.
- **Parameter Extraction**: Extract required and optional parameters from JSON. Provide safe default values (e.g. `unwrap_or()`).
- **Port Resolution**: Instantiate the component using `make_connected_port` for boundaries, or the standard `Port::new(...)` -> `.connect()` pattern for N-port components.
### 3. Python Bindings (`crates/bindings/python` via PyO3)
- **PyClass Wrapper**: Define a `#[pyclass]` structural wrapper mapping Python primitives to Rust's strong types.
- **State & Properties**: Expose getters (`#[getter]`) and setters (`#[setter]`) for variables.
- **Registration**: Register the wrapper in the PyModule definition.
### 4. WebAssembly Integration (`crates/bindings/wasm`)
- **Wasm Wrapper**: Create a `#[wasm_bindgen]` wrapper.
- **Methods**: Expose state mutation methods to JS using `#[wasm_bindgen]`, mapping complex types to strings/f64s.