Files
awoooi/.dependency-cruiser.cjs
OG T a9f8ad56c1 chore: 未提交變更整理 (API core + docs + scripts)
API 核心:
- constants.py: 系統常量定義
- unit_of_work.py: Unit of Work 模式
- incident_approval_service.py: Incident-Approval 同步服務

文檔更新:
- LOGBOOK.md: 進度更新
- AWOOOI_AGENTIC_WORKSPACE_ROADMAP.md: 路線圖
- 2026-03-26_llm_testing_evaluation.md: LLM 測試評估
- phase5_telemetry_architecture.md: 遙測架構
- SECRETS_REFERENCE.md: 密鑰參考

配置/腳本:
- Skill 02 v1.x: leWOOOgo 後端更新
- .dependency-cruiser.cjs: 依賴規則
- demo-multisig-flow.sh: 演示腳本

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-26 19:10:12 +08:00

179 lines
6.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Dependency Cruiser Configuration - Phase 14.2
* ==============================================
*
* ADR-014: 依賴治理規則
*
* Layer Model:
* - Layer 0: Pages (app/) - 可引用所有
* - Layer 1: Features (agent/approval/incident/dashboard) - 禁止互相引用
* - Layer 2: Shared (shared/layout) - 禁止下行引用 Layer 1
* - Layer 3: Primitives (ui/lib/stores/hooks) - 純工具層
*
* @see docs/adr/ADR-014-dependency-governance.md
*/
/** @type {import('dependency-cruiser').IConfiguration} */
module.exports = {
forbidden: [
// =========================================================================
// Layer 1: Feature Isolation (禁止跨 feature 互相引用)
// =========================================================================
{
name: "feature-isolation-agent",
comment: "agent 元件禁止引用其他 feature (approval/incident/dashboard)",
severity: "error",
from: { path: "apps/web/src/components/agent" },
to: { path: "apps/web/src/components/(approval|incident|dashboard)" }
},
{
name: "feature-isolation-approval",
comment: "approval 元件禁止引用其他 feature (agent/incident/dashboard)",
severity: "error",
from: { path: "apps/web/src/components/approval" },
to: { path: "apps/web/src/components/(agent|incident|dashboard)" }
},
{
name: "feature-isolation-incident",
comment: "incident 元件禁止引用其他 feature (agent/approval/dashboard)",
severity: "error",
from: { path: "apps/web/src/components/incident" },
to: { path: "apps/web/src/components/(agent|approval|dashboard)" }
},
{
name: "feature-isolation-dashboard",
comment: "dashboard 元件禁止引用其他 feature (agent/approval/incident)",
severity: "error",
from: { path: "apps/web/src/components/dashboard" },
to: { path: "apps/web/src/components/(agent|approval|incident)" }
},
// =========================================================================
// Layer 2: Shared Isolation (禁止 shared/ui 下行引用 feature)
// =========================================================================
{
name: "shared-no-feature-import",
comment: "shared 元件禁止引用 feature 層 (agent/approval/incident/dashboard)",
severity: "error",
from: { path: "apps/web/src/components/shared" },
to: { path: "apps/web/src/components/(agent|approval|incident|dashboard)" }
},
{
name: "ui-no-feature-import",
comment: "ui 元件禁止引用 feature 層",
severity: "error",
from: { path: "apps/web/src/components/ui" },
to: { path: "apps/web/src/components/(agent|approval|incident|dashboard|shared)" }
},
{
name: "layout-no-feature-import",
comment: "layout 元件禁止引用 feature 層",
severity: "error",
from: { path: "apps/web/src/components/layout" },
to: { path: "apps/web/src/components/(agent|approval|incident|dashboard)" }
},
// =========================================================================
// Components → App 禁止反向引用
// =========================================================================
{
name: "components-no-app-import",
comment: "components 禁止引用 app 路由層",
severity: "error",
from: { path: "apps/web/src/components" },
to: { path: "apps/web/src/app" }
},
// =========================================================================
// 禁止循環依賴
// =========================================================================
{
name: "no-circular",
comment: "禁止循環依賴",
severity: "error",
from: {},
to: {
circular: true
}
},
// =========================================================================
// Hooks/Stores/Lib 不應引用 Components (純工具層)
// =========================================================================
{
name: "hooks-no-component-import",
comment: "hooks 禁止引用 components (純工具層)",
severity: "warn",
from: { path: "apps/web/src/hooks" },
to: { path: "apps/web/src/components" }
},
{
name: "stores-no-component-import",
comment: "stores 禁止引用 components (純工具層)",
severity: "warn",
from: { path: "apps/web/src/stores" },
to: { path: "apps/web/src/components" }
},
{
name: "lib-no-component-import",
comment: "lib 禁止引用 components (純工具層)",
severity: "warn",
from: { path: "apps/web/src/lib" },
to: { path: "apps/web/src/components" }
},
// =========================================================================
// #94: Stores 禁止直接 import API Client
// 原因: 狀態管理層不應直接呼叫 API應透過 hooks 或 components 層
// =========================================================================
{
name: "stores-no-api-import",
comment: "stores 禁止直接引用 api-client (應透過 hooks 層)",
severity: "error",
from: { path: "apps/web/src/stores" },
to: { path: "apps/web/src/lib/api-client" }
}
],
options: {
doNotFollow: {
path: "node_modules"
},
exclude: {
path: [
"node_modules",
"\\.next",
"\\.turbo",
"dist",
"coverage",
"__tests__",
"\\.test\\.",
"\\.spec\\."
]
},
includeOnly: {
path: "apps/web/src"
},
// 2026-03-26: 關閉 TS 前置編譯 (避免 monorepo tsconfig extends 問題)
tsPreCompilationDeps: false,
enhancedResolveOptions: {
exportsFields: ["exports"],
conditionNames: ["import", "require", "node", "default"],
mainFields: ["main", "types"]
},
reporterOptions: {
dot: {
collapsePattern: "node_modules/(@[^/]+/[^/]+|[^/]+)"
},
text: {
highlightFocused: true
}
}
}
};