@qijenchen/design-system 0.1.0-beta.45 → 0.1.0-beta.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +1 -1
- package/ds-canonical/hooks/check_propose_plain_chinese.sh +2 -2
- package/ds-canonical/hooks/check_solo_workflow.sh +49 -0
- package/ds-canonical/hooks/check_story_invariants.sh +1 -1
- package/ds-canonical/hooks/tests/test_check_tab_lg_chrome_header_equal.sh +15 -12
- package/ds-canonical/skills/codex-collab/references/brief-template.md +1 -1
- package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +5 -23
- package/ds-canonical/skills/deep-audit-cross-codex/references/triage-rubric.md +5 -51
- package/ds-canonical/skills/knowledge-prune/SKILL.md +2 -0
- package/ds-story-manifest.json +1 -1
- package/package.json +1 -1
package/CLAUDE.md
CHANGED
|
@@ -107,7 +107,7 @@ CLAUDE.md target ≤ 200(Anthropic best-practice)/ transition ≤ 400 / hard cap
|
|
|
107
107
|
| 3 告訴 user 主要 change(or preview URL)| 讓 user 知道看什麼 |
|
|
108
108
|
| 4 等 user trigger | **「push / OK / 好 / 合 main」** → step 5;**「改 X / 不對 / 等等」** → 繼續 step 1 |
|
|
109
109
|
| 5 Squash merge to main | 不開 PR(可 GitHub API squash-merge OR fast-forward)|
|
|
110
|
-
| 5.5 **SSOT propagation gate**(2026-05-26 加 per user verbatim「push main 後所有 repo 都能獲得更新」)| Hook `check_post_main_ssot_propagate.sh` 偵測 `git push origin main` + diff HEAD~..HEAD 含 SSOT-affecting paths(`packages/design-system/src` + `packages/storybook-config/{addons,addons-preset.ts,preview.tsx}`(無 src/ dir)/ `.claude/{rules,hooks,skills,commands,references}` / `.claude-plugin/*.json` / `hooks/hooks.json` / `CLAUDE.md`)→ inject context 提議 bump npm `0.1.0-beta.<N+1
|
|
110
|
+
| 5.5 **SSOT propagation gate**(2026-05-26 加 per user verbatim「push main 後所有 repo 都能獲得更新」)| Hook `check_post_main_ssot_propagate.sh` 偵測 `git push origin main` + diff HEAD~..HEAD 含 SSOT-affecting paths(`packages/design-system/src` + `packages/storybook-config/{addons,addons-preset.ts,preview.tsx}`(無 src/ dir)/ `.claude/{rules,hooks,skills,commands,references}` / `.claude-plugin/*.json` / `hooks/hooks.json` / `CLAUDE.md`)→ inject context 提議 bump npm `0.1.0-beta.<N+1>`。**bump 版本後、tag 前必跑單一指令 `npm run release:preflight`**(sync version 5-manifest + sync ds-canonical + 全 deterministic gate + build + dogfood + 5-manifest verify,fail-fast,全過寫 HEAD-bound pass-marker)—— 取代舊「手動逐道跑」checklist,根治 beta.43/45 連環 push 失敗(漏 sync 步驟)。全過才 tag + push tag → Release workflow auto-fire → npm publish → ds-product-template + fork repos Dependabot daily auto-PR(整鏈 1 trigger 涵蓋所有 SSOT-affecting 來源)|
|
|
111
111
|
| 6 砍 remote branch | `git push origin --delete <branch>` ;sandbox HTTP 403 → 提醒 user GitHub UI 手動 |
|
|
112
112
|
| 7 Local 對齊 | `git checkout main && git fetch && git reset --hard origin/main && git branch -d <branch>` |
|
|
113
113
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# check_propose_plain_chinese.sh — Stop hook: scan AI 本 turn reply 含「要 user 決策」pattern 但用 jargon 違 propose-in-plain-chinese canonical。
|
|
3
3
|
#
|
|
4
|
-
# 對應 SSOT:.claude/memory/
|
|
4
|
+
# 對應 SSOT:.claude/memory/feedback_propose_discipline.md
|
|
5
5
|
# + CLAUDE.md `# 自主執行 canonical`「SSOT-UI/UX 中文具體人話」明文
|
|
6
6
|
#
|
|
7
7
|
# User 原話 2026-05-15:「已經跟你說過任何要我決策的東西請講具體人話,為何又跟智障一樣講人聽不懂的話呢?」
|
|
@@ -64,7 +64,7 @@ THRESHOLD=10
|
|
|
64
64
|
if [ "$JARGON_COUNT" -ge "$THRESHOLD" ]; then
|
|
65
65
|
echo "🟡 check_propose_plain_chinese WARN:本 turn reply 含 user 決策 prompt + jargon 密度 ${JARGON_COUNT}(threshold ${THRESHOLD})" >&2
|
|
66
66
|
echo "" >&2
|
|
67
|
-
echo "→ 違反 propose-in-plain-chinese canonical(memory/
|
|
67
|
+
echo "→ 違反 propose-in-plain-chinese canonical(memory/feedback_propose_discipline.md SSOT)" >&2
|
|
68
68
|
echo "→ User 原話「請講具體人話,為何又跟智障一樣講人聽不懂的話」" >&2
|
|
69
69
|
echo "→ Rewrite reply:必含 3 段(發生什麼 / 影響什麼 / 各選項 outcome — 全中文具體,禁 jargon)" >&2
|
|
70
70
|
echo "" >&2
|
|
@@ -88,6 +88,27 @@ sys.exit(1)
|
|
|
88
88
|
" 2>/dev/null
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
+
# Helper: shell-aware push-tag detect(2026-06-02 — R4 改用 shlex,對齊 R1/R2/R3,修 plain-grep
|
|
92
|
+
# 對 echo/字串內字面 'git push origin v...' 的 false-positive,per M34 hook-regex 廣度對齊)。
|
|
93
|
+
# shlex.split(comments=True)讓 quoted echo 字串成單一 token → 不會把字串內的 git/push 當相鄰指令。
|
|
94
|
+
detect_push_tag() {
|
|
95
|
+
python3 -c "
|
|
96
|
+
import shlex, sys, re
|
|
97
|
+
try:
|
|
98
|
+
tokens = shlex.split(sys.stdin.read(), comments=True)
|
|
99
|
+
except Exception:
|
|
100
|
+
sys.exit(1)
|
|
101
|
+
for i in range(len(tokens) - 1):
|
|
102
|
+
if tokens[i] == 'git' and tokens[i+1] == 'push':
|
|
103
|
+
for j in range(i+2, len(tokens)):
|
|
104
|
+
t = tokens[j]
|
|
105
|
+
# tag-ref: --tags / refs/tags/... / v<digit>... / X:refs/tags/...
|
|
106
|
+
if t == '--tags' or 'refs/tags/' in t or re.match(r'^v[0-9]', t) or t.endswith(':v') or re.search(r':v[0-9]', t):
|
|
107
|
+
sys.exit(0)
|
|
108
|
+
sys.exit(1)
|
|
109
|
+
" 2>/dev/null
|
|
110
|
+
}
|
|
111
|
+
|
|
91
112
|
# Helper: shell-aware gh pr create / gh api pulls **WRITE** detect
|
|
92
113
|
# 2026-05-09 fix(user-authorized):區分 read(default GET)vs write(POST/PATCH/PUT/DELETE)。
|
|
93
114
|
# `gh api repos/.../pulls/N/comments` 預設 GET = read,**不** block;
|
|
@@ -212,6 +233,34 @@ EOF
|
|
|
212
233
|
2. 告訴 user 主要改動 (or preview URL)
|
|
213
234
|
3. 等 user 明確 trigger 「push」/「OK」 才 merge to main
|
|
214
235
|
|
|
236
|
+
例外 override:CLAUDE_BYPASS_SOLO_WORKFLOW=1 (audit logged)
|
|
237
|
+
EOF
|
|
238
|
+
exit 2
|
|
239
|
+
fi
|
|
240
|
+
fi
|
|
241
|
+
|
|
242
|
+
# === Rule 4 (Bash): push tag without release:preflight pass-marker (M28 release root-cause, 2026-06-02) ===
|
|
243
|
+
# beta.43/45 連環 push 失敗根因 = 發版前靠手動記得逐道 sync/check → 必漏。已修成單一
|
|
244
|
+
# `npm run release:preflight`(syncs + 全 gate + dogfood,全過寫 HEAD-bound marker)。
|
|
245
|
+
# 此 R4 機械強制:任何 push tag(v*)前 marker 必存在且 .head == 當前 HEAD,否則 BLOCK。
|
|
246
|
+
# 用 detect_push_tag(shlex,對齊 R1/R2/R3)而非 plain grep —— 修 echo/字串內字面誤觸發(M34)。
|
|
247
|
+
if echo "$COMMAND" | detect_push_tag; then
|
|
248
|
+
PF_MARKER="$PROJECT_DIR/.claude/logs/release-preflight-pass.json"
|
|
249
|
+
PF_HEAD=$(git -C "$PROJECT_DIR" rev-parse HEAD 2>/dev/null)
|
|
250
|
+
PF_MARKER_HEAD=$(jq -r '.head // empty' "$PF_MARKER" 2>/dev/null)
|
|
251
|
+
if [ ! -f "$PF_MARKER" ] || [ "$PF_MARKER_HEAD" != "$PF_HEAD" ]; then
|
|
252
|
+
cat >&2 <<EOF
|
|
253
|
+
|
|
254
|
+
┄┄┄ check_solo_workflow — R4 BLOCKER (M28 release preflight) ┄┄┄
|
|
255
|
+
|
|
256
|
+
[P0 BLOCKER] git push <tag> 但 release:preflight 未跑過(或跑後 HEAD 已變)。
|
|
257
|
+
marker.head=${PF_MARKER_HEAD:0:12} vs 當前 HEAD=${PF_HEAD:0:12}
|
|
258
|
+
|
|
259
|
+
❌ 發版前必跑單一指令(自動 sync version 5-manifest + ds-canonical + 全 deterministic
|
|
260
|
+
gate + build + dogfood,fail-fast,全過寫 HEAD-bound pass-marker):
|
|
261
|
+
npm run release:preflight
|
|
262
|
+
全過才准 push tag。根治 beta.43/45 連環 push 失敗(漏手動 sync 步驟)。
|
|
263
|
+
|
|
215
264
|
例外 override:CLAUDE_BYPASS_SOLO_WORKFLOW=1 (audit logged)
|
|
216
265
|
EOF
|
|
217
266
|
exit 2
|
|
@@ -513,7 +513,7 @@ rule_story_baseline_reference() {
|
|
|
513
513
|
echo " Read 其 helper(WorkspaceBrand / MAIN_NAV / PageContent / toolbar)當 baseline。" >&2
|
|
514
514
|
echo " 詳 .claude/rules/story-rules.md 「Production-grade composition fidelity」 +" >&2
|
|
515
515
|
echo " .claude/skills/story-writing/SKILL.md Phase 0 +" >&2
|
|
516
|
-
echo " memory/
|
|
516
|
+
echo " memory/feedback_nearest_same_purpose_canonical.md" >&2
|
|
517
517
|
fi
|
|
518
518
|
|
|
519
519
|
# 偵測明顯 simplified mock anti-pattern
|
|
@@ -27,36 +27,39 @@ FAILED_TESTS=""
|
|
|
27
27
|
TMPROOT=$(mktemp -d)
|
|
28
28
|
trap 'rm -rf "$TMPROOT"' EXIT
|
|
29
29
|
|
|
30
|
-
# Setup sandbox:
|
|
31
|
-
|
|
30
|
+
# Setup sandbox: hook 放 .claude/hooks/lib/(對齊 production)。2026-06-01 #18 把 hook 改成
|
|
31
|
+
# `cd $0/../../..` 算 PROJECT_ROOT(因它在 lib/、被 dispatcher 以 $0=lib 路徑呼叫,需 3 層上溯)。
|
|
32
|
+
# test sandbox 必同放 lib/ 深度,否則 `../../..` 多上溯一層 → grep 找不到 CSS → 假 fail(2026-06-02 修)。
|
|
33
|
+
mkdir -p "$TMPROOT/.claude/hooks/lib"
|
|
32
34
|
mkdir -p "$TMPROOT/packages/design-system/src/tokens/uiSize"
|
|
33
35
|
mkdir -p "$TMPROOT/src"
|
|
34
|
-
cp "$SRC_HOOK" "$TMPROOT/.claude/hooks/
|
|
35
|
-
chmod +x "$TMPROOT/.claude/hooks/
|
|
36
|
-
#
|
|
36
|
+
cp "$SRC_HOOK" "$TMPROOT/.claude/hooks/lib/_tab_lg_chrome_header_equal.sh"
|
|
37
|
+
chmod +x "$TMPROOT/.claude/hooks/lib/_tab_lg_chrome_header_equal.sh"
|
|
38
|
+
# _log-fire.sh shim(hook source `$(dirname $0)/../_log-fire.sh` = .claude/hooks/_log-fire.sh)
|
|
37
39
|
cp "$LOG_FIRE_SH" "$TMPROOT/.claude/hooks/_log-fire.sh" 2>/dev/null || true
|
|
38
40
|
|
|
39
|
-
SANDBOX_HOOK="$TMPROOT/.claude/hooks/
|
|
41
|
+
SANDBOX_HOOK="$TMPROOT/.claude/hooks/lib/_tab_lg_chrome_header_equal.sh"
|
|
40
42
|
UISIZE_CSS="$TMPROOT/packages/design-system/src/tokens/uiSize/uiSize.css"
|
|
41
43
|
GLOBALS_CSS="$TMPROOT/src/globals.css"
|
|
42
44
|
|
|
43
45
|
write_tokens() {
|
|
44
46
|
# args: tab_lg_md tab_lg_lg ch_md ch_lg
|
|
47
|
+
# 2026-06-02 修:both token 寫進 uiSize.css —— #18 後 hook 從 uiSize.css 讀 chrome-header
|
|
48
|
+
# (globals.css 是 22 行 aggregator,token 已搬走,deep-audit Decision 1)。原 test 把
|
|
49
|
+
# chrome-header 寫 globals.css → hook grep uiSize.css 空值 → set -e 下 exit 1 假 fail。
|
|
45
50
|
cat > "$UISIZE_CSS" <<EOF
|
|
46
51
|
:root {
|
|
47
52
|
--tab-height-lg: ${1}rem;
|
|
53
|
+
--chrome-header-height: ${3}rem;
|
|
48
54
|
}
|
|
49
55
|
[data-density="lg"] {
|
|
50
56
|
--tab-height-lg: ${2}rem;
|
|
57
|
+
--chrome-header-height: ${4}rem;
|
|
51
58
|
}
|
|
52
59
|
EOF
|
|
53
60
|
cat > "$GLOBALS_CSS" <<EOF
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
[data-density="lg"] {
|
|
58
|
-
--chrome-header-height: ${4}rem;
|
|
59
|
-
}
|
|
61
|
+
/* aggregator — chrome-header-height 已搬至 uiSize.css(deep-audit Decision 1);此檔僅為 hook trigger-path 測試用 */
|
|
62
|
+
:root {}
|
|
60
63
|
EOF
|
|
61
64
|
}
|
|
62
65
|
|
|
@@ -38,7 +38,7 @@ N. <SSOT 是否該抽到更上層 primitive?>
|
|
|
38
38
|
- 必產 3-column cite table(claim / path:line / reasoning)
|
|
39
39
|
|
|
40
40
|
## 🚨 三 invariant — 2026-05-23 user 永久 directive(缺一 = brief 不合格)
|
|
41
|
-
1. **全盤閱讀全部 source**(CLAUDE.md / 31 active M-rules / 5 rules/*.md / 88 audit dims SKILL.md /
|
|
41
|
+
1. **全盤閱讀全部 source**(CLAUDE.md / 31 active M-rules / 5 rules/*.md / 88 audit dims SKILL.md / 全部 spec.md / 全部 stories / 全部 components / tokens / patterns / hooks / 全部 memory files / planning),**禁憑記憶**(spec/story/component/memory 數量隨時變動,故不硬編數字 — 一律「全部」;M-rule / audit-dim 數由 sync-governance-counters 機械守住)
|
|
42
42
|
2. **Triple-verify per finding**:(a) grep DS-wide 確認 pattern 存在 (b) Read 對應 spec.md / tsx 確認 problem 真存在 (c) 對照既有 canonical 確認非 documented exception。任一 NO → 自動撤回,**禁無病呻吟**
|
|
43
43
|
3. **禁抽樣** — DS-wide ALL files 全掃,context 不夠拆 stage 全跑完;sub-agent admission「I sampled / spot-check / representative」= audit incomplete reject
|
|
44
44
|
```
|
|
@@ -102,32 +102,14 @@ detect_mode() {
|
|
|
102
102
|
- **SSOT-UI/UX substantive 增刪改** = 動 component / token / spec.md 視覺結構 / 跨元件 design language / 新 API contract → **STOP propose**
|
|
103
103
|
- **Non-SSOT**(bug fix / clean / refactor / 命名一致 / test / audit / verify / hook regex 加廣 / pointer 補 / spec typo / 漂移 mechanical 對齊)→ **AUTO 整批做完**
|
|
104
104
|
|
|
105
|
-
**SSOT-UI/UX propose 必過
|
|
106
|
-
- Q1
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
- Q4 M10 下游吸收 — 修上游 ≥ 3 處下游 redundant 可清
|
|
110
|
-
|
|
111
|
-
**中文人話 propose format**(per `feedback_propose_in_plain_chinese.md` + hook `check_propose_plain_chinese.sh`,必過):
|
|
112
|
-
|
|
113
|
-
```
|
|
114
|
-
### 決策 N:<一句話標題,zero jargon>
|
|
115
|
-
|
|
116
|
-
**現況**:<目前 code/spec 行為,人話>
|
|
117
|
-
**影響**:<不改會怎樣 / 改了會怎樣,具體>
|
|
118
|
-
**選項**:
|
|
119
|
-
- A. <做法 1>(後果:...)
|
|
120
|
-
- B. <做法 2>(後果:...)
|
|
121
|
-
- C. <不動>(後果:...)
|
|
122
|
-
**我推**:<A / B / C> 因 <理由>
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
禁:術語(L1-L7 / canonical / primitive / SSOT 在 propose 內裸用,該翻成「主檔/共用零件/設計原則」等人話)。
|
|
105
|
+
**SSOT-UI/UX propose 必過 gate + 中文人話 format**(SSOT 在主檔,不在此重述以免多處抄寫漂移):
|
|
106
|
+
- **Propose 前必過 7-Q gate**(Q0 先驗「問題是否真存在」/ Q1 cite / Q1' DS canonical 優先 / Q2 SSOT consume / Q3 Rule-of-3 / Q4 下游吸收 / Q5 issue 100% mapped)→ SSOT `.claude/skills/propose-options/SKILL.md`(hook `check_propose_pre_grep_verify.sh` 機械強制 Q0);M18 為 meta anchor
|
|
107
|
+
- **中文人話 propose format + 禁用 jargon 對照表** → SSOT `.claude/memory/feedback_propose_discipline.md`(hook `check_propose_plain_chinese.sh` 機械強制)
|
|
108
|
+
- **Triage 分流 + format 細則** → `references/triage-rubric.md`
|
|
126
109
|
|
|
127
110
|
### A.3 — Autonomous batch execute(non-SSOT,M33 anti-defer)
|
|
128
111
|
|
|
129
|
-
7
|
|
130
|
-
1. 言簡意賅 / 2. 效率+效能 / 3. SSOT 鐵律(M17/M23/M29/M30)/ 4. 易懂+維護+擴充 / 5. 世界級+一致設計語言 / 6. 完整 self-verify(M20/M31/M32)/ 7. 自動 self-improve(M14/M20)
|
|
112
|
+
7 軸 simultaneous optimize 操作清單 → `references/phase-a-workflow.md` A.3(SSOT `CLAUDE.md` `# 自主執行 canonical`)。
|
|
131
113
|
|
|
132
114
|
**禁defer keyword**:「下次再做 / 下個 session / 省工 / 等等」(M33 BLOCKER)。
|
|
133
115
|
|
|
@@ -27,59 +27,13 @@
|
|
|
27
27
|
- Memory file rotate(已 absorb → demote)
|
|
28
28
|
- Governance / hook / skill 內部 refactor(無 BLOCKER 邏輯改)
|
|
29
29
|
|
|
30
|
-
##
|
|
30
|
+
## 提案紀律(format / gate / 7 軸)→ 全走主檔,不在此重述
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
### 決策 N:<一句話標題,zero jargon>
|
|
32
|
+
本檔曾把這幾項抄成舊的 4-Q(漏最關鍵的 Q0)+ 指向已刪檔 = 漂移實證;一律以主檔為準,改一處不會漏改別處:
|
|
34
33
|
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
**影響**:
|
|
40
|
-
- 不改:<具體後果>
|
|
41
|
-
- 改了:<具體後果>
|
|
42
|
-
|
|
43
|
-
**選項**:
|
|
44
|
-
- A. <做法 1>
|
|
45
|
-
- 後果:<好處 / 代價>
|
|
46
|
-
- 涉及檔案:<count + file 列表>
|
|
47
|
-
- B. <做法 2>
|
|
48
|
-
- 後果:<好處 / 代價>
|
|
49
|
-
- 涉及檔案:<count + file 列表>
|
|
50
|
-
- C. 不動
|
|
51
|
-
- 後果:<漂移持續累積 / 或維持現況的成本>
|
|
52
|
-
|
|
53
|
-
**我推**:<A / B / C> 因 <理由>
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### 4-Q gate(propose 前必 inline 跑,失敗 → 不列 option)
|
|
57
|
-
|
|
58
|
-
| Q | Check | 失敗 → |
|
|
59
|
-
|---|---|---|
|
|
60
|
-
| Q1 M22 cite | 3-column owner table(spec path:line / canonical sentence / conflicting code)| 撤回 propose,先補 anchor |
|
|
61
|
-
| Q2 M17 SSOT | 既有 token / primitive / pattern 列消費清單 | 撤回,先 consume 既有 |
|
|
62
|
-
| Q3 Rule-of-3 | 同概念 ≥ 3 處 → 選 SSOT 其他 pointer | 撤回,選 SSOT home |
|
|
63
|
-
| Q4 M10 下游 | 修上游 ≥ 3 處下游 redundant 可清 | 提案加上「下游 N 處同步 retire」 |
|
|
64
|
-
|
|
65
|
-
### 禁用 jargon list(propose 內 zero tolerance)
|
|
66
|
-
|
|
67
|
-
❌ `L1-L7` / `canonical` / `primitive` / `SSOT` / `consume` / `traits` / `M-rule` / `cva` / `tier` / `tokens` / `wrapper`
|
|
68
|
-
✅ 翻成:`主檔` / `設計原則` / `共用零件` / `通用基底` / `共用設計來源` / `沿用` / `行為類型` / `規則 N` / `樣式拼裝表` / `層級` / `設計變數` / `外殼`
|
|
69
|
-
|
|
70
|
-
## Non-SSOT autonomous 7 軸 simultaneous optimize
|
|
71
|
-
|
|
72
|
-
每次動 code 前 mental check:
|
|
73
|
-
|
|
74
|
-
1. **言簡意賅** — comment / spec 文字短而精;禁長 docstring;禁不必要 comment(per CLAUDE.md `# Tone and style`)
|
|
75
|
-
2. **效率 + 效能** — 避 unnecessary re-render / memo gap / O(N²) algorithm / context thrashing
|
|
76
|
-
3. **SSOT 鐵律** — 動 visual decision 前 grep DS 既有 token / variant / pattern(M23)/ spec.md owner(M29)/ wrapper extends primitive(M30)/ token 而非 hardcode(M17)
|
|
77
|
-
4. **易懂 + 維護 + 擴充** — file size budget(governance ≤ 200/300/500/800)/ function ≤ 80 / naming 一致 / public API 穩定
|
|
78
|
-
5. **世界級 + 一致設計語言** — mindset #1(Polaris / Material / Atlassian / Ant / Carbon / Apple HIG ≥ 3 cite)+ M22 inline cite + M26 propose 前 WebFetch ≥ 3 source
|
|
79
|
-
6. **完整 self-verify** — M20 best-practice score ≥ 80 / M31 5-step(Layer A own + Layer C codex 比稿)/ M32 pixel-quantified audit
|
|
80
|
-
7. **自動 self-improve** — M14 5-layer pipeline(對話結論 → spec / hook / SKILL / CLAUDE.md / memory 該動的全動)+ M20 stop hook auto-score
|
|
81
|
-
|
|
82
|
-
任一軸明顯 degrade → 撤回方案重來,**禁** 「先這樣 / 之後優化」defer keyword(M33 BLOCKER)。
|
|
34
|
+
- **中文人話 propose format + 禁用 jargon 對照表** → SSOT `.claude/memory/feedback_propose_discipline.md`(hook `check_propose_plain_chinese.sh` 機械強制)
|
|
35
|
+
- **Propose 前必過 7-Q gate**(Q0 先驗「問題是否真存在」/ Q1 cite / Q1' DS canonical 優先 / Q2 SSOT consume / Q3 Rule-of-3 / Q4 下游吸收 / Q5 issue 100% mapped)→ SSOT `.claude/skills/propose-options/SKILL.md`(hook `check_propose_pre_grep_verify.sh` 機械強制 Q0);M18 為 meta anchor
|
|
36
|
+
- **Non-SSOT autonomous 7 軸 optimize 操作清單** → `phase-a-workflow.md` A.3;SSOT `CLAUDE.md` `# 自主執行 canonical`(檔案大小上限以該主檔為準,本檔不重述數字)
|
|
83
37
|
|
|
84
38
|
## 收斂判準 — 何時停止 rerun(Phase C.0,2026-06-01 codify)
|
|
85
39
|
|
|
@@ -7,6 +7,8 @@ description: Prune governance sprawl across CLAUDE.md / specs / skills / hooks /
|
|
|
7
7
|
|
|
8
8
|
**目的**:本 DS governance 自身是活的知識庫,若只 append 會讓 CLAUDE.md 載入成本失控、MEMORY.md 條目爆炸、hook 變殭屍、spec.md 重複。本 skill 掃 8 個 home 找冗贅,提議 retire 候選,加嚴執行 Rule-of-3 SSOT + 行數預算。
|
|
9
9
|
|
|
10
|
+
**🔒 核心前提(每次必遵,不需 user 提醒 — mindset #6「tell me once」)**:prune 唯一目的是**移除噪音以銳化 signal、提升遵循正確率**,**絕不以犧牲品質換行數 / 條目下降**。每次跑同時必滿足:(a) 品質不可因 prune 打折;(b) 以**提升品質**(清晰度↑ / drift 風險↓ / recall 精度↑)為目標。故:① 只 retire 真冗餘 / stale / 已被上游完整吸收的條目(這類本身是噪音,清掉反提升正確率);② consolidate 重複(同概念多 home → 選 SSOT + pointer);③ **每條真實 invariant / 機械防線必完整保留 — retire 前必 grep 確認保護已被別處覆蓋,否則不動**;④ distinct 條目強合成大條目會降 recall 精度 = 反 pattern,不做。**retire rate 是結果指標非目標**:湊 % 傷品質 = 違本前提;寧可 retire rate < 5% + report 明寫「成熟無冗餘」rationale,也不強刪真保護。本前提 override 下方所有 Phase / Checkpoint 的數值 target。
|
|
11
|
+
|
|
10
12
|
**對齊 CLAUDE.md `# 治理 canonical`**:本 skill 是 L3(Periodic deep)實作。L1(pre-write hook)+ L2(fire log)自動執行,L3 需人決策 canonical retire,走 checkpoint。
|
|
11
13
|
|
|
12
14
|
**對齊 CLAUDE.md `# 稽核 canonical`「Audit-vs-execute 分權」**:動 canonical substantive meaning → **STOP 提議**;對齊 / 清 duplicate / 回填 pointer → **AUTO**。
|
package/ds-story-manifest.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"scripts/composition-fidelity-visual-diff.mjs",
|
|
8
8
|
"product-workspace apps/template/src/AllDsComponents.stories.tsx (DsCanonicalPortal)"
|
|
9
9
|
],
|
|
10
|
-
"generatedAt": "2026-06-
|
|
10
|
+
"generatedAt": "2026-06-02T12:25:28.155Z"
|
|
11
11
|
},
|
|
12
12
|
"components": {
|
|
13
13
|
"accordion": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qijenchen/design-system",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.46",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "World-class design system — components, patterns, tokens, hooks (single source of truth for team distribution).",
|
|
6
6
|
"type": "module",
|