| 1 |
|
- |
# EveryCycle — Roadmap
|
|
1 |
+ |
# EveryCycle Roadmap
|
| 2 |
2 |
|
|
| 3 |
3 |
|
This is the live thread roadmap. Work advances on parallel threads, not numbered phases. The project's "current state" is the snapshot of where every thread stands together.
|
| 4 |
4 |
|
|
| 39 |
39 |
|
## Platform and distribution
|
| 40 |
40 |
|
|
| 41 |
41 |
|
- **Linux only by design.** macOS-native is not on the roadmap. Apple Silicon support, if it comes, comes via Asahi Linux.
|
| 42 |
|
- |
- **A Fedora downstream is the reference target, loosely.** Changed 2026-08-21. This line read "Pinned to Ubuntu LTS (24.04)" and was written before Alloy existed; the reference host is a Fedora-derived image now. Loosely is the operative word: the codebase is generic Linux, the reference host is where it is built and probed first, and nothing here is a hard pin. Other distros stay best-effort.
|
| 43 |
|
- |
- **What the change costs, stated.** The Ubuntu line justified itself as matching the MNW production server, so that one test matrix covered infra and inference. MNW production is Ubuntu 24.04, so that no longer holds and the two matrices are separate. Accepted deliberately: EveryCycle's target is the box with the GPUs in it, not the box serving the website, and those were only ever the same distro by coincidence.
|
|
42 |
+ |
- **A Fedora downstream is the reference target, loosely.** Loosely is the operative word: the codebase is generic Linux, the reference host is where it is built and probed first, and nothing here is a hard pin. Other distros stay best-effort. EveryCycle's target is the box with the GPUs in it, not the box serving the website, so the reference host does not track MNW production's distro and the two test matrices are separate.
|
| 44 |
43 |
|
- **Glibc build, RPM packaging.** The daemon is a standard glibc binary. Executor isolation (in-process dlopen vs out-of-process sidecar) is decided per executor by vendor SDK stability and crash blast-radius, not by libc compatibility.
|
| 45 |
44 |
|
- **Immutability is the one thing that is genuinely different, and it is a kernel-module question.** An image-based host (bootc, rpm-ostree) has no DKMS at update time, so a vendor kernel module cannot be built on the machine the way `nvidia-dkms` does on Ubuntu. It has to be baked into the image or layered as an akmod. Everything else about an immutable host is friendlier than it sounds: `/opt` and `/usr/local` are `/var`-backed and writable, so CUDA and ROCm install where their installers expect, `/etc` and `/var` persist, and systemd, udev and `/dev` are unchanged. Treat the module delivery path as real work and the rest as packaging format.
|
| 46 |
45 |
|
|
| 101 |
100 |
|
|
| 102 |
101 |
|
The hardware line is how the operation pays for EveryCycle's development. Machine BOMs, sourcing routes and pricing live in the TailoredMachines wiki rather than in this repo.
|
| 103 |
102 |
|
|
| 104 |
|
- |
**Note (2026-07-10):** The hardware line was rebranded to **TailoredMachines** and narrowed to a small-batch atelier cutting workstations for **1–6 programmers doing bursty pair-programming and audit/fuzz workloads**. The product architecture is a single Platform SKU (v1: "The House Cut") plus three explicit GPU paths (Alterations / Off-the-Rack / The Collection). See the TailoredMachines plan and brand docs for the current framing. The tier list below (H1–H4, previously "MakeMachines") is historical — H3 (hobbyist edge) and H4 (rack appliance) fall outside TailoredMachines' scope entirely, and H1/H2 are collapsed into the House Cut framing.
|
|
103 |
+ |
The line is a small-batch atelier cutting workstations for **1–6 programmers doing bursty pair-programming and audit/fuzz workloads**. The product architecture is a single Platform SKU (v1: "The House Cut") plus three explicit GPU paths (Alterations / Off-the-Rack / The Collection). See the TailoredMachines plan and brand docs.
|
| 105 |
104 |
|
|
| 106 |
|
- |
Thread H's active work now happens against TailoredMachines' plan, not this table. Kept here for continuity with the pre-narrowing roadmap; will be rewritten wholesale when the House Cut ships its first external unit.
|
| 107 |
|
- |
|
| 108 |
|
- |
<details>
|
| 109 |
|
- |
<summary>Historical H1–H4 tier list (pre-narrowing, pre-rebrand)</summary>
|
| 110 |
|
- |
|
| 111 |
|
- |
| Milestone | Design | Target | Notes |
|
| 112 |
|
- |
|---|---|---|---|
|
| 113 |
|
- |
| **H1** | MakeMachine v1 | First unit: Sando host + EveryCycle dev. Subsequent units: MNW (internal-transfer) and small-batch external sales. | Threadripper Pro WRX90 + flexible GPU bays. The dogfood design and the first revenue unit. |
|
| 114 |
|
- |
| **H2** | Mid-tier workstation | Solo operators, small labs (~$5K) | Single-CPU EPYC or TR non-Pro, 1-2 GPU bays, tower form factor. |
|
| 115 |
|
- |
| **H3** | Entry-level edge | Hobbyists, classrooms, residencies (~$2K) | Mini-ITX or SFF, single GPU, quiet, low-power. |
|
| 116 |
|
- |
| **H4** | Rack appliance | Datacenter and colo deployments (~$15K+) | 2U or 4U, 4-8 GPU bays, redundant PSU, dual NIC, OpenBMC. |
|
| 117 |
|
- |
|
| 118 |
|
- |
Each milestone was to produce: published BOM, chassis CAD, thermal model, BMC firmware bundle, EveryCycle config tuned for the platform, assembly guide. Names in this table (e.g. "MakeMachine v1") are the pre-rebrand names and are preserved for continuity; the current name is TailoredMachines.
|
| 119 |
|
- |
|
| 120 |
|
- |
</details>
|
|
105 |
+ |
Thread H's active work happens against TailoredMachines' plan, not against this repo.
|
| 121 |
106 |
|
|
| 122 |
107 |
|
### Thread I — Client API and adoption
|
| 123 |
108 |
|
|
| 170 |
155 |
|
- **Multi-client is the default, not a feature.** The daemon assumes concurrent clients from A1, even when only one is connected. The internal data model, scheduler, and audit surface are designed around N clients sharing M devices under policy; the N=1 case is just the limit. This is the structural difference between a system service and a runtime library.
|
| 171 |
156 |
|
- **Compatibility shims are clients, not daemon code.** Each protocol shim (OpenAI, llama.cpp, Ollama, vLLM, ComfyUI) is a separate process that speaks the native EveryCycle client API. The shims do not get privileged access to internals. This forces the native API to be expressive enough that the shims are thin — and keeps the daemon free of protocol-specific code paths.
|
| 172 |
157 |
|
- **Implementation languages.** Main binary is Rust, built natively for the reference Fedora downstream (glibc, RPM-packaged). Module boundary is a **stable C ABI** from a reasonable point — early enough that the second executor doesn't lock the trait shape into Rust-internals. Module *implementations* may be in any language that emits a C-ABI shared library (Rust, Zig, C). The BMC agent is a separate binary and is the leading candidate for being written in Zig rather than Rust; that decision deferred until the agent is real.
|
| 173 |
|
- |
- **Crate naming.** The daemon-internal native client API lives in `crates/api/` (renamed from `crates/serving/` on 2026-06-21). Thread J shims (OpenAI, llama.cpp, Ollama, vLLM, ComfyUI) will land as their own crates (`crates/shim-openai`, etc.) when they ship — they are not modules of `crates/api`. The HTTP "serving" framing is gone from the daemon by design.
|
|
158 |
+ |
- **Crate naming.** The daemon-internal native client API lives in `crates/api/`. Thread J shims (OpenAI, llama.cpp, Ollama, vLLM, ComfyUI) will land as their own crates (`crates/shim-openai`, etc.) when they ship — they are not modules of `crates/api`. The HTTP "serving" framing is gone from the daemon by design.
|
| 174 |
159 |
|
|
| 175 |
160 |
|
## Model stance
|
| 176 |
161 |
|
|
| 188 |
173 |
|
|
| 189 |
174 |
|
## Open questions (will be resolved iteratively)
|
| 190 |
175 |
|
|
| 191 |
|
- |
- Executor isolation: in-process dlopen + watchdog threads + structured panic handling, or out-of-process with local-socket IPC. Per executor, driven by vendor SDK stability and crash blast-radius. In-process is the default for executors that behave; out-of-process when an executor empirically destabilizes the host process. Standardizing on one glibc reference host removes libc compatibility as a forcing factor, since CUDA and ROCm SDKs target glibc natively, so sidecar separation is a stability choice rather than a packaging workaround. That argument was made for Ubuntu and survives the move unchanged: it turns on glibc, not on which distro ships it.
|
|
176 |
+ |
- Executor isolation: in-process dlopen + watchdog threads + structured panic handling, or out-of-process with local-socket IPC. Per executor, driven by vendor SDK stability and crash blast-radius. In-process is the default for executors that behave; out-of-process when an executor empirically destabilizes the host process. Standardizing on one glibc reference host removes libc compatibility as a forcing factor, since CUDA and ROCm SDKs target glibc natively, so sidecar separation is a stability choice rather than a packaging workaround. That turns on glibc, not on which distro ships it.
|
| 192 |
177 |
|
- CPU executor placement: statically linked into the base binary (always-present fallback) vs another module
|
| 193 |
178 |
|
- A1 dispatch planner: greedy heuristic only, or invest in a real optimizer up front
|
| 194 |
179 |
|
- BMC agent's actual A1-equivalent role: just enumerate Redfish, or already running on flashed OpenBMC
|