82 lines
5.1 KiB
Markdown
82 lines
5.1 KiB
Markdown
# MOPAC Operations Manual — managing the work queue via Redmine
|
|
|
|
Audience: Charles + any COS/human operator. The harness loop(s), PMO, and worker turns all
|
|
take their direction from the MOPAC Redmine project. If it is not written in Redmine, it
|
|
does not exist. Version 1.0, 2026-08-29. Canonical copy: ukrrs/mopac-pmo `OPS-MANUAL.md`;
|
|
mirrored into the harness repo docs and referenced by the morning briefing.
|
|
|
|
## 1. The model in one paragraph
|
|
|
|
Tickets in the **MOPAC** project (projects.knownelement.com) are the single source of truth.
|
|
A machine daemon (the harness loop, containerized, restart-policy) scans a scope —
|
|
currently `project=mopac, version=Beta, status=New` — and for each ticket runs one bounded
|
|
LLM turn with tools (files, allow-listed bash), writes a REPORT, posts a journal note, and
|
|
sets status per the map (New -> Resolved). Humans and PMO verify. Everything else
|
|
(planning, priorities, wiring instructions) is expressed by editing tickets.
|
|
|
|
## 2. Labeling — what each field means
|
|
|
|
| Field | Values | Meaning / effect |
|
|
|---|---|---|
|
|
| Tracker | Feature / Support / Task | Feature=build, Support=ops/editorial, Task=coordination. Bug is RESERVED for defects only. |
|
|
| Status | **New** | = work queue. The loop (and PMO) only pick up New. |
|
|
| | **In Progress** | = parked/claimed. Invisible to the loop. Use to hold blocked work. |
|
|
| | **Resolved** | = worker claims done. Awaiting human/PMO verification. |
|
|
| | **Feedback** | = needs Charles input. Check these daily. |
|
|
| | Closed / Rejected | verified-done / not-a-bug-duplicate-wontfix. |
|
|
| Version | Selfhost Alpha / Beta / Production | The loop scans ONE version at a time (config `scope_query`). Currently Beta. When Beta closes, PMO flips scope to Production — one line in `harness.toml`. |
|
|
| Priority | Immediate > Urgent > High > Normal > Low | Within a version, Immediate is drained first. |
|
|
| Category | Briefing, Deployment, Documentation, Infrastructure, Integrations, Model Selection, Quota & Backpressure, Secrets, Task Management | Reporting/Filter only — no routing effect. |
|
|
| **Class (custom field)** | study / read / code / review / architecture / summarize / vision / primary | **Model routing.** Missing = default (currently `code` -> glm-5.2). `study`/`read` -> flash (cheap triage). Set it when cheap-and-simple is fine. |
|
|
| Due date | date | Ordering + morning briefing "decisions needed" surfacing. |
|
|
| Est. hours | number | Briefing + quota planning. |
|
|
| Relations | blocks / relates | Sequencing. `A blocks B` = B waits. |
|
|
|
|
## 3. Recipes — how to do things
|
|
|
|
- **Add work**: create ticket, tracker Feature/Task, version = current active version,
|
|
status New, priority by urgency, Class if you care about model cost. One ticket = one
|
|
deliverable. Put acceptance criteria in the description — turns are only as good as
|
|
the ticket.
|
|
- **Requeue / redo**: set status New and add a short note why (the note bump also
|
|
refreshes the loop's change detection).
|
|
- **Park work** (blocked on creds/wiring/humans): status In Progress + note what unblocks it.
|
|
- **Ask Charles something**: status Feedback + note; it surfaces in the next morning briefing.
|
|
- **Escalate**: priority Immediate (drained first within the version).
|
|
- **Guide an in-flight or finished piece**: journal note on the ticket. Notes are the
|
|
conversation thread between you, the PMO, and every worker turn.
|
|
- **Stop everything**: `docker compose -f ~/projects/meta/MOPAC/harness/deploy/compose.yaml down`
|
|
(kill switch). Start again with `up -d` (see deploy/runbook.md for env: HARNESS_UID=1001,
|
|
HARNESS_GID=1001, DOCKER_GID=988).
|
|
|
|
## 4. Reading what happened
|
|
|
|
- Each turn leaves: `reports/REPORT-demo-<id>-<ts>.md` (in the harness repo, committed) +
|
|
a journal note on the ticket + `state/loop/loop.jsonl` (machine trail) +
|
|
`state/loop/status.json` (live heartbeat: scans, dispatched, reports, last errors).
|
|
- False "Resolved": a turn can hit limits and still mark Resolved. Verification is human/
|
|
PMO duty — check the REPORT has real content and the repo has real commits before
|
|
trusting a status. (Known failure modes, all fixed 8/29: docker perms, model routing,
|
|
round budgets. Residual: watch for round_limit REPORTs.)
|
|
- Morning briefing (495): arrives 0630 CST via Redmine note on 495 + Discourse when wired.
|
|
|
|
## 5. Secrets & wiring
|
|
|
|
Keys never live in tickets or the repo. Env files 0600 under `~/.coordinate/secrets/` and
|
|
`~/.creds/`. Bitwarden/Vault become the store once keyproxy (497) is live. Charles wiring
|
|
nights: postfix/SMTP, BW, Signal, Discord, Google — each unblocks a fleet ticket.
|
|
|
|
## 6. Queue hygiene (weekly)
|
|
|
|
- Empty version = close the version (roadmap hygiene; see the Phase 3 absorption 8/29).
|
|
- Bug tracker = defects only. Duplicates: `relates` + Rejected with note.
|
|
- The loop scans one version; keep exactly one active version, others closed or future.
|
|
|
|
## 7. Ticket template (copy-paste)
|
|
|
|
Subject: <imperative one-liner>
|
|
Tracker: Feature | Version: Production | Status: New | Priority: High | Class: code
|
|
## Context <why + links>
|
|
## Scope <numbered, testable>
|
|
## Acceptance <checkable list, includes "tests green, committed, pushed">
|