mspec-cli 5.0.0__tar.gz → 5.0.2__tar.gz

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 (35) hide show
  1. {mspec_cli-5.0.0/src/mspec_cli.egg-info → mspec_cli-5.0.2}/PKG-INFO +1 -1
  2. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/pyproject.toml +2 -2
  3. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/__init__.py +1 -1
  4. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/commands/doctor.py +8 -4
  5. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/core/template.py +54 -16
  6. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/templates/config.yaml +12 -12
  7. {mspec_cli-5.0.0 → mspec_cli-5.0.2/src/mspec_cli.egg-info}/PKG-INFO +1 -1
  8. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec_cli.egg-info/SOURCES.txt +8 -8
  9. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/LICENSE +0 -0
  10. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/MANIFEST.in +0 -0
  11. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/README.md +0 -0
  12. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/setup.cfg +0 -0
  13. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/__main__.py +0 -0
  14. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/cli.py +0 -0
  15. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/commands/__init__.py +0 -0
  16. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/commands/init.py +0 -0
  17. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/commands/update.py +0 -0
  18. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/core/__init__.py +0 -0
  19. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/core/config.py +0 -0
  20. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/core/openspec_manager.py +0 -0
  21. {mspec_cli-5.0.0/src/mspec/templates → mspec_cli-5.0.2/src/mspec/templates/evolution}/adr.md +0 -0
  22. {mspec_cli-5.0.0/src/mspec/templates → mspec_cli-5.0.2/src/mspec/templates/evolution}/glossary.md +0 -0
  23. {mspec_cli-5.0.0/src/mspec/templates → mspec_cli-5.0.2/src/mspec/templates/evolution}/risk-map.md +0 -0
  24. {mspec_cli-5.0.0/src/mspec/templates → mspec_cli-5.0.2/src/mspec/templates/issues}/design-issues.md +0 -0
  25. {mspec_cli-5.0.0/src/mspec/templates → mspec_cli-5.0.2/src/mspec/templates/issues}/requirement-issues.md +0 -0
  26. {mspec_cli-5.0.0/src/mspec/templates → mspec_cli-5.0.2/src/mspec/templates/issues}/retrospective-notes.md +0 -0
  27. {mspec_cli-5.0.0/src/mspec/templates → mspec_cli-5.0.2/src/mspec/templates/taxonomy}/design-issue-taxonomy.md +0 -0
  28. {mspec_cli-5.0.0/src/mspec/templates → mspec_cli-5.0.2/src/mspec/templates/taxonomy}/requirement-issue-taxonomy.md +0 -0
  29. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/utils/__init__.py +0 -0
  30. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec/utils/console.py +0 -0
  31. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec_cli.egg-info/dependency_links.txt +0 -0
  32. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec_cli.egg-info/entry_points.txt +0 -0
  33. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec_cli.egg-info/requires.txt +0 -0
  34. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/src/mspec_cli.egg-info/top_level.txt +0 -0
  35. {mspec_cli-5.0.0 → mspec_cli-5.0.2}/tests/test_init.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mspec-cli
3
- Version: 5.0.0
3
+ Version: 5.0.2
4
4
  Summary: mspec-cli(Member Spec)- 会员组规范驱动开发工作流 CLI 工具
5
5
  Author-email: shirayner <team@mspec.io>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mspec-cli"
7
- version = "5.0.0"
7
+ version = "5.0.2"
8
8
  description = "mspec-cli(Member Spec)- 会员组规范驱动开发工作流 CLI 工具"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -57,7 +57,7 @@ Issues = "https://github.com/mspec-dev/mspec/issues"
57
57
  where = ["src"]
58
58
 
59
59
  [tool.setuptools.package-data]
60
- mspec = ["templates/*"]
60
+ mspec = ["templates/*", "templates/**/*"]
61
61
 
62
62
  [tool.black]
63
63
  line-length = 100
@@ -1,5 +1,5 @@
1
1
  """mspec(Member Spec)- 会员组规范驱动开发工作流 CLI 工具"""
2
2
 
3
- __version__ = "5.0.0"
3
+ __version__ = "5.0.2"
4
4
  __author__ = "mspec Team"
5
5
  __email__ = "team@mspec.io"
@@ -131,10 +131,14 @@ def _check_template_files() -> dict:
131
131
  return {"ok": False, "message": "未找到 templates/ 目录"}
132
132
 
133
133
  required_files = [
134
- "requirement-issue-taxonomy.md",
135
- "design-issue-taxonomy.md",
136
- "requirement-issues.md",
137
- "design-issues.md",
134
+ "taxonomy/requirement-issue-taxonomy.md",
135
+ "taxonomy/design-issue-taxonomy.md",
136
+ "issues/requirement-issues.md",
137
+ "issues/design-issues.md",
138
+ "issues/retrospective-notes.md",
139
+ "evolution/adr.md",
140
+ "evolution/glossary.md",
141
+ "evolution/risk-map.md",
138
142
  ]
139
143
 
140
144
  missing = []
@@ -23,7 +23,7 @@ class TemplateManager:
23
23
  """获取内置模板文件
24
24
 
25
25
  Returns:
26
- 文件名到内容的字典
26
+ 文件名到内容的字典,键为相对于 openspec/ 的路径
27
27
  """
28
28
  files = {}
29
29
 
@@ -32,17 +32,37 @@ class TemplateManager:
32
32
  if config_path.exists():
33
33
  files["config.yaml"] = config_path.read_text(encoding="utf-8")
34
34
 
35
- # .md 模板文件写入 openspec/templates/ 子目录
36
- template_md_files = [
35
+ # templates/taxonomy/ — 问题分类学知识库(AI 参考)
36
+ taxonomy_files = [
37
37
  "requirement-issue-taxonomy.md",
38
38
  "design-issue-taxonomy.md",
39
+ ]
40
+ for file_name in taxonomy_files:
41
+ file_path = self.builtin_path / "taxonomy" / file_name
42
+ if file_path.exists():
43
+ files[f"templates/taxonomy/{file_name}"] = file_path.read_text(encoding="utf-8")
44
+
45
+ # templates/issues/ — 问题清单模板(per-change 使用)
46
+ issues_files = [
39
47
  "requirement-issues.md",
40
48
  "design-issues.md",
49
+ "retrospective-notes.md",
50
+ ]
51
+ for file_name in issues_files:
52
+ file_path = self.builtin_path / "issues" / file_name
53
+ if file_path.exists():
54
+ files[f"templates/issues/{file_name}"] = file_path.read_text(encoding="utf-8")
55
+
56
+ # templates/evolution/ — 进化体系格式模板(archive 阶段参考)
57
+ evolution_files = [
58
+ "adr.md",
59
+ "glossary.md",
60
+ "risk-map.md",
41
61
  ]
42
- for file_name in template_md_files:
43
- file_path = self.builtin_path / file_name
62
+ for file_name in evolution_files:
63
+ file_path = self.builtin_path / "evolution" / file_name
44
64
  if file_path.exists():
45
- files[f"templates/{file_name}"] = file_path.read_text(encoding="utf-8")
65
+ files[f"templates/evolution/{file_name}"] = file_path.read_text(encoding="utf-8")
46
66
 
47
67
  return files
48
68
 
@@ -71,7 +91,7 @@ class TemplateManager:
71
91
 
72
92
  raw_base = repo_url.replace("github.com", "raw.githubusercontent.com") + "/main/"
73
93
 
74
- # config.yaml 写入根目录,.md 文件写入 templates/ 子目录
94
+ # config.yaml 写入根目录
75
95
  config_url = f"{raw_base}config.yaml"
76
96
  try:
77
97
  response = requests.get(config_url, timeout=30)
@@ -80,18 +100,36 @@ class TemplateManager:
80
100
  except requests.RequestException:
81
101
  pass
82
102
 
83
- md_files = [
84
- "requirement-issue-taxonomy.md",
85
- "design-issue-taxonomy.md",
86
- "requirement-issues.md",
87
- "design-issues.md",
88
- ]
89
- for file_name in md_files:
90
- url = f"{raw_base}{file_name}"
103
+ # templates/taxonomy/
104
+ taxonomy_files = ["requirement-issue-taxonomy.md", "design-issue-taxonomy.md"]
105
+ for file_name in taxonomy_files:
106
+ url = f"{raw_base}taxonomy/{file_name}"
107
+ try:
108
+ response = requests.get(url, timeout=30)
109
+ if response.status_code == 200:
110
+ files[f"templates/taxonomy/{file_name}"] = response.text
111
+ except requests.RequestException:
112
+ continue
113
+
114
+ # templates/issues/
115
+ issues_files = ["requirement-issues.md", "design-issues.md", "retrospective-notes.md"]
116
+ for file_name in issues_files:
117
+ url = f"{raw_base}issues/{file_name}"
118
+ try:
119
+ response = requests.get(url, timeout=30)
120
+ if response.status_code == 200:
121
+ files[f"templates/issues/{file_name}"] = response.text
122
+ except requests.RequestException:
123
+ continue
124
+
125
+ # templates/evolution/
126
+ evolution_files = ["adr.md", "glossary.md", "risk-map.md"]
127
+ for file_name in evolution_files:
128
+ url = f"{raw_base}evolution/{file_name}"
91
129
  try:
92
130
  response = requests.get(url, timeout=30)
93
131
  if response.status_code == 200:
94
- files[f"templates/{file_name}"] = response.text
132
+ files[f"templates/evolution/{file_name}"] = response.text
95
133
  except requests.RequestException:
96
134
  continue
97
135
 
@@ -8,7 +8,7 @@ schema: spec-driven
8
8
  # 所有增强逻辑通过 context 和 rules 注入,不改变 OpenSpec schema
9
9
  # =============================================================================
10
10
 
11
- version: "5.0.0"
11
+ version: "5.0.2"
12
12
  language: zh
13
13
 
14
14
  # =============================================================================
@@ -31,7 +31,7 @@ context: |
31
31
 
32
32
  **如果不通过,执行以下流程**:
33
33
  ```
34
- 步骤 1: 读取 openspec/templates/requirement-issue-taxonomy.md
34
+ 步骤 1: 读取 openspec/templates/taxonomy/requirement-issue-taxonomy.md
35
35
  步骤 2: 分析需求,识别功能点(Capabilities)
36
36
  步骤 3: 按 6 个维度检查每个功能点的问题
37
37
  步骤 4: 创建 spec/requirement-issues.md,填充发现问题
@@ -53,7 +53,7 @@ context: |
53
53
 
54
54
  **如果不通过,执行类似的需求澄清流程**:
55
55
  ```
56
- 步骤 1: 读取 openspec/templates/design-issue-taxonomy.md
56
+ 步骤 1: 读取 openspec/templates/taxonomy/design-issue-taxonomy.md
57
57
  步骤 2: 按 7 个维度分析 design.md 的不确定性
58
58
  步骤 3: 创建 spec/design-issues.md
59
59
  步骤 4: 【强制用户确认——无论是否发现问题都必须执行】
@@ -85,10 +85,10 @@ context: |
85
85
 
86
86
  ## 📚 问题分类学知识库(用于问题发现)
87
87
 
88
- 1. **需求问题分类学**: `openspec/templates/requirement-issue-taxonomy.md`
88
+ 1. **需求问题分类学**: `openspec/templates/taxonomy/requirement-issue-taxonomy.md`
89
89
  - 6 个维度:功能完整性、数据相关、用户体验、边界异常、集成依赖、优先级
90
90
 
91
- 2. **设计问题分类学**: `openspec/templates/design-issue-taxonomy.md`
91
+ 2. **设计问题分类学**: `openspec/templates/taxonomy/design-issue-taxonomy.md`
92
92
  - 7 个维度:架构决策、技术选型、接口设计、数据状态、安全合规、性能可靠性、部署运维
93
93
 
94
94
  ## 🔄 澄清流程状态机
@@ -111,8 +111,8 @@ context: |
111
111
 
112
112
  ## 📋 问题清单模板位置
113
113
 
114
- - 功能点问题清单: `openspec/templates/requirement-issues.md`
115
- - 设计问题清单: `openspec/templates/design-issues.md`
114
+ - 功能点问题清单: `openspec/templates/issues/requirement-issues.md`
115
+ - 设计问题清单: `openspec/templates/issues/design-issues.md`
116
116
 
117
117
  ## ⚠️ 问题严重程度定义
118
118
 
@@ -365,18 +365,18 @@ rules:
365
365
  **理由**: {为什么}
366
366
  **备选**: {考虑过哪些}
367
367
  **状态**: active
368
- - 如文件不存在,先创建(参考 openspec/templates/adr.md 格式)
368
+ - 如文件不存在,先创建(参考 openspec/templates/evolution/adr.md 格式)
369
369
 
370
370
  A2. 领域词汇表:
371
371
  - 读取复盘报告"五、领域词汇"章节
372
372
  - 如有新术语,追加到 openspec/glossary.md
373
- - 如文件不存在,先创建(参考 openspec/templates/glossary.md 格式)
373
+ - 如文件不存在,先创建(参考 openspec/templates/evolution/glossary.md 格式)
374
374
 
375
375
  A3. 风险图谱:
376
376
  - 读取复盘报告"六、风险事件"章节
377
377
  - 如有新风险事件,追加到 openspec/risk-map.md 的对应分区
378
378
  ("代码热点"或"问题模式")
379
- - 如文件不存在,先创建(参考 openspec/templates/risk-map.md 格式)
379
+ - 如文件不存在,先创建(参考 openspec/templates/evolution/risk-map.md 格式)
380
380
 
381
381
  C1. 规格演化日志(如本次有 delta spec sync):
382
382
  - 将 delta spec 的变更(改了什么 + 为什么)追加到 openspec/specs/CHANGELOG.md
@@ -439,8 +439,8 @@ rules:
439
439
 
440
440
  f. 根据用户选择:
441
441
  - A(全部应用):
442
- · 更新 openspec/templates/requirement-issue-taxonomy.md(B1)
443
- · 更新 openspec/templates/design-issue-taxonomy.md(B1)
442
+ · 更新 openspec/templates/taxonomy/requirement-issue-taxonomy.md(B1)
443
+ · 更新 openspec/templates/taxonomy/design-issue-taxonomy.md(B1)
444
444
  · 更新/创建 openspec/task-patterns/ 下对应文件(B2)
445
445
  · 如有偏好建议:更新 openspec/config.yaml 的 user_preferences(B3)
446
446
  · 将已分析复盘文件状态改为 incorporated
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mspec-cli
3
- Version: 5.0.0
3
+ Version: 5.0.2
4
4
  Summary: mspec-cli(Member Spec)- 会员组规范驱动开发工作流 CLI 工具
5
5
  Author-email: shirayner <team@mspec.io>
6
6
  License: MIT
@@ -13,15 +13,15 @@ src/mspec/core/__init__.py
13
13
  src/mspec/core/config.py
14
14
  src/mspec/core/openspec_manager.py
15
15
  src/mspec/core/template.py
16
- src/mspec/templates/adr.md
17
16
  src/mspec/templates/config.yaml
18
- src/mspec/templates/design-issue-taxonomy.md
19
- src/mspec/templates/design-issues.md
20
- src/mspec/templates/glossary.md
21
- src/mspec/templates/requirement-issue-taxonomy.md
22
- src/mspec/templates/requirement-issues.md
23
- src/mspec/templates/retrospective-notes.md
24
- src/mspec/templates/risk-map.md
17
+ src/mspec/templates/evolution/adr.md
18
+ src/mspec/templates/evolution/glossary.md
19
+ src/mspec/templates/evolution/risk-map.md
20
+ src/mspec/templates/issues/design-issues.md
21
+ src/mspec/templates/issues/requirement-issues.md
22
+ src/mspec/templates/issues/retrospective-notes.md
23
+ src/mspec/templates/taxonomy/design-issue-taxonomy.md
24
+ src/mspec/templates/taxonomy/requirement-issue-taxonomy.md
25
25
  src/mspec/utils/__init__.py
26
26
  src/mspec/utils/console.py
27
27
  src/mspec_cli.egg-info/PKG-INFO
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes