Communitygithub.com

Hideki-Kobayashi/apply-digital-agency-design-system

基於日本數位廳設計系統的官方 Markdown,協助進行 Web UI 的設計、實作與審查的非官方 Codex Skill。

apply-digital-agency-design-system 是什麼?

這是一個專為 AI 代理(如 Claude Code、Cursor、Codex)設計的非官方技能,能夠讓代理依據日本數位廳(デジタル庁)設計系統的官方 Markdown 快照,進行 Web UI 的設計、實作與程式碼審查。它與官方更新流程分離,確保不會未經使用者同意就啟用新版指南。技能啟動時會檢查上次成功確認更新是否超過 30 天,若超過則在作業結束時提示使用者確認更新。使用者同意後,技能會透過網路取得最新 ZIP 檔案,進行比對與驗證,產生候選更新。最終由使用者明確批准後,才能將候選快照提升為有效版本。此技能支援 macOS、Linux 與 Windows,並可透過環境變數 `DADS_SKILL_STATE_DIR` 自訂使用者專屬的狀態儲存目錄。

相容平台✓Claude Code✓Codex CLI~Cursor
npx skills add Hideki-Kobayashi/apply-digital-agency-design-system

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

套用數位廳設計系統

從已核准的官方 Markdown 快照中,只選取請託所需的依據來套用。 將一般作業與官方更新確認分開,未經使用者核准不得啟用更新候選。 以下 <skill-root> 會替換為此 SKILL.md 所在目錄的絕對路徑。 以下 <python> 會替換為可執行 Python 3.10 以上版本的指令。 在 macOS 與 Linux 上通常使用 python3,在 Windows 上通常使用 py -3。

資訊邊界

  • references/source-manifest.json 中 active_snapshot.path 所指向的,即為一般作業使用的有效快照。
  • 有效快照中的 source-index.json、references/task-index.md 與 references/foundation-map.md 為衍生資料。 其官方意涵請以有效快照內的對應 Markdown 為準。
  • 官方 Markdown 是為 AI 參考而重新建構的內容,並非官方網站的完整替代品。 若本地資料缺乏所需敘述,應回報為未確認事項。
  • 此技能為非官方性質,不代表數位廳的提供、核准、合作或推薦。
  • 現有專案的當前值應從 CSS 變數、主題設定、通用樣式與通用元件中確認, 不要複製到技能內部。
  • 建立、修改、審查為操作權限的分類。 新建、既有改修、個別元件為資料選擇的分類,兩者不可混淆。

啟動時的更新期限判定

首先執行下列指令。 此指令僅讀取本地檔案,不會連接網路。

<python> <skill-root>/scripts/manage_upstream.py status

將輸出中的 status 記為 status_at_start,並在該次請託期間保留。

  • fresh:不提示更新,繼續一般作業。
  • due、never_checked、unknown:不中斷一般作業,但於結束時重新確認狀態。
  • 若使用者一開始就明確表示「請確認最新版」等:將此明確要求視為同意外部確認,並進入維護程序。

期限係以 last_successful_check_at 起算 30 日來判斷。 提案日期、失敗日期、或由此衍生的下次確認日期,均不得作為期限起點。

一般作業

  1. 將請託分類為建立、修改或審查,並確定允許的操作範圍。
  2. 確認目標的技術架構、既有樣式、品牌限制與畫面結構。
  3. 依下列優先順序決定資料選擇路徑。
    • 若目標僅限於單一 UI 元件及其狀態,則視為個別元件。
    • 若已有通用樣式存在,則視為既有改修。
    • 其他情況則視為新建。
  4. 從 references/task-index.md 中選擇目標文件。 若無對應項目,則以下列指令搜尋有效快照。
<python> <skill-root>/scripts/search_guidance.py \
  --query '<將搜尋詞以空白分隔>' \
  --manifest-file <skill-root>/references/source-manifest.json
  1. 根據資料選擇路徑使用 references/foundation-map.md。
    • 新建:將 8 個分類標示為採用、不適用或保留,並閱讀決定值的分類之官方 Markdown。
    • 既有改修:先調查既有值,僅閱讀受影響的分類,並區分為維持、遷移或刻意偏離。
    • 個別元件:僅閱讀既有的通用基準、目標元件及受影響的基本設計。 不要在元件內部重新決定通用值。
  2. 區分官方提供的選項、預設值、範例、原則、需求與固定值,並建立採用值與其依據的對應關係。
  3. 在既有的技術架構下實作。 不要將官方範例一律當作固定值套用,也不要將官方需求軟化為外觀偏好。
  4. 根據目標,確認多種畫面寬度、鍵盤操作、焦點、狀態變化、縮放與回流。
  5. 審查請託時不修改檔案,僅回傳附有依據的指摘事項。

一般作業完成報告

簡潔報告以下事項:

  • 參考版本:source-manifest.json 中的快照 ID、數位廳設計系統版本、Markdown 發布日期。
  • 確認範圍:所閱讀的官方文件與執行的確認項目。
  • 未確認事項:實際裝置、輔助技術、外部現行頁面等未確認的範圍。
  • 偏離事項:因專案特定理由而變更官方範例或建議的內容。

僅在啟動狀態為 due、never_checked 或 unknown 時,才在報告前重新執行 status。 若因其他處理而變成 fresh,則在最終報告末尾僅提案一次更新確認。

距離上次官方更新確認已超過 30 天。本次作業已使用已核准的現行版本完成。是否也要進行更新確認?

若狀態為 never_checked 或 unknown,則不確定經過天數,應說明原因。 僅提案不會進行外部通訊或狀態更新。 即使使用者拒絕,也不會儲存拒絕日期,因此下次仍會持續提案直到確認成功為止。

確認官方更新

僅在使用者同意時,才執行下列指令。 --network-approved 必須在確認使用者同意後才附加。 若未滿 30 天但明確要求確認最新版,則加入 --force。

取得後端採用預設的 auto。 auto 若找到 ax,則將官方頁面取得、連結提取與 ZIP 儲存交由 ax 處理;若找不到,則使用 Python 標準函式庫。 ax 為建議選項但非必要,不應將安裝 ax 作為更新確認的前提。 ax 路徑會驗證重新導向後的最終 URL,但無法在通訊前驗證中途的轉送目標。 若需對轉送目標也預先設限,請使用 --fetch-backend stdlib。 一旦選擇的後端失敗,不會隱含地切換至其他後端。 取得後的 URL、容量、ZIP 格式驗證、雜湊計算、差異建立與狀態儲存均由 Python 處理。 僅在為進行動作確認等目的而需固定方式時,才附加 --fetch-backend ax 或 --fetch-backend stdlib。

<python> <skill-root>/scripts/manage_upstream.py check \
  --network-approved
  • unchanged:更新確認成功日期,並報告取得後端與無變更。
  • candidate_created 或 candidate_exists:報告取得後端、候選 ID、取得來源、雜湊值、新增、修改與刪除的數量。
  • skipped_fresh:因未滿 30 天而省略外部確認,並報告此情況。
  • 失敗:不修改 last_successful_check_at 與有效快照,並報告失敗的取得來源與原因。

同意外部確認不代表同意採用候選。 即使找到候選,只要官方來源確認與候選儲存已完成,確認成功日期仍會更新。

手動取得 ZIP

僅在自動取得最終失敗,且 check 能識別官方 ZIP 的 URL 並引導手動取得時,才將此程序作為最後手段提出。 若在識別 URL 前就已失敗,則不應從 URL 或檔名推測取得來源,僅報告失敗。

向使用者展示下列內容:

ZIP 自動取得失敗。您可以從下列官方 URL 手動取得。
<官方 ZIP URL>

請將 ZIP 儲存於任意資料夾。儲存後,請提供包含檔名的絕對路徑。
收到 ZIP 後,將在不連接網路的情況下進行驗證,並儲存為更新候選。切換為有效版本則需另行確認。

收到使用者的絕對路徑後,執行下列指令。 若僅得知相對路徑,請先確認絕對路徑再執行。

<python> <skill-root>/scripts/manage_upstream.py import-archive \
  --archive-file '<ZIP 的絕對路徑>'

import-archive 會將本地 ZIP 關聯至失敗時記錄的官方 URL,在不連接網路的情況下進行容量、ZIP 格式、內部路徑、Markdown 集合與雜湊值的驗證,並建立候選。 不會修改或刪除原始 ZIP。 本地匯入不視為外部確認成功,因此不會更新 last_successful_check_at 與已確認的合約版本。 即使結果為 candidate_created 或 candidate_exists,也不會自動晉升,而是進入「更新候選評估與晉升」。

若自官方 URL 識別後已超過 30 天,或更新合約已變更,則不繞過匯入程序,而要求新的更新確認同意。 即使手動取得或本地匯入失敗,也不會修改 last_successful_check_at 與有效快照。

更新候選評估與晉升

  1. 讀取候選內的 candidate-manifest.json 與 diff-summary.json。
  2. 使用 verify_snapshot.py 驗證候選。

候選的預設儲存位置為使用者專用狀態目錄下的 candidates。

<python> <skill-root>/scripts/verify_snapshot.py \
  --snapshot-dir <state-dir>/candidates/<候選 ID>/snapshot \
  --index-file <state-dir>/candidates/<候選 ID>/source-index.json
  1. 閱讀新增、修改與刪除的官方文件,確認其對 task-index.md 與 foundation-map.md 的影響。
  2. 使用舊版與候選版分別測試代表性的建立、修改與審查請託。
  3. 向使用者展示候選 ID、意義變更、衍生資料的修改與驗證結果,並明確確認是否採用。
  4. 僅在使用者指定候選 ID 並核准後,才執行下列指令。
<python> <skill-root>/scripts/manage_upstream.py promote \
  --candidate-id '<候選 ID>' \
  --human-approved

晉升後不刪除前一個快照。 晉升操作不會修改 last_successful_check_at。

判斷規則

  • 不以 MANIFEST.md 作為檔案清單的正本, 應掃描所有 Markdown。
  • 文件 ID 使用正規化的 source_url。 slug 在本文與更新紀錄中會重複,故不作為單獨 ID。
  • 不要將找不到的元件、代碼(token)或類別名稱當作官方規格來建立。
  • 當既有值與官方需求衝突時,不要默默維持或取代,應顯示影響範圍與修改範圍。
  • 僅以畫面確認作為依據,不得宣稱完全符合數位廳設計系統或 WCAG。
  • 在公開物中標示出處時,請閱讀有效快照中的 introduction/notices/index.md。
  • 更新狀態與候選應儲存於使用者專用的本地區域,不要混入技能本體的發布檔案中。 僅在需要變更儲存位置時,使用環境變數 DADS_SKILL_STATE_DIR。

相關技能