name: writing-training-doc description: 產出 know why 優先的實作型技術課程文件(Lab、README、名詞導讀、速查表、補充說明):先建立架構模型,再用操作驗證模型,最後要求學員能從畫面、API、log、資料、設定或輸出結果反查原因。強制檢查前置依賴、Step 銜接、架構責任、資料流、設定影響、可貼上程式碼、主題切分、索引同步與練習驗收。觸發時機:使用者說「寫課程講義」、「產出 Lab 文件」、「整理成操作手冊」、「寫 training doc」、「幫我寫 SOP」、「為 [工具名] 設計課程」、「新人訓練材料」,或任何需要技術教學材料、實作教材、操作指引的情境。
Writing Training Doc
本技能用於產出 know why 優先的實作型課程文件:先建立架構模型,再用可執行、可觀察的小流程驗證模型,最後要求學員從結果反查原因。觀察頁面、Console、API、查詢結果或畫面前,必須先建立或確認依賴資源;尚未出現的頁面、資料或選項,要標示它會在哪個 Step 之後出現。
Know Why 優先原則
技術課程文件以 know why 為主,know how 為輔。每份 Lab 在進入操作前先說明:
- 本 Lab 主題在整體系統、框架或工具鏈中的位置。
- 本 Lab 會修改哪些層級、檔案、設定、資料、服務或 runtime 狀態。
- 這些修改為什麼必要。
- 操作後可以在哪裡觀察結果。
- 學員如何從畫面、API、log、資料、設定或輸出結果反查背後原因。
每個重要設定都要說明架構意義與後續影響;指令、點擊流程與程式碼範例只承載操作,不能取代原因說明。
文件類型選擇
所有文件統一輸出為 Markdown(.md)。若無法判斷類型,詢問學員程度與要產出單一 Lab 或整套材料。
| 類型 | 用途 | 命名 |
|---|---|---|
| README | 整套課程、環境、路線 | README.md |
| 名詞導讀 | 術語、UI 位置、使用原則 | 00-<topic>.md |
| 實作 Lab | 具體工具 + 特定功能的手把手操作 | NN-<topic>.md 或 NN-XX-<topic>.md |
| 速查表 | 快速查詢指令、元件、排錯索引 | 99-cheatsheet.md |
| 補充說明 | Lab 中複雜概念的深度補充 | supplement-<topic>.md |
目錄與檔名
docs/:只放主要教學內容,如README.md、Lab、速查表、補充說明、環境說明。- repo 根目錄:放環境入口與單檔設定,如
.env、docker-compose.yaml。 - repo 根目錄功能資料夾:放可執行資產,如
mock-api/、scripts/、sample-data/、fixtures/。 .env只能提交課程必要且非敏感的預設值;密碼、token、個人路徑與私有連線字串改用.env.local並排除版控。- 環境指令預設從 repo 根目錄執行,不把
docs/當啟動入口。
課程檔名編號規則
- 主課 Lab 使用
NN-topic.md。 - 子課 Lab 使用
NN-01-topic.md、NN-02-topic.md、NN-03-topic.md。 - 主課編號保留給該系列的總覽、基礎、主線或入口課程。
- 子課從
01開始遞增,不使用NN-00-topic.md。 - 下一個主課系列接續使用下一個
NN-topic.md,其子課同樣從NN-01-topic.md開始。
範例:
| 類型 | 檔名範例 | 說明 |
|---|---|---|
| 主課 | 01-environment-setup.md |
第 01 系列的主課 |
| 子課 | 01-01-runtime-start.md |
第 01 系列的第 1 堂子課 |
| 子課 | 01-02-health-check.md |
第 01 系列的第 2 堂子課 |
| 主課 | 02-page-template.md |
第 02 系列的主課 |
| 子課 | 02-01-create-page.md |
第 02 系列的第 1 堂子課 |
| 子課 | 02-02-configure-template.md |
第 02 系列的第 2 堂子課 |
編號判斷原則:
| 情境 | 命名方式 |
|---|---|
| 該文件是系列入口、總覽、基礎主線 | NN-topic.md |
| 該文件是主課底下拆出的第一個實作主題 | NN-01-topic.md |
| 該文件是主課底下拆出的第二個實作主題 | NN-02-topic.md |
| 該文件與前一主課主題不同,已形成新系列 | 使用下一個 NN-topic.md |
| 該文件只是補充概念,不是 Lab | supplement-topic.md |
| 該文件是速查表 | 99-cheatsheet.md |
環境指令範例:
docker compose up -d
docker compose run --rm --no-deps <service-name> <check-command>
實作 Lab 結構
固定開頭:
# Lab NN:<主題>
目標:<一句話說明這個 Lab 要達成什麼>
預估時間:N 分鐘。
必要章節順序:
## 你會做出什麼- 用
flowchart LR畫完成後的資料流或操作流。 - 圖後用短句說明每個節點責任。
- 用
## 開始前先知道- 當 Lab 會逐步建立多個依賴資源時加入此區塊,用表格列出頁面、URL、Console、API、資料表、索引、policy、schema、設定檔、使用者、群組或內容資料的出現時機。
- 這個區塊只說明出現時機,不取代操作步驟。
## 先理解本 Lab 的架構關係- 說明主題責任層、會改哪些檔案/設定/資料/服務/endpoint/runtime 狀態、資料如何流動、Step 順序原因,以及結果由哪一層造成。
## Step N:<動詞 + 對象>- 每個重大操作一個 Step,內部用有序列表。
- 參數多於兩個時使用表格:
Parameter/Value。 - 重要設定後加
說明:解釋架構意義、runtime 影響與下一步關係。
## 練習題- 每個重要主題至少有一題,包含狀態承接、操作步驟、確認方式、可觀察結果與反查來源。
## 完成檢查- 列學員應理解並能解釋的概念,不只驗收操作完成。
## 排錯提示- 用「狀態或訊息特徵、背後原因、處理」描述。
## 本 Lab 的學習重點回顧- 重畫整條 flow,說明每個節點與關係,最後點出實際專案意義。
開始前先知道 建議格式:項目 / 出現時機。例如 <resource-a> 會在完成 Step N 後出現。
先理解本 Lab 的架構關係 建議格式:
## 先理解本 Lab 的架構關係
這個 Lab 的主題屬於 <layer-name>。你會先修改 <definition/config/data layer>,再讓 runtime 讀取這些定義,最後從 <page/API/log/output> 觀察行為。
```mermaid
flowchart LR
Definition["Definition Layer"] --> Runtime["Runtime Behavior"]
Runtime --> Output["Observable Output"]
```
| 層級 | 本 Lab 會改什麼 | 為什麼必要 | 觀察與反查方式 |
| --- | --- | --- | --- |
| 定義層 | `<file-or-config>` | runtime 需要讀取這份定義 | 從輸出結果反查到設定來源 |
| 執行層 | `<service-or-runtime>` | 負責套用定義並產生行為 | 從 log、API 或畫面確認載入狀態 |
| 輸出層 | `<page-api-output>` | 讓學員觀察結果 | 對照設定、資料或程式來源 |
Step 銜接性檢查:每個 Step 必須能從上一個 Step 的完成狀態直接操作;會影響下一步的設定要標示保留、修改或刪除。Step 寫作順序:
- 說明這一步改的是哪一層責任,以及為什麼要先做。
- 提供操作步驟、指令或檔案內容。
- 說明操作後會產生或修改什麼結果,以及如何支援下一步。
Step 不能只寫「建立檔案」、「貼上以下內容」、「執行指令」或「確認畫面」。要補上這個檔案、設定或資料如何被 runtime 讀取,以及為什麼後續畫面、API、log 或輸出結果會受到影響。
前置依賴與 Step 排序
撰寫或修改 Lab 時,先列出所有觀察與驗證動作,再反推所需依賴。任何「開啟頁面」、「查看 Console」、「執行查詢」、「驗證畫面」、「呼叫 API」之前,先確認環境、設定、資料、權限、程式、元件、API、套件、索引、endpoint、schema 或 policy 已建立、部署或啟用。若任一條件未成立,新增前置 Step,或把依賴建立動作移到更前面。課程順序固定為:建立或確認必要設定,建立或確認必要資料,再開啟頁面、Console、API 或查詢 URL 驗證。
其他文件結構
| 文件 | 必要章節 |
|---|---|
| 名詞導讀 | # Lab 00:<主題名稱>、目標:、預估時間:、## 一張圖先看整體、## <術語一>、你在哪裡看到:、使用原則:、## 一分鐘總結、## 本章學習重點回顧 |
| 速查表 | # <工具> 入門速查表、## 基本名詞速查、## 常用元件 / 指令、## 排錯提示、## 排錯順序 |
| 補充說明 | # <概念名稱>:完整說明、## 基本定義、## 常見判斷、## 與 Lab 的對照、## 延伸觀念(可選) |
| README | # <課程名稱>、## 課程設計主旨、## 使用環境、## 課程路線、## 主題覆蓋表、## 每個 Lab 的操作與反查原則、## 完成課程後你應該能做到 |
若課程來自學習清單或需求清單,README 必須保留主題覆蓋表:
| 主題 | 實作與練習 |
|---|---|
<topic-a> |
Lab N Step X-Y、練習 M |
<topic-b> |
Lab N、練習 M |
<topic-c> |
補充文件 + Lab N 驗證 |
主題覆蓋判斷:只有概念提到不算完整覆蓋;有操作步驟但沒有驗收方式算部分覆蓋;有操作步驟、練習題、確認方式與反查要求才算完整覆蓋。
課程主題切分與索引同步
課程文件依相似主題分組。一份 Lab 聚焦同一個學習目標或同一層責任,例如環境啟動與健康檢查、UI 操作與內容建立、Template 或 schema 設定、Component 與 Dialog、前端資源與資料模型、API 與查詢、Headless 內容、Workflow 與權限治理。
拆分判斷:
| 狀況 | 處理 |
|---|---|
| 同一主題的前置與驗證 | 可放同一 Lab |
| 同一元件的 Dialog、HTL、資料保存 | 可放同一 Lab |
| Template 與 Component 開發混在一起 | 拆分 |
| Component 開發與 Servlet API 混在一起 | 拆分 |
| GraphQL Headless 與頁面 render 混在一起 | 拆分 |
| Workflow 與權限可形成治理主題 | 可放同一 Lab |
| API 查詢與基礎 Servlet 同屬後端 API 主題 | 可放同一 Lab |
新增、拆分、重新編號或刪除課程文件後,同步更新:
- README 課程路線。
- 速查表或主題對照表。
- 補充文件中的 Lab 編號引用。
- 任何舊檔名、舊標題連結與舊 Lab 編號。
- 若有 HTML、PDF 或其他輸出版本,需重新渲染並確認索引順序一致。
完成後搜尋舊檔名、舊標題與舊 Lab 編號,確認沒有殘留引用。
可貼上程式碼範例
凡是學員需要寫入檔案、貼進查詢工具、貼進設定檔,或直接執行的內容,都使用標示語言的 fenced code block,不用表格取代可複製內容。適用於 XML、JSON、YAML、properties、config、HTML、template、CSS、SCSS、JS、TS、Java、C#、Python、SQL、GraphQL、Query DSL、shell、PowerShell 與 CLI 指令。
每段可貼上內容使用這個順序:
- 明確寫出目標檔案、貼上位置或執行位置。
- 提供完整可貼上的 code block,並標示語言,例如
xml、html、css、java、graphql、powershell。 - 在 code block 下方補上
需要理解的參數設定:,只解釋當下需要理解、容易填錯、後續步驟會引用,或 placeholder 需要替換的欄位。 - know why 優先課程使用「參數、架構意義」表格說明關鍵參數如何影響定義層、資料層、執行層或輸出層。
需要理解的參數設定: 建議格式:
| 參數 | 架構意義 |
|---|---|
<parameter> |
說明此參數影響哪一層、如何被 runtime 讀取、會造成什麼結果 |
學員看到內容後需要自行組合成檔案,或內容會影響後續驗證、部署、畫面顯示、API 回應時,改成完整 code block。範例中的名稱、關鍵參數或 placeholder 會被後續步驟引用時,在參數說明中點出讀取時機、套用位置與可觀察結果。表格只用於概念比較、UI 表單填寫值與參數用途說明,不取代檔案內容。
寫作風格
- 全文使用繁體中文;技術術語、UI 名稱、參數、指令保留英文並加反引號。
- 語氣直接、精確,不堆理論;先建立架構模型,再操作驗證模型。
- 優先用正向、直接的敘述句建立概念,不用先提出錯誤假設再反駁的問答式語氣。
- 排錯內容可保留,但主要標題使用「排錯提示」、「狀態判斷」、「使用原則」。
- 保留必要錯誤碼與訊息特徵,排錯索引用「狀態或訊息特徵、背後原因、處理」格式。
- 後續步驟才會建立的畫面、資料、檔案或設定,必須標示出現時機。
- UI 路徑寫成
`Settings` > `Advanced`;指令與參數值加反引號。 - 補充文件引用使用相對路徑:
延伸閱讀:[<標題>](supplement-<topic>.md)。
練習題先說明沿用或清除前題狀態,再列操作步驟、確認方式、可觀察結果與反查來源。確認方式需同時包含:從畫面、API、log 或輸出結果確認行為;到資料、設定、檔案或 runtime 狀態確認來源;說明結果是由哪個設定、資料或程式造成。
完成檢查要驗收「能解釋」,不只驗收「能操作」:能完成最小實作、說明定義層/資料層/執行層位置、解釋設定如何影響 runtime 行為,並能從輸出結果反查到來源。
句型改寫方向:
| 避免 | 改成 |
|---|---|
以為... |
直接說明適用條件 |
把 X 當成 Y |
直接說明 X 的完整責任 |
X:錯/不一定/不完整 |
改寫成正向規則 |
不要... |
改寫成建議做法與原因 |
不是...而是... |
改寫成單一肯定句 |
Mermaid 規則
- 使用
flowchart LR或flowchart TD。 - Node ID 只用英數與底線;Node label 必須加雙引號。
- Edge label 必須加雙引號;關係明顯時可省略。
- Mermaid 內不可用
\n,換行改用<br>。 - 每行一個 Mermaid statement。
輸出前確認
- 基本結構:文件開頭有
目標:與預估時間:;Lab 有你會做出什麼、先理解本 Lab 的架構關係、完成檢查、本 Lab 的學習重點回顧。 - 架構與 Step:已說明主題責任層、修改內容、資料流、Step 順序原因、runtime 影響、結果觀察與反查方式;沒有先使用尚未建立的頁面、API、資料、權限或使用者。
- 可貼上與驗收:需寫入、貼上或執行的內容已提供完整 code block;關鍵參數已說明架構意義;每個重要主題至少有可驗收練習題,並要求學員從結果反查來源。
- 課程一致性:不相似主題沒有放在同一份 Lab;README、速查表、補充文件引用與實際檔案一致;若有 HTML、PDF 或其他輸出版本,已重新渲染並確認索引順序一致,且無舊檔名、舊 Lab 編號或舊標題殘留。
- 文字與位置:主要章節已避免「常見問題」、「常見錯誤」、「常見誤解」與反駁式句型;排錯索引用「狀態或訊息特徵、背後原因、處理」;教學內容放
docs/,可執行資產與環境入口放 repo 根目錄或根目錄功能資料夾。