設計統計
這是一次計數過程,而非品味的指導。其他反抄襲技能陳述原則;原則總會被逐項正當化所規避。這個技能透過強制計算,使規避行為變得可見。
為什麼存在
這個技能源於一個真實的失敗案例:在一次會話中產生了八個設計變體,每個都使用了小號的追蹤全大寫標籤作為章節標題。每個實例在當時都有看似合理的正當理由。但沒有人將它們加總起來。總數是37個,分散在五個原本被認為視覺上截然不同的變體中。基本原則(「在標籤之前使用層級結構」)一直在可用狀態,但從未被應用。
計數不像判斷那樣可以被規避。執行計數。
規則
在展示任何UI作品前——每次,沒有例外——產生下面的統計表並將其包含在消息中。 不是總結。是表格本身,包含數字。
如果計數大於零,要麼修復它,要麼為每個實例撰寫具體的正當理由。「這裡感覺對了」不是正當理由。如果相同模式出現在多個螢幕或變體中,這就是發現,無論每個實例單獨閱讀時看起來如何。
永遠不要在沒有實際檢查輸出的情況下報告統計結果為乾淨。閱讀標記或樣式;不要根據你記憶中的編寫內容來推斷。
禁止的模式
完全禁止。除非使用者在當前請求中明確指名要求,否則這些模式不可用。設計簡報中宣告它們是不夠的。
| # | 模式 | 檢測方式 |
|---|---|---|
| 1 | 追蹤或單色全大寫眉毛文字 | text-transform: uppercase 且 (等寬字型系列 OR letter-spacing >= 0.05em) |
| 2 | 在散文/正文中使用等寬字型 | 在非代碼、非文字值、非標識符或非數字的字串上使用等寬字型系列 |
| 3 | 標題粗細700或更粗 | 任何標題或展示文字在 font-weight >= 700 |
| 4 | 斜體展示類型 | 在標題或展示大小中使用 font-style: italic |
| 5 | 單一元素同時具有邊框和陰影 | 同一個節點上同時有 border 和 box-shadow |
| 6 | 藥丸形狀中的前置點 | 圓圈、點或小的填充形狀作為藥丸、晶片、徽章或標籤的第一個子元素 |
| 7 | Lucide 圖示 | Lucide 圖標集,或手繪SVG再現其形狀(1.5px 描邊、圓頭、24x24 幾何字形)。手繪預設會收斂到 Lucide——假設任何手繪圖示都是違規,直到與批准的集合核對確認 |
按實例計數並正當化,而非完全禁止:
| # | 模式 | 檢測方式 |
|---|---|---|
| 8 | 分隔線 | 計算每個螢幕中的規則線、頭髮線和作為分隔符的邊框。每個都需要一個理由,說明為什麼空白或相鄰關係無法滿足需求 |
| 9 | 容器卡片 | 計算每個螢幕中每個有邊框或填充的盒子。標記任何直接嵌套在另一個內部的盒子 |
| 10 | 多餘文字 | 重複相鄰值、標籤或狀態已傳達資訊的散文 |
| 11 | 跨變體的相同插槽 | 當產生N個被呈現為截然不同的變體時,任何插槽——章節標籤、頁腳、頁首、按鈕形狀、間距韻律——在所有N個變體中渲染完全相同 |
規則11是跨變體檢查。在展示一組變體前,比較每個變體中的相同插槽。具有相同標籤處理的不同情緒不是截然不同的變體。
圖示
批准的圖示集:Phosphor。使用它,而不是手繪字形。
在添加任何圖示之前,問問它是否承載了文字無法傳達的資訊。如果文字標籤有效,就使用文字標籤。
執行檢查器
對於以代碼形式存在的UI,在手工計數之前運行腳本:
python3 ~/.claude/skills/design-tally/scripts/tally.py <路徑> [--json] [--quiet]
它涵蓋規則1-6並印出統計表。退出碼為1時僅當可證明的規則(1、5、6)有命中,因此它可以在不因候選項而失敗的情況下,作為鉤子或CI步驟的閘門。
規則2、3和4會被報告為候選項,而非違規——腳本可以識別等寬字型系列或700粗細,但無法區分散文與代碼,或標題與標籤。你自己分類每個候選項,並說明判定的方向。
腳本無法看到規則7-11,也完全無法讀取Paper或Figma畫板。對於設計工具的工作,使用 get_jsx 或等效方法手工計數——永遠不要從截圖中計數,也永遠不要根據你書寫的記憶計數。
乾淨的腳本運行不等於乾淨的統計。它僅涵蓋11條規則中的6條,且僅限於代碼。
輸出格式
報告每一條規則,包括計數為零的——零本身也是資訊,僅列出命中會隱藏實際是否運行了計數。
設計統計
| 規則 | 計數 | 位置 |
|------|-------|-------|
| 1 眉毛文字 | 0 | — |
| 2 等寬字型用於散文 | 2 | 英雄區下方說明;空狀態行 |
| ... | | |
然後,對於每個非零計數:修復它,或說明每個實例的正當理由。
添加到這個列表
當使用者識別出新模式時,將其添加到表格中,並附上足夠具體的檢測規則以便計數。如果它無法被表述為可檢測的條件,則它屬於原則技能,而非這個技能。