What: - 修正 skills/html-export/SKILL.md 與 skills/wiki-to-issue/SKILL.md frontmatter 裡 description 欄位的 YAML 語法錯誤。 - 兩支技能的 description 整串加上單引號,內部撇號改寫成兩個單引號,內容文字一個字都沒變。 - 同步更新 plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json 三個 manifest 版本號,從 0.1.9 進到 0.2.0(patch 滿 9,依準則進位到 minor)。 Why: - 兩支 description 都內含「冒號加空白」,屬於未加引號的 YAML plain scalar,違反 YAML 語法規定。 - Antigravity 解析 frontmatter 時當場中斷,整支技能被靜默丟棄,沒有任何錯誤訊息;磁碟上 34 支技能,Antigravity 只認得 28 支。 - 準則要求 description 用英文撰寫,不能把「: 」改成全形冒號迴避語法問題,只能加引號修正。 How: - 兩支技能的 description 值都加上單引號,內部撇號寫成兩個單引號跳脫,其餘字元不動。 - 用 git show HEAD: 分別取出兩支技能改前的原始值,把改後的單引號純量還原後逐一做字串相等比對,確認逐字相同、字元數一致。 - 執行 ste100-lint.sh、check-behaviors.sh、lint-frontmatter.sh 三支檢查腳本,退出碼皆為 0;git diff --numstat 顯示兩個檔案都只動了 frontmatter 那一行。 Who: - 本次修到 gitea 技能組的 html-export 技能(把 Wiki 頁面或 Issue 匯出成單一 HTML 檔)與 wiki-to-issue 技能(把 Wiki 頁面轉建成 Issue)。
6.1 KiB
name, description
| name | description |
|---|---|
| wiki-to-issue | Turn one Gitea wiki page into an issue in the same repository. Parse the link with tools/gitea-link.sh, read the page through jsc-gitea:wiki, draft title and body as a sub agent, then create the issue with tools/issue.sh - labels picked from the repository's existing set per the jsc-ask decision tree, project board attached or reported as manual when the site has no board API. A request without a wiki link stops the skill immediately: never guess the repository or the page. Use when a wiki page has to become trackable work; not for issues drafted from scratch, and not for syncing an issue that already exists. |
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
-
Input gate — the link and the host, checked in the same batch. Neither depends on the other, so run both before anything else and report every failure found, not just the first.
- The link. Run
tools/gitea-link.sh parse {url}on the link the user gave. Exit 3, no link in the request, orkind=issue(this skill reads wiki pages, not issues) all mean the same thing: stop and report which one it was. Exit 2 is a usage error — fix the arguments and call again. 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. - The host. Confirm
GITEA_HOSTholds a value in the current shell; ask for it per thejsc-ask:askrules when it does not.GITEA_TOKENneeds no inventory —tools/gitea.shresolves it, retries once with the tea CLI login token, and exits 7 when neither works.
Completion condition: the parse printed
kind=wikiwithrepo,pageandhostknown, andGITEA_HOSTholds a value — both, or the run has stopped with the reason named. - The link. Run
-
Run these three tracks at the same time. The label list and the board list depend on the repository only, not on the page, so they start in the same batch as the read rather than queueing behind the draft.
- Track A — read and draft. Read the page with
jsc-gitea:wiki(wiki-get {repo} {page}) and take its absolute URL fromwiki-urlin the same pass. Route the exit codes by that skill's table: 4 means the page does not exist, 7 means the key is invalid or lacks permission, 8 is any other API failure — all three stop this skill with the page name in the report. Drafting 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. - Track B — label list. Run
tools/issue.sh labels {repo}. Exit 1 means the label list could not be read: stop and report it, because the alternative is inventing labels. Exit 2 is a usage error — fix the arguments and call again. - Track C — board list. Run
tools/issue.sh projects {repo}. Exit 3 means this Gitea has no board API — keep the board URL the script printed for step 4. Exit 1 means the call failed for another reason: report it and treat the board link as outstanding. Exit 2 is a usage error — fix the arguments and call again.
Completion condition: the title and body file exist with the source line and no
[[...]]left in the body, the repository's label list is in hand or the run has stopped, and the board list is either in hand or recorded as unavailable. - Track A — read and draft. Read the page with
-
Labels come from what the repository already has. Propose the fitting ones from track B's list with a reason each, and confirm per
jsc-ask:askrules — 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 withtools/issue.sh label-ids {repo} {names}. Exit 4 means a name is not in the repository: go back to the list and pick again, never create the label to make the command pass. Exit 1 means the call failed — report it and stop. 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. -
Project board. Track C returned a board list: let the user pick one per
jsc-ask:askrules, attach it, and report the failure verbatim if the attach call is refused. Track C exited 3: say plainly that this Gitea has no board API, and hand the user the board URL the script printed so they can drag the issue in themselves. 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. -
Create the issue:
tools/issue.sh create {repo} {title} {body-file} [--labels {ids}]. The script asks for confirmation before it writes, so expect that prompt and hand the user the title, the labels and the board it is about to apply. Exit 0: report theindex=andurl=it prints. Exit 1 means no issue was created — report that plainly, and hand back the path of the drafted body file so the draft is not lost. Exit 2 is a usage error, usually a body file that is not there — fix the arguments and call again. Completion condition: the issue URL is reported to the user together with the labels applied and the board status from step 4, or the report states that no issue was created and where the draft is.
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.