@wowok/agent-mcp 3.4.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/README.md +8 -0
  2. package/dist/chain-semantics/composition-truth.d.ts +102 -0
  3. package/dist/chain-semantics/composition-truth.js +1 -0
  4. package/dist/chain-semantics/eval-order.js +1 -1
  5. package/dist/chain-semantics/fund-flow.js +1 -1
  6. package/dist/chain-semantics/index.d.ts +1 -0
  7. package/dist/chain-semantics/index.js +1 -1
  8. package/dist/composition/audit.js +1 -1
  9. package/dist/composition/blueprint-view.d.ts +3 -3
  10. package/dist/composition/blueprint-view.js +1 -1
  11. package/dist/composition/compile.d.ts +24 -3
  12. package/dist/composition/compile.js +1 -1
  13. package/dist/composition/emit-phases.d.ts +206 -0
  14. package/dist/composition/emit-phases.js +1 -0
  15. package/dist/composition/generate.d.ts +40 -0
  16. package/dist/composition/generate.js +1 -0
  17. package/dist/composition/guard-fill.d.ts +44 -0
  18. package/dist/composition/guard-fill.js +1 -0
  19. package/dist/composition/inflight.d.ts +20 -2
  20. package/dist/composition/inflight.js +1 -1
  21. package/dist/composition/input-normalize.d.ts +15 -0
  22. package/dist/composition/input-normalize.js +1 -0
  23. package/dist/composition/materialize.d.ts +18 -13
  24. package/dist/composition/materialize.js +1 -1
  25. package/dist/composition/mode-gates.d.ts +35 -0
  26. package/dist/composition/mode-gates.js +1 -0
  27. package/dist/composition/param-disclosure.js +1 -1
  28. package/dist/composition/plan-retry-ledger.d.ts +21 -0
  29. package/dist/composition/plan-retry-ledger.js +1 -0
  30. package/dist/composition/plan.d.ts +7 -2
  31. package/dist/composition/plan.js +1 -1
  32. package/dist/composition/product-card.d.ts +94 -0
  33. package/dist/composition/product-card.js +1 -0
  34. package/dist/composition/supply-chain-emit.d.ts +46 -0
  35. package/dist/composition/supply-chain-emit.js +1 -0
  36. package/dist/config/config-audit.spec.js +1 -1
  37. package/dist/config/config-warnings.d.ts +2 -0
  38. package/dist/config/config-warnings.js +1 -0
  39. package/dist/config/exposure.d.ts +2 -2
  40. package/dist/config/judgment.d.ts +31 -5
  41. package/dist/config/judgment.js +1 -1
  42. package/dist/config/judgment.spec.js +1 -1
  43. package/dist/config/match-policy-file.d.ts +34 -0
  44. package/dist/config/match-policy-file.js +1 -0
  45. package/dist/config/match-policy-file.spec.d.ts +1 -0
  46. package/dist/config/match-policy-file.spec.js +1 -0
  47. package/dist/config/rule-engine.d.ts +5 -5
  48. package/dist/config/rule-engine.js +1 -1
  49. package/dist/config/runtime.d.ts +0 -1
  50. package/dist/config/runtime.js +1 -1
  51. package/dist/config/severity.d.ts +0 -2
  52. package/dist/config/severity.js +1 -1
  53. package/dist/config/store-policy.spec.js +1 -1
  54. package/dist/config/template-params.d.ts +42 -0
  55. package/dist/config/template-params.js +1 -0
  56. package/dist/config/template-params.spec.d.ts +1 -0
  57. package/dist/config/template-params.spec.js +1 -0
  58. package/dist/data/api/api.spec.js +1 -1
  59. package/dist/data/api/server.js +1 -1
  60. package/dist/data/projection/store.d.ts +2 -1
  61. package/dist/data/projection/store.js +1 -1
  62. package/dist/data/projection/types.d.ts +22 -0
  63. package/dist/data/sync/cdc.d.ts +1 -2
  64. package/dist/data/sync/cdc.js +1 -1
  65. package/dist/evaluation/acceptance.d.ts +8 -0
  66. package/dist/evaluation/acceptance.js +1 -1
  67. package/dist/evaluation/builtins/demand-match.js +1 -1
  68. package/dist/evaluation/builtins/graph-service.spec.js +1 -1
  69. package/dist/evaluation/capability.d.ts +2 -0
  70. package/dist/evaluation/category-match-rules.d.ts +0 -1
  71. package/dist/evaluation/category-match-rules.js +1 -1
  72. package/dist/evaluation/composer.d.ts +25 -0
  73. package/dist/evaluation/composer.js +1 -1
  74. package/dist/evaluation/engine.js +1 -1
  75. package/dist/evaluation/extract.d.ts +7 -0
  76. package/dist/evaluation/extract.js +1 -1
  77. package/dist/evaluation/game-strategy.d.ts +0 -3
  78. package/dist/evaluation/game-strategy.js +1 -1
  79. package/dist/evaluation/match-operation.d.ts +9 -0
  80. package/dist/evaluation/match-operation.js +1 -1
  81. package/dist/evaluation/match-policy-resolver.d.ts +9 -0
  82. package/dist/evaluation/match-policy-resolver.js +1 -0
  83. package/dist/evaluation/match-policy.d.ts +3 -1
  84. package/dist/evaluation/match-policy.js +1 -1
  85. package/dist/evaluation/region.d.ts +0 -6
  86. package/dist/evaluation/region.js +1 -1
  87. package/dist/evaluation/standards.d.ts +2 -1
  88. package/dist/evaluation/standards.js +1 -1
  89. package/dist/evaluation/structured-lines.d.ts +8 -0
  90. package/dist/evaluation/structured-lines.js +1 -0
  91. package/dist/evaluation/types.d.ts +6 -0
  92. package/dist/experience/realtime-feedback.js +1 -1
  93. package/dist/extensions/capability-manifest.d.ts +1 -0
  94. package/dist/extensions/capability-manifest.js +1 -1
  95. package/dist/extensions/capability.d.ts +91 -0
  96. package/dist/extensions/capability.js +1 -0
  97. package/dist/extensions/industry-audit.spec.js +1 -1
  98. package/dist/extensions/industry-pack.d.ts +13 -0
  99. package/dist/extensions/industry-pack.js +1 -1
  100. package/dist/extensions/modes.js +1 -1
  101. package/dist/extensions/registry.d.ts +0 -2
  102. package/dist/extensions/registry.js +1 -1
  103. package/dist/goal/GoalEngine.js +1 -1
  104. package/dist/graph/onchain/analyze.js +1 -1
  105. package/dist/graph/onchain/expand.js +1 -1
  106. package/dist/graph/onchain/exposure.js +1 -1
  107. package/dist/graph/onchain/facts.js +1 -1
  108. package/dist/graph/onchain/order-status.d.ts +0 -1
  109. package/dist/graph/onchain/order-status.js +1 -1
  110. package/dist/harness/recover.js +1 -1
  111. package/dist/harness/verify.d.ts +0 -3
  112. package/dist/harness/verify.js +1 -1
  113. package/dist/intent/types.d.ts +0 -1
  114. package/dist/intent/types.js +1 -1
  115. package/dist/keeper/detectors.js +1 -1
  116. package/dist/keeper/types.d.ts +0 -1
  117. package/dist/keeper/types.js +1 -1
  118. package/dist/knowledge/allocation-risk.d.ts +1 -0
  119. package/dist/knowledge/allocation-risk.js +1 -1
  120. package/dist/knowledge/allocator-rail-verifier.d.ts +6 -1
  121. package/dist/knowledge/allocator-rail-verifier.js +1 -1
  122. package/dist/knowledge/arbitration-ledger.js +1 -1
  123. package/dist/knowledge/arbitration-puzzle.js +1 -1
  124. package/dist/knowledge/audit-rules.d.ts +2 -2
  125. package/dist/knowledge/audit-rules.js +1 -1
  126. package/dist/knowledge/baselines/judgment-baselines.json +21 -2
  127. package/dist/knowledge/baselines/rules/oracle.json +120 -0
  128. package/dist/knowledge/baselines/rules/plan.json +384 -17
  129. package/dist/knowledge/baselines/rules/progress.json +20 -2
  130. package/dist/knowledge/builtin-templates.d.ts +12 -1
  131. package/dist/knowledge/builtin-templates.js +1 -1
  132. package/dist/knowledge/component-schema.js +1 -1
  133. package/dist/knowledge/contact-templates.d.ts +0 -1
  134. package/dist/knowledge/contact-templates.js +1 -1
  135. package/dist/knowledge/dynamic-pricing.js +1 -1
  136. package/dist/knowledge/fee-param-bindings.js +1 -1
  137. package/dist/knowledge/fund-layer.d.ts +1 -0
  138. package/dist/knowledge/fund-layer.js +1 -1
  139. package/dist/knowledge/game-scenarios.js +1 -1
  140. package/dist/knowledge/getting-started.js +1 -1
  141. package/dist/knowledge/guard-binding-table.d.ts +52 -0
  142. package/dist/knowledge/guard-binding-table.js +1 -0
  143. package/dist/knowledge/guard-binding-verifier.d.ts +30 -0
  144. package/dist/knowledge/guard-binding-verifier.js +1 -0
  145. package/dist/knowledge/guard-bindings.js +1 -1
  146. package/dist/knowledge/guard-blueprint.d.ts +68 -0
  147. package/dist/knowledge/guard-blueprint.js +1 -0
  148. package/dist/knowledge/guard-design-patterns.d.ts +1 -1
  149. package/dist/knowledge/guard-design-patterns.js +1 -1
  150. package/dist/knowledge/guard-field-cognition.js +1 -1
  151. package/dist/knowledge/guard-host-context.d.ts +24 -0
  152. package/dist/knowledge/guard-host-context.js +1 -0
  153. package/dist/knowledge/guard-lint.js +1 -1
  154. package/dist/knowledge/guard-node-gates.d.ts +3 -0
  155. package/dist/knowledge/guard-node-gates.js +1 -1
  156. package/dist/knowledge/guard-puzzle.js +1 -1
  157. package/dist/knowledge/guard-render.js +1 -1
  158. package/dist/knowledge/guard-risk.js +1 -1
  159. package/dist/knowledge/guard-submission-prompt.d.ts +11 -0
  160. package/dist/knowledge/guard-submission-prompt.js +1 -1
  161. package/dist/knowledge/guard-templates.d.ts +1 -1
  162. package/dist/knowledge/guard-templates.js +1 -1
  163. package/dist/knowledge/guard-translation.js +1 -1
  164. package/dist/knowledge/index.d.ts +1 -1
  165. package/dist/knowledge/index.js +1 -1
  166. package/dist/knowledge/industry-generalizer.d.ts +6 -1
  167. package/dist/knowledge/industry-generalizer.js +1 -1
  168. package/dist/knowledge/industry-registry.js +1 -1
  169. package/dist/knowledge/jsonrpc-enum.d.ts +38 -0
  170. package/dist/knowledge/jsonrpc-enum.js +1 -1
  171. package/dist/knowledge/machine-topology.js +1 -1
  172. package/dist/knowledge/machine-translation.js +1 -1
  173. package/dist/knowledge/object-dependency.d.ts +31 -0
  174. package/dist/knowledge/object-dependency.js +1 -0
  175. package/dist/knowledge/onchain-constants.d.ts +2 -0
  176. package/dist/knowledge/onchain-constants.js +1 -1
  177. package/dist/knowledge/param-schema.d.ts +23 -0
  178. package/dist/knowledge/param-schema.js +1 -1
  179. package/dist/knowledge/param-tiers.js +1 -1
  180. package/dist/knowledge/passport-ledger.js +1 -1
  181. package/dist/knowledge/path-oracle/coverage.d.ts +16 -0
  182. package/dist/knowledge/path-oracle/coverage.js +1 -0
  183. package/dist/knowledge/path-oracle/index.d.ts +5 -0
  184. package/dist/knowledge/path-oracle/index.js +1 -0
  185. package/dist/knowledge/path-oracle/products/food-delivery.d.ts +2 -0
  186. package/dist/knowledge/path-oracle/products/food-delivery.js +1 -0
  187. package/dist/knowledge/path-oracle/schema.d.ts +188 -0
  188. package/dist/knowledge/path-oracle/schema.js +1 -0
  189. package/dist/knowledge/pattern-resolutions.d.ts +2 -0
  190. package/dist/knowledge/pattern-resolutions.js +1 -1
  191. package/dist/knowledge/progress-ledger.js +1 -1
  192. package/dist/knowledge/progress-risk.js +1 -1
  193. package/dist/knowledge/projection.spec.js +1 -1
  194. package/dist/knowledge/protocol-facts.js +1 -1
  195. package/dist/knowledge/requirement-families.d.ts +13 -0
  196. package/dist/knowledge/requirement-families.js +1 -0
  197. package/dist/knowledge/reward-ledger.js +1 -1
  198. package/dist/knowledge/scenario-modes.d.ts +1 -0
  199. package/dist/knowledge/scenario-modes.js +1 -1
  200. package/dist/knowledge/semantic-ir.d.ts +4 -0
  201. package/dist/knowledge/semantic-ir.js +1 -1
  202. package/dist/knowledge/service-ledger.d.ts +1 -1
  203. package/dist/knowledge/service-ledger.js +1 -1
  204. package/dist/knowledge/sku-name-gate.d.ts +17 -0
  205. package/dist/knowledge/sku-name-gate.js +1 -0
  206. package/dist/knowledge/supply-chain.d.ts +9 -0
  207. package/dist/knowledge/supply-chain.js +1 -1
  208. package/dist/knowledge/template-loader.d.ts +14 -6
  209. package/dist/knowledge/template-loader.js +1 -1
  210. package/dist/knowledge/template-nav.d.ts +3 -1
  211. package/dist/knowledge/template-nav.js +1 -1
  212. package/dist/knowledge/template-prose.d.ts +1 -1
  213. package/dist/knowledge/template-registry.js +1 -1
  214. package/dist/knowledge/template-scanner.d.ts +62 -0
  215. package/dist/knowledge/template-scanner.js +1 -1
  216. package/dist/knowledge/template-test-profiles.js +1 -1
  217. package/dist/knowledge/tools-reference.js +1 -1
  218. package/dist/knowledge/workflow-guidance.d.ts +5 -0
  219. package/dist/knowledge/workflow-guidance.js +1 -1
  220. package/dist/monitor/MonitorLoop.js +1 -1
  221. package/dist/participation/radar-core.js +1 -1
  222. package/dist/participation/time-window.js +1 -1
  223. package/dist/persona/address-format.d.ts +0 -1
  224. package/dist/persona/address-format.js +1 -1
  225. package/dist/persona/bridge.js +1 -1
  226. package/dist/persona/index.d.ts +0 -2
  227. package/dist/persona/index.js +1 -1
  228. package/dist/persona/model.js +1 -1
  229. package/dist/persona/persona-audit.spec.js +1 -1
  230. package/dist/persona/types.d.ts +6 -0
  231. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  232. package/dist/playbooks/service-build/game-theory.d.ts +2 -2
  233. package/dist/playbooks/service-build/intent-analyzer.js +1 -1
  234. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  235. package/dist/playbooks/service-build/merchant-guide.d.ts +50 -23
  236. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  237. package/dist/playbooks/service-build/migration-planner.d.ts +2 -0
  238. package/dist/playbooks/service-build/migration-planner.js +1 -1
  239. package/dist/playbooks/service-build/mode-actions.js +1 -1
  240. package/dist/playbooks/service-build/object-panorama.d.ts +8 -0
  241. package/dist/playbooks/service-build/object-panorama.js +1 -1
  242. package/dist/playbooks/service-build/participation-radar.js +1 -1
  243. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  244. package/dist/playbooks/service-build/reverse-mapping.d.ts +6 -0
  245. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  246. package/dist/playbooks/service-build/service-panorama.d.ts +1 -0
  247. package/dist/playbooks/service-build/service-panorama.js +1 -1
  248. package/dist/playbooks/service-build/service-quote.js +1 -1
  249. package/dist/playbooks/service-build/service-quote.spec.js +1 -1
  250. package/dist/playbooks/service-build/workflow-design-assessment.d.ts +10 -1
  251. package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
  252. package/dist/review/index.js +1 -1
  253. package/dist/review/repository.js +1 -1
  254. package/dist/safety/confirm-gate.js +1 -1
  255. package/dist/schema/benchmark-migration/index.d.ts +104 -0
  256. package/dist/schema/benchmark-migration/index.js +1 -1
  257. package/dist/schema/call/allocation.d.ts +15 -6
  258. package/dist/schema/call/allocation.js +1 -1
  259. package/dist/schema/call/base.d.ts +256 -0
  260. package/dist/schema/call/base.js +1 -1
  261. package/dist/schema/call/bridge.d.ts +32 -6
  262. package/dist/schema/call/demand.d.ts +15 -6
  263. package/dist/schema/call/demand.js +1 -1
  264. package/dist/schema/call/guard.d.ts +8 -8
  265. package/dist/schema/call/guard.js +1 -1
  266. package/dist/schema/call/handler.d.ts +3 -0
  267. package/dist/schema/call/handler.js +1 -1
  268. package/dist/schema/call/machine.d.ts +32 -8
  269. package/dist/schema/call/machine.js +1 -1
  270. package/dist/schema/call/order.d.ts +26 -8
  271. package/dist/schema/call/order.js +1 -1
  272. package/dist/schema/call/payment.d.ts +20 -8
  273. package/dist/schema/call/payment.js +1 -1
  274. package/dist/schema/call/permission-handler.js +1 -1
  275. package/dist/schema/call/permission.d.ts +330 -114
  276. package/dist/schema/call/permission.js +1 -1
  277. package/dist/schema/call/personal.d.ts +10 -4
  278. package/dist/schema/call/personal.js +1 -1
  279. package/dist/schema/call/progress.d.ts +16 -4
  280. package/dist/schema/call/reward.d.ts +10 -4
  281. package/dist/schema/call/reward.js +1 -1
  282. package/dist/schema/call/semantic.d.ts +1 -0
  283. package/dist/schema/call/semantic.js +1 -1
  284. package/dist/schema/call/service.d.ts +128 -40
  285. package/dist/schema/call/service.js +1 -1
  286. package/dist/schema/call/treasury.d.ts +15 -6
  287. package/dist/schema/call/treasury.js +1 -1
  288. package/dist/schema/common/index.js +1 -1
  289. package/dist/schema/config/index.d.ts +61 -0
  290. package/dist/schema/config/index.js +1 -1
  291. package/dist/schema/envelope-unify.d.ts +4 -0
  292. package/dist/schema/envelope-unify.js +1 -0
  293. package/dist/schema/evaluation/index.d.ts +216 -19
  294. package/dist/schema/evaluation/index.js +1 -1
  295. package/dist/schema/goal/index.d.ts +47 -0
  296. package/dist/schema/goal/planning.d.ts +115 -1
  297. package/dist/schema/goal/planning.js +1 -1
  298. package/dist/schema/industry-pack/index.d.ts +137 -6
  299. package/dist/schema/industry-pack/index.js +1 -1
  300. package/dist/schema/industry-pack/modes.d.ts +6 -6
  301. package/dist/schema/keeper/index.d.ts +26 -0
  302. package/dist/schema/local/index.d.ts +137 -0
  303. package/dist/schema/local/index.js +1 -1
  304. package/dist/schema/local/wip.d.ts +6 -0
  305. package/dist/schema/local/wip.js +1 -1
  306. package/dist/schema/messenger/index.d.ts +26 -0
  307. package/dist/schema/operations.d.ts +342 -83
  308. package/dist/schema/operations.js +1 -1
  309. package/dist/schema/persona/index.d.ts +2907 -640
  310. package/dist/schema/persona/index.js +1 -1
  311. package/dist/schema/query/bi.d.ts +145 -4
  312. package/dist/schema/query/bi.js +1 -1
  313. package/dist/schema/query/index.d.ts +266 -73
  314. package/dist/schema/query/index.js +1 -1
  315. package/dist/schema/schema-query/index.d.ts +1 -1
  316. package/dist/schema/schema-query/index.js +1 -1
  317. package/dist/schema/schema-version.js +1 -1
  318. package/dist/schema/utils/permission-machine-check.d.ts +2 -0
  319. package/dist/schema/utils/permission-machine-check.js +1 -1
  320. package/dist/schema/watch/index.d.ts +16 -0
  321. package/dist/schema/watch/index.js +1 -1
  322. package/dist/schema/workflow/index.d.ts +2 -2
  323. package/dist/schema/workflow/index.js +1 -1
  324. package/dist/schema-query-impl/index.d.ts +1 -1
  325. package/dist/schema-query-impl/index.js +1 -1
  326. package/dist/schemas/account_operation.output.json +94 -0
  327. package/dist/schemas/benchmark_migration_operation.output.json +338 -9
  328. package/dist/schemas/benchmark_migration_operation.schema.json +26 -1
  329. package/dist/schemas/bridge_operation.output.json +94 -0
  330. package/dist/schemas/config_operation.output.json +352 -0
  331. package/dist/schemas/config_operation.schema.json +20 -2
  332. package/dist/schemas/evaluation_operation.output.json +570 -4
  333. package/dist/schemas/evaluation_operation.schema.json +194 -3
  334. package/dist/schemas/goal_operation.schema.json +183 -0
  335. package/dist/schemas/index.json +1 -1
  336. package/dist/schemas/industry_pack_operation.output.json +621 -0
  337. package/dist/schemas/industry_pack_operation.schema.json +20 -2
  338. package/dist/schemas/keeper_operation.output.json +94 -0
  339. package/dist/schemas/local_cache_operation.output.json +94 -0
  340. package/dist/schemas/local_history_operation.output.json +94 -0
  341. package/dist/schemas/local_info_operation.output.json +94 -0
  342. package/dist/schemas/local_mark_operation.output.json +94 -0
  343. package/dist/schemas/messenger_operation.output.json +94 -0
  344. package/dist/schemas/monitor_events.output.json +94 -0
  345. package/dist/schemas/monitor_subscription.output.json +94 -0
  346. package/dist/schemas/onchain_events.output.json +94 -0
  347. package/dist/schemas/onchain_operations.output.json +313 -1
  348. package/dist/schemas/onchain_operations.schema.json +1248 -664
  349. package/dist/schemas/onchain_operations_allocation.schema.json +30 -15
  350. package/dist/schemas/onchain_operations_arbitration.schema.json +9 -2
  351. package/dist/schemas/onchain_operations_contact.schema.json +8 -1
  352. package/dist/schemas/onchain_operations_demand.schema.json +29 -14
  353. package/dist/schemas/onchain_operations_gen_passport.schema.json +8 -1
  354. package/dist/schemas/onchain_operations_guard.schema.json +290 -105
  355. package/dist/schemas/onchain_operations_machine.schema.json +49 -34
  356. package/dist/schemas/onchain_operations_order.schema.json +63 -40
  357. package/dist/schemas/onchain_operations_payment.schema.json +26 -11
  358. package/dist/schemas/onchain_operations_permission.schema.json +362 -235
  359. package/dist/schemas/onchain_operations_personal.schema.json +27 -15
  360. package/dist/schemas/onchain_operations_progress.schema.json +45 -30
  361. package/dist/schemas/onchain_operations_proof.schema.json +8 -1
  362. package/dist/schemas/onchain_operations_repository.schema.json +8 -1
  363. package/dist/schemas/onchain_operations_reward.schema.json +32 -17
  364. package/dist/schemas/onchain_operations_service.schema.json +221 -124
  365. package/dist/schemas/onchain_operations_treasury.schema.json +32 -17
  366. package/dist/schemas/onchain_table_data.output.json +258 -6
  367. package/dist/schemas/onchain_table_data.schema.json +92 -52
  368. package/dist/schemas/persona_operation.output.json +7752 -0
  369. package/dist/schemas/persona_operation.schema.json +1232 -4
  370. package/dist/schemas/query_toolkit.output.json +756 -116
  371. package/dist/schemas/query_toolkit.schema.json +138 -7
  372. package/dist/schemas/schema_query.schema.json +1 -1
  373. package/dist/schemas/watch_operation.output.json +83 -0
  374. package/dist/schemas/wip_file.output.json +8 -0
  375. package/dist/schemas/workflow_operation.schema.json +2 -2
  376. package/dist/tools/handlers/benchmark-migration.d.ts +11 -3
  377. package/dist/tools/handlers/benchmark-migration.js +1 -1
  378. package/dist/tools/handlers/config.js +1 -1
  379. package/dist/tools/handlers/evaluation.js +1 -1
  380. package/dist/tools/handlers/evaluation.spec.js +1 -1
  381. package/dist/tools/handlers/industry-pack.js +1 -1
  382. package/dist/tools/handlers/onchain.d.ts +20 -0
  383. package/dist/tools/handlers/onchain.js +1 -1
  384. package/dist/tools/handlers/persona.js +1 -1
  385. package/dist/tools/handlers/query.d.ts +8 -0
  386. package/dist/tools/handlers/query.js +1 -1
  387. package/dist/tools/handlers/winner-derivation.d.ts +20 -0
  388. package/dist/tools/handlers/winner-derivation.js +1 -0
  389. package/dist/tools/handlers/wip-upload.js +1 -1
  390. package/dist/tools/index.d.ts +1 -0
  391. package/dist/tools/index.js +1 -1
  392. package/dist/tools/registry/business.js +1 -1
  393. package/dist/tools/registry/config.js +1 -1
  394. package/dist/tools/registry/evaluation.js +1 -1
  395. package/dist/tools/registry/identity.js +1 -1
  396. package/dist/tools/registry/query.js +1 -1
  397. package/dist/tools/transport-integrity.d.ts +7 -0
  398. package/dist/tools/transport-integrity.js +1 -0
  399. package/dist/tools/upgrade-check.js +1 -1
  400. package/dist/tools/wrap.d.ts +5 -0
  401. package/dist/tools/wrap.js +1 -1
  402. package/package.json +2 -2
  403. package/dist/extensions/business-modules.d.ts +0 -54
  404. package/dist/extensions/business-modules.js +0 -1
  405. package/dist/schemas/guard-templates.json +0 -379
@@ -1 +1 @@
1
- import{MAX_NAMED_OPERATOR_COUNT,MAX_NAMED_OPERATOR_ADDRESS_COUNT,MAX_CONTEXT_REPOSITORY_COUNT}from'@wowok/wowok';export{MAX_NAMED_OPERATOR_COUNT,MAX_NAMED_OPERATOR_ADDRESS_COUNT,MAX_CONTEXT_REPOSITORY_COUNT};export const PROGRESS_NEW={'index':0xdc,'name':'PROGRESS_NEW','description':'Create\x20new\x20Progress\x20(asserted\x20on\x20direct\x20Progress\x20creation)','governed_operations':['direct\x20Progress\x20creation','passport-guarded\x20Progress\x20creation'],'sdk_exposed':![]};export const PROGRESS_NAMED_OPERATOR={'index':0xdd,'name':'PROGRESS_NAMED_OPERATOR','description':'Manage\x20named\x20operators\x20(add/set/remove)\x20for\x20the\x20namedOperator\x20namespace','governed_operations':['progress::namedOperator_add','progress::namedOperator_set','progress::namedOperator_remove','progress::namedOperator_add_with_passport','progress::namedOperator_set_with_passport','progress::namedOperator_remove_with_passport'],'sdk_exposed':!![]};export const PROGRESS_TASK={'index':0xde,'name':'PROGRESS_TASK','description':'Submit\x20task\x20(one-time,\x20immutable\x20once\x20set\x20—\x20E_TASK_ALREADY_SET)','governed_operations':['submit\x20the\x20task\x20(one-time)','submit\x20the\x20task\x20with\x20a\x20passport'],'sdk_exposed':!![]};export const PROGRESS_CONTEXT_REPOSITORY={'index':0xdf,'name':'PROGRESS_CONTEXT_REPOSITORY','description':'Bind/unbind\x20context\x20Repository\x20(≤\x20MAX_CONTEXT_REPOSITORY_COUNT=30)','governed_operations':['bind\x20a\x20context\x20repository','unbind\x20a\x20context\x20repository','clear\x20all\x20context\x20repositories','bind\x20a\x20context\x20repository\x20(passport-guarded)','unbind\x20a\x20context\x20repository\x20(passport-guarded)','clear\x20all\x20context\x20repositories\x20(passport-guarded)'],'sdk_exposed':!![]};export const PROGRESS_UNHOLD={'index':0xe0,'name':'PROGRESS_UNHOLD','description':'Force\x20unhold\x20(adminUnhold)\x20—\x20bypasses\x20holder\x20check,\x20releases\x20blocked\x20forward','governed_operations':['force\x20unhold\x20(adminUnhold)','force\x20unhold\x20via\x20passport'],'sdk_exposed':!![]};export const PROGRESS_OWNER_RECEIVE={'index':0xe1,'name':'PROGRESS_OWNER_RECEIVE','description':'Owner\x20receives\x20objects/coins\x20(unwrap\x20Receiving<K>\x20→\x20owner)','governed_operations':['owner\x20receives\x20coins','owner\x20receives\x20a\x20generic\x20object','owner\x20receives\x20coins\x20via\x20passport','owner\x20receives\x20a\x20generic\x20object\x20via\x20passport'],'sdk_exposed':![]};export const PROGRESS_PERMISSIONS=[PROGRESS_NEW,PROGRESS_NAMED_OPERATOR,PROGRESS_TASK,PROGRESS_CONTEXT_REPOSITORY,PROGRESS_UNHOLD,PROGRESS_OWNER_RECEIVE];export const PROGRESS_SCENES=[{'id':'progress_task_submit','name':'Task\x20submission\x20&\x20binding\x20workflow','industry':['universal','ecommerce','logistics','education'],'scenario':'Submit\x20a\x20task\x20(Order/Reward/etc.)\x20to\x20Progress\x20via\x20task\x20submission.\x20'+'Task\x20is\x20one-time,\x20immutable\x20—\x20once\x20set,\x20E_TASK_ALREADY_SET\x20blocks\x20any\x20re-assignment.\x20'+'Binds\x20Progress\x201:1\x20to\x20the\x20task\x20object\x20for\x20the\x20rest\x20of\x20its\x20lifecycle.','phases':['task_binding','forward_advance'],'requires_published_machine':!![],'requires_order_bound':!![],'named_operator_roles':[],'builtin_indexes_consumed':[PROGRESS_TASK],'typical_context_repository_count':0x0,'uses_hold_mechanism':![],'uses_admin_unhold':![],'common_patterns':['Task\x20submission\x20is\x20one-time:\x20verify\x20task\x20address\x20before\x20submission\x20(E_TASK_ALREADY_SET\x20blocks\x20reset)','task\x20is\x20usually\x20an\x20Order\x20created\x20by\x20the\x20buy\x20flow\x20→\x20Progress.task\x20=\x20Order\x20address','Without\x20task,\x20Forward\x20advancement\x20falls\x20back\x20to\x20non-order\x20next()/hold()\x20paths'],'recommended_templates':['T-PR-01']},{'id':'progress_named_operator','name':'Named\x20operator\x20namespace\x20management','industry':['universal','logistics','arbitration','freelance'],'scenario':'Manage\x20named_operator\x20namespace\x20for\x20a\x20Progress.\x20Each\x20named\x20operator\x20is\x20a\x20(name\x20→\x20address\x20list)\x20'+'binding\x20used\x20by\x20Machine.forward.namedOperator\x20to\x20gate\x20next()/hold()\x20advancement.\x20'+'Up\x20to\x2060\x20named\x20operators\x20per\x20Progress,\x20up\x20to\x2080\x20addresses\x20per\x20operator.','phases':['named_operator_mgmt'],'requires_published_machine':!![],'requires_order_bound':![],'named_operator_roles':[{'role':'seller','typical_count':0x1},{'role':'logistics','typical_count':0x1},{'role':'reviewer','typical_count':0x3},{'role':'arbitrator','typical_count':0x5}],'builtin_indexes_consumed':[PROGRESS_NAMED_OPERATOR],'typical_context_repository_count':0x0,'uses_hold_mechanism':![],'uses_admin_unhold':![],'common_patterns':['namedOperator\x20name=\x27\x27:\x20special\x20case\x20—\x20means\x20OrderHolder\x20(order.owner/agent),\x20NOT\x20a\x20real\x20named\x20operator','add/set/remove\x20are\x20idempotent\x20on\x20duplicate\x20addresses\x20(vector::contains\x20check\x20before\x20push)','Use\x20\x27set\x27\x20to\x20REPLACE\x20an\x20operator\x27s\x20address\x20list;\x20use\x20\x27add\x27\x20to\x20extend;\x20\x27remove\x27\x20to\x20subtract','Names\x20must\x20satisfy\x20common::NAME\x20(isValidName)\x20—\x20non-empty,\x20length-bounded'],'recommended_templates':['T-PR-01','T-PR-02']},{'id':'progress_unhold','name':'Hold\x20release\x20(unhold\x20/\x20adminUnhold)\x20workflow','industry':['content','rental','arbitration','subscription'],'scenario':'Release\x20a\x20forward\x20that\x20was\x20previously\x20held.\x20Two\x20paths:\x20'+'(a)\x20unhold\x20by\x20original\x20holder\x20(named_operator\x20match);\x20'+'(b)\x20adminUnhold\x20(224)\x20by\x20permission-table\x20holder\x20—\x20bypasses\x20holder\x20check.\x20'+'adminUnhold\x20is\x20the\x20deadlock-resolution\x20escape\x20hatch\x20when\x20a\x20holder\x20is\x20unresponsive.','phases':['hold_state','unhold_state'],'requires_published_machine':!![],'requires_order_bound':!![],'named_operator_roles':[{'role':'holder','typical_count':0x1},{'role':'admin','typical_count':0x1}],'builtin_indexes_consumed':[PROGRESS_UNHOLD],'typical_context_repository_count':0x0,'uses_hold_mechanism':!![],'uses_admin_unhold':!![],'common_patterns':['unhold\x20checks\x20whether\x20the\x20sender\x20holds\x20permission\x20index\x20224:\x20if\x20yes,\x20force\x20release;\x20if\x20no,\x20require\x20holder\x20match','adminUnhold\x20has\x20wider\x20blast\x20radius\x20—\x20only\x20grant\x20224\x20to\x20trusted\x20recovery\x20operators','If\x20forward\x20already\x20accomplished,\x20E_FORWARD_ALREADY_ACCOMPLISHED\x20blocks\x20re-hold','Repeated\x20hold/unhold\x20cycles\x20indicate\x20a\x20stuck\x20workflow\x20—\x20surface\x20to\x20order-monitor'],'recommended_templates':['T-PR-05']},{'id':'progress_context_repository','name':'Context\x20Repository\x20binding\x20workflow','industry':['education','content','rental','cross_chain'],'scenario':'Bind/unbind\x20Repository\x20objects\x20as\x20Progress\x20context_repositories.\x20'+'Used\x20to\x20provide\x20query-time\x20context\x20(learning\x20progress,\x20inspection\x20records,\x20bridge\x20state).\x20'+'Up\x20to\x20MAX_CONTEXT_REPOSITORY_COUNT=30\x20repositories\x20per\x20Progress.','phases':['context_binding'],'requires_published_machine':!![],'requires_order_bound':![],'named_operator_roles':[],'builtin_indexes_consumed':[PROGRESS_CONTEXT_REPOSITORY],'typical_context_repository_count':0x3,'uses_hold_mechanism':![],'uses_admin_unhold':![],'common_patterns':['Binding\x20a\x20context\x20repository\x20registers\x20the\x20link\x20through\x20an\x20affiliation\x20transaction\x20(enables\x20cross-object\x20queries)','Unbinding\x20disaffiliates\x20the\x20link\x20—\x20Repository\x20may\x20be\x20garbage-collected\x20if\x20no\x20other\x20refs','Clearing\x20empties\x20the\x20entire\x20list\x20in\x20one\x20transaction','add\x20is\x20idempotent:\x20if\x20Repository\x20already\x20in\x20list,\x20no-op\x20(vector::contains\x20check)','Bind\x20before\x20forward\x20advance\x20so\x20on-chain\x20guards\x20can\x20read\x20context\x20data'],'recommended_templates':['T-PR-03']},{'id':'progress_owner_receive','name':'Owner\x20receive\x20(unwrap)\x20workflow','industry':['finance','treasury','rental','freelance'],'scenario':'Owner\x20receives\x20Receiving<K>\x20objects\x20or\x20CoinWrapper<T>\x20coins\x20sent\x20to\x20the\x20Progress\x20object.\x20'+'unwrap\x20→\x20forwarded\x20to\x20the\x20Permission\x20owner\x20through\x20the\x20permission\x20owner-receive\x20path.\x20'+'Used\x20at\x20terminal\x20nodes\x20(return_approved,\x20completed,\x20enforced)\x20to\x20disburse\x20funds.','phases':['owner_receive'],'requires_published_machine':!![],'requires_order_bound':!![],'named_operator_roles':[],'builtin_indexes_consumed':[PROGRESS_OWNER_RECEIVE],'typical_context_repository_count':0x0,'uses_hold_mechanism':![],'uses_admin_unhold':![],'common_patterns':['owner_receive\x20unwraps\x20CoinWrapper<T>\x20via\x20the\x20payment\x27s\x20type-checked\x20unwrap\x20(amount\x20validation)','Receiving\x20a\x20generic\x20K:key+store\x20object\x20forwards\x20it\x20to\x20the\x20Permission\x20owner','Triggered\x20at\x20terminal\x20nodes\x20(e.g.\x20\x27return_approved\x27\x20in\x20rental,\x20\x27enforced\x27\x20in\x20arbitration)','Permission\x20owner\x20≠\x20Progress\x20creator:\x20receives\x20flow\x20to\x20whoever\x20owns\x20the\x20bound\x20Machine\x27s\x20Permission'],'recommended_templates':['T-PR-06']},{'id':'progress_completed','name':'Forward\x20advancement\x20&\x20session\x20completion','industry':['universal'],'scenario':'Advance\x20Progress\x20via\x20next()\x20/\x20the\x20order-holder\x20advancement\x20path\x20—\x20accumulates\x20weights\x20in\x20session.forwards,\x20'+'and\x20when\x20weights\x20≥\x20threshold,\x20moves\x20session\x20into\x20history\x20and\x20updates\x20Progress.current.\x20'+'This\x20is\x20the\x20canonical\x20Forward\x20advancement\x20path\x20for\x20ALL\x20non-hold\x20operations.','phases':['forward_advance','completed'],'requires_published_machine':!![],'requires_order_bound':!![],'named_operator_roles':[{'role':'OrderHolder','typical_count':0x1},{'role':'next_node_operator','typical_count':0x1}],'builtin_indexes_consumed':[],'typical_context_repository_count':0x0,'uses_hold_mechanism':![],'uses_admin_unhold':![],'common_patterns':['Forward\x20guard\x20(Some):\x20requires\x20Passport;\x20the\x20passport\x20verification\x20against\x20the\x20guard\x20must\x20pass','Forward\x20guard\x20(None):\x20requires\x20permissionIndex\x20(Some)\x20or\x20namedOperator\x20match\x20(ASSERT_PERMISSION)','session.weights\x20+=\x20forward.weight;\x20when\x20≥\x20threshold,\x20push\x20session\x20into\x20ParentTableVec<History>','Progress.current\x20=\x20next_node\x20only\x20after\x20session\x20completes\x20(atomic\x20update)','E_NOT_THE_HOLDER:\x20if\x20forward\x20was\x20held\x20by\x20another\x20address,\x20next()\x20aborts','E_FORWARD_ALREADY_ACCOMPLISHED:\x20re-hold\x20on\x20completed\x20forward\x20is\x20blocked','⚠\x20ROUTING\x20FACT:\x20Forward.namedOperator=\x22\x22\x20(empty)\x20→\x20order-bound\x20entry\x20only\x20(order.progress,\x20or\x20'+'progress.operate\x20which\x20auto-routes\x20when\x20the\x20Progress\x20task\x20is\x20an\x20Order).\x20Non-empty\x20namedOperator\x20or\x20'+'permissionIndex-only\x20→\x20either\x20entry\x20(identical\x20checks).\x20A\x20standalone\x20Progress\x20cannot\x20advance\x20\x22\x22\x20'+'forwards\x20at\x20all\x20(abort\x208\x20—\x20no\x20order\x20payer\x20exists).\x20See\x20file\x20header\x20ROUTING\x20FACTS.'],'recommended_templates':['T-PR-04']}];export const PROGRESS_LEDGER_VERSION='1.0.0';export function getScenesByPhase(a){return PROGRESS_SCENES['filter'](b=>b['phases']['includes'](a));}export function findSceneById(a){return PROGRESS_SCENES['find'](b=>b['id']===a);}export function getScenesByIndustry(a){return PROGRESS_SCENES['filter'](b=>b['industry']['includes'](a)||b['industry']['includes']('universal'));}export function getBuiltinPermissionByIndex(a){return PROGRESS_PERMISSIONS['find'](b=>b['index']===a);}export function isProgressBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['adminunhold','progress_unhold'],['admin\x20unhold','progress_unhold'],['force\x20unhold','progress_unhold'],['unhold','progress_unhold'],['release\x20hold','progress_unhold'],['owner_receive','progress_owner_receive'],['owner\x20receive','progress_owner_receive'],['unwrap','progress_owner_receive'],['context_repository','progress_context_repository'],['context\x20repository','progress_context_repository'],['repository\x20binding','progress_context_repository'],['named_operator','progress_named_operator'],['named\x20operator','progress_named_operator'],['namedoperator','progress_named_operator'],['task\x20set','progress_task_submit'],['submit\x20task','progress_task_submit'],['next','progress_completed'],['advance','progress_completed'],['complete','progress_completed']];for(const [d,e]of c){if(b['includes'](d)){const f=findSceneById(e);if(f)return f;}}return undefined;}export function getAllBuiltinPermissions(){return[...PROGRESS_PERMISSIONS];}export function getProgressScenesCount(){return PROGRESS_SCENES['length'];}export function validateNamedOperatorAddressList(b){const c=[];b['length']>MAX_NAMED_OPERATOR_ADDRESS_COUNT&&c['push']('Named\x20operator\x20address\x20count\x20'+b['length']+'\x20exceeds\x20MAX_NAMED_OPERATOR_ADDRESS_COUNT\x20'+MAX_NAMED_OPERATOR_ADDRESS_COUNT);const d=new Set();for(const e of b){if(d['has'](e)){c['push']('Duplicate\x20address\x20in\x20list:\x20'+e+'\x20(Move\x20will\x20dedupe\x20silently)');break;}d['add'](e);}return{'ok':c['length']===0x0,'violations':c};}export function validateNamedOperatorCount(a){if(a>=MAX_NAMED_OPERATOR_COUNT)return{'ok':![],'violation':'Named\x20operator\x20count\x20'+a+'\x20would\x20exceed\x20MAX_NAMED_OPERATOR_COUNT\x20'+MAX_NAMED_OPERATOR_COUNT};return{'ok':!![]};}export function validateContextRepositoryCount(a,b){const c=a+b;if(c>MAX_CONTEXT_REPOSITORY_COUNT)return{'ok':![],'violation':'Context\x20repository\x20count\x20'+c+'\x20would\x20exceed\x20MAX_CONTEXT_REPOSITORY_COUNT\x20'+MAX_CONTEXT_REPOSITORY_COUNT};return{'ok':!![]};}export const PROGRESS_CROSS_OBJECT_REFS=[{'object':'Machine','phase':'universal','relationship':'Progress.machine\x20(immutable\x20bind,\x20E_MACHINE_NOT_MATCH\x20on\x20every\x20op)'},{'object':'Order','phase':'forward_advance','relationship':'Progress.task\x20=\x20Order.address\x20(1:1,\x20set\x20via\x20task\x20submission\x20or\x20the\x20buy\x20flow)'},{'object':'Order','phase':'forward_advance','relationship':'order-holder\x20paths\x20(advance\x20/\x20hold):\x20the\x20order\x20owner-or-agent\x20permission\x20check\x20gates\x20Forward\x20advance'},{'object':'Permission','phase':'universal','relationship':'Machine.permission\x20is\x20borrowed\x20for\x20ALL\x20220-225\x20assertions'},{'object':'Repository','phase':'context_binding','relationship':'context_repositories:\x20vector<address>\x20(≤\x2030),\x20bound\x20via\x20an\x20affiliation\x20transaction'},{'object':'Service','phase':'creation','relationship':'the\x20buy\x20flow\x20creates\x20the\x20Progress\x20internally\x20(bypasses\x20220\x20assertion\x20—\x20package-internal\x20entry)'},{'object':'Passport','phase':'forward_advance','relationship':'Forward.guard\x20(Some)\x20requires\x20Passport\x20+\x20passing\x20the\x20passport\x20verification'},{'object':'Passport','phase':'unhold_state','relationship':'passport-based\x20unhold:\x20224\x20check\x20via\x20passport\x20(fallback\x20when\x20the\x20sender\x27s\x20direct\x20224\x20permission\x20check\x20fails)'},{'object':'Payment','phase':'owner_receive','relationship':'owner_receive\x20unwraps\x20CoinWrapper<T>\x20via\x20the\x20payment\x27s\x20type-checked\x20unwrap'},{'object':'Allocation','phase':'completed','relationship':'Terminal\x20node\x20triggers\x20Allocation\x20alloc\x20(e.g.\x20\x27completed\x27,\x20\x27enforced\x27,\x20\x27return_approved\x27)'}];
1
+ import{MAX_NAMED_OPERATOR_COUNT,MAX_NAMED_OPERATOR_ADDRESS_COUNT,MAX_CONTEXT_REPOSITORY_COUNT}from'@wowok/wowok';export{MAX_NAMED_OPERATOR_COUNT,MAX_NAMED_OPERATOR_ADDRESS_COUNT,MAX_CONTEXT_REPOSITORY_COUNT};export const PROGRESS_NEW={'index':0xdc,'name':'PROGRESS_NEW','description':'Create\x20new\x20Progress\x20(asserted\x20on\x20direct\x20Progress\x20creation)','governed_operations':['direct\x20Progress\x20creation','passport-guarded\x20Progress\x20creation'],'sdk_exposed':![]};export const PROGRESS_NAMED_OPERATOR={'index':0xdd,'name':'PROGRESS_NAMED_OPERATOR','description':'Manage\x20named\x20operators\x20(add/set/remove)\x20for\x20the\x20namedOperator\x20namespace','governed_operations':['progress::namedOperator_add','progress::namedOperator_set','progress::namedOperator_remove','progress::namedOperator_add_with_passport','progress::namedOperator_set_with_passport','progress::namedOperator_remove_with_passport'],'sdk_exposed':!![]};export const PROGRESS_TASK={'index':0xde,'name':'PROGRESS_TASK','description':'Submit\x20task\x20(one-time,\x20immutable\x20once\x20set\x20—\x20E_TASK_ALREADY_SET)','governed_operations':['submit\x20the\x20task\x20(one-time)','submit\x20the\x20task\x20with\x20a\x20passport'],'sdk_exposed':!![]};export const PROGRESS_CONTEXT_REPOSITORY={'index':0xdf,'name':'PROGRESS_CONTEXT_REPOSITORY','description':'Bind/unbind\x20context\x20Repository\x20(≤\x20MAX_CONTEXT_REPOSITORY_COUNT=30)','governed_operations':['bind\x20a\x20context\x20repository','unbind\x20a\x20context\x20repository','clear\x20all\x20context\x20repositories','bind\x20a\x20context\x20repository\x20(passport-guarded)','unbind\x20a\x20context\x20repository\x20(passport-guarded)','clear\x20all\x20context\x20repositories\x20(passport-guarded)'],'sdk_exposed':!![]};export const PROGRESS_UNHOLD={'index':0xe0,'name':'PROGRESS_UNHOLD','description':'Force\x20unhold\x20(adminUnhold)\x20—\x20bypasses\x20holder\x20check,\x20releases\x20blocked\x20forward','governed_operations':['force\x20unhold\x20(adminUnhold)','force\x20unhold\x20via\x20passport'],'sdk_exposed':!![]};export const PROGRESS_OWNER_RECEIVE={'index':0xe1,'name':'PROGRESS_OWNER_RECEIVE','description':'Owner\x20receives\x20objects/coins\x20(unwrap\x20Receiving<K>\x20→\x20owner)','governed_operations':['owner\x20receives\x20coins','owner\x20receives\x20a\x20generic\x20object','owner\x20receives\x20coins\x20via\x20passport','owner\x20receives\x20a\x20generic\x20object\x20via\x20passport'],'sdk_exposed':![]};export const PROGRESS_PERMISSIONS=[PROGRESS_NEW,PROGRESS_NAMED_OPERATOR,PROGRESS_TASK,PROGRESS_CONTEXT_REPOSITORY,PROGRESS_UNHOLD,PROGRESS_OWNER_RECEIVE];export const PROGRESS_SCENES=[{'id':'progress_task_submit','name':'Task\x20submission\x20&\x20binding\x20workflow','industry':['universal','ecommerce','logistics','education'],'scenario':'Submit\x20a\x20task\x20(Order/Reward/etc.)\x20to\x20Progress\x20via\x20task\x20submission.\x20'+'Task\x20is\x20one-time,\x20immutable\x20—\x20once\x20set,\x20E_TASK_ALREADY_SET\x20blocks\x20any\x20re-assignment.\x20'+'Binds\x20Progress\x201:1\x20to\x20the\x20task\x20object\x20for\x20the\x20rest\x20of\x20its\x20lifecycle.','phases':['task_binding','forward_advance'],'requires_published_machine':!![],'requires_order_bound':!![],'named_operator_roles':[],'builtin_indexes_consumed':[PROGRESS_TASK],'typical_context_repository_count':0x0,'uses_hold_mechanism':![],'uses_admin_unhold':![],'common_patterns':['Task\x20submission\x20is\x20one-time:\x20verify\x20task\x20address\x20before\x20submission\x20(E_TASK_ALREADY_SET\x20blocks\x20reset)','task\x20is\x20usually\x20an\x20Order\x20created\x20by\x20the\x20buy\x20flow\x20→\x20Progress.task\x20=\x20Order\x20address','Without\x20task,\x20Forward\x20advancement\x20falls\x20back\x20to\x20non-order\x20next()/hold()\x20paths'],'recommended_templates':['T-PR-01']},{'id':'progress_named_operator','name':'Named\x20operator\x20namespace\x20management','industry':['universal','logistics','arbitration','freelance'],'scenario':'Manage\x20named_operator\x20namespace\x20for\x20a\x20Progress.\x20Each\x20named\x20operator\x20is\x20a\x20(name\x20→\x20address\x20list)\x20'+'binding\x20used\x20by\x20Machine.forward.namedOperator\x20to\x20gate\x20next()/hold()\x20advancement.\x20'+'Up\x20to\x2060\x20named\x20operators\x20per\x20Progress,\x20up\x20to\x2080\x20addresses\x20per\x20operator.','phases':['named_operator_mgmt'],'requires_published_machine':!![],'requires_order_bound':![],'named_operator_roles':[{'role':'seller','typical_count':0x1},{'role':'logistics','typical_count':0x1},{'role':'reviewer','typical_count':0x3},{'role':'arbitrator','typical_count':0x5}],'builtin_indexes_consumed':[PROGRESS_NAMED_OPERATOR],'typical_context_repository_count':0x0,'uses_hold_mechanism':![],'uses_admin_unhold':![],'common_patterns':['namedOperator\x20name=\x27\x27:\x20special\x20case\x20—\x20means\x20OrderHolder\x20(order.owner/agent),\x20NOT\x20a\x20real\x20named\x20operator','add/set/remove\x20are\x20idempotent\x20on\x20duplicate\x20addresses\x20(vector::contains\x20check\x20before\x20push)','Use\x20\x27set\x27\x20to\x20REPLACE\x20an\x20operator\x27s\x20address\x20list;\x20use\x20\x27add\x27\x20to\x20extend;\x20\x27remove\x27\x20to\x20subtract','Names\x20must\x20satisfy\x20common::NAME\x20(isValidName)\x20—\x20non-empty,\x20length-bounded'],'recommended_templates':['T-PR-01','T-PR-02']},{'id':'progress_unhold','name':'Hold\x20release\x20(unhold\x20/\x20adminUnhold)\x20workflow','industry':['content','rental','arbitration','subscription'],'scenario':'Release\x20a\x20forward\x20that\x20was\x20previously\x20held.\x20Two\x20paths:\x20'+'(a)\x20unhold\x20by\x20original\x20holder\x20(named_operator\x20match);\x20'+'(b)\x20adminUnhold\x20(224)\x20by\x20permission-table\x20holder\x20—\x20bypasses\x20holder\x20check.\x20'+'adminUnhold\x20is\x20the\x20deadlock-resolution\x20escape\x20hatch\x20when\x20a\x20holder\x20is\x20unresponsive.','phases':['hold_state','unhold_state'],'requires_published_machine':!![],'requires_order_bound':!![],'named_operator_roles':[{'role':'holder','typical_count':0x1},{'role':'admin','typical_count':0x1}],'builtin_indexes_consumed':[PROGRESS_UNHOLD],'typical_context_repository_count':0x0,'uses_hold_mechanism':!![],'uses_admin_unhold':!![],'common_patterns':['unhold\x20checks\x20whether\x20the\x20sender\x20holds\x20permission\x20index\x20224:\x20if\x20yes,\x20force\x20release;\x20if\x20no,\x20require\x20holder\x20match','adminUnhold\x20has\x20wider\x20blast\x20radius\x20—\x20only\x20grant\x20224\x20to\x20trusted\x20recovery\x20operators','If\x20forward\x20already\x20accomplished,\x20E_FORWARD_ALREADY_ACCOMPLISHED\x20blocks\x20re-hold','Repeated\x20hold/unhold\x20cycles\x20indicate\x20a\x20stuck\x20workflow\x20—\x20surface\x20to\x20order-monitor'],'recommended_templates':['T-PR-05']},{'id':'progress_context_repository','name':'Context\x20Repository\x20binding\x20workflow','industry':['education','content','rental','cross_chain'],'scenario':'Bind/unbind\x20Repository\x20objects\x20as\x20Progress\x20context_repositories.\x20'+'Used\x20to\x20provide\x20query-time\x20context\x20(learning\x20progress,\x20inspection\x20records,\x20bridge\x20state).\x20'+'Up\x20to\x20MAX_CONTEXT_REPOSITORY_COUNT=30\x20repositories\x20per\x20Progress.','phases':['context_binding'],'requires_published_machine':!![],'requires_order_bound':![],'named_operator_roles':[],'builtin_indexes_consumed':[PROGRESS_CONTEXT_REPOSITORY],'typical_context_repository_count':0x3,'uses_hold_mechanism':![],'uses_admin_unhold':![],'common_patterns':['Binding\x20a\x20context\x20repository\x20registers\x20the\x20link\x20through\x20an\x20affiliation\x20transaction\x20(enables\x20cross-object\x20queries)','Unbinding\x20disaffiliates\x20the\x20link\x20—\x20Repository\x20may\x20be\x20garbage-collected\x20if\x20no\x20other\x20refs','Clearing\x20empties\x20the\x20entire\x20list\x20in\x20one\x20transaction','add\x20is\x20idempotent:\x20if\x20Repository\x20already\x20in\x20list,\x20no-op\x20(vector::contains\x20check)','Bind\x20before\x20forward\x20advance\x20so\x20on-chain\x20guards\x20can\x20read\x20context\x20data'],'recommended_templates':['T-PR-03']},{'id':'progress_owner_receive','name':'Owner\x20receive\x20(unwrap)\x20workflow','industry':['finance','treasury','rental','freelance'],'scenario':'Owner\x20receives\x20Receiving<K>\x20objects\x20or\x20CoinWrapper<T>\x20coins\x20sent\x20to\x20the\x20Progress\x20object.\x20'+'unwrap\x20→\x20forwarded\x20to\x20the\x20Permission\x20owner\x20through\x20the\x20permission\x20owner-receive\x20path.\x20'+'Used\x20at\x20terminal\x20nodes\x20(return_approved,\x20completed,\x20enforced)\x20to\x20disburse\x20funds.','phases':['owner_receive'],'requires_published_machine':!![],'requires_order_bound':!![],'named_operator_roles':[],'builtin_indexes_consumed':[PROGRESS_OWNER_RECEIVE],'typical_context_repository_count':0x0,'uses_hold_mechanism':![],'uses_admin_unhold':![],'common_patterns':['owner_receive\x20unwraps\x20CoinWrapper<T>\x20via\x20the\x20payment\x27s\x20type-checked\x20unwrap\x20(amount\x20validation)','Receiving\x20a\x20generic\x20K:key+store\x20object\x20forwards\x20it\x20to\x20the\x20Permission\x20owner','Triggered\x20at\x20terminal\x20nodes\x20(e.g.\x20\x27return_approved\x27\x20in\x20rental,\x20\x27enforced\x27\x20in\x20arbitration)','Permission\x20owner\x20≠\x20Progress\x20creator:\x20receives\x20flow\x20to\x20whoever\x20owns\x20the\x20bound\x20Machine\x27s\x20Permission'],'recommended_templates':['T-PR-06']},{'id':'progress_completed','name':'Forward\x20advancement\x20&\x20session\x20completion','industry':['universal'],'scenario':'Advance\x20Progress\x20via\x20next()\x20/\x20the\x20order-holder\x20advancement\x20path\x20—\x20accumulates\x20weights\x20in\x20session.forwards,\x20'+'and\x20when\x20weights\x20≥\x20threshold,\x20moves\x20session\x20into\x20history\x20and\x20updates\x20Progress.current.\x20'+'This\x20is\x20the\x20canonical\x20Forward\x20advancement\x20path\x20for\x20ALL\x20non-hold\x20operations.','phases':['forward_advance','completed'],'requires_published_machine':!![],'requires_order_bound':!![],'named_operator_roles':[{'role':'OrderHolder','typical_count':0x1},{'role':'next_node_operator','typical_count':0x1}],'builtin_indexes_consumed':[],'typical_context_repository_count':0x0,'uses_hold_mechanism':![],'uses_admin_unhold':![],'common_patterns':['Forward\x20guard\x20(Some):\x20requires\x20Passport;\x20the\x20passport\x20verification\x20against\x20the\x20guard\x20must\x20pass','Forward\x20guard\x20(None):\x20requires\x20permissionIndex\x20(Some)\x20or\x20namedOperator\x20match\x20(ASSERT_PERMISSION)','session.weights\x20+=\x20forward.weight;\x20when\x20≥\x20threshold,\x20push\x20session\x20into\x20ParentTableVec<History>','Progress.current\x20=\x20next_node\x20only\x20after\x20session\x20completes\x20(atomic\x20update)','E_NOT_THE_HOLDER:\x20if\x20forward\x20was\x20held\x20by\x20another\x20address,\x20next()\x20aborts','E_FORWARD_ALREADY_ACCOMPLISHED:\x20re-hold\x20on\x20completed\x20forward\x20is\x20blocked','E_ORDER_PAYER_REQUIRED\x20(abort\x2013):\x20a\x20\x22\x22-namedOperator\x20forward\x20is\x20payer-only\x20—\x20advance\x20as\x20the\x20'+'order\x20payer\x20on\x20the\x20order-bound\x20entry;\x20a\x20taskless\x20Progress\x20fails\x20closed\x20on\x20any\x20entry','⚠\x20ROUTING\x20FACT:\x20Forward.namedOperator=\x22\x22\x20(empty)\x20→\x20order-bound\x20entry\x20only\x20(order.progress,\x20or\x20'+'progress.operate\x20which\x20auto-routes\x20when\x20the\x20Progress\x20task\x20is\x20an\x20Order).\x20Non-empty\x20namedOperator\x20or\x20'+'permissionIndex-only\x20→\x20either\x20entry\x20(identical\x20checks).\x20A\x20standalone\x20Progress\x20cannot\x20advance\x20\x22\x22\x20'+'forwards\x20at\x20all\x20(abort\x2013\x20—\x20E_ORDER_PAYER_REQUIRED,\x20fail-closed:\x20no\x20payer\x20to\x20name;\x20a\x20task-bound\x20'+'Progress\x20driven\x20off\x20the\x20order\x20path\x20by\x20a\x20non-payer\x20aborts\x20with\x20the\x20same\x20code).\x20See\x20file\x20header\x20ROUTING\x20FACTS.'],'recommended_templates':['T-PR-04']}];export const PROGRESS_LEDGER_VERSION='1.0.0';export function getScenesByPhase(a){return PROGRESS_SCENES['filter'](b=>b['phases']['includes'](a));}export function findSceneById(a){return PROGRESS_SCENES['find'](b=>b['id']===a);}export function getScenesByIndustry(a){return PROGRESS_SCENES['filter'](b=>b['industry']['includes'](a)||b['industry']['includes']('universal'));}export function getBuiltinPermissionByIndex(a){return PROGRESS_PERMISSIONS['find'](b=>b['index']===a);}export function isProgressBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['adminunhold','progress_unhold'],['admin\x20unhold','progress_unhold'],['force\x20unhold','progress_unhold'],['unhold','progress_unhold'],['release\x20hold','progress_unhold'],['owner_receive','progress_owner_receive'],['owner\x20receive','progress_owner_receive'],['unwrap','progress_owner_receive'],['context_repository','progress_context_repository'],['context\x20repository','progress_context_repository'],['repository\x20binding','progress_context_repository'],['named_operator','progress_named_operator'],['named\x20operator','progress_named_operator'],['namedoperator','progress_named_operator'],['task\x20set','progress_task_submit'],['submit\x20task','progress_task_submit'],['next','progress_completed'],['advance','progress_completed'],['complete','progress_completed']];for(const [d,e]of c){if(b['includes'](d)){const f=findSceneById(e);if(f)return f;}}return undefined;}export function getAllBuiltinPermissions(){return[...PROGRESS_PERMISSIONS];}export function getProgressScenesCount(){return PROGRESS_SCENES['length'];}export function validateNamedOperatorAddressList(b){const c=[];b['length']>MAX_NAMED_OPERATOR_ADDRESS_COUNT&&c['push']('Named\x20operator\x20address\x20count\x20'+b['length']+'\x20exceeds\x20MAX_NAMED_OPERATOR_ADDRESS_COUNT\x20'+MAX_NAMED_OPERATOR_ADDRESS_COUNT);const d=new Set();for(const e of b){if(d['has'](e)){c['push']('Duplicate\x20address\x20in\x20list:\x20'+e+'\x20(Move\x20will\x20dedupe\x20silently)');break;}d['add'](e);}return{'ok':c['length']===0x0,'violations':c};}export function validateNamedOperatorCount(a){if(a>=MAX_NAMED_OPERATOR_COUNT)return{'ok':![],'violation':'Named\x20operator\x20count\x20'+a+'\x20would\x20exceed\x20MAX_NAMED_OPERATOR_COUNT\x20'+MAX_NAMED_OPERATOR_COUNT};return{'ok':!![]};}export function validateContextRepositoryCount(a,b){const c=a+b;if(c>MAX_CONTEXT_REPOSITORY_COUNT)return{'ok':![],'violation':'Context\x20repository\x20count\x20'+c+'\x20would\x20exceed\x20MAX_CONTEXT_REPOSITORY_COUNT\x20'+MAX_CONTEXT_REPOSITORY_COUNT};return{'ok':!![]};}export const PROGRESS_CROSS_OBJECT_REFS=[{'object':'Machine','phase':'universal','relationship':'Progress.machine\x20(immutable\x20bind,\x20E_MACHINE_NOT_MATCH\x20on\x20every\x20op)'},{'object':'Order','phase':'forward_advance','relationship':'Progress.task\x20=\x20Order.address\x20(1:1,\x20set\x20via\x20task\x20submission\x20or\x20the\x20buy\x20flow)'},{'object':'Order','phase':'forward_advance','relationship':'order-holder\x20paths\x20(advance\x20/\x20hold):\x20the\x20order\x20owner-or-agent\x20permission\x20check\x20gates\x20Forward\x20advance'},{'object':'Permission','phase':'universal','relationship':'Machine.permission\x20is\x20borrowed\x20for\x20ALL\x20220-225\x20assertions'},{'object':'Repository','phase':'context_binding','relationship':'context_repositories:\x20vector<address>\x20(≤\x2030),\x20bound\x20via\x20an\x20affiliation\x20transaction'},{'object':'Service','phase':'creation','relationship':'the\x20buy\x20flow\x20creates\x20the\x20Progress\x20internally\x20(bypasses\x20220\x20assertion\x20—\x20package-internal\x20entry)'},{'object':'Passport','phase':'forward_advance','relationship':'Forward.guard\x20(Some)\x20requires\x20Passport\x20+\x20passing\x20the\x20passport\x20verification'},{'object':'Passport','phase':'unhold_state','relationship':'passport-based\x20unhold:\x20224\x20check\x20via\x20passport\x20(fallback\x20when\x20the\x20sender\x27s\x20direct\x20224\x20permission\x20check\x20fails)'},{'object':'Payment','phase':'owner_receive','relationship':'owner_receive\x20unwraps\x20CoinWrapper<T>\x20via\x20the\x20payment\x27s\x20type-checked\x20unwrap'},{'object':'Allocation','phase':'completed','relationship':'Terminal\x20node\x20triggers\x20Allocation\x20alloc\x20(e.g.\x20\x27completed\x27,\x20\x27enforced\x27,\x20\x27return_approved\x27)'}];
@@ -1 +1 @@
1
- import{MAX_NAMED_OPERATOR_COUNT,MAX_NAMED_OPERATOR_ADDRESS_COUNT,MAX_CONTEXT_REPOSITORY_COUNT}from'@wowok/wowok';import{getJudgmentDoc,factoryRulePack}from'../config/judgment.js';import{evaluateRuleBook}from'../config/rule-engine.js';const MAX_LONG_NAME_LENGTH=0x400;export function progressRiskFacts(a){const b=a['progress_namedOperator'],c=b?b['operators']?.['length']??0x0:undefined,d=a['current_named_operator_count']??0x0,e=a['repository'],f=e?e['op']==='remove'||e['op']==='clear'?0x0:e['objects']?.['length']??0x0:0x0,g=a['current_context_repository_count']??0x0,h=a['current_task']!==null&&a['current_task']!==undefined,i=a['operate'],j=i?.['op'],k=typeof i?.['message']==='string'?i['message']['length']:undefined,l=i?String(i['operation']?.['forward']):undefined,m=i?String(i['operation']?.['next_node_name']):undefined,n=a['target_objects_types'],o=Array['isArray'](n)?[...new Set(n)]:[];return{'named_operator_addr_count':c,'named_operator_name':b?String(b['name']):undefined,'max_named_operator_address_count':MAX_NAMED_OPERATOR_ADDRESS_COUNT,'named_operator_addr_count_exceeded':!!b&&(c??0x0)>MAX_NAMED_OPERATOR_ADDRESS_COUNT,'named_operator_count_current':d,'max_named_operator_count':MAX_NAMED_OPERATOR_COUNT,'named_operator_count_at_limit':b?.['op']==='add'&&d>=MAX_NAMED_OPERATOR_COUNT,'context_repo_current':g,'context_repo_add_count':f,'context_repo_total':g+f,'max_context_repository_count':MAX_CONTEXT_REPOSITORY_COUNT,'context_repo_count_exceeded':!!e&&e['op']!=='clear'&&f>0x0&&g+f>MAX_CONTEXT_REPOSITORY_COUNT,'named_operator_empty_name':!!b&&b['name']===''&&b['op']!=='remove','task_submit_blocked':!!a['task']&&h,'current_task_display':h?String(a['current_task']):undefined,'operate_message_over_long':k!==undefined&&k>MAX_LONG_NAME_LENGTH,'operate_message_length':k,'operate_op_invalid':!!j&&!['next','hold','unhold','adminUnhold']['includes'](j),'operate_op':i?String(j):undefined,'admin_unhold_op':j==='adminUnhold','operate_forward':l,'operate_next_node_name':m,'forward_named_operator':a['forward_named_operator'],'forward_named_op_bypass':!!i&&!!a['forward_named_operator']&&a['forward_named_operator']!=='','forward_has_guard_display':i?String(a['forward_has_guard']):undefined,'guard_passport_required':!!i&&!!a['forward_has_guard']&&!a['forward_permission_index'],'machine_published_false':a['machine_published']===![],'machine_name':String(a['current_machine']),'machine_name_or_unknown':String(a['current_machine']??'(unknown)'),'forward_reaccomplish':!!i&&!!a['forward_already_accomplished'],'unhold_non_holder':j==='unhold'&&!!a['holder_address']&&!!a['signer']&&a['holder_address']!==a['signer'],'holder_display':String(a['holder_address']),'signer_display':String(a['signer']),'repository_add_op':e?.['op']==='add','repo_add_count':f,'heterogeneous_host_types':!!n&&n['length']>=0x2&&o['length']>0x1,'unique_target_types_csv_space':o['length']>0x1?o['join'](',\x20'):undefined,'unique_target_types_csv':o['length']>0x1?o['join'](','):undefined,'orderless_operate':!!i&&a['current_task']===null&&j!==undefined};}function progressRuleBook(){const a=getJudgmentDoc()['rules']['domains']['progress'];if(!a)throw new Error('factory\x20rule\x20pack\x20\x27progress\x27\x20missing\x20—\x20broken\x20installation');return a['rules'];}function findingToProgressRisk(a){return{'id':a['rule_id'],'level':a['level'],'category':a['dimension']??'structural','title':a['title'],'description':a['description'],'affected_stakeholders':a['stakeholders']??[],'scenario':a['scenario']??'','mitigation':a['mitigation']??'','evidence':a['evidence'],...a['exposure']!=null?{'exposure':a['exposure']}:{}};}export const PROGRESS_RISK_VERSION='1.0.0';export function getAllProgressRiskRules(){const a=factoryRulePack('progress');if(!a)return[];return a['rules']['map'](b=>({'id':b['rule_id'],'category':b['dimension']??'structural','trigger':b['trigger']??'','check':c=>{const {findings:d}=evaluateRuleBook([b],progressRiskFacts(c));return d['length']>0x0?findingToProgressRisk(d[0x0]):null;}}));}export function assessProgressRisks(a){const {findings:b}=evaluateRuleBook(progressRuleBook(),progressRiskFacts(a)),c=b['map'](findingToProgressRisk),d=c['length']===0x0?'low':c['some'](g=>g['level']==='critical')?'critical':c['some'](g=>g['level']==='high')?'high':c['some'](g=>g['level']==='medium')?'medium':'low',e={};for(const g of c){e[g['category']]=(e[g['category']]??0x0)+0x1;}const f={};for(const h of c){for(const i of h['affected_stakeholders']){if(!f[i])f[i]=[];f[i]['push'](h['id']+':\x20'+h['mitigation']);}}return{'summary':'Assessed\x20'+c['length']+'\x20risk(s)\x20across\x20'+Object['keys'](e)['length']+'\x20categories','risks':c,'overall_risk':d,'risks_by_category':e,'stakeholder_advice':f,'needs_human_review':c['some'](j=>j['level']==='critical'||j['level']==='high')};}
1
+ import{MAX_NAMED_OPERATOR_COUNT,MAX_NAMED_OPERATOR_ADDRESS_COUNT,MAX_CONTEXT_REPOSITORY_COUNT}from'@wowok/wowok';import{getJudgmentDoc,factoryRulePack}from'../config/judgment.js';import{evaluateRuleBook}from'../config/rule-engine.js';const MAX_LONG_NAME_LENGTH=0x400;export function progressRiskFacts(a){const b=a['progress_namedOperator'],c=b?b['operators']?.['length']??0x0:undefined,d=a['current_named_operator_count']??0x0,e=a['repository'],f=e?e['op']==='remove'||e['op']==='clear'?0x0:e['objects']?.['length']??0x0:0x0,g=a['current_context_repository_count']??0x0,h=a['current_task']!==null&&a['current_task']!==undefined,i=a['operate'],j=i?.['op'],k=typeof i?.['message']==='string'?i['message']['length']:undefined,l=i?String(i['operation']?.['forward']):undefined,m=i?String(i['operation']?.['next_node_name']):undefined,n=a['target_objects_types'],o=Array['isArray'](n)?[...new Set(n)]:[];return{'named_operator_addr_count':c,'named_operator_name':b?String(b['name']):undefined,'max_named_operator_address_count':MAX_NAMED_OPERATOR_ADDRESS_COUNT,'named_operator_addr_count_exceeded':!!b&&(c??0x0)>MAX_NAMED_OPERATOR_ADDRESS_COUNT,'named_operator_count_current':d,'max_named_operator_count':MAX_NAMED_OPERATOR_COUNT,'named_operator_count_at_limit':b?.['op']==='add'&&d>=MAX_NAMED_OPERATOR_COUNT,'context_repo_current':g,'context_repo_add_count':f,'context_repo_total':g+f,'max_context_repository_count':MAX_CONTEXT_REPOSITORY_COUNT,'context_repo_count_exceeded':!!e&&e['op']!=='clear'&&f>0x0&&g+f>MAX_CONTEXT_REPOSITORY_COUNT,'named_operator_empty_name':!!b&&b['name']===''&&b['op']!=='remove','task_submit_blocked':!!a['task']&&h,'current_task_display':h?String(a['current_task']):undefined,'operate_message_over_long':k!==undefined&&k>MAX_LONG_NAME_LENGTH,'operate_message_length':k,'operate_op_invalid':!!j&&!['next','hold','unhold','adminUnhold']['includes'](j),'operate_op':i?String(j):undefined,'admin_unhold_op':j==='adminUnhold','operate_forward':l,'operate_next_node_name':m,'forward_named_operator':a['forward_named_operator'],'forward_named_op_bypass':!!i&&!!a['forward_named_operator']&&a['forward_named_operator']!=='','forward_payer_scope':!!i&&a['forward_named_operator']==='','forward_has_guard_display':i?String(a['forward_has_guard']):undefined,'guard_passport_required':!!i&&!!a['forward_has_guard']&&!a['forward_permission_index'],'machine_published_false':a['machine_published']===![],'machine_name':String(a['current_machine']),'machine_name_or_unknown':String(a['current_machine']??'(unknown)'),'forward_reaccomplish':!!i&&!!a['forward_already_accomplished'],'unhold_non_holder':j==='unhold'&&!!a['holder_address']&&!!a['signer']&&a['holder_address']!==a['signer'],'holder_display':String(a['holder_address']),'signer_display':String(a['signer']),'repository_add_op':e?.['op']==='add','repo_add_count':f,'heterogeneous_host_types':!!n&&n['length']>=0x2&&o['length']>0x1,'unique_target_types_csv_space':o['length']>0x1?o['join'](',\x20'):undefined,'unique_target_types_csv':o['length']>0x1?o['join'](','):undefined,'orderless_operate':!!i&&a['current_task']===null&&j!==undefined};}function progressRuleBook(){const a=getJudgmentDoc()['rules']['domains']['progress'];if(!a)throw new Error('factory\x20rule\x20pack\x20\x27progress\x27\x20missing\x20—\x20broken\x20installation');return a['rules'];}function findingToProgressRisk(a){return{'id':a['rule_id'],'level':a['level'],'category':a['dimension']??'structural','title':a['title'],'description':a['description'],'affected_stakeholders':a['stakeholders']??[],'scenario':a['scenario']??'','mitigation':a['mitigation']??'','evidence':a['evidence'],...a['exposure']!=null?{'exposure':a['exposure']}:{}};}export const PROGRESS_RISK_VERSION='1.0.0';export function getAllProgressRiskRules(){const a=factoryRulePack('progress');if(!a)return[];return a['rules']['map'](b=>({'id':b['rule_id'],'category':b['dimension']??'structural','trigger':b['trigger']??'','check':c=>{const {findings:d}=evaluateRuleBook([b],progressRiskFacts(c));return d['length']>0x0?findingToProgressRisk(d[0x0]):null;}}));}export function assessProgressRisks(a){const {findings:b}=evaluateRuleBook(progressRuleBook(),progressRiskFacts(a)),c=b['map'](findingToProgressRisk),d=c['length']===0x0?'low':c['some'](g=>g['level']==='critical')?'critical':c['some'](g=>g['level']==='high')?'high':c['some'](g=>g['level']==='medium')?'medium':'low',e={};for(const g of c){e[g['category']]=(e[g['category']]??0x0)+0x1;}const f={};for(const h of c){for(const i of h['affected_stakeholders']){if(!f[i])f[i]=[];f[i]['push'](h['id']+':\x20'+h['mitigation']);}}return{'summary':'Assessed\x20'+c['length']+'\x20risk(s)\x20across\x20'+Object['keys'](e)['length']+'\x20categories','risks':c,'overall_risk':d,'risks_by_category':e,'stakeholder_advice':f,'needs_human_review':c['some'](j=>j['level']==='critical'||j['level']==='high')};}
@@ -1 +1 @@
1
- import{describe,it,expect,beforeAll,afterAll}from'vitest';import*as a291a from'node:fs';import*as a291b from'node:os';import*as a291c from'node:path';import{projectionUpsert,projectionServe,projectionStats,__projectionSetWriteClock}from'./projection.js';const SCRATCH_DB=a291c['join'](a291b['tmpdir'](),'wowok-projection-spec-'+process['pid']+'-'+Date['now']()+'.db'),PREV_DB=process['env']['WOWOK_PROJECTION_DB'],PREV_TTL=process['env']['WOWOK_PROJECTION_TTL_MS'];beforeAll(()=>{process['env']['WOWOK_PROJECTION_DB']=SCRATCH_DB,process['env']['WOWOK_PROJECTION_TTL_MS']='120000',__projectionSetWriteClock(0x0);}),afterAll(()=>{if(PREV_DB===undefined)delete process['env']['WOWOK_PROJECTION_DB'];else process['env']['WOWOK_PROJECTION_DB']=PREV_DB;if(PREV_TTL===undefined)delete process['env']['WOWOK_PROJECTION_TTL_MS'];else process['env']['WOWOK_PROJECTION_TTL_MS']=PREV_TTL;__projectionSetWriteClock(undefined);try{a291a['rmSync'](SCRATCH_DB,{'force':!![]}),a291a['rmSync'](SCRATCH_DB+'-wal',{'force':!![]}),a291a['rmSync'](SCRATCH_DB+'-shm',{'force':!![]});}catch{}});function svcRow(a,b={}){const {payloadJson:c,...d}=b;return{'object_id':a,'payload':JSON['stringify']({'object':a,...c??{}}),...d};}describe('projection\x20cache\x20(K5\x20doc\x2017\x20B-tier)',()=>{it('returns\x20undefined\x20without\x20a\x20watermark\x20(never\x20fabricates\x20coverage)',()=>{const a=projectionServe('chain-empty-proj','Service',{},0xc8);expect(a)['toBeUndefined'](),expect(projectionStats('chain-empty-proj')['every'](b=>b['rows']===0x0))['toBe'](!![]);}),it('serves\x20a\x20fresh\x20projection\x20with\x20SQL\x20filters\x20and\x20pre-filter\x20totals',()=>{const a='chain-proj-serve',b=[svcRow('0xa1',{'name':'Alpha\x20Music','location':'Shanghai,\x20CN','coin_type':'0x2::wow::WOW','published':0x1,'paused':0x0,'payloadJson':{'object':'0xa1','name':'Alpha\x20Music','location':'Shanghai,\x20CN'}}),svcRow('0xa2',{'name':'Beta\x20Design','location':'Beijing,\x20CN','coin_type':'0x2::wow::WOW','published':0x1,'paused':0x0,'payloadJson':{'object':'0xa2','name':'Beta\x20Design','location':'Beijing,\x20CN'}}),svcRow('0xa3',{'name':'Gamma\x20Food','location':'Shanghai,\x20CN','coin_type':'0x2::sui::SUI','published':0x1,'paused':0x0,'payloadJson':{'object':'0xa3','name':'Gamma\x20Food','location':'Shanghai,\x20CN'}})];projectionUpsert(a,'Service',b,{'hasMore':![],'maxObjects':0xc8});const c=projectionServe(a,'Service',{},0xc8);expect(c)['toBeDefined'](),expect(c['items'])['toHaveLength'](0x3),expect(c['meta']['total_rows'])['toBe'](0x3),expect(c['meta']['watermark']['has_more'])['toBe'](0x0),expect(c['items']['map'](h=>h['object'])['sort']())['toEqual'](['0xa1','0xa2','0xa3']);const d=projectionServe(a,'Service',{'coin_type':'0x2::wow::WOW'},0xc8);expect(d['items']['map'](h=>h['object'])['sort']())['toEqual'](['0xa1','0xa2']),expect(d['meta']['total_rows'])['toBe'](0x3);const e=projectionServe(a,'Service',{'name_contains':'beta'},0xc8);expect(e['items']['map'](h=>h['object']))['toEqual'](['0xa2']);const f=projectionServe(a,'Service',{'location_any':['shanghai']},0xc8);expect(f['items']['map'](h=>h['object'])['sort']())['toEqual'](['0xa1','0xa3']);const g=projectionServe(a,'Service',{'location_any':['paris']},0xc8);expect(g['items'])['toHaveLength'](0x0),expect(g['meta']['total_rows'])['toBe'](0x3),expect(projectionStats(a)['find'](h=>h['kind']==='Service')?.['rows'])['toBe'](0x3),expect(projectionStats(a)['find'](h=>h['kind']==='Service')?.['refreshed_at'])['toBeGreaterThan'](0x0);}),it('upserts\x20cumulatively:\x20rows\x20update\x20in\x20place\x20and\x20accumulate\x20across\x20windows',()=>{const a='chain-proj-cumulative';projectionUpsert(a,'Demand',[{'object_id':'0xd1','payload':JSON['stringify']({'object':'0xd1','description':'v1'})}],{'hasMore':!![],'maxObjects':0xc8}),projectionUpsert(a,'Demand',[{'object_id':'0xd1','payload':JSON['stringify']({'object':'0xd1','description':'v2'})},{'object_id':'0xd2','payload':JSON['stringify']({'object':'0xd2','description':'new'})}],{'hasMore':![],'maxObjects':0xc8});const b=projectionServe(a,'Demand',{},0xc8);expect(b['items'])['toHaveLength'](0x2);const c=b['items']['find'](d=>d['object']==='0xd1');expect(c?.['description'])['toBe']('v2'),expect(b['meta']['watermark']['has_more'])['toBe'](0x0);}),it('declines\x20to\x20serve\x20when\x20stale\x20by\x20TTL',async()=>{const a='chain-proj-stale-ttl',b=process['env']['WOWOK_PROJECTION_TTL_MS'];process['env']['WOWOK_PROJECTION_TTL_MS']='60000';try{projectionUpsert(a,'Service',[svcRow('0xs1')],{'hasMore':![],'maxObjects':0xc8}),expect(projectionServe(a,'Service',{},0xc8))['toBeDefined'](),process['env']['WOWOK_PROJECTION_TTL_MS']='20',await new Promise(c=>setTimeout(c,0x3c)),expect(projectionServe(a,'Service',{},0xc8))['toBeUndefined']();}finally{process['env']['WOWOK_PROJECTION_TTL_MS']=b;}}),it('declines\x20to\x20serve\x20when\x20a\x20local\x20on-chain\x20write\x20postdates\x20the\x20watermark',()=>{const a='chain-proj-stale-write';projectionUpsert(a,'Service',[svcRow('0xs2')],{'hasMore':![],'maxObjects':0xc8}),__projectionSetWriteClock(Date['now']()+0x1);try{expect(projectionServe(a,'Service',{},0xc8))['toBeUndefined']();}finally{__projectionSetWriteClock(0x0);}}),it('filters\x20arb\x20payloads\x20post-SQL\x20for\x20parity\x20with\x20the\x20legacy\x20post-hydration\x20filter',()=>{const a='chain-proj-arb';projectionUpsert(a,'Arb',[{'object_id':'0xb1','payload':JSON['stringify']({'object':'0xb1','arbitration':'0xarb1','order':'0xo1','status':0x2})},{'object_id':'0xb2','payload':JSON['stringify']({'object':'0xb2','arbitration':'0xarb1','order':'0xo2','status':0x5})},{'object_id':'0xb3','payload':JSON['stringify']({'object':'0xb3','arbitration':'0xarb2','order':'0xo1','status':0x2})}],{'hasMore':![],'maxObjects':0xc8});const b=projectionServe(a,'Arb',{'arbitration':'0xarb1'},0xc8);expect(b['items']['map'](f=>f['object'])['sort']())['toEqual'](['0xb1','0xb2']),expect(b['meta']['total_rows'])['toBe'](0x3);const c=projectionServe(a,'Arb',{'order':'0xo1'},0xc8);expect(c['items']['map'](f=>f['object'])['sort']())['toEqual'](['0xb1','0xb3']);const d=projectionServe(a,'Arb',{'status':[0x5]},0xc8);expect(d['items']['map'](f=>f['object']))['toEqual'](['0xb2']);const e=projectionServe(a,'Arb',{'arbitration':'0xarb2','status':[0x5]},0xc8);expect(e['items'])['toHaveLength'](0x0);}),it('respects\x20the\x20limit\x20on\x20the\x20SQL\x20path',()=>{const a='chain-proj-limit';projectionUpsert(a,'Demand',Array['from']({'length':0x5},(c,d)=>({'object_id':'0xL'+d,'payload':JSON['stringify']({'object':'0xL'+d})})),{'hasMore':![],'maxObjects':0xc8});const b=projectionServe(a,'Demand',{},0x3);expect(b['items'])['toHaveLength'](0x3),expect(b['meta']['total_rows'])['toBe'](0x5);});});
1
+ import{describe,it,expect,beforeAll,afterAll}from'vitest';import*as a316a from'node:fs';import*as a316b from'node:os';import*as a316c from'node:path';import{projectionUpsert,projectionServe,projectionStats,__projectionSetWriteClock}from'./projection.js';const SCRATCH_DB=a316c['join'](a316b['tmpdir'](),'wowok-projection-spec-'+process['pid']+'-'+Date['now']()+'.db'),PREV_DB=process['env']['WOWOK_PROJECTION_DB'],PREV_TTL=process['env']['WOWOK_PROJECTION_TTL_MS'];beforeAll(()=>{process['env']['WOWOK_PROJECTION_DB']=SCRATCH_DB,process['env']['WOWOK_PROJECTION_TTL_MS']='120000',__projectionSetWriteClock(0x0);}),afterAll(()=>{if(PREV_DB===undefined)delete process['env']['WOWOK_PROJECTION_DB'];else process['env']['WOWOK_PROJECTION_DB']=PREV_DB;if(PREV_TTL===undefined)delete process['env']['WOWOK_PROJECTION_TTL_MS'];else process['env']['WOWOK_PROJECTION_TTL_MS']=PREV_TTL;__projectionSetWriteClock(undefined);try{a316a['rmSync'](SCRATCH_DB,{'force':!![]}),a316a['rmSync'](SCRATCH_DB+'-wal',{'force':!![]}),a316a['rmSync'](SCRATCH_DB+'-shm',{'force':!![]});}catch{}});function svcRow(a,b={}){const {payloadJson:c,...d}=b;return{'object_id':a,'payload':JSON['stringify']({'object':a,...c??{}}),...d};}describe('projection\x20cache\x20(K5\x20doc\x2017\x20B-tier)',()=>{it('returns\x20undefined\x20without\x20a\x20watermark\x20(never\x20fabricates\x20coverage)',()=>{const a=projectionServe('chain-empty-proj','Service',{},0xc8);expect(a)['toBeUndefined'](),expect(projectionStats('chain-empty-proj')['every'](b=>b['rows']===0x0))['toBe'](!![]);}),it('serves\x20a\x20fresh\x20projection\x20with\x20SQL\x20filters\x20and\x20pre-filter\x20totals',()=>{const a='chain-proj-serve',b=[svcRow('0xa1',{'name':'Alpha\x20Music','location':'Shanghai,\x20CN','coin_type':'0x2::wow::WOW','published':0x1,'paused':0x0,'payloadJson':{'object':'0xa1','name':'Alpha\x20Music','location':'Shanghai,\x20CN'}}),svcRow('0xa2',{'name':'Beta\x20Design','location':'Beijing,\x20CN','coin_type':'0x2::wow::WOW','published':0x1,'paused':0x0,'payloadJson':{'object':'0xa2','name':'Beta\x20Design','location':'Beijing,\x20CN'}}),svcRow('0xa3',{'name':'Gamma\x20Food','location':'Shanghai,\x20CN','coin_type':'0x2::sui::SUI','published':0x1,'paused':0x0,'payloadJson':{'object':'0xa3','name':'Gamma\x20Food','location':'Shanghai,\x20CN'}})];projectionUpsert(a,'Service',b,{'hasMore':![],'maxObjects':0xc8});const c=projectionServe(a,'Service',{},0xc8);expect(c)['toBeDefined'](),expect(c['items'])['toHaveLength'](0x3),expect(c['meta']['total_rows'])['toBe'](0x3),expect(c['meta']['watermark']['has_more'])['toBe'](0x0),expect(c['items']['map'](h=>h['object'])['sort']())['toEqual'](['0xa1','0xa2','0xa3']);const d=projectionServe(a,'Service',{'coin_type':'0x2::wow::WOW'},0xc8);expect(d['items']['map'](h=>h['object'])['sort']())['toEqual'](['0xa1','0xa2']),expect(d['meta']['total_rows'])['toBe'](0x3);const e=projectionServe(a,'Service',{'name_contains':'beta'},0xc8);expect(e['items']['map'](h=>h['object']))['toEqual'](['0xa2']);const f=projectionServe(a,'Service',{'location_any':['shanghai']},0xc8);expect(f['items']['map'](h=>h['object'])['sort']())['toEqual'](['0xa1','0xa3']);const g=projectionServe(a,'Service',{'location_any':['paris']},0xc8);expect(g['items'])['toHaveLength'](0x0),expect(g['meta']['total_rows'])['toBe'](0x3),expect(projectionStats(a)['find'](h=>h['kind']==='Service')?.['rows'])['toBe'](0x3),expect(projectionStats(a)['find'](h=>h['kind']==='Service')?.['refreshed_at'])['toBeGreaterThan'](0x0);}),it('upserts\x20cumulatively:\x20rows\x20update\x20in\x20place\x20and\x20accumulate\x20across\x20windows',()=>{const a='chain-proj-cumulative';projectionUpsert(a,'Demand',[{'object_id':'0xd1','payload':JSON['stringify']({'object':'0xd1','description':'v1'})}],{'hasMore':!![],'maxObjects':0xc8}),projectionUpsert(a,'Demand',[{'object_id':'0xd1','payload':JSON['stringify']({'object':'0xd1','description':'v2'})},{'object_id':'0xd2','payload':JSON['stringify']({'object':'0xd2','description':'new'})}],{'hasMore':![],'maxObjects':0xc8});const b=projectionServe(a,'Demand',{},0xc8);expect(b['items'])['toHaveLength'](0x2);const c=b['items']['find'](d=>d['object']==='0xd1');expect(c?.['description'])['toBe']('v2'),expect(b['meta']['watermark']['has_more'])['toBe'](0x0);}),it('declines\x20to\x20serve\x20when\x20stale\x20by\x20TTL',async()=>{const a='chain-proj-stale-ttl',b=process['env']['WOWOK_PROJECTION_TTL_MS'];process['env']['WOWOK_PROJECTION_TTL_MS']='60000';try{projectionUpsert(a,'Service',[svcRow('0xs1')],{'hasMore':![],'maxObjects':0xc8}),expect(projectionServe(a,'Service',{},0xc8))['toBeDefined'](),process['env']['WOWOK_PROJECTION_TTL_MS']='20',await new Promise(c=>setTimeout(c,0x3c)),expect(projectionServe(a,'Service',{},0xc8))['toBeUndefined']();}finally{process['env']['WOWOK_PROJECTION_TTL_MS']=b;}}),it('declines\x20to\x20serve\x20when\x20a\x20local\x20on-chain\x20write\x20postdates\x20the\x20watermark',()=>{const a='chain-proj-stale-write';projectionUpsert(a,'Service',[svcRow('0xs2')],{'hasMore':![],'maxObjects':0xc8}),__projectionSetWriteClock(Date['now']()+0x1);try{expect(projectionServe(a,'Service',{},0xc8))['toBeUndefined']();}finally{__projectionSetWriteClock(0x0);}}),it('filters\x20arb\x20payloads\x20post-SQL\x20for\x20parity\x20with\x20the\x20legacy\x20post-hydration\x20filter',()=>{const a='chain-proj-arb';projectionUpsert(a,'Arb',[{'object_id':'0xb1','payload':JSON['stringify']({'object':'0xb1','arbitration':'0xarb1','order':'0xo1','status':0x2})},{'object_id':'0xb2','payload':JSON['stringify']({'object':'0xb2','arbitration':'0xarb1','order':'0xo2','status':0x5})},{'object_id':'0xb3','payload':JSON['stringify']({'object':'0xb3','arbitration':'0xarb2','order':'0xo1','status':0x2})}],{'hasMore':![],'maxObjects':0xc8});const b=projectionServe(a,'Arb',{'arbitration':'0xarb1'},0xc8);expect(b['items']['map'](f=>f['object'])['sort']())['toEqual'](['0xb1','0xb2']),expect(b['meta']['total_rows'])['toBe'](0x3);const c=projectionServe(a,'Arb',{'order':'0xo1'},0xc8);expect(c['items']['map'](f=>f['object'])['sort']())['toEqual'](['0xb1','0xb3']);const d=projectionServe(a,'Arb',{'status':[0x5]},0xc8);expect(d['items']['map'](f=>f['object']))['toEqual'](['0xb2']);const e=projectionServe(a,'Arb',{'arbitration':'0xarb2','status':[0x5]},0xc8);expect(e['items'])['toHaveLength'](0x0);}),it('respects\x20the\x20limit\x20on\x20the\x20SQL\x20path',()=>{const a='chain-proj-limit';projectionUpsert(a,'Demand',Array['from']({'length':0x5},(c,d)=>({'object_id':'0xL'+d,'payload':JSON['stringify']({'object':'0xL'+d})})),{'hasMore':![],'maxObjects':0xc8});const b=projectionServe(a,'Demand',{},0x3);expect(b['items'])['toHaveLength'](0x3),expect(b['meta']['total_rows'])['toBe'](0x5);});});
@@ -1 +1 @@
1
- export const PROTOCOL_FACTS_VERSION=0x1;export const PROTOCOL_FACTS=[{'id':'sv2-replay-scope','kind':'settled','title':'Reward\x20replay\x20scope\x20split\x20(SV-2):\x20entry-stamped\x20+\x20order-scoped\x20where\x20is\x20the\x20primary\x20once-per-buyer-per-order\x20form','statement':'On\x20a\x20stamped\x20reward\x20guard\x20the\x20order-scoped\x20record\x20query\x20(where:{storeFromId:{identifier:<order\x20slot>}})\x20is\x20live:\x20entry-stamped\x20+\x20order-scoped\x20where\x20=\x20once\x20per\x20buyer\x20per\x20order\x20(the\x20native\x20claim\x20key\x20is\x20recipient+guard+stamp,\x20so\x20the\x20same\x20buyer\x20on\x20a\x20DIFFERENT\x20order\x20claims\x20again);\x20entry-stamped\x20+\x20empty\x20where\x20=\x20once\x20per\x20buyer\x20for\x20life\x20(a\x20deliberate\x20choice,\x20never\x20a\x20default).\x20The\x20blanket\x20\x27storeFromId\x20filter\x20is\x20inert\x27\x20verdict\x20described\x20unstamped/legacy\x20rewards\x20only.','chain_ref':'Reward\x20claim\x20records\x20key\x20on\x20(recipient,\x20guard,\x20store_from)\x20once\x20the\x20guard_add\x20entry\x20carries\x20the\x20store_from_id\x20stamp;\x20the\x20claim\x27s\x20native\x20once-slot\x20is\x20the\x20second\x20line\x20of\x20defense\x20behind\x20the\x20guard\x27s\x20record\x20gate.','verified_on':'azx7-mn-261014\x20live\x20T8\x20(A/B-verified);\x20klk-mn-261014\x20live\x20(empty-where\x20passport\x20abort)','superseded_by':'the\x20ofn-mn-261012\x20F-01\x20blanket\x20\x27storeFromId\x20filter\x20is\x20a\x20silent\x20no-op\x27\x20retraction','enforced_by':['REVIEW_REWARD_UNARMED','R-REWARD-REPLAY','guard-risk\x20R-X1-14']},{'id':'reward-entry-stamp','kind':'settled','title':'The\x20guard_add\x20store_from_id\x20stamp\x20is\x20REQUIRED\x20only\x20behind\x20a\x20storeFromId\x20record\x20predicate;\x20recipient-only\x20(predicateless)\x20record\x20gates\x20are\x20valid\x20unstamped','statement':'Reward.claim\x20keys\x20every\x20payout\x20on\x20RewardClaimKey\x20{recipient,\x20guard,\x20store_from}\x20(native\x20once-slot,\x20live\x20in\x20the\x20deployed\x20framework\x20—\x20claim-key\x20dynamic\x20fields\x20observed\x20on\x20the\x20crs9\x20mainnet\x20reward\x20object),\x20so\x20an\x20unstamped\x20entry\x20degrades\x20to\x20once-per-recipient-for-life,\x20never\x20a\x20drain.\x20The\x20MCP\x20guard_add\x20stamp\x20gate\x20therefore\x20rejects\x20ONLY\x20the\x20mismatch\x20where\x20the\x20tree\x20pins\x20a\x20storeFromId\x20predicate\x20(order-scoped\x20where)\x20while\x20the\x20entry\x20omits\x20the\x20stamp\x20—\x20unstamped\x20records\x20match\x20no\x20store_from\x20predicate,\x20silently\x20killing\x20the\x20declared\x20once-per-order\x20economics.\x20The\x20recipient-only\x20form\x20is\x20admitted\x20with\x20a\x20loud\x20advisory\x20(keep\x20the\x20order.owner\x20identity\x20leg\x20—\x20it\x20decides\x20who\x20may\x20claim).\x20Re-adding\x20the\x20same\x20guard\x20overwrites\x20its\x20slot\x20in\x20place\x20(live\x20pools\x20repairable).','chain_ref':'guard_add\x20store_from_id\x20entry\x20field;\x20claim\x20records\x20write\x20store_from\x20only\x20when\x20stamped;\x20claim\x20key\x20{recipient,\x20guard,\x20bcs(stamp)|[]}','verified_on':'crs-mn-261015\x20F-11\x20(gate\x20corrected);\x20azx7-mn-261014\x20live\x20T8\x20(stamped\x20forms);\x20crs9\x20mainnet\x20claim-key\x20dynamic\x20fields;\x20upw\x20F-13\x20→\x20UPW-K7\x20origin','enforced_by':['MCP\x20guard_add\x20stamp\x20gate\x20(predicate/stamp\x20mismatch\x20only)','REVIEW_REWARD_UNARMED','R-REWARD-REPLAY','guard-risk\x20R-X1-14']},{'id':'reward-recipient-signer','kind':'settled','title':'The\x20reward\x20guard_add\x20ENTRY\x20recipient\x20must\x20be\x20the\x20signer\x20(or\x20an\x20Entity)\x20—\x20never\x20a\x20GuardIdentifier','statement':'The\x20claim\x20entry\x20requires\x20recipient\x20==\x20tx\x20sender;\x20a\x20GuardIdentifier\x20recipient\x20resolves\x20from\x20the\x20passport\x20submission\x20(conventionally\x20the\x20submitted\x20Order\x20address)\x20and\x20can\x20never\x20equal\x20the\x20sender,\x20so\x20every\x20claim\x20aborts\x20with\x20the\x20recipient-mismatch\x20error\x20and\x20the\x20pool\x20is\x20structurally\x20unpayable.\x20The\x20order-anchor\x20GuardIdentifier\x20idiom\x20is\x20an\x20Allocation\x20push\x20rail,\x20never\x20a\x20reward\x20pull\x20rail.\x20An\x20Entity\x20recipient\x20passes\x20(replaced\x20by\x20the\x20claimant\x27s\x20local\x20account\x20at\x20claim\x20time).','chain_ref':'Reward\x20claim\x20pays\x20the\x20tx-context\x20sender;\x20recipient\x20is\x20asserted\x20equal\x20to\x20it','verified_on':'crs-mn-261015\x20F-12\x20(live\x20mainnet,\x20funded\x20pool\x20aborting\x20on\x20every\x20claim)','enforced_by':['MCP\x20guard_add\x20recipient\x20gate']},{'id':'reward-positive-amount','kind':'settled','title':'A\x20resolved\x20reward\x20claim\x20root\x20must\x20carry\x20the\x20positive-amount\x20leg\x20(order\x20amount\x20>=\x201)','statement':'A\x20zero-total\x20order\x20(zeroing-coupon\x20buy)\x20holds\x20an\x20empty\x20escrow\x20and\x20must\x20never\x20claim\x20—\x20the\x20claim\x20root\x20carries\x20an\x20explicit\x20order.amount\x20>=\x201\x20comparison\x20leg.','chain_ref':'order.amount\x20comparison\x20leg\x20in\x20the\x20guard\x20root','verified_on':'BKN-P2\x20(bkng-mn-261014\x20batch)','enforced_by':['R-REWARD-ZERO-ORDER']},{'id':'reward-identity-leg','kind':'settled','title':'The\x20reward\x20claim\x20identity\x20leg\x20(signer\x20==\x20order\x20owner)\x20is\x20mandatory\x20—\x20the\x20claim\x20entry\x20is\x20permissionless','statement':'claim()\x20pays\x20whatever\x20address\x20presents\x20a\x20qualifying\x20order;\x20without\x20the\x20identity\x20leg\x20any\x20address\x20holding\x20any\x20order\x20at\x20the\x20required\x20node\x20drains\x20the\x20pool.\x20The\x20identity\x20leg\x20stays\x20mandatory\x20until\x20a\x20chain-side\x20claim\x20permission\x20primitive\x20exists.','chain_ref':'claim\x20entry\x20has\x20no\x20protocol-level\x20order\x20binding\x20of\x20its\x20own','verified_on':'audit-261012\x20B5'},{'id':'claimed-by-polarity-pair','kind':'settled','title':'Refund\x20and\x20merchant-recovery\x20rails\x20are\x20claimed_by\x20polarity\x20twins\x20—\x20refund\x20asserts\x20some\x20==\x20false,\x20recovery\x20asserts\x20some\x20==\x20true','statement':'A\x20refund-rail\x20guard\x20MUST\x20read\x20claimed_by\x20(false\x20=\x20no\x20award\x20has\x20paid)\x20and\x20its\x20merchant-recovery\x20twin\x20asserts\x20claimed_by\x20some\x20==\x20true\x20(an\x20award\x20has\x20paid).\x20Shipping\x20only\x20the\x20refund\x20polarity\x20strands\x20the\x20awarded\x20escrow\x20once\x20arbitration\x20has\x20paid;\x20the\x20pairing\x20is\x20structural,\x20not\x20a\x20documentation\x20choice.','chain_ref':'the\x20claimed_by\x20Bool\x20axis\x20on\x20the\x20order\x20(award-paid\x20marker)','verified_on':'az-mn-261007\x20(awarded\x20escrow\x20stranded),\x20run75747\x20F-06/F-32','enforced_by':['DUAL-RAIL-01']},{'id':'allocator-rows-authoritative','kind':'settled','title':'allocator.rows\x20are\x20the\x20authoritative\x20money\x20shape\x20—\x20prose\x20must\x20not\x20restate\x20the\x20economics','statement':'The\x20shipped\x20rows\x20ARE\x20the\x20split;\x20any\x20prose\x20restatement\x20of\x20percentages,\x20surplus\x20behavior\x20or\x20recipient\x20structure\x20is\x20a\x20drift\x20hazard\x20and\x20must\x20defer\x20to\x20the\x20rows.\x20A\x20prose/rows\x20contradiction\x20is\x20always\x20a\x20prose\x20bug.','chain_ref':'the\x20allocator\x20configure\x20step\x20carries\x20the\x20rows\x20verbatim','verified_on':'run75747\x20F-09\x20(trust_mechanisms\x20R6\x20contradicted\x20the\x20rows)','enforced_by':['R-PLAN-01..07','template_allocator_rows\x20plan\x20passthrough']},{'id':'inv-guard-node-literals-resolve','kind':'invariant','title':'Every\x20node\x20literal\x20named\x20in\x20guard\x20prose\x20must\x20resolve\x20to\x20the\x20template\x27s\x20own\x20machine\x20node\x20names','statement':'A\x20node\x20set\x20like\x20{reviewed,\x20closed}\x20is\x20dead\x20prose\x20when\x20`closed`\x20is\x20not\x20a\x20machine\x20node\x20—\x20the\x20template\x27s\x20machine\x20shape\x20is\x20the\x20truth\x20and\x20the\x20prose\x20follows.\x20Sync\x20test:\x20reward/guard\x20prose\x20node\x20sets\x20⊆\x20machine\x20node\x20names.','chain_ref':'guard\x20roots\x20compare\x20progress.current\x20against\x20machine\x20node\x20name\x20constants','verified_on':'run75747\x20F-10\x20(reward\x20prose\x20named\x20`closed`;\x20the\x20terminal\x20is\x20`completed`)','enforced_by':['protocol-facts-sync\x20catalog\x20lint']},{'id':'inv-guard-keys-bind','kind':'invariant','title':'Every\x20executable\x20guard\x20key\x20must\x20have\x20at\x20least\x20one\x20binding\x20site;\x20advisory\x20designs\x20must\x20say\x20so;\x20omit\x20is\x20the\x20sanctioned\x20does-not-apply','statement':'A\x20guards[]\x20entry\x20with\x20no\x20binding\x20site\x20(machine\x20forward,\x20allocator\x20guard_key,\x20spec\x20policy,\x20service/buy\x20mount)\x20is\x20either\x20advisory\x20by\x20declaration\x20or\x20a\x20defect\x20—\x20it\x20must\x20never\x20silently\x20enter\x20the\x20creation\x20plan.\x20`guard_resolutions[k]\x20=\x20{kind:\x27omit\x27}`\x20is\x20the\x20sanctioned\x20way\x20to\x20say\x20a\x20design\x20does\x20not\x20apply\x20to\x20this\x20shop.','chain_ref':'guards\x20materialize\x20only\x20through\x20their\x20binding\x20site','verified_on':'run75747\x20F-25\x20(dead\x20duplicate\x20guard)\x20/\x20F-38\x20(unresolvable\x20advisory)','enforced_by':['HOST-GRAPH-01','UNRESOLVED-GUARD-01','GUARD_RESOLUTION_UNKNOWN']},{'id':'inv-fee-param-names-resolve','kind':'invariant','title':'Every\x20*_days\x20/\x20*_hours\x20/\x20*_bps\x20name\x20used\x20in\x20template\x20prose\x20must\x20exist\x20in\x20that\x20template\x27s\x20fee_params','statement':'Time\x20and\x20bps\x20parameters\x20are\x20fee\x20params,\x20never\x20hand-written\x20constants\x20(KLM-A\x20/\x20R-TIME-PROFILE):\x20a\x20token\x20named\x20in\x20a\x20guard\x20purpose\x20is\x20a\x20landing\x20commitment,\x20so\x20it\x20must\x20be\x20a\x20declared\x20fee\x20param.\x20Pseudo-params\x20in\x20prose\x20are\x20renamed\x20to\x20descriptive\x20wording\x20or\x20promoted\x20to\x20real\x20fee\x20params.','chain_ref':'fee_params\x20feed\x20the\x20parameter\x20->\x20landing-site\x20table\x20and\x20override\x20merging','verified_on':'run75747\x20F-23\x20(review_window_days\x20referenced,\x20never\x20declared)','enforced_by':['protocol-facts-sync\x20catalog\x20lint']},{'id':'inv-no-platform-zero-leg','kind':'invariant','title':'No\x20zero-share\x20platform\x20allocation\x20leg\x20may\x20be\x20emitted','statement':'A\x20`platform`\x20recipient\x20at\x200%\x20is\x20a\x20no-op\x20leg\x20that\x20can\x20only\x20mislead\x20—\x20explicit\x20zeros\x20belong\x20in\x20fee_params\x20(machine-checkable),\x20never\x20in\x20allocator\x20rows\x20or\x20emitted\x20plans.','chain_ref':'allocator\x20rows\x20mint\x20real\x20per-track\x20legs','verified_on':'run75747\x20F-28\x20(plan\x20emitted\x20the\x20shape\x20the\x20playbook\x20forbids)'},{'id':'current-time-anchor-drift','kind':'settled','title':'progress\x20current_time\x20drifts\x20on\x20every\x20migration\x20—\x20purchase-anchored\x20windows\x20pin\x20order.time,\x20delivery-anchored\x20windows\x20need\x20a\x20witness\x20anchor','statement':'Anchoring\x20a\x20window\x20on\x20the\x20order\x27s\x20purchase\x20time\x20uses\x20order.time\x20(path-independent).\x20Anchoring\x20on\x20a\x20delivery/progress\x20timestamp\x20needs\x20a\x20witness-anchored\x20entry;\x20a\x20native\x20history-timestamp\x20query\x20is\x20the\x20pending\x20gap\x20(move\x20approval\x20R75-F-17).\x20Until\x20then\x20a\x20Repository\x20time-oracle\x20row\x20serves\x20delivery-anchored\x20windows.','chain_ref':'order.time\x20query\x20vs\x20progress\x20entry\x20timestamps','verified_on':'run75747\x20F-04/F-17;\x20ETSY-C\x20current_time\x20drift\x20rationale'}];export const SV2_REPLAY_GATE_CLAUSE='REPLAY\x20GATE\x20(SV-2,\x20azx7-mn-261014\x20live\x20T8\x20—\x20supersedes\x20the\x20ofn-mn-261012\x20storeFromId\x20retraction,\x20which\x20live\x20A/B\x20testing\x20disproved):\x20scope\x20the\x20claim-records\x20query\x20BY\x20THE\x20ORDER\x20—\x20logic_not({type:\x27query_reward_record_exists\x27,\x20object:<reward\x20slot>,\x20where:{storeFromId:<order\x20slot>}});\x20a\x20recipient-only\x20EMPTY\x20where:{}\x20makes\x20the\x20pre-check\x20once-per-buyer-FOR-LIFE\x20and\x20silently\x20kills\x20the\x20buyer\x27s\x20second\x20order\x20(upw-mn-261014\x20F-48);\x20a\x20RAW\x20query\x20with\x20an\x20empty\x20VecU8\x20parameter\x20is\x20an\x20uncoded\x20VM\x20error\x20(\x27Query\x20bytes\x20is\x20empty\x27,\x20klk-mn-261013\x20F-05).\x20The\x20guard\x20ENTRY\x20stamp\x20is\x20what\x20makes\x20the\x20scope\x20REAL:\x20the\x20reward\x20guard_add\x20ENTRY\x20MUST\x20pin\x20store_from_id\x20=\x20the\x20table\x20slot\x20whose\x20submitted\x20value\x20is\x20the\x20per-order\x20stamp\x20(slot\x200\x20—\x20the\x20submitted\x20Order\x20address)\x20whenever\x20the\x20guard\x20consumes\x20claim\x20records\x20—\x20the\x20MCP\x20guard_add\x20stamp\x20gate\x20hard-REJECTS\x20record-consuming\x20guards\x20that\x20omit\x20it\x20(upw\x20F-13\x20→\x20UPW-K7,\x20crs-mn-261014\x20F-17);\x20the\x20chain\x20itself\x20accepts\x20an\x20unstamped\x20entry\x20but\x20never\x20stamps\x20its\x20claim\x20records,\x20silently\x20killing\x20the\x20per-order\x20replay\x20scope\x20(ofn-mn-261012\x20F-01),\x20and\x20re-adding\x20the\x20same\x20guard\x20overwrites\x20its\x20slot\x20in\x20place\x20(live\x20pools\x20repairable).\x20SCOPE\x20SPLIT\x20(SV-2):\x20entry-stamped\x20+\x20order-scoped\x20where\x20=\x20ONCE\x20PER\x20BUYER\x20PER\x20ORDER\x20—\x20the\x20native\x20RewardClaimKey\x20is\x20(recipient,\x20guard,\x20bcs(store_from)),\x20so\x20the\x20same\x20buyer\x20on\x20a\x20DIFFERENT\x20order\x20claims\x20again\x20and\x20only\x20a\x20same-order\x20replay\x20is\x20refused\x20natively\x20(LIVE-CONFIRMED);\x20entry-stamped\x20+\x20empty\x20where\x20=\x20once\x20per\x20buyer\x20for\x20life\x20—\x20choose\x20it\x20DELIBERATELY\x20for\x20one-bounty-per-buyer\x20designs.';export const SV2_UNARMED_PRESCRIPTION='Add\x20logic_not(query_reward_record_exists(object=<reward>,\x20where:{storeFromId:{identifier:<order\x20slot>}}))\x20—\x20the\x20'+'SV-2\x20ORDER-SCOPED\x20form,\x20once\x20per\x20buyer\x20per\x20order\x20(azx7-mn-261014\x20live\x20T8;\x20the\x20EMPTY-where\x20recipient-only\x20variant\x20'+'is\x20a\x20deliberate\x20once-per-buyer-FOR-LIFE\x20choice\x20and\x20must\x20never\x20back\x20per-order\x20bounty\x20wording,\x20upw\x20F-48)';export const TWO_TX_RENEW_RECIPE='TWO-TX\x20RENEW\x20RECIPE\x20(esound2-mn-261022\x20R2-1):\x20a\x20balance/fund-gated\x20renew\x20or\x20capture\x20forward\x20is\x20satisfiable\x20only\x20'+'when\x20the\x20capture\x20funds\x20were\x20committed\x20in\x20a\x20PRIOR\x20transaction\x20—\x20split\x20the\x20coupled\x20one-PTB\x20call\x20into\x20TWO\x20transactions:\x20'+'TX1\x20commits\x20the\x20period/capture\x20funds\x20into\x20the\x20order\x27s\x20Allocation\x20(create\x20the\x20escrowed\x20payment\x20record,\x20then\x20have\x20'+'the\x20allocation\x20receive\x20it;\x20a\x20hand-built\x20PTB\x20until\x20the\x20allocation\x20top-up\x20primitive\x20ships\x20on\x20the\x20package\x20face),\x20WAIT\x20for\x20its\x20success,\x20then\x20TX2\x20'+'advances\x20the\x20forward\x20with\x20the\x20plain\x20order-holder\x20progress\x20call\x20—\x20the\x20gate\x20now\x20reads\x20the\x20committed\x20balance\x20and\x20'+'passes.\x20The\x20ONE-PTB\x20data.order_renew\x20stays\x20the\x20route\x20for\x20GATE-LESS\x20renew\x20forwards\x20only.\x20NEVER\x20retry\x20the\x20same-PTB\x20'+'shape\x20after\x20the\x20abort:\x20the\x20guard\x20verdict\x20is\x20structural\x20(guards\x20read\x20the\x20pre-transaction\x20snapshot,\x20esound-mn-261021\x20'+'B-1),\x20not\x20a\x20transient\x20balance\x20shortfall.\x20Structural\x20alternatives\x20that\x20avoid\x20the\x20second\x20transaction:\x20prepaid-full\x20'+'at\x20buy\x20(staged-RELEASE\x20semantics)\x20or\x20per-period\x20NEW\x20Orders.';export const SV2_PRIMARY_FORM_CLAUSE='PRIMARY\x20FORM\x20(SV-2,\x20azx7-mn-261014\x20live\x20T8\x20—\x20supersedes\x20the\x20ofn-mn-261012\x20storeFromId\x20retraction):\x20ENTRY-STAMPED\x20+\x20ORDER-SCOPED\x20—\x20pin\x20the\x20reward\x20guard_add\x20store_from_id\x20to\x20the\x20table\x20slot\x20whose\x20submitted\x20value\x20is\x20the\x20per-order\x20stamp\x20(slot\x200\x20—\x20the\x20submitted\x20Order\x20address)\x20and\x20scope\x20the\x20record\x20query\x20by\x20the\x20SAME\x20slot:\x20'+'logic_not({type:\x27query_reward_record_exists\x27,\x20object:<reward\x20identifier>,\x20where:{storeFromId:{identifier:0}}})\x20=\x20once\x20per\x20BUYER\x20per\x20ORDER\x20(the\x20same\x20buyer\x27s\x20next\x20order\x20still\x20claims).\x20The\x20ofn\x20F-01\x20\x27storeFromId\x20filter\x20is\x20a\x20silent\x20no-op\x27\x20verdict\x20described\x20UNSTAMPED/legacy\x20rewards\x20only:\x20a\x20guard\x20added\x20without\x20the\x20entry\x20stamp\x20writes\x20claim\x20records\x20with\x20store_from\x20=\x20none,\x20which\x20matches\x20no\x20storeFromId\x20predicate\x20—\x20on\x20stamped\x20guards\x20the\x20filter\x20is\x20live\x20and\x20A/B-verified.\x20';export const SV2_DELIBERATE_ALTERNATIVE_CLAUSE='DELIBERATE\x20ALTERNATIVE:\x20entry-stamped\x20+\x20EMPTY\x20where\x20({})\x20=\x20once\x20per\x20buyer\x20FOR\x20LIFE\x20—\x20the\x20SDK\x20encodes\x20empty\x20where-conditions\x20as\x20[VecU8\x20marker][all-None\x20RecordQueryConditions],\x20recipient\x20defaults\x20to\x20the\x20Signer,\x20so\x20the\x20gate\x20reads\x20\x27this\x20recipient\x20has\x20never\x20claimed\x20this\x20Reward\x27\x20(klk-mn-261014\x20live:\x20the\x20replay\x20aborts\x20at\x20the\x20passport\x20layer,\x20E_VERIFY_FAILED=7).\x20NEVER\x20pair\x20it\x20with\x20per-order\x20bounty\x20wording\x20—\x20it\x20silently\x20kills\x20the\x20buyer\x27s\x20second\x20order\x20(upw-mn-261014\x20F-48).\x20';
1
+ export const PROTOCOL_FACTS_VERSION=0x1;export const PROTOCOL_FACTS=[{'id':'sv2-replay-scope','kind':'settled','title':'Reward\x20replay\x20scope\x20split\x20(SV-2):\x20entry-stamped\x20+\x20order-scoped\x20where\x20is\x20the\x20primary\x20once-per-buyer-per-order\x20form','statement':'On\x20a\x20stamped\x20reward\x20guard\x20the\x20order-scoped\x20record\x20query\x20(where:{storeFromId:{identifier:<order\x20slot>}})\x20is\x20live:\x20entry-stamped\x20+\x20order-scoped\x20where\x20=\x20once\x20per\x20buyer\x20per\x20order\x20(the\x20native\x20claim\x20key\x20is\x20recipient+guard+stamp,\x20so\x20the\x20same\x20buyer\x20on\x20a\x20DIFFERENT\x20order\x20claims\x20again);\x20entry-stamped\x20+\x20empty\x20where\x20=\x20once\x20per\x20buyer\x20for\x20life\x20(a\x20deliberate\x20choice,\x20never\x20a\x20default).\x20The\x20blanket\x20\x27storeFromId\x20filter\x20is\x20inert\x27\x20verdict\x20described\x20unstamped/legacy\x20rewards\x20only.','chain_ref':'Reward\x20claim\x20records\x20key\x20on\x20(recipient,\x20guard,\x20store_from)\x20once\x20the\x20guard_add\x20entry\x20carries\x20the\x20store_from_id\x20stamp;\x20the\x20claim\x27s\x20native\x20once-slot\x20is\x20the\x20second\x20line\x20of\x20defense\x20behind\x20the\x20guard\x27s\x20record\x20gate.','verified_on':'azx7-mn-261014\x20live\x20T8\x20(A/B-verified);\x20klk-mn-261014\x20live\x20(empty-where\x20passport\x20abort)','superseded_by':'the\x20ofn-mn-261012\x20F-01\x20blanket\x20\x27storeFromId\x20filter\x20is\x20a\x20silent\x20no-op\x27\x20retraction','enforced_by':['REVIEW_REWARD_UNARMED','R-REWARD-REPLAY','guard-risk\x20R-X1-14']},{'id':'reward-entry-stamp','kind':'settled','title':'The\x20guard_add\x20store_from_id\x20stamp\x20is\x20REQUIRED\x20only\x20behind\x20a\x20storeFromId\x20record\x20predicate;\x20recipient-only\x20(predicateless)\x20record\x20gates\x20are\x20valid\x20unstamped','statement':'Reward.claim\x20keys\x20every\x20payout\x20on\x20RewardClaimKey\x20{recipient,\x20guard,\x20store_from}\x20(native\x20once-slot,\x20live\x20in\x20the\x20deployed\x20framework\x20—\x20claim-key\x20dynamic\x20fields\x20observed\x20on\x20the\x20crs9\x20mainnet\x20reward\x20object),\x20so\x20an\x20unstamped\x20entry\x20degrades\x20to\x20once-per-recipient-for-life,\x20never\x20a\x20drain.\x20The\x20MCP\x20guard_add\x20stamp\x20gate\x20therefore\x20rejects\x20ONLY\x20the\x20mismatch\x20where\x20the\x20tree\x20pins\x20a\x20storeFromId\x20predicate\x20(order-scoped\x20where)\x20while\x20the\x20entry\x20omits\x20the\x20stamp\x20—\x20unstamped\x20records\x20match\x20no\x20store_from\x20predicate,\x20silently\x20killing\x20the\x20declared\x20once-per-order\x20economics.\x20The\x20recipient-only\x20form\x20is\x20admitted\x20with\x20a\x20loud\x20advisory\x20(keep\x20the\x20order.owner\x20identity\x20leg\x20—\x20it\x20decides\x20who\x20may\x20claim).\x20Re-adding\x20the\x20same\x20guard\x20overwrites\x20its\x20slot\x20in\x20place\x20(live\x20pools\x20repairable).','chain_ref':'guard_add\x20store_from_id\x20entry\x20field;\x20claim\x20records\x20write\x20store_from\x20only\x20when\x20stamped;\x20claim\x20key\x20{recipient,\x20guard,\x20bcs(stamp)|[]}','verified_on':'crs-mn-261015\x20F-11\x20(gate\x20corrected);\x20azx7-mn-261014\x20live\x20T8\x20(stamped\x20forms);\x20crs9\x20mainnet\x20claim-key\x20dynamic\x20fields;\x20upw\x20F-13\x20→\x20UPW-K7\x20origin','enforced_by':['MCP\x20guard_add\x20stamp\x20gate\x20(predicate/stamp\x20mismatch\x20only)','REVIEW_REWARD_UNARMED','R-REWARD-REPLAY','guard-risk\x20R-X1-14']},{'id':'reward-recipient-signer','kind':'settled','title':'The\x20reward\x20guard_add\x20ENTRY\x20recipient\x20must\x20be\x20the\x20signer\x20(or\x20an\x20Entity)\x20—\x20never\x20a\x20GuardIdentifier','statement':'The\x20claim\x20entry\x20requires\x20recipient\x20==\x20tx\x20sender;\x20a\x20GuardIdentifier\x20recipient\x20resolves\x20from\x20the\x20passport\x20submission\x20(conventionally\x20the\x20submitted\x20Order\x20address)\x20and\x20can\x20never\x20equal\x20the\x20sender,\x20so\x20every\x20claim\x20aborts\x20with\x20the\x20recipient-mismatch\x20error\x20and\x20the\x20pool\x20is\x20structurally\x20unpayable.\x20The\x20order-anchor\x20GuardIdentifier\x20idiom\x20is\x20an\x20Allocation\x20push\x20rail,\x20never\x20a\x20reward\x20pull\x20rail.\x20An\x20Entity\x20recipient\x20passes\x20(replaced\x20by\x20the\x20claimant\x27s\x20local\x20account\x20at\x20claim\x20time).','chain_ref':'Reward\x20claim\x20pays\x20the\x20tx-context\x20sender;\x20recipient\x20is\x20asserted\x20equal\x20to\x20it','verified_on':'crs-mn-261015\x20F-12\x20(live\x20mainnet,\x20funded\x20pool\x20aborting\x20on\x20every\x20claim)','enforced_by':['MCP\x20guard_add\x20recipient\x20gate']},{'id':'reward-positive-amount','kind':'settled','title':'A\x20resolved\x20reward\x20claim\x20root\x20must\x20carry\x20the\x20positive-amount\x20leg\x20(order\x20amount\x20>=\x201)','statement':'A\x20zero-total\x20order\x20(zeroing-coupon\x20buy)\x20holds\x20an\x20empty\x20escrow\x20and\x20must\x20never\x20claim\x20—\x20the\x20claim\x20root\x20carries\x20an\x20explicit\x20order.amount\x20>=\x201\x20comparison\x20leg.','chain_ref':'order.amount\x20comparison\x20leg\x20in\x20the\x20guard\x20root','verified_on':'BKN-P2\x20(bkng-mn-261014\x20batch)','enforced_by':['R-REWARD-ZERO-ORDER']},{'id':'reward-identity-leg','kind':'settled','title':'The\x20reward\x20claim\x20identity\x20leg\x20(signer\x20==\x20order\x20owner)\x20is\x20mandatory\x20—\x20the\x20claim\x20entry\x20is\x20permissionless','statement':'claim()\x20pays\x20whatever\x20address\x20presents\x20a\x20qualifying\x20order;\x20without\x20the\x20identity\x20leg\x20any\x20address\x20holding\x20any\x20order\x20at\x20the\x20required\x20node\x20drains\x20the\x20pool.\x20The\x20identity\x20leg\x20stays\x20mandatory\x20until\x20a\x20chain-side\x20claim\x20permission\x20primitive\x20exists.','chain_ref':'claim\x20entry\x20has\x20no\x20protocol-level\x20order\x20binding\x20of\x20its\x20own','verified_on':'audit-261012\x20B5'},{'id':'two-rail-independence','kind':'invariant','title':'Fund\x20rails\x20are\x20NODE-gated\x20and\x20NEVER\x20read\x20order.claimed_by\x20—\x20refund\x20and\x20arbitration\x20award\x20are\x20independent\x20commercial\x20tracks\x20(decision\x2011)','statement':'TWO-RAIL\x20INDEPENDENCE\x20(decision\x2011):\x20the\x20order\x20fund\x20rails\x20(refund\x20/\x20settle\x20/\x20recover)\x20are\x20gated\x20on\x20MACHINE\x20NODES\x20—\x20terminal\x20refund/settle\x20node,\x20terminal-node-gated\x20recovery\x20sweep\x20—\x20and\x20NEVER\x20read\x20order.claimed_by;\x20the\x20arbitration\x20award\x20is\x20the\x20indemnity\x20track\x27s\x20separate\x20commercial\x20payout,\x20so\x20a\x20buyer\x20may\x20collect\x20BOTH\x20refund\x20and\x20award.\x20The\x20overlap\x20is\x20LEGAL\x20and\x20disclosed\x20at\x20the\x20MCP\x20dual-payout\x20confirmation\x20gate\x20(acknowledge_dual_payout\x20—\x20a\x20HUMAN\x20netting\x20decision).\x20Any\x20claimed_by\x20leg\x20on\x20a\x20fund\x20rail\x20is\x20the\x20RAIL_CLAIMED_BY_LEG\x20critical;\x20the\x20pre-decision-11\x20claimed_by\x20polarity\x20pairing\x20(refund\x20none\x20+\x20recovery\x20some)\x20is\x20RETIRED.','chain_ref':'the\x20claimed_by\x20Bool\x20axis\x20on\x20the\x20order\x20(award-paid\x20marker)\x20is\x20arbitration-side\x20evidence\x20only;\x20the\x20escrow\x27s\x20Order-side\x20receive\x20deliberately\x20has\x20NO\x20claimed_by\x20gate\x20(rex2\x20T9\x20live-proven)','verified_on':'az-mn-261007\x20(awarded\x20escrow\x20stranded),\x20run75747\x20F-06/F-32;\x20superseding\x20shape:\x20decision\x2011\x20(2026-11-01)','superseded_by':'the\x20claimed-by-polarity-pair\x20teaching\x20(pre-decision-11\x20claimed_by\x20rail\x20pairing)','enforced_by':['RAIL_CLAIMED_BY_LEG','R-FUND-RAIL-CLAIMED-BY','DUAL-RAIL-01\x20dual-payout\x20gate']},{'id':'allocator-rows-authoritative','kind':'settled','title':'allocator.rows\x20are\x20the\x20authoritative\x20money\x20shape\x20—\x20prose\x20must\x20not\x20restate\x20the\x20economics','statement':'The\x20shipped\x20rows\x20ARE\x20the\x20split;\x20any\x20prose\x20restatement\x20of\x20percentages,\x20surplus\x20behavior\x20or\x20recipient\x20structure\x20is\x20a\x20drift\x20hazard\x20and\x20must\x20defer\x20to\x20the\x20rows.\x20A\x20prose/rows\x20contradiction\x20is\x20always\x20a\x20prose\x20bug.','chain_ref':'the\x20allocator\x20configure\x20step\x20carries\x20the\x20rows\x20verbatim','verified_on':'run75747\x20F-09\x20(trust_mechanisms\x20R6\x20contradicted\x20the\x20rows)','enforced_by':['R-PLAN-01..07','template_allocator_rows\x20plan\x20passthrough']},{'id':'inv-guard-node-literals-resolve','kind':'invariant','title':'Every\x20node\x20literal\x20named\x20in\x20guard\x20prose\x20must\x20resolve\x20to\x20the\x20template\x27s\x20own\x20machine\x20node\x20names','statement':'A\x20node\x20set\x20like\x20{reviewed,\x20closed}\x20is\x20dead\x20prose\x20when\x20`closed`\x20is\x20not\x20a\x20machine\x20node\x20—\x20the\x20template\x27s\x20machine\x20shape\x20is\x20the\x20truth\x20and\x20the\x20prose\x20follows.\x20Sync\x20test:\x20reward/guard\x20prose\x20node\x20sets\x20⊆\x20machine\x20node\x20names.','chain_ref':'guard\x20roots\x20compare\x20progress.current\x20against\x20machine\x20node\x20name\x20constants','verified_on':'run75747\x20F-10\x20(reward\x20prose\x20named\x20`closed`;\x20the\x20terminal\x20is\x20`completed`)','enforced_by':['protocol-facts-sync\x20catalog\x20lint']},{'id':'inv-guard-keys-bind','kind':'invariant','title':'Every\x20executable\x20guard\x20key\x20must\x20have\x20at\x20least\x20one\x20binding\x20site;\x20advisory\x20designs\x20must\x20say\x20so;\x20omit\x20is\x20the\x20sanctioned\x20does-not-apply','statement':'A\x20guards[]\x20entry\x20with\x20no\x20binding\x20site\x20(machine\x20forward,\x20allocator\x20guard_key,\x20spec\x20policy,\x20service/buy\x20mount)\x20is\x20either\x20advisory\x20by\x20declaration\x20or\x20a\x20defect\x20—\x20it\x20must\x20never\x20silently\x20enter\x20the\x20creation\x20plan.\x20`guard_resolutions[k]\x20=\x20{kind:\x27omit\x27}`\x20is\x20the\x20sanctioned\x20way\x20to\x20say\x20a\x20design\x20does\x20not\x20apply\x20to\x20this\x20shop.','chain_ref':'guards\x20materialize\x20only\x20through\x20their\x20binding\x20site','verified_on':'run75747\x20F-25\x20(dead\x20duplicate\x20guard)\x20/\x20F-38\x20(unresolvable\x20advisory)','enforced_by':['HOST-GRAPH-01','UNRESOLVED-GUARD-01','GUARD_RESOLUTION_UNKNOWN']},{'id':'inv-fee-param-names-resolve','kind':'invariant','title':'Every\x20*_days\x20/\x20*_hours\x20/\x20*_bps\x20name\x20used\x20in\x20template\x20prose\x20must\x20exist\x20in\x20that\x20template\x27s\x20fee_params','statement':'Time\x20and\x20bps\x20parameters\x20are\x20fee\x20params,\x20never\x20hand-written\x20constants\x20(KLM-A\x20/\x20R-TIME-PROFILE):\x20a\x20token\x20named\x20in\x20a\x20guard\x20purpose\x20is\x20a\x20landing\x20commitment,\x20so\x20it\x20must\x20be\x20a\x20declared\x20fee\x20param.\x20Pseudo-params\x20in\x20prose\x20are\x20renamed\x20to\x20descriptive\x20wording\x20or\x20promoted\x20to\x20real\x20fee\x20params.','chain_ref':'fee_params\x20feed\x20the\x20parameter\x20->\x20landing-site\x20table\x20and\x20override\x20merging','verified_on':'run75747\x20F-23\x20(review_window_days\x20referenced,\x20never\x20declared)','enforced_by':['protocol-facts-sync\x20catalog\x20lint']},{'id':'inv-no-platform-zero-leg','kind':'invariant','title':'No\x20zero-share\x20platform\x20allocation\x20leg\x20may\x20be\x20emitted','statement':'A\x20`platform`\x20recipient\x20at\x200%\x20is\x20a\x20no-op\x20leg\x20that\x20can\x20only\x20mislead\x20—\x20explicit\x20zeros\x20belong\x20in\x20fee_params\x20(machine-checkable),\x20never\x20in\x20allocator\x20rows\x20or\x20emitted\x20plans.','chain_ref':'allocator\x20rows\x20mint\x20real\x20per-track\x20legs','verified_on':'run75747\x20F-28\x20(plan\x20emitted\x20the\x20shape\x20the\x20playbook\x20forbids)'},{'id':'current-time-anchor-drift','kind':'settled','title':'progress\x20current_time\x20drifts\x20on\x20every\x20migration\x20—\x20purchase-anchored\x20windows\x20pin\x20order.time,\x20delivery-anchored\x20windows\x20need\x20a\x20witness\x20anchor','statement':'Anchoring\x20a\x20window\x20on\x20the\x20order\x27s\x20purchase\x20time\x20uses\x20order.time\x20(path-independent).\x20Anchoring\x20on\x20a\x20delivery/progress\x20timestamp\x20needs\x20a\x20witness-anchored\x20entry;\x20a\x20native\x20history-timestamp\x20query\x20is\x20the\x20pending\x20gap\x20(move\x20approval\x20R75-F-17).\x20Until\x20then\x20a\x20Repository\x20time-oracle\x20row\x20serves\x20delivery-anchored\x20windows.','chain_ref':'order.time\x20query\x20vs\x20progress\x20entry\x20timestamps','verified_on':'run75747\x20F-04/F-17;\x20ETSY-C\x20current_time\x20drift\x20rationale'}];export const SV2_REPLAY_GATE_CLAUSE='REPLAY\x20GATE\x20(SV-2,\x20azx7-mn-261014\x20live\x20T8\x20—\x20supersedes\x20the\x20ofn-mn-261012\x20storeFromId\x20retraction,\x20which\x20live\x20A/B\x20testing\x20disproved):\x20scope\x20the\x20claim-records\x20query\x20BY\x20THE\x20ORDER\x20—\x20logic_not({type:\x27query_reward_record_exists\x27,\x20object:<reward\x20slot>,\x20where:{storeFromId:<order\x20slot>}});\x20a\x20recipient-only\x20EMPTY\x20where:{}\x20makes\x20the\x20pre-check\x20once-per-buyer-FOR-LIFE\x20and\x20silently\x20kills\x20the\x20buyer\x27s\x20second\x20order\x20(upw-mn-261014\x20F-48);\x20a\x20RAW\x20query\x20with\x20an\x20empty\x20VecU8\x20parameter\x20is\x20an\x20uncoded\x20VM\x20error\x20(\x27Query\x20bytes\x20is\x20empty\x27,\x20klk-mn-261013\x20F-05).\x20The\x20guard\x20ENTRY\x20stamp\x20is\x20what\x20makes\x20the\x20scope\x20REAL:\x20the\x20reward\x20guard_add\x20ENTRY\x20MUST\x20pin\x20store_from_id\x20=\x20the\x20table\x20slot\x20whose\x20submitted\x20value\x20is\x20the\x20per-order\x20stamp\x20(slot\x200\x20—\x20the\x20submitted\x20Order\x20address)\x20whenever\x20the\x20guard\x20consumes\x20claim\x20records\x20—\x20the\x20MCP\x20guard_add\x20stamp\x20gate\x20hard-REJECTS\x20record-consuming\x20guards\x20that\x20omit\x20it\x20(upw\x20F-13\x20→\x20UPW-K7,\x20crs-mn-261014\x20F-17);\x20the\x20chain\x20itself\x20accepts\x20an\x20unstamped\x20entry\x20but\x20never\x20stamps\x20its\x20claim\x20records,\x20silently\x20killing\x20the\x20per-order\x20replay\x20scope\x20(ofn-mn-261012\x20F-01),\x20and\x20re-adding\x20the\x20same\x20guard\x20overwrites\x20its\x20slot\x20in\x20place\x20(live\x20pools\x20repairable).\x20SCOPE\x20SPLIT\x20(SV-2):\x20entry-stamped\x20+\x20order-scoped\x20where\x20=\x20ONCE\x20PER\x20BUYER\x20PER\x20ORDER\x20—\x20the\x20native\x20RewardClaimKey\x20is\x20(recipient,\x20guard,\x20bcs(store_from)),\x20so\x20the\x20same\x20buyer\x20on\x20a\x20DIFFERENT\x20order\x20claims\x20again\x20and\x20only\x20a\x20same-order\x20replay\x20is\x20refused\x20natively\x20(LIVE-CONFIRMED);\x20entry-stamped\x20+\x20empty\x20where\x20=\x20once\x20per\x20buyer\x20for\x20life\x20—\x20choose\x20it\x20DELIBERATELY\x20for\x20one-bounty-per-buyer\x20designs.';export const SV2_UNARMED_PRESCRIPTION='Add\x20logic_not(query_reward_record_exists(object=<reward>,\x20where:{storeFromId:{identifier:<order\x20slot>}}))\x20—\x20the\x20'+'SV-2\x20ORDER-SCOPED\x20form,\x20once\x20per\x20buyer\x20per\x20order\x20(azx7-mn-261014\x20live\x20T8;\x20the\x20EMPTY-where\x20recipient-only\x20variant\x20'+'is\x20a\x20deliberate\x20once-per-buyer-FOR-LIFE\x20choice\x20and\x20must\x20never\x20back\x20per-order\x20bounty\x20wording,\x20upw\x20F-48)';export const TWO_TX_RENEW_RECIPE='TWO-TX\x20RENEW\x20RECIPE\x20(esound2-mn-261022\x20R2-1):\x20a\x20balance/fund-gated\x20renew\x20or\x20capture\x20forward\x20is\x20satisfiable\x20only\x20'+'when\x20the\x20capture\x20funds\x20were\x20committed\x20in\x20a\x20PRIOR\x20transaction\x20—\x20split\x20the\x20coupled\x20one-PTB\x20call\x20into\x20TWO\x20transactions:\x20'+'TX1\x20commits\x20the\x20period/capture\x20funds\x20into\x20the\x20order\x27s\x20Allocation\x20(create\x20the\x20escrowed\x20payment\x20record,\x20then\x20have\x20'+'the\x20allocation\x20receive\x20it;\x20a\x20hand-built\x20PTB\x20until\x20the\x20allocation\x20top-up\x20primitive\x20ships\x20on\x20the\x20package\x20face),\x20WAIT\x20for\x20its\x20success,\x20then\x20TX2\x20'+'advances\x20the\x20forward\x20with\x20the\x20plain\x20order-holder\x20progress\x20call\x20—\x20the\x20gate\x20now\x20reads\x20the\x20committed\x20balance\x20and\x20'+'passes.\x20The\x20ONE-PTB\x20data.order_renew\x20stays\x20the\x20route\x20for\x20GATE-LESS\x20renew\x20forwards\x20only.\x20NEVER\x20retry\x20the\x20same-PTB\x20'+'shape\x20after\x20the\x20abort:\x20the\x20guard\x20verdict\x20is\x20structural\x20(guards\x20read\x20the\x20pre-transaction\x20snapshot,\x20esound-mn-261021\x20'+'B-1),\x20not\x20a\x20transient\x20balance\x20shortfall.\x20Structural\x20alternatives\x20that\x20avoid\x20the\x20second\x20transaction:\x20prepaid-full\x20'+'at\x20buy\x20(staged-RELEASE\x20semantics)\x20or\x20per-period\x20NEW\x20Orders.';export const SV2_PRIMARY_FORM_CLAUSE='PRIMARY\x20FORM\x20(SV-2,\x20azx7-mn-261014\x20live\x20T8\x20—\x20supersedes\x20the\x20ofn-mn-261012\x20storeFromId\x20retraction):\x20ENTRY-STAMPED\x20+\x20ORDER-SCOPED\x20—\x20pin\x20the\x20reward\x20guard_add\x20store_from_id\x20to\x20the\x20table\x20slot\x20whose\x20submitted\x20value\x20is\x20the\x20per-order\x20stamp\x20(slot\x200\x20—\x20the\x20submitted\x20Order\x20address)\x20and\x20scope\x20the\x20record\x20query\x20by\x20the\x20SAME\x20slot:\x20'+'logic_not({type:\x27query_reward_record_exists\x27,\x20object:<reward\x20identifier>,\x20where:{storeFromId:{identifier:0}}})\x20=\x20once\x20per\x20BUYER\x20per\x20ORDER\x20(the\x20same\x20buyer\x27s\x20next\x20order\x20still\x20claims).\x20The\x20ofn\x20F-01\x20\x27storeFromId\x20filter\x20is\x20a\x20silent\x20no-op\x27\x20verdict\x20described\x20UNSTAMPED/legacy\x20rewards\x20only:\x20a\x20guard\x20added\x20without\x20the\x20entry\x20stamp\x20writes\x20claim\x20records\x20with\x20store_from\x20=\x20none,\x20which\x20matches\x20no\x20storeFromId\x20predicate\x20—\x20on\x20stamped\x20guards\x20the\x20filter\x20is\x20live\x20and\x20A/B-verified.\x20';export const SV2_DELIBERATE_ALTERNATIVE_CLAUSE='DELIBERATE\x20ALTERNATIVE:\x20entry-stamped\x20+\x20EMPTY\x20where\x20({})\x20=\x20once\x20per\x20buyer\x20FOR\x20LIFE\x20—\x20the\x20SDK\x20encodes\x20empty\x20where-conditions\x20as\x20[VecU8\x20marker][all-None\x20RecordQueryConditions],\x20recipient\x20defaults\x20to\x20the\x20Signer,\x20so\x20the\x20gate\x20reads\x20\x27this\x20recipient\x20has\x20never\x20claimed\x20this\x20Reward\x27\x20(klk-mn-261014\x20live:\x20the\x20replay\x20aborts\x20at\x20the\x20passport\x20layer,\x20E_VERIFY_FAILED=7).\x20NEVER\x20pair\x20it\x20with\x20per-order\x20bounty\x20wording\x20—\x20it\x20silently\x20kills\x20the\x20buyer\x27s\x20second\x20order\x20(upw-mn-261014\x20F-48).\x20';
@@ -0,0 +1,13 @@
1
+ import type { IndustryTemplate } from "./template-loader.js";
2
+ export type RequirementFamilyId = "fulfillment" | "after_sales" | "review_incentive" | "discount" | "privacy_channel";
3
+ export type RequirementStatus = "mapped" | "unmapped" | "blocker";
4
+ export interface RequirementCoverageEntry {
5
+ family: RequirementFamilyId;
6
+ label: string;
7
+ status: RequirementStatus;
8
+ evidence: string;
9
+ target?: string;
10
+ note: string;
11
+ }
12
+ export declare const REQUIREMENT_FAMILY_IDS: readonly RequirementFamilyId[];
13
+ export declare function requirementCoverage(text: string, template?: IndustryTemplate): RequirementCoverageEntry[];
@@ -0,0 +1 @@
1
+ const FULFILLMENT_BLOCKER_NOTE='The\x20matched\x20template\x20declares\x20NO\x20fulfillment\x20topology\x20(logistics_mode\x20absent\x20or\x20none)\x20—\x20'+'a\x20shipping\x20promise\x20with\x20no\x20dispatch\x20rail\x20cannot\x20be\x20honored\x20by\x20this\x20build.\x20The\x20fulfillment\x20'+'topology\x20ships\x20in\x20the\x20logistics-capable\x20siblings\x20(e.g.\x20crowdfunding/reward-campaign-fulfillment,\x20'+'the\x20registered\x20fulfillment\x20combination\x20with\x20the\x20threshold\x20campaign\x20—\x206B-05):\x20compose\x20via\x20'+'supply_chain\x20composition,\x20or\x20pick\x20a\x20logistics-capable\x20template.\x20Decide\x20before\x20apply\x20—\x20'+'do\x20NOT\x20ship\x20a\x20shop\x20that\x20structurally\x20cannot\x20keep\x20the\x20promise.',FAMILIES=[{'id':'fulfillment','label':'Shipping\x20/\x20fulfillment','patterns':[/\bship(?:ping|ped|s)?\b/i,/\btracking\s+(?:number|code|link)\b/i,/\bparcels?\b|\bpackages?\s+(?:shipped|mailed|sent)\b/i,/\bcouriers?\b|\bfreight\b/i,/\bwarehous(?:e|ing)\b/i,/\bdispatch(?:es|ed)?\b/i],'support':a=>a?.['logistics_mode']&&a['logistics_mode']!=='none'?{'status':'mapped','target':'Machine\x20logistics\x20rail\x20('+a['logistics_mode']+')','note':'The\x20template\x20declares\x20logistics_mode=\x27'+a['logistics_mode']+'\x27\x20—\x20compile\x20enforces\x20the\x20declared\x20dispatch\x20topology\x20(the\x20six\x20LOGISTICS_*\x20gates).'}:{'status':'blocker','note':FULFILLMENT_BLOCKER_NOTE}},{'id':'after_sales','label':'After-sales\x20(returns\x20/\x20exchange\x20/\x20warranty)','patterns':[/\breturn(?:s|ed)?\s+(?:window|policy)\b/i,/\b\d{1,3}[\s-]?day\s+(?:returns?|exchange)\b/i,/\bafter[- ]?sales\b/i,/\bwarrant(?:y|ies)\b/i,/\bmoney[- ]?back\s+guarantee\b/i],'support':a=>a?.['after_sales_mode']&&a['after_sales_mode']!=='none'?{'status':'mapped','target':'After-sales\x20rail\x20('+a['after_sales_mode']+')','note':'The\x20template\x20declares\x20after_sales_mode=\x27'+a['after_sales_mode']+'\x27\x20—\x20compile\x20verifies\x20the\x20rail\x20is\x20structurally\x20backed\x20(AFTER_SALES_RAIL_MISSING).'}:{'status':'blocker','note':'The\x20matched\x20template\x20declares\x20no\x20after-sales\x20rail.\x20Declare\x20after_sales_mode\x20(return|exchange|warranty)\x20on\x20the\x20build\x20—\x20compile\x20then\x20emits\x20the\x20rail\x20and\x20blocks\x20if\x20the\x20machine\x20topology\x20cannot\x20carry\x20it\x20(AFTER_SALES_RAIL_MISSING).\x20A\x20return\x20promise\x20on\x20a\x20shop\x20with\x20no\x20rail\x20is\x20a\x20false\x20advertisement,\x20not\x20a\x20default.'}},{'id':'review_incentive','label':'Review\x20rewards\x20/\x20cashback','patterns':[/\breview\s+(?:rewards?|bount(?:y|ies)|incentives?)\b/i,/\bcash[- ]?backs?\b|\brebates?\b/i,/\bincentiv\w+\s+reviews?\b/i,/\bbonus\s+for\s+(?:a\s+)?reviews?\b/i,/\b(?:earn|get)\s+(?:a\s+)?(?:cash\s*back|rebate)\s+(?:on|for|per)\b/i],'support':a=>a?.['review_mode']==='review_reward'?{'status':'mapped','target':'Reward\x20object\x20+\x20funded\x20claim\x20guard','note':'The\x20template\x20declares\x20review_mode=\x27review_reward\x27\x20—\x20the\x20pool\x20MUST\x20be\x20funded\x20at\x20generation\x20(reward_funding\x20input);\x20an\x20unfunded\x20promise\x20is\x20refused\x20(INV-4).'}:{'status':'blocker','note':'An\x20incentive\x20promise\x20needs\x20a\x20FUNDED\x20reward\x20rail:\x20declare\x20review_mode=\x27review_reward\x27\x20plus\x20reward_funding\x20(+\x20reward_claim_amount\x20for\x20per-claim\x20bounties).\x20review_mode=\x27review\x27\x20carries\x20the\x20reputation\x20rail\x20only\x20—\x20zero\x20payout\x20—\x20and\x20an\x20undeclared\x20mode\x20carries\x20nothing.\x20An\x20unfunded\x20incentive\x20promise\x20is\x20refused\x20at\x20generation,\x20never\x20silently\x20shipped.'}},{'id':'discount','label':'Coupons\x20/\x20discounts','patterns':[/\bcoupons?\b/i,/\bpromo(?:\s*codes?)?\b/i,/\bdiscount\s+codes?\b|\bdiscounts?\b/i,/\bvouchers?\b/i],'support':()=>({'status':'mapped','target':'Service.discount','note':'The\x20Discount\x20primitive\x20is\x20universal:\x20minted\x20post-deploy\x20on\x20the\x20Service\x20(budget\x20=\x20max_uses\x20×\x20value;\x20coupons\x20are\x20BURNED\x20on\x20use\x20—\x20never\x20restocked\x20or\x20refunded).\x20Adopt\x20the\x20discount_lifecycle\x20module\x20to\x20accept\x20its\x20disclosure\x20obligations.'})},{'id':'privacy_channel','label':'Private\x20/\x20discreet\x20communication\x20channel','patterns':[/\bprivacy\s+channels?\b/i,/\bdiscreet\b/i,/\bprivate\s+(?:chat|message|messenging|conversations?|communications?|channels?)\b/i,/\bencrypted\s+(?:chat|messag\w+)/i,/\bconfidential\s+(?:purchases?|communications?)\b/i],'support':()=>({'status':'mapped','target':'Messenger\x20(E2EE)','note':'Pre-order\x20negotiation\x20and\x20evidence\x20run\x20over\x20end-to-end-encrypted\x20Messenger\x20conversations;\x20WTS\x20evidence\x20exports\x20anchor\x20disputes.\x20Message\x20BODIES\x20never\x20land\x20on-chain\x20—\x20only\x20hashes\x20do\x20(by\x20design,\x20not\x20a\x20gap).'})}];export const REQUIREMENT_FAMILY_IDS=FAMILIES['map'](a=>a['id']);export function requirementCoverage(a,b){const c=[];for(const d of FAMILIES){let e;for(const g of d['patterns']){const h=a['match'](g);if(h){e=h[0x0];break;}}if(!e)continue;const f=d['support'](b);c['push']({'family':d['id'],'label':d['label'],'status':f['status'],'evidence':e,...f['target']?{'target':f['target']}:{},'note':f['note']});}return c;}
@@ -1 +1 @@
1
- import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';export{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD};export const REWARD_NEW={'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward<T>','governed_operations':['create\x20a\x20new\x20Reward\x20pool'],'sdk_exposed':!![]};export const REWARD_DESCRIPTION={'index':0x97,'name':'REWARD_DESCRIPTION','description':'Update\x20description','governed_operations':['update\x20the\x20Reward\x20description'],'sdk_exposed':!![]};export const REWARD_GUARD={'index':0x98,'name':'REWARD_GUARD','description':'Add\x20/\x20remove\x20expired\x20guards\x20(≤\x20MAX_GUARD_COUNT_REWARD=200)','governed_operations':['add\x20a\x20claim\x20guard\x20to\x20the\x20Reward','remove\x20expired\x20claim\x20guards'],'sdk_exposed':!![]};export const REWARD_COIN_ADD={'index':0x99,'name':'REWARD_COIN_ADD','description':'Deposit\x20Coin<T>\x20directly\x20into\x20Reward\x20balance\x20(joins\x20Balance<T>)','governed_operations':['deposit\x20Coin<T>\x20into\x20the\x20Reward\x20balance'],'sdk_exposed':!![]};export const REWARD_RECEIVE={'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20CoinWrapper<T>\x20into\x20the\x20balance\x20(unwrapped\x20with\x20balance\x20check)','governed_operations':['receive\x20a\x20CoinWrapper<T>\x20payment\x20into\x20the\x20balance'],'sdk_exposed':!![]};export const REWARD_GUARD_EXPIRATION_TIME_ADD={'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Set\x20/\x20cancel\x20guard_not_added_expiration_time\x20(time-lock\x20on\x20new\x20guard\x20additions)','governed_operations':['set\x20or\x20cancel\x20the\x20time-lock\x20on\x20adding\x20new\x20guards'],'sdk_exposed':!![]};export const REWARD_OWNER_RECEIVE={'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receives\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20at\x20terminal\x20state\x20(unwrap\x20→\x20owner)','governed_operations':['owner\x20receipt\x20of\x20payments\x20at\x20terminal\x20state\x20(unwrapped\x20to\x20the\x20owner)','owner\x20receipt\x20of\x20whole\x20objects\x20at\x20terminal\x20state'],'sdk_exposed':!![]};export const REWARD_UM={'index':0x9d,'name':'REWARD_UM','description':'Bind\x20/\x20unbind\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination','governed_operations':['bind\x20a\x20Contact\x20as\x20the\x20UM\x20coordinator','unbind\x20the\x20UM\x20Contact'],'sdk_exposed':!![]};export const REWARD_WITHDRAW={'index':0x9e,'name':'REWARD_WITHDRAW','description':'Withdraw\x20balance\x20from\x20the\x20Reward\x20to\x20the\x20tx\x20sender\x20inside\x20a\x20Payment\x20object\x20receipt\x20(ETS-B,\x20the\x20only\x20non-claim\x20exit;\x20blocked\x20while\x20the\x20declared\x20no-guard\x20window\x20guard_not_added_expiration_time\x20is\x20in\x20the\x20future)','governed_operations':['withdraw\x20an\x20amount\x20from\x20the\x20Reward\x20balance,\x20delivered\x20to\x20the\x20executing\x20account\x20inside\x20a\x20Payment\x20object\x20(the\x20on-chain\x20receipt;\x20unwrap\x20mode\x20pays\x20the\x20coin\x20out\x20in\x20the\x20same\x20transaction)\x20(fails\x20with\x20E_GUARD_LOCKED_TIME\x20while\x20guard_not_added_expiration_time\x20is\x20in\x20the\x20future)'],'sdk_exposed':!![]};export const REWARD_PERMISSIONS=[REWARD_NEW,REWARD_DESCRIPTION,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE,REWARD_GUARD_EXPIRATION_TIME_ADD,REWARD_OWNER_RECEIVE,REWARD_UM,REWARD_WITHDRAW];export const REWARD_FIELDS=[{'name':'id','move_type':'UID','mutability':'immutable','set_at_creation':!![],'constraint':'Object\x20UID;\x20assigned\x20at\x20creation.\x20Never\x20changes.'},{'name':'description','move_type':'String','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x97,'constraint':'Must\x20satisfy\x20common::DESCRIPTION.\x20Updated\x20via\x20permission\x20151.'},{'name':'guards','move_type':'vector<RewardGuard>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x98,'constraint':'vector::length\x20<\x20MAX_GUARD_COUNT\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_GUARD_COUNT_EXCEEDED']},{'name':'balance','move_type':'Balance<T>','mutability':'runtime','set_at_creation':!![],'constraint':'Zero\x20at\x20creation\x20(balance::zero());\x20grows\x20via\x20coin_add/receive;\x20shrinks\x20via\x20claim\x20(split)\x20and\x20via\x20withdraw\x20(ETS-B,\x20funds\x20leave\x20inside\x20a\x20Payment\x20object\x20receipt,\x20only\x20when\x20the\x20no-guard\x20window\x20has\x20elapsed).','related_errors':['E_INSUFFICIENT_BALANCE','E_GUARD_LOCKED_TIME']},{'name':'guard_not_added_expiration_time','move_type':'Option<u64>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9b,'constraint':'Option<timestamp_ms>.\x20When\x20Some(t):\x20guard_add\x20AND\x20withdraw\x20require\x20clock\x20>\x20t\x20(E_GUARD_LOCKED_TIME).\x20When\x20None\x20or\x20t\x20<\x20now:\x20guards\x20can\x20be\x20added\x20and\x20balance\x20withdrawn.','related_errors':['E_GUARD_LOCKED_TIME','E_GUARD_LOCKED_TIME_NOT_INCREASING','E_GUARD_LOCKED_TIME_INVALID']},{'name':'record','move_type':'ParentTable<address,\x20RecipientRecord>','mutability':'runtime','set_at_creation':!![],'constraint':'Per-recipient\x20claim\x20history.\x20Each\x20RecipientRecord.amount\x20vector\x20has\x20length\x20<\x20MAX_RECORD_COUNT\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_RECORD_COUNT_EXCEEDED']},{'name':'um','move_type':'Option<address>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9d,'constraint':'Option<Contact\x20address>.\x20Binding\x20creates\x20an\x20object-linker\x20core\x20binding;\x20unbinding\x20disaffiliates.'},{'name':'permission','move_type':'address','mutability':'admin_mutable','set_at_creation':!![],'constraint':'Permission\x20object\x20address.\x20Updated\x20owner-only\x20(asserts\x20old.owner\x20==\x20sender);\x20the\x20change\x20is\x20registered\x20as\x20an\x20object-linker\x20affiliation\x20change.'}];export const REWARD_GUARD_CONSTRUCTORS=[{'constructor':'dynamic_recipient_dynamic_amount','recipient_type':'GuardIdentifier','amount_type':'GuardU64Identifier','params':{'recipient_param':'u8','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['recipient\x20identifier\x20must\x20resolve\x20to\x20an\x20address\x20in\x20the\x20Passport\x20table\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','amount\x20identifier\x20must\x20resolve\x20to\x20a\x20u64\x20Passport\x20value\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20dynamic\x20amount\x20—\x20both\x20extracted\x20from\x20Passport\x20at\x20claim\x20time\x20(e.g.\x20referral\x20rewards\x20where\x20referrer\x20and\x20amount\x20vary\x20per\x20claim).'},{'constructor':'dynamic_recipient_fixed_amount','recipient_type':'GuardIdentifier','amount_type':'Fixed','params':{'recipient_param':'u8','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['recipient\x20identifier\x20must\x20resolve\x20to\x20an\x20address\x20in\x20the\x20Passport\x20table\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20first-order\x20reward\x20where\x20any\x20new\x20customer\x20claims\x20a\x20fixed\x201\x20WOW.'},{'constructor':'entity_recipient_dynamic_amount','recipient_type':'Entity','amount_type':'GuardU64Identifier','params':{'recipient_param':'address','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['amount\x20identifier\x20must\x20resolve\x20to\x20a\x20u64\x20Passport\x20value\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fixed\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20tiered\x20loyalty\x20reward\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(tier\x20level).'},{'constructor':'entity_recipient_fixed_amount','recipient_type':'Entity','amount_type':'Fixed','params':{'recipient_param':'address','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fully\x20fixed\x20recipient\x20+\x20amount\x20—\x20simplest\x20configuration\x20(e.g.\x20specific\x20partner\x20bounty).'},{'constructor':'caller_recipient_dynamic_amount','recipient_type':'Signer','amount_type':'GuardU64Identifier','params':{'amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['amount\x20identifier\x20must\x20resolve\x20to\x20a\x20u64\x20Passport\x20value\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20self-service\x20claim\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(e.g.\x20cashback\x20rate).'},{'constructor':'caller_recipient_fixed_amount','recipient_type':'Signer','amount_type':'Fixed','params':{'amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20flash\x20sale\x20where\x20any\x20eligible\x20caller\x20claims\x20a\x20fixed\x20reward.'}];export const REWARD_ERROR_CODES=[{'code':0x1,'name':'E_GUARD_LOCKED_TIME_NOT_INCREASING','description':'guard-lock\x20time\x20update:\x20new\x20time\x20<\x20current\x20clock\x20(must\x20be\x20≥\x20now)','trigger_operation':'guard-lock\x20time\x20update\x20(155)'},{'code':0x2,'name':'E_GUARD_EXPIRED','description':'guard_add\x20on\x20guard\x20with\x20expiration_time\x20<\x20now,\x20OR\x20claim\x20on\x20guard\x20with\x20expiration_time\x20<\x20now','trigger_operation':'guard_add\x20/\x20claim'},{'code':0x3,'name':'E_GUARD_COUNT_EXCEEDED','description':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT=200\x20(only\x20on\x20NEW\x20guard,\x20not\x20on\x20update\x20of\x20existing)','trigger_operation':'guard_add'},{'code':0x4,'name':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','description':'RewardGuard\x20constructor:\x20recipient\x20identifier\x20type\x20is\x20not\x20address\x20(GuardIdentifier\x20variant\x20only)','trigger_operation':'claim-guard\x20construction'},{'code':0x5,'name':'E_AMOUNT_NOT_U64','description':'RewardGuard\x20constructor:\x20amount\x20identifier\x20type\x20is\x20not\x20u64\x20(GuardU64Identifier\x20variant\x20only)','trigger_operation':'claim-guard\x20construction'},{'code':0x6,'name':'E_INSUFFICIENT_BALANCE','description':'claim:\x20balance\x20<\x20amount\x20(cannot\x20split\x20more\x20than\x20held)','trigger_operation':'claim'},{'code':0x7,'name':'E_GUARD_NOT_FOUND','description':'claim:\x20no\x20guard\x20in\x20self.guards\x20matches\x20the\x20supplied\x20guard\x20address','trigger_operation':'claim'},{'code':0x8,'name':'E_RECORD_COUNT_EXCEEDED','description':'claim:\x20recipient\x20already\x20has\x20MAX_RECORD_COUNT=5200\x20entries\x20(E_RECORD_COUNT_EXCEEDED)','trigger_operation':'claim'},{'code':0xa,'name':'E_GUARD_LOCKED_TIME','description':'guard_add\x20/\x20withdraw\x20while\x20guard_not_added_expiration_time\x20is\x20Some\x20and\x20clock\x20≤\x20expiration_time','trigger_operation':'guard_add\x20/\x20withdraw'},{'code':0xb,'name':'E_GUARD_LOCKED_TIME_INVALID','description':'guard-lock\x20time\x20update:\x20new\x20Some(t)\x20where\x20t\x20≤\x20now\x20(must\x20be\x20future)','trigger_operation':'guard-lock\x20time\x20update\x20(155)'},{'code':0xc,'name':'E_STORE_FROM_ID_NOT_COMPATIBLE','description':'RewardGuard\x20constructor:\x20store_from_id\x20identifier\x20type\x20is\x20not\x20number\x20or\x20address','trigger_operation':'claim-guard\x20construction'},{'code':0xd,'name':'E_CLAIM_ALREADY_MADE','description':'claim:\x20the\x20(recipient,\x20guard,\x20store_from\x20value)\x20once-slot\x20is\x20already\x20consumed\x20(MOV-PROTOCOL-1212\x20F-01\x20fix\x20—\x20replay\x20aborts,\x20the\x20pool\x20keeps\x20its\x20balance).\x20Empty\x20store_from\x20slot\x20=\x20once\x20per\x20(recipient,\x20guard);\x20a\x20store_from\x20value\x20pins\x20a\x20per-value\x20slot\x20(per-order\x20bounty)','trigger_operation':'claim'},{'code':0xe,'name':'E_CLAIM_RECIPIENT_NOT_SIGNER','description':'claim:\x20the\x20resolved\x20recipient\x20(from\x20guard\x20submissions\x20or\x20the\x20Entity\x20binding)\x20is\x20not\x20the\x20transaction\x20sender\x20(MOV-PROTOCOL-1212\x20B5\x20fix\x20—\x20an\x20attacker\x20cannot\x20route\x20a\x20reward\x20to\x20a\x20third\x20address).\x20Entity\x20flows\x20pass\x20because\x20the\x20SDK\x20replaces\x20the\x20sender\x20with\x20the\x20entity\x20account','trigger_operation':'claim'}];export const REWARD_SCENES=[{'id':'reward_first_order','name':'First-order\x20reward','industry':['universal','ecommerce','service','freelance'],'scenario':'New\x20customers\x20receive\x20a\x20fixed\x20reward\x20after\x20their\x20first\x20order.\x20Guard\x20verifies\x20order\x20ownership\x20+\x20first-time\x20status;\x20'+'Recipient=Signer\x20(caller\x20is\x20the\x20new\x20customer);\x20Amount=Fixed\x20(e.g.\x201\x20WOW).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin\x20(e.g.\x200x2::wow::WOW\x20or\x20a\x20custom\x20token)','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['Signer\x20recipient\x20+\x20Fixed\x20amount\x20—\x20caller\x20claims\x20a\x20fixed\x20amount\x20(e.g.\x201\x20WOW)','Guard\x20verifies:\x20order_address.holder\x20==\x20signer\x20AND\x20order\x20is\x20the\x20first\x20order\x20(Repository\x20query)','expiration_time\x20bounds\x20the\x20campaign\x20window\x20(e.g.\x2030\x20days)','coin_add\x20deposits\x20the\x20campaign\x20budget\x20upfront\x20(e.g.\x20100\x20WOW\x20for\x20100\x20claims)'],'recommended_templates':['first_order']},{'id':'reward_referral','name':'Referral\x20viral\x20reward','industry':['universal','ecommerce','service','content'],'scenario':'Both\x20referrer\x20and\x20referee\x20receive\x20a\x20reward\x20when\x20the\x20referee\x20completes\x20a\x20first\x20order.\x20Two\x20guards:\x20one\x20for\x20referrer\x20(Entity),\x20one\x20for\x20referee\x20(Signer).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x2,'recipient_types_used':['Entity','Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['Entity\x20recipient\x20+\x20Fixed\x20amount\x20for\x20the\x20referrer\x20(recipient\x20=\x20referrer\x20address)','Signer\x20recipient\x20+\x20Fixed\x20amount\x20for\x20the\x20referee\x20(caller\x20is\x20recipient)','Guard\x20verifies:\x20referrer\x20marked\x20in\x20Repository\x20AND\x20referee\x27s\x20order\x20completed','store_from_id\x20may\x20record\x20the\x20order\x20address\x20for\x20audit\x20trail'],'recommended_templates':['referral']},{'id':'reward_loyalty','name':'Loyalty\x20tiered\x20reward','industry':['universal','ecommerce','subscription','content'],'scenario':'Customers\x20unlock\x20higher\x20rewards\x20after\x20reaching\x20cumulative\x20spending\x20tiers.\x20Recipient=Signer;\x20Amount=GuardU64Identifier\x20(tier-dependent\x20amount\x20extracted\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['Signer\x20recipient\x20+\x20identifier\x20amount\x20—\x20amount\x20is\x20dynamic,\x20extracted\x20from\x20Passport\x20submission\x20(tier\x20level\x20→\x20reward\x20amount)','Guard\x20verifies:\x20cumulative\x20spend\x20≥\x20tier\x20threshold\x20(Repository\x20query)','No\x20expiration_time\x20—\x20loyalty\x20is\x20perpetual\x20(until\x20deactivated\x20via\x20guard_remove)','Guard\x20submission\x20value\x20type\x20MUST\x20be\x20u64\x20(E_AMOUNT_NOT_U64\x20otherwise)'],'recommended_templates':['loyalty']},{'id':'reward_flash_sale','name':'Limited-time\x20flash\x20sale\x20reward','industry':['universal','ecommerce','retail'],'scenario':'Time-bounded\x20reward\x20for\x20the\x20first\x20N\x20callers.\x20Recipient=Signer;\x20Amount=Fixed.\x20Guard\x20verifies\x20time\x20window\x20+\x20claim\x20count.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['Signer\x20recipient\x20+\x20Fixed\x20amount\x20—\x20fixed\x20amount\x20per\x20claim\x20(e.g.\x202\x20WOW)','expiration_time\x20bounds\x20the\x20flash\x20sale\x20window\x20(e.g.\x2048\x20hours)','the\x20guard-addition\x20time-lock\x20(155)\x20may\x20lock\x20further\x20guard\x20additions\x20during\x20the\x20sale','Budget\x20=\x20max_claims\x20×\x20amount;\x20coin_add\x20deposits\x20this\x20upfront'],'recommended_templates':['flash_sale']},{'id':'reward_bulk_discount','name':'Bulk\x20discount\x20/\x20cashback\x20reward','industry':['universal','ecommerce','wholesale','service'],'scenario':'Customer\x20receives\x20cashback\x20proportional\x20to\x20order\x20size.\x20Recipient=Signer\x20or\x20Entity\x20(order\x20holder);\x20Amount=GuardU64Identifier\x20(cashback\x20rate\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20payment\x20coin\x20type\x20(must\x20match\x20order\x20payment\x20for\x20clean\x20cashback)','typical_guard_count':0x1,'recipient_types_used':['Signer','Entity'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE],'common_patterns':['Signer\x20recipient\x20+\x20identifier\x20amount\x20—\x20caller\x20claims\x20dynamic\x20amount\x20(cashback\x20=\x20order_amount\x20×\x20rate)','store_from_id\x20records\x20the\x20order\x20address\x20for\x20cross-reference\x20(audit\x20trail)','receive\x20(154)\x20may\x20be\x20used\x20to\x20accept\x20CoinWrapper<T>\x20refunds\x20that\x20replenish\x20the\x20balance','Guard\x20verifies:\x20order.completed\x20AND\x20order.service\x20==\x20this\x20Service'],'recommended_templates':['cashback']},{'id':'reward_milestone','name':'Service\x20milestone\x20reward','industry':['universal','ecommerce','content','subscription'],'scenario':'When\x20a\x20Service\x20reaches\x20a\x20milestone\x20(e.g.\x20100\x20orders),\x20early\x20supporters\x20receive\x20extra\x20rewards.\x20Recipient=Entity\x20(early\x20customer);\x20Amount=Fixed.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x32,'recipient_types_used':['Entity'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['Entity\x20recipient\x20+\x20Fixed\x20amount\x20for\x20each\x20early\x20customer\x20(recipient\x20=\x20customer\x20address)','Multiple\x20guards\x20(up\x20to\x2050\x20for\x2050\x20early\x20supporters)\x20—\x20well\x20within\x20MAX_GUARD_COUNT=200','Guard\x20verifies:\x20Service\x20order_count\x20>=\x20milestone\x20AND\x20claimer\x20is\x20in\x20early-customer\x20list','the\x20guard-addition\x20time-lock\x20(155)\x20may\x20lock\x20the\x20guard\x20list\x20after\x20milestone\x20setup'],'recommended_templates':['milestone']}];export const REWARD_LEDGER_VERSION='1.0.0';export function getScenesByPhase(a){return REWARD_SCENES['filter'](b=>b['phases']['includes'](a));}export function findSceneById(a){return REWARD_SCENES['find'](b=>b['id']===a);}export function getScenesByIndustry(a){return REWARD_SCENES['filter'](b=>b['industry']['includes'](a)||b['industry']['includes']('universal'));}export function getBuiltinPermissionByIndex(a){return REWARD_PERMISSIONS['find'](b=>b['index']===a);}export function isRewardBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function getAllBuiltinPermissions(){return[...REWARD_PERMISSIONS];}export function getRewardScenesCount(){return REWARD_SCENES['length'];}export function getGuardConstructorSpec(a){return REWARD_GUARD_CONSTRUCTORS['find'](b=>b['constructor']===a);}export function resolveGuardConstructor(a,b){const c={'GuardIdentifier|GuardU64Identifier':'dynamic_recipient_dynamic_amount','GuardIdentifier|Fixed':'dynamic_recipient_fixed_amount','Entity|GuardU64Identifier':'entity_recipient_dynamic_amount','Entity|Fixed':'entity_recipient_fixed_amount','Signer|GuardU64Identifier':'caller_recipient_dynamic_amount','Signer|Fixed':'caller_recipient_fixed_amount'};return c[a+'|'+b];}export function getRewardErrorByCode(a){return REWARD_ERROR_CODES['find'](b=>b['code']===a);}export function getRewardErrorByName(a){return REWARD_ERROR_CODES['find'](b=>b['name']===a);}export function validateGuardCount(a){if(a>=MAX_GUARD_COUNT_REWARD)return{'ok':![],'violation':'Guard\x20count\x20'+a+'\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD};return{'ok':!![]};}export function validateRecordCount(a){if(a>=MAX_RECORD_COUNT_REWARD)return{'ok':![],'violation':'Record\x20count\x20'+a+'\x20would\x20exceed\x20MAX_RECORD_COUNT_REWARD\x20'+MAX_RECORD_COUNT_REWARD+'\x20—\x20recipient\x20can\x20no\x20longer\x20claim'};return{'ok':!![]};}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['flash\x20sale','reward_flash_sale'],['flash_sale','reward_flash_sale'],['limited-time','reward_flash_sale'],['limited\x20time','reward_flash_sale'],['referral','reward_referral'],['viral','reward_referral'],['refer\x20a\x20friend','reward_referral'],['invite','reward_referral'],['loyalty','reward_loyalty'],['tiered','reward_loyalty'],['tier','reward_loyalty'],['repeat','reward_loyalty'],['cashback','reward_bulk_discount'],['bulk\x20discount','reward_bulk_discount'],['bulk_discount','reward_bulk_discount'],['wholesale','reward_bulk_discount'],['milestone','reward_milestone'],['early\x20supporter','reward_milestone'],['early\x20customer','reward_milestone'],['first\x20order','reward_first_order'],['first_order','reward_first_order'],['new\x20customer','reward_first_order'],['first-time','reward_first_order']];for(const [d,e]of c){if(b['includes'](d)){const f=findSceneById(e);if(f)return f;}}return undefined;}export const REWARD_CROSS_OBJECT_REFS=[{'object':'Permission','phase':'universal','relationship':'Reward.permission\x20(address;\x20borrowed\x20for\x20all\x20150-157\x20assertions)'},{'object':'Permission','phase':'permission_update','relationship':'permission\x20update:\x20owner-only\x20(asserts\x20old.owner\x20==\x20sender);\x20registered\x20as\x20an\x20object-linker\x20affiliation\x20change'},{'object':'Guard','phase':'guard_addition','relationship':'RewardGuard.guard\x20=\x20guard.id_address\x20(each\x20guard\x20registered\x20via\x20object-linker\x20core\x20binding)'},{'object':'Guard','phase':'claim','relationship':'claim:\x20iterates\x20self.guards\x20looking\x20for\x20guard.id_address\x20match;\x20E_GUARD_NOT_FOUND\x20if\x20no\x20match'},{'object':'Guard','phase':'claim','relationship':'claim:\x20the\x20guard\x20verification\x20result\x20validates\x20the\x20Passport\x20submission\x20data'},{'object':'Passport','phase':'claim','relationship':'claim:\x20the\x20claimant\x27s\x20Passport\x20submission\x20supplies\x20the\x20recipient\x20(address)\x20and/or\x20amount\x20(u64)\x20per\x20RewardGuard\x20variant'},{'object':'Passport','phase':'claim','relationship':'claim:\x20if\x20store_from_id\x20is\x20Some,\x20extracts\x20store-from\x20address\x20from\x20Passport\x20submission'},{'object':'Payment','phase':'funds_replenish','relationship':'receive\x20(154):\x20unwraps\x20Coin<T>\x20from\x20CoinWrapper<T>\x20(with\x20check)\x20and\x20joins\x20the\x20balance'},{'object':'Payment','phase':'owner_receive','relationship':'owner\x20receipt\x20(156):\x20unwraps\x20CoinWrapper<K>\x20and\x20forwards\x20it\x20to\x20the\x20Permission\x20owner'},{'object':'Repository','phase':'claim','relationship':'Guard\x20may\x20query\x20Repository\x20(e.g.\x20order\x20history\x20for\x20first-order\x20/\x20loyalty\x20verification)'},{'object':'Service','phase':'claim','relationship':'Guard\x20may\x20verify\x20order.service\x20==\x20this\x20Service\x20(cashback\x20/\x20first-order\x20scenarios)'},{'object':'Demand','phase':'guard_addition','relationship':'Guard\x20may\x20be\x20shared\x20with\x20Demand\x20(recommendation\x20filtering);\x20same\x20Guard\x20object\x20address\x20space'},{'object':'Allocation','phase':'owner_receive','relationship':'Terminal\x20Allocation\x20alloc\x20may\x20route\x20funds\x20back\x20to\x20Reward\x20(replenishment\x20loop)'},{'object':'Contact','phase':'um_mgmt','relationship':'UM\x20binding\x20(157):\x20binds\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination;\x20creates\x20object-linker\x20core\x20binding'},{'object':'Coin','phase':'universal','relationship':'Reward<phantom\x20T>:\x20T\x20is\x20the\x20coin\x20type;\x20balance:\x20Balance<T>;\x20coin_add\x20expects\x20Coin<T>'}];
1
+ import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';export{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD};export const REWARD_NEW={'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward<T>','governed_operations':['create\x20a\x20new\x20Reward\x20pool'],'sdk_exposed':!![]};export const REWARD_DESCRIPTION={'index':0x97,'name':'REWARD_DESCRIPTION','description':'Update\x20description','governed_operations':['update\x20the\x20Reward\x20description'],'sdk_exposed':!![]};export const REWARD_GUARD={'index':0x98,'name':'REWARD_GUARD','description':'Add\x20/\x20remove\x20expired\x20guards\x20(≤\x20MAX_GUARD_COUNT_REWARD=200)','governed_operations':['add\x20a\x20claim\x20guard\x20to\x20the\x20Reward','remove\x20expired\x20claim\x20guards'],'sdk_exposed':!![]};export const REWARD_COIN_ADD={'index':0x99,'name':'REWARD_COIN_ADD','description':'Deposit\x20Coin<T>\x20directly\x20into\x20Reward\x20balance\x20(joins\x20Balance<T>)','governed_operations':['deposit\x20Coin<T>\x20into\x20the\x20Reward\x20balance'],'sdk_exposed':!![]};export const REWARD_RECEIVE={'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20CoinWrapper<T>\x20into\x20the\x20balance\x20(unwrapped\x20with\x20balance\x20check)','governed_operations':['receive\x20a\x20CoinWrapper<T>\x20payment\x20into\x20the\x20balance'],'sdk_exposed':!![]};export const REWARD_GUARD_EXPIRATION_TIME_ADD={'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Set\x20/\x20cancel\x20guard_not_added_expiration_time\x20(time-lock\x20on\x20new\x20guard\x20additions)','governed_operations':['set\x20or\x20cancel\x20the\x20time-lock\x20on\x20adding\x20new\x20guards'],'sdk_exposed':!![]};export const REWARD_OWNER_RECEIVE={'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receives\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20at\x20terminal\x20state\x20(unwrap\x20→\x20owner)','governed_operations':['owner\x20receipt\x20of\x20payments\x20at\x20terminal\x20state\x20(unwrapped\x20to\x20the\x20owner)','owner\x20receipt\x20of\x20whole\x20objects\x20at\x20terminal\x20state'],'sdk_exposed':!![]};export const REWARD_UM={'index':0x9d,'name':'REWARD_UM','description':'Bind\x20/\x20unbind\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination','governed_operations':['bind\x20a\x20Contact\x20as\x20the\x20UM\x20coordinator','unbind\x20the\x20UM\x20Contact'],'sdk_exposed':!![]};export const REWARD_WITHDRAW={'index':0x9e,'name':'REWARD_WITHDRAW','description':'Withdraw\x20balance\x20from\x20the\x20Reward\x20to\x20the\x20tx\x20sender\x20inside\x20a\x20Payment\x20object\x20receipt\x20(ETS-B,\x20the\x20only\x20non-claim\x20exit;\x20blocked\x20while\x20the\x20declared\x20no-guard\x20window\x20guard_not_added_expiration_time\x20is\x20in\x20the\x20future)','governed_operations':['withdraw\x20an\x20amount\x20from\x20the\x20Reward\x20balance,\x20delivered\x20to\x20the\x20executing\x20account\x20inside\x20a\x20Payment\x20object\x20(the\x20on-chain\x20receipt;\x20unwrap\x20mode\x20pays\x20the\x20coin\x20out\x20in\x20the\x20same\x20transaction)\x20(fails\x20with\x20E_GUARD_LOCKED_TIME\x20while\x20guard_not_added_expiration_time\x20is\x20in\x20the\x20future)'],'sdk_exposed':!![]};export const REWARD_PERMISSIONS=[REWARD_NEW,REWARD_DESCRIPTION,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE,REWARD_GUARD_EXPIRATION_TIME_ADD,REWARD_OWNER_RECEIVE,REWARD_UM,REWARD_WITHDRAW];export const REWARD_FIELDS=[{'name':'id','move_type':'UID','mutability':'immutable','set_at_creation':!![],'constraint':'Object\x20UID;\x20assigned\x20at\x20creation.\x20Never\x20changes.'},{'name':'description','move_type':'String','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x97,'constraint':'Must\x20satisfy\x20common::DESCRIPTION.\x20Updated\x20via\x20permission\x20151.'},{'name':'guards','move_type':'vector<RewardGuard>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x98,'constraint':'vector::length\x20<\x20MAX_GUARD_COUNT\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_GUARD_COUNT_EXCEEDED']},{'name':'balance','move_type':'Balance<T>','mutability':'runtime','set_at_creation':!![],'constraint':'Zero\x20at\x20creation\x20(balance::zero());\x20grows\x20via\x20coin_add/receive;\x20shrinks\x20via\x20claim\x20(split)\x20and\x20via\x20withdraw\x20(ETS-B,\x20funds\x20leave\x20inside\x20a\x20Payment\x20object\x20receipt,\x20only\x20when\x20the\x20no-guard\x20window\x20has\x20elapsed).','related_errors':['E_INSUFFICIENT_BALANCE','E_GUARD_LOCKED_TIME']},{'name':'guard_not_added_expiration_time','move_type':'Option<u64>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9b,'constraint':'Option<timestamp_ms>.\x20When\x20Some(t):\x20guard_add\x20AND\x20withdraw\x20require\x20clock\x20>\x20t\x20(E_GUARD_LOCKED_TIME).\x20When\x20None\x20or\x20t\x20<\x20now:\x20guards\x20can\x20be\x20added\x20and\x20balance\x20withdrawn.','related_errors':['E_GUARD_LOCKED_TIME','E_GUARD_LOCKED_TIME_NOT_INCREASING','E_GUARD_LOCKED_TIME_INVALID']},{'name':'record','move_type':'ParentTable<address,\x20RecipientRecord>','mutability':'runtime','set_at_creation':!![],'constraint':'Per-recipient\x20claim\x20history.\x20Each\x20RecipientRecord.amount\x20vector\x20has\x20length\x20<\x20MAX_RECORD_COUNT\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_RECORD_COUNT_EXCEEDED']},{'name':'um','move_type':'Option<address>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9d,'constraint':'Option<Contact\x20address>.\x20Binding\x20creates\x20an\x20object-linker\x20core\x20binding;\x20unbinding\x20disaffiliates.'},{'name':'permission','move_type':'address','mutability':'admin_mutable','set_at_creation':!![],'constraint':'Permission\x20object\x20address.\x20Updated\x20owner-only\x20(asserts\x20old.owner\x20==\x20sender);\x20the\x20change\x20is\x20registered\x20as\x20an\x20object-linker\x20affiliation\x20change.'}];export const REWARD_GUARD_CONSTRUCTORS=[{'constructor':'dynamic_recipient_dynamic_amount','recipient_type':'GuardIdentifier','amount_type':'GuardU64Identifier','params':{'recipient_param':'u8','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['recipient\x20identifier\x20must\x20resolve\x20to\x20an\x20address\x20in\x20the\x20Passport\x20table\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','amount\x20identifier\x20must\x20resolve\x20to\x20a\x20u64\x20Passport\x20value\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20dynamic\x20amount\x20—\x20both\x20extracted\x20from\x20Passport\x20at\x20claim\x20time\x20(e.g.\x20referral\x20rewards\x20where\x20referrer\x20and\x20amount\x20vary\x20per\x20claim).'},{'constructor':'dynamic_recipient_fixed_amount','recipient_type':'GuardIdentifier','amount_type':'Fixed','params':{'recipient_param':'u8','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['recipient\x20identifier\x20must\x20resolve\x20to\x20an\x20address\x20in\x20the\x20Passport\x20table\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20first-order\x20reward\x20where\x20any\x20new\x20customer\x20claims\x20a\x20fixed\x201\x20WOW.'},{'constructor':'entity_recipient_dynamic_amount','recipient_type':'Entity','amount_type':'GuardU64Identifier','params':{'recipient_param':'address','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['amount\x20identifier\x20must\x20resolve\x20to\x20a\x20u64\x20Passport\x20value\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fixed\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20tiered\x20loyalty\x20reward\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(tier\x20level).'},{'constructor':'entity_recipient_fixed_amount','recipient_type':'Entity','amount_type':'Fixed','params':{'recipient_param':'address','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fully\x20fixed\x20recipient\x20+\x20amount\x20—\x20simplest\x20configuration\x20(e.g.\x20specific\x20partner\x20bounty).'},{'constructor':'caller_recipient_dynamic_amount','recipient_type':'Signer','amount_type':'GuardU64Identifier','params':{'amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['amount\x20identifier\x20must\x20resolve\x20to\x20a\x20u64\x20Passport\x20value\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20self-service\x20claim\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(e.g.\x20cashback\x20rate).'},{'constructor':'caller_recipient_fixed_amount','recipient_type':'Signer','amount_type':'Fixed','params':{'amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20its\x20identifier\x20must\x20be\x20number/address\x20compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20flash\x20sale\x20where\x20any\x20eligible\x20caller\x20claims\x20a\x20fixed\x20reward.'}];export const REWARD_ERROR_CODES=[{'code':0x1,'name':'E_GUARD_LOCKED_TIME_NOT_INCREASING','description':'guard-lock\x20time\x20update:\x20new\x20time\x20<\x20current\x20clock\x20(must\x20be\x20≥\x20now)','trigger_operation':'guard-lock\x20time\x20update\x20(155)'},{'code':0x2,'name':'E_GUARD_EXPIRED','description':'guard_add\x20on\x20guard\x20with\x20expiration_time\x20<\x20now,\x20OR\x20claim\x20on\x20guard\x20with\x20expiration_time\x20<\x20now','trigger_operation':'guard_add\x20/\x20claim'},{'code':0x3,'name':'E_GUARD_COUNT_EXCEEDED','description':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT=200\x20(only\x20on\x20NEW\x20guard,\x20not\x20on\x20update\x20of\x20existing)','trigger_operation':'guard_add'},{'code':0x4,'name':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','description':'RewardGuard\x20constructor:\x20recipient\x20identifier\x20type\x20is\x20not\x20address\x20(GuardIdentifier\x20variant\x20only)','trigger_operation':'claim-guard\x20construction'},{'code':0x5,'name':'E_AMOUNT_NOT_U64','description':'RewardGuard\x20constructor:\x20amount\x20identifier\x20type\x20is\x20not\x20u64\x20(GuardU64Identifier\x20variant\x20only)','trigger_operation':'claim-guard\x20construction'},{'code':0x6,'name':'E_INSUFFICIENT_BALANCE','description':'claim:\x20balance\x20<\x20amount\x20(cannot\x20split\x20more\x20than\x20held)','trigger_operation':'claim'},{'code':0x7,'name':'E_GUARD_NOT_FOUND','description':'claim:\x20no\x20guard\x20in\x20self.guards\x20matches\x20the\x20supplied\x20guard\x20address','trigger_operation':'claim'},{'code':0x8,'name':'E_RECORD_COUNT_EXCEEDED','description':'claim:\x20recipient\x20already\x20has\x20MAX_RECORD_COUNT=5200\x20entries\x20(E_RECORD_COUNT_EXCEEDED)','trigger_operation':'claim'},{'code':0xa,'name':'E_GUARD_LOCKED_TIME','description':'guard_add\x20/\x20withdraw\x20while\x20guard_not_added_expiration_time\x20is\x20Some\x20and\x20clock\x20≤\x20expiration_time','trigger_operation':'guard_add\x20/\x20withdraw'},{'code':0xb,'name':'E_GUARD_LOCKED_TIME_INVALID','description':'guard-lock\x20time\x20update:\x20new\x20Some(t)\x20where\x20t\x20≤\x20now\x20(must\x20be\x20future)','trigger_operation':'guard-lock\x20time\x20update\x20(155)'},{'code':0xc,'name':'E_STORE_FROM_ID_NOT_COMPATIBLE','description':'RewardGuard\x20constructor:\x20store_from_id\x20identifier\x20type\x20is\x20not\x20number\x20or\x20address','trigger_operation':'claim-guard\x20construction'},{'code':0xd,'name':'E_CLAIM_ALREADY_MADE','description':'claim:\x20the\x20once-slot\x20for\x20this\x20(guard,\x20store_from\x20value)\x20was\x20already\x20claimed\x20by\x20any\x20signer\x20—\x20first\x20come,\x20first\x20served\x20(MOV-PROTOCOL-1212\x20F-01\x20fix\x20—\x20replay\x20aborts,\x20the\x20pool\x20keeps\x20its\x20balance;\x20P155-08\x20v139:\x20a\x20stamped\x20slot\x20pins\x20the\x20key\x27s\x20recipient\x20axis\x20to\x20the\x20@0x0\x20sentinel,\x20so\x20the\x20once\x20domain\x20is\x20(guard,\x20store_from),\x20not\x20per-recipient).\x20Empty\x20store_from\x20slot\x20=\x20once\x20per\x20(recipient,\x20guard),\x20unchanged','trigger_operation':'claim'},{'code':0xe,'name':'E_CLAIM_RECIPIENT_NOT_SIGNER','description':'claim:\x20the\x20resolved\x20recipient\x20(from\x20guard\x20submissions\x20or\x20the\x20Entity\x20binding)\x20is\x20not\x20the\x20transaction\x20sender\x20(MOV-PROTOCOL-1212\x20B5\x20fix\x20—\x20an\x20attacker\x20cannot\x20route\x20a\x20reward\x20to\x20a\x20third\x20address).\x20Entity\x20flows\x20pass\x20because\x20the\x20SDK\x20replaces\x20the\x20sender\x20with\x20the\x20entity\x20account','trigger_operation':'claim'}];export const REWARD_SCENES=[{'id':'reward_first_order','name':'First-order\x20reward','industry':['universal','ecommerce','service','freelance'],'scenario':'New\x20customers\x20receive\x20a\x20fixed\x20reward\x20after\x20their\x20first\x20order.\x20Guard\x20verifies\x20order\x20ownership\x20+\x20first-time\x20status;\x20'+'Recipient=Signer\x20(caller\x20is\x20the\x20new\x20customer);\x20Amount=Fixed\x20(e.g.\x201\x20WOW).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin\x20(e.g.\x200x2::wow::WOW\x20or\x20a\x20custom\x20token)','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['Signer\x20recipient\x20+\x20Fixed\x20amount\x20—\x20caller\x20claims\x20a\x20fixed\x20amount\x20(e.g.\x201\x20WOW)','Guard\x20verifies:\x20order_address.holder\x20==\x20signer\x20AND\x20order\x20is\x20the\x20first\x20order\x20(Repository\x20query)','expiration_time\x20bounds\x20the\x20campaign\x20window\x20(e.g.\x2030\x20days)','coin_add\x20deposits\x20the\x20campaign\x20budget\x20upfront\x20(e.g.\x20100\x20WOW\x20for\x20100\x20claims)'],'recommended_templates':['first_order']},{'id':'reward_referral','name':'Referral\x20viral\x20reward','industry':['universal','ecommerce','service','content'],'scenario':'Both\x20referrer\x20and\x20referee\x20receive\x20a\x20reward\x20when\x20the\x20referee\x20completes\x20a\x20first\x20order.\x20Two\x20guards:\x20one\x20for\x20referrer\x20(Entity),\x20one\x20for\x20referee\x20(Signer).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x2,'recipient_types_used':['Entity','Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['Entity\x20recipient\x20+\x20Fixed\x20amount\x20for\x20the\x20referrer\x20(recipient\x20=\x20referrer\x20address)','Signer\x20recipient\x20+\x20Fixed\x20amount\x20for\x20the\x20referee\x20(caller\x20is\x20recipient)','Guard\x20verifies:\x20referrer\x20marked\x20in\x20Repository\x20AND\x20referee\x27s\x20order\x20completed','store_from_id\x20may\x20record\x20the\x20order\x20address\x20for\x20audit\x20trail'],'recommended_templates':['referral']},{'id':'reward_loyalty','name':'Loyalty\x20tiered\x20reward','industry':['universal','ecommerce','subscription','content'],'scenario':'Customers\x20unlock\x20higher\x20rewards\x20after\x20reaching\x20cumulative\x20spending\x20tiers.\x20Recipient=Signer;\x20Amount=GuardU64Identifier\x20(tier-dependent\x20amount\x20extracted\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['Signer\x20recipient\x20+\x20identifier\x20amount\x20—\x20amount\x20is\x20dynamic,\x20extracted\x20from\x20Passport\x20submission\x20(tier\x20level\x20→\x20reward\x20amount)','Guard\x20verifies:\x20cumulative\x20spend\x20≥\x20tier\x20threshold\x20(Repository\x20query)','No\x20expiration_time\x20—\x20loyalty\x20is\x20perpetual\x20(until\x20deactivated\x20via\x20guard_remove)','Guard\x20submission\x20value\x20type\x20MUST\x20be\x20u64\x20(E_AMOUNT_NOT_U64\x20otherwise)'],'recommended_templates':['loyalty']},{'id':'reward_flash_sale','name':'Limited-time\x20flash\x20sale\x20reward','industry':['universal','ecommerce','retail'],'scenario':'Time-bounded\x20reward\x20for\x20the\x20first\x20N\x20callers.\x20Recipient=Signer;\x20Amount=Fixed.\x20Guard\x20verifies\x20time\x20window\x20+\x20claim\x20count.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['Signer\x20recipient\x20+\x20Fixed\x20amount\x20—\x20fixed\x20amount\x20per\x20claim\x20(e.g.\x202\x20WOW)','expiration_time\x20bounds\x20the\x20flash\x20sale\x20window\x20(e.g.\x2048\x20hours)','the\x20guard-addition\x20time-lock\x20(155)\x20may\x20lock\x20further\x20guard\x20additions\x20during\x20the\x20sale','Budget\x20=\x20max_claims\x20×\x20amount;\x20coin_add\x20deposits\x20this\x20upfront'],'recommended_templates':['flash_sale']},{'id':'reward_bulk_discount','name':'Bulk\x20discount\x20/\x20cashback\x20reward','industry':['universal','ecommerce','wholesale','service'],'scenario':'Customer\x20receives\x20cashback\x20proportional\x20to\x20order\x20size.\x20Recipient=Signer\x20or\x20Entity\x20(order\x20holder);\x20Amount=GuardU64Identifier\x20(cashback\x20rate\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20payment\x20coin\x20type\x20(must\x20match\x20order\x20payment\x20for\x20clean\x20cashback)','typical_guard_count':0x1,'recipient_types_used':['Signer','Entity'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE],'common_patterns':['Signer\x20recipient\x20+\x20identifier\x20amount\x20—\x20caller\x20claims\x20dynamic\x20amount\x20(cashback\x20=\x20order_amount\x20×\x20rate)','store_from_id\x20records\x20the\x20order\x20address\x20for\x20cross-reference\x20(audit\x20trail)','receive\x20(154)\x20may\x20be\x20used\x20to\x20accept\x20CoinWrapper<T>\x20refunds\x20that\x20replenish\x20the\x20balance','Guard\x20verifies:\x20order.completed\x20AND\x20order.service\x20==\x20this\x20Service'],'recommended_templates':['cashback']},{'id':'reward_milestone','name':'Service\x20milestone\x20reward','industry':['universal','ecommerce','content','subscription'],'scenario':'When\x20a\x20Service\x20reaches\x20a\x20milestone\x20(e.g.\x20100\x20orders),\x20early\x20supporters\x20receive\x20extra\x20rewards.\x20Recipient=Entity\x20(early\x20customer);\x20Amount=Fixed.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x32,'recipient_types_used':['Entity'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['Entity\x20recipient\x20+\x20Fixed\x20amount\x20for\x20each\x20early\x20customer\x20(recipient\x20=\x20customer\x20address)','Multiple\x20guards\x20(up\x20to\x2050\x20for\x2050\x20early\x20supporters)\x20—\x20well\x20within\x20MAX_GUARD_COUNT=200','Guard\x20verifies:\x20Service\x20order_count\x20>=\x20milestone\x20AND\x20claimer\x20is\x20in\x20early-customer\x20list','the\x20guard-addition\x20time-lock\x20(155)\x20may\x20lock\x20the\x20guard\x20list\x20after\x20milestone\x20setup'],'recommended_templates':['milestone']}];export const REWARD_LEDGER_VERSION='1.0.0';export function getScenesByPhase(a){return REWARD_SCENES['filter'](b=>b['phases']['includes'](a));}export function findSceneById(a){return REWARD_SCENES['find'](b=>b['id']===a);}export function getScenesByIndustry(a){return REWARD_SCENES['filter'](b=>b['industry']['includes'](a)||b['industry']['includes']('universal'));}export function getBuiltinPermissionByIndex(a){return REWARD_PERMISSIONS['find'](b=>b['index']===a);}export function isRewardBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function getAllBuiltinPermissions(){return[...REWARD_PERMISSIONS];}export function getRewardScenesCount(){return REWARD_SCENES['length'];}export function getGuardConstructorSpec(a){return REWARD_GUARD_CONSTRUCTORS['find'](b=>b['constructor']===a);}export function resolveGuardConstructor(a,b){const c={'GuardIdentifier|GuardU64Identifier':'dynamic_recipient_dynamic_amount','GuardIdentifier|Fixed':'dynamic_recipient_fixed_amount','Entity|GuardU64Identifier':'entity_recipient_dynamic_amount','Entity|Fixed':'entity_recipient_fixed_amount','Signer|GuardU64Identifier':'caller_recipient_dynamic_amount','Signer|Fixed':'caller_recipient_fixed_amount'};return c[a+'|'+b];}export function getRewardErrorByCode(a){return REWARD_ERROR_CODES['find'](b=>b['code']===a);}export function getRewardErrorByName(a){return REWARD_ERROR_CODES['find'](b=>b['name']===a);}export function validateGuardCount(a){if(a>=MAX_GUARD_COUNT_REWARD)return{'ok':![],'violation':'Guard\x20count\x20'+a+'\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD};return{'ok':!![]};}export function validateRecordCount(a){if(a>=MAX_RECORD_COUNT_REWARD)return{'ok':![],'violation':'Record\x20count\x20'+a+'\x20would\x20exceed\x20MAX_RECORD_COUNT_REWARD\x20'+MAX_RECORD_COUNT_REWARD+'\x20—\x20recipient\x20can\x20no\x20longer\x20claim'};return{'ok':!![]};}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['flash\x20sale','reward_flash_sale'],['flash_sale','reward_flash_sale'],['limited-time','reward_flash_sale'],['limited\x20time','reward_flash_sale'],['referral','reward_referral'],['viral','reward_referral'],['refer\x20a\x20friend','reward_referral'],['invite','reward_referral'],['loyalty','reward_loyalty'],['tiered','reward_loyalty'],['tier','reward_loyalty'],['repeat','reward_loyalty'],['cashback','reward_bulk_discount'],['bulk\x20discount','reward_bulk_discount'],['bulk_discount','reward_bulk_discount'],['wholesale','reward_bulk_discount'],['milestone','reward_milestone'],['early\x20supporter','reward_milestone'],['early\x20customer','reward_milestone'],['first\x20order','reward_first_order'],['first_order','reward_first_order'],['new\x20customer','reward_first_order'],['first-time','reward_first_order']];for(const [d,e]of c){if(b['includes'](d)){const f=findSceneById(e);if(f)return f;}}return undefined;}export const REWARD_CROSS_OBJECT_REFS=[{'object':'Permission','phase':'universal','relationship':'Reward.permission\x20(address;\x20borrowed\x20for\x20all\x20150-157\x20assertions)'},{'object':'Permission','phase':'permission_update','relationship':'permission\x20update:\x20owner-only\x20(asserts\x20old.owner\x20==\x20sender);\x20registered\x20as\x20an\x20object-linker\x20affiliation\x20change'},{'object':'Guard','phase':'guard_addition','relationship':'RewardGuard.guard\x20=\x20guard.id_address\x20(each\x20guard\x20registered\x20via\x20object-linker\x20core\x20binding)'},{'object':'Guard','phase':'claim','relationship':'claim:\x20iterates\x20self.guards\x20looking\x20for\x20guard.id_address\x20match;\x20E_GUARD_NOT_FOUND\x20if\x20no\x20match'},{'object':'Guard','phase':'claim','relationship':'claim:\x20the\x20guard\x20verification\x20result\x20validates\x20the\x20Passport\x20submission\x20data'},{'object':'Passport','phase':'claim','relationship':'claim:\x20the\x20claimant\x27s\x20Passport\x20submission\x20supplies\x20the\x20recipient\x20(address)\x20and/or\x20amount\x20(u64)\x20per\x20RewardGuard\x20variant'},{'object':'Passport','phase':'claim','relationship':'claim:\x20if\x20store_from_id\x20is\x20Some,\x20extracts\x20store-from\x20address\x20from\x20Passport\x20submission'},{'object':'Payment','phase':'funds_replenish','relationship':'receive\x20(154):\x20unwraps\x20Coin<T>\x20from\x20CoinWrapper<T>\x20(with\x20check)\x20and\x20joins\x20the\x20balance'},{'object':'Payment','phase':'owner_receive','relationship':'owner\x20receipt\x20(156):\x20unwraps\x20CoinWrapper<K>\x20and\x20forwards\x20it\x20to\x20the\x20Permission\x20owner'},{'object':'Repository','phase':'claim','relationship':'Guard\x20may\x20query\x20Repository\x20(e.g.\x20order\x20history\x20for\x20first-order\x20/\x20loyalty\x20verification)'},{'object':'Service','phase':'claim','relationship':'Guard\x20may\x20verify\x20order.service\x20==\x20this\x20Service\x20(cashback\x20/\x20first-order\x20scenarios)'},{'object':'Demand','phase':'guard_addition','relationship':'Guard\x20may\x20be\x20shared\x20with\x20Demand\x20(recommendation\x20filtering);\x20same\x20Guard\x20object\x20address\x20space'},{'object':'Allocation','phase':'owner_receive','relationship':'Terminal\x20Allocation\x20alloc\x20may\x20route\x20funds\x20back\x20to\x20Reward\x20(replenishment\x20loop)'},{'object':'Contact','phase':'um_mgmt','relationship':'UM\x20binding\x20(157):\x20binds\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination;\x20creates\x20object-linker\x20core\x20binding'},{'object':'Coin','phase':'universal','relationship':'Reward<phantom\x20T>:\x20T\x20is\x20the\x20coin\x20type;\x20balance:\x20Balance<T>;\x20coin_add\x20expects\x20Coin<T>'}];
@@ -46,6 +46,7 @@ export interface ModeGuardRef {
46
46
  write_once?: boolean;
47
47
  };
48
48
  params?: Record<string, unknown>;
49
+ identity_leg_exempt?: string;
49
50
  }
50
51
  export interface ModeMachineNode {
51
52
  name: string;