Migrate the forgejo verb surface (40 leaves) into ward-kdl (supersedes coily#186) #75

Closed
opened 2026-06-09 05:58:41 +00:00 by coilysiren · 1 comment
Owner

Depends on #73 (ward-kdl runtime). Part of coily->ward wholesale merge. Supersedes coily #186 (coilyco-bridge/coily#186).

Problem

coily is merging into ward wholesale. coily's forgejo verb surface is 40 hand-written Go leaves across cmd/coily/ops_forgejo_*.go. They migrate into ward as ward-kdl declarations, not as ported Go. This issue tracks that migration.

Old coily #186 ("backfill the forgejo OpenAPI spec, stop hand-rolling") is superseded: its design tension (safety behaviors the generator can't model) is resolved by the ward-kdl runtime (#73), and its generator question is split out into the generator/engine issue.

The 40 leaves (one commit each; grouped tickets, not per-leaf tickets)

Don't cut 40 tickets - they share one cli-guard spine, one transport, and reduce to the 8 shapes in #73. Migrate per group, one leaf per commit inside each group.

  • issue (ops_forgejo_issue.go + ops_forgejo_issue_label.go) - create, list, view, edit, comment, close, reopen, delete; label add/remove/set. (11)
  • label (ops_forgejo_label.go) - create, list, edit, delete. (4)
  • milestone (ops_forgejo_milestone.go) - create, list, view, edit, close, reopen, delete. (7)
  • release (ops_forgejo_release.go) - create, list, view, edit, delete, upload-asset (multipart, shape 7). (6)
  • repo (ops_forgejo_repo.go) - list, view, create, edit, fork, archive, delete; topics list/set. (9)
  • actions (ops_forgejo_actions.go) - task list, task logs (job-walk, shape 8). (2)
  • admin/doctor (ops_forgejo.go) - admin user list/create, admin auth list, doctor check. NOTE: these use the in-pod k3s kubectl exec path (runForgejo/forgejoLocalArgv), NOT the HTTP API - a second transport the ward-kdl runtime must support or these stay as-is. (4)

Total: 40 HTTP leaves + 4 exec leaves. pr create is disabled (merge straight to main) - drop or carry the disabled stub.

Safety carry-over

8 create/edit leaves carry stampPolicySkipped (metacharacter-gate opt-out): issue create/edit, label create/edit, milestone create/edit, release create/edit. Their ward-kdl decl needs the opt-out flag (#73). Every mutating leaf must opt into the 301-refusal primitive.

Sequence

  1. #73 lands the runtime + vertical slice.
  2. Migrate group by group (issue -> label -> milestone -> release -> repo -> actions), one leaf per commit, parity-checked against the current coily verb.
  3. The generator (separate issue) backfills the long tail once the hand-migrated groups prove the shapes.

Acceptance

  • All 40 HTTP leaves declared in ward-kdl with parity to today's coily verbs.
  • admin/doctor exec leaves either ported (runtime supports the exec transport) or explicitly deferred with a note.
  • coily #186 closed as superseded.
Depends on #73 (ward-kdl runtime). Part of coily->ward wholesale merge. Supersedes coily #186 (`coilyco-bridge/coily#186`). ## Problem coily is merging into ward wholesale. coily's forgejo verb surface is 40 hand-written Go leaves across `cmd/coily/ops_forgejo_*.go`. They migrate into ward as **ward-kdl** declarations, not as ported Go. This issue tracks that migration. Old coily #186 ("backfill the forgejo OpenAPI spec, stop hand-rolling") is superseded: its design tension (safety behaviors the generator can't model) is resolved by the ward-kdl runtime (#73), and its generator question is split out into the generator/engine issue. ## The 40 leaves (one commit each; grouped tickets, not per-leaf tickets) Don't cut 40 tickets - they share one cli-guard spine, one transport, and reduce to the 8 shapes in #73. Migrate per **group**, one leaf per commit inside each group. - **issue** (`ops_forgejo_issue.go` + `ops_forgejo_issue_label.go`) - create, list, view, edit, comment, close, reopen, delete; label add/remove/set. (11) - **label** (`ops_forgejo_label.go`) - create, list, edit, delete. (4) - **milestone** (`ops_forgejo_milestone.go`) - create, list, view, edit, close, reopen, delete. (7) - **release** (`ops_forgejo_release.go`) - create, list, view, edit, delete, upload-asset (multipart, shape 7). (6) - **repo** (`ops_forgejo_repo.go`) - list, view, create, edit, fork, archive, delete; topics list/set. (9) - **actions** (`ops_forgejo_actions.go`) - task list, task logs (job-walk, shape 8). (2) - **admin/doctor** (`ops_forgejo.go`) - admin user list/create, admin auth list, doctor check. NOTE: these use the in-pod `k3s kubectl exec` path (`runForgejo`/`forgejoLocalArgv`), NOT the HTTP API - a second transport the ward-kdl runtime must support or these stay as-is. (4) Total: 40 HTTP leaves + 4 exec leaves. `pr create` is disabled (merge straight to main) - drop or carry the disabled stub. ## Safety carry-over 8 create/edit leaves carry `stampPolicySkipped` (metacharacter-gate opt-out): issue create/edit, label create/edit, milestone create/edit, release create/edit. Their ward-kdl decl needs the opt-out flag (#73). Every mutating leaf must opt into the 301-refusal primitive. ## Sequence 1. #73 lands the runtime + vertical slice. 2. Migrate group by group (issue -> label -> milestone -> release -> repo -> actions), one leaf per commit, parity-checked against the current coily verb. 3. The generator (separate issue) backfills the long tail once the hand-migrated groups prove the shapes. ## Acceptance - All 40 HTTP leaves declared in ward-kdl with parity to today's coily verbs. - admin/doctor exec leaves either ported (runtime supports the exec transport) or explicitly deferred with a note. - coily #186 closed as superseded.
Author
Owner

Closing: all 40 HTTP leaves are declared in cmd/ward-kdl/ward-kdl.forgejo.guardfile.kdl - issues (8), issue-labels (4), labels (5), milestones (5), releases (5), repos (5), orgs (4), pulls (2), tasks (1), release-assets (1) - at parity with the coily verbs. The 4 admin/doctor exec leaves (k3s kubectl exec path) are deferred to #81 (exec-dialect runtime), as this issue's acceptance allowed. Rolled under epic #91. coilyco-bridge/coily#186 closed as superseded.

Closing: all 40 HTTP leaves are declared in `cmd/ward-kdl/ward-kdl.forgejo.guardfile.kdl` - issues (8), issue-labels (4), labels (5), milestones (5), releases (5), repos (5), orgs (4), pulls (2), tasks (1), release-assets (1) - at parity with the coily verbs. The 4 admin/doctor exec leaves (k3s kubectl exec path) are deferred to #81 (exec-dialect runtime), as this issue's acceptance allowed. Rolled under epic #91. coilyco-bridge/coily#186 closed as superseded.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
coilyco-flight-deck/ward#75
No description provided.