progmune-runtime 2.1.6 → 3.2.0

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 (356) hide show
  1. package/README.md +108 -468
  2. package/dist/ablation-study.js +144 -0
  3. package/dist/ablation-study.test.js +18 -0
  4. package/dist/action-runtime.js +3 -1
  5. package/dist/active-learning.js +211 -0
  6. package/dist/analytics.js +139 -0
  7. package/dist/asset-factory.js +309 -0
  8. package/dist/asset-growth.js +244 -0
  9. package/dist/asset-promotion.js +382 -0
  10. package/dist/asset-quality.js +550 -0
  11. package/dist/audit/business-translator.js +285 -0
  12. package/dist/audit/cli.js +66 -0
  13. package/dist/audit/formatters/html.js +379 -0
  14. package/dist/audit/formatters/json.js +11 -0
  15. package/dist/audit/formatters/markdown.js +192 -0
  16. package/dist/audit/formatters/terminal.js +189 -0
  17. package/dist/audit/index.js +25 -0
  18. package/dist/audit/report-builder.js +318 -0
  19. package/dist/audit/types.js +8 -0
  20. package/dist/audit.js +3 -3
  21. package/dist/auto-benchmark-generator.js +137 -0
  22. package/dist/auto-benchmark-generator.test.js +45 -0
  23. package/dist/auto-protocol-synthesizer.js +362 -0
  24. package/dist/auto-protocol-synthesizer.test.js +82 -0
  25. package/dist/autonomous-patch.js +175 -0
  26. package/dist/autonomous-patch.test.js +128 -0
  27. package/dist/badge/badge-server.js +98 -0
  28. package/dist/behavior-miner.js +442 -0
  29. package/dist/belief-layer.js +475 -0
  30. package/dist/benchmark-count.js +5 -0
  31. package/dist/benchmark-generator.js +211 -0
  32. package/dist/benchmark-harness.js +201 -0
  33. package/dist/benchmark-pass-rate.js +7 -0
  34. package/dist/benchmark-report.js +8 -3
  35. package/dist/benchmark-save.js +14 -1
  36. package/dist/bootstrap-validation.js +197 -0
  37. package/dist/bootstrap-validation.test.js +51 -0
  38. package/dist/branch-ledger.js +1 -1
  39. package/dist/capability-gap.js +130 -0
  40. package/dist/certify-html.js +351 -0
  41. package/dist/certify.js +326 -0
  42. package/dist/check.js +4 -4
  43. package/dist/compliance-miner.js +447 -0
  44. package/dist/continuous-benchmark.js +194 -0
  45. package/dist/continuous-benchmark.test.js +116 -0
  46. package/dist/corpus-stats.js +173 -0
  47. package/dist/counterfactual-engine.js +288 -0
  48. package/dist/coverage-dashboard.js +109 -0
  49. package/dist/coverage-system.test.js +205 -0
  50. package/dist/cross-repo-precision.js +352 -0
  51. package/dist/cve-benchmark.js +180 -0
  52. package/dist/cve-benchmark.test.js +28 -0
  53. package/dist/cve-collector.js +73 -0
  54. package/dist/data-quality.js +141 -0
  55. package/dist/decision-engine.js +388 -0
  56. package/dist/derive-metadata.js +250 -0
  57. package/dist/difficulty-active.test.js +198 -0
  58. package/dist/difficulty-map.js +244 -0
  59. package/dist/discovery-analytics.js +125 -0
  60. package/dist/discovery-model.js +149 -0
  61. package/dist/discovery-optimize.test.js +199 -0
  62. package/dist/discovery-trace.js +276 -0
  63. package/dist/discovery-trace.test.js +97 -0
  64. package/dist/emitter.js +83 -1
  65. package/dist/enterprise-dashboard.js +405 -0
  66. package/dist/eval-hardening.js +297 -0
  67. package/dist/eval-hardening.test.js +85 -0
  68. package/dist/evaluation-campaign.js +359 -0
  69. package/dist/evaluation-campaign.test.js +181 -0
  70. package/dist/evidence-growth.js +143 -0
  71. package/dist/evidence-repository.js +209 -0
  72. package/dist/evidence-system.js +441 -0
  73. package/dist/execute.js +15 -7
  74. package/dist/experimental/software-physics.js +291 -0
  75. package/dist/experimental/state-inference.js +516 -0
  76. package/dist/experimental/unsupervised-physics.js +230 -0
  77. package/dist/extract-ir-python.js +54 -7
  78. package/dist/extract-ir.js +376 -12
  79. package/dist/failure-collector.js +2 -2
  80. package/dist/failure-corpus.js +322 -9
  81. package/dist/feedback.js +16 -5
  82. package/dist/feedback.test.js +49 -0
  83. package/dist/file-lock.js +1 -1
  84. package/dist/flywheel-batch.js +292 -0
  85. package/dist/frameworks/express-cli.js +237 -0
  86. package/dist/frameworks/express-detector.js +445 -0
  87. package/dist/frameworks/express-detector.test.js +206 -0
  88. package/dist/frameworks/index.js +30 -0
  89. package/dist/frameworks/nestjs-detector.js +302 -0
  90. package/dist/frameworks/trpc-detector.js +161 -0
  91. package/dist/frameworks/version-awareness.js +179 -0
  92. package/dist/function-synonyms.js +164 -0
  93. package/dist/function-synonyms.test.js +68 -0
  94. package/dist/generalization.test.js +352 -0
  95. package/dist/goal-annotator.js +113 -0
  96. package/dist/goal-planner.js +563 -0
  97. package/dist/gold-cve.js +164 -0
  98. package/dist/gold-cve.test.js +104 -0
  99. package/dist/gold-quality.js +206 -0
  100. package/dist/gold-tiers.js +241 -0
  101. package/dist/governance-dashboard.js +327 -0
  102. package/dist/graph-viz.js +240 -0
  103. package/dist/guided-frontier.js +195 -0
  104. package/dist/hierarchical-planner.js +148 -0
  105. package/dist/identifier-parser.js +260 -0
  106. package/dist/immune-metrics.js +93 -0
  107. package/dist/immune-receiver.js +158 -0
  108. package/dist/immune-reporter.js +1 -1
  109. package/dist/improvement-orchestrator.js +206 -0
  110. package/dist/inject-p0-vocabulary.js +300 -0
  111. package/dist/intent-parser.js +218 -0
  112. package/dist/invariant-algebra.js +476 -0
  113. package/dist/invariant-calculus.js +533 -0
  114. package/dist/ir-utils.js +70 -0
  115. package/dist/ir-utils.test.js +50 -0
  116. package/dist/knowledge-api.js +312 -0
  117. package/dist/knowledge-evolution.js +452 -0
  118. package/dist/knowledge-explorer.js +506 -0
  119. package/dist/knowledge-flywheel.js +274 -0
  120. package/dist/knowledge-governance.js +338 -0
  121. package/dist/knowledge-governance.test.js +150 -0
  122. package/dist/knowledge-graph.js +181 -0
  123. package/dist/knowledge-guided-synth.js +246 -0
  124. package/dist/knowledge-loop.test.js +77 -0
  125. package/dist/knowledge-object.js +316 -0
  126. package/dist/knowledge-package.js +98 -0
  127. package/dist/kpi-dashboard.js +561 -0
  128. package/dist/l3-cross-function.js +280 -0
  129. package/dist/learning-ranker.js +148 -0
  130. package/dist/learning-ranker.test.js +291 -0
  131. package/dist/ledger/accountability.js +322 -0
  132. package/dist/ledger/chain-builder.js +185 -0
  133. package/dist/ledger/cli.js +222 -0
  134. package/dist/ledger/index.js +13 -0
  135. package/dist/ledger/signatures.js +193 -0
  136. package/dist/ledger/types.js +9 -0
  137. package/dist/llm.js +74 -3
  138. package/dist/load-benchmarks.js +8 -3
  139. package/dist/logger.js +66 -0
  140. package/dist/logger.test.js +37 -0
  141. package/dist/logistic-reward.js +339 -0
  142. package/dist/logistic-reward.test.js +180 -0
  143. package/dist/macro-graph.js +193 -0
  144. package/dist/macro-repair.js +183 -0
  145. package/dist/mcp-server.mjs +1202 -483
  146. package/dist/memory-layer.js +42 -5
  147. package/dist/multi-repo-precision.js +422 -0
  148. package/dist/name-free-protocol.js +425 -0
  149. package/dist/name-free-protocol.test.js +170 -0
  150. package/dist/name-scrambling.js +138 -0
  151. package/dist/name-scrambling.test.js +16 -0
  152. package/dist/p3-observability.test.js +281 -0
  153. package/dist/p5-orchestrator.test.js +225 -0
  154. package/dist/pairwise-preference.js +294 -0
  155. package/dist/pairwise-preference.test.js +140 -0
  156. package/dist/planner-constraints.js +104 -0
  157. package/dist/planner-prompts.js +155 -0
  158. package/dist/planner-telemetry.js +415 -0
  159. package/dist/planner-trace.js +214 -0
  160. package/dist/planner.js +162 -167
  161. package/dist/plsb/artifact.js +116 -0
  162. package/dist/plsb/cli.js +71 -0
  163. package/dist/plsb/index.js +19 -0
  164. package/dist/plsb/leaderboard.js +249 -0
  165. package/dist/plsb/report-md.js +156 -0
  166. package/dist/plsb/schema.js +179 -0
  167. package/dist/plsb-benchmark.js +284 -0
  168. package/dist/plsb-benchmark.test.js +119 -0
  169. package/dist/policy/cli.js +134 -0
  170. package/dist/policy/engine.js +333 -0
  171. package/dist/policy/index.js +12 -0
  172. package/dist/policy/types.js +59 -0
  173. package/dist/policy-miner.js +505 -0
  174. package/dist/precision-analyze.js +229 -0
  175. package/dist/precision-benchmark.js +147 -0
  176. package/dist/precision-label-c.js +134 -0
  177. package/dist/precision-label.js +193 -0
  178. package/dist/precision-report-c.js +149 -0
  179. package/dist/precision-report.js +246 -0
  180. package/dist/progmune-status.js +108 -0
  181. package/dist/proof-engine.js +479 -0
  182. package/dist/proof-provenance.js +315 -0
  183. package/dist/protocol-coverage.js +294 -0
  184. package/dist/protocol-detector.js +1189 -0
  185. package/dist/protocol-embedding-expanded.js +297 -0
  186. package/dist/protocol-embedding-expanded.test.js +97 -0
  187. package/dist/protocol-embedding.js +195 -0
  188. package/dist/protocol-embedding.test.js +82 -0
  189. package/dist/protocol-extractor-v2.js +354 -0
  190. package/dist/protocol-extractor-v2.test.js +140 -0
  191. package/dist/protocol-extractor.js +310 -0
  192. package/dist/protocol-extractor.test.js +113 -0
  193. package/dist/protocol-foundation.js +322 -0
  194. package/dist/protocol-foundation.test.js +163 -0
  195. package/dist/protocol-frontier.js +243 -0
  196. package/dist/protocol-frontier.test.js +92 -0
  197. package/dist/protocol-gap-analyzer.js +228 -0
  198. package/dist/protocol-gap-analyzer.test.js +49 -0
  199. package/dist/protocol-invariants.js +276 -0
  200. package/dist/protocol-invariants.test.js +111 -0
  201. package/dist/protocol-knowledge.js +464 -0
  202. package/dist/protocol-miner.js +343 -0
  203. package/dist/protocol-mining.js +207 -0
  204. package/dist/protocol-mining.test.js +37 -0
  205. package/dist/protocol-registry.js +1 -1
  206. package/dist/protocol-security-benchmark.js +222 -0
  207. package/dist/protocol-vulnerability.js +257 -0
  208. package/dist/protocol-vulnerability.test.js +60 -0
  209. package/dist/python-benchmark.js +120 -0
  210. package/dist/python-emitter.js +163 -45
  211. package/dist/python-protocol-extractor.js +187 -0
  212. package/dist/python-protocol-extractor.test.js +116 -0
  213. package/dist/realworld-benchmark.js +646 -0
  214. package/dist/realworld-benchmark.test.js +36 -0
  215. package/dist/repair-arch.test.js +411 -0
  216. package/dist/repair-evolution.test.js +454 -0
  217. package/dist/repair-executor.js +719 -0
  218. package/dist/repair-proposal.js +4 -4
  219. package/dist/repair-ranker.js +141 -0
  220. package/dist/repair-strategies.js +419 -0
  221. package/dist/repair-taxonomy.js +234 -0
  222. package/dist/repair-types.js +12 -0
  223. package/dist/repo-evaluator.js +250 -0
  224. package/dist/repo-evaluator.test.js +128 -0
  225. package/dist/resource-abstraction.js +242 -0
  226. package/dist/resource-detector.js +211 -0
  227. package/dist/result.test.js +43 -0
  228. package/dist/reward-system.js +411 -0
  229. package/dist/reward-system.test.js +175 -0
  230. package/dist/risk-model.js +215 -0
  231. package/dist/rule-miner.js +234 -7
  232. package/dist/rule-specificity.js +254 -0
  233. package/dist/runtime-types.js +27 -0
  234. package/dist/scaffold.js +208 -0
  235. package/dist/scale-collector.test.js +101 -0
  236. package/dist/scale-trajectory-collector.js +128 -0
  237. package/dist/sdk.js +250 -0
  238. package/dist/search-planner.js +4 -41
  239. package/dist/semantic-snapshot.js +1 -1
  240. package/dist/semantic-topology.js +121 -0
  241. package/dist/semantic-trace.js +310 -317
  242. package/dist/sequence-extractor.js +343 -0
  243. package/dist/skill-library.js +245 -0
  244. package/dist/skill-planner.test.js +189 -0
  245. package/dist/software-physics.js +291 -0
  246. package/dist/software-physics.test.js +81 -0
  247. package/dist/ssg-precision.js +478 -0
  248. package/dist/ssg-validator.js +71 -21
  249. package/dist/state-inference-doubleblind.test.js +160 -0
  250. package/dist/state-inference.js +516 -0
  251. package/dist/state-inference.test.js +115 -0
  252. package/dist/state-machine-fingerprint.js +345 -0
  253. package/dist/state-machine-fingerprint.test.js +120 -0
  254. package/dist/state-miner.js +386 -0
  255. package/dist/state-name-inference.js +213 -0
  256. package/dist/state-name-inference.test.js +69 -0
  257. package/dist/strategy-planner.js +262 -96
  258. package/dist/strategy-planner.test.js +135 -0
  259. package/dist/telemetry-analytics.test.js +402 -0
  260. package/dist/terminal-format.js +68 -0
  261. package/dist/terminal-format.test.js +83 -0
  262. package/dist/topology-factory.js +196 -0
  263. package/dist/topology-representation.js +242 -0
  264. package/dist/topology-representation.test.js +27 -0
  265. package/dist/trajectory-augmentation.js +254 -0
  266. package/dist/trajectory-augmentation.test.js +63 -0
  267. package/dist/trajectory-corpus.js +440 -0
  268. package/dist/trajectory-corpus.test.js +32 -0
  269. package/dist/trajectory-feedback.test.js +116 -0
  270. package/dist/transition-synthesizer.js +286 -0
  271. package/dist/transition-synthesizer.test.js +123 -0
  272. package/dist/trust/api-semantic-mapper.js +809 -0
  273. package/dist/trust/call-graph-propagator.js +225 -0
  274. package/dist/trust/cli.js +122 -0
  275. package/dist/trust/compliance-scorer.js +283 -0
  276. package/dist/trust/confidence-calculator.js +261 -0
  277. package/dist/trust/engine.js +1145 -0
  278. package/dist/trust/explainability.js +85 -0
  279. package/dist/trust/formatters/ci.js +42 -0
  280. package/dist/trust/formatters/json.js +11 -0
  281. package/dist/trust/formatters/terminal.js +152 -0
  282. package/dist/trust/index.js +39 -0
  283. package/dist/trust/phase1-verify.js +171 -0
  284. package/dist/trust/protocol-domain-validator.js +697 -0
  285. package/dist/trust/score-calculator.js +282 -0
  286. package/dist/trust/ssg-bridge.js +641 -0
  287. package/dist/trust/ssg-bridge.test.js +269 -0
  288. package/dist/trust/types.js +67 -0
  289. package/dist/trust/violation-trace.js +335 -0
  290. package/dist/trust-api.js +179 -0
  291. package/dist/trust-calibration.js +279 -0
  292. package/dist/unknown-protocol-discovery.js +339 -0
  293. package/dist/unknown-protocol-discovery.test.js +102 -0
  294. package/dist/unsupervised-physics.js +230 -0
  295. package/dist/unsupervised-physics.test.js +95 -0
  296. package/dist/utils.test.js +37 -0
  297. package/dist/validator.js +187 -10
  298. package/dist/verification-intelligence.js +475 -0
  299. package/dist/verify-api.js +432 -0
  300. package/dist/vi-impact-report.js +293 -0
  301. package/dist/wl-fingerprint.js +162 -0
  302. package/dist/wl-fingerprint.test.js +130 -0
  303. package/dist/zeroshot-strategy.js +139 -0
  304. package/docs/Progmune_/346/212/225/350/265/204/344/272/272/347/231/275/347/232/256/344/271/246_v2.0.html +576 -0
  305. package/docs/Progmune_/351/241/271/347/233/256/345/205/250/350/247/243.html +710 -0
  306. package/package.json +74 -7
  307. package/protocols.json +1956 -50
  308. package/.dockerignore +0 -14
  309. package/.mcp.json +0 -11
  310. package/.progmune_allowlist +0 -50
  311. package/.test_report/test_report.md +0 -87
  312. package/Dockerfile +0 -9
  313. package/FAQ.md +0 -167
  314. package/WHITEPAPER.md +0 -540
  315. package/demo-project/auth.ts +0 -55
  316. package/demo-project/tsconfig.json +0 -8
  317. package/dist/acl-breakdown.js +0 -13
  318. package/dist/all-sessions.js +0 -11
  319. package/dist/antibody-stats.js +0 -11
  320. package/dist/branch-tree-count.js +0 -14
  321. package/dist/common-fixpath.js +0 -12
  322. package/dist/constraint-types.js +0 -12
  323. package/dist/exec-metrics.js +0 -11
  324. package/dist/failure-report.js +0 -11
  325. package/dist/fast-path-hits.js +0 -13
  326. package/dist/fingerprint-list.js +0 -15
  327. package/dist/gen-history-log.js +0 -13
  328. package/dist/heatmap-data.js +0 -11
  329. package/dist/recent-session.js +0 -12
  330. package/dist/svl-distribution.js +0 -11
  331. package/dist/terminal-status.js +0 -11
  332. package/dist/token-savings.js +0 -11
  333. package/dist/total-repairs.js +0 -12
  334. package/dist/unresolved-count.js +0 -12
  335. package/dist/valid-fingerprints.js +0 -13
  336. package/dist/verify-ledgers.js +0 -11
  337. package/docs/whitepaper-style.css +0 -77
  338. package/docs/whitepaper-v2.1.md +0 -609
  339. package/docs/whitepaper-v2.2.md +0 -1064
  340. package/docs/whitepaper-v2.2.pdf +0 -0
  341. package/fly.toml +0 -31
  342. package/public/dashboard.html +0 -119
  343. package/server/hub.js +0 -116
  344. package/test/replay-golden/sess_1780063202050_mgeld.json +0 -9
  345. package/test/replay-golden/sess_1780064032560_gocld.json +0 -354
  346. package/test/replay-golden/sess_1780064413331_s2709.json +0 -606
  347. package/test/replay-golden/sess_1780064792710_y3avo.json +0 -614
  348. package/test/replay-golden.ts +0 -84
  349. package/test_benchmark.js +0 -165
  350. package/test_comprehensive.mjs +0 -638
  351. package/test_concurrency.js +0 -129
  352. package/test_ir_robustness.js +0 -85
  353. package/test_semantic_contracts.js +0 -269
  354. package/test_ssg_stress.js +0 -156
  355. package/test_svl3.js +0 -58
  356. package/tsconfig.json +0 -17
package/protocols.json CHANGED
@@ -5,7 +5,31 @@
5
5
  "namespaceInitialStates": {
6
6
  "_global": "UNAUTHENTICATED",
7
7
  "auth": "UNAUTHENTICATED",
8
- "dev_pipeline": "IR_STALE"
8
+ "dev_pipeline": "IR_STALE",
9
+ "stateless": "IDLE",
10
+ "transaction": "TX_IDLE",
11
+ "conditional": "COND_IDLE",
12
+ "loop": "LOOP_IDLE",
13
+ "cross": "UNAUTHENTICATED",
14
+ "payment": "ORDER_CREATED",
15
+ "file_upload": "UNAUTHENTICATED",
16
+ "api_gateway": "IDLE",
17
+ "notification": "IDLE",
18
+ "registration": "UNAUTHENTICATED",
19
+ "session_mgmt": "UNAUTHENTICATED",
20
+ "supplier": "IDLE",
21
+ "printlab_order": "ORDER_CREATED",
22
+ "printlab_print": "STL_UPLOADED",
23
+ "file": "IDLE",
24
+ "db": "DB_CONNECTED",
25
+ "resource": "IDLE",
26
+ "data_integrity": "IDLE",
27
+ "session_fixation": "UNAUTHENTICATED",
28
+ "privilege_escalation": "UNAUTHENTICATED",
29
+ "transaction_violation": "TX_IDLE",
30
+ "missing_validation": "IDLE",
31
+ "resource_leak": "IDLE",
32
+ "use_after_free": "IDLE"
9
33
  },
10
34
  "states": {
11
35
  "UNAUTHENTICATED": "初始状态:用户未认证",
@@ -17,120 +41,2002 @@
17
41
  "ACTION_VALIDATED": "动作已通过 SVL 校验",
18
42
  "SEQUENCE_VALIDATED": "动作序列 + 变量流向已通过校验",
19
43
  "CODE_EMITTED": "目标代码已生成",
20
- "SESSION_RECORDED": "执行会话已保存"
44
+ "SESSION_RECORDED": "执行会话已保存",
45
+ "IDLE": "空闲状态:无状态函数可随时调用",
46
+ "TX_IDLE": "事务空闲:无活动事务",
47
+ "TX_ACTIVE": "事务进行中:可执行事务内操作",
48
+ "SAVEPOINT_HELD": "保存点已创建:可回滚或释放",
49
+ "COND_IDLE": "条件判断空闲:等待评估",
50
+ "COND_EVALUATED": "条件已评估:等待分支选择",
51
+ "COND_ACCEPTED": "条件通过(TRUE 分支)",
52
+ "COND_REJECTED": "条件拒绝(FALSE 分支)",
53
+ "COND_RESOLVED": "条件已解决:分支执行完毕",
54
+ "LOOP_IDLE": "循环空闲:等待开始迭代",
55
+ "FETCHING": "正在获取下一批数据",
56
+ "BATCH_READY": "批次数据就绪",
57
+ "ITERATING": "正在迭代处理数据项",
58
+ "LOOP_DONE": "循环已退出",
59
+ "AUTH_FILE_GATE": "跨协议桥:认证通过,文件操作就绪",
60
+ "AUTH_DB_GATE": "跨协议桥:认证通过,数据库操作就绪",
61
+ "TLS_CONFIGURED": "Auto-generated state for Investment Roadmap",
62
+ "SERVER_STARTED": "Auto-generated state for Investment Roadmap",
63
+ "PASSWORD_RECEIVED": "已接收用户明文密码",
64
+ "PASSWORD_HASHED": "密码已哈希存储",
65
+ "AUTHENTICATED": "用户已通过认证",
66
+ "AUTHORIZED": "用户已通过授权——可以操作资源",
67
+ "REFERENCE_VALID": "Auto-generated state for Investment Roadmap",
68
+ "REFERENCE_CREATED": "Auto-generated state for Investment Roadmap",
69
+ "CONTENT_SANITIZED": "Auto-generated state for Investment Roadmap",
70
+ "TYPE_VALIDATED": "Auto-generated state for Investment Roadmap",
71
+ "ORDER_CREATED": "订单已创建",
72
+ "PAYMENT_INITIATED": "支付已发起",
73
+ "PAYMENT_CALLBACK_RECEIVED": "支付回调已接收",
74
+ "PAYMENT_CONFIRMED": "支付已确认",
75
+ "PAYMENT_FAILED": "支付失败",
76
+ "FILE_RECEIVED": "文件已接收",
77
+ "FILE_VALIDATED": "文件已验证",
78
+ "FILE_STORED": "文件已存储",
79
+ "FILE_REFERENCED": "文件已关联",
80
+ "RATE_CHECKED": "频率已检查",
81
+ "THROTTLED": "已被限流",
82
+ "NOTIFICATION_COMPOSED": "通知已生成",
83
+ "NOTIFICATION_SENT": "通知已发送",
84
+ "NOTIFICATION_CONFIRMED": "通知已确认",
85
+ "USER_REGISTERED": "用户已注册",
86
+ "VERIFICATION_CODE_SENT": "验证码已发送",
87
+ "VERIFICATION_CONFIRMED": "验证已确认",
88
+ "ACCOUNT_ACTIVATED": "账号已激活",
89
+ "SESSION_CREATED": "会话已创建",
90
+ "SESSION_REFRESHED": "会话已刷新",
91
+ "SESSION_EXPIRED": "会话已过期",
92
+ "SESSION_REVOKED": "会话已撤销",
93
+ "SUPPLIER_REGISTERED": "供应商已注册",
94
+ "SUPPLIER_VERIFIED": "供应商已验证",
95
+ "SUPPLIER_ENABLED": "供应商已启用",
96
+ "PRODUCT_ASSIGNED": "产品已分配",
97
+ "STL_UPLOADED": "STL 文件已上传",
98
+ "STL_SLICED": "STL 已切片",
99
+ "GCODE_GENERATED": "GCode 已生成",
100
+ "COST_ESTIMATED": "成本已估算",
101
+ "ORDER_QUEUED": "订单已排队",
102
+ "PRINT_STARTED": "打印已开始",
103
+ "PRINT_COMPLETED": "打印已完成",
104
+ "ORDER_SHIPPED": "订单已发货",
105
+ "ORDER_DELIVERED": "订单已交付",
106
+ "FILE_OPEN": "文件已打开——获得文件句柄",
107
+ "DB_CONNECTED": "数据库已连接——获得连接句柄",
108
+ "CONTENT_VALID": "内容已通过全部验证"
21
109
  },
22
110
  "rules": {
23
111
  "verify_password": {
24
112
  "namespace": "auth",
25
- "pre_states": ["UNAUTHENTICATED"],
26
- "post_states": ["PASSWORD_VERIFIED"],
27
- "description": "验证用户密码 → 进入已认证状态"
113
+ "pre_states": [
114
+ "UNAUTHENTICATED"
115
+ ],
116
+ "post_states": [
117
+ "PASSWORD_VERIFIED"
118
+ ],
119
+ "description": "验证用户密码 → 进入已认证状态",
120
+ "aliases": [
121
+ "passport.authenticate",
122
+ "auth.verifyPassword",
123
+ "auth.validateCredentials",
124
+ "auth.login",
125
+ "verifyPassword",
126
+ "verifyCredentials",
127
+ "loginMutation.mutateAsync",
128
+ "signIn",
129
+ "logIn"
130
+ ]
28
131
  },
29
132
  "generate_jwt": {
30
133
  "namespace": "auth",
31
- "pre_states": ["PASSWORD_VERIFIED"],
32
- "post_states": ["TOKEN_ISSUED"],
33
- "invalidate": ["PASSWORD_VERIFIED"],
34
- "description": "签发 JWT 令牌 → 必须在密码验证之后,签发后密码验证状态失效"
134
+ "pre_states": [],
135
+ "post_states": [
136
+ "TOKEN_ISSUED"
137
+ ],
138
+ "description": "签发 JWT 令牌(密码验证后 / OAuth 认证后 / Token 刷新——入口点)",
139
+ "aliases": [
140
+ "jsonwebtoken.sign",
141
+ "jwt.sign",
142
+ "jose.sign",
143
+ "SignJWT",
144
+ "auth.generateToken",
145
+ "auth.issueToken"
146
+ ]
35
147
  },
36
148
  "create_session": {
37
149
  "namespace": "auth",
38
- "pre_states": ["TOKEN_ISSUED"],
39
- "post_states": ["SESSION_ACTIVE"],
40
- "invalidate": ["TOKEN_ISSUED"],
41
- "description": "创建会话 → 必须在令牌签发之后,创建后令牌状态失效"
150
+ "pre_states": [
151
+ "TOKEN_ISSUED"
152
+ ],
153
+ "post_states": [
154
+ "SESSION_ACTIVE"
155
+ ],
156
+ "invalidate": [
157
+ "TOKEN_ISSUED"
158
+ ],
159
+ "description": "创建会话 → 必须在令牌签发之后,创建后令牌状态失效",
160
+ "aliases": [
161
+ "express.session.create",
162
+ "express-session",
163
+ "cookie-session",
164
+ "auth.createSession"
165
+ ]
42
166
  },
43
167
  "revoke_token": {
44
168
  "namespace": "auth",
45
- "pre_states": ["TOKEN_ISSUED"],
46
- "post_states": ["UNAUTHENTICATED"],
47
- "invalidate": ["TOKEN_ISSUED"],
48
- "description": "撤销令牌 → 回到未认证状态"
169
+ "pre_states": [
170
+ "TOKEN_ISSUED"
171
+ ],
172
+ "post_states": [
173
+ "UNAUTHENTICATED"
174
+ ],
175
+ "invalidate": [
176
+ "TOKEN_ISSUED"
177
+ ],
178
+ "description": "撤销令牌 → 回到未认证状态",
179
+ "aliases": [
180
+ "jsonwebtoken.revoke",
181
+ "jwt.revoke",
182
+ "auth.revokeToken",
183
+ "auth.blacklistToken"
184
+ ]
49
185
  },
50
186
  "logout": {
51
187
  "namespace": "auth",
52
- "pre_states": ["SESSION_ACTIVE"],
53
- "post_states": ["UNAUTHENTICATED"],
54
- "invalidate": ["SESSION_ACTIVE"],
55
- "description": "登出 → 清除会话,回到未认证状态"
188
+ "pre_states": [
189
+ "SESSION_ACTIVE"
190
+ ],
191
+ "post_states": [
192
+ "UNAUTHENTICATED"
193
+ ],
194
+ "invalidate": [
195
+ "SESSION_ACTIVE"
196
+ ],
197
+ "description": "登出 → 清除会话,回到未认证状态",
198
+ "aliases": [
199
+ "passport.logout",
200
+ "req.logout",
201
+ "auth.logout",
202
+ "auth.signOut"
203
+ ]
56
204
  },
57
205
  "open_file": {
58
206
  "namespace": "file",
59
207
  "pre_states": [],
60
- "post_states": ["FILE_OPEN"],
61
- "description": "打开文件 → 获得文件句柄"
208
+ "post_states": [
209
+ "FILE_OPEN"
210
+ ],
211
+ "description": "打开文件 → 获得文件句柄",
212
+ "aliases": [
213
+ "fs.openSync",
214
+ "fs.open",
215
+ "fs.createReadStream",
216
+ "fs.createWriteStream",
217
+ "fs.promises.open"
218
+ ]
62
219
  },
63
220
  "read_file": {
64
221
  "namespace": "file",
65
- "pre_states": ["FILE_OPEN"],
222
+ "pre_states": [
223
+ "FILE_OPEN"
224
+ ],
66
225
  "post_states": [],
67
- "description": "读取文件内容 → 需要文件已打开"
226
+ "description": "读取文件内容 → 需要文件已打开",
227
+ "aliases": [
228
+ "stream.read",
229
+ "fs.createReadStream"
230
+ ]
68
231
  },
69
232
  "write_file": {
70
233
  "namespace": "file",
71
- "pre_states": ["FILE_OPEN"],
234
+ "pre_states": [
235
+ "FILE_OPEN"
236
+ ],
72
237
  "post_states": [],
73
- "description": "写入文件内容 → 需要文件已打开"
238
+ "description": "写入文件内容 → 需要文件已打开",
239
+ "aliases": [
240
+ "stream.write",
241
+ "fs.createWriteStream"
242
+ ]
74
243
  },
75
244
  "close_file": {
76
245
  "namespace": "file",
77
- "pre_states": ["FILE_OPEN"],
246
+ "pre_states": [
247
+ "FILE_OPEN"
248
+ ],
78
249
  "post_states": [],
79
- "invalidate": ["FILE_OPEN"],
80
- "description": "关闭文件句柄 → 释放文件资源"
250
+ "invalidate": [
251
+ "FILE_OPEN"
252
+ ],
253
+ "description": "关闭文件句柄 → 释放文件资源",
254
+ "aliases": [
255
+ "fs.closeSync",
256
+ "fs.close",
257
+ "fs.promises.close",
258
+ "stream.end",
259
+ "stream.destroy"
260
+ ]
81
261
  },
82
262
  "connect_db": {
83
263
  "namespace": "db",
84
264
  "pre_states": [],
85
- "post_states": ["DB_CONNECTED"],
86
- "description": "建立数据库连接"
265
+ "post_states": [
266
+ "DB_CONNECTED"
267
+ ],
268
+ "description": "建立数据库连接",
269
+ "aliases": [
270
+ "pg.connect",
271
+ "pg.Client",
272
+ "pg.Pool",
273
+ "mysql.createConnection",
274
+ "mysql.createPool",
275
+ "prisma.$connect",
276
+ "typeorm.createConnection",
277
+ "mongoose.connect",
278
+ "sequelize.authenticate",
279
+ "knex.initialize",
280
+ "db.connect"
281
+ ]
87
282
  },
88
283
  "query_db": {
89
284
  "namespace": "db",
90
- "pre_states": ["DB_CONNECTED"],
285
+ "pre_states": [
286
+ "DB_CONNECTED"
287
+ ],
91
288
  "post_states": [],
92
- "description": "执行数据库查询 → 需要已连接"
289
+ "description": "执行数据库查询 → 需要已连接",
290
+ "aliases": [
291
+ "pg.query",
292
+ "pg.Client.query",
293
+ "mysql.query",
294
+ "mysql.execute",
295
+ "db.select",
296
+ "db.query",
297
+ "db.execute",
298
+ "tx.select",
299
+ "tx.query",
300
+ "prisma.$queryRaw",
301
+ "prisma.model.findMany",
302
+ "prisma.model.findUnique",
303
+ "prisma.model.create",
304
+ "prisma.model.update",
305
+ "prisma.model.delete",
306
+ "typeorm.find",
307
+ "typeorm.save",
308
+ "typeorm.remove",
309
+ "mongoose.find",
310
+ "mongoose.create",
311
+ "mongoose.updateOne",
312
+ "sequelize.query",
313
+ "sequelize.findAll",
314
+ "knex.select",
315
+ "knex.insert",
316
+ "knex.update",
317
+ "knex.delete",
318
+ "db.query",
319
+ "db.execute",
320
+ "db.insert",
321
+ "db.update",
322
+ "db.delete",
323
+ "db.select",
324
+ "db.find",
325
+ "connection.execute",
326
+ "connection.query",
327
+ "tx.select",
328
+ "pool.query",
329
+ "pool.execute",
330
+ "db.*",
331
+ "connection.*",
332
+ "pool.*",
333
+ "prisma.*",
334
+ "mongoose.*",
335
+ "sequelize.*",
336
+ "knex.*",
337
+ "typeorm.*",
338
+ "mysql.*",
339
+ "pg.*",
340
+ "drizzle.*",
341
+ "orm.*"
342
+ ]
93
343
  },
94
344
  "disconnect_db": {
95
345
  "namespace": "db",
96
- "pre_states": ["DB_CONNECTED"],
346
+ "pre_states": [
347
+ "DB_CONNECTED"
348
+ ],
97
349
  "post_states": [],
98
- "invalidate": ["DB_CONNECTED"],
99
- "description": "断开数据库连接"
350
+ "invalidate": [
351
+ "DB_CONNECTED"
352
+ ],
353
+ "description": "断开数据库连接",
354
+ "aliases": [
355
+ "pg.end",
356
+ "pg.Pool.end",
357
+ "mysql.end",
358
+ "mysql.close",
359
+ "prisma.$disconnect",
360
+ "typeorm.close",
361
+ "mongoose.disconnect",
362
+ "sequelize.close",
363
+ "knex.destroy",
364
+ "db.close",
365
+ "db.disconnect",
366
+ "db.end",
367
+ "connection.end",
368
+ "connection.close",
369
+ "pool.end",
370
+ "pool.close"
371
+ ]
100
372
  },
101
373
  "extractIR": {
102
374
  "namespace": "dev_pipeline",
103
375
  "pre_states": [],
104
- "post_states": ["IR_EXTRACTED"],
105
- "invalidate": ["IR_STALE"],
376
+ "post_states": [
377
+ "IR_EXTRACTED"
378
+ ],
379
+ "invalidate": [
380
+ "IR_STALE"
381
+ ],
106
382
  "description": "从源码提取 IR → 产出 IR_EXTRACTED 状态"
107
383
  },
108
384
  "validateAction": {
109
385
  "namespace": "dev_pipeline",
110
- "pre_states": ["IR_EXTRACTED"],
111
- "post_states": ["ACTION_VALIDATED"],
386
+ "pre_states": [
387
+ "IR_EXTRACTED"
388
+ ],
389
+ "post_states": [
390
+ "ACTION_VALIDATED"
391
+ ],
112
392
  "description": "校验单个动作合法性 → 需要 IR 已提取"
113
393
  },
114
394
  "validateActionSequence": {
115
395
  "namespace": "dev_pipeline",
116
- "pre_states": ["ACTION_VALIDATED"],
117
- "post_states": ["SEQUENCE_VALIDATED"],
118
- "invalidate": ["ACTION_VALIDATED"],
396
+ "pre_states": [
397
+ "ACTION_VALIDATED"
398
+ ],
399
+ "post_states": [
400
+ "SEQUENCE_VALIDATED"
401
+ ],
402
+ "invalidate": [
403
+ "ACTION_VALIDATED"
404
+ ],
119
405
  "description": "批量校验动作序列 → 需要动作已验证,校验后消耗"
120
406
  },
121
407
  "emitCode": {
122
408
  "namespace": "dev_pipeline",
123
- "pre_states": ["SEQUENCE_VALIDATED"],
124
- "post_states": ["CODE_EMITTED"],
125
- "invalidate": ["SEQUENCE_VALIDATED"],
409
+ "pre_states": [
410
+ "SEQUENCE_VALIDATED"
411
+ ],
412
+ "post_states": [
413
+ "CODE_EMITTED"
414
+ ],
415
+ "invalidate": [
416
+ "SEQUENCE_VALIDATED"
417
+ ],
126
418
  "description": "编译动作序列为目标代码 → 需要序列已验证"
127
419
  },
128
420
  "recordSession": {
129
421
  "namespace": "dev_pipeline",
130
- "pre_states": ["CODE_EMITTED"],
131
- "post_states": ["SESSION_RECORDED"],
132
- "invalidate": ["CODE_EMITTED"],
422
+ "pre_states": [
423
+ "CODE_EMITTED"
424
+ ],
425
+ "post_states": [
426
+ "SESSION_RECORDED"
427
+ ],
428
+ "invalidate": [
429
+ "CODE_EMITTED"
430
+ ],
133
431
  "description": "保存执行会话到语料库 → 需要代码已生成"
432
+ },
433
+ "compute_hash": {
434
+ "namespace": "stateless",
435
+ "pre_states": [],
436
+ "post_states": [],
437
+ "description": "计算输入数据的哈希摘要 —— 纯函数/幂等"
438
+ },
439
+ "validate_schema": {
440
+ "namespace": "stateless",
441
+ "pre_states": [],
442
+ "post_states": [],
443
+ "description": "对数据做 Schema 校验 —— 无副作用"
444
+ },
445
+ "sanitize_input": {
446
+ "namespace": "stateless",
447
+ "pre_states": [],
448
+ "post_states": [],
449
+ "description": "清理用户输入,去除危险字符"
450
+ },
451
+ "verify_checksum": {
452
+ "namespace": "stateless",
453
+ "pre_states": [],
454
+ "post_states": [],
455
+ "description": "通过校验和验证数据完整性"
456
+ },
457
+ "encode_payload": {
458
+ "namespace": "stateless",
459
+ "pre_states": [],
460
+ "post_states": [],
461
+ "description": "将数据编码为 base64 / wire format"
462
+ },
463
+ "decode_payload": {
464
+ "namespace": "stateless",
465
+ "pre_states": [],
466
+ "post_states": [],
467
+ "description": "从 wire format 解码回原始数据"
468
+ },
469
+ "compress_buffer": {
470
+ "namespace": "stateless",
471
+ "pre_states": [],
472
+ "post_states": [],
473
+ "description": "压缩数据缓冲区"
474
+ },
475
+ "decompress_buffer": {
476
+ "namespace": "stateless",
477
+ "pre_states": [],
478
+ "post_states": [],
479
+ "description": "解压数据缓冲区"
480
+ },
481
+ "begin_tx": {
482
+ "namespace": "transaction",
483
+ "pre_states": [
484
+ "TX_IDLE"
485
+ ],
486
+ "post_states": [
487
+ "TX_ACTIVE"
488
+ ],
489
+ "description": "开启新事务 → 必须在空闲状态下",
490
+ "aliases": [
491
+ "db.beginTransaction",
492
+ "db.transaction",
493
+ "prisma.$transaction",
494
+ "typeorm.transaction",
495
+ "sequelize.transaction",
496
+ "knex.transaction",
497
+ "mongoose.startSession",
498
+ "pg.Client.query"
499
+ ]
500
+ },
501
+ "commit_tx": {
502
+ "namespace": "transaction",
503
+ "pre_states": [
504
+ "TX_ACTIVE"
505
+ ],
506
+ "post_states": [
507
+ "TX_IDLE"
508
+ ],
509
+ "invalidate": [
510
+ "TX_ACTIVE"
511
+ ],
512
+ "description": "提交活跃事务中的所有变更",
513
+ "aliases": [
514
+ "db.commit",
515
+ "transaction.commit",
516
+ "prisma.$transaction",
517
+ "typeorm.commitTransaction",
518
+ "sequelize.commit",
519
+ "knex.commit",
520
+ "mongoose.commitTransaction"
521
+ ]
522
+ },
523
+ "rollback_tx": {
524
+ "namespace": "transaction",
525
+ "pre_states": [
526
+ "TX_ACTIVE"
527
+ ],
528
+ "post_states": [
529
+ "TX_IDLE"
530
+ ],
531
+ "invalidate": [
532
+ "TX_ACTIVE"
533
+ ],
534
+ "description": "回滚活跃事务中的所有变更",
535
+ "aliases": [
536
+ "db.rollback",
537
+ "transaction.rollback",
538
+ "prisma.$transaction",
539
+ "typeorm.rollbackTransaction",
540
+ "sequelize.rollback",
541
+ "knex.rollback",
542
+ "mongoose.abortTransaction"
543
+ ]
544
+ },
545
+ "insert_record": {
546
+ "namespace": "transaction",
547
+ "pre_states": [],
548
+ "post_states": [],
549
+ "description": "插入记录(事务内外均可——单条 SQL 本身原子)",
550
+ "aliases": [
551
+ "tx.insert",
552
+ "tx.create",
553
+ "transaction.insert",
554
+ "transaction.create"
555
+ ]
556
+ },
557
+ "update_record": {
558
+ "namespace": "transaction",
559
+ "pre_states": [],
560
+ "post_states": [],
561
+ "description": "更新记录(事务内外均可——单条 SQL 本身原子)",
562
+ "aliases": [
563
+ "tx.update",
564
+ "transaction.update"
565
+ ]
566
+ },
567
+ "delete_record": {
568
+ "namespace": "transaction",
569
+ "pre_states": [],
570
+ "post_states": [],
571
+ "description": "删除记录(事务内外均可——单条 SQL 本身原子)",
572
+ "aliases": [
573
+ "tx.delete",
574
+ "tx.remove",
575
+ "transaction.delete",
576
+ "transaction.remove"
577
+ ]
578
+ },
579
+ "savepoint_create": {
580
+ "namespace": "transaction",
581
+ "pre_states": [
582
+ "TX_ACTIVE"
583
+ ],
584
+ "post_states": [
585
+ "SAVEPOINT_HELD"
586
+ ],
587
+ "description": "在活跃事务中创建具名保存点"
588
+ },
589
+ "savepoint_release": {
590
+ "namespace": "transaction",
591
+ "pre_states": [
592
+ "SAVEPOINT_HELD"
593
+ ],
594
+ "post_states": [
595
+ "TX_ACTIVE"
596
+ ],
597
+ "invalidate": [
598
+ "SAVEPOINT_HELD"
599
+ ],
600
+ "description": "释放保存点,保留后续变更"
601
+ },
602
+ "rollback_to_savepoint": {
603
+ "namespace": "transaction",
604
+ "pre_states": [
605
+ "SAVEPOINT_HELD"
606
+ ],
607
+ "post_states": [
608
+ "TX_ACTIVE"
609
+ ],
610
+ "invalidate": [
611
+ "SAVEPOINT_HELD"
612
+ ],
613
+ "description": "回滚到保存点,撤销保存点之后的变更"
614
+ },
615
+ "prep_two_phase": {
616
+ "namespace": "transaction",
617
+ "pre_states": [
618
+ "TX_ACTIVE"
619
+ ],
620
+ "post_states": [
621
+ "TX_IDLE"
622
+ ],
623
+ "invalidate": [
624
+ "TX_ACTIVE"
625
+ ],
626
+ "description": "准备两阶段提交(表决阶段)"
627
+ },
628
+ "evaluate_access": {
629
+ "namespace": "conditional",
630
+ "pre_states": [
631
+ "COND_IDLE"
632
+ ],
633
+ "post_states": [
634
+ "COND_EVALUATED"
635
+ ],
636
+ "description": "根据权限策略评估访问条件"
637
+ },
638
+ "grant_access": {
639
+ "namespace": "conditional",
640
+ "pre_states": [
641
+ "COND_EVALUATED"
642
+ ],
643
+ "post_states": [
644
+ "COND_ACCEPTED"
645
+ ],
646
+ "invalidate": [
647
+ "COND_EVALUATED"
648
+ ],
649
+ "description": "TRUE 分支:授予访问权限"
650
+ },
651
+ "deny_access": {
652
+ "namespace": "conditional",
653
+ "pre_states": [
654
+ "COND_EVALUATED"
655
+ ],
656
+ "post_states": [
657
+ "COND_REJECTED"
658
+ ],
659
+ "invalidate": [
660
+ "COND_EVALUATED"
661
+ ],
662
+ "description": "FALSE 分支:拒绝访问"
663
+ },
664
+ "log_granted": {
665
+ "namespace": "conditional",
666
+ "pre_states": [
667
+ "COND_ACCEPTED"
668
+ ],
669
+ "post_states": [
670
+ "COND_RESOLVED"
671
+ ],
672
+ "invalidate": [
673
+ "COND_ACCEPTED",
674
+ "COND_RESOLVED"
675
+ ],
676
+ "description": "记录授权访问并结束条件判断"
677
+ },
678
+ "log_denied": {
679
+ "namespace": "conditional",
680
+ "pre_states": [
681
+ "COND_REJECTED"
682
+ ],
683
+ "post_states": [
684
+ "COND_RESOLVED"
685
+ ],
686
+ "invalidate": [
687
+ "COND_REJECTED",
688
+ "COND_RESOLVED"
689
+ ],
690
+ "description": "记录拒绝访问并结束条件判断"
691
+ },
692
+ "bypass_condition": {
693
+ "namespace": "conditional",
694
+ "pre_states": [
695
+ "COND_EVALUATED"
696
+ ],
697
+ "post_states": [
698
+ "COND_RESOLVED"
699
+ ],
700
+ "invalidate": [
701
+ "COND_EVALUATED",
702
+ "COND_RESOLVED"
703
+ ],
704
+ "description": "短路:直接绕过条件检查"
705
+ },
706
+ "retry_evaluation": {
707
+ "namespace": "conditional",
708
+ "pre_states": [
709
+ "COND_EVALUATED"
710
+ ],
711
+ "post_states": [
712
+ "COND_IDLE"
713
+ ],
714
+ "invalidate": [
715
+ "COND_EVALUATED"
716
+ ],
717
+ "description": "重试:回到空闲状态重新评估"
718
+ },
719
+ "escalate_access": {
720
+ "namespace": "conditional",
721
+ "pre_states": [
722
+ "COND_REJECTED"
723
+ ],
724
+ "post_states": [
725
+ "COND_ACCEPTED"
726
+ ],
727
+ "invalidate": [
728
+ "COND_REJECTED"
729
+ ],
730
+ "description": "升级:将被拒绝的访问升级为通过"
731
+ },
732
+ "audit_condition": {
733
+ "namespace": "conditional",
734
+ "pre_states": [
735
+ "COND_ACCEPTED",
736
+ "COND_REJECTED"
737
+ ],
738
+ "post_states": [
739
+ "COND_RESOLVED"
740
+ ],
741
+ "invalidate": [
742
+ "COND_ACCEPTED",
743
+ "COND_REJECTED",
744
+ "COND_RESOLVED"
745
+ ],
746
+ "description": "审计:无论分支结果如何,记录条件判断结果"
747
+ },
748
+ "init_fetch_loop": {
749
+ "namespace": "loop",
750
+ "pre_states": [
751
+ "LOOP_IDLE"
752
+ ],
753
+ "post_states": [
754
+ "FETCHING"
755
+ ],
756
+ "description": "初始化获取循环,开始获取数据"
757
+ },
758
+ "fetch_batch": {
759
+ "namespace": "loop",
760
+ "pre_states": [
761
+ "FETCHING"
762
+ ],
763
+ "post_states": [
764
+ "BATCH_READY"
765
+ ],
766
+ "invalidate": [
767
+ "FETCHING"
768
+ ],
769
+ "description": "获取下一批数据"
770
+ },
771
+ "has_more_data": {
772
+ "namespace": "loop",
773
+ "pre_states": [
774
+ "BATCH_READY"
775
+ ],
776
+ "post_states": [
777
+ "ITERATING"
778
+ ],
779
+ "invalidate": [
780
+ "BATCH_READY"
781
+ ],
782
+ "description": "检查还有更多数据 → 进入迭代体"
783
+ },
784
+ "process_item": {
785
+ "namespace": "loop",
786
+ "pre_states": [
787
+ "ITERATING"
788
+ ],
789
+ "post_states": [
790
+ "ITERATING"
791
+ ],
792
+ "description": "处理单个数据项(在迭代体内自循环)"
793
+ },
794
+ "next_iteration": {
795
+ "namespace": "loop",
796
+ "pre_states": [
797
+ "ITERATING"
798
+ ],
799
+ "post_states": [
800
+ "FETCHING"
801
+ ],
802
+ "invalidate": [
803
+ "ITERATING"
804
+ ],
805
+ "description": "结束当前迭代 → 返回获取下一批"
806
+ },
807
+ "exit_loop": {
808
+ "namespace": "loop",
809
+ "pre_states": [
810
+ "ITERATING"
811
+ ],
812
+ "post_states": [
813
+ "LOOP_DONE"
814
+ ],
815
+ "invalidate": [
816
+ "ITERATING",
817
+ "LOOP_DONE"
818
+ ],
819
+ "description": "正常退出循环(所有数据已处理完毕)"
820
+ },
821
+ "retry_batch": {
822
+ "namespace": "loop",
823
+ "pre_states": [
824
+ "BATCH_READY",
825
+ "ITERATING"
826
+ ],
827
+ "post_states": [
828
+ "FETCHING"
829
+ ],
830
+ "description": "获取失败 → 重试当前批次"
831
+ },
832
+ "timeout_exit": {
833
+ "namespace": "loop",
834
+ "pre_states": [
835
+ "FETCHING",
836
+ "ITERATING"
837
+ ],
838
+ "post_states": [
839
+ "LOOP_DONE"
840
+ ],
841
+ "invalidate": [
842
+ "FETCHING",
843
+ "ITERATING",
844
+ "LOOP_DONE"
845
+ ],
846
+ "description": "超时紧急退出循环"
847
+ },
848
+ "poll_status": {
849
+ "namespace": "loop",
850
+ "pre_states": [
851
+ "ITERATING"
852
+ ],
853
+ "post_states": [
854
+ "ITERATING"
855
+ ],
856
+ "description": "轮询状态更新(在迭代体内自循环)"
857
+ },
858
+ "auth_file_open": {
859
+ "namespace": "cross",
860
+ "pre_states": [
861
+ "UNAUTHENTICATED"
862
+ ],
863
+ "post_states": [
864
+ "AUTH_FILE_GATE"
865
+ ],
866
+ "description": "跨协议桥:认证 → 打开文件访问门"
867
+ },
868
+ "auth_file_read": {
869
+ "namespace": "cross",
870
+ "pre_states": [
871
+ "AUTH_FILE_GATE"
872
+ ],
873
+ "post_states": [
874
+ "AUTH_FILE_GATE"
875
+ ],
876
+ "description": "跨协议:通过认证门读取文件"
877
+ },
878
+ "auth_file_close": {
879
+ "namespace": "cross",
880
+ "pre_states": [
881
+ "AUTH_FILE_GATE"
882
+ ],
883
+ "post_states": [
884
+ "UNAUTHENTICATED"
885
+ ],
886
+ "invalidate": [
887
+ "AUTH_FILE_GATE"
888
+ ],
889
+ "description": "跨协议:关闭经认证门的文件会话"
890
+ },
891
+ "auth_db_connect": {
892
+ "namespace": "cross",
893
+ "pre_states": [
894
+ "UNAUTHENTICATED"
895
+ ],
896
+ "post_states": [
897
+ "AUTH_DB_GATE"
898
+ ],
899
+ "description": "跨协议桥:认证 → 打开数据库连接"
900
+ },
901
+ "auth_db_query": {
902
+ "namespace": "cross",
903
+ "pre_states": [
904
+ "AUTH_DB_GATE"
905
+ ],
906
+ "post_states": [
907
+ "AUTH_DB_GATE"
908
+ ],
909
+ "description": "跨协议:通过认证门查询数据库"
910
+ },
911
+ "auth_db_disconnect": {
912
+ "namespace": "cross",
913
+ "pre_states": [
914
+ "AUTH_DB_GATE"
915
+ ],
916
+ "post_states": [
917
+ "UNAUTHENTICATED"
918
+ ],
919
+ "invalidate": [
920
+ "AUTH_DB_GATE"
921
+ ],
922
+ "description": "跨协议:关闭经认证门的数据库连接"
923
+ },
924
+ "http_create_server": {
925
+ "namespace": "tls",
926
+ "pre_states": [],
927
+ "post_states": [
928
+ "SERVER_STARTED"
929
+ ],
930
+ "description": "HTTP server must use HTTPS with TLS configured(TLS 配置在其他函数/反向代理完成——不要求在调用序列内)",
931
+ "aliases": [
932
+ "express.listen",
933
+ "express.application.listen",
934
+ "app.listen",
935
+ "server.listen",
936
+ "https.createServer",
937
+ "http.createServer",
938
+ "fastify.listen",
939
+ "koa.listen",
940
+ "next.start",
941
+ "nuxt.listen"
942
+ ]
943
+ },
944
+ "load_tls_config": {
945
+ "namespace": "tls",
946
+ "pre_states": [],
947
+ "post_states": [
948
+ "TLS_CONFIGURED"
949
+ ],
950
+ "description": "Load TLS certificate and key before starting server",
951
+ "aliases": [
952
+ "https.createServer",
953
+ "tls.createServer",
954
+ "express.application.use",
955
+ "helmet",
956
+ "cors"
957
+ ]
958
+ },
959
+ "hash_password": {
960
+ "namespace": "registration",
961
+ "pre_states": [],
962
+ "post_states": [
963
+ "PASSWORD_HASHED"
964
+ ],
965
+ "description": "Registration: hash password (entry point — password receipt is implicit in request body)",
966
+ "aliases": [
967
+ "bcrypt.hash",
968
+ "bcrypt.hashSync",
969
+ "bcryptjs.hash",
970
+ "bcryptjs.hashSync",
971
+ "argon2.hash",
972
+ "scrypt.hash",
973
+ "crypto.pbkdf2",
974
+ "auth.hashPassword"
975
+ ]
976
+ },
977
+ "verify_hash": {
978
+ "namespace": "auth",
979
+ "pre_states": [],
980
+ "post_states": [
981
+ "PASSWORD_VERIFIED"
982
+ ],
983
+ "description": "Login: verify password against stored hash (entry point — hash was stored during registration)",
984
+ "aliases": [
985
+ "bcrypt.compare",
986
+ "bcrypt.compareSync",
987
+ "bcryptjs.compare",
988
+ "bcryptjs.compareSync",
989
+ "argon2.verify",
990
+ "scrypt.verify",
991
+ "crypto.timingSafeEqual",
992
+ "auth.verifyPassword"
993
+ ]
994
+ },
995
+ "verify_token": {
996
+ "namespace": "auth",
997
+ "pre_states": [],
998
+ "post_states": [
999
+ "AUTHENTICATED"
1000
+ ],
1001
+ "description": "Verify auth token(冷启动时 token 已存在 / OAuth 流程)",
1002
+ "aliases": [
1003
+ "jsonwebtoken.verify",
1004
+ "jwt.verify",
1005
+ "jose.verify",
1006
+ "jwtVerify",
1007
+ "jose.jwtVerify",
1008
+ "passport.authenticate",
1009
+ "auth.verifyToken",
1010
+ "auth.middleware"
1011
+ ]
1012
+ },
1013
+ "check_owner": {
1014
+ "namespace": "auth",
1015
+ "pre_states": [
1016
+ "AUTHENTICATED"
1017
+ ],
1018
+ "post_states": [
1019
+ "AUTHORIZED"
1020
+ ],
1021
+ "description": "Check resource ownership before mutating operations",
1022
+ "aliases": [
1023
+ "auth.checkOwner",
1024
+ "auth.authorize",
1025
+ "auth.checkAccess",
1026
+ "auth.checkPermission",
1027
+ "auth.requireRole"
1028
+ ]
1029
+ },
1030
+ "check_exists": {
1031
+ "namespace": "data_integrity",
1032
+ "pre_states": [],
1033
+ "post_states": [
1034
+ "REFERENCE_VALID"
1035
+ ],
1036
+ "description": "Verify referenced resource exists before creating a reference to it"
1037
+ },
1038
+ "create_reference": {
1039
+ "namespace": "data_integrity",
1040
+ "pre_states": [
1041
+ "REFERENCE_VALID"
1042
+ ],
1043
+ "post_states": [
1044
+ "REFERENCE_CREATED"
1045
+ ],
1046
+ "description": "Create reference to existing resource"
1047
+ },
1048
+ "sanitize": {
1049
+ "namespace": "resource",
1050
+ "pre_states": [],
1051
+ "post_states": [
1052
+ "CONTENT_SANITIZED"
1053
+ ],
1054
+ "description": "Sanitize input before processing"
1055
+ },
1056
+ "validate_type": {
1057
+ "namespace": "resource",
1058
+ "pre_states": [
1059
+ "CONTENT_SANITIZED"
1060
+ ],
1061
+ "post_states": [
1062
+ "TYPE_VALIDATED"
1063
+ ],
1064
+ "description": "Validate input type matches expected schema"
1065
+ },
1066
+ "validate_range": {
1067
+ "namespace": "resource",
1068
+ "pre_states": [
1069
+ "TYPE_VALIDATED"
1070
+ ],
1071
+ "post_states": [
1072
+ "CONTENT_VALID"
1073
+ ],
1074
+ "description": "Validate input within acceptable range/limits"
1075
+ },
1076
+ "initiate_payment": {
1077
+ "namespace": "payment",
1078
+ "pre_states": [
1079
+ "ORDER_CREATED"
1080
+ ],
1081
+ "post_states": [
1082
+ "PAYMENT_INITIATED"
1083
+ ],
1084
+ "invalidate": [
1085
+ "ORDER_CREATED"
1086
+ ],
1087
+ "description": "发起支付 → 需要已创建的订单"
1088
+ },
1089
+ "receive_payment_callback": {
1090
+ "namespace": "payment",
1091
+ "pre_states": [
1092
+ "PAYMENT_INITIATED"
1093
+ ],
1094
+ "post_states": [
1095
+ "PAYMENT_CALLBACK_RECEIVED"
1096
+ ],
1097
+ "invalidate": [
1098
+ "PAYMENT_INITIATED"
1099
+ ],
1100
+ "description": "接收支付回调 → 需要已发起的支付"
1101
+ },
1102
+ "confirm_payment": {
1103
+ "namespace": "payment",
1104
+ "pre_states": [
1105
+ "PAYMENT_CALLBACK_RECEIVED"
1106
+ ],
1107
+ "post_states": [
1108
+ "PAYMENT_CONFIRMED"
1109
+ ],
1110
+ "invalidate": [
1111
+ "PAYMENT_CALLBACK_RECEIVED"
1112
+ ],
1113
+ "description": "确认支付 → 需要已验证的回调签名"
1114
+ },
1115
+ "fail_payment": {
1116
+ "namespace": "payment",
1117
+ "pre_states": [
1118
+ "PAYMENT_INITIATED",
1119
+ "PAYMENT_CALLBACK_RECEIVED"
1120
+ ],
1121
+ "post_states": [
1122
+ "PAYMENT_FAILED"
1123
+ ],
1124
+ "invalidate": [
1125
+ "PAYMENT_INITIATED",
1126
+ "PAYMENT_CALLBACK_RECEIVED"
1127
+ ],
1128
+ "description": "支付失败 → 超时、签名无效或用户取消"
1129
+ },
1130
+ "receive_upload": {
1131
+ "namespace": "file_upload",
1132
+ "pre_states": [],
1133
+ "post_states": [
1134
+ "FILE_RECEIVED"
1135
+ ],
1136
+ "description": "接收文件上传 → 用户需已认证(认证由 tRPC protectedProcedure 中间件保障)",
1137
+ "aliases": [
1138
+ "multer.single",
1139
+ "multer.array",
1140
+ "multer.fields",
1141
+ "multer.any",
1142
+ "upload.single",
1143
+ "upload.array",
1144
+ "busboy",
1145
+ "formidable"
1146
+ ]
1147
+ },
1148
+ "validate_file": {
1149
+ "namespace": "file_upload",
1150
+ "pre_states": [
1151
+ "FILE_RECEIVED"
1152
+ ],
1153
+ "post_states": [
1154
+ "FILE_VALIDATED"
1155
+ ],
1156
+ "invalidate": [
1157
+ "FILE_RECEIVED"
1158
+ ],
1159
+ "description": "验证文件类型和大小 → 需要已接收的文件"
1160
+ },
1161
+ "store_file": {
1162
+ "namespace": "file_upload",
1163
+ "pre_states": [
1164
+ "FILE_VALIDATED"
1165
+ ],
1166
+ "post_states": [
1167
+ "FILE_STORED"
1168
+ ],
1169
+ "invalidate": [
1170
+ "FILE_VALIDATED"
1171
+ ],
1172
+ "description": "存储文件到 S3/本地 → 需要已验证的文件"
1173
+ },
1174
+ "reference_file": {
1175
+ "namespace": "file_upload",
1176
+ "pre_states": [
1177
+ "FILE_STORED"
1178
+ ],
1179
+ "post_states": [
1180
+ "FILE_REFERENCED"
1181
+ ],
1182
+ "description": "关联文件到业务对象 → 需要已存储的文件"
1183
+ },
1184
+ "check_rate_limit": {
1185
+ "namespace": "api_gateway",
1186
+ "pre_states": [],
1187
+ "post_states": [
1188
+ "RATE_CHECKED"
1189
+ ],
1190
+ "description": "检查 API 调用频率 → 无状态检查"
1191
+ },
1192
+ "throttle_request": {
1193
+ "namespace": "api_gateway",
1194
+ "pre_states": [
1195
+ "RATE_CHECKED"
1196
+ ],
1197
+ "post_states": [
1198
+ "THROTTLED"
1199
+ ],
1200
+ "invalidate": [
1201
+ "RATE_CHECKED"
1202
+ ],
1203
+ "description": "限流请求 → 超过频率限制"
1204
+ },
1205
+ "pass_rate_check": {
1206
+ "namespace": "api_gateway",
1207
+ "pre_states": [
1208
+ "RATE_CHECKED"
1209
+ ],
1210
+ "post_states": [],
1211
+ "description": "通过频率检查 → 正常处理请求"
1212
+ },
1213
+ "compose_notification": {
1214
+ "namespace": "notification",
1215
+ "pre_states": [],
1216
+ "post_states": [
1217
+ "NOTIFICATION_COMPOSED"
1218
+ ],
1219
+ "description": "生成通知内容 → 基于业务事件",
1220
+ "aliases": [
1221
+ "nodemailer.createTransport",
1222
+ "nodemailer.compose"
1223
+ ]
1224
+ },
1225
+ "send_notification": {
1226
+ "namespace": "notification",
1227
+ "pre_states": [],
1228
+ "post_states": [
1229
+ "NOTIFICATION_SENT"
1230
+ ],
1231
+ "invalidate": [
1232
+ "NOTIFICATION_COMPOSED"
1233
+ ],
1234
+ "description": "发送通知 → 邮件/短信/推送(发送前无需在调用序列中显式 compose——组合是内部实现细节)",
1235
+ "aliases": [
1236
+ "nodemailer.sendMail",
1237
+ "nodemailer.transport.sendMail",
1238
+ "transporter.sendMail",
1239
+ "email.send"
1240
+ ]
1241
+ },
1242
+ "confirm_delivery": {
1243
+ "namespace": "notification",
1244
+ "pre_states": [
1245
+ "NOTIFICATION_SENT"
1246
+ ],
1247
+ "post_states": [
1248
+ "NOTIFICATION_CONFIRMED"
1249
+ ],
1250
+ "invalidate": [
1251
+ "NOTIFICATION_SENT"
1252
+ ],
1253
+ "description": "确认送达 → 邮件已投递/短信已发送"
1254
+ },
1255
+ "receive_password": {
1256
+ "namespace": "registration",
1257
+ "pre_states": [
1258
+ "UNAUTHENTICATED"
1259
+ ],
1260
+ "post_states": [
1261
+ "PASSWORD_RECEIVED"
1262
+ ],
1263
+ "description": "Registration: user submits password → ready to hash"
1264
+ },
1265
+ "register_user": {
1266
+ "namespace": "registration",
1267
+ "pre_states": [
1268
+ "PASSWORD_HASHED"
1269
+ ],
1270
+ "post_states": [
1271
+ "USER_REGISTERED"
1272
+ ],
1273
+ "invalidate": [
1274
+ "PASSWORD_HASHED"
1275
+ ],
1276
+ "description": "Registration: save user with hashed password → user record created"
1277
+ },
1278
+ "send_verification_code": {
1279
+ "namespace": "registration",
1280
+ "pre_states": [],
1281
+ "post_states": [
1282
+ "VERIFICATION_CODE_SENT"
1283
+ ],
1284
+ "invalidate": [
1285
+ "USER_REGISTERED"
1286
+ ],
1287
+ "description": "发送验证码 → 邮箱/手机(手机验证码在注册前发送——前置状态放开)"
1288
+ },
1289
+ "verify_code": {
1290
+ "namespace": "registration",
1291
+ "pre_states": [
1292
+ "VERIFICATION_CODE_SENT"
1293
+ ],
1294
+ "post_states": [
1295
+ "VERIFICATION_CONFIRMED"
1296
+ ],
1297
+ "invalidate": [
1298
+ "VERIFICATION_CODE_SENT"
1299
+ ],
1300
+ "description": "验证码校验 → 匹配且未过期"
1301
+ },
1302
+ "activate_account": {
1303
+ "namespace": "registration",
1304
+ "pre_states": [
1305
+ "VERIFICATION_CONFIRMED"
1306
+ ],
1307
+ "post_states": [
1308
+ "ACCOUNT_ACTIVATED"
1309
+ ],
1310
+ "invalidate": [
1311
+ "VERIFICATION_CONFIRMED"
1312
+ ],
1313
+ "description": "激活账号 → 验证通过后启用"
1314
+ },
1315
+ "create_user_session": {
1316
+ "namespace": "session_mgmt",
1317
+ "pre_states": [],
1318
+ "post_states": [
1319
+ "SESSION_CREATED"
1320
+ ],
1321
+ "description": "创建用户会话 → 登录成功后(OAuth/密码/Token 认证均可)",
1322
+ "aliases": [
1323
+ "ctx.res.cookie",
1324
+ "res.cookie",
1325
+ "express.session.create",
1326
+ "express-session",
1327
+ "cookie-session",
1328
+ "auth.createSession",
1329
+ "sdk.createSessionToken",
1330
+ "createSessionToken",
1331
+ "signSession",
1332
+ "this.signSession"
1333
+ ]
1334
+ },
1335
+ "refresh_session": {
1336
+ "namespace": "session_mgmt",
1337
+ "pre_states": [
1338
+ "SESSION_CREATED"
1339
+ ],
1340
+ "post_states": [
1341
+ "SESSION_REFRESHED"
1342
+ ],
1343
+ "description": "刷新会话 → 延长有效期"
1344
+ },
1345
+ "timeout_session": {
1346
+ "namespace": "session_mgmt",
1347
+ "pre_states": [
1348
+ "SESSION_CREATED",
1349
+ "SESSION_REFRESHED"
1350
+ ],
1351
+ "post_states": [
1352
+ "SESSION_EXPIRED"
1353
+ ],
1354
+ "invalidate": [
1355
+ "SESSION_CREATED",
1356
+ "SESSION_REFRESHED"
1357
+ ],
1358
+ "description": "会话超时 → 自动过期"
1359
+ },
1360
+ "revoke_session": {
1361
+ "namespace": "session_mgmt",
1362
+ "pre_states": [],
1363
+ "post_states": [
1364
+ "SESSION_REVOKED"
1365
+ ],
1366
+ "aliases": [
1367
+ "ctx.res.clearCookie",
1368
+ "res.clearCookie",
1369
+ "req.logout",
1370
+ "passport.logout",
1371
+ "auth.logout",
1372
+ "auth.signOut",
1373
+ "session.destroy"
1374
+ ],
1375
+ "invalidate": [
1376
+ "SESSION_CREATED",
1377
+ "SESSION_REFRESHED"
1378
+ ],
1379
+ "description": "撤销会话 → 管理员/用户主动登出(撤销是幂等操作,任何时刻都合法)"
1380
+ },
1381
+ "register_supplier": {
1382
+ "namespace": "supplier",
1383
+ "pre_states": [],
1384
+ "post_states": [
1385
+ "SUPPLIER_REGISTERED"
1386
+ ],
1387
+ "description": "注册供应商 → 基本信息录入"
1388
+ },
1389
+ "verify_supplier": {
1390
+ "namespace": "supplier",
1391
+ "pre_states": [
1392
+ "SUPPLIER_REGISTERED"
1393
+ ],
1394
+ "post_states": [
1395
+ "SUPPLIER_VERIFIED"
1396
+ ],
1397
+ "invalidate": [
1398
+ "SUPPLIER_REGISTERED"
1399
+ ],
1400
+ "description": "验证供应商 → 资质审核"
1401
+ },
1402
+ "enable_supplier": {
1403
+ "namespace": "supplier",
1404
+ "pre_states": [
1405
+ "SUPPLIER_VERIFIED"
1406
+ ],
1407
+ "post_states": [
1408
+ "SUPPLIER_ENABLED"
1409
+ ],
1410
+ "invalidate": [
1411
+ "SUPPLIER_VERIFIED"
1412
+ ],
1413
+ "description": "启用供应商 → 可接单"
1414
+ },
1415
+ "assign_product_to_supplier": {
1416
+ "namespace": "supplier",
1417
+ "pre_states": [
1418
+ "SUPPLIER_ENABLED"
1419
+ ],
1420
+ "post_states": [
1421
+ "PRODUCT_ASSIGNED"
1422
+ ],
1423
+ "description": "分配产品给供应商 → 供应商已启用"
1424
+ },
1425
+ "upload_stl": {
1426
+ "namespace": "printlab_order",
1427
+ "pre_states": [
1428
+ "AUTHENTICATED"
1429
+ ],
1430
+ "post_states": [
1431
+ "STL_UPLOADED"
1432
+ ],
1433
+ "description": "上传 STL 文件 → 用户已认证"
1434
+ },
1435
+ "slice_model": {
1436
+ "namespace": "printlab_order",
1437
+ "pre_states": [
1438
+ "STL_UPLOADED"
1439
+ ],
1440
+ "post_states": [
1441
+ "STL_SLICED"
1442
+ ],
1443
+ "invalidate": [
1444
+ "STL_UPLOADED"
1445
+ ],
1446
+ "description": "切片 3D 模型 → STL 已上传"
1447
+ },
1448
+ "generate_gcode": {
1449
+ "namespace": "printlab_order",
1450
+ "pre_states": [
1451
+ "STL_SLICED"
1452
+ ],
1453
+ "post_states": [
1454
+ "GCODE_GENERATED"
1455
+ ],
1456
+ "invalidate": [
1457
+ "STL_SLICED"
1458
+ ],
1459
+ "description": "生成 GCode → 模型已切片"
1460
+ },
1461
+ "estimate_cost": {
1462
+ "namespace": "printlab_order",
1463
+ "pre_states": [
1464
+ "GCODE_GENERATED"
1465
+ ],
1466
+ "post_states": [
1467
+ "COST_ESTIMATED"
1468
+ ],
1469
+ "description": "估算打印成本 → GCode 已生成"
1470
+ },
1471
+ "create_order": {
1472
+ "namespace": "printlab_order",
1473
+ "pre_states": [],
1474
+ "post_states": [
1475
+ "ORDER_CREATED"
1476
+ ],
1477
+ "invalidate": [
1478
+ "COST_ESTIMATED"
1479
+ ],
1480
+ "description": "创建订单 → 成本已估算(订单创建是生命周期入口——成本估算发生在创建过程中)"
1481
+ },
1482
+ "queue_order": {
1483
+ "namespace": "printlab_order",
1484
+ "pre_states": [
1485
+ "PAYMENT_CONFIRMED"
1486
+ ],
1487
+ "post_states": [
1488
+ "ORDER_QUEUED"
1489
+ ],
1490
+ "invalidate": [
1491
+ "PAYMENT_CONFIRMED"
1492
+ ],
1493
+ "description": "订单排队 → 支付已确认"
1494
+ },
1495
+ "start_print": {
1496
+ "namespace": "printlab_print",
1497
+ "pre_states": [
1498
+ "ORDER_QUEUED"
1499
+ ],
1500
+ "post_states": [
1501
+ "PRINT_STARTED"
1502
+ ],
1503
+ "invalidate": [
1504
+ "ORDER_QUEUED"
1505
+ ],
1506
+ "description": "开始打印 → 订单已排队"
1507
+ },
1508
+ "complete_print": {
1509
+ "namespace": "printlab_print",
1510
+ "pre_states": [
1511
+ "PRINT_STARTED"
1512
+ ],
1513
+ "post_states": [
1514
+ "PRINT_COMPLETED"
1515
+ ],
1516
+ "invalidate": [
1517
+ "PRINT_STARTED"
1518
+ ],
1519
+ "description": "打印完成 → 打印已开始"
1520
+ },
1521
+ "ship_order": {
1522
+ "namespace": "printlab_order",
1523
+ "pre_states": [
1524
+ "PRINT_COMPLETED"
1525
+ ],
1526
+ "post_states": [
1527
+ "ORDER_SHIPPED"
1528
+ ],
1529
+ "invalidate": [
1530
+ "PRINT_COMPLETED"
1531
+ ],
1532
+ "description": "发货 → 打印已完成"
1533
+ },
1534
+ "deliver_order": {
1535
+ "namespace": "printlab_order",
1536
+ "pre_states": [
1537
+ "ORDER_SHIPPED"
1538
+ ],
1539
+ "post_states": [
1540
+ "ORDER_DELIVERED"
1541
+ ],
1542
+ "invalidate": [
1543
+ "ORDER_SHIPPED"
1544
+ ],
1545
+ "description": "订单交付 → 已发货"
1546
+ },
1547
+ "check_resource_ownership": {
1548
+ "namespace": "data_integrity",
1549
+ "pre_states": [
1550
+ "AUTHENTICATED"
1551
+ ],
1552
+ "post_states": [
1553
+ "AUTHORIZED"
1554
+ ],
1555
+ "description": "检查资源所有权 → 用户只能操作自己的数据"
1556
+ },
1557
+ "audit_mutation": {
1558
+ "namespace": "data_integrity",
1559
+ "pre_states": [],
1560
+ "post_states": [],
1561
+ "description": "记录数据变更审计日志 → 每次写操作后"
1562
+ },
1563
+ "validate_business_rule": {
1564
+ "namespace": "data_integrity",
1565
+ "pre_states": [],
1566
+ "post_states": [],
1567
+ "description": "验证业务规则 → 订单金额 > 0, 库存 >= 0"
1568
+ },
1569
+ "refund_payment": {
1570
+ "namespace": "payment",
1571
+ "pre_states": [
1572
+ "PAYMENT_CONFIRMED"
1573
+ ],
1574
+ "post_states": [
1575
+ "PAYMENT_FAILED"
1576
+ ],
1577
+ "invalidate": [
1578
+ "PAYMENT_CONFIRMED"
1579
+ ],
1580
+ "description": "退款 → 已确认的支付可退款,退款后状态变更为失败"
1581
+ },
1582
+ "cancel_payment": {
1583
+ "namespace": "payment",
1584
+ "pre_states": [
1585
+ "ORDER_CREATED",
1586
+ "PAYMENT_INITIATED"
1587
+ ],
1588
+ "post_states": [
1589
+ "PAYMENT_FAILED"
1590
+ ],
1591
+ "invalidate": [
1592
+ "ORDER_CREATED",
1593
+ "PAYMENT_INITIATED"
1594
+ ],
1595
+ "description": "取消支付 → 在回调前取消,订单和支付状态一起失效"
1596
+ },
1597
+ "retry_payment": {
1598
+ "namespace": "payment",
1599
+ "pre_states": [
1600
+ "PAYMENT_FAILED"
1601
+ ],
1602
+ "post_states": [
1603
+ "PAYMENT_INITIATED"
1604
+ ],
1605
+ "invalidate": [
1606
+ "PAYMENT_FAILED"
1607
+ ],
1608
+ "description": "重试支付 → 支付失败后可重新发起"
1609
+ },
1610
+ "verify_payment_signature": {
1611
+ "namespace": "payment",
1612
+ "pre_states": [],
1613
+ "post_states": [
1614
+ "PAYMENT_CALLBACK_RECEIVED"
1615
+ ],
1616
+ "description": "验证支付回调签名 → 防伪造回调(自保持,不改变状态)(签名验证是回调处理第一步,无前置状态要求)"
1617
+ },
1618
+ "reconcile_payment": {
1619
+ "namespace": "payment",
1620
+ "pre_states": [
1621
+ "PAYMENT_CONFIRMED"
1622
+ ],
1623
+ "post_states": [
1624
+ "PAYMENT_CONFIRMED"
1625
+ ],
1626
+ "description": "对账 → 与支付网关日终对账(自保持)"
1627
+ },
1628
+ "validate_session": {
1629
+ "namespace": "session_mgmt",
1630
+ "pre_states": [],
1631
+ "post_states": [
1632
+ "SESSION_CREATED"
1633
+ ],
1634
+ "description": "验证会话有效性 → 每个请求的中间件检查(入口点——冷启动/已登录均可)"
1635
+ },
1636
+ "extend_session": {
1637
+ "namespace": "session_mgmt",
1638
+ "pre_states": [
1639
+ "SESSION_CREATED"
1640
+ ],
1641
+ "post_states": [
1642
+ "SESSION_REFRESHED"
1643
+ ],
1644
+ "invalidate": [
1645
+ "SESSION_CREATED"
1646
+ ],
1647
+ "description": "延长会话有效期 → 用户活跃时自动续期"
1648
+ },
1649
+ "renew_session_from_expired": {
1650
+ "namespace": "session_mgmt",
1651
+ "pre_states": [
1652
+ "SESSION_EXPIRED"
1653
+ ],
1654
+ "post_states": [
1655
+ "SESSION_CREATED"
1656
+ ],
1657
+ "invalidate": [
1658
+ "SESSION_EXPIRED"
1659
+ ],
1660
+ "description": "从过期会话恢复 → 通过 refresh token 或重新登录创建新会话"
1661
+ },
1662
+ "revoke_all_sessions": {
1663
+ "namespace": "session_mgmt",
1664
+ "pre_states": [],
1665
+ "post_states": [
1666
+ "SESSION_REVOKED"
1667
+ ],
1668
+ "invalidate": [
1669
+ "SESSION_CREATED",
1670
+ "SESSION_REFRESHED"
1671
+ ],
1672
+ "description": "批量撤销所有会话 → 密码修改后强制所有设备下线"
1673
+ },
1674
+ "cleanup_expired_sessions": {
1675
+ "namespace": "session_mgmt",
1676
+ "pre_states": [
1677
+ "SESSION_EXPIRED",
1678
+ "SESSION_REVOKED"
1679
+ ],
1680
+ "post_states": [],
1681
+ "invalidate": [
1682
+ "SESSION_EXPIRED",
1683
+ "SESSION_REVOKED"
1684
+ ],
1685
+ "description": "清理过期/已撤销的会话记录 → 定时任务,释放存储"
1686
+ },
1687
+ "rotate_session_token": {
1688
+ "namespace": "session_mgmt",
1689
+ "pre_states": [
1690
+ "SESSION_CREATED",
1691
+ "SESSION_REFRESHED"
1692
+ ],
1693
+ "post_states": [
1694
+ "SESSION_REFRESHED"
1695
+ ],
1696
+ "invalidate": [
1697
+ "SESSION_CREATED",
1698
+ "SESSION_REFRESHED"
1699
+ ],
1700
+ "description": "轮换会话令牌 → 防固定攻击,旧令牌立即失效"
1701
+ },
1702
+ "resend_verification_code": {
1703
+ "namespace": "registration",
1704
+ "pre_states": [
1705
+ "VERIFICATION_CODE_SENT"
1706
+ ],
1707
+ "post_states": [
1708
+ "VERIFICATION_CODE_SENT"
1709
+ ],
1710
+ "description": "重发验证码 → 前一个验证码失效,发送新验证码"
1711
+ },
1712
+ "expire_verification": {
1713
+ "namespace": "registration",
1714
+ "pre_states": [
1715
+ "VERIFICATION_CODE_SENT"
1716
+ ],
1717
+ "post_states": [
1718
+ "USER_REGISTERED"
1719
+ ],
1720
+ "invalidate": [
1721
+ "VERIFICATION_CODE_SENT"
1722
+ ],
1723
+ "description": "验证码过期 → 回到已注册状态,可重新发送"
1724
+ },
1725
+ "reject_registration": {
1726
+ "namespace": "registration",
1727
+ "pre_states": [
1728
+ "USER_REGISTERED",
1729
+ "VERIFICATION_CODE_SENT"
1730
+ ],
1731
+ "post_states": [
1732
+ "UNAUTHENTICATED"
1733
+ ],
1734
+ "invalidate": [
1735
+ "USER_REGISTERED",
1736
+ "VERIFICATION_CODE_SENT"
1737
+ ],
1738
+ "description": "拒绝注册 → 管理员拒绝或黑名单检测触发,回到未认证状态"
1739
+ },
1740
+ "reject_file": {
1741
+ "namespace": "file_upload",
1742
+ "pre_states": [
1743
+ "FILE_RECEIVED",
1744
+ "FILE_VALIDATED"
1745
+ ],
1746
+ "post_states": [],
1747
+ "invalidate": [
1748
+ "FILE_RECEIVED",
1749
+ "FILE_VALIDATED"
1750
+ ],
1751
+ "description": "拒绝文件 → 类型/大小不符合要求,丢弃文件"
1752
+ },
1753
+ "virus_scan_file": {
1754
+ "namespace": "file_upload",
1755
+ "pre_states": [
1756
+ "FILE_RECEIVED"
1757
+ ],
1758
+ "post_states": [
1759
+ "FILE_RECEIVED"
1760
+ ],
1761
+ "description": "病毒扫描 → 上传后扫描(自保持,通过则继续)"
1762
+ },
1763
+ "delete_file": {
1764
+ "namespace": "file_upload",
1765
+ "pre_states": [
1766
+ "FILE_STORED",
1767
+ "FILE_REFERENCED"
1768
+ ],
1769
+ "post_states": [],
1770
+ "invalidate": [
1771
+ "FILE_STORED",
1772
+ "FILE_REFERENCED"
1773
+ ],
1774
+ "description": "删除已存储文件 → 释放存储空间"
1775
+ },
1776
+ "escape_output": {
1777
+ "namespace": "resource",
1778
+ "pre_states": [
1779
+ "CONTENT_VALID"
1780
+ ],
1781
+ "post_states": [
1782
+ "CONTENT_VALID"
1783
+ ],
1784
+ "description": "输出转义 → 防 XSS,HTML 实体编码(自保持)"
1785
+ },
1786
+ "rate_limit_resource": {
1787
+ "namespace": "resource",
1788
+ "pre_states": [],
1789
+ "post_states": [],
1790
+ "description": "资源访问频率限制 → 防止滥用和 DoS"
1791
+ },
1792
+ "circuit_break": {
1793
+ "namespace": "api_gateway",
1794
+ "pre_states": [
1795
+ "RATE_CHECKED"
1796
+ ],
1797
+ "post_states": [
1798
+ "THROTTLED"
1799
+ ],
1800
+ "invalidate": [
1801
+ "RATE_CHECKED"
1802
+ ],
1803
+ "description": "熔断 → 连续失败超过阈值时触发,直接拒绝请求"
1804
+ },
1805
+ "retry_notification": {
1806
+ "namespace": "notification",
1807
+ "pre_states": [
1808
+ "NOTIFICATION_SENT"
1809
+ ],
1810
+ "post_states": [
1811
+ "NOTIFICATION_SENT"
1812
+ ],
1813
+ "description": "重试发送 → 上次发送失败后重试(自保持)"
1814
+ },
1815
+ "fail_notification": {
1816
+ "namespace": "notification",
1817
+ "pre_states": [
1818
+ "NOTIFICATION_COMPOSED",
1819
+ "NOTIFICATION_SENT"
1820
+ ],
1821
+ "post_states": [],
1822
+ "invalidate": [
1823
+ "NOTIFICATION_COMPOSED",
1824
+ "NOTIFICATION_SENT"
1825
+ ],
1826
+ "description": "通知失败 → 永久失败(如无效地址),放弃发送"
1827
+ },
1828
+ "disable_supplier": {
1829
+ "namespace": "supplier",
1830
+ "pre_states": [
1831
+ "SUPPLIER_ENABLED"
1832
+ ],
1833
+ "post_states": [
1834
+ "SUPPLIER_VERIFIED"
1835
+ ],
1836
+ "invalidate": [
1837
+ "SUPPLIER_ENABLED"
1838
+ ],
1839
+ "description": "停用供应商 → 暂停接单但不取消资质"
1840
+ },
1841
+ "deregister_supplier": {
1842
+ "namespace": "supplier",
1843
+ "pre_states": [
1844
+ "SUPPLIER_REGISTERED",
1845
+ "SUPPLIER_VERIFIED"
1846
+ ],
1847
+ "post_states": [],
1848
+ "invalidate": [
1849
+ "SUPPLIER_REGISTERED",
1850
+ "SUPPLIER_VERIFIED"
1851
+ ],
1852
+ "description": "注销供应商 → 完全移除供应商资格"
1853
+ },
1854
+ "validate_order_integrity": {
1855
+ "namespace": "data_integrity",
1856
+ "pre_states": [
1857
+ "REFERENCE_CREATED"
1858
+ ],
1859
+ "post_states": [
1860
+ "REFERENCE_CREATED"
1861
+ ],
1862
+ "description": "校验订单完整性 → 验证关联数据未被篡改(自保持)"
1863
+ },
1864
+ "renew_tls_certificate": {
1865
+ "namespace": "tls",
1866
+ "pre_states": [
1867
+ "TLS_CONFIGURED"
1868
+ ],
1869
+ "post_states": [
1870
+ "TLS_CONFIGURED"
1871
+ ],
1872
+ "description": "更新 TLS 证书 → 到期前轮换证书(自保持)"
1873
+ },
1874
+ "rollback_ir": {
1875
+ "namespace": "dev_pipeline",
1876
+ "pre_states": [
1877
+ "IR_EXTRACTED",
1878
+ "ACTION_VALIDATED"
1879
+ ],
1880
+ "post_states": [
1881
+ "IR_STALE"
1882
+ ],
1883
+ "invalidate": [
1884
+ "IR_EXTRACTED",
1885
+ "ACTION_VALIDATED"
1886
+ ],
1887
+ "description": "回滚 IR → 校验失败时重置到 STALE 状态"
1888
+ },
1889
+ "cancel_order": {
1890
+ "namespace": "printlab_order",
1891
+ "pre_states": [
1892
+ "ORDER_CREATED"
1893
+ ],
1894
+ "post_states": [],
1895
+ "invalidate": [
1896
+ "ORDER_CREATED",
1897
+ "ORDER_QUEUED"
1898
+ ],
1899
+ "description": "取消订单 → 打印前取消,释放队列资源"
1900
+ },
1901
+ "fail_print": {
1902
+ "namespace": "printlab_print",
1903
+ "pre_states": [
1904
+ "PRINT_STARTED"
1905
+ ],
1906
+ "post_states": [],
1907
+ "invalidate": [
1908
+ "PRINT_STARTED"
1909
+ ],
1910
+ "description": "打印失败 → 材料耗尽/机器故障/翘边等"
1911
+ },
1912
+ "logout_without_invalidate": {
1913
+ "namespace": "session_fixation",
1914
+ "pre_states": [
1915
+ "SESSION_ACTIVE"
1916
+ ],
1917
+ "post_states": [],
1918
+ "invalidate": [
1919
+ "SESSION_ACTIVE"
1920
+ ],
1921
+ "description": "PLSB PLS-005: 登出必须销毁会话——防止会话固定攻击"
1922
+ },
1923
+ "admin_action_without_check": {
1924
+ "namespace": "privilege_escalation",
1925
+ "pre_states": [
1926
+ "AUTHENTICATED"
1927
+ ],
1928
+ "post_states": [
1929
+ "AUTHORIZED"
1930
+ ],
1931
+ "invalidate": [],
1932
+ "description": "PLSB PLS-006: 敏感操作前必须验证管理员角色——防止权限提升"
1933
+ },
1934
+ "double_commit": {
1935
+ "namespace": "transaction_violation",
1936
+ "pre_states": [
1937
+ "TX_ACTIVE"
1938
+ ],
1939
+ "post_states": [
1940
+ "TX_IDLE"
1941
+ ],
1942
+ "invalidate": [
1943
+ "TX_ACTIVE"
1944
+ ],
1945
+ "description": "PLSB PLS-008: 事务只能提交一次——重复提交非法"
1946
+ },
1947
+ "validate_request": {
1948
+ "namespace": "missing_validation",
1949
+ "pre_states": [
1950
+ "IDLE"
1951
+ ],
1952
+ "post_states": [
1953
+ "CONTENT_VALID"
1954
+ ],
1955
+ "invalidate": [],
1956
+ "description": "API 合约: 处理请求前校验输入(zod / express-validator / celebrate 等 schema 校验)",
1957
+ "aliases": [
1958
+ "zod.*",
1959
+ "zodSchema.parse",
1960
+ "zodSchema.safeParse",
1961
+ "checkSchema",
1962
+ "validationResult",
1963
+ "celebrate",
1964
+ "validateRequest",
1965
+ "validateBody",
1966
+ "validateQuery",
1967
+ "validateParams",
1968
+ "joi.validate",
1969
+ "yup.validate",
1970
+ "schema.parse",
1971
+ "schema.safeParse"
1972
+ ]
1973
+ },
1974
+ "execute_without_validation": {
1975
+ "namespace": "missing_validation",
1976
+ "pre_states": [
1977
+ "CONTENT_VALID"
1978
+ ],
1979
+ "post_states": [
1980
+ "IDLE"
1981
+ ],
1982
+ "invalidate": [
1983
+ "CONTENT_VALID"
1984
+ ],
1985
+ "description": "PLSB PLS-013: 执行业务逻辑前必须先完成输入校验——防止工作流绕过(API 合约)",
1986
+ "aliases": [
1987
+ "trpc.procedure.call",
1988
+ "trpc.resolve",
1989
+ "router.handle",
1990
+ "express.handler",
1991
+ "handler.execute"
1992
+ ]
1993
+ },
1994
+ "double_release": {
1995
+ "namespace": "resource_leak",
1996
+ "pre_states": [
1997
+ "IDLE"
1998
+ ],
1999
+ "post_states": [
2000
+ "IDLE"
2001
+ ],
2002
+ "invalidate": [
2003
+ "FILE_OPEN",
2004
+ "DB_CONNECTED"
2005
+ ],
2006
+ "description": "PLSB PLS-002: 资源不能释放两次——重复释放非法"
2007
+ },
2008
+ "use_after_release": {
2009
+ "namespace": "use_after_free",
2010
+ "pre_states": [
2011
+ "IDLE"
2012
+ ],
2013
+ "post_states": [],
2014
+ "invalidate": [],
2015
+ "description": "PLSB PLS-003: 不能在释放后使用资源——使用后释放检查"
2016
+ },
2017
+ "read_file_atomic": {
2018
+ "namespace": "file",
2019
+ "pre_states": [],
2020
+ "post_states": [],
2021
+ "description": "一次性读取(API 内部自行打开+关闭)——无需显式 open",
2022
+ "aliases": [
2023
+ "fs.readFileSync",
2024
+ "fs.readFile",
2025
+ "fs.promises.readFile",
2026
+ "fs.promises.readFileSync"
2027
+ ]
2028
+ },
2029
+ "write_file_atomic": {
2030
+ "namespace": "file",
2031
+ "pre_states": [],
2032
+ "post_states": [],
2033
+ "description": "一次性写入(API 内部自行打开+关闭)——无需显式 open",
2034
+ "aliases": [
2035
+ "fs.writeFileSync",
2036
+ "fs.writeFile",
2037
+ "fs.promises.writeFile",
2038
+ "fs.promises.writeFileSync"
2039
+ ]
134
2040
  }
135
2041
  }
136
2042
  }