sillyspec 3.13.0 → 3.14.1
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/package.json +2 -1
- package/src/index.js +134 -0
- package/src/init.js +16 -0
- package/src/run.js +159 -0
- package/src/stages/archive.js +12 -34
- package/src/stages/scan.js +80 -86
- package/src/workflow.js +670 -0
- package/templates/workflows/archive-impact.yaml +79 -0
- package/templates/workflows/scan-docs.yaml +132 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
name: archive-impact
|
|
2
|
+
description: 分析变更影响的模块并同步模块文档
|
|
3
|
+
spec_version: 1
|
|
4
|
+
|
|
5
|
+
roles:
|
|
6
|
+
- id: impact-analyzer
|
|
7
|
+
name: "影响分析"
|
|
8
|
+
task: "分析 git diff,提取变更影响模块"
|
|
9
|
+
inputs:
|
|
10
|
+
paths: [".sillyspec/changes/", ".sillyspec/docs/*/modules/"]
|
|
11
|
+
hints:
|
|
12
|
+
grep_patterns: ["_module-map", "module-impact", "git diff"]
|
|
13
|
+
outputs:
|
|
14
|
+
- path: ".sillyspec/changes/<change-name>/module-impact.md"
|
|
15
|
+
required: true
|
|
16
|
+
checks:
|
|
17
|
+
- type: file_exists
|
|
18
|
+
- type: min_lines
|
|
19
|
+
min: 20
|
|
20
|
+
- type: contains_sections
|
|
21
|
+
sections: ["模块影响矩阵", "未匹配文件"]
|
|
22
|
+
constraints:
|
|
23
|
+
- "以 git diff 为准(真实 > 声明)"
|
|
24
|
+
- "影响类型:逻辑变更/数据结构变更/接口变更/调用关系变更/配置变更/新增"
|
|
25
|
+
- "需要 review 标记不确定的影响"
|
|
26
|
+
|
|
27
|
+
- id: doc-syncer
|
|
28
|
+
name: "文档同步"
|
|
29
|
+
task: "根据 module-impact.md 同步更新模块索引和卡片"
|
|
30
|
+
depends_on:
|
|
31
|
+
- impact-analyzer
|
|
32
|
+
inputs:
|
|
33
|
+
from_role: impact-analyzer
|
|
34
|
+
output: module-impact
|
|
35
|
+
output_description: "变更影响分析结果,包含模块影响矩阵"
|
|
36
|
+
paths: [".sillyspec/docs/*/modules/"]
|
|
37
|
+
hints:
|
|
38
|
+
grep_patterns: ["_module-map", "module-impact"]
|
|
39
|
+
outputs:
|
|
40
|
+
- path: ".sillyspec/docs/sillyspec/modules/_module-map.yaml"
|
|
41
|
+
required: false
|
|
42
|
+
checks:
|
|
43
|
+
- type: file_exists
|
|
44
|
+
- path: ".sillyspec/docs/sillyspec/modules/<module-id>.md"
|
|
45
|
+
required: false
|
|
46
|
+
# checks 跳过:路径含动态 <module-id> 占位符,不适合静态检查
|
|
47
|
+
constraints:
|
|
48
|
+
- "结构化事实改 _module-map.yaml,语义解释改模块卡片"
|
|
49
|
+
- "人工备注区域永远保护,不覆盖"
|
|
50
|
+
- "更新前展示 diff 摘要,请用户确认"
|
|
51
|
+
|
|
52
|
+
orchestration:
|
|
53
|
+
mode: sequential
|
|
54
|
+
timeout_per_role: 180
|
|
55
|
+
|
|
56
|
+
checks:
|
|
57
|
+
role_level:
|
|
58
|
+
- type: file_exists
|
|
59
|
+
- type: min_lines
|
|
60
|
+
min: 10
|
|
61
|
+
workflow_level:
|
|
62
|
+
- type: file_exists
|
|
63
|
+
path: ".sillyspec/changes/<change-name>/module-impact.md"
|
|
64
|
+
|
|
65
|
+
retry:
|
|
66
|
+
max_attempts: 1
|
|
67
|
+
include_failure_context: true
|
|
68
|
+
retry_scope: failed_role_only
|
|
69
|
+
|
|
70
|
+
on_check_failure: prompt_retry
|
|
71
|
+
|
|
72
|
+
permissions:
|
|
73
|
+
write_mode: patch_only
|
|
74
|
+
write_scope:
|
|
75
|
+
- ".sillyspec/docs/"
|
|
76
|
+
- ".sillyspec/changes/<change-name>/"
|
|
77
|
+
allow_shell: true
|
|
78
|
+
allow_network: false
|
|
79
|
+
allow_git: true
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
name: scan-docs
|
|
2
|
+
description: 并行生成项目的扫描文档(7份)
|
|
3
|
+
spec_version: 1
|
|
4
|
+
|
|
5
|
+
roles:
|
|
6
|
+
- id: arch
|
|
7
|
+
name: "技术架构"
|
|
8
|
+
task: "生成 ARCHITECTURE.md"
|
|
9
|
+
inputs:
|
|
10
|
+
paths:
|
|
11
|
+
- "src/*.js"
|
|
12
|
+
- "package.json"
|
|
13
|
+
hints:
|
|
14
|
+
grep_patterns: ["class ", "export ", "import ", "schema", "CREATE TABLE"]
|
|
15
|
+
outputs:
|
|
16
|
+
- path: ".sillyspec/docs/<project>/scan/ARCHITECTURE.md"
|
|
17
|
+
required: true
|
|
18
|
+
checks:
|
|
19
|
+
- type: file_exists
|
|
20
|
+
- type: min_lines
|
|
21
|
+
min: 20
|
|
22
|
+
- type: contains_sections
|
|
23
|
+
sections: ["技术栈", "架构概览"]
|
|
24
|
+
constraints:
|
|
25
|
+
- "禁止读源码全文,只用 grep/rg 搜索"
|
|
26
|
+
- "Schema 只记表名+说明+字段数"
|
|
27
|
+
|
|
28
|
+
- id: conventions
|
|
29
|
+
name: "代码约定"
|
|
30
|
+
task: "生成 CONVENTIONS.md"
|
|
31
|
+
inputs:
|
|
32
|
+
paths: ["src/"]
|
|
33
|
+
hints:
|
|
34
|
+
grep_patterns: ["function ", "const ", "async ", "try ", "catch "]
|
|
35
|
+
outputs:
|
|
36
|
+
- path: ".sillyspec/docs/<project>/scan/CONVENTIONS.md"
|
|
37
|
+
required: true
|
|
38
|
+
checks:
|
|
39
|
+
- type: file_exists
|
|
40
|
+
- type: min_lines
|
|
41
|
+
min: 15
|
|
42
|
+
- type: contains_sections
|
|
43
|
+
sections: ["框架隐形规则", "代码风格"]
|
|
44
|
+
constraints:
|
|
45
|
+
- "禁止读源码全文"
|
|
46
|
+
- "提取 3-5 个典型模式"
|
|
47
|
+
|
|
48
|
+
- id: structure
|
|
49
|
+
name: "目录结构+外部集成"
|
|
50
|
+
task: "生成 STRUCTURE.md 和 INTEGRATIONS.md"
|
|
51
|
+
inputs:
|
|
52
|
+
paths: ["./"]
|
|
53
|
+
hints:
|
|
54
|
+
grep_patterns: ["fetch", "http", "WebSocket", "ws", "chokidar"]
|
|
55
|
+
outputs:
|
|
56
|
+
- path: ".sillyspec/docs/<project>/scan/STRUCTURE.md"
|
|
57
|
+
required: true
|
|
58
|
+
checks:
|
|
59
|
+
- type: file_exists
|
|
60
|
+
- type: min_lines
|
|
61
|
+
min: 15
|
|
62
|
+
- path: ".sillyspec/docs/<project>/scan/INTEGRATIONS.md"
|
|
63
|
+
required: true
|
|
64
|
+
checks:
|
|
65
|
+
- type: file_exists
|
|
66
|
+
- type: min_lines
|
|
67
|
+
min: 15
|
|
68
|
+
constraints:
|
|
69
|
+
- "STRUCTURE: 目录树+模块说明"
|
|
70
|
+
- "INTEGRATIONS: 按类型分组外部依赖"
|
|
71
|
+
|
|
72
|
+
- id: quality
|
|
73
|
+
name: "测试+债务+概览"
|
|
74
|
+
task: "生成 TESTING.md、CONCERNS.md、PROJECT.md"
|
|
75
|
+
inputs:
|
|
76
|
+
paths: ["src/", "packages/"]
|
|
77
|
+
hints:
|
|
78
|
+
grep_patterns: ["TODO", "FIXME", "deprecated", "test", "describe"]
|
|
79
|
+
outputs:
|
|
80
|
+
- path: ".sillyspec/docs/<project>/scan/TESTING.md"
|
|
81
|
+
required: true
|
|
82
|
+
checks:
|
|
83
|
+
- type: file_exists
|
|
84
|
+
- type: min_lines
|
|
85
|
+
min: 10
|
|
86
|
+
- type: no_placeholder
|
|
87
|
+
- path: ".sillyspec/docs/<project>/scan/CONCERNS.md"
|
|
88
|
+
required: true
|
|
89
|
+
checks:
|
|
90
|
+
- type: file_exists
|
|
91
|
+
- type: min_lines
|
|
92
|
+
min: 10
|
|
93
|
+
- type: contains_sections
|
|
94
|
+
sections: ["代码质量", "依赖风险"]
|
|
95
|
+
- path: ".sillyspec/docs/<project>/scan/PROJECT.md"
|
|
96
|
+
required: true
|
|
97
|
+
checks:
|
|
98
|
+
- type: file_exists
|
|
99
|
+
- type: min_lines
|
|
100
|
+
min: 15
|
|
101
|
+
- type: contains_sections
|
|
102
|
+
sections: ["项目简介", "技术栈"]
|
|
103
|
+
constraints:
|
|
104
|
+
- "CONCERNS 按严重程度分组(🔴/🟡/🟢)"
|
|
105
|
+
- "不编造不存在的测试"
|
|
106
|
+
|
|
107
|
+
orchestration:
|
|
108
|
+
mode: parallel
|
|
109
|
+
max_concurrent: 4
|
|
110
|
+
timeout_per_role: 120
|
|
111
|
+
|
|
112
|
+
checks:
|
|
113
|
+
workflow_level:
|
|
114
|
+
- type: file_count
|
|
115
|
+
path: "scan/"
|
|
116
|
+
min: 7
|
|
117
|
+
- type: no_empty_files
|
|
118
|
+
|
|
119
|
+
retry:
|
|
120
|
+
max_attempts: 1
|
|
121
|
+
include_failure_context: true
|
|
122
|
+
retry_scope: failed_role_only
|
|
123
|
+
|
|
124
|
+
on_check_failure: prompt_retry
|
|
125
|
+
|
|
126
|
+
permissions:
|
|
127
|
+
write_mode: direct
|
|
128
|
+
write_scope:
|
|
129
|
+
- ".sillyspec/docs/<project>/scan/"
|
|
130
|
+
allow_shell: true
|
|
131
|
+
allow_network: false
|
|
132
|
+
allow_git: false
|