# PROMETEU Runtime PROMETEU is an educational and experimental fantasy handheld / fantasy console. This repository contains the Rust runtime workspace for the machine: VM-facing components, virtual peripherals, firmware/system services, host integration, CLI entrypoints, development utilities, specs, and discussion artifacts. The VM is only one subsystem of the machine. The canonical docs in this repository intentionally distinguish: - machine-level specs; - VM/runtime internal architecture; - implementation crates; - discussion workflow and lessons learned. ## What This Repository Contains - `crates/console/`: core machine/runtime crates such as `prometeu-vm`, `prometeu-system`, `prometeu-hal`, `prometeu-drivers`, and `prometeu-firmware` - `crates/host/`: host-side execution surfaces, currently including `prometeu-host-desktop-winit` - `crates/tools/`: user-facing and support binaries such as `prometeu` and `pbxgen-stress` - `crates/dev/`: test support, layer tests, and quality-check utilities - `docs/specs/runtime/`: canonical PROMETEU machine specs - `docs/vm-arch/`: canonical VM/runtime architecture and ISA references - `devtools/`: debugger protocol material - `discussion/`: agendas, decisions, plans, and lessons for architectural work - `test-cartridges/`: cartridge fixtures used for validation and manual runs ## Canonical Documentation Use these entrypoints instead of inferring the model from isolated source files: - [Machine specs](docs/specs/runtime/README.md): authoritative contract for the PROMETEU machine, peripherals, firmware, cartridge format, timing, and host ABI - [VM architecture](docs/vm-arch/ARCHITECTURE.md): authoritative internal architecture for VM/runtime invariants - [ISA reference](docs/vm-arch/ISA_CORE.md): bytecode-level instruction set authority - [Discussion workflow](discussion/index.ndjson): architectural agenda, decision, and execution traceability ## Workspace Layout This repository is a Rust workspace rooted at [Cargo.toml](Cargo.toml) with members in: - `crates/console` - `crates/host` - `crates/tools` - `crates/dev` The main user-facing dispatcher binary is `prometeu`, built from `crates/tools/prometeu-cli`. The same package also builds `prometeu-runtime`, which embeds the current desktop host runtime. Current CLI surface: - `prometeu run ` - `prometeu debug --port ` The dispatcher forwards runtime execution to `prometeu-runtime`. For lower-level local runs, `prometeu-runtime` also accepts: - `--run ` - `--debug --port ` - `--fs-root ` - `--cap ` Other ecosystem commands, such as build, pack, and verification tooling, are not part of the current dispatcher surface in this workspace. ## Requirements - Rust toolchain from [rust-toolchain.toml](rust-toolchain.toml) - `rustup` for toolchain installation and management - `cargo-llvm-cov` for coverage targets such as `make coverage` and `make ci-domains` - a local graphical environment for desktop runtime commands ## Quick Start Build the workspace: ```bash cargo build ``` Inspect the CLI: ```bash cargo run -q -p prometeu-cli --bin prometeu -- --help ``` Run the current stress cartridge fixture: ```bash cargo run -q -p prometeu-cli --bin prometeu -- run test-cartridges/stress-console ``` Run the embedded runtime binary directly: ```bash cargo run -q -p prometeu-cli --bin prometeu-runtime -- --run test-cartridges/stress-console ``` Regenerate and run the stress cartridge fixture: ```bash ./scripts/run-stress.sh ``` The desktop runtime opens a native window through the host layer, so runtime commands are intended for a local graphical environment. ## Validation Format, lint, and test the workspace: ```bash make test ``` Run the CI-oriented non-domain gate: ```bash make ci ``` Run the CI-oriented domain coverage gate: ```bash make ci-domains ``` The debugger socket tests bind localhost sockets and are marked ignored in Rust test metadata; `make test` includes them through the dedicated `test-debugger-socket` target. ## Coverage Governance The repository uses a two-layer runtime-edge coverage model: - a mandatory CI gate based on canonical runtime-edge domains; - domain-oriented review evidence for the canonical runtime-edge domains. Current canonical domains: - `system/runtime` - `fs` - `asset/bank` - `firmware` - `host-dependent` Global coverage artifacts: ```bash make ci make cobertura make ci-domains ``` This produces: - `target/llvm-cov/html` - `target/llvm-cov/report.json` - `target/llvm-cov/summary.json` - `target/llvm-cov/cobertura.xml` Domain-oriented evidence helpers: ```bash make coverage-domain-list make coverage-domain-evidence DOMAIN=firmware make coverage-domain-evidence DOMAIN=host-dependent ``` Per-domain baselines currently start around `60`. That does not waive test obligations. It means the project is adopting explicit domain evidence immediately while tightening quantitative expectations incrementally over time. `make ci-domains` is the CI entrypoint used by Jenkins. It runs the standard coverage pipeline, produces the HTML/XML/JSON artifacts, and fails when any canonical domain falls below its configured `baseline_percent`. The CI gate currently compares domain `lines` coverage against each domain baseline. When a PR changes the observable contract of a canonical domain, it is expected to: - add or adjust tests for that domain; or - justify explicitly why the observable contract did not change. Improving the global percentage alone is not sufficient review evidence when the changed behavior belongs to a canonical domain. ## Current State The project is still in active architectural and implementation convergence. - the machine contract is being clarified through the specs and discussion workflow; - the workspace already contains concrete runtime and host code; - the CLI dispatcher currently exposes the runtime paths that are backed by binaries in this workspace. Treat APIs, file formats, and execution flows as evolving unless the relevant spec explicitly defines them as stable. ## License This project is licensed under the [MIT License](LICENSE).