Go-pohjainen monikäyttäjä-orkestraattori, joka irrottaa dotfiles-repon
run-issues-bash-orkestraattorin itsenäiseksi tiimituotteeksi. GitHub pysyy
issue/PR-totuuden lähteenä; kevyt keskuspalvelu (flowd) hoitaa työn
omistajuuden (lease), runner-rekisterin ja telemetrian. Devaajat ja jaetut
auto-run-koneet ajavat orkestrointia eristetyissä Docker-konteissa.
Arkkitehtuurisuunnitelma (totuuden lähde): docs/flow-arkkitehtuuri.md.
flowctl(cmd/flowctl) — devaajan/adminin CLI; puhuu vain keskukseen.flowd(cmd/flowd) — keskuspalvelu: lease-manager, runner-rekisteri, telemetria-sink, GitHub-skanneri, REST + SSE -API.flow-runner(cmd/flow-runner) — runner-daemon; pull-malli, ajaa S1–S12-orkestroinnin per-ajo kovennetussa kontissa.- egress-proxy — sidecar per runner-host; egress allow-list + credentials-injektio + egress-loki.
- dashboard (
dashboard/) — read-only; metadata + lokit.
cmd/{flowctl,flow-runner,flowd}/ binäärien entrypointit
internal/ jaettu logiikka (PORT + REWRITE -paketit)
internal/prompts/files/ embedatut agentti-promptit (//go:embed)
prompts/ promptien ihmisviite (identtinen kopio)
migrations/ Postgres-skeema (golang-migrate)
deploy/ docker-compose + Dockerfilet
dashboard/ web-frontend
docs/ arkkitehtuuri + kaaviot
Vaatimukset: Go 1.26+, Docker, Postgres 16.
go build ./...
go test ./...Migraatiot ajetaan golang-migratella (CLI tai upotettu ajuri); ks.
migrations/ ja deploy/docker-compose.yml.
Kehitystyö on jäsennetty GitHub-milestoneilla suunnitelman §15-vaiheistuksen mukaan. Avoimet työt: issue-lista.
- Vaihe 0 — diagnostinen pohja: PORT-funktiot Goon testeineen, Postgres-
skeema,
flowdkäynnistyy tyhjänä. Valmis. - Vaihe 1 — MVP (runko valmis): keskitetty lease (§5,
internal/lease), Run/RunEvent-API + SSE (internal/api), GitHub-skanneri (internal/ghclient),flow-runnerpull-loop + S1–S12-orkestraattori (internal/orchestrator), kovennetun kontindocker run-flagit (internal/runnerexec, §11.1), egress-proxy (deploy/egress-proxy, §11.2/6),flowctl status, read-only dashboard. Single-tenant datassa,tenant_idskeemassa valmiina. Viimeistelyn langanpäät → milestone 1: kontti-dispatch #1, ghclient issue-fetch #2, egress-loki #3. - Vaihe 2 — Multi-tenancy + RBAC + auth → milestone 2: tenant-middleware #4, OAuth device flow #5, runner-token #6, roolit #7, App-broker #8.
- Vaihe 3 — Wizard + secrets-broker →
milestone 3:
flowctl init#9, secrets-broker #10, admin-dashboard #11. - Vaihe 4 — PR-watch + viimeistely + Taso 2 →
milestone 4:
internal/prwatch#12, deploy + Tailscale #13, gVisor opt-in #14.
Avoimet päätökset (suunnitelma §17, ei toteutustehtäviä): #15.
DB-riippuvaiset testit (internal/{store,lease,runstate,api}) ohitetaan, ellei
FLOW_TEST_DSN ole asetettu. Aja throwaway-Postgresia vasten:
docker run -d --name flow-test-pg -e POSTGRES_USER=flow -e POSTGRES_PASSWORD=flow \
-e POSTGRES_DB=flow -p 55432:5432 postgres:16
FLOW_TEST_DSN="postgres://flow:flow@localhost:55432/flow?sslmode=disable" go test ./...flow-runnerajaa orkestroinnin in-process oletuksena (kehityskoneella ei vaadita Dockeria). Tuotannon eristys = kovennettu per-ajo-kontti (internal/runnerexec,deploy/Dockerfile.orchestrator); dispatch on kytketty ajoon: kunFLOW_RUNNER_MODE=container, host luo per-ajo-worktreen ja dispatchaa orkestroinnin ephemeraaliinflow-orchestrator orchestrate <run-id>-konttiin runnerexec.Spec:n §11.1-flagein. Kontti hakee run-configinGET /v1/runs/{id}:llä; GitHub-tokenia ei koskaan välitetä env:iin (§11.3).- Skanneri pollaa GitHubia anonyymisti, jos
FLOW_GITHUB_TOKENpuuttuu (rate-limitattu). Per-tenant App-broker tulee Vaiheessa 2.