Files
sdlc/skills/analyze/SKILL.md
T
jiantw83 8d2b715995 refactor(sdlc): 消除四個 SDLC skill 間重複邏輯,改為委派唯一權威來源
What(做了什麼):
1. 移除 plan、analyze、implement 三個 skill 及 README.md 中各自重述的 wiki hash 演算法說明(原本各處都各自寫一遍「取 SHA-1 前 8 碼大寫十六進位,開頭若為數字或 A/B/C 則替換為 H 加後 7 碼」),改為統一指向唯一權威工具 jsc-gitea/tools/hash-id(透過 jsc-gitea:wiki 使用)。
2. 移除 plan、analyze、implement、maintain 四個 skill 中重複的 model chain fallback 選擇邏輯說明(原本各自描述「執行 jsc-cli/tools/model-config.sh get {stage},若印出 chain 則取目前 CLI 可用的第一個,fallback 依 chain 順序套用」),改為統一呼叫新的共用子指令 jsc-cli/tools/model-config.sh resolve {stage},由該子指令自行封裝解析邏輯(此 resolve 子指令由另一位 agent 同時在 sibling repo jsc-cli 開的配套 PR 新增,本 PR 依賴該 PR)。
3. implement/SKILL.md 移除自身多餘的「先解析環境變數」步驟(原第 2 步,手動檢查 JSC_WIKI_REPO_ANALYZE、JSC_WIKI_REPO、JSC_WIKI_REPO_QUESTION、GITEA_HOST、GITEA_TOKEN 後才詢問使用者),因為此解析已由 implement 其他步驟委派的 jsc-gitea:wiki 正確處理,屬於死重複邏輯;後續步驟由 2-8 重新編號為 2-7。
4. maintain/SKILL.md 在 frontmatter description 欄位加入明確的負向觸發說明,釐清此 skill 僅用於已交付、仍在維護窗口內的專案,「不適用於仍在實作中或尚未登錄於 MAINTAIN_CONTENTS 的專案」。
5. plugin.json、.claude-plugin/plugin.json、.codex-plugin/plugin.json 三份版本號檔案,由 0.0.3 升版至 0.0.4。

Why(為什麼改):
四個 SDLC skill 各自重述相同的 hash 演算法與 model chain fallback 邏輯,違反 jsc-meta:skill-check 稽核準則中「單一權威來源」的要求,日後維護容易改一處漏一處;implement 的環境變數解析步驟與其他步驟委派的 jsc-gitea:wiki 功能重疊,屬死碼;maintain 的觸發時機描述不夠明確,容易被誤用在尚未進入維護窗口的專案上。

How(怎麼改的):
將重複邏輯抽離,改為指向或呼叫唯一權威工具/skill(jsc-gitea/tools/hash-id、jsc-cli/tools/model-config.sh resolve、jsc-gitea:wiki),移除 implement 中的死步驟並重新編號,於 maintain frontmatter 補上負向觸發描述,並同步升版三份 plugin.json。全程不改變任何對外行為,純屬重構。

Who(誰/哪個需求):
jsc-meta:skill-check 對 plan、analyze、implement、maintain 四個 SDLC skill 的例行合規稽核修正。
2026-08-24 14:50:22 +08:00

3.8 KiB

name, description
name description
analyze SDLC analysis stage. Gate on the designated model (model-config) or capability tags, lock the model for the stage via sdlc-gate, pick a plan from PLAN_CONTENTS, analyze user stories against the current state (working directory plus REPO_{HASH} inventory for reuse). Run WBS to produce numbered work packages, estimate them with CPM, split each into TDD todos, and write wiki page ANALYZE_{HASH}. Logic only - never write code or modify files. Use after planning and before implementation.

analyze

Goal: create or extend the wiki analysis page ANALYZE_{HASH}. This skill is a logic-only stage: never output code, and never modify any file.

{HASH} = the shared wiki hash for {owner}/{repo} used to build the ANALYZE_{HASH} page name, computed by jsc-gitea/tools/hash-id (see jsc-gitea:wiki). All wiki reads and writes go through jsc-gitea:wiki.

Steps

  1. Model gate and stage lock:
    1. Run jsc-cli/tools/model-config.sh resolve analyze to get the required model; if it prints nothing, fall back to the capability-tag check via jsc-cli:models (analysis requires the reasoning-high tag).
    2. If the current model is not the required model, or fails the tag check, block the flow and tell the user which model to switch to. Completion condition: the current model satisfies the gate.
    3. Lock the stage: run jsc-hooks/hooks/sdlc-gate.sh lock analyze {current-model}. From now until the next SDLC stage's gate runs, the sdlc-gate hook enforces this model on every prompt; switching models mid-stage gets blocked. Completion condition: the lock file is written, verified with sdlc-gate.sh report.
  2. Read PLAN_CONTENTS via jsc-gitea:wiki for plans whose status is the literal 「未分析」 (name and HASH), and read ANALYZE_CONTENTS for existing analyses.
  3. Let the user choose per jsc-ask:ask rules: extend an existing analysis or analyze a new plan. State the impact scope on every option.
  4. Analyze the plan page's user stories one by one against the current state, questioning via the jsc-ask:ask decision tree until no doubt remains; keep asking while consensus is missing. Current state means:
    1. Every file in the working directory.
    2. Reuse existing methods and endpoints whenever possible:
      • Check the REPO_{HASH} inventory page first. Re-inventory when the feature or endpoint is missing, or when the recorded commit sha differs from the current one.
      • Re-inventory MUST run as a sub agent: analyze the repository's features and endpoints, attach the current commit sha, write back to REPO_{HASH} with templates/repo-page.md, and update REPO_CONTENTS per templates/repo-contents.md.
      • For each reuse candidate, confirm the file path and method name first, then analyze whether its logic fits the requirement.
  5. Run a Work Breakdown Structure (WBS): split the user stories into work packages, number them sequentially (WP-01, WP-02, ...) and mark dependencies.
  6. Estimate every work package's effort in hours and days with the Critical Path Method (CPM), and mark the critical path.
  7. Split every work package into todos with Test-Driven Development (TDD), formatted [ ] (open) / [x] (done). Each todo is one vertical slice: one seam, one test, one minimal implementation. Seams and anti-patterns: references/tdd.md.
  8. Apply templates/analyze-page.md to create or update the analysis page and write it back via jsc-gitea:wiki. The page content is Traditional Chinese, exactly as the template dictates.
  9. If the analysis page is new: add it to ANALYZE_CONTENTS per templates/analyze-contents.md, and flip the plan's status in PLAN_CONTENTS to the literal 「已分析」.

Hard limits

  • Never output a code snippet (file paths and method names are allowed).
  • Never modify any file in the working directory.