Files
mopac-pmo/archive/TASK-20260829-1530-beta-finish.md
T

2.4 KiB

TASK: harness Beta finish — retry writebacks (525) + SMS notifier (522) + briefing pipeline (495)

Context

Redmine 525, 522, 495 — all in this repo (~/projects/meta/MOPAC/harness, main, last commit 19d61a0). Loop turns left UNCOMMITTED WIP that DOES NOT COMPILE. You are the consolidated finish turn. Three tickets, three surfaces, serial in one session.

Current WIP state (verify with git status)

  • internal/writeback/retry.go (untracked) + internal/writeback/redmine.go (modified) — 525
  • internal/notify/ (untracked) — 522
  • briefing surface EXISTS and is committed: 064aed0 + vendored discourse client — 495

Part 1 — 525 retry/backoff (FIX COMPILE FIRST)

Exact current errors: retry.go:74 field and method with the same name Backoff (other decl L35); redmine.go:186-210 attempts is func() int vs int (mismatched operations). Fix types, then finish per ticket: bounded retries w/ backoff on status/note writes, verification re-read after write, on final failure park task (leave New + local flag) and surface last_writeback_error in heartbeat status.json. Tests (fake server, incl. a 502-then-success case).

Part 2 — 522 native notifier

Finish internal/notify: [notify] config section, stdlib net/smtp send, rate-limit, collapsed repeats, offline queue (disk), redaction rules, events: turn complete/failed, quota deferral, scan error, daemon start/stop. Tests with a local fake SMTP server.

Part 3 — 495 briefing pipeline

Wire: render 0630 CST brief (executive line, per-vertical table from open issues, quota line from quota state, review-chain line, decisions-needed, system health) -> deliver as Redmine journal note on 495 + Discourse topic if creds present (graceful skip + log otherwise). Schedule hook in daemon (configurable time, default 06:00 CST render for 06:30 delivery). Test render against fake Redmine.

Discipline (hard requirements)

  • Docker builders WORK in your environment (docker group fixed): ./dev.sh check MUST be green before EACH commit.
  • One atomic conventional commit per part (3+ commits), then git push origin main.
  • No broad pkill. No new deps beyond stdlib (+ existing vendored).
  • Exit 0 only if all three parts are committed, pushed, check-green.

Deliverable

REPORT-20260829-1530-beta-finish.md in ~/.coordinate/inbox-pmo/: per-ticket commit hashes, test counts, smoke evidence, anything deferred (e.g. live Discourse send awaiting 1900 creds). Do NOT write to Redmine — PMO handles tickets.