Mirabile is a local-first astrology workspace written in Rust and Leptos. Its real Application
facade owns authoritative state, locally revisioned resources, IndexedDB persistence, calculation
runtime orchestration, and UI read-model projection. The normal browser build performs calculation
in a Web Worker through a provider-neutral contract.
The current real browser backend is the exactly pinned XALEN adapter. XALEN types remain private to the engine adapter and are converted to Mirabile-owned request, result, and provenance types. The adapter deliberately supports only its documented narrow point, coordinate, correction, and house surface. Unsupported semantics fail explicitly. The deterministic backend remains test/demo infrastructure; Swiss Ephemeris is not linked or distributed.
Calculated positions, analysis, layout, and scenes are disposable derived state. Canonical
ChartRecord source assertions remain separate from ChartDefinition calculation semantics.
crates/mirabile-core: portable canonical domain, configuration, view, and workspace typescrates/mirabile-engine: provider-neutral calculation contract, XALEN adapter, keys, analysis, layout, and scene primitivescrates/mirabile-store: revisioned repository contract, memory adapter, portable JSON, and IndexedDB adaptercrates/mirabile-app:Applicationcontract and real hydration, session, draft, calculation, persistence, and projection orchestrationapps/web: Leptos 0.8 CSR presentation and the calculation Worker binary
Architecture and current constraints are documented in architecture, application contract, domain model, state and persistence, local automation, and the concise decision records. The original foundation plan is retained as a historical record, not as the current product description.
Use the fast native development loop for ordinary changes:
./scripts/check.shBefore handoff, run the complete local suite:
./scripts/verify.shAll validation is local. This repository intentionally has no hosted CI. The browser contract builds both the main app and Worker, validates distributed notice assets, then exercises IndexedDB, application reload, and Worker calculation in an isolated headless Chromium profile.
verify.sh runs formatting, every package and workspace test suite, XALEN-enabled tests, strict
Clippy, provider-neutral and XALEN native/WASM checks, the web WASM check, the Trunk main/Worker
build, the dependency/license guard, notice-asset validation, the Chromium repository contract,
semantic workbench scenarios, native-control golden journeys, expected-failure artifact proof,
and staged plus unstaged diff checks. Missing local prerequisites fail with an actionable message.
The WASM build requires the wasm32-unknown-unknown Rust target. Run the app with:
(cd apps/web && env -u NO_COLOR trunk serve --port 8080)Generate the current diagnostics cockpit screenshot with:
./scripts/test-workbench-e2e.sh --scenario diagnostics-control --mode controlThe generated image is target/workbench-e2e-diagnostics-control.png; keep it untracked unless it
is deliberately selected as a repository artifact. Use scripts/check.sh during development and
reserve the substantially heavier scripts/verify.sh for a complete handoff or merge gate.
Mirabile is pre-MVP. Its persisted schemas are development formats and may change incompatibly until an explicit MVP schema freeze. Historical timezone resolution, location discovery, session recovery, sync, encryption, import/archive workflows, query/temporal execution, Swiss integration, and broad astrology features are not implemented. Current chart rendering is an architectural vertical slice, not a claim of complete professional calculation or wheel-layout coverage.
MIT. See LICENSE. Third-party distribution terms and required notices are in THIRD_PARTY_NOTICES.md.