Files
gitea/skills/wiki-to-issue/SKILL.md
T
jiantw83andClaude Opus 5 f8123e829b feat(gitea): 新增 wiki 轉議題技能
What:新增 wiki-to-issue 技能,把一頁 wiki 轉成同一個存取庫的議題;配套新增 tools/gitea-link.sh 解析連結、tools/issue.sh 讀寫議題。

Why:wiki 頁要變成可追蹤的工作時,原本得自己拼 API:組 JSON、查標籤 id、挑回應欄位,跳脫一錯就把對外的議題內容寫壞。

How:連結是唯一入口,gitea-link.sh 解不出 wiki 頁就中止,不猜存取庫也不猜頁名;標籤只從既有的挑;站台沒有專案看板 API 時據實回報請使用者手動拖,不假裝關聯成功。

Who:使用 jsc 技能組、需要把 wiki 內容交辦出去的人。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 09:19:08 +08:00

3.9 KiB


wiki-to-issue — a wiki page becomes an issue

The wiki link is the only input. Everything else — repository, page name, host — comes out of that link.

Steps

  1. Link gate. Run tools/gitea-link.sh parse {url} on the link the user gave. Exit 3, no link in the request, or kind=issue (this skill reads wiki pages, not issues) all mean the same thing: stop and report which one it was. Never ask for a repository name instead, and never fall back to the working directory's remote — a page written into the wrong repository's issue tracker is public and hard to take back. Completion condition: kind=wiki, and repo, page and host are known.
  2. Read the page with jsc-gitea:wiki (wiki-get {repo} {page}). Exit 4 means the page does not exist — stop and report the page name. Take the page's absolute URL from wiki-url in the same pass; it goes into the issue body. Completion condition: the page's markdown and its absolute URL are both in hand.
  3. Draft the issue — this step MUST run as a sub agent. Title: the page's first heading, or the page name when it has none. Body: the page content in Traditional Chinese, opening with a 「來源:{絕對網址}」 line so the issue points back at the wiki. Convert [[display|page]] links to absolute URLs (wiki-url), because [[...]] resolves only inside a wiki. Drop personal data — an issue is read by more people than a wiki page. Completion condition: title and body file exist, the body carries the source line, and no [[...]] link is left in it.
  4. Labels come from what the repository already has. Run tools/issue.sh labels {repo}, propose the fitting ones with a reason each, and confirm per jsc-ask:ask rules — every option states its impact scope (a label drives filters and board rules, so a wrong one routes the work to the wrong queue). Turn the confirmed names into ids with tools/issue.sh label-ids. An empty label list, or nothing fitting: ask whether to create the issue with no label, and record that answer. Never invent a label that the repository does not have. Completion condition: the user has confirmed a label set — possibly empty — and its ids are resolved.
  5. Project board. Run tools/issue.sh projects {repo}. Exit 3 means this Gitea has no board API: say so plainly, and hand the user the board URL the script printed so they can drag the issue in themselves. A board list comes back: let the user pick one per jsc-ask:ask rules, attach it, and report the failure verbatim if the attach call is refused. Completion condition: the issue is either attached to a board, or the report states in one line that the board link is still outstanding and who has to do it.
  6. Create the issue: tools/issue.sh create {repo} {title} {body-file} [--labels {ids}]. Report the index= and url= it prints. Completion condition: the issue URL is reported to the user, together with the labels applied and the board status from step 5.

Rules

  • One wiki page, one issue. Splitting a page into several issues is analysis work, not conversion — hand that to jsc-sdlc:analyze.
  • The issue body stays Traditional Chinese per the STE100 rule, and keeps the source line at the top.
  • Creating an issue is an outward-facing action: the title, body, labels and board pick are confirmed with the user before the create call, never after.