Skip to main content

Roadmap

Implementation is phased, one commit series per phase, each with a gate that has to be green before the next one starts. PLAN.md in the repository holds the full design and the test matrix the gates refer to.

PhaseContentGate
0Model contract, validator, .stacklog writer + redaction, offline testsT0, T1 green on fixturesdone
1h1-nvidia bootstrap, stack, verify, 8 GB catalogT2, T3, T5 on an NVIDIA hostdone
2h2-amd — localhost, VulkanT2, T3, T5 on an AMD hostdone
3skills/lmstack interactive installerT6done
4pi-config, lmstack-ask, Claude Code and opencode bridgesT4done
5This site, and the Pages workflow that publishes itsite builds, links resolvedone
6h3-template and CI running the offline suite on PRsCI greendone

All six phases are in. What follows is maintenance and whatever the next piece of hardware demands.

Phase 0 built the validator before the playbooks, so h1-nvidia and h2-amd were written against an already-enforced schema. That ordering is what keeps two intentionally duplicated playbook trees from silently diverging — there are no shared Ansible roles here, on purpose, and the validator plus the golden render files are what hold the line instead.

The template

hosts/h3-template/ is a host that is deliberately incomplete: the directory layout, the four playbooks, and the engine templates, with three CHANGE_ME_ placeholders and an empty active_models. make validate and the render suite skip any directory under hosts/ whose name ends in -template, so an unfilled skeleton never fails make test.

That exemption is also how a template rots, so tests/template_test.sh copies it into a scratch directory on every run, fills the placeholders, and validates the result. It also asserts the template's .j2 files match h1-nvidia's apart from comments — improving the real host's compose template without carrying the change across turns the suite red. See adding a host.

What is deliberately not planned

A shared Ansible role library. Two hosts is not enough duplication to justify the indirection, and the failure mode of a shared role — a change made for NVIDIA quietly altering the AMD path — is worse than the duplication. If a fourth engine arrives this gets revisited.

Prometheus and Grafana. LiteLLM's UI is backed by Postgres and already carries request logs, latency, and token counts. One box serving a couple of models does not need an exporter to keep running. See monitoring.

Multi-user auth. The gateway has one master key, and per-user keys created through the LiteLLM UI. Anything beyond that is an identity system, and this repo is not going to grow one. Put the host on a private network instead — remote access.

Automatic model downloads on a schedule. Weights are large and CDNs drop long transfers. Downloads happen when you add a model and ask for it, where you are watching.

Test tiers

The gates above refer to these. Only T0 and T1 run without hardware.

TierScopeNeeds
T0Static: schema, lint, redaction, alias parity, editor/server consistencynothing
T1Template rendering and the loopback-binding invariantnothing
T2Bootstrap: Docker, GPU runtime, firewalla host
T3Bring-up: health gates, aliases serveda host with a GPU
T4Control host: pi providers, sync, bridgesT4.1 and T4.6 offline; the rest need a running host
T5Negative: over-budget, missing secret, unauthenticated requesta host
T6Skill: probe classification, install path binding, logging disciplineT6.1–T6.2 offline
T7Template: layout parity, no drift from the reference host, instantiationnothing
T8Plugin and marketplace manifests, skill name uniqueness, no build-time path placeholdernothing
T9Sanitizer strips invisible and bidi codepoints, task store invariantsnothing
T10Forge drives tmux, ledger never fabricates a durationnothing
T11Cleanup reclaims finished worktrees and branches, refuses to touch unmerged work or mainnothing

make test is T0, T1, T4.1, T4.6, T6.1, T6.2, T7, T8, T9, T10, T11 — everything that can be proven without hardware, and what CI runs on every pull request. The rest are a manual checklist in PLAN.md, because a test that needs a GPU and forty minutes is not a test anyone runs.