pmo: prod pulled to Mon 0500 — 5 parallel lanes + compressed due dates
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
# TASK: Cloudron API Go client (Redmine 512)
|
||||
|
||||
ALL DEV IN DOCKER (digest-pinned builder, dev.sh family). NEVER broad pkill. TDD red/green. Atomic conventional commits, push origin main. Exit 0 only if tests green + pushed. REPORT-20260829-1600-<name>.md to ~/.coordinate/inbox-pmo/ (command surface, test counts, smoke). NO Redmine writes — PMO handles the ticket. Stdlib-only Go. AGPLv3 LICENSE first commit. Create repo ukrrs/<repo> via Gitea API (tea token, ~/.creds) if absent, clone to ~/projects/meta/MOPAC/<dir>.
|
||||
|
||||
## Scope
|
||||
CLI+library for Cloudron API: app list/status, app restart/stop/start, backups trigger/list, event log tail. CLOUDRON_URL/CLOUDRON_TOKEN env. Fake-server tests. No live calls.
|
||||
@@ -0,0 +1,6 @@
|
||||
# TASK: Gitea Go client (Redmine 508)
|
||||
|
||||
ALL DEV IN DOCKER (digest-pinned builder, dev.sh family). NEVER broad pkill. TDD red/green. Atomic conventional commits, push origin main. Exit 0 only if tests green + pushed. REPORT-20260829-1600-<name>.md to ~/.coordinate/inbox-pmo/ (command surface, test counts, smoke). NO Redmine writes — PMO handles the ticket. Stdlib-only Go. AGPLv3 LICENSE first commit. Create repo ukrrs/<repo> via Gitea API (tea token, ~/.creds) if absent, clone to ~/projects/meta/MOPAC/<dir>.
|
||||
|
||||
## Scope
|
||||
CLI+library for Gitea: repo create/list, branch list, commit status, PR create/list/merge, token-scoped auth via env GITEA_URL/GITEA_KEY. Table-driven tests against a fake Gitea (harness fake-server pattern). Used later by harness turns for PR flow.
|
||||
@@ -0,0 +1,6 @@
|
||||
# TASK: keyproxy live Bitwarden/Vault backends + MCP/CLI frontend (Redmine 497)
|
||||
|
||||
ALL DEV IN DOCKER (digest-pinned builder, dev.sh family). NEVER broad pkill. TDD red/green. Atomic conventional commits, push origin main. Exit 0 only if tests green + pushed. REPORT-20260829-1600-<name>.md to ~/.coordinate/inbox-pmo/ (command surface, test counts, smoke). NO Redmine writes — PMO handles the ticket. Stdlib-only Go. AGPLv3 LICENSE first commit. Create repo ukrrs/<repo> via Gitea API (tea token, ~/.creds) if absent, clone to ~/projects/meta/MOPAC/<dir>.
|
||||
|
||||
## Scope
|
||||
Repo EXISTS: ~/projects/meta/MOPAC/keyproxy (v0 done). Add: Bitwarden (Vaultwarden) REST backend (login w/ env creds, list/get items, attachments ref) behind the existing interface with FAKE-server tests; Vault backend stub w/ interface + fake; MCP-ish CLI frontend (get/put/rotate placeholder<->real resolution). LIVE credential wiring happens tonight 1900 — build everything testable without live creds.
|
||||
@@ -0,0 +1,6 @@
|
||||
# TASK: Linkwarden Go client (Redmine 502)
|
||||
|
||||
ALL DEV IN DOCKER (digest-pinned builder, dev.sh family). NEVER broad pkill. TDD red/green. Atomic conventional commits, push origin main. Exit 0 only if tests green + pushed. REPORT-20260829-1600-<name>.md to ~/.coordinate/inbox-pmo/ (command surface, test counts, smoke). NO Redmine writes — PMO handles the ticket. Stdlib-only Go. AGPLv3 LICENSE first commit. Create repo ukrrs/<repo> via Gitea API (tea token, ~/.creds) if absent, clone to ~/projects/meta/MOPAC/<dir>.
|
||||
|
||||
## Scope
|
||||
CLI+library for Linkwarden REST: bookmark create/list/search, tag create/list, collection list, tag-driven intake polling (list new since cursor). Auth LW_URL/LW_KEY env. Fake-server tests. Feeds harness intake later.
|
||||
@@ -0,0 +1,6 @@
|
||||
# TASK: Generic REST API driver (Redmine 511)
|
||||
|
||||
ALL DEV IN DOCKER (digest-pinned builder, dev.sh family). NEVER broad pkill. TDD red/green. Atomic conventional commits, push origin main. Exit 0 only if tests green + pushed. REPORT-20260829-1600-<name>.md to ~/.coordinate/inbox-pmo/ (command surface, test counts, smoke). NO Redmine writes — PMO handles the ticket. Stdlib-only Go. AGPLv3 LICENSE first commit. Create repo ukrrs/<repo> via Gitea API (tea token, ~/.creds) if absent, clone to ~/projects/meta/MOPAC/<dir>.
|
||||
|
||||
## Scope
|
||||
Declarative REST driver: config-defined endpoints (method, path, params, auth type, pagination), CLI to invoke named ops, JSON output. Think minimal stanza->call mapping so other fleet clients reuse it. Fake-server tests incl pagination + auth styles.
|
||||
@@ -102,3 +102,4 @@
|
||||
2026-08-29T10:05:24-05:00 | PMO | hb 10:02 audit: 522+495 5.2 turns were REAL (24-27 toolcalls; internal/notify/ exists) but starved at 12 rounds -> false Resolved x2. Fix: max_rounds=30 + WIP-commit discipline in refeed notes; both reopened New. Cloudron flapped 3x today (502/502/500) — writeback losses real (519 case) -> filed 526 retry/backoff @Beta. 497 parked. Loop picks 522 (or 526) next scan
|
||||
2026-08-29T14:08:06-05:00 | PMO | hb 14:02 (4 stacked: PMO quota-walled 10-14). Loop status: 526 turn delivered writeback/retry.go WIP (NON-compiling, uncommitted); 522 second turn + 495 second turn killed by DNS outage 15:31-15:34Z (Tailscale/embedded-DNS blip, IPv6-only record; recovered 14:0x, full path verified from container). Deduped 525/526 (526 Rejected, rel #93). Released 525/522/495 with compile-error + WIP-commit notes. Beta open: 525/522/495 + 497 parked
|
||||
2026-08-29T15:05:15-05:00 | PMO | hb 15:02 ROOT CAUSE DAY: loop turns could NEVER build/test — docker.sock mounted but permission denied (root:988 vs uid 1001); 3 more false Resolves (525/522/495, 30/30 rounds, 4.3M prompt tokens, zero commits, retry.go still broken). FIXED: group_add DOCKER_GID to compose + recreated w/ full env (first recreate dropped HARNESS_UID=1001 -> crash loop, re-upped correct); docker server 29.7.2 reachable from loop container, healthy. Consolidated finish turn work-q18 dispatched on 5.2 (all 3 tickets, check-green-before-commit, push). Token-burn evidence -> 516. Loop idle (scope 0) until PMO refeeds post-q18
|
||||
2026-08-29T15:38:43-05:00 | PMO | CHARLES: full prod by Mon 8/31 0500 (versions: Beta due 8/29, Prod due 8/30 internal = buffer). 5 parallel lanes launched on distinct repos: 508 gitea-go, 502 linkwarden-go, 511 rest-driver, 512 cloudron-go, 497 keyproxy (fake-tested, live creds 1900). q18: 525+522 committed+pushed, 495 in progress. Harness-core queue (515/516/517/496/492/493) serial after q18. Wave 2 at 1900 wiring: 504/505/501/503. Wave 3 overnight: 500/509/510/513/514/507
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Compile errors confirmed: `Backoff` field/method collision in retry.go, and `Attempts` method used as a value in redmine.go. Let me survey the loop, config, and existing tests before fixing.Now let me look at the loop state, gate, and remaining files to understand the full picture:Now let me examine the brief package (Part 3 surface), go.mod, and the conductor wiring:Let me check the spec doc for the briefing format and the existing tests:I have the full picture now. Starting with the environment chore commit, then Part 1. Let me check the example config first:Committing the environment fix first, then Part 1:Now Part 1 — fixing the compile errors. First the config fields:Now fix retry.go (rename method) and redmine.go (Attempts call + verification re-read):Now redmine.go — fix the `attempts`/`Backoff` usage and add the `IssueState` verification re-read:Compile fixed. Now completing the 525 feature — park-on-failure, heartbeat error surfacing, and retry logging:Now heartbeat — add `parked` counter and `last_writeback_error`:Now the daemon dispatchTask writeback tail — note → status → verify re-read, park on final failure:Let me refine `Retryable` in retry.go — transport errors should retry regardless of the legacy `Temporary()` verdict:Now the tests — retry policy tests first:Now the writeback retry tests against a fake server (502-then-success, exhaustion, non-retryable, verify re-read):The fake Redmine GET handler must now return the status name (the verify re-read needs it). Updating the daemon test fake and adding the park tests:That edit was wrong — it clobbered the function body. Let me inspect and repair:Two issues: the defaults test needs `config.Default()` (zero-value literal has retries=0 by design), and the notify WIP breaks `./...` builds — I'll minimally unbreak it now and rewrite it fully in Part 2. Checking testConfig first:Now the minimal notify unbreak (full rewrite comes in Part 2):All green. Updating the example config and README for 525:Now the full check gate for Part 1:Check green. Committing Part 1 (525):525 pushed. Now Part 2 — the native notifier. Full rewrite of `internal/notify` plus `[notify]` config:Now the full notifier rewrite:Now wire the notifier into the loop daemon:Let me harden `send` with proper deadlines (smtp.SendMail has none — a black-holed host would stall the loop):Now the remaining event wiring — turn complete/failed, park, quota defer, and a bounded stop-event context:Pre-existing gofmt drift across the repo — let me check whether my edits introduced new deviations:Build passes. Now the notify tests with a local fake SMTP server:Now the loop-level wiring test and config tests:Two events queue (daemon_start + turn_complete) — correct behavior. Fixing the assertion:Now docs — example config, README, CLI usage:Check green. Committing Part 2 (522) and pushing:Part 3 — 495 briefing pipeline. Reading the existing brief tests for fake-server patterns:Full picture acquired. Implementing Part 3 — config additions first:Now the sources — open-issue tables, decisions-needed, system health:
|
||||
Reference in New Issue
Block a user