# TASK: Harness skeleton (build phase 2) ## Objective Initial Go implementation in /home/reachableceo/projects/meta/MOPAC/harness per its DESIGN.md (READ IT FIRST, esp. "MVP demo bar" + "Model selection layer" sections, appended 2026-08-28 ~19:00): config load, conductor loop (single-shot mode), redmine-pull intake (list issues in scope), bounded turn via LiteLLM (OpenAI-compatible, base_url+key from config), REPORT file writeback, exec tool (bash, allow-listed). ## Constraints - Read docs/PORTING-NOTES-*.md first if present. - `go build ./...` and `go vet ./...` clean; no external deps beyond stdlib + tree-sitter/gomft if genuinely needed (prefer stdlib for v1). - Config: harness.toml (scope query, litellm url/key-ref, paths) + example file. - Single-shot: `harness once` runs ONE iteration then exits (chainable, no daemon). - Dry-run mode: `harness once --dry-run` = intake+plan only, no LLM call. - MODEL ROUTING v0: harness.toml `[models]` tier map (aliases `mopac-study` -> glm-4.7-flash, `mopac-code` -> glm-5.2, `mopac-review` -> glm-5-turbo, `mopac-primary` -> glm-5.3) + per-TASK `class` field; requests go out with the concrete model name resolved from the map. No heuristic code in v0. - MVP DEMO (the acceptance bar): `harness once` on a demo issue whose prompt is "tell me about yourself" through LiteLLM; the GLM self-description comes back and lands as the REPORT. Wire this as an example/smoke path. - Tests for loop/gate logic (table-driven, stdlib testing). - Commit incrementally; REPORT lists what works, what's stubbed, next chunk.