Files
foreman/prompts/README.md
T
steve 0526bada90 docs: land prior ADR + prompt updates
Commit pre-existing uncommitted working-tree changes that predate the
license/public-readiness work — NOT authored in this session, just flushed so
they're not lost: ADR-0003/0005/0009/0012 edits, the new ADR-0013
(embeddings-bypass + two-slot residency, already referenced by CLAUDE.md), and
the phase-0..3 prompt revisions + prompts/README.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 20:33:39 -04:00

62 lines
2.9 KiB
Markdown

# foreman build prompts
This directory drives the autonomous Claude Code build of foreman.
## How to run
Start with **`phase-0-kickoff.md`** — it is the master driver. Paste it (or the
command below) into Claude Code from the repo root. It reads `CLAUDE.md`, the
ADRs in `docs/adr/`, and the `go-llm` / `steveternet` sources, then runs phases
1 → 6 **autonomously** to a finished, deployable foreman. You do **not** paste the
individual phase files — the kickoff reads them as it goes.
Kickoff command:
```
Read and follow prompts/phase-0-kickoff.md. The per-phase specs it references
(prompts/phase-1.md … phase-6.md) are in this same prompts/ directory. This is a
fully autonomous run: execute all six phases in order to a finished, working
deliverable without pausing between them. Honor docs/adr/ (note the new 0013) and
CLAUDE.md as source of truth. For the two cross-repo changes (llm.Foreman() in
steve/go-llm and the docker-compose in steve/steveternet), open a branch and PR
on each for my review — do not commit to their main. When done, report what each
phase built, the PR links, any ADRs you added, and a smoke-test checklist.
```
## What each phase produces
1. `phase-1` — scaffold, config, SQLite store, health, CI, Dockerfile.
2. `phase-2` — Ollama client + model poller + native passthrough + embedding
bypass. The Mac is usable as a `go-llm` target after this.
3. `phase-3` — durable queue + single worker + drain-by-model. **M0 complete.**
4. `phase-4` — async `/jobs` + job IDs + state webhooks + artifacts. The headline
queue-and-webhooks capability.
5. `phase-5` — Go client package (sync facade) + `llm.Foreman()` in `go-llm`.
6. `phase-6` — deploy: steveternet compose + Traefik, `.env.example`, deploy
docs, model-pull script.
## Conventions during the run
- Each phase must pass the gates before continuing: `go build ./...`,
`go vet ./...`, `go test -race -count=1 ./...`, and `go mod tidy` +
`git diff --exit-code go.mod go.sum`.
- Commits go to foreman's `main` with conventional-commit messages; `progress.md`
gets a dated entry each phase.
- A decision not covered by `CLAUDE.md` or an ADR → record a new ADR
(append-only, next number after 0013) and continue.
## Cross-repo caveat (phases 5 & 6)
The `llm.Foreman()` constructor lives in **steve/go-llm** and the deploy compose
in **steve/steveternet**. Those changes go on a **branch + PR for review — never
their main.**
## Known caveat (phase 6)
Phase 6 mirrors the Traefik/compose conventions from sibling services
(`kalimdor/orgrimmar/warhol-queue`, `ratchet`, `mort`) read via the gitea MCP.
Those reads were intermittently erroring during planning. **If phase 6 can't read
them, paste a sibling `docker-compose.yml` (e.g. ratchet's) straight into the
session** so it can mirror the network name, entrypoint, certresolver, and
router/service labels rather than inventing them.