Appearance
date: 2026-06-05 tags: [github, issues, projects, api, backlog] status: active graduated_to:
GitHub native typed-backlog primitives — what actually works via the API
Validated while building the backlog-organisation model (epic #148) on the Tomat-Labs org.
Issue Type — set by name, even when LIST is forbidden. gh api -X PATCH repos/{o}/{r}/issues/{n} -f type=Epic sets a native Issue Type by name; needs only Issues: write. The org listing endpoint GET /orgs/{org}/issue-types 403s for a fine-grained PAT ("Resource not accessible by personal access token") — but you don't need it to set a type by name. Issue Types are org-only: GET .../issues/types 404s on a user-owned repo.
Dependencies are native (earlier belief that GitHub had none was out of date). The "Mark as blocked by / blocking" Relationships map to GET/POST/DELETE /repos/{o}/{r}/issues/{n}/dependencies/blocked_by (POST body -F issue_id=<db id>). Not enforced (a warning, not a gate), but first-class and API-readable.
Sub-issues link via POST /repos/{o}/{r}/issues/{parent}/sub_issues with -F sub_issue_id=<db id> — a typed int, so -F (not -f, which sends a string and 422s).
Guard — encoded in the to-issues / triage / organise skills; the full model lives in docs/brainstorms/2026-06-04-backlog-organisation-model.md. See also [[2026-06-05-agent-identity-two-layers]] for the PAT scopes these calls need.