sillyspec 3.20.2 → 3.20.4

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.
Files changed (133) hide show
  1. package/.claude/skills/sillyspec-archive/SKILL.md +21 -21
  2. package/.claude/skills/sillyspec-auto/SKILL.md +83 -83
  3. package/.claude/skills/sillyspec-brainstorm/SKILL.md +44 -44
  4. package/.claude/skills/sillyspec-commit/SKILL.md +106 -106
  5. package/.claude/skills/sillyspec-continue/SKILL.md +45 -45
  6. package/.claude/skills/sillyspec-doctor/SKILL.md +31 -31
  7. package/.claude/skills/sillyspec-execute/SKILL.md +30 -30
  8. package/.claude/skills/sillyspec-explore/SKILL.md +109 -109
  9. package/.claude/skills/sillyspec-knowledge/SKILL.md +269 -269
  10. package/.claude/skills/sillyspec-plan/SKILL.md +21 -21
  11. package/.claude/skills/sillyspec-propose/SKILL.md +21 -21
  12. package/.claude/skills/sillyspec-quick/SKILL.md +21 -21
  13. package/.claude/skills/sillyspec-resume/SKILL.md +68 -68
  14. package/.claude/skills/sillyspec-scan/SKILL.md +21 -21
  15. package/.claude/skills/sillyspec-state/SKILL.md +54 -54
  16. package/.claude/skills/sillyspec-status/SKILL.md +21 -21
  17. package/.claude/skills/sillyspec-verify/SKILL.md +21 -21
  18. package/.claude/skills/sillyspec-workspace/SKILL.md +157 -157
  19. package/.husky/pre-push +13 -13
  20. package/CLAUDE.md +18 -18
  21. package/README.md +198 -188
  22. package/SKILL.md +90 -91
  23. package/bin/sillyspec.js +2 -2
  24. package/docs/brainstorm-plan-contract.md +64 -64
  25. package/docs/plan-execute-contract.md +123 -123
  26. package/docs/platform-scan-protocol.md +298 -298
  27. package/docs/revision-mode.md +115 -115
  28. package/docs/sillyspec/file-lifecycle/known-implementation-gaps.md +99 -99
  29. package/docs/sillyspec/file-lifecycle/platform-workflows-sync.md +218 -218
  30. package/docs/sillyspec/file-lifecycle/stage-artifacts.md +167 -167
  31. package/docs/sillyspec/file-lifecycle/storage-and-state.md +148 -148
  32. package/docs/sillyspec/file-lifecycle/worktree-and-guard.md +211 -193
  33. package/docs/sillyspec/file-lifecycle.md +125 -125
  34. package/docs/workflow-contract-regression.md +106 -106
  35. package/docs/worktree-isolation.md +252 -252
  36. package/package.json +40 -40
  37. package/packages/dashboard/dist/assets/index-Bq_Z2hne.js +7446 -7446
  38. package/packages/dashboard/dist/assets/index-O2W5RV4z.css +1 -1
  39. package/packages/dashboard/dist/index.html +16 -16
  40. package/packages/dashboard/index.html +15 -15
  41. package/packages/dashboard/package-lock.json +2384 -2384
  42. package/packages/dashboard/package.json +25 -25
  43. package/packages/dashboard/server/executor.js +86 -86
  44. package/packages/dashboard/server/index.js +588 -588
  45. package/packages/dashboard/server/parser.js +526 -526
  46. package/packages/dashboard/server/watcher.js +344 -344
  47. package/packages/dashboard/src/App.vue +558 -558
  48. package/packages/dashboard/src/components/ActionBar.vue +93 -93
  49. package/packages/dashboard/src/components/CommandPalette.vue +96 -96
  50. package/packages/dashboard/src/components/DetailPanel.vue +137 -137
  51. package/packages/dashboard/src/components/LogStream.vue +65 -65
  52. package/packages/dashboard/src/components/PipelineStage.vue +95 -95
  53. package/packages/dashboard/src/components/PipelineView.vue +156 -156
  54. package/packages/dashboard/src/components/ProjectList.vue +210 -210
  55. package/packages/dashboard/src/components/StageBadge.vue +67 -67
  56. package/packages/dashboard/src/components/StepCard.vue +94 -94
  57. package/packages/dashboard/src/components/detail/DocsDetail.vue +48 -48
  58. package/packages/dashboard/src/components/detail/GitDetail.vue +61 -61
  59. package/packages/dashboard/src/components/detail/TechDetail.vue +43 -43
  60. package/packages/dashboard/src/composables/useDashboard.js +170 -170
  61. package/packages/dashboard/src/composables/useKeyboard.js +119 -119
  62. package/packages/dashboard/src/composables/useWebSocket.js +129 -129
  63. package/packages/dashboard/src/main.js +8 -8
  64. package/packages/dashboard/src/style.css +132 -132
  65. package/packages/dashboard/vite.config.js +18 -18
  66. package/src/brainstorm-postcheck.js +158 -158
  67. package/src/change-list.js +52 -52
  68. package/src/change-risk-profile.js +352 -352
  69. package/src/classify-change.js +73 -73
  70. package/src/constants.js +70 -70
  71. package/src/contract-matrix.js +278 -278
  72. package/src/db.js +201 -201
  73. package/src/endpoint-extractor.js +315 -315
  74. package/src/hooks/claude-pre-tool-use.cjs +125 -125
  75. package/src/hooks/worktree-guard.js +653 -653
  76. package/src/index.js +922 -900
  77. package/src/init.js +431 -431
  78. package/src/knowledge-match.js +130 -130
  79. package/src/migrate.js +117 -117
  80. package/src/modules.js +482 -482
  81. package/src/progress.js +1734 -1734
  82. package/src/run.js +3465 -3358
  83. package/src/scan-postcheck.js +387 -383
  84. package/src/setup.js +398 -398
  85. package/src/stage-contract.js +700 -700
  86. package/src/stages/archive.js +160 -160
  87. package/src/stages/brainstorm-auto.js +229 -229
  88. package/src/stages/brainstorm.js +645 -645
  89. package/src/stages/doctor.js +365 -365
  90. package/src/stages/execute.js +625 -625
  91. package/src/stages/explore.js +34 -34
  92. package/src/stages/index.js +29 -29
  93. package/src/stages/knowledge.js +498 -498
  94. package/src/stages/plan-postcheck.js +511 -513
  95. package/src/stages/plan.js +582 -582
  96. package/src/stages/propose.js +174 -174
  97. package/src/stages/quick.js +82 -82
  98. package/src/stages/scan.js +558 -558
  99. package/src/stages/status.js +65 -65
  100. package/src/stages/verify.js +322 -322
  101. package/src/sync.js +497 -497
  102. package/src/task-review.js +346 -346
  103. package/src/workflow.js +785 -785
  104. package/src/worktree-apply.js +549 -549
  105. package/src/worktree-deps.js +185 -0
  106. package/src/worktree.js +982 -932
  107. package/templates/workflows/archive-impact.yaml +79 -79
  108. package/templates/workflows/scan-docs.yaml +132 -132
  109. package/test/brainstorm-plan-contract.test.mjs +273 -273
  110. package/test/check-syntax.mjs +26 -26
  111. package/test/contract-artifacts.test.mjs +323 -323
  112. package/test/decision-supersede.test.mjs +277 -277
  113. package/test/knowledge-match.test.mjs +231 -231
  114. package/test/plan-execute-contract.test.mjs +330 -330
  115. package/test/plan-optimization.test.mjs +572 -572
  116. package/test/platform-artifacts.test.mjs +166 -166
  117. package/test/platform-failure-samples.test.mjs +199 -199
  118. package/test/platform-recovery-chain.test.mjs +167 -167
  119. package/test/platform-recovery.test.mjs +136 -136
  120. package/test/platform-scan-p0.test.mjs +168 -168
  121. package/test/revision-v1.test.mjs +1145 -1145
  122. package/test/run-scan-project-parse.test.mjs +200 -200
  123. package/test/run-tests.mjs +48 -48
  124. package/test/scan-knowledge.test.mjs +175 -175
  125. package/test/scan-paths.test.mjs +68 -68
  126. package/test/scan-postcheck.test.mjs +197 -197
  127. package/test/spec-dir.test.mjs +206 -206
  128. package/test/stage-contract.test.mjs +299 -299
  129. package/test/stage-definitions.test.mjs +39 -39
  130. package/test/wait-gates.test.mjs +496 -496
  131. package/test/worktree-deps-provision.test.mjs +148 -0
  132. package/test/worktree-guard.test.mjs +71 -71
  133. package/test/worktree-native-overlay.test.mjs +188 -188
@@ -1,31 +1,31 @@
1
- ---
2
- name: sillyspec:doctor
3
- description: 用于 SillySpec 自检和状态修复。适合用户说"检查下状态、修复 progress、doctor、状态不对"。全量扫描进度一致性,修复进度数据与实际产出不匹配的问题。
4
- ---
5
-
6
- ## 前置检查
7
-
8
- **在执行任何检查之前,先确认 SillySpec CLI 是否可用:**
9
-
10
- 1. 运行 `sillyspec --version`
11
- 2. 如果失败:
12
- - 输出:❌ SillySpec CLI 未安装
13
- - 给出安装命令:`npm install -g sillyspec`
14
- - 停止,不要继续后续步骤
15
-
16
- ## 多变更说明
17
-
18
- 如果项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录),所有 `sillyspec run` 命令需要加 `--change <变更名>`。只有一个变更时可省略(CLI 自动检测)。
19
-
20
- ## 执行
21
-
22
- **CLI 可用后,使用 exec 工具(shell)执行以下命令,不要自己编造流程:**
23
-
24
- 1. 运行 `sillyspec run doctor` — 读取输出的步骤 prompt
25
- 2. 按照输出的 prompt **严格执行**,不要跳过或自行添加步骤
26
- 3. 步骤完成后,运行 `sillyspec run doctor --done --output "你的摘要"`
27
- 4. 重复 2-3 直到阶段完成
28
- 5. **禁止**在没有运行 CLI 的情况下自行决定流程
29
-
30
- ## 用户指令
31
- $ARGUMENTS
1
+ ---
2
+ name: sillyspec:doctor
3
+ description: 用于 SillySpec 自检和状态修复。适合用户说"检查下状态、修复 progress、doctor、状态不对"。全量扫描进度一致性,修复进度数据与实际产出不匹配的问题。
4
+ ---
5
+
6
+ ## 前置检查
7
+
8
+ **在执行任何检查之前,先确认 SillySpec CLI 是否可用:**
9
+
10
+ 1. 运行 `sillyspec --version`
11
+ 2. 如果失败:
12
+ - 输出:❌ SillySpec CLI 未安装
13
+ - 给出安装命令:`npm install -g sillyspec`
14
+ - 停止,不要继续后续步骤
15
+
16
+ ## 多变更说明
17
+
18
+ 如果项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录),所有 `sillyspec run` 命令需要加 `--change <变更名>`。只有一个变更时可省略(CLI 自动检测)。
19
+
20
+ ## 执行
21
+
22
+ **CLI 可用后,使用 exec 工具(shell)执行以下命令,不要自己编造流程:**
23
+
24
+ 1. 运行 `sillyspec run doctor` — 读取输出的步骤 prompt
25
+ 2. 按照输出的 prompt **严格执行**,不要跳过或自行添加步骤
26
+ 3. 步骤完成后,运行 `sillyspec run doctor --done --output "你的摘要"`
27
+ 4. 重复 2-3 直到阶段完成
28
+ 5. **禁止**在没有运行 CLI 的情况下自行决定流程
29
+
30
+ ## 用户指令
31
+ $ARGUMENTS
@@ -1,30 +1,30 @@
1
- ---
2
- name: sillyspec:execute
3
- description: 用于按 plan 执行代码实现。适合用户说"开始写代码、执行任务、跑 execute、开干"。按 plan.md 中的 Wave 和 Task 逐步实现,遵循 design.md 和模块文档。
4
- ---
5
-
6
- ## 多变更说明
7
-
8
- 如果项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录),所有 `sillyspec run` 命令需要加 `--change <变更名>`。只有一个变更时可省略(CLI 自动检测)。
9
-
10
- ## 执行
11
-
12
- **你必须使用 exec 工具(shell)执行以下命令,不要自己编造流程:**
13
-
14
- 1. 运行 `sillyspec run execute` — CLI 会自动创建 worktree 隔离环境,然后输出步骤 prompt
15
- 2. 按照输出的 prompt **严格执行**,不要跳过或自行添加步骤
16
- 3. 步骤完成后,运行 `sillyspec run execute --done --output "你的摘要"`
17
- 4. 重复 2-3 直到阶段完成
18
- 5. **禁止**在没有运行 CLI 的情况下自行决定流程
19
-
20
- ## Worktree 隔离
21
-
22
- - CLI 启动 execute 阶段时**自动创建 git worktree**,AI agent 不需要手动创建
23
- - Worktree 路径在 Step 3(确认 worktree 路径)中输出,后续子代理的 cwd 必须设为该路径
24
- - **禁止跳过 worktree 或在主仓库直接写代码**
25
- - 如果 worktree 创建失败,CLI 会报错并退出,需要排查后再重试
26
- - **未提交的文件、dirty 状态等不影响 worktree 创建和进入,直接按 CLI 输出的 worktree 路径操作即可**
27
- - 不要自行检查 git 状态来判断是否可以进入 worktree,CLI 会自动处理
28
-
29
- ## 用户指令
30
- $ARGUMENTS
1
+ ---
2
+ name: sillyspec:execute
3
+ description: 用于按 plan 执行代码实现。适合用户说"开始写代码、执行任务、跑 execute、开干"。按 plan.md 中的 Wave 和 Task 逐步实现,遵循 design.md 和模块文档。
4
+ ---
5
+
6
+ ## 多变更说明
7
+
8
+ 如果项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录),所有 `sillyspec run` 命令需要加 `--change <变更名>`。只有一个变更时可省略(CLI 自动检测)。
9
+
10
+ ## 执行
11
+
12
+ **你必须使用 exec 工具(shell)执行以下命令,不要自己编造流程:**
13
+
14
+ 1. 运行 `sillyspec run execute` — CLI 会自动创建 worktree 隔离环境,然后输出步骤 prompt
15
+ 2. 按照输出的 prompt **严格执行**,不要跳过或自行添加步骤
16
+ 3. 步骤完成后,运行 `sillyspec run execute --done --output "你的摘要"`
17
+ 4. 重复 2-3 直到阶段完成
18
+ 5. **禁止**在没有运行 CLI 的情况下自行决定流程
19
+
20
+ ## Worktree 隔离
21
+
22
+ - CLI 启动 execute 阶段时**自动创建 git worktree**,AI agent 不需要手动创建
23
+ - Worktree 路径在 Step 3(确认 worktree 路径)中输出,后续子代理的 cwd 必须设为该路径
24
+ - **禁止跳过 worktree 或在主仓库直接写代码**
25
+ - 如果 worktree 创建失败,CLI 会报错并退出,需要排查后再重试
26
+ - **未提交的文件、dirty 状态等不影响 worktree 创建和进入,直接按 CLI 输出的 worktree 路径操作即可**
27
+ - 不要自行检查 git 状态来判断是否可以进入 worktree,CLI 会自动处理
28
+
29
+ ## 用户指令
30
+ $ARGUMENTS
@@ -1,109 +1,109 @@
1
- ---
2
- name: sillyspec:explore
3
- description: 用于自由讨论、代码库调研、方案比较、画 ASCII 图、澄清问题。适合用户说"分析下、讨论下、看看怎么设计、先别写代码、调研一下、画个结构图、帮我再分析下"。只读,不修改文件,不实现功能。
4
- ---
5
-
6
- ## 交互规范
7
-
8
- **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
9
-
10
- 不要用编号列表让用户手动输入数字。
11
- 如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
12
-
13
- ---
14
-
15
- 你现在是 SillySpec 的自由思考伙伴。
16
-
17
- ## 话题
18
- $ARGUMENTS
19
-
20
- ## 多变更说明
21
-
22
- 如果项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录),所有 `sillyspec run` 命令需要加 `--change <变更名>`。只有一个变更时可省略(CLI 自动检测)。
23
-
24
- ## 执行
25
-
26
- **你必须先使用 exec 工具(shell)执行以下命令读取统一 CLI prompt:**
27
-
28
- 1. 运行 `sillyspec run explore` — 读取输出的探索模式 prompt
29
- 2. 按照输出的 prompt 和本技能约束执行探索
30
- 3. 探索告一段落后,运行 `sillyspec run explore --done --input "<用户原始话题>" --output "你的摘要"`
31
- 4. **禁止**在没有运行 CLI 的情况下自行决定流程
32
-
33
- ## 这是什么模式
34
-
35
- **探索模式用于思考,不用于实现。** 你可以读文件、搜代码、调查代码库,但绝对不能写代码或实现功能。如果用户要求实现,提醒他们先退出探索模式。
36
-
37
- **这不是一个工作流,是一种姿态。** 没有固定步骤、没有必需的输出。你是一个帮助用户思考的伙伴。
38
-
39
- ## 姿态
40
-
41
- - **好奇,不说教** — 问自然产生的问题,不按脚本走
42
- - **开放式线程** — 展示多个有趣方向,让用户选择
43
- - **可视化** — 大量使用 ASCII 图表
44
- - **自适应** — 追随有趣的线索,随时转向
45
- - **耐心** — 不急着下结论
46
- - **务实** — 探索实际代码库,不只纸上谈兵
47
-
48
- ## 你可以做的事
49
-
50
- **探索问题空间:** 问澄清问题、挑战假设、重新定义问题
51
-
52
- **调查代码库:** 映射相关架构、找集成点、识别已有模式、暴露隐藏复杂性
53
-
54
- **比较选项:** 头脑风暴多种方案、建对比表、画权衡分析
55
-
56
- **画图:**
57
- ```
58
- ┌─────────────────────────────────┐
59
- │ 用 ASCII 图自由表达 │
60
- ├─────────────────────────────────┤
61
- │ │
62
- │ ┌────────┐ ┌────────┐ │
63
- │ │ State │──────▶│ State │ │
64
- │ │ A │ │ B │ │
65
- │ └────────┘ └────────┘ │
66
- │ │
67
- └─────────────────────────────────┘
68
- ```
69
-
70
- **暴露风险:** 识别可能出错的地方、发现理解空白
71
-
72
- ## OpenSpec 上下文感知
73
-
74
- ### 检查已有上下文
75
-
76
- ```bash
77
- # 查看进行中的变更
78
- ls .sillyspec/changes/ 2>/dev/null | grep -v archive
79
- # 查看需求
80
- cat .sillyspec/REQUIREMENTS.md 2>/dev/null
81
- cat .sillyspec/ROADMAP.md 2>/dev/null
82
- ```
83
-
84
- ### 当有进行中的变更时
85
-
86
- 读取变更的 proposal、design、tasks,自然地引用它们。
87
-
88
- 当发现重要的决策时,**提议保存**(不自动保存):
89
-
90
- 请选择:
91
- 1. 写入 design.md
92
- 2. 加入 specs
93
- 3. 暂不保存
94
-
95
- ## 没有必需的结束
96
-
97
- 探索可以:
98
- 1. 创建变更提案 — 流入 proposal
99
- 2. 产出文档更新
100
- 3. 继续探索
101
- 4. 结束探索
102
-
103
- ## 禁止事项
104
-
105
- - ❌ 写实现代码
106
- - ❌ 安装依赖
107
- - ❌ 修改任何文件(除非用户明确要求保存发现)
108
- - ❌ 强行下结论
109
- - ❌ 强行结构化(让模式自然涌现)
1
+ ---
2
+ name: sillyspec:explore
3
+ description: 用于自由讨论、代码库调研、方案比较、画 ASCII 图、澄清问题。适合用户说"分析下、讨论下、看看怎么设计、先别写代码、调研一下、画个结构图、帮我再分析下"。只读,不修改文件,不实现功能。
4
+ ---
5
+
6
+ ## 交互规范
7
+
8
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
9
+
10
+ 不要用编号列表让用户手动输入数字。
11
+ 如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
12
+
13
+ ---
14
+
15
+ 你现在是 SillySpec 的自由思考伙伴。
16
+
17
+ ## 话题
18
+ $ARGUMENTS
19
+
20
+ ## 多变更说明
21
+
22
+ 如果项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录),所有 `sillyspec run` 命令需要加 `--change <变更名>`。只有一个变更时可省略(CLI 自动检测)。
23
+
24
+ ## 执行
25
+
26
+ **你必须先使用 exec 工具(shell)执行以下命令读取统一 CLI prompt:**
27
+
28
+ 1. 运行 `sillyspec run explore` — 读取输出的探索模式 prompt
29
+ 2. 按照输出的 prompt 和本技能约束执行探索
30
+ 3. 探索告一段落后,运行 `sillyspec run explore --done --input "<用户原始话题>" --output "你的摘要"`
31
+ 4. **禁止**在没有运行 CLI 的情况下自行决定流程
32
+
33
+ ## 这是什么模式
34
+
35
+ **探索模式用于思考,不用于实现。** 你可以读文件、搜代码、调查代码库,但绝对不能写代码或实现功能。如果用户要求实现,提醒他们先退出探索模式。
36
+
37
+ **这不是一个工作流,是一种姿态。** 没有固定步骤、没有必需的输出。你是一个帮助用户思考的伙伴。
38
+
39
+ ## 姿态
40
+
41
+ - **好奇,不说教** — 问自然产生的问题,不按脚本走
42
+ - **开放式线程** — 展示多个有趣方向,让用户选择
43
+ - **可视化** — 大量使用 ASCII 图表
44
+ - **自适应** — 追随有趣的线索,随时转向
45
+ - **耐心** — 不急着下结论
46
+ - **务实** — 探索实际代码库,不只纸上谈兵
47
+
48
+ ## 你可以做的事
49
+
50
+ **探索问题空间:** 问澄清问题、挑战假设、重新定义问题
51
+
52
+ **调查代码库:** 映射相关架构、找集成点、识别已有模式、暴露隐藏复杂性
53
+
54
+ **比较选项:** 头脑风暴多种方案、建对比表、画权衡分析
55
+
56
+ **画图:**
57
+ ```
58
+ ┌─────────────────────────────────┐
59
+ │ 用 ASCII 图自由表达 │
60
+ ├─────────────────────────────────┤
61
+ │ │
62
+ │ ┌────────┐ ┌────────┐ │
63
+ │ │ State │──────▶│ State │ │
64
+ │ │ A │ │ B │ │
65
+ │ └────────┘ └────────┘ │
66
+ │ │
67
+ └─────────────────────────────────┘
68
+ ```
69
+
70
+ **暴露风险:** 识别可能出错的地方、发现理解空白
71
+
72
+ ## OpenSpec 上下文感知
73
+
74
+ ### 检查已有上下文
75
+
76
+ ```bash
77
+ # 查看进行中的变更
78
+ ls .sillyspec/changes/ 2>/dev/null | grep -v archive
79
+ # 查看需求
80
+ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
81
+ cat .sillyspec/ROADMAP.md 2>/dev/null
82
+ ```
83
+
84
+ ### 当有进行中的变更时
85
+
86
+ 读取变更的 proposal、design、tasks,自然地引用它们。
87
+
88
+ 当发现重要的决策时,**提议保存**(不自动保存):
89
+
90
+ 请选择:
91
+ 1. 写入 design.md
92
+ 2. 加入 specs
93
+ 3. 暂不保存
94
+
95
+ ## 没有必需的结束
96
+
97
+ 探索可以:
98
+ 1. 创建变更提案 — 流入 proposal
99
+ 2. 产出文档更新
100
+ 3. 继续探索
101
+ 4. 结束探索
102
+
103
+ ## 禁止事项
104
+
105
+ - ❌ 写实现代码
106
+ - ❌ 安装依赖
107
+ - ❌ 修改任何文件(除非用户明确要求保存发现)
108
+ - ❌ 强行下结论
109
+ - ❌ 强行结构化(让模式自然涌现)