Skip to content

運作守則 ​

blueprint 不只是產生一份 ESLint 設定。
它讓專案裡的每個人 —— 開發者、code reviewer,以及在旁邊一起寫 code 的 AI agent —— 都在同一套工程規則底下工作。
當大家都照同一份守則走,
架構就不會隨著時間、人員更迭、agent 換手而慢慢漂移。

這一頁就是那份守則的核心,而且不是延伸閱讀。
Vue 與 React 預設設定會以資料承載這套理念,自訂 Blueprint 則可依專案調整。
init 會把設定的架構與理念轉成可執行檢查及產出守則 —— 是開發當下的護欄,不是口頭支票。
它的定位是「運作守則,不是討論稿」:及早建立明確邊界,讓程式碼在規則內成長,
而不是依賴未來某次大重構收拾。

Blueprint 不替你設計架構 ​

blueprint 不會告訴你:

Components 該怎麼分層?

到底該不該有 container 這一層?

feature folder,要還是不要?

這些領域與責任分配屬於團隊自己的決定。Blueprint 不會替你發明模組名稱、決定商業責任, 也不會代替人做重構判斷;它負責讓選定的模型變得明確,而且可以被執行:

把你已經選定的架構,變成一套所有人都能共同遵守的工程規則。

這不代表 Blueprint 對架構毫無立場。它支援兩種明確拓樸、要求同一個專案維持一致拓樸、 驗證模組相依圖、保留路由組合的特殊語意,也會拒絕無法安全完成的轉換。
這些一致性限制由 Blueprint 負責;限制內的設計內容則由導入方決定。

不論從內建預設設定或既有專案開始,修改 architecture、principles、componentShape 與 playbook,就是在維護專案自己的運作守則。

一份守則,多種形式 ​

同一份守則,會為不同的讀者編譯成不同形式:

  • ESLint 規則 —— 機器查得動的部分,自動強制
  • 架構手冊 —— 給人讀的「為什麼」
  • AI agent 守則(CLAUDE.md、AGENTS.md⋯⋯)—— agent 依循的規則

它們從不同角度描述同一份受管理的架構:開發者讀手冊、Agent 遵守工作守則、ESLint 檢查 工具能判定的部分。這些架構產出會盡可能由有效設定與解析後的執行期事實生成,減少重複 政策與語意漂移。

這個保證刻意比「所有產品表面都從同一個檔案編譯」更窄。CLI 決策、遷移、版本資訊與這個 公開網站各有自己的權威來源;它們需要依同一套產品模型稽核,而不是假設機械上永遠不會 出現差異。

三種級別落點 ​

blueprint 不相信「lint 全綠就代表架構沒問題」。
很多架構上的取捨本質上是語意問題 —— 需要有人真正讀懂 code「在做什麼」:

  • 這個元件是不是扛了太多責任?
  • 這個 hook / composable 是不是抽象過頭?
  • 這個重構方向對不對?
  • 模組邊界真的清楚嗎?

這些都不是 AST 答得出來的。
所以手冊裡每一條規則,都會落在以下三個層級之一:

  • ✅ lint/config —
    完全查得動:lint 自動攔下違規,設定一次就好。
  • ◐ lint(初篩)+ agent 守則 —
    lint 只能標出「需要檢視的位置」(設為 warn),結論仍要人來判定。
  • ○ 只在 agent 守則 —
    語意、流程、人為判斷 —— 沒有工具攔得住,交給 agent 每一輪工作自行守住。

這就是 blueprint 的設計骨架:
機器查得動的,編譯成 ESLint 設定;
只有審查能判定的,編譯成手冊與 agent 守則。

lint 通過,只代表規則通過。

架構品質,仍然來自這份守則 —— 這正是信念第六條。

工程原則可以跨框架 ​

Blueprint 的架構原則不綁 React 或 Vue。兩者的響應式原語不一樣 ——

  • ref() ↔ useState()
  • computed() ↔ useMemo()

—— 但責任、元件設計、依賴方向、所有權、重構策略與協作方式可以沿用同一套理念。

框架整合並不完全相同。原始碼根目錄、檔案式路由、解析器行為與可支援的轉換邊界,在 Vue、React、Next.js 之間都有差異。Blueprint 讓工程原則保持可攜,執行期與預設設定則 明確處理這些實際邊界。

Blueprint 怎麼承載這份守則 ​

每一種規則,都對應到 blueprint 裡的一個欄位,
以及承載它的那份產物:

  • 分層架構、unit 形狀、套件歸屬 — architecture → emitLint 與 inspect
  • 核心信念 — principles → 手冊與 agent 守則
  • 元件設計 — componentShape → 手冊與 agent 守則
  • 執行期負載/重構/協作 — playbook → 手冊與 agent 守則
  • 量化門檻與自訂規則 — rules → emitLint(內嵌外掛)

修改 blueprint.config.mjs,就是在修改這些架構產出的專案權威。從權威重新產生檔案, 可讓共用事實維持一致,也讓 inspect 與 doctor 有具體內容可驗證。

延伸閱讀:核心信念 · 分層架構 · 元件設計 · 工作紀律