soloforge 1.1.46 → 1.1.48

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 (451) hide show
  1. package/README.md +23 -7
  2. package/dist/cli/adapter_writers.d.ts +5 -0
  3. package/dist/cli/adapter_writers.d.ts.map +1 -1
  4. package/dist/cli/adapter_writers.js +25 -0
  5. package/dist/cli/adapter_writers.js.map +1 -1
  6. package/dist/cli/init.d.ts.map +1 -1
  7. package/dist/cli/init.js +3 -1
  8. package/dist/cli/init.js.map +1 -1
  9. package/dist/cli/scope_check.d.ts +4 -0
  10. package/dist/cli/scope_check.d.ts.map +1 -0
  11. package/dist/cli/scope_check.js +41 -0
  12. package/dist/cli/scope_check.js.map +1 -0
  13. package/dist/context/adapters/claude_code/hooks.d.ts +5 -7
  14. package/dist/context/adapters/claude_code/hooks.d.ts.map +1 -1
  15. package/dist/context/adapters/claude_code/hooks.js +11 -9
  16. package/dist/context/adapters/claude_code/hooks.js.map +1 -1
  17. package/dist/context/adapters/shared/integration_guide.js +18 -6
  18. package/dist/context/adapters/shared/integration_guide.js.map +1 -1
  19. package/dist/context/adapters/shared/workflow_template.js +1 -1
  20. package/dist/context/config/intent_schema.d.ts +793 -6
  21. package/dist/context/config/intent_schema.d.ts.map +1 -1
  22. package/dist/context/config/intent_schema.js +9 -0
  23. package/dist/context/config/intent_schema.js.map +1 -1
  24. package/dist/context/config/resolver.d.ts +9 -0
  25. package/dist/context/config/resolver.d.ts.map +1 -1
  26. package/dist/context/config/resolver.js +5 -0
  27. package/dist/context/config/resolver.js.map +1 -1
  28. package/dist/core/adversarial_review_store.d.ts +133 -0
  29. package/dist/core/adversarial_review_store.d.ts.map +1 -0
  30. package/dist/core/adversarial_review_store.js +161 -0
  31. package/dist/core/adversarial_review_store.js.map +1 -0
  32. package/dist/core/domain_transition.d.ts.map +1 -1
  33. package/dist/core/domain_transition.js +3 -0
  34. package/dist/core/domain_transition.js.map +1 -1
  35. package/dist/core/gate_record_store.d.ts +13 -7
  36. package/dist/core/gate_record_store.d.ts.map +1 -1
  37. package/dist/core/gate_record_store.js +39 -17
  38. package/dist/core/gate_record_store.js.map +1 -1
  39. package/dist/core/git_utils.d.ts +1 -1
  40. package/dist/core/git_utils.js +1 -1
  41. package/dist/core/observer.d.ts.map +1 -1
  42. package/dist/core/observer.js +33 -6
  43. package/dist/core/observer.js.map +1 -1
  44. package/dist/core/task_context/constants.js +1 -1
  45. package/dist/core/task_context/constants.js.map +1 -1
  46. package/dist/core/task_context/manager.d.ts +4 -0
  47. package/dist/core/task_context/manager.d.ts.map +1 -1
  48. package/dist/core/task_context/manager.js +48 -30
  49. package/dist/core/task_context/manager.js.map +1 -1
  50. package/dist/core/task_context/manager_setters.d.ts +2 -0
  51. package/dist/core/task_context/manager_setters.d.ts.map +1 -1
  52. package/dist/core/task_context/manager_setters.js +10 -0
  53. package/dist/core/task_context/manager_setters.js.map +1 -1
  54. package/dist/core/types.d.ts +19 -0
  55. package/dist/core/types.d.ts.map +1 -1
  56. package/dist/domain/asset_registry/derived_registry.d.ts.map +1 -1
  57. package/dist/domain/asset_registry/derived_registry.js +20 -5
  58. package/dist/domain/asset_registry/derived_registry.js.map +1 -1
  59. package/dist/domain/asset_registry/derived_types.d.ts +22 -1
  60. package/dist/domain/asset_registry/derived_types.d.ts.map +1 -1
  61. package/dist/domain/build/contract.d.ts.map +1 -1
  62. package/dist/domain/build/contract.js +3 -8
  63. package/dist/domain/build/contract.js.map +1 -1
  64. package/dist/domain/build/engine.d.ts +4 -2
  65. package/dist/domain/build/engine.d.ts.map +1 -1
  66. package/dist/domain/build/engine.js +38 -5
  67. package/dist/domain/build/engine.js.map +1 -1
  68. package/dist/domain/contracts/design_lifecycle_contract.d.ts.map +1 -1
  69. package/dist/domain/contracts/design_lifecycle_contract.js +11 -4
  70. package/dist/domain/contracts/design_lifecycle_contract.js.map +1 -1
  71. package/dist/domain/design/contract.d.ts.map +1 -1
  72. package/dist/domain/design/contract.js +13 -31
  73. package/dist/domain/design/contract.js.map +1 -1
  74. package/dist/domain/design/engine.d.ts +4 -2
  75. package/dist/domain/design/engine.d.ts.map +1 -1
  76. package/dist/domain/design/engine.js +39 -4
  77. package/dist/domain/design/engine.js.map +1 -1
  78. package/dist/domain/engine_helpers.d.ts +55 -2
  79. package/dist/domain/engine_helpers.d.ts.map +1 -1
  80. package/dist/domain/engine_helpers.js +173 -8
  81. package/dist/domain/engine_helpers.js.map +1 -1
  82. package/dist/domain/operate/contract.js +1 -1
  83. package/dist/domain/operate/contract.js.map +1 -1
  84. package/dist/domain/operate/engine.d.ts +4 -2
  85. package/dist/domain/operate/engine.d.ts.map +1 -1
  86. package/dist/domain/operate/engine.js +23 -3
  87. package/dist/domain/operate/engine.js.map +1 -1
  88. package/dist/domain/types.d.ts +6 -0
  89. package/dist/domain/types.d.ts.map +1 -1
  90. package/dist/domain/types.js.map +1 -1
  91. package/dist/domain/verify/engine.d.ts +4 -2
  92. package/dist/domain/verify/engine.d.ts.map +1 -1
  93. package/dist/domain/verify/engine.js +22 -2
  94. package/dist/domain/verify/engine.js.map +1 -1
  95. package/dist/gate/contracts/tool_actions.d.ts +2 -2
  96. package/dist/gate/contracts/tool_actions.d.ts.map +1 -1
  97. package/dist/gate/contracts/tool_actions.js +2 -2
  98. package/dist/gate/contracts/tool_actions.js.map +1 -1
  99. package/dist/gate/contracts/tool_invocation_contract_registry.js +1 -1
  100. package/dist/gate/contracts/tool_invocation_contract_registry.js.map +1 -1
  101. package/dist/gate/executors/executors_artifact.d.ts +19 -0
  102. package/dist/gate/executors/executors_artifact.d.ts.map +1 -1
  103. package/dist/gate/executors/executors_artifact.js +108 -8
  104. package/dist/gate/executors/executors_artifact.js.map +1 -1
  105. package/dist/gate/executors/executors_build.d.ts.map +1 -1
  106. package/dist/gate/executors/executors_build.js +17 -15
  107. package/dist/gate/executors/executors_build.js.map +1 -1
  108. package/dist/gate/executors/executors_external_command.d.ts.map +1 -1
  109. package/dist/gate/executors/executors_external_command.js +32 -0
  110. package/dist/gate/executors/executors_external_command.js.map +1 -1
  111. package/dist/gate/executors/executors_field_mapping.d.ts +7 -0
  112. package/dist/gate/executors/executors_field_mapping.d.ts.map +1 -0
  113. package/dist/gate/executors/executors_field_mapping.js +179 -0
  114. package/dist/gate/executors/executors_field_mapping.js.map +1 -0
  115. package/dist/gate/executors/executors_prerequisite.d.ts.map +1 -1
  116. package/dist/gate/executors/executors_prerequisite.js +27 -7
  117. package/dist/gate/executors/executors_prerequisite.js.map +1 -1
  118. package/dist/gate/executors/executors_regex_scan.d.ts.map +1 -1
  119. package/dist/gate/executors/executors_regex_scan.js +36 -15
  120. package/dist/gate/executors/executors_regex_scan.js.map +1 -1
  121. package/dist/gate/executors/executors_scope.js +4 -4
  122. package/dist/gate/executors/executors_scope.js.map +1 -1
  123. package/dist/gate/executors/executors_trace.d.ts +5 -0
  124. package/dist/gate/executors/executors_trace.d.ts.map +1 -1
  125. package/dist/gate/executors/executors_trace.js +186 -3
  126. package/dist/gate/executors/executors_trace.js.map +1 -1
  127. package/dist/gate/executors/index.d.ts.map +1 -1
  128. package/dist/gate/executors/index.js +2 -0
  129. package/dist/gate/executors/index.js.map +1 -1
  130. package/dist/gate/gate_engine.d.ts +9 -0
  131. package/dist/gate/gate_engine.d.ts.map +1 -1
  132. package/dist/gate/gate_engine.js +15 -0
  133. package/dist/gate/gate_engine.js.map +1 -1
  134. package/dist/gate/gate_registry_bridge.d.ts +9 -8
  135. package/dist/gate/gate_registry_bridge.d.ts.map +1 -1
  136. package/dist/gate/gate_registry_bridge.js +57 -16
  137. package/dist/gate/gate_registry_bridge.js.map +1 -1
  138. package/dist/gate/middleware_gates.js +1 -1
  139. package/dist/gate/middleware_gates.js.map +1 -1
  140. package/dist/gate/scope_resolver.d.ts +7 -0
  141. package/dist/gate/scope_resolver.d.ts.map +1 -1
  142. package/dist/gate/scope_resolver.js +1 -1
  143. package/dist/gate/scope_resolver.js.map +1 -1
  144. package/dist/index.js +5 -0
  145. package/dist/index.js.map +1 -1
  146. package/dist/server/tools/sf_doctor.d.ts +2 -0
  147. package/dist/server/tools/sf_doctor.d.ts.map +1 -1
  148. package/dist/server/tools/sf_doctor.js +35 -1
  149. package/dist/server/tools/sf_doctor.js.map +1 -1
  150. package/dist/server/tools/sf_gate.d.ts +1 -1
  151. package/dist/server/tools/sf_gate.js +2 -2
  152. package/dist/server/tools/sf_gate.js.map +1 -1
  153. package/dist/server/tools/sf_task.d.ts +83 -0
  154. package/dist/server/tools/sf_task.d.ts.map +1 -1
  155. package/dist/server/tools/sf_task.js +121 -4
  156. package/dist/server/tools/sf_task.js.map +1 -1
  157. package/dist/server/tools/sf_work.d.ts +203 -0
  158. package/dist/server/tools/sf_work.d.ts.map +1 -1
  159. package/dist/server/tools/sf_work.js +549 -46
  160. package/dist/server/tools/sf_work.js.map +1 -1
  161. package/dist/shared/traceability_id_utils.js +3 -3
  162. package/dist/shared/traceability_id_utils.js.map +1 -1
  163. package/dist/verify/contracts/decision_workshop.d.ts.map +1 -1
  164. package/dist/verify/contracts/decision_workshop.js +4 -3
  165. package/dist/verify/contracts/decision_workshop.js.map +1 -1
  166. package/package.json +2 -1
  167. package/templates/build/enforced.md +299 -39
  168. package/templates/build//344/270/223/351/241/271/345/256/236/347/216/260.md +75 -0
  169. package/templates/build//345/256/211/345/205/250/345/212/240/345/233/272.md +75 -0
  170. package/templates/build//346/263/250/351/207/212/347/272/252/345/276/213.md +48 -0
  171. package/templates/build//346/265/213/350/257/225/344/274/230/345/205/210/347/274/226/347/240/201.md +50 -79
  172. package/templates/build//346/265/213/350/257/225/350/256/241/345/210/222.md +31 -24
  173. package/templates/build//347/274/226/347/240/201/347/272/252/345/276/213.md +101 -0
  174. package/templates/build//350/260/203/350/257/225/346/216/222/346/237/245.md +44 -75
  175. package/templates/build//351/207/215/346/236/204/346/226/271/346/263/225.md +68 -0
  176. package/templates/design/API/346/216/245/345/217/243/350/247/204/346/240/274/346/226/207/346/241/243.md +38 -28
  177. package/templates/design/enforced.md +234 -74
  178. package/templates/design//345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201/345/257/274/350/210/252.md +5 -2
  179. package/templates/design//345/205/274/345/256/271/346/200/247/344/270/216/350/277/201/347/247/273/350/257/204/344/274/260.md +71 -0
  180. package/templates/design//345/206/263/347/255/226/344/270/216/351/200/211/345/236/213.md +70 -0
  181. package/templates/design//345/210/207/347/211/207/350/247/204/345/210/222.md +51 -55
  182. package/templates/design//345/274/200/345/217/221/345/210/207/347/211/207/350/256/241/345/210/222.md +75 -0
  183. package/templates/design//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/346/226/207/346/241/243.md +35 -47
  184. package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241.md +63 -81
  185. package/templates/design//350/256/276/350/256/241/345/206/263/347/255/226/347/272/252/345/276/213.md +58 -0
  186. package/templates/design//350/256/276/350/256/241/350/264/250/351/207/217/350/246/201/347/202/271.md +58 -0
  187. package/templates/design//351/234/200/346/261/202/345/210/206/346/236/220.md +49 -53
  188. package/templates/operate/UI/350/247/206/350/247/211/351/252/214/346/224/266/347/272/252/345/276/213.md +74 -0
  189. package/templates/operate/enforced.md +52 -5
  190. package/templates/operate//344/270/212/347/272/277/350/247/202/345/257/237.md +53 -32
  191. package/templates/operate//345/217/221/345/270/203/350/257/264/346/230/216.md +22 -1
  192. package/templates/operate//351/203/250/347/275/262/351/205/215/347/275/256.md +93 -0
  193. package/templates/shared/enforced.md +83 -5
  194. package/templates/shared//345/217/215/351/246/210/344/277/256/345/244/215/351/227/255/347/216/257.md +86 -0
  195. package/templates/shared//345/267/245/344/275/234/346/265/201/345/257/274/350/210/252/345/245/221/347/272/246.md +1 -1
  196. package/templates/shared//345/267/245/347/250/213/346/211/247/350/241/214/346/200/273/347/272/262.md +148 -0
  197. package/templates/shared//345/267/245/347/250/213/347/272/252/345/276/213.md +71 -0
  198. package/templates/shared//345/274/200/345/217/221/350/200/205/345/256/252/346/263/225.md +48 -43
  199. package/templates/shared//346/234/272/345/210/266/350/257/264/346/230/216.md +67 -0
  200. package/templates/shared//347/240/224/350/256/250/350/256/260/345/275/225.md +54 -0
  201. package/templates/shared//350/257/201/346/215/256/351/251/261/345/212/250/344/270/216/345/217/215/345/271/273/350/247/211.md +27 -17
  202. package/templates/shared//350/264/241/347/214/256/350/247/204/350/214/203.md +78 -0
  203. package/templates/verify/enforced.md +87 -263
  204. package/templates/verify//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245.md +46 -87
  205. package/templates/verify//344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212.md +17 -0
  206. package/templates/verify//345/256/241/346/237/245/346/270/205/345/215/225.md +79 -0
  207. package/templates/verify//346/236/266/346/236/204/350/257/255/344/271/211/347/272/242/347/272/277.md +60 -0
  208. package/templates/verify//351/252/214/350/257/201/346/226/271/346/263/225.md +72 -0
  209. package/dist/core/scope_checker.d.ts +0 -29
  210. package/dist/core/scope_checker.d.ts.map +0 -1
  211. package/dist/core/scope_checker.js +0 -53
  212. package/dist/core/scope_checker.js.map +0 -1
  213. package/templates/build/Bug/345/210/206/346/236/220.md +0 -59
  214. package/templates/build/Git/346/223/215/344/275/234.md +0 -48
  215. package/templates/build/OOD/350/256/276/350/256/241/346/221/230/350/246/201.md +0 -46
  216. package/templates/build/React/346/216/245/345/217/243/351/233/206/346/210/220.md +0 -42
  217. package/templates/build/Schema/345/217/230/346/233/264/346/265/201/346/260/264/347/272/277.md +0 -52
  218. package/templates/build/TS/350/264/250/351/207/217/345/256/241/346/237/245.md +0 -78
  219. package/templates/build//344/270/212/346/270/270/344/272/244/345/217/211/351/252/214/350/257/201.md +0 -68
  220. package/templates/build//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/350/257/201.md +0 -56
  221. package/templates/build//344/273/243/347/240/201/351/227/250/347/246/201.md +0 -58
  222. package/templates/build//345/205/250/346/240/210/346/265/201/347/250/213/344/277/256/345/244/215.md +0 -48
  223. package/templates/build//345/210/207/347/211/207/346/211/247/350/241/214/347/272/252/345/276/213.md +0 -108
  224. package/templates/build//345/210/207/347/211/207/347/253/257/345/210/260/347/253/257/351/252/214/350/257/201.md +0 -221
  225. package/templates/build//345/212/237/350/203/275/345/274/200/345/217/221.md +0 -66
  226. package/templates/build//345/220/216/347/253/257/345/256/236/347/216/260.md +0 -39
  227. package/templates/build//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213.md +0 -33
  228. package/templates/build//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/256/241/346/237/245.md +0 -70
  229. package/templates/build//345/220/216/347/253/257/346/216/245/345/217/243/345/256/236/347/216/260.md +0 -43
  230. package/templates/build//345/233/275/351/231/205/345/214/226.md +0 -45
  231. package/templates/build//345/256/211/345/205/250/345/212/240/345/233/272/346/265/201/346/260/264/347/272/277.md +0 -68
  232. package/templates/build//345/256/211/345/205/250/345/256/241/346/237/245.md +0 -154
  233. package/templates/build//345/256/211/345/205/250/345/256/241/350/256/241.md +0 -47
  234. package/templates/build//345/267/245/347/250/213/347/272/252/345/276/213.md +0 -56
  235. package/templates/build//346/200/247/350/203/275/345/210/206/346/236/220.md +0 -59
  236. package/templates/build//346/200/247/350/203/275/346/265/201/346/260/264/347/272/277.md +0 -53
  237. package/templates/build//346/216/245/345/217/243/351/233/206/346/210/220/346/265/201/346/260/264/347/272/277.md +0 -76
  238. package/templates/build//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273.md +0 -63
  239. package/templates/build//346/226/260/350/200/201/351/200/273/350/276/221/346/257/224/345/257/271/346/227/245/345/277/227.md +0 -39
  240. package/templates/build//346/235/203/351/231/220/350/256/244/350/257/201.md +0 -49
  241. package/templates/build//346/265/213/350/257/225/350/264/250/351/207/217.md +0 -45
  242. package/templates/build//347/206/224/346/226/255/351/231/215/347/272/247.md +0 -49
  243. package/templates/build//347/212/266/346/200/201/346/265/201/350/275/254.md +0 -43
  244. package/templates/build//347/213/254/347/253/213/345/256/241/346/237/245.md +0 -45
  245. package/templates/build//347/272/246/346/235/237/345/256/236/347/216/260.md +0 -47
  246. package/templates/build//347/274/226/347/240/201/345/260/261/347/273/252/345/256/241/346/237/245.md +0 -60
  247. package/templates/build//347/274/226/347/240/201/350/201/232/345/220/210/346/243/200/346/237/245.md +0 -22
  248. package/templates/build//347/274/226/347/240/201/350/264/250/351/207/217.md +0 -46
  249. package/templates/build//347/274/226/347/240/201/351/230/266/346/256/265/346/211/247/350/241/214.md +0 -105
  250. package/templates/build//347/274/272/351/231/267/347/256/241/347/220/206.md +0 -47
  251. package/templates/build//350/200/246/345/220/210/346/243/200/346/265/213.md +0 -86
  252. package/templates/build//350/246/206/347/233/226/347/216/207/346/240/207/345/207/206.md +0 -40
  253. package/templates/build//350/264/250/351/207/217/345/256/241/346/237/245.md +0 -111
  254. package/templates/build//350/277/201/347/247/273/346/265/201/346/260/264/347/272/277.md +0 -52
  255. package/templates/build//351/200/232/347/224/250/350/264/250/351/207/217.md +0 -176
  256. package/templates/build//351/207/215/346/236/204/346/226/271/346/241/210.md +0 -61
  257. package/templates/build//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +0 -53
  258. package/templates/build//351/230/262/345/276/241/346/200/247/347/274/226/347/240/201.md +0 -94
  259. package/templates/build//351/233/206/346/210/220/351/252/214/350/257/201.md +0 -67
  260. package/templates/build//351/233/267/345/214/272/345/217/215/346/250/241/345/274/217.md +0 -135
  261. package/templates/build//351/252/214/346/224/266/346/240/207/345/207/206/345/256/241/346/237/245.md +0 -64
  262. package/templates/build//351/252/214/346/224/266/346/265/213/350/257/225/350/247/204/345/210/222.md +0 -75
  263. package/templates/design/API/350/256/276/350/256/241.md +0 -47
  264. package/templates/design/N/345/212/2401/346/237/245/350/257/242.md +0 -48
  265. package/templates/design/OOD/350/256/276/350/256/241.md +0 -72
  266. package/templates/design//344/270/200/350/207/264/346/200/247/346/240/241/351/252/214.md +0 -109
  267. package/templates/design//344/270/215/347/241/256/345/256/232/346/227/266/345/244/264/350/204/221/351/243/216/346/232/264.md +0 -105
  268. package/templates/design//344/273/273/345/212/241/346/213/206/350/247/243.md +0 -61
  269. package/templates/design//344/273/273/345/212/241/350/247/204/345/210/222.md +0 -84
  270. package/templates/design//344/274/232/350/257/235/346/201/242/345/244/215-procedures.md +0 -78
  271. package/templates/design//345/205/274/345/256/271/346/200/247/346/243/200/346/237/245.md +0 -89
  272. package/templates/design//345/210/207/347/211/207/350/256/241/345/210/222.md +0 -149
  273. package/templates/design//345/211/215/347/253/257/346/200/247/350/203/275.md +0 -49
  274. package/templates/design//345/216/206/345/217/262/351/201/227/347/225/231/351/233/267/345/214/272/346/270/205/345/215/225.md +0 -50
  275. package/templates/design//345/216/237/345/236/213/346/272/220/347/240/201/346/217/220/345/217/226.md +0 -78
  276. package/templates/design//345/216/237/345/236/213/350/257/264/346/230/216.md +0 -200
  277. package/templates/design//345/216/237/345/236/213/350/257/264/346/230/216/345/256/241/346/237/245.md +0 -81
  278. package/templates/design//345/220/221/345/220/216/345/205/274/345/256/271/346/200/247/345/220/210/350/247/204/346/212/245/345/221/212.md +0 -52
  279. package/templates/design//345/221/275/344/273/244/346/211/247/350/241/214-procedures.md +0 -45
  280. package/templates/design//345/221/275/344/273/244/350/267/257/347/224/261-procedures.md +0 -46
  281. package/templates/design//345/221/275/345/220/215.md +0 -49
  282. package/templates/design//345/242/236/351/207/217/350/276/271/347/225/214/347/225/214/345/256/232/346/226/207/346/241/243.md +0 -48
  283. package/templates/design//345/267/245/345/205/267/350/260/203/347/224/250-procedures.md +0 -41
  284. package/templates/design//345/271/266/345/217/221/346/216/247/345/210/266.md +0 -50
  285. package/templates/design//346/212/200/346/234/257/351/200/211/345/236/213.md +0 -33
  286. package/templates/design//346/216/245/345/217/243/345/257/271/346/216/245/346/226/271/346/241/210.md +0 -97
  287. package/templates/design//346/224/271/351/200/240/345/275/261/345/223/215/350/214/203/345/233/264/350/257/204/344/274/260.md +0 -56
  288. package/templates/design//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/346/226/271/346/241/210.md +0 -75
  289. package/templates/design//346/225/260/346/215/256/350/241/200/347/274/230/345/233/276.md +0 -49
  290. package/templates/design//346/227/240/351/232/234/347/242/215.md +0 -49
  291. package/templates/design//346/236/266/346/236/204/345/206/263/347/255/226/350/256/260/345/275/225.md +0 -53
  292. package/templates/design//346/236/266/346/236/204/345/256/241/346/237/245.md +0 -256
  293. package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241-constraints.md +0 -177
  294. package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241-procedures.md +0 -130
  295. package/templates/design//346/246/202/345/277/265/351/252/214/350/257/201/346/265/201/346/260/264/347/272/277.md +0 -47
  296. package/templates/design//346/272/220/347/240/201/345/216/237/345/236/213/344/272/244/344/273/230.md +0 -58
  297. package/templates/design//347/216/260/346/234/211/347/263/273/347/273/237/345/267/256/350/267/235/345/210/206/346/236/220.md +0 -114
  298. package/templates/design//347/237/245/350/257/206/347/273/264/346/212/244/346/265/201/346/260/264/347/272/277.md +0 -64
  299. package/templates/design//347/254/254/344/270/200/346/200/247/345/216/237/347/220/206/346/216/250/347/220/206.md +0 -182
  300. package/templates/design//347/264/247/346/200/245/345/233/236/346/273/232/346/211/213/345/206/214.md +0 -77
  301. package/templates/design//347/274/226/347/240/201/345/211/215/346/276/204/346/270/205.md +0 -85
  302. package/templates/design//350/200/201/347/263/273/347/273/237/345/210/207/347/211/207/350/247/204/345/210/222.md +0 -48
  303. package/templates/design//350/207/252/344/270/273/351/200/211/345/236/213.md +0 -57
  304. package/templates/design//350/256/276/350/256/241/344/270/200/350/207/264/346/200/247/351/252/214/346/224/266/346/212/245/345/221/212.md +0 -34
  305. package/templates/design//350/256/276/350/256/241/344/272/247/347/211/251/347/224/237/346/210/220/344/270/216/345/244/215/351/252/214.md +0 -60
  306. package/templates/design//350/256/276/350/256/241/350/201/232/345/220/210/346/243/200/346/237/245.md +0 -21
  307. package/templates/design//350/257/246/347/273/206/350/256/276/350/256/241-procedures.md +0 -123
  308. package/templates/design//350/257/246/347/273/206/350/256/276/350/256/241.md +0 -109
  309. package/templates/design//350/257/246/347/273/206/350/256/276/350/256/241/345/256/241/346/237/245.md +0 -88
  310. package/templates/design//350/260/203/350/257/225/346/226/271/346/263/225/350/256/272.md +0 -43
  311. package/templates/design//350/277/201/347/247/273/350/257/204/344/274/260.md +0 -67
  312. package/templates/design//351/232/224/347/246/273/351/200/202/351/205/215/345/231/250/346/226/271/346/241/210.md +0 -44
  313. package/templates/design//351/234/200/346/261/202/346/276/204/346/270/205.md +0 -65
  314. package/templates/design//351/234/200/346/261/202/350/264/250/351/207/217/345/256/241/346/237/245.md +0 -88
  315. package/templates/design//351/242/206/345/237/237/351/251/261/345/212/250/350/256/276/350/256/241.md +0 -43
  316. package/templates/operate//345/217/221/345/270/203/350/257/264/346/230/216/345/256/241/346/237/245.md +0 -60
  317. package/templates/operate//350/277/220/347/273/264/350/201/232/345/220/210/346/243/200/346/237/245.md +0 -22
  318. package/templates/operate//351/203/250/347/275/262/351/205/215/347/275/256/345/256/241/346/237/245.md +0 -59
  319. package/templates/shared/Diff/345/275/222/345/261/236/350/277/275/350/270/252.md +0 -55
  320. package/templates/shared/Java/350/264/250/351/207/217/351/227/250/347/246/201.md +0 -54
  321. package/templates/shared/OOD/344/270/216SOLID/350/256/276/350/256/241.md +0 -48
  322. package/templates/shared//344/272/247/347/211/251Schema/346/263/250/345/206/214/344/270/255/345/277/203.md +0 -57
  323. package/templates/shared//344/272/247/347/211/251/345/245/221/347/272/246.md +0 -44
  324. package/templates/shared//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/345/245/221/347/272/246.md +0 -116
  325. package/templates/shared//344/273/273/345/212/241/344/270/212/344/270/213/346/226/207/347/224/237/345/221/275/345/221/250/346/234/237.md +0 -45
  326. package/templates/shared//344/273/273/345/212/241/347/212/266/346/200/201/346/234/272.md +0 -55
  327. package/templates/shared//344/273/273/345/212/241/347/256/241/347/220/206/345/231/250.md +0 -55
  328. package/templates/shared//344/274/230/351/233/205/345/201/234/346/234/272.md +0 -43
  329. package/templates/shared//344/275/234/347/224/250/345/237/237/344/270/216/345/257/206/351/222/245/346/213/246/346/210/252.md +0 -54
  330. package/templates/shared//344/275/234/347/224/250/345/237/237/347/247/237/347/272/246.md +0 -55
  331. package/templates/shared//345/206/262/347/252/201/351/227/250/347/246/201.md +0 -55
  332. package/templates/shared//345/206/263/347/255/226/347/275/221/345/205/263.md +0 -47
  333. package/templates/shared//345/210/207/347/211/207/350/201/232/345/220/210/346/243/200/346/237/245.md +0 -72
  334. package/templates/shared//345/217/230/345/274/202/345/256/241/350/256/241.md +0 -58
  335. package/templates/shared//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/245/221/347/272/246.md +0 -40
  336. package/templates/shared//345/221/275/344/273/244/346/211/247/350/241/214.md +0 -48
  337. package/templates/shared//345/221/275/344/273/244/350/267/257/347/224/261.md +0 -45
  338. package/templates/shared//345/233/236/345/275/222/347/237/251/351/230/265.md +0 -54
  339. package/templates/shared//345/244/232/347/247/237/346/210/267.md +0 -49
  340. package/templates/shared//345/256/241/350/256/241/346/227/245/345/277/227.md +0 -46
  341. package/templates/shared//345/257/274/345/205/245/345/257/274/345/207/272.md +0 -51
  342. package/templates/shared//345/267/245/344/275/234/345/214/272/344/272/222/346/226/245/351/224/201.md +0 -52
  343. package/templates/shared//345/267/245/344/275/234/345/214/272/345/224/244/351/206/222.md +0 -54
  344. package/templates/shared//345/267/245/344/275/234/346/265/201/345/245/221/347/272/246.md +0 -42
  345. package/templates/shared//345/267/245/344/275/234/346/265/201/345/274/225/346/223/216.md +0 -50
  346. package/templates/shared//345/267/245/344/275/234/346/265/201/346/250/241/347/211/210/345/214/205.md +0 -34
  347. package/templates/shared//345/267/245/345/205/267/350/260/203/347/224/250.md +0 -48
  348. package/templates/shared//345/271/266/345/217/221/351/224/201.md +0 -57
  349. package/templates/shared//346/211/247/350/241/214/345/256/210/345/215/253/350/257/204/344/274/260.md +0 -47
  350. package/templates/shared//346/211/251/345/261/225/347/224/237/345/221/275/345/221/250/346/234/237.md +0 -34
  351. package/templates/shared//346/212/200/346/234/257/345/206/263/347/255/226/344/270/273/346/235/203.md +0 -50
  352. package/templates/shared//346/212/245/350/241/250/347/273/237/350/256/241.md +0 -50
  353. package/templates/shared//346/224/257/344/273/230.md +0 -51
  354. package/templates/shared//346/225/217/346/204/237/344/277/241/346/201/257/345/244/204/347/220/206.md +0 -77
  355. package/templates/shared//346/225/217/346/204/237/344/277/241/346/201/257/346/211/253/346/217/217.md +0 -53
  356. package/templates/shared//346/225/260/346/215/256/346/235/203/351/231/220.md +0 -47
  357. package/templates/shared//346/226/275/345/267/245/346/214/207/344/273/244/345/245/221/347/272/246.md +0 -69
  358. package/templates/shared//346/227/245/345/277/227/346/262/273/347/220/206.md +0 -31
  359. package/templates/shared//346/234/272/345/210/266/350/207/252/346/262/273/347/220/206.md +0 -31
  360. package/templates/shared//346/240/207/345/207/206/350/265/204/344/272/247/350/246/206/347/233/226.md +0 -50
  361. package/templates/shared//346/240/270/345/277/203/344/275/223/351/252/214/345/216/237/345/210/231.md +0 -38
  362. package/templates/shared//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/345/216/237/345/210/231.md +0 -154
  363. package/templates/shared//346/250/241/347/211/210Frontmatter.md +0 -125
  364. package/templates/shared//346/250/241/347/211/210/350/264/241/347/214/256/346/214/207/345/215/227.md +0 -282
  365. package/templates/shared//346/250/241/347/211/210/350/265/204/344/272/247/345/217/257/350/247/201/346/200/247.md +0 -48
  366. package/templates/shared//346/262/273/347/220/206/350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +0 -56
  367. package/templates/shared//346/263/250/345/206/214/350/241/250/345/237/272/347/241/200/350/256/276/346/226/275.md +0 -49
  368. package/templates/shared//346/274/224/350/277/233/345/233/236/345/275/222/351/227/250/346/216/247.md +0 -50
  369. package/templates/shared//347/224/250/346/210/267/345/217/215/351/246/210/345/245/221/347/272/246.md +0 -86
  370. package/templates/shared//347/237/245/350/257/206/344/270/273/346/235/203.md +0 -66
  371. package/templates/shared//347/237/245/350/257/206/346/262/273/347/220/206.md +0 -31
  372. package/templates/shared//347/237/245/350/257/206/346/263/250/345/205/245/350/276/271/347/225/214.md +0 -47
  373. package/templates/shared//347/273/206/350/212/202/347/272/252/345/276/213.md +0 -54
  374. package/templates/shared//350/204/221/346/232/264/344/270/216/346/226/271/346/241/210/346/216/242/347/264/242.md +0 -51
  375. package/templates/shared//350/256/241/345/210/222/345/211/215/347/275/256/351/227/250.md +0 -47
  376. package/templates/shared//350/256/276/350/256/241/344/272/247/347/211/251/345/214/205.md +0 -58
  377. package/templates/shared//350/257/255/344/271/211/350/257/201/346/215/256.md +0 -55
  378. package/templates/shared//350/267/250/345/271/263/345/217/260/350/267/257/345/276/204/345/256/211/345/205/250.md +0 -41
  379. package/templates/shared//350/276/223/345/205/245/346/235/220/346/226/231/345/245/221/347/272/246.md +0 -50
  380. package/templates/shared//350/277/220/350/241/214/345/256/211/345/205/250/345/214/205.md +0 -58
  381. package/templates/shared//351/200/232/347/224/250/345/206/263/347/255/226/347/240/224/350/256/250.md +0 -62
  382. package/templates/shared//351/200/232/347/224/250/346/234/272/346/242/260/346/235/241/346/254/276.md +0 -47
  383. package/templates/shared//351/200/232/347/237/245.md +0 -50
  384. package/templates/shared//351/203/250/347/275/262/351/205/215/347/275/256.md +0 -14
  385. package/templates/shared//351/205/215/347/275/256/344/274/230/345/205/210/347/272/247.md +0 -67
  386. package/templates/shared//351/205/215/347/275/256/350/220/275/347/233/230/350/276/271/347/225/214.md +0 -32
  387. package/templates/shared//351/230/262/345/255/244/345/262/233/345/256/236/347/216/260.md +0 -51
  388. package/templates/shared//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226.md +0 -57
  389. package/templates/shared//351/252/214/346/224/266/346/250/241/347/211/210/350/276/223/345/207/272/345/245/221/347/272/246.md +0 -71
  390. package/templates/shared//351/252/214/350/257/201/345/221/275/344/273/244/347/224/237/346/210/220.md +0 -55
  391. package/templates/shared//351/252/214/350/257/201/345/245/221/347/272/246.md +0 -48
  392. package/templates/verify/Docker/351/203/250/347/275/262.md +0 -46
  393. package/templates/verify/POC/347/273/223/350/256/272.md +0 -53
  394. package/templates/verify/React/345/210/227/350/241/250/350/241/250/346/240/274.md +0 -43
  395. package/templates/verify/React/347/212/266/346/200/201/347/256/241/347/220/206.md +0 -42
  396. package/templates/verify/React/347/273/204/344/273/266.md +0 -42
  397. package/templates/verify/React/350/241/250/345/215/225.md +0 -43
  398. package/templates/verify/React/350/267/257/347/224/261.md +0 -43
  399. package/templates/verify/SOLID/344/273/243/347/240/201/345/256/241/346/237/245.md +0 -74
  400. package/templates/verify/SOLID/350/256/276/350/256/241.md +0 -31
  401. package/templates/verify/Schema/345/205/274/345/256/271.md +0 -42
  402. package/templates/verify/Vue/347/212/266/346/200/201/347/256/241/347/220/206.md +0 -42
  403. package/templates/verify/Vue/347/273/204/344/273/266.md +0 -42
  404. package/templates/verify/Vue/350/267/257/347/224/261.md +0 -43
  405. package/templates/verify//344/270/212/346/270/270/350/256/276/350/256/241/344/272/244/345/217/211/351/252/214/350/257/201/345/256/241/346/237/245.md +0 -76
  406. package/templates/verify//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245.md +0 -38
  407. package/templates/verify//344/272/213/344/273/266/351/251/261/345/212/250.md +0 -46
  408. package/templates/verify//344/272/213/345/212/241/346/250/241/345/274/217.md +0 -42
  409. package/templates/verify//344/273/243/347/240/201/345/217/257/347/273/264/346/212/244/346/200/247/344/270/216/345/217/257/350/247/202/346/265/213/346/200/247/345/256/241/346/237/245.md +0 -92
  410. package/templates/verify//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/351/252/214/346/224/266.md +0 -64
  411. package/templates/verify//344/274/232/350/257/235/346/201/242/345/244/215.md +0 -46
  412. package/templates/verify//345/206/263/347/255/226/345/256/214/346/225/264/346/200/247/345/256/241/346/237/245.md +0 -71
  413. package/templates/verify//345/210/206/351/241/265/346/237/245/350/257/242.md +0 -41
  414. package/templates/verify//345/211/215/347/253/257/351/241/265/351/235/242.md +0 -40
  415. package/templates/verify//345/216/206/345/217/262/346/225/260/346/215/256/346/270/205/346/264/227/350/204/232/346/234/254.md +0 -55
  416. package/templates/verify//345/217/221/345/270/203/345/220/216/345/256/241/346/237/245.md +0 -73
  417. package/templates/verify//345/220/216/347/253/257API.md +0 -39
  418. package/templates/verify//345/242/236/345/210/240/346/224/271/346/237/245.md +0 -45
  419. package/templates/verify//345/244/226/351/203/250/344/276/235/350/265/226.md +0 -43
  420. package/templates/verify//345/245/221/347/272/246/345/205/274/345/256/271.md +0 -42
  421. package/templates/verify//345/256/232/346/227/266/344/273/273/345/212/241.md +0 -39
  422. package/templates/verify//345/256/236/346/227/266/346/216/250/351/200/201.md +0 -48
  423. package/templates/verify//345/256/241/346/237/245/346/221/230/350/246/201.md +0 -58
  424. package/templates/verify//345/267/245/344/275/234/346/265/201.md +0 -38
  425. package/templates/verify//345/271/266/345/217/221/345/256/241/346/237/245.md +0 -132
  426. package/templates/verify//345/274/202/346/255/245/345/257/274/345/207/272.md +0 -41
  427. package/templates/verify//346/200/247/350/203/275/345/256/241/346/237/245.md +0 -110
  428. package/templates/verify//346/216/245/345/217/243/345/245/221/347/272/246.md +0 -44
  429. package/templates/verify//346/216/245/345/217/243/345/245/221/347/272/246/345/256/241/346/237/245.md +0 -131
  430. package/templates/verify//346/220/234/347/264/242/346/250/241/345/274/217.md +0 -47
  431. package/templates/verify//346/225/205/351/232/234/345/244/215/347/233/230.md +0 -67
  432. package/templates/verify//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264.md +0 -37
  433. package/templates/verify//346/225/260/346/215/256/351/232/220/347/247/201.md +0 -46
  434. package/templates/verify//346/226/207/344/273/266/344/270/212/344/274/240.md +0 -45
  435. package/templates/verify//346/227/245/345/277/227.md +0 -45
  436. package/templates/verify//346/234/254/345/234/260/346/265/217/350/247/210/345/231/250/351/252/214/346/224/266.md +0 -94
  437. package/templates/verify//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214.md +0 -65
  438. package/templates/verify//347/237/245/350/257/206/346/263/250/345/205/245.md +0 -38
  439. package/templates/verify//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +0 -76
  440. package/templates/verify//347/274/223/345/255/230/347/255/226/347/225/245.md +0 -45
  441. package/templates/verify//350/201/224/350/260/203/350/256/276/350/256/241/347/274/272/351/231/267/345/210/244/345/256/232.md +0 -67
  442. package/templates/verify//350/201/224/350/260/203/351/252/214/350/257/201.md +0 -87
  443. package/templates/verify//350/256/276/350/256/241/345/256/241/350/256/241.md +0 -184
  444. package/templates/verify//350/257/225/350/277/220/350/241/214/347/206/224/346/226/255.md +0 -74
  445. package/templates/verify//350/276/223/345/205/245/346/240/241/351/252/214.md +0 -44
  446. package/templates/verify//351/203/250/347/275/262/345/217/221/345/270/203.md +0 -101
  447. package/templates/verify//351/224/231/350/257/257/345/244/204/347/220/206.md +0 -46
  448. package/templates/verify//351/224/231/350/257/257/350/276/271/347/225/214.md +0 -38
  449. package/templates/verify//351/232/220/347/247/201/345/256/241/346/237/245.md +0 -37
  450. package/templates/verify//351/252/214/350/257/201.md +0 -38
  451. package/templates/verify//351/252/214/350/257/201/350/201/232/345/220/210/346/243/200/346/237/245.md +0 -22
@@ -12,8 +12,8 @@ extra:
12
12
  products:
13
13
  - '*'
14
14
  lifecycle_status: active
15
- version: 1.3.0
16
- last_reviewed: '2026-06-04'
15
+ version: 2.0.0
16
+ last_reviewed: '2026-06-17'
17
17
  type: artifact
18
18
  domain: design
19
19
  stage: design
@@ -22,6 +22,11 @@ extra:
22
22
 
23
23
  # 需求分析文档
24
24
 
25
+ > **产物定位**:需求阶段(4 阶段第 1 步)的产出。把"做什么"想清楚,不是"怎么做"。
26
+ > **核心纪律**([[工程执行总纲]]):先暴露阻塞困惑,禁止把模糊需求直接转成方案;区分事实/假设/需确认。[[证据驱动与反幻觉]]:需求声明要有来源证据。
27
+ > **反退化纪律**:功能点清单/非功能需求/角色 等表格必须逐条填写真实内容,禁止空表、禁止只填示例行后省略、禁止「…」占位。
28
+ > **完成判定**:见文末,不满足不算交付。
29
+
25
30
  ## 1. 需求来源
26
31
  - 需求文档/原型链接:
27
32
  - 提出人:
@@ -33,91 +38,82 @@ extra:
33
38
  **用户需要达成什么?(非解决方案描述)**
34
39
 
35
40
  fundamental_need: <!-- 如"用户需要在一个会话中选购多件商品并一次性结算" -->
36
- confirmed_by: <!-- 用户确认标记 -->
41
+ confirmed_by: <!-- 用户确认标记,未确认不得进入实现 -->
37
42
 
38
- > **正反示例**:
43
+ > 正反示例:
39
44
  > - ❌ `fundamental_need: "做一个购物车页面"` — 这是解决方案
40
45
  > - ✅ `fundamental_need: "用户需要在一个会话中选购多件商品并一次性结算"` — 这是用户目标
41
- >
42
- > 引用审查规则:FP-01(第一性原理推理规则)
43
46
 
44
47
  ## 2. 功能点清单
45
48
 
46
- | 编号 | 功能点 | 页面/接口 | 业务规则 | 关联角色 | 前置依赖 | 关联功能 | 验收标准 | 状态 |
47
- |------|--------|----------|---------|---------|---------|---------|---------|------|
48
- | REQ-001 | | | | | | | | 待确认/已确认 |
49
+ | 编号 | 功能点 | 页面/接口 | 业务规则 | 关联角色 | 前置依赖 | 验收标准 | 状态 |
50
+ |------|--------|----------|---------|---------|---------|---------|------|
51
+ | REQ-001 | | | | | | | 待确认/已确认 |
49
52
 
50
53
  ## 3. 术语表
51
54
  | 术语 | 含义 | 同义词(统一为) |
52
55
  |------|------|----------------|
53
- | | | |
54
56
 
55
57
  ## 4. 未确认项
56
58
  | 编号 | 问题 | 影响范围 | 阻塞程度 | 负责人 |
57
59
  |------|------|---------|---------|--------|
58
60
  | | | | 阻塞/非阻塞 | |
59
61
 
60
- ## 5. 写操作失败反馈
61
- | 操作 | 失败场景 | 用户提示 | 重试建议 | 是否可恢复 |
62
- |------|---------|---------|---------|-----------|
63
- | | | | | |
64
-
65
- ## 6. 菜单权限规划
66
- | 菜单路径 | 关联功能 | 角色 | 权限标识 | 默认可见 |
67
- |---------|---------|------|---------|---------|
68
- | | | | | |
62
+ > 阻塞级未确认项不解决不得进入实现([[工程执行总纲]] 思考先行)。
69
63
 
70
- ## 7. 冲突与越界项
64
+ ## 5. 冲突与越界项
71
65
  | 项 | 类型(冲突/越界) | 来源 | 处理方式 |
72
66
  |----|-----------------|------|---------|
73
67
  | | | | 排除/延期/升级确认 |
74
68
 
75
- ## 8. 非功能需求
76
-
77
- ### 8.1 性能要求
78
-
79
- | 编号 | 类别 | 要求描述 | 验收指标 | 优先级 | 来源 |
80
- |------|------|---------|---------|--------|------|
81
- | NFR-001 | 性能 | <!-- 如:页面首次加载时间 --> | <!-- 如:< 3s --> | P0/P1/P2 | |
82
-
83
- ### 8.2 安全要求
69
+ ## 6. 非功能需求
84
70
 
85
71
  | 编号 | 类别 | 要求描述 | 验收指标 | 优先级 | 来源 |
86
72
  |------|------|---------|---------|--------|------|
87
- | NFR-002 | 安全 | <!-- 如:敏感数据传输加密 --> | <!-- 如:TLS 1.2+ --> | P0/P1/P2 | |
73
+ | NFR-001 | 性能 | <!-- 如:页面首次加载 --> | <!-- < 3s --> | P0/P1/P2 | |
74
+ | NFR-002 | 安全 | <!-- 如:敏感数据传输加密 --> | <!-- TLS 1.2+ --> | P0/P1/P2 | |
75
+ | NFR-003 | 可用性 | <!-- 如:系统可用率 --> | <!-- ≥ 99.9% --> | P0/P1/P2 | |
88
76
 
89
- ### 8.3 可用性要求
77
+ > 若需求来源未提及 NFR,按项目默认基线补齐:响应 < 3s、并发 100 用户、遵循项目安全基线、99.9% 可用率、主流浏览器最新 2 版。
90
78
 
91
- | 编号 | 类别 | 要求描述 | 验收指标 | 优先级 | 来源 |
92
- |------|------|---------|---------|--------|------|
93
- | NFR-003 | 可用性 | <!-- 如:系统可用率 --> | <!-- 如:≥ 99.9% --> | P0/P1/P2 | |
79
+ ## 7. 用户角色与权限
80
+ | 角色名称 | 角色描述 | 关联功能 | 数据权限范围 |
81
+ |---------|---------|---------|------------|
94
82
 
95
- ### 8.4 兼容性要求
83
+ ## 8. 外部接口与集成
84
+ | 外部系统 | 接口类型 | 用途 | 数据流向 | 可用性要求 | 负责方 |
85
+ |---------|---------|------|---------|----------|--------|
86
+ | | API/Webhook/SDK/文件 | | 出/入/双向 | SLA 要求 | 己方/对方/三方 |
96
87
 
97
- | 编号 | 类别 | 要求描述 | 验收指标 | 优先级 | 来源 |
98
- |------|------|---------|---------|--------|------|
99
- | NFR-004 | 兼容性 | <!-- 如:目标浏览器版本 --> | <!-- 如:Chrome/Safari/Firefox 最新 2 版 --> | P0/P1/P2 | |
88
+ > 若系统无外部依赖,显式标注"本系统无外部接口依赖"。
100
89
 
101
- ### 8.5 数据要求
90
+ ## 9. 系统形态与交付边界
102
91
 
103
- | 编号 | 类别 | 要求描述 | 验收指标 | 优先级 | 来源 |
104
- |------|------|---------|---------|--------|------|
105
- | NFR-005 | 数据 | <!-- 如:数据保留策略 --> | <!-- 如:日志保留 90 天 --> | P0/P1/P2 | |
92
+ > 决定系统长什么样:是否前后端分离、几个端、各端技术栈。这是下游架构 §6.3 前端模块化(`FE-*` ID)的依据,**须与用户研讨确认(非 AI 代决,属 must_confirm)**。
93
+ > 纯后端 API 项目:形态填「纯后端 API」,端清单留空(REQ-DELIB 不强制研讨前端形态)。
106
94
 
107
- > 若需求来源未提及 NFR,按项目默认 NFR 基线补齐:响应 < 3s、并发 100 用户、遵循项目安全基线、99.9% 可用率、主流浏览器最新 2 版。
95
+ - 系统形态:纯后端 API / 前后端分离 / 多端 / 纯前端
96
+ - 是否有前端:是/否
108
97
 
109
- ## 9. 用户角色
98
+ ### 端清单(有前端时逐端填写,每端对应架构 §6.3 一个 FE-* 端模块)
110
99
 
111
- | 角色名称 | 角色描述 | 关联功能 | 关联菜单 | 数据权限范围 |
112
- |---------|---------|---------|---------|------------|
113
- | <!-- 如:管理员 --> | <!-- 职责和使用场景 --> | REQ-NNN | <!-- 第 6 章菜单路径 --> | <!-- 可访问的数据范围 --> |
100
+ | ID(FE-*) | 端名称 | 形态 | 技术栈 | 职责 | 本期交付 |
101
+ |--------------|--------|------|--------|------|---------|
102
+ | FE-client-01 | | Web/移动/桌面 | | | 是/否 |
114
103
 
115
- > 角色名称必须在第 6 章菜单权限和第 2 章功能点中保持一致引用。
104
+ > ID 用**单段**命名(`FE-client-01`/`FE-admin-01`),不用多段(非 `FE-client-portal-01`)——承接校验正则约束。
116
105
 
117
- ## 10. 外部接口与集成
106
+ ### 交付边界
107
+ - 本期交付的端:
108
+ - 后续迭代的端:
109
+ - 前后端契约方式:RESTful / GraphQL / BFF
118
110
 
119
- | 外部系统 | 接口类型 | 用途 | 数据流向 | 可用性要求 | 负责方 |
120
- |---------|---------|------|---------|----------|--------|
121
- | | API/Webhook/SDK/文件 | | 出/入/双向 | SLA 要求 | 己方/对方/三方 |
111
+ ## 完成判定
122
112
 
123
- > 若系统无外部依赖,在此章显式标注"本系统无外部接口依赖"。
113
+ - [ ] §9 系统形态与交付边界已填写(形态/端清单/技术栈已与用户研讨确认;涉及前端时须有研讨记录)
114
+ - [ ] `fundamental_need` 是用户目标而非解决方案,且 `confirmed_by` 已标记
115
+ - [ ] 每个 REQ 有验收标准(可验证,非"功能正常"模糊表述)
116
+ - [ ] 阻塞级未确认项已解决或已升级
117
+ - [ ] NFR 有量化验收指标
118
+ - [ ] 无证据的需求声明已标注来源/不确定
119
+ - [ ] 各表格逐条填写真实内容,无空表/无示例行后省略/无「…」占位
@@ -0,0 +1,74 @@
1
+ ---
2
+ id: ka-guidance-UI视觉验收纪律
3
+ kind: guidance
4
+ title: UI视觉验收纪律
5
+ sync_policy: copy_to_project
6
+ status: active
7
+ triggers:
8
+ - UI 视觉
9
+ - 视觉验收
10
+ - 界面样式
11
+ - 前端样式
12
+ - 界面布局
13
+ target_artifact:
14
+ - release_note
15
+ extra:
16
+ name: ui-visual-acceptance
17
+ scope:
18
+ - frontend
19
+ products:
20
+ - '*'
21
+ type: procedure
22
+ lifecycle_status: active
23
+ version: 1.0.0
24
+ last_reviewed: '2026-06-20'
25
+ verification_layer: L2
26
+ stage: operate
27
+ domain: operate
28
+ owner_mechanism: mc-stage-gate-engine
29
+ ---
30
+
31
+ # UI视觉验收纪律
32
+
33
+ > **本纪律仅适用于含前端 UI 的项目。纯后端/无 UI 项目跳过本节,发布说明「UI 视觉验收」行填「无前端」。**
34
+
35
+ > **为什么是 L2 软规则**:SLICE-E2E(playwright e2e)只验**交互链路与接口响应**,不验**UI 视觉样式**(布局/颜色/间距/响应式视觉/与设计稿一致)。引擎不调 LLM、看不懂截图,**无法确定性判定"界面长得对不对"**——强行硬判必造假(有截图 ≠ 视觉对)。故 UI 视觉正确性归 **L2 客户端 AI 视觉审查**(主)+ **L3 人工确认**(兜底),引擎只做:注入本纪律提醒 + 提供发布说明留痕载体 + 文案不假装确定性验过。
36
+
37
+ ## 主流程:L2 客户端 AI 视觉审查
38
+
39
+ 交付前(产出发布说明时)对前端各端做视觉审查,**看截图判断**:
40
+
41
+ 1. **布局**:核心页面在 desktop/移动 viewport 下无塌陷、无错位、关键元素可见可点
42
+ 2. **颜色/主题**:配色与设计稿/主题一致,无对比度缺陷(文字可读)
43
+ 3. **响应式视觉**:断点切换无溢出、无横向滚动、组件自适应
44
+ 4. **与设计稿一致**:关键页对照设计稿/截图基线,记录差异点
45
+
46
+ **产出结论**(非"看过"二字了事):每个审查维度给 通过/差异/未覆盖,差异项附截图 ref + 说明。
47
+
48
+ ## L3 兜底:人工确认主观项
49
+
50
+ 以下归人工确认,AI 不得替人拍板:
51
+ - 主观审美(视觉风格是否"对"、品牌调性)
52
+ - AI 不确定的视觉差异(像素级 flaky)
53
+ - 设计稿未覆盖的边界视觉态
54
+
55
+ 发布说明「UI 视觉验收」行须列明**需人工确认的视觉点**(对应 `manual_review_steps_zh`),人工逐项确认后方可判定交付完成。
56
+
57
+ ## 留痕(发布说明「UI 视觉验收」行)
58
+
59
+ 发布说明「5. 验证结果」表「UI 视觉验收」行填写:
60
+ - **结果**:通过 / 差异(附说明)/ 待人工确认
61
+ - **证据**:截图 ref + AI 视觉结论摘要 / 人工确认结果
62
+
63
+ ## 诚实纪律(反造假)
64
+
65
+ - **没验标 gap,不假装 passed**:若未做视觉审查,发布说明该行填「未验收」并标限制,**不得填"通过"**——填"通过"而无证据 = 重蹈 SLICE-E2E 名不副实的覆辙。
66
+ - **不在确定性 e2e 里偷验视觉**:UI 视觉是 L2/L3 域,不往 SLICE-E2E 塞视觉断言冒充确定性覆盖。
67
+ - **纯前端无后端的项目也须做**:只要含 UI 就适用,不因"无后端接口"跳过视觉验收。
68
+
69
+ ## L1 备选:视觉回归(成熟项目可选)
70
+
71
+ 成熟项目可加 `playwright` `toHaveScreenshot()` 基线对比做**视觉回归**(L1 确定性,防"这次和上次不一样")。注意:
72
+ - 视觉回归只防**回归**,不验**设计符合度**(基线本身可能就是错的)——不替代 L2 设计符合度审查。
73
+ - 需建基线截图 + 维护,像素对比易 flaky(字体渲染/动画),需稳定测试环境。
74
+ - 新建项目默认走 L2+L3,待视觉稳定后再补 L1 回归。
@@ -5,11 +5,13 @@ gate: operate-gate
5
5
  title: operate阶段强制检查清单
6
6
  sync_policy: engine_only
7
7
  status: active
8
+ extra:
9
+ owner_mechanism: mc-stage-gate-engine
8
10
  checks:
9
11
  - id: OPR-G01
10
12
  executor: file_evidence
11
13
  rule: "发布后 5xx 错误率在基线 ±20% 范围内,无突增趋势"
12
- severity: error
14
+ severity: warning
13
15
  check_type: deterministic
14
16
  evidence_required: ["基线错误率 / 发布后错误率 / 偏差百分比(±20% 内)"]
15
17
  gate: operate-gate
@@ -17,7 +19,7 @@ checks:
17
19
  - id: OPR-G02
18
20
  executor: file_evidence
19
21
  rule: "发布后 P99 延迟不超过基线的 1.5 倍"
20
- severity: error
22
+ severity: warning
21
23
  check_type: deterministic
22
24
  evidence_required: ["P99 基线 / 发布后 P99 / 比值(<= 1.5x)"]
23
25
  gate: operate-gate
@@ -33,7 +35,7 @@ checks:
33
35
  - id: OPR-G04
34
36
  executor: file_evidence
35
37
  rule: "回滚预案已在预发环境演练验证,总耗时不超过 5 分钟"
36
- severity: error
38
+ severity: warning
37
39
  check_type: deterministic
38
40
  evidence_required: ["回滚演练记录 + 总耗时(<= 5 分钟)"]
39
41
  gate: operate-gate
@@ -41,16 +43,61 @@ checks:
41
43
  - id: OPR-G05
42
44
  executor: file_evidence
43
45
  rule: "发布后数据一致性校验 SQL 全部通过,覆盖所有变更涉及的表"
44
- severity: error
46
+ severity: warning
45
47
  check_type: deterministic
46
48
  evidence_required: ["校验 SQL 结果 + 覆盖表/记录数"]
47
49
  gate: operate-gate
48
50
  target: "self"
51
+ - id: OPR-DEPLOY-STRUCT
52
+ executor: document_structure
53
+ rule: "部署配置须含「环境规划」「环境变量与密钥」「部署方式」「健康检查与资源」「监控告警」「回滚方案」「完成判定」章节"
54
+ severity: error
55
+ check_type: deterministic
56
+ evidence_required: ["deploy/部署配置.md"]
57
+ gate: operate-gate
58
+ target: self
59
+ - id: RELNOTE-STRUCT
60
+ executor: document_structure
61
+ check_type: deterministic
62
+ severity: warning
63
+ gate: operate-gate
64
+ required_artifact: 发布说明模版
65
+ rule: "发布说明须含「版本信息」「变更摘要」「数据库迁移」「验证结果」「回滚方案」「部署步骤」「监控」「已知问题」「完成判定」章节"
66
+ evidence_required: ["docs/audits/04-发布说明.md"]
67
+ target: "self"
68
+ - id: DEPLOY-BLOCK
69
+ executor: document_structure
70
+ check_type: deterministic
71
+ severity: error
72
+ gate: operate-gate
73
+ required_artifact: 部署配置模版
74
+ rule: "部署必填表格章节(环境/变量/依赖/健康/监控/回滚)须有表格行(反退化:禁空单元格/...占位)"
75
+ block_check:
76
+ item_pattern: '^##\s+(1|2|3|5|6|7)\.'
77
+ require_table: true
78
+ min_table_rows: 1
79
+ evidence_required: ["部署配置模版"]
80
+ target: "self"
81
+ - id: RELEASENOTE-BLOCK
82
+ executor: document_structure
83
+ check_type: deterministic
84
+ severity: error
85
+ gate: operate-gate
86
+ required_artifact: 发布说明模版
87
+ rule: "变更摘要/验证结果章节须有表格行(反退化:禁空表/一句话代替)"
88
+ block_check:
89
+ item_pattern: '^##\s+(2|5)\.'
90
+ require_table: true
91
+ min_table_rows: 1
92
+ evidence_required: ["发布说明模版"]
93
+ target: "self"
49
94
  ---
50
95
 
51
96
  # operate-gate 强制检查清单
52
97
 
53
- 5 条确定性检查。bridge 从此文件聚合。
98
+ 6 条确定性检查(含 RELNOTE-STRUCT)。bridge 从此文件聚合。
99
+
100
+ > OPR-G01~G05 用 file_evidence(只验证据文件存在+非空);rule 描述的指标(5xx/P99/日志/回滚/一致性)**须人工确认**,故 severity=warning(不假装 error 确认指标)。
54
101
 
55
102
  对应工程经验:
56
103
  - OPR-G01
@@ -1,57 +1,78 @@
1
1
  ---
2
- id: ka-rule-domain-operate-rollout-monitoring
2
+ id: ka-guidance-上线观察
3
3
  kind: guidance
4
4
  title: 上线观察
5
+ sync_policy: copy_to_project
6
+ status: active
5
7
  triggers:
6
8
  - 上线
7
9
  - 观察
8
10
  - 监控
9
11
  - rollout
10
- sync_policy: copy_to_project
11
- status: active
12
+ - 灰度
13
+ - 发布
14
+ - 回滚
15
+ - 熔断
16
+ - 发布后
17
+ target_artifact:
18
+ - deploy_config
19
+ - release_note
12
20
  extra:
13
- updated_at: '2026-06-15'
14
- lifecycle_status: active
15
21
  name: rollout-monitoring
16
22
  scope:
17
23
  - '*'
18
24
  products:
19
- - deploy_config
20
- - release_note
21
- type: constraint
22
- version: 1.0.0
23
- last_reviewed: '2026-06-11'
24
- domain:
25
- - operate
25
+ - '*'
26
+ type: procedure
27
+ lifecycle_status: active
28
+ version: 2.0.0
29
+ last_reviewed: '2026-06-17'
26
30
  verification_layer: L2
27
31
  stage: operate
32
+ domain: operate
28
33
  owner_mechanism: mc-domain-operate
29
34
  ---
30
35
 
31
- ## 上线观察规则
36
+ # 上线观察:发布后怎么盯、什么时候回滚
37
+
38
+ > operate-gate 的 OPR-G01~05 是确定性门禁;本 guidance 是发布值守的方法。
39
+ > [[开发者宪法]]:破坏性/线上操作必须可回滚、有人盯。
40
+
41
+ ## 灰度发布
42
+
43
+ - 小流量先上(1% → 10% → 50% → 100%),每档观察一个周期
44
+ - 每档观察指标无异常再放量
45
+ - 灰度期间保留快速回滚能力
46
+
47
+ ## 观察指标(对应 OPR-G01~03)
48
+
49
+ - **错误率**:5xx 在基线 ±20% 内(OPR-G01)
50
+ - **延迟**:P99 不超基线 1.5 倍(OPR-G02)
51
+ - **新错误模式**:日志无部署前不存在的错误(OPR-G03)
52
+ - **业务指标**:核心业务量/转化率无异常下跌
32
53
 
33
- ### 观察指标
54
+ ## 熔断回滚
34
55
 
35
- 1. **错误率监控**
36
- - 上线后 15 分钟内 5xx 错误率不得超过基线的 2
37
- - 新增的错误码必须立即通知
56
+ 回滚触发条件(命中任一立即回滚,不要犹豫):
57
+ - 错误率超基线 2 倍且持续
58
+ - P99 超基线 3 倍
59
+ - 业务核心指标崩跌
60
+ - 数据不一致告警
38
61
 
39
- 2. **延迟监控**
40
- - P99 延迟不得超过基线的 1.5
41
- - 关键接口响应时间必须持续观察 30 分钟
62
+ 回滚操作:
63
+ - 按预演过的回滚方案执行(OPR-G04,总耗时 5 分钟)
64
+ - 回滚后确认指标恢复 + 数据一致性(OPR-G05)
65
+ - 留痕:回滚原因/时间/操作人/结果
42
66
 
43
- 3. **业务指标**
44
- - 核心业务流程(下单/支付/登录)成功率不得下降
45
- - 数据一致性校验必须在上线后执行
67
+ ## 发布后验证
46
68
 
47
- 4. **回滚触发条件**
48
- - 错误率超过阈值 → 自动回滚
49
- - 业务流程完全中断 → 立即回滚
50
- - 数据不一致 → 暂停发布 + 人工评估
69
+ - 数据一致性校验 SQL 全过(OPR-G05)
70
+ - 核心业务流程线上复验(非只看监控)
71
+ - 确认无遗留告警
51
72
 
52
- ### 验收项
73
+ ## 禁止
53
74
 
54
- - [AC-01] 监控面板已就绪
55
- - [AC-02] 告警阈值已配置
56
- - [AC-03] 回滚触发条件已定义
57
- - [AC-04] 观察窗口期已设定(至少 30 分钟)
75
+ - 无回滚方案就上线(违规)
76
+ - 全量直上无灰度(违规,除非低风险配置变更且说明)
77
+ - 指标异常不回滚硬扛(违规)
78
+ - 回滚方案没演练过(违规,OPR-G04)
@@ -1,5 +1,5 @@
1
1
  ---
2
- id: ka-artifact_template-发布说明模版
2
+ id: ka-artifact-发布说明
3
3
  kind: artifact
4
4
  title: 发布说明
5
5
  sync_policy: copy_to_project
@@ -22,6 +22,10 @@ extra:
22
22
 
23
23
  # 发布说明
24
24
 
25
+ > **产物定位**:operate 阶段产出。记录发布内容/影响/验证/回滚,是上线可追溯的凭证。
26
+ > **核心纪律**:任何上线变更必须有回滚方案([[开发者宪法]]);发布说明须含回滚章节(operate-gate RELNOTE-STRUCT 守护)。
27
+ > **反退化纪律**:变更摘要/验证结果等表格须逐条填写,禁止空表、禁止「…」省略;回滚/部署步骤须是可执行的具体步骤,非一句话。
28
+
25
29
  ## 1. 版本信息
26
30
  - 版本号:
27
31
  - 发布日期:
@@ -33,6 +37,12 @@ extra:
33
37
  |--------|---------------------------|--------------|---------|
34
38
  | | | | |
35
39
 
40
+ ### 前端各端版本(涉及 FE-* 时填;纯后端填"无前端")
41
+
42
+ | 端(FE-*) | 版本号 | 变更摘要 | 是否独立发布 |
43
+ |-----------|--------|---------|------------|
44
+ | FE-client-01 | | | 是/否 |
45
+
36
46
  ## 3. 数据库迁移
37
47
  - [ ] 无数据库变更
38
48
  - 迁移脚本路径:
@@ -51,6 +61,7 @@ extra:
51
61
  | 单元测试 | | |
52
62
  | 集成测试 | | |
53
63
  | 端到端验收 | | |
64
+ | UI 视觉验收(前端项目填;纯后端填"无前端")| | 截图 + AI视觉结论/人工确认 |
54
65
 
55
66
  ## 6. 回滚方案
56
67
  - 触发条件(什么情况下回滚):
@@ -77,3 +88,13 @@ extra:
77
88
  - 通知对象(用户/团队/相关方):
78
89
  - 通知内容:
79
90
  - 通知时间:
91
+
92
+ ## 完成判定
93
+
94
+ - [ ] 版本信息完整(版本号/日期/负责人)
95
+ - [ ] 变更摘要覆盖本次所有变更
96
+ - [ ] 验证结果含三类(正常/边界/异常)
97
+ - [ ] 回滚方案可执行
98
+ - [ ] 部署步骤明确可操作
99
+ - [ ] 前端项目:UI 视觉验收已留痕(截图+结论或人工确认);纯后端填"无前端"
100
+ - [ ] 变更/验证表格逐条填写,回滚与部署步骤具体可执行(非一句话)
@@ -0,0 +1,93 @@
1
+ ---
2
+ id: ka-artifact-部署配置
3
+ kind: artifact
4
+ title: 部署配置
5
+ sync_policy: copy_to_project
6
+ status: active
7
+ extra:
8
+ name: deploy-config
9
+ scope:
10
+ - '*'
11
+ products:
12
+ - '*'
13
+ lifecycle_status: active
14
+ version: 1.0.0
15
+ last_reviewed: '2026-06-17'
16
+ type: artifact
17
+ domain: operate
18
+ stage: operate
19
+ owner_mechanism: mc-generic-artifact
20
+ ---
21
+
22
+ # 部署配置
23
+
24
+ > **产物定位**:operate 阶段必出。把环境、依赖、部署方式、健康检查、回滚定清楚。
25
+ > **核心纪律**:部署可回滚([[开发者宪法]]);配置走环境变量不硬编码([[安全加固]])。
26
+ > **反退化纪律**:环境变量/依赖服务/监控告警/回滚方案等表格须逐条填写真实值,禁止空单元格、禁止「…」占位。
27
+ > **完成判定**:见文末。
28
+
29
+ ## 1. 环境规划
30
+ | 环境 | 用途 | 访问范围 | 数据来源 | 配置差异 |
31
+ |------|------|---------|---------|---------|
32
+ | 开发 | | | | |
33
+ | 测试 | | | | |
34
+ | 预发 | | | | |
35
+ | 生产 | | | | |
36
+
37
+ ## 2. 环境变量与密钥
38
+ | 变量名 | 用途 | 是否敏感 | 默认值 | 各环境取值来源 |
39
+ |--------|------|---------|--------|--------------|
40
+
41
+ > 敏感变量必须走密钥管理/环境变量注入,禁止写入镜像或代码(shared-gate SEC-02)。
42
+
43
+ ## 3. 依赖服务
44
+ | 服务 | 用途 | 版本 | 访问方式 | SLA/可用性要求 | 失败降级 |
45
+ |------|------|------|---------|--------------|---------|
46
+ | 数据库 | | | | | |
47
+ | 缓存 | | | | | |
48
+ | 消息队列 | | | | | |
49
+
50
+ ## 4. 部署方式
51
+ - 部署形态:Docker / k8s / 裸机 / Serverless
52
+ - 镜像/制品来源:
53
+ - 部署流程:构建 → 推送 → 拉起 → 健康检查 → 放量
54
+
55
+ ### 多端部署矩阵(涉及前端 FE-* 时填;纯后端填"无前端,单一部署")
56
+
57
+ | 端(FE-*) | 部署方式 | 制品来源 | 域名/入口 | 与后端依赖 |
58
+ |-----------|---------|---------|----------|-----------|
59
+ | FE-client-01 | 静态托管/CDN/容器 | | | |
60
+
61
+ > 每个前端端独立部署(静态资源 CDN / 容器化),后端独立部署;端间依赖(如 admin 依赖后端 API)显式声明。
62
+
63
+ ## 5. 健康检查与资源
64
+ | 项 | 配置 |
65
+ |----|------|
66
+ | 健康检查端点 | |
67
+ | 就绪检查 | |
68
+ | 存活检查 | |
69
+ | CPU/内存限制 | |
70
+ | 副本数/扩缩容策略 | |
71
+
72
+ ## 6. 监控告警
73
+ | 指标 | 告警阈值 | 处理动作 |
74
+ |------|---------|---------|
75
+ | 错误率 | | |
76
+ | P99 延迟 | | |
77
+ | 资源使用率 | | |
78
+
79
+ ## 7. 回滚方案(必填)
80
+ | 场景 | 回滚方式 | 回滚耗时 | 验证方法 | 触发条件 |
81
+ |------|---------|---------|---------|---------|
82
+
83
+ > operate-gate OPR-G04:回滚预案须在预发演练,总耗时 ≤ 5 分钟。
84
+
85
+ ## 完成判定
86
+
87
+ - [ ] 四环境规划完整(开发/测试/预发/生产)
88
+ - [ ] 敏感变量标注并走密钥管理(无硬编码)
89
+ - [ ] 依赖服务列出失败降级
90
+ - [ ] 健康检查(就绪+存活)配置
91
+ - [ ] 监控告警覆盖错误率/延迟/资源
92
+ - [ ] 回滚方案有且可演练
93
+ - [ ] 各配置表格逐条填真实值,无空单元格/无「…」占位