運作守則
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 有具體內容可驗證。
