ops forgejo issue: add read + state verbs #70

Closed
opened 2026-05-25 00:19:37 +00:00 by coilysiren · 0 comments
Owner

Problem

coily ops forgejo issue create landed in coilysiren/coily#69. The other gh issue shapes (list, view, close, reopen, edit, comment, delete) have direct forgejo API equivalents but no coily surface, so an agent still has to drop to curl + SSM for read or state-transition work.

Scope

Add the following verbs under coily ops forgejo issue:

  • list --repo <owner/name> [--state open|closed|all] [--limit N] -> GET /repos/{owner}/{repo}/issues
  • view --repo <owner/name> --number N -> GET /repos/{owner}/{repo}/issues/{n}
  • close --repo <owner/name> --number N -> PATCH /repos/{owner}/{repo}/issues/{n} with {state: "closed"}
  • reopen --repo <owner/name> --number N -> PATCH /repos/{owner}/{repo}/issues/{n} with {state: "open"}
  • edit --repo <owner/name> --number N [--title T] [--body-file PATH] -> PATCH /repos/{owner}/{repo}/issues/{n}
  • comment --repo <owner/name> --number N --body-file PATH -> POST /repos/{owner}/{repo}/issues/{n}/comments
  • delete --repo <owner/name> --number N -> DELETE /repos/{owner}/{repo}/issues/{n} (forgejo requires admin; verb stays exposed but server enforces auth)

Shape mirrors the existing create verb: token from /forgejo/api-token SSM, --body-file for any prose payload (lockdown metacharacter gate forbids inline markdown), slug validated via parseForgejoRepoSlug, audit row stamps verb + flag values.

Why

Closes the read + state surface so the AGENTS.md "Default TODO Destination" workflow doesn't need curl any more. First noun of the 5-noun sweep tracked in this thread (issue / pr / repo / release / label).

**Problem** `coily ops forgejo issue create` landed in coilysiren/coily#69. The other `gh issue` shapes (`list`, `view`, `close`, `reopen`, `edit`, `comment`, `delete`) have direct forgejo API equivalents but no coily surface, so an agent still has to drop to curl + SSM for read or state-transition work. **Scope** Add the following verbs under `coily ops forgejo issue`: - `list --repo <owner/name> [--state open|closed|all] [--limit N]` -> `GET /repos/{owner}/{repo}/issues` - `view --repo <owner/name> --number N` -> `GET /repos/{owner}/{repo}/issues/{n}` - `close --repo <owner/name> --number N` -> `PATCH /repos/{owner}/{repo}/issues/{n}` with `{state: "closed"}` - `reopen --repo <owner/name> --number N` -> `PATCH /repos/{owner}/{repo}/issues/{n}` with `{state: "open"}` - `edit --repo <owner/name> --number N [--title T] [--body-file PATH]` -> `PATCH /repos/{owner}/{repo}/issues/{n}` - `comment --repo <owner/name> --number N --body-file PATH` -> `POST /repos/{owner}/{repo}/issues/{n}/comments` - `delete --repo <owner/name> --number N` -> `DELETE /repos/{owner}/{repo}/issues/{n}` (forgejo requires admin; verb stays exposed but server enforces auth) Shape mirrors the existing `create` verb: token from `/forgejo/api-token` SSM, `--body-file` for any prose payload (lockdown metacharacter gate forbids inline markdown), slug validated via `parseForgejoRepoSlug`, audit row stamps verb + flag values. **Why** Closes the read + state surface so the AGENTS.md \"Default TODO Destination\" workflow doesn't need curl any more. First noun of the 5-noun sweep tracked in this thread (issue / pr / repo / release / label).
Sign in to join this conversation.
No labels
P0
P1
P2
P3
P4
No milestone
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-bridge/coily#70
No description provided.