feat(overview-artifact): 產生可預覽總覽與截圖 fallback
This commit is contained in:
+46
-31
@@ -216,32 +216,28 @@ node scripts/project-add.js --repo <owner/name> --index <編號> --project "<看
|
||||
|
||||
### 12. 產生分析版的圖解總覽 〔可委派〕
|
||||
|
||||
用同一份 `templates/overview-artifact.html` 再產一份,但這一份要多出**工作包全景**:
|
||||
把工作包之間的相依與截止日畫成一張圖,讓開發者看得出自己這一項在整體中的位置。
|
||||
|
||||
全景圖用 `graph TD`,填進 `{{工作包全景}}`,連同段落標題一起:
|
||||
排程完成後重新抽取需求與全部工作包,組成 `schemaVersion: 1` 的需求級 JSON。
|
||||
工作包依賴與截止日必須來自重新抽取的實際資料,不使用模型記憶中的暫定值。
|
||||
執行:
|
||||
|
||||
```
|
||||
<section><h2>工作包全景</h2>
|
||||
<figure><div class="mermaid">graph TD
|
||||
A[建立共用函式庫<br/>09-25] --> B[建立抽取契約<br/>09-27]
|
||||
</div></figure></section>
|
||||
node scripts/overview-render.js --input <json> --output <html> --manifest <manifest>
|
||||
```
|
||||
|
||||
節點寫工作包標題與截止日,箭頭方向是「先決 → 後續」。節點一樣以 12 個為上限,
|
||||
超過就只畫相依鏈最長路徑上的那幾顆,其餘在頁尾列成文字。
|
||||
|
||||
委派的是**產出那份 HTML**;拿到網址之後寫回議題那一步**不委派**(判準第四條)。
|
||||
|
||||
網址一樣寫回需求議題:
|
||||
HTML 內重新產生 SVG 與 HTML/CSS 視圖;不能直接搬用議題 Mermaid。預覽優先使用平台
|
||||
能力,否則啟動短命 Node server 供瀏覽器截圖。產生 full-page 與局部圖 PNG 後執行:
|
||||
|
||||
```
|
||||
node scripts/issue-update.js --repo <owner/name> --index <需求議題編號> --overview-url <網址>
|
||||
node scripts/issue-assets.js --repo <owner/name> --index <需求議題編號> --manifest <manifest>
|
||||
```
|
||||
|
||||
**重跑會就地更新同一行**,不會在議題上留下兩個連結。規劃階段產生的那一份會被這一份取代,
|
||||
這是預期行為——同一顆需求議題只掛一個總覽網址。
|
||||
|
||||
截圖全部上傳成附件,需求議題正文只保留附件索引。只有真正可用的 preview URL 才使用
|
||||
既有 `--overview-url`;不可把 `.tmp/` 或 `0.0.0.0` 寫回 Gitea。
|
||||
產出 HTML 可委派;預覽截圖、附件上傳與任何 `issue-assets`/`issue-update` 寫回都不委派,
|
||||
由主流程執行並處理錯誤。
|
||||
若平台 preview 不可用,執行 `node scripts/overview-capture.js --backend auto`;
|
||||
它依序嘗試 Firefox,再嘗試 `rsvg-convert`/`resvg`。所有 backend 都不可用時必須
|
||||
停止並保留 `.tmp/` 的 HTML/SVG,不得宣稱截圖完成。
|
||||
### 13. 停錶並回報
|
||||
|
||||
回報之前先停錶,這一段計時到此為止:
|
||||
@@ -267,19 +263,9 @@ Gitea 1.27 的 API 沒有任何請求定義接受 `time_estimate`,該欄位只
|
||||
|
||||
## 架構圖的限制
|
||||
|
||||
依工作包的性質選圖:
|
||||
|
||||
- **`sequenceDiagram`** — 重點在「誰呼叫誰、順序為何」時用。
|
||||
- **`flowchart`** — 重點在「條件分支與資料流向」時用。
|
||||
- **`stateDiagram-v2`** — 重點在「狀態怎麼轉移」時用。
|
||||
|
||||
節點數上限 **12**,每個節點的文字上限 **8 字**。超過就拆成多張圖,或者乾脆不畫。
|
||||
|
||||
模板的 `{{架構圖}}` 要填入**完整的內容**,兩種形式擇一:
|
||||
|
||||
- 要畫:一個或多個完整的 ```mermaid 圍欄區塊。
|
||||
- 不畫:**只在超過上限拆不開、或畫了不會比文字更清楚時**才選這個,填一行說明為什麼不畫,**不要加圍欄**。
|
||||
|
||||
圖表以抽象 `kind`、`direction`、`nodes`、`edges` 保存。renderer 產生議題 Mermaid
|
||||
與 HTML SVG;不能讓模型直接維護兩套圖表語法。節點超過 12、文字超過 8 字或無法
|
||||
安全轉換時,拆圖或記錄 `omitted` 原因。
|
||||
## 邊界
|
||||
|
||||
- **共識摘要之前不對 Gitea 寫入任何內容**:不建議題、不改描述、不貼標籤、不留留言。
|
||||
@@ -292,3 +278,32 @@ Gitea 1.27 的 API 沒有任何請求定義接受 `time_estimate`,該欄位只
|
||||
- 計時只動這顆需求議題:在它上面起錶、在它上面停錶。**不停別顆議題上的錶**,
|
||||
被別顆的錶擋下時交還給使用者決定,不繞過去。
|
||||
- 不關閉或刪除任何既有議題。
|
||||
# Artifact 交接與視圖
|
||||
|
||||
完成第三段排程後,依 `references/artifact-contract.md` 重新抽取需求與全部工作包,
|
||||
組成一份 `schemaVersion: 1` 的 JSON 暫存檔。這份 JSON 是 HTML renderer 的輸入,
|
||||
不是 Gitea 的第二份正本。
|
||||
|
||||
先執行:
|
||||
|
||||
```
|
||||
node scripts/overview-render.js --input <json> --output <html> --manifest <manifest>
|
||||
```
|
||||
|
||||
renderer 驗證失敗時,不截圖、不上傳、不更新議題,保留 `.tmp/` 的輸入與錯誤供修正。
|
||||
HTML 必須自包含,不依賴 CDN;圖表由抽象節點/邊資料重新產生 SVG,不能直接搬用議題
|
||||
Mermaid。公式是可選欄位,單一公式無法渲染時保留原文並標示未渲染。
|
||||
|
||||
預覽優先使用執行環境提供的預覽能力。沒有預覽能力時,使用 `0.0.0.0` 綁定的
|
||||
ephemeral Node 靜態伺服器,只為瀏覽器截圖,完成後一定停止。產生 full-page 與所有
|
||||
局部圖 PNG,為每張圖填入 manifest 的角色、固定檔名與 SHA-256。
|
||||
|
||||
截圖全部是需求議題附件,不嵌入圖片;執行:
|
||||
|
||||
```
|
||||
node scripts/issue-assets.js --repo <owner/name> --index <需求議題編號> --manifest <manifest>
|
||||
```
|
||||
|
||||
這支腳本負責 hash 重用、附件上傳與「圖解版總覽附件」索引的冪等更新。上傳或索引
|
||||
更新失敗就是流程失敗。只有預覽平台提供真正可用的 URL 時,才另外使用既有的
|
||||
`--overview-url`;不可把 `.tmp/` 或 `0.0.0.0` 寫回 Gitea。
|
||||
|
||||
Reference in New Issue
Block a user