chore: ops manual moved to harness repo docs/OPERATIONS.md
This commit is contained in:
@@ -1,81 +0,0 @@
|
||||
# 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">
|
||||
Reference in New Issue
Block a user