ops(alpha): self-hosted loop live (520 autonomous), briefing turn killed, tool-widening filed
This commit is contained in:
@@ -0,0 +1,47 @@
|
|||||||
|
# TASK: mopac-redmine-go — Redmine Go CLI, TOP PRIORITY (Redmine 506)
|
||||||
|
|
||||||
|
## Context
|
||||||
|
Charles's strict self-hosting directive: "working out of redmine with a
|
||||||
|
go cli." The PMO (and every vertical) must STOP using python glue for
|
||||||
|
Redmine updates — this CLI replaces it the moment it lands. Jumped to
|
||||||
|
the top of the queue 2026-08-29 by direct order.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
1. New repo `ukrrs/mopac-redmine-go` (create via Gitea API if absent —
|
||||||
|
tea token pattern; clone to ~/projects/meta/MOPAC/redmine-go).
|
||||||
|
AGPLv3 LICENSE first commit.
|
||||||
|
2. Stdlib-only Go library + CLI binary `mred`:
|
||||||
|
- Config: URL + API key via env (`MRED_URL`, `MRED_KEY`) or
|
||||||
|
`--config` env-file (0600 discipline), key never logged.
|
||||||
|
- Commands (JSON-friendly flags, machine-parseable `-o json`):
|
||||||
|
- `issue list -p MOPAC [--status open|all] [--version Beta] [--limit N]`
|
||||||
|
- `issue show ID [--with journals]`
|
||||||
|
- `issue create -p PROJ -s SUBJECT [--desc FILE|-] [--tracker feature]`
|
||||||
|
`[--priority immediate] [--category X] [--version V] [--due DATE]`
|
||||||
|
`[--parent ID] [--est HOURS] [--note TEXT]`
|
||||||
|
- `issue update ID [--status done] [--priority ...] [--category ...]`
|
||||||
|
`[--version ...] [--due ...] [--done-ratio 100] [--desc FILE|-]`
|
||||||
|
`[--note TEXT]` (note = journal)
|
||||||
|
- `version list|create -p PROJ -n NAME [--due DATE] [--status open|closed]`
|
||||||
|
- `category list|create -p PROJ -n NAME`
|
||||||
|
- `relation create FROM TO --type blocks|relates`
|
||||||
|
- Exit codes: 0 ok, 1 usage/config, 2 API error (status in stderr,
|
||||||
|
one line, parseable).
|
||||||
|
3. Library surface usable by the harness later (`redmine.Client`) —
|
||||||
|
no copy-paste temptation.
|
||||||
|
4. Fake-Redmine test suite (table-driven; the harness repo's fake server
|
||||||
|
pattern is a good reference): create/update/note/relations/versions
|
||||||
|
round-trips, key-redaction, error mapping.
|
||||||
|
5. Docs standard: README with verified quickstart (against the fake
|
||||||
|
server), command reference table, status table.
|
||||||
|
|
||||||
|
## Build discipline
|
||||||
|
ALL DEV IN DOCKER (digest-pinned builder; dev.sh/Makefile family
|
||||||
|
pattern). NEVER broad pkill. Atomic conventional commits, push origin
|
||||||
|
main. TDD red/green.
|
||||||
|
|
||||||
|
## Deliverable
|
||||||
|
`REPORT-20260829-1400-redmine-cli.md` in `~/.coordinate/inbox-pmo/`:
|
||||||
|
command surface, test results, and EXACT PMO replacement mappings (the
|
||||||
|
python operations I use today -> mred one-liners) so the PMO switches on
|
||||||
|
acceptance with zero downtime.
|
||||||
@@ -86,3 +86,4 @@
|
|||||||
2026-08-29T06:19:13-05:00 | PMO | 497 amended: per-account BW scale (100+ refs), one bootstrap seed per account, batch warm + memory cache
|
2026-08-29T06:19:13-05:00 | PMO | 497 amended: per-account BW scale (100+ refs), one bootstrap seed per account, batch warm + memory cache
|
||||||
2026-08-29T06:19:29-05:00 | PMO | 497 corrected: BW machine accounts map to CLOUDRON accounts (per-vertical API identities), not raw Linux accounts
|
2026-08-29T06:19:29-05:00 | PMO | 497 corrected: BW machine accounts map to CLOUDRON accounts (per-vertical API identities), not raw Linux accounts
|
||||||
2026-08-29T06:20:17-05:00 | PMO | identity model ticket filed (linux runtime + cloudron acting, N per account); 497 corrected
|
2026-08-29T06:20:17-05:00 | PMO | identity model ticket filed (linux runtime + cloudron acting, N per account); 497 corrected
|
||||||
|
2026-08-29T06:21:06-05:00 | PMO | identity model FINAL: 1:1 linux->BW vault (cloudron+3rd-party entries); acting identity selected per task/turn, stamped on all actions + usage
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
harness: loop: vertical=demo poll=2m0s state=state/loop redmine=projects.knownelement.com (SIGINT to stop)
|
||||||
|
harness: intake: 3 task(s) in redmine scope
|
||||||
|
harness: loop: scan: 3 task(s) in scope, 3 new/updated
|
||||||
|
harness: loop: dispatch 520 (updated 2026-08-29T06:23:26-05:00): "Alpha: V1 core summary note on 483"
|
||||||
|
harness: task 520 (redmine): "Alpha: V1 core summary note on 483" class=study -> mopac-study -> glm-4.7-flash
|
||||||
|
harness: REPORT reports/REPORT-demo-520-20260829-112526.md
|
||||||
|
harness: loop: status New -> Resolved on #520
|
||||||
|
harness: loop: noted REPORT on #520
|
||||||
|
harness: loop: dispatch 519 (updated 2026-08-29T06:23:26-05:00): "Alpha: draft briefing v0 format as note on 495"
|
||||||
|
harness: task 519 (redmine): "Alpha: draft briefing v0 format as note on 495" class=study -> mopac-study -> glm-4.7-flash
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
Context gathered. Setting up the task list, then finishing recon (Redmine 495, deploy template, remotes).Redmine 495 confirms scope and repo name `ukrrs/mopac-discourse-go`. Creating the Gitea repo now.Repo created (id 428). Cloning and checking the push credential pattern.Recon complete. Building the client repo now.Now the typed surfaces: categories, topics, posts.Now the fake-server test suite:Now the CLI:Now the fake server for the smoke test, plus dev.sh/Makefile/env.example:The smoke.sh has ordering bugs — rewriting it cleanly:Check gate green. Running the end-to-end smoke:Smoke OK. Writing the README and pushing the client:Now the live verification (before the README's claims stand):Live checks match the known state (reads 200, create 403). Committing and pushing the client:Part A complete. Wiring the dependency into the harness:Expected — nothing imports it yet. Writing Part B code first, then vendoring. Checking the TOML helpers:Now adding `BriefConfig` to the harness config:Now the Default, apply, and Validate entries:Now the Validate block — checking the current tail of Validate first:Extending the intake client with the windowed issue listing:Now the brief package core:Now delivery + orchestration:Now the Run orchestrator:Wiring the subcommand into main.go:Now the brief package test suite — fake Redmine, Gitea, and Discourse:Now config tests for `[brief]`, then vendoring and the check gate:
|
Context gathered. Setting up the task list, then finishing recon (Redmine 495, deploy template, remotes).Redmine 495 confirms scope and repo name `ukrrs/mopac-discourse-go`. Creating the Gitea repo now.Repo created (id 428). Cloning and checking the push credential pattern.Recon complete. Building the client repo now.Now the typed surfaces: categories, topics, posts.Now the fake-server test suite:Now the CLI:Now the fake server for the smoke test, plus dev.sh/Makefile/env.example:The smoke.sh has ordering bugs — rewriting it cleanly:Check gate green. Running the end-to-end smoke:Smoke OK. Writing the README and pushing the client:Now the live verification (before the README's claims stand):Live checks match the known state (reads 200, create 403). Committing and pushing the client:Part A complete. Wiring the dependency into the harness:Expected — nothing imports it yet. Writing Part B code first, then vendoring. Checking the TOML helpers:Now adding `BriefConfig` to the harness config:Now the Default, apply, and Validate entries:Now the Validate block — checking the current tail of Validate first:Extending the intake client with the windowed issue listing:Now the brief package core:Now delivery + orchestration:Now the Run orchestrator:Wiring the subcommand into main.go:Now the brief package test suite — fake Redmine, Gitea, and Discourse:Now config tests for `[brief]`, then vendoring and the check gate:Test data bug — closed stamp lands outside the window. Fixing:The briefing renders beautifully — the fallback log just goes to stdout instead of `out`. Threading the writer through:
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
I have full context: sibling pattern (mopac-bitwarden-go), harness fake-server test style, PMO python glue to replace, creds at `~/.creds/redmine.env`, Redmine at projects.knownelement.com. Setting up the work plan.Toolchain verified. Creating the repo via Gitea API (idempotent check first):Repo created. Cloning and seeding with LICENSE:Harness done. Now TDD config package — tests first (red):Red confirmed. Implementation:Green. Two atomic commits:
|
||||||
Reference in New Issue
Block a user