@wowok/agent-mcp 3.1.3 → 3.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/config-audit.spec.d.ts +1 -0
- package/dist/config/config-audit.spec.js +1 -0
- package/dist/config/exposure.d.ts +108 -0
- package/dist/config/exposure.js +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +1 -1
- package/dist/config/judgment.d.ts +1228 -0
- package/dist/config/judgment.js +1 -0
- package/dist/config/judgment.spec.d.ts +1 -0
- package/dist/config/judgment.spec.js +1 -0
- package/dist/config/rule-engine.d.ts +299 -0
- package/dist/config/rule-engine.js +1 -0
- package/dist/config/rule-engine.spec.d.ts +1 -0
- package/dist/config/rule-engine.spec.js +1 -0
- package/dist/config/severity.d.ts +7 -0
- package/dist/config/severity.js +1 -0
- package/dist/customer/order-monitor.d.ts +3 -1
- package/dist/customer/order-monitor.js +1 -1
- package/dist/evaluation/acceptance.d.ts +1 -0
- package/dist/evaluation/acceptance.js +1 -1
- package/dist/evaluation/arbitration-game.js +1 -1
- package/dist/evaluation/builtins/demand-match.js +1 -1
- package/dist/evaluation/builtins/graph-service.js +1 -1
- package/dist/evaluation/builtins/graph-service.spec.js +1 -1
- package/dist/evaluation/engine.js +1 -1
- package/dist/evaluation/game-strategy.d.ts +2 -2
- package/dist/evaluation/game-strategy.js +1 -1
- package/dist/evaluation/match-operation.d.ts +2 -2
- package/dist/evaluation/match-operation.js +1 -1
- package/dist/evaluation/standards.d.ts +3 -25
- package/dist/evaluation/standards.js +1 -1
- package/dist/evaluation/types.d.ts +2 -1
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/business-modules.js +1 -1
- package/dist/extensions/custom-registry-file.js +1 -1
- package/dist/extensions/industry-audit.spec.d.ts +1 -0
- package/dist/extensions/industry-audit.spec.js +1 -0
- package/dist/extensions/industry-layers.d.ts +8 -0
- package/dist/extensions/industry-layers.js +1 -1
- package/dist/extensions/industry-pack.d.ts +2 -0
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/mode-evaluator.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/graph/onchain/analyze.d.ts +3 -1
- package/dist/graph/onchain/analyze.js +1 -1
- package/dist/graph/onchain/analyze.spec.js +1 -1
- package/dist/graph/onchain/edge-schema.d.ts +1 -0
- package/dist/graph/onchain/edge-schema.js +1 -1
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exploration.d.ts +28 -0
- package/dist/graph/onchain/exploration.js +1 -0
- package/dist/graph/onchain/exploration.spec.d.ts +1 -0
- package/dist/graph/onchain/exploration.spec.js +1 -0
- package/dist/graph/onchain/exposure.d.ts +18 -0
- package/dist/graph/onchain/exposure.js +1 -0
- package/dist/graph/onchain/exposure.spec.d.ts +1 -0
- package/dist/graph/onchain/exposure.spec.js +1 -0
- package/dist/graph/onchain/graph-policy.spec.d.ts +1 -0
- package/dist/graph/onchain/graph-policy.spec.js +1 -0
- package/dist/graph/onchain/index.d.ts +6 -0
- package/dist/graph/onchain/index.js +1 -1
- package/dist/graph/onchain/interest.js +1 -1
- package/dist/graph/onchain/interest.spec.js +1 -1
- package/dist/graph/onchain/names.js +1 -1
- package/dist/graph/onchain/names.spec.js +1 -1
- package/dist/graph/onchain/policy.d.ts +8 -0
- package/dist/graph/onchain/policy.js +1 -0
- package/dist/graph/onchain/proposal-graph.js +1 -1
- package/dist/graph/onchain/proposal-graph.spec.js +1 -1
- package/dist/graph/onchain/synthesis.d.ts +20 -0
- package/dist/graph/onchain/synthesis.js +1 -0
- package/dist/graph/onchain/synthesis.spec.d.ts +1 -0
- package/dist/graph/onchain/synthesis.spec.js +1 -0
- package/dist/graph/onchain/types.d.ts +11 -1
- package/dist/keeper/keeper.spec.js +1 -1
- package/dist/knowledge/alloc-audit-policy.spec.d.ts +1 -0
- package/dist/knowledge/alloc-audit-policy.spec.js +1 -0
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocation-puzzle.d.ts +1 -1
- package/dist/knowledge/allocation-puzzle.js +1 -1
- package/dist/knowledge/allocation-risk.d.ts +4 -1
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/allocation-templates.js +1 -1
- package/dist/knowledge/arb-risk.d.ts +6 -5
- package/dist/knowledge/arb-risk.js +1 -1
- package/dist/knowledge/arbitration-ledger.d.ts +4 -4
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/arbitration-puzzle.d.ts +1 -1
- package/dist/knowledge/arbitration-puzzle.js +1 -1
- package/dist/knowledge/arbitration-risk.d.ts +4 -1
- package/dist/knowledge/arbitration-risk.js +1 -1
- package/dist/knowledge/arbitration-templates.js +1 -1
- package/dist/knowledge/baselines/judgment-baselines.json +289 -0
- package/dist/knowledge/baselines/risk-baselines.spec.js +1 -1
- package/dist/knowledge/baselines/rules/alloc_audit.json +290 -0
- package/dist/knowledge/baselines/rules/allocation.json +492 -0
- package/dist/knowledge/baselines/rules/arb.json +155 -0
- package/dist/knowledge/baselines/rules/arbitration.json +366 -0
- package/dist/knowledge/baselines/rules/bridge.json +197 -0
- package/dist/knowledge/baselines/rules/contact.json +152 -0
- package/dist/knowledge/baselines/rules/demand.json +158 -0
- package/dist/knowledge/baselines/rules/graph.json +453 -0
- package/dist/knowledge/baselines/rules/guard.json +981 -0
- package/dist/knowledge/baselines/rules/machine.json +706 -0
- package/dist/knowledge/baselines/rules/order.json +549 -0
- package/dist/knowledge/baselines/rules/payment.json +205 -0
- package/dist/knowledge/baselines/rules/permission.json +330 -0
- package/dist/knowledge/baselines/rules/personal.json +139 -0
- package/dist/knowledge/baselines/rules/progress.json +346 -0
- package/dist/knowledge/baselines/rules/proof.json +158 -0
- package/dist/knowledge/baselines/rules/registrar.json +159 -0
- package/dist/knowledge/baselines/rules/repository.json +244 -0
- package/dist/knowledge/baselines/rules/resource.json +117 -0
- package/dist/knowledge/baselines/rules/reward.json +471 -0
- package/dist/knowledge/baselines/rules/service.json +595 -0
- package/dist/knowledge/baselines/rules/treasury.json +440 -0
- package/dist/knowledge/baselines/rules/util.json +101 -0
- package/dist/knowledge/bridge-risk.d.ts +6 -5
- package/dist/knowledge/bridge-risk.js +1 -1
- package/dist/knowledge/builtin-templates.d.ts +26 -0
- package/dist/knowledge/builtin-templates.js +1 -0
- package/dist/knowledge/contact-risk.d.ts +6 -5
- package/dist/knowledge/contact-risk.js +1 -1
- package/dist/knowledge/demand-risk.d.ts +6 -5
- package/dist/knowledge/demand-risk.js +1 -1
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/facts-sync.spec.d.ts +1 -0
- package/dist/knowledge/facts-sync.spec.js +1 -0
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-field-cognition.d.ts +1 -1
- package/dist/knowledge/guard-field-cognition.js +1 -1
- package/dist/knowledge/guard-ledger.js +1 -1
- package/dist/knowledge/guard-risk.d.ts +4 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.d.ts +10 -2
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/industry-strategy.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/machine-ledger.js +1 -1
- package/dist/knowledge/machine-risk.d.ts +4 -1
- package/dist/knowledge/machine-risk.js +1 -1
- package/dist/knowledge/machine-templates.js +1 -1
- package/dist/knowledge/machine-translation.js +1 -1
- package/dist/knowledge/migration-preflight.js +1 -1
- package/dist/knowledge/operation-dictionary.js +1 -1
- package/dist/knowledge/order-ledger.js +1 -1
- package/dist/knowledge/order-puzzle.d.ts +3 -3
- package/dist/knowledge/order-puzzle.js +1 -1
- package/dist/knowledge/order-risk.d.ts +6 -3
- package/dist/knowledge/order-risk.js +1 -1
- package/dist/knowledge/order-templates.js +1 -1
- package/dist/knowledge/passport-ledger.js +1 -1
- package/dist/knowledge/passport-templates.js +1 -1
- package/dist/knowledge/payment-risk.d.ts +8 -6
- package/dist/knowledge/payment-risk.js +1 -1
- package/dist/knowledge/payment-tracker.js +1 -1
- package/dist/knowledge/permission-ledger.js +1 -1
- package/dist/knowledge/permission-puzzle.d.ts +12 -12
- package/dist/knowledge/permission-puzzle.js +1 -1
- package/dist/knowledge/permission-risk.d.ts +4 -7
- package/dist/knowledge/permission-risk.js +1 -1
- package/dist/knowledge/permission-templates.js +1 -1
- package/dist/knowledge/personal-risk.d.ts +6 -5
- package/dist/knowledge/personal-risk.js +1 -1
- package/dist/knowledge/progress-ledger.js +1 -1
- package/dist/knowledge/progress-puzzle.d.ts +2 -2
- package/dist/knowledge/progress-puzzle.js +1 -1
- package/dist/knowledge/progress-risk.d.ts +4 -1
- package/dist/knowledge/progress-risk.js +1 -1
- package/dist/knowledge/progress-templates.js +1 -1
- package/dist/knowledge/proof-risk.d.ts +6 -5
- package/dist/knowledge/proof-risk.js +1 -1
- package/dist/knowledge/puzzle-projections.js +1 -1
- package/dist/knowledge/recipient-constraint.d.ts +20 -1
- package/dist/knowledge/recipient-constraint.js +1 -1
- package/dist/knowledge/registrar-risk.d.ts +6 -5
- package/dist/knowledge/registrar-risk.js +1 -1
- package/dist/knowledge/repository-risk.d.ts +7 -6
- package/dist/knowledge/repository-risk.js +1 -1
- package/dist/knowledge/resource-risk.d.ts +6 -5
- package/dist/knowledge/resource-risk.js +1 -1
- package/dist/knowledge/reward-ledger.d.ts +1 -1
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/reward-puzzle.d.ts +2 -2
- package/dist/knowledge/reward-puzzle.js +1 -1
- package/dist/knowledge/reward-risk.d.ts +4 -1
- package/dist/knowledge/reward-risk.js +1 -1
- package/dist/knowledge/rule-node-analyzers.spec.js +1 -1
- package/dist/knowledge/rule-outcome.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +2 -2
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/scenario-topology.js +1 -1
- package/dist/knowledge/service-allocator-audit-node.js +1 -1
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/service-puzzle.d.ts +2 -2
- package/dist/knowledge/service-puzzle.js +1 -1
- package/dist/knowledge/service-risk-node.js +1 -1
- package/dist/knowledge/service-risk.d.ts +4 -1
- package/dist/knowledge/service-risk.js +1 -1
- package/dist/knowledge/service-templates.js +1 -1
- package/dist/knowledge/strategy-manuals.d.ts +1 -1
- package/dist/knowledge/strategy-manuals.js +1 -1
- package/dist/knowledge/template-loader.d.ts +84 -0
- package/dist/knowledge/template-loader.js +1 -0
- package/dist/knowledge/template-loader.spec.d.ts +1 -0
- package/dist/knowledge/template-loader.spec.js +1 -0
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +17 -0
- package/dist/knowledge/template-scanner.js +1 -0
- package/dist/knowledge/template-scanner.spec.d.ts +1 -0
- package/dist/knowledge/template-scanner.spec.js +1 -0
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/treasury-ledger.d.ts +1 -1
- package/dist/knowledge/treasury-ledger.js +1 -1
- package/dist/knowledge/treasury-puzzle.d.ts +3 -3
- package/dist/knowledge/treasury-puzzle.js +1 -1
- package/dist/knowledge/treasury-risk.d.ts +4 -1
- package/dist/knowledge/treasury-risk.js +1 -1
- package/dist/knowledge/treasury-templates.js +1 -1
- package/dist/knowledge/util-risk.d.ts +6 -5
- package/dist/knowledge/util-risk.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +4 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/knowledge/workspace-lists.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/arbitrator-interest.js +1 -1
- package/dist/participation/radar-core.js +1 -1
- package/dist/persona/analyzer.js +1 -1
- package/dist/persona/index.js +1 -1
- package/dist/persona/model.js +1 -1
- package/dist/persona/persona-audit.spec.d.ts +1 -0
- package/dist/persona/persona-audit.spec.js +1 -0
- package/dist/persona/types.d.ts +2 -0
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/facet-money.d.ts +11 -0
- package/dist/playbooks/service-build/facet-money.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.d.ts +17 -0
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +2 -2
- package/dist/playbooks/service-build/migration-planner.d.ts +43 -0
- package/dist/playbooks/service-build/migration-planner.js +1 -0
- package/dist/playbooks/service-build/object-panorama.d.ts +42 -1
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/pipeline-actions.d.ts +1 -1
- package/dist/playbooks/service-build/reverse-mapping.d.ts +1 -0
- package/dist/playbooks/service-build/reverse-mapping.js +1 -1
- package/dist/playbooks/service-build/risk-aggregator.d.ts +2 -1
- package/dist/playbooks/service-build/risk-aggregator.js +1 -1
- package/dist/playbooks/service-build/semantic-graph.js +1 -1
- package/dist/playbooks/service-build/service-panorama.d.ts +53 -1
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/topology-evaluation.spec.js +1 -1
- package/dist/playbooks/service-build/topology-query.js +1 -1
- package/dist/playbooks/service-build/workflow-design-assessment.d.ts +2 -2
- package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
- package/dist/relationship/registry.js +1 -1
- package/dist/review/machine.js +1 -1
- package/dist/review/order.js +1 -1
- package/dist/review/service.js +1 -1
- package/dist/review/types.d.ts +7 -0
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +207 -0
- package/dist/schema/benchmark-migration/index.js +1 -0
- package/dist/schema/call/allocation.d.ts +1 -1
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/arbitration.d.ts +1 -1
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.d.ts +5 -5
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/contact.d.ts +1 -1
- package/dist/schema/call/demand.d.ts +1 -1
- package/dist/schema/call/guard.d.ts +3 -3
- package/dist/schema/call/machine.d.ts +5 -5
- package/dist/schema/call/order.d.ts +3 -3
- package/dist/schema/call/payment.js +1 -1
- package/dist/schema/call/permission-handler.d.ts +1 -1
- package/dist/schema/call/permission-handler.js +1 -1
- package/dist/schema/call/permission.d.ts +16 -16
- package/dist/schema/call/permission.js +1 -1
- package/dist/schema/call/personal.d.ts +8 -8
- package/dist/schema/call/personal.js +1 -1
- package/dist/schema/call/progress.d.ts +3 -3
- package/dist/schema/call/repository.d.ts +11 -11
- package/dist/schema/call/repository.js +1 -1
- package/dist/schema/call/reward.d.ts +1 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +7 -7
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/call/treasury.d.ts +1 -1
- package/dist/schema/common/index.d.ts +6 -6
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/config/index.d.ts +50 -1
- package/dist/schema/config/index.js +1 -1
- package/dist/schema/evaluation/index.d.ts +27 -11
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +5 -5
- package/dist/schema/goal/planning.d.ts +15 -15
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.js +1 -1
- package/dist/schema/interaction/index.d.ts +1 -1
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +26 -26
- package/dist/schema/operations.d.ts +33 -33
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +4708 -0
- package/dist/schema/persona/index.js +1 -1
- package/dist/schema/query/bi.d.ts +232 -25
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +35 -35
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workflow/index.d.ts +1 -1
- package/dist/schema-query-impl/index.d.ts +9 -0
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/benchmark_migration_operation.output.json +793 -0
- package/dist/schemas/benchmark_migration_operation.schema.json +83 -0
- package/dist/schemas/bridge_operation.schema.json +5 -5
- package/dist/schemas/config_operation.output.json +252 -0
- package/dist/schemas/config_operation.schema.json +21 -1
- package/dist/schemas/evaluation_operation.output.json +22 -10
- package/dist/schemas/goal_operation.schema.json +8 -8
- package/dist/schemas/guard2file.schema.json +1 -1
- package/dist/schemas/index.json +7 -1
- package/dist/schemas/machineNode2file.schema.json +1 -1
- package/dist/schemas/messenger_operation.schema.json +24 -12
- package/dist/schemas/onchain_events.output.json +1 -1
- package/dist/schemas/onchain_operations.output.json +4 -2
- package/dist/schemas/onchain_operations.schema.json +189 -139
- package/dist/schemas/onchain_operations_allocation.schema.json +13 -11
- package/dist/schemas/onchain_operations_arbitration.schema.json +10 -8
- package/dist/schemas/onchain_operations_contact.schema.json +7 -5
- package/dist/schemas/onchain_operations_demand.schema.json +7 -5
- package/dist/schemas/onchain_operations_gen_passport.schema.json +5 -3
- package/dist/schemas/onchain_operations_gen_proof.schema.json +1 -1
- package/dist/schemas/onchain_operations_guard.schema.json +5 -3
- package/dist/schemas/onchain_operations_machine.schema.json +22 -18
- package/dist/schemas/onchain_operations_order.schema.json +11 -7
- package/dist/schemas/onchain_operations_payment.schema.json +3 -3
- package/dist/schemas/onchain_operations_permission.schema.json +19 -11
- package/dist/schemas/onchain_operations_personal.schema.json +16 -10
- package/dist/schemas/onchain_operations_progress.schema.json +11 -7
- package/dist/schemas/onchain_operations_proof.schema.json +5 -3
- package/dist/schemas/onchain_operations_repository.schema.json +12 -8
- package/dist/schemas/onchain_operations_reward.schema.json +11 -9
- package/dist/schemas/onchain_operations_service.schema.json +28 -22
- package/dist/schemas/onchain_operations_treasury.schema.json +11 -9
- package/dist/schemas/onchain_table_data.output.json +27 -17
- package/dist/schemas/persona_operation.output.json +15875 -1
- package/dist/schemas/persona_operation.schema.json +3056 -478
- package/dist/schemas/query_toolkit.output.json +343 -63
- package/dist/schemas/query_toolkit.schema.json +1 -1
- package/dist/schemas/workflow_operation.schema.json +4 -2
- package/dist/strategy/scorecard.js +1 -1
- package/dist/tools/handlers/benchmark-migration.d.ts +2 -0
- package/dist/tools/handlers/benchmark-migration.js +1 -0
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/move-fn-index.gen.d.ts +3 -0
- package/dist/tools/move-fn-index.gen.js +1 -0
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/config.js +1 -1
- package/dist/tools/registry/evaluation.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/sanitize-output.d.ts +3 -0
- package/dist/tools/sanitize-output.js +1 -0
- package/dist/tools/sanitize-output.spec.d.ts +1 -0
- package/dist/tools/sanitize-output.spec.js +1 -0
- package/package.json +9 -4
- package/dist/knowledge/baselines/evaluation-baselines.json +0 -79
|
@@ -1 +1 @@
|
|
|
1
|
-
import{findScene,inferSceneFromFlow}from'./machine-ledger.js';export const MACHINE_TEMPLATES=[{'id':'tpl_machine_ecommerce_standard','scene_id':'ecommerce_standard','name':'Standard\x20E-commerce\x20Flow','description':'Linear\x20e-commerce\x20workflow:\x20Paid\x20(entry)\x20->\x20Ship\x20->\x20Receive\x20->\x20Complete.\x20'+'Payment\x20is\x20handled\x20by\x20Service.buy()\x20atomically;\x20Machine\x20starts\x20at\x20post-payment\x20state.\x20'+'Funds\x20auto-allocated\x20to\x20merchant\x20at\x20Complete\x20node.\x20Recommended\x20baseline\x20for\x20new\x20merchants.','recommended_patterns':['P-M-SEQ'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object\x20address\x20or\x20name\x20(must\x20have\x20custom\x20indices\x20defined)','constraint':'Permission\x20must\x20already\x20be\x20created;\x20index\x202\x20(merchant)\x20and\x20index\x203\x20(admin)\x20recommended'},{'name':'ship_forward_name','type':'string','required':!![],'default':'Ship','description':'Forward\x20name\x20for\x20shipping\x20step','constraint':'Must\x20be\x20<64\x20BCS\x20bytes;\x20only\x20letters/digits/underscore'},{'name':'receive_forward_name','type':'string','required':!![],'default':'Receive','description':'Forward\x20name\x20for\x20customer\x20receipt\x20confirmation'},{'name':'complete_node_name','type':'string','required':!![],'default':'Complete','description':'Terminal\x20node\x20name\x20triggering\x20fund\x20allocation'}],'example_nodes':[{'name':'Paid','description':'Entry:\x20order\x20created\x20and\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'Shipped','description':'Goods\x20dispatched'},{'name':'Received','description':'Customer\x20confirmed\x20receipt'},{'name':'${complete_node_name}','description':'Terminal:\x20triggers\x20allocation'}],'example_pairs':[{'prev_node':'','next_node':'Paid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':'','permission_index':0x0}]},{'prev_node':'Paid','next_node':'Shipped','threshold':0x1,'forwards':[{'name':'${ship_forward_name}','weight':0x1,'permission_index':0x2,'named_operator':''}]},{'prev_node':'Shipped','next_node':'Received','threshold':0x1,'forwards':[{'name':'${receive_forward_name}','weight':0x1,'named_operator':'','permission_index':0x0}]},{'prev_node':'Received','next_node':'${complete_node_name}','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2,'named_operator':''}]}],'required_guards':[],'required_permissions':[{'index':0x2,'name':'merchant','description':'Merchant\x20role\x20for\x20Ship\x20+\x20Finish'},{'index':0x3,'name':'admin','description':'Admin\x20override\x20(optional)'}],'required_allocators':[{'name':'MerchantAllocation','trigger_node':'${complete_node_name}','description':'100%\x20to\x20merchant\x20Treasury\x20or\x20personal\x20address'}],'forkable_fields':['node_names','forward_names','thresholds','additional_branches'],'applicable_industries':['ecommerce','retail'],'relevant_risks':['R-M1-01','R-M1-02','R-M1-08','R-M2-01','R-M3-02','R-M4-01'],'creation_notes':['Build\x20order:\x20Permission\x20->\x20Machine\x20(unpublished)\x20->\x20Guards\x20->\x20Bind\x20guards\x20->\x20Publish\x20->\x20Bind\x20to\x20Service','First\x20node\x20\x27Paid\x27\x20represents\x20post-payment\x20state\x20—\x20Service.buy()\x20completes\x20payment\x20atomically\x20before\x20Progress\x20is\x20created','No\x20separate\x20\x27Order\x27\x20or\x20\x27Pay\x27\x20nodes\x20needed\x20—\x20payment\x20is\x20handled\x20by\x20Service.buy(),\x20not\x20Machine','Entry\x20point:\x20prev_node=\x27\x27\x20(empty\x20string)\x20targets\x20\x27Paid\x27\x20—\x20at\x20least\x20one\x20Pair\x20must\x20exist\x20with\x20empty\x20prev_node','If\x20using\x20P16\x20circular\x20reference\x20for\x20Service,\x20use\x20name\x20not\x20address\x20(Service\x20not\x20yet\x20published)'],'example_use_case':'Small\x20e-commerce\x20shop\x20selling\x20camera\x20accessories.\x20Linear\x20flow\x20with\x20no\x20exceptions.\x20'+'Funds\x20allocated\x20to\x20merchant\x20personal\x20address\x20on\x20Complete.','publish_checklist':['All\x204\x20nodes\x20have\x20at\x20least\x20one\x20outgoing\x20Forward\x20(except\x20terminal)','Entry\x20Pair\x20exists\x20(prev_node=\x27\x27\x20targets\x20\x27Paid\x27)','permissionIndex\x20values\x20match\x20Permission\x20object\x20indices','Test\x20Progress\x20run\x20on\x20testnet','machineNode2file\x20export\x20as\x20backup']},{'id':'tpl_machine_ecommerce_exceptions','scene_id':'ecommerce_with_exceptions','name':'E-commerce\x20Flow\x20with\x20Exception\x20Branches','description':'Multi-path\x20workflow:\x20Paid\x20(entry)\x20->\x20Ship\x20->\x20Receive/Lost/Return.\x20Lost\x20uses\x20dual-sig\x20(threshold=2).\x20'+'Payment\x20is\x20handled\x20by\x20Service.buy()\x20atomically;\x20Machine\x20starts\x20at\x20post-payment\x20state.\x20'+'Return\x20path\x20opens\x20Refund\x20->\x20Complete.\x20Competing\x20pairs\x20first-wins.','recommended_patterns':['P-M-SEQ','P-M-COMPETING'],'recommended_topology':['P-M-LINEAR','P-M-COMPETING'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object'},{'name':'lost_threshold','type':'number','required':!![],'default':'2','description':'Threshold\x20for\x20dual-sig\x20on\x20Lost\x20node','constraint':'Must\x20be\x202\x20(customer\x20+\x20merchant)'},{'name':'arbitration_ref','type':'arbitration_ref','required':![],'description':'Arbitration\x20object\x20if\x20Lost\x20escalates\x20to\x20arbitration'},{'name':'time_guard_days','type':'number','required':!![],'default':'10','description':'Days\x20before\x20auto-complete\x20trigger\x20(time\x20guard)','constraint':'Must\x20be\x20>\x200;\x20reasonable\x20range\x207-30'},{'name':'return_node_name','type':'string','required':!![],'default':'Return','description':'Name\x20of\x20the\x20return/refund\x20node\x20in\x20the\x20exception\x20branch'}],'example_nodes':[{'name':'Paid','description':'Entry:\x20order\x20created\x20and\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'Shipped'},{'name':'Received'},{'name':'Lost'},{'name':'Return'},{'name':'Refund'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'Paid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'Paid','next_node':'Shipped','threshold':0x1,'forwards':[{'name':'Ship','weight':0x1,'permission_index':0x2}]},{'prev_node':'Shipped','next_node':'Received','threshold':0x1,'forwards':[{'name':'ConfirmReceive','weight':0x1,'named_operator':''}]},{'prev_node':'Shipped','next_node':'Lost','threshold':'${lost_threshold}','forwards':[{'name':'CustomerReport','weight':0x1,'named_operator':''},{'name':'MerchantConfirm','weight':0x1,'permission_index':0x2}]},{'prev_node':'Shipped','next_node':'Return','threshold':0x1,'forwards':[{'name':'RequestReturn','weight':0x1,'named_operator':''}]},{'prev_node':'Received','next_node':'Complete','threshold':0x1,'forwards':[{'name':'TimeGuard','weight':0x1,'permission_index':0x3,'guard':'time_guard_${time_guard_days}_days'},{'name':'MerchantFinish','weight':0x1,'permission_index':0x2}]},{'prev_node':'Return','next_node':'Refund','threshold':0x1,'forwards':[{'name':'IssueRefund','weight':0x1,'permission_index':0x2}]},{'prev_node':'Refund','next_node':'Complete','threshold':0x1,'forwards':[{'name':'CloseReturn','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'MerchantConfirm','purpose':'Dual-sig\x20on\x20Lost\x20node'},{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'TimeGuard','purpose':'Time\x20lock\x20${time_guard_days}\x20days'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Merchant\x20role'},{'index':0x3,'name':'admin','description':'Admin\x20/\x20time-guard\x20trigger'}],'required_allocators':[{'name':'CompleteAllocation','trigger_node':'Complete','description':'Full\x20allocation\x20to\x20merchant\x20on\x20normal\x20completion'},{'name':'RefundAllocation','trigger_node':'Refund','description':'Full\x20refund\x20to\x20customer\x20on\x20return'},{'name':'LostAllocation','trigger_node':'Lost','description':'Optional:\x20partial\x20refund\x20or\x20escrow\x20(depends\x20on\x20policy)'}],'forkable_fields':['node_names','branch_conditions','time_guard_days','lost_threshold'],'applicable_industries':['ecommerce','logistics'],'relevant_risks':['R-M1-01','R-M1-03','R-M1-08','R-M2-01','R-M2-05','R-M3-02','R-M3-04','R-M3-05','R-M4-01','R-M5-03'],'creation_notes':['First\x20node\x20\x27Paid\x27\x20represents\x20post-payment\x20state\x20—\x20Service.buy()\x20completes\x20payment\x20atomically\x20before\x20Progress\x20is\x20created','No\x20separate\x20\x27Order\x27\x20or\x20\x27Pay\x27\x20nodes\x20needed\x20—\x20payment\x20is\x20handled\x20by\x20Service.buy(),\x20not\x20Machine','Competing\x20Pairs\x20(Shipped\x20->\x20Received/Lost/Return)\x20are\x20mutually\x20exclusive\x20—\x20first\x20threshold\x20met\x20wins','Lost\x20node\x20threshold=2\x20means\x20BOTH\x20customer\x20and\x20merchant\x20Forwards\x20must\x20execute','TimeGuard\x20must\x20use\x20context(Clock)\x20>=\x20progress.entry_time\x20+\x20duration','If\x20Lost\x20escalates\x20to\x20arbitration,\x20bind\x20arbitration_usage_guard\x20on\x20Lost\x20forward','Refund\x20Allocation\x20must\x20use\x20sharing.who=OrderHolder\x20(refund\x20to\x20customer,\x20NOT\x20merchant)'],'example_use_case':'Mid-size\x20e-commerce\x20with\x207-day\x20return\x20policy\x20and\x20dispute\x20handling.\x20'+'Lost\x20claims\x20require\x20customer+merchant\x20dual\x20confirmation.','publish_checklist':['All\x20competing\x20Pairs\x20tested:\x20verify\x20first-wins\x20semantics\x20on\x20testnet','Lost\x20dual-sig\x20tested:\x20incomplete\x20signatures\x20do\x20not\x20advance','TimeGuard\x20Clock\x20query\x20verified\x20(testnet)','All\x20three\x20Allocators\x20tested\x20with\x20correct\x20sharing.who','Arbitration\x20binding\x20(if\x20any)\x20verified\x20via\x20gen_passport']},{'id':'tpl_machine_rental','scene_id':'rental_standard','name':'Equipment\x20Rental\x20Flow','description':'Rental\x20flow:\x20DepositPaid\x20(entry)\x20->\x20Pickup\x20->\x20In\x20Use\x20->\x20Return\x20->\x20Refund\x20Deposit.\x20'+'Payment\x20is\x20handled\x20by\x20Service.buy()\x20atomically;\x20Machine\x20starts\x20at\x20post-deposit\x20state.\x20'+'Separates\x20deposit\x20from\x20rental\x20fee\x20(two\x20Allocators).\x20Damage\x20report\x20via\x20retained_submission.','recommended_patterns':['P-M-SEQ'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object'},{'name':'deposit_amount','type':'number','required':!![],'description':'Deposit\x20amount\x20in\x20smallest\x20WOW\x20unit','constraint':'Must\x20equal\x20order.amount\x20field;\x20verify\x20via\x20Guard\x20query'},{'name':'damage_inspection_node','type':'string','required':!![],'default':'DamageCheck','description':'Name\x20of\x20the\x20node\x20where\x20damage\x20inspection\x20occurs'},{'name':'return_node_name','type':'string','required':!![],'default':'Return','description':'Name\x20of\x20the\x20return\x20node\x20after\x20damage\x20check\x20fails'}],'example_nodes':[{'name':'DepositPaid','description':'Entry:\x20deposit\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'PickedUp'},{'name':'InUse'},{'name':'Return'},{'name':'DamageCheck'},{'name':'DepositRefund'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'DepositPaid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'DepositPaid','next_node':'PickedUp','threshold':0x1,'forwards':[{'name':'Pickup','weight':0x1,'named_operator':'','permission_index':0x2}]},{'prev_node':'PickedUp','next_node':'InUse','threshold':0x1,'forwards':[{'name':'StartUse','weight':0x1,'named_operator':''}]},{'prev_node':'InUse','next_node':'Return','threshold':0x1,'forwards':[{'name':'ReturnItem','weight':0x1,'named_operator':''}]},{'prev_node':'Return','next_node':'DamageCheck','threshold':0x1,'forwards':[{'name':'Inspect','weight':0x1,'permission_index':0x2,'retained_submission':'damage_report'}]},{'prev_node':'Return','next_node':'Complete','threshold':0x1,'forwards':[{'name':'CleanReturn','weight':0x1,'permission_index':0x2}]},{'prev_node':'DamageCheck','next_node':'DepositRefund','threshold':0x1,'forwards':[{'name':'DeductDamage','weight':0x1,'permission_index':0x2}]},{'prev_node':'DepositRefund','next_node':'Complete','threshold':0x1,'forwards':[{'name':'Close','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_privacy_delivery_proof','bound_to_forward':'Inspect','purpose':'Optional:\x20damage\x20evidence\x20proof\x20(photo,\x20video)'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Rental\x20provider'}],'required_allocators':[{'name':'RentalFeeAllocation','trigger_node':'Complete','description':'Rental\x20fee\x20to\x20merchant'},{'name':'DepositRefundAllocation','trigger_node':'DepositRefund','description':'Remaining\x20deposit\x20to\x20customer\x20(OrderHolder\x20sharing.who)'},{'name':'DamageDeductionAllocation','trigger_node':'DamageCheck','description':'Damage\x20deduction\x20to\x20merchant'}],'forkable_fields':['deposit_amount','damage_node_logic','additional_inspection_steps'],'applicable_industries':['rental','equipment','vehicle'],'relevant_risks':['R-M1-01','R-M1-08','R-M2-01','R-M2-04','R-M3-02','R-M4-01','R-M5-02'],'creation_notes':['First\x20node\x20\x27DepositPaid\x27\x20represents\x20post-payment\x20state\x20—\x20Service.buy()\x20completes\x20deposit\x20payment\x20atomically\x20before\x20Progress\x20is\x20created','No\x20separate\x20\x27Reserve\x27\x20or\x20\x27PayDeposit\x27\x20nodes\x20needed\x20—\x20reservation\x20and\x20payment\x20are\x20handled\x20by\x20Service.buy(),\x20not\x20Machine','Damage\x20report\x20uses\x20retained_submission\x20—\x20values\x20stored\x20uniquely\x20by\x20(current_node,\x20next_node,\x20forward_name)','Two\x20competing\x20Pairs\x20at\x20Return\x20node:\x20DamageCheck\x20vs\x20Complete\x20(clean\x20return)','DamageDeduction\x20Allocation\x20uses\x20sharing.who=Entity\x20(merchant),\x20not\x20OrderHolder'],'example_use_case':'Camera\x20equipment\x20rental:\x20customer\x20pays\x201000\x20WOW\x20deposit,\x20returns\x20equipment,\x20'+'merchant\x20inspects.\x20If\x20damaged,\x20200\x20WOW\x20deducted;\x20otherwise\x20full\x20refund.','publish_checklist':['Deposit\x20Guard\x20tested\x20(testnet)\x20with\x20valid/invalid\x20amounts','Damage\x20report\x20retained_submission\x20stored\x20correctly\x20(query\x20progress_history)','Both\x20Return\x20branches\x20tested\x20(DamageCheck\x20+\x20CleanReturn)','All\x20three\x20Allocators\x20verified\x20with\x20correct\x20sharing.who']},{'id':'tpl_machine_dual_signature','scene_id':'dual_signature','name':'Dual-Signature\x20Consensus\x20Flow','description':'Critical\x20node\x20requires\x20both\x20customer\x20+\x20merchant\x20confirmation.\x20threshold=2\x20with\x20two\x20Forwards\x20(weight=1\x20each).\x20'+'Customer\x20uses\x20namedOperator=\x27\x27\x20(OrderHolder);\x20merchant\x20uses\x20permissionIndex=2.','recommended_patterns':['P-M-AND'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object'},{'name':'critical_node_name','type':'string','required':!![],'default':'Approve','description':'Node\x20requiring\x20dual-sig'},{'name':'next_node_after_approval','type':'string','required':!![],'default':'Execute','description':'Name\x20of\x20the\x20node\x20that\x20follows\x20after\x20dual-signature\x20approval'}],'example_nodes':[{'name':'Initiated'},{'name':'${critical_node_name}','description':'Dual-sig\x20required\x20here'},{'name':'${next_node_after_approval}'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'Initiated','threshold':0x1,'forwards':[{'name':'Initiate','weight':0x1,'named_operator':''}]},{'prev_node':'Initiated','next_node':'${critical_node_name}','threshold':0x1,'forwards':[{'name':'Submit','weight':0x1,'named_operator':''}]},{'prev_node':'${critical_node_name}','next_node':'${next_node_after_approval}','threshold':0x2,'forwards':[{'name':'CustomerApprove','weight':0x1,'named_operator':'','guard':'customer_identity_guard'},{'name':'MerchantApprove','weight':0x1,'permission_index':0x2,'guard':'merchant_identity_guard'}]},{'prev_node':'${next_node_after_approval}','next_node':'Complete','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'CustomerApprove','purpose':'Verify\x20customer\x20identity\x20(order.owner)'},{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'MerchantApprove','purpose':'Verify\x20merchant\x20identity\x20(permission\x20holder)'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Merchant\x20approval'}],'required_allocators':[{'name':'CompleteAllocation','trigger_node':'Complete','description':'Allocation\x20on\x20dual-sig\x20completion'}],'forkable_fields':['critical_node_name','additional_approvers','guard_logic'],'applicable_industries':['ecommerce','service','logistics','escrow'],'relevant_risks':['R-M1-08','R-M2-01','R-M3-02','R-M3-04'],'creation_notes':['threshold=2\x20means\x20BOTH\x20Forwards\x20must\x20execute\x20to\x20advance\x20(AND\x20semantics)','Customer\x20Forward\x20uses\x20namedOperator=\x27\x27\x20(OrderHolder)','Merchant\x20Forward\x20uses\x20permissionIndex=2','If\x20either\x20party\x20fails\x20to\x20sign,\x20workflow\x20stalls\x20—\x20consider\x20adding\x20timeout\x20Guard'],'example_use_case':'High-value\x20order\x20(e.g.\x20real\x20estate\x20transaction)\x20requiring\x20both\x20buyer\x20and\x20seller\x20confirmation.','publish_checklist':['Both\x20Forward\x20identities\x20tested\x20on\x20testnet','Verify\x20partial\x20signature\x20does\x20NOT\x20advance\x20(threshold=2)','Guards\x20correctly\x20distinguish\x20customer\x20vs\x20merchant\x20identity']},{'id':'tpl_machine_weighted_voting','scene_id':'weighted_voting','name':'Weighted\x20Voting\x20Flow','description':'Multi-party\x20voting\x20with\x20unequal\x20weights.\x20threshold=100,\x20chief\x20weight=60,\x20members\x20weight=40\x20total.\x20'+'Each\x20member\x27s\x20weight\x20extracted\x20via\x20Guard\x20query\x20from\x20Arbitration\x20object.','recommended_patterns':['P-M-VOTE'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'arbitration_ref','type':'arbitration_ref','required':!![],'description':'Arbitration\x20object\x20storing\x20voter\x20weights'},{'name':'threshold_total','type':'number','required':!![],'default':'100','description':'Total\x20weight\x20threshold\x20for\x20decision'},{'name':'chief_weight','type':'number','required':!![],'default':'60','description':'Weight\x20assigned\x20to\x20the\x20chief\x20voter\x20(out\x20of\x20100)'},{'name':'member_count','type':'number','required':!![],'default':'5','description':'Number\x20of\x20voting\x20members\x20(excluding\x20chief)'}],'example_nodes':[{'name':'VoteOpened'},{'name':'Voting'},{'name':'Approved'},{'name':'Rejected'}],'example_pairs':[{'prev_node':'','next_node':'VoteOpened','threshold':0x1,'forwards':[{'name':'OpenVote','weight':0x1,'permission_index':0x3}]},{'prev_node':'VoteOpened','next_node':'Voting','threshold':0x1,'forwards':[{'name':'StartVoting','weight':0x1,'permission_index':0x3}]},{'prev_node':'Voting','next_node':'Approved','threshold':'${threshold_total}','forwards':[{'name':'ChiefVote','weight':'${chief_weight}','permission_index':0x2,'guard':'arb_voting_guard','retained_submission':'chief_vote_record'},{'name':'MemberVote','weight':0x8,'named_operator':'member','guard':'arb_voting_guard','retained_submission':'member_vote_record'}]},{'prev_node':'Voting','next_node':'Rejected','threshold':0x1,'forwards':[{'name':'TimeoutReject','weight':0x1,'permission_index':0x3,'guard':'voting_timeout_guard'}]}],'required_guards':[{'guard_template_id':'tpl_voting_guard_numeric_weight','bound_to_forward':'ChiefVote','purpose':'Verify\x20voting\x20eligibility\x20+\x20extract\x20weight\x20from\x20Arbitration'},{'guard_template_id':'tpl_voting_guard_numeric_weight','bound_to_forward':'MemberVote','purpose':'Verify\x20voting\x20eligibility\x20+\x20prevent\x20double-vote'}],'required_permissions':[{'index':0x2,'name':'chief','description':'Chief\x20voter\x20(high\x20weight)'},{'index':0x3,'name':'admin','description':'Vote\x20opener\x20/\x20timeout\x20trigger'}],'required_allocators':[{'name':'ApprovedAllocation','trigger_node':'Approved','description':'Allocation\x20on\x20approval'}],'forkable_fields':['weights','voter_count','timeout_days'],'applicable_industries':['governance','arbitration','dao'],'relevant_risks':['R-M1-08','R-M2-05','R-M3-04','R-M5-04','R-X1-14'],'creation_notes':['Member\x20weight\x20must\x20be\x20extracted\x20dynamically\x20via\x20Guard\x20query\x20(not\x20hardcoded\x20in\x20Forward)','Guard\x20MUST\x20check\x20arb.voted\x20has\x20[Signer]\x20to\x20prevent\x20double-voting\x20(R-X1-14\x20CRITICAL)','Competing\x20Pair:\x20Approved\x20vs\x20Rejected\x20(timeout)\x20—\x20first-wins','Voting\x20weight\x20is\x20query-derived;\x20Forward\x20weight\x20field\x20is\x20just\x20session\x20counter'],'example_use_case':'Arbitration\x20panel:\x201\x20chief\x20(weight\x2060)\x20+\x205\x20members\x20(weight\x208\x20each\x20=\x2040).\x20'+'Need\x20total\x20>=\x20100\x20to\x20approve.\x20Reject\x20after\x2072h\x20timeout.','publish_checklist':['Arbitration\x20object\x20created\x20and\x20tested','Double-vote\x20prevention\x20verified\x20(try\x20voting\x20twice\x20—\x20should\x20fail)','Weight\x20extraction\x20tested\x20with\x20different\x20voter\x20configurations','Timeout\x20Guard\x20(Clock)\x20verified\x20on\x20testnet']},{'id':'tpl_machine_cross_machine','scene_id':'cross_machine_supply_chain','name':'Cross-Machine\x20Supply\x20Chain','description':'Decomposed\x20supply\x20chain\x20across\x20multiple\x20Machines.\x20Machine\x20B\x27s\x20Forward\x20Guard\x20queries\x20Machine\x20A\x27s\x20Progress\x20'+'via\x20convert_witness=100\x20to\x20verify\x20upstream\x20completion\x20before\x20advancing.','recommended_patterns':['P-M-CROSS-MACHINE'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'machine_a_id','type':'machine_ref','required':!![],'description':'Upstream\x20Machine\x20(must\x20already\x20be\x20published)','constraint':'Machine\x20A\x20must\x20be\x20published\x20BEFORE\x20Machine\x20B\x27s\x20Guard\x20can\x20reference\x20its\x20Progress\x20'+'(indirect\x20via\x20progress::new\x20->\x20assert_published,\x20see\x2006\x20§14.6)'},{'name':'machine_a_complete_node','type':'string','required':!![],'default':'Complete','description':'Target\x20node\x20name\x20in\x20Machine\x20A\x20to\x20verify'},{'name':'machine_b_permission','type':'permission_ref','required':!![],'description':'Machine\x20B\x27s\x20Permission\x20object'}],'example_nodes':[{'name':'UpstreamVerified'},{'name':'Production'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'UpstreamVerified','threshold':0x1,'forwards':[{'name':'VerifyUpstream','weight':0x1,'permission_index':0x2,'guard':'upstream_progress_guard','retained_submission':'upstream_progress_id'}]},{'prev_node':'UpstreamVerified','next_node':'Production','threshold':0x1,'forwards':[{'name':'StartProduction','weight':0x1,'permission_index':0x2}]},{'prev_node':'Production','next_node':'Complete','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'VerifyUpstream','purpose':'Query\x20Machine\x20A\x27s\x20Progress:\x20verify\x20it\x20reached\x20${machine_a_complete_node}'}],'required_permissions':[{'index':0x2,'name':'manufacturer','description':'Machine\x20B\x20operator'}],'required_allocators':[{'name':'CompleteAllocation','trigger_node':'Complete','description':'Allocation\x20to\x20Machine\x20B\x27s\x20merchant'}],'forkable_fields':['upstream_machine_ref','verification_node_name'],'applicable_industries':['manufacturing','logistics','retail','supply_chain'],'relevant_risks':['R-M1-01','R-M1-08','R-M2-01','R-M2-04','R-M3-04','R-M5-04','R-M5-05','R-M5-06'],'creation_notes':['Machine\x20A\x20MUST\x20be\x20published\x20before\x20Machine\x20B\x20(dependency\x20order)','Guard\x20uses\x20convert_witness=100\x20to\x20convert\x20submitted\x20Order/Progress\x20ID\x20into\x20queryable\x20Progress\x20object','Cross-Machine\x20dependency\x20is\x20one-way\x20(no\x20cycles)','retained_submission\x20stores\x20upstream\x20Progress\x20ID\x20for\x20later\x20audit','Multi-party\x20chain:\x20extend\x20pattern\x20with\x20Machine\x20C,\x20D,\x20...\x20(each\x20independently\x20published)','Dependency\x20verification:\x20indirect\x20via\x20progress::new\x20->\x20assert_published\x20(see\x2006\x20§14.6)'],'example_use_case':'Supplier\x20(Machine\x20A)\x20->\x20Manufacturer\x20(Machine\x20B)\x20->\x20Retailer\x20(Machine\x20C).\x20'+'Manufacturer\x20cannot\x20start\x20production\x20until\x20supplier\x27s\x20Progress\x20reaches\x20\x27Complete\x27.','publish_checklist':['Machine\x20A\x20already\x20published\x20on-chain\x20(verify\x20via\x20onchain_objects)','Cross-Machine\x20Guard\x20tested\x20with\x20valid/invalid\x20upstream\x20Progress\x20IDs','retained_submission\x20verified\x20(query\x20progress_history\x20for\x20upstream_progress_id)','Independent\x20testing:\x20run\x20Machine\x20A\x20to\x20Complete,\x20then\x20attempt\x20Machine\x20B\x27s\x20VerifyUpstream']},{'id':'tpl_machine_privacy_delivery','scene_id':'privacy_delivery','name':'Privacy-Preserving\x20Delivery\x20Flow','description':'Customer\x20submits\x20privacy\x20data\x20via\x20Messenger\x20(encrypted,\x20off-chain).\x20Chain\x20stores\x20only\x20Merkle\x20Root\x20Proof.\x20'+'Guard\x20verifies\x20Proof\x20signature\x20+\x20timestamp\x20+\x20service\x20binding.\x20Uses\x20tpl_forward_privacy_delivery_proof\x20(strict\x20mode).','recommended_patterns':['P-M-SEQ'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object'},{'name':'proof_node_name','type':'string','required':!![],'default':'ProofSubmitted','description':'Name\x20of\x20the\x20node\x20where\x20delivery\x20proof\x20is\x20submitted'},{'name':'delivery_node_name','type':'string','required':!![],'default':'DeliveryConfirmed','description':'Name\x20of\x20the\x20node\x20where\x20delivery\x20confirmation\x20occurs'}],'example_nodes':[{'name':'Paid','description':'Entry:\x20order\x20created\x20and\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'${proof_node_name}','description':'Customer\x20submits\x20Proof\x20via\x20Messenger'},{'name':'${delivery_node_name}'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'Paid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'Paid','next_node':'${proof_node_name}','threshold':0x1,'forwards':[{'name':'SubmitProof','weight':0x1,'named_operator':'','guard':'tpl_forward_privacy_delivery_proof','retained_submission':'proof_address'}]},{'prev_node':'${proof_node_name}','next_node':'${delivery_node_name}','threshold':0x1,'forwards':[{'name':'ConfirmDelivery','weight':0x1,'permission_index':0x2}]},{'prev_node':'${delivery_node_name}','next_node':'Complete','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_privacy_delivery_proof','bound_to_forward':'SubmitProof','purpose':'Verify\x20Proof:\x20signer=proof.signer\x20∧\x20proof.time>order.time\x20∧\x20order.service=service'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Merchant\x20confirms\x20delivery'}],'required_allocators':[{'name':'CompleteAllocation','trigger_node':'Complete','description':'Allocation\x20to\x20merchant\x20after\x20delivery\x20confirmation'}],'forkable_fields':['proof_node_name','delivery_node_name','additional_evidence_steps'],'applicable_industries':['ecommerce','logistics','privacy_service'],'relevant_risks':['R-M1-01','R-M1-08','R-M2-01','R-M2-04','R-M3-02','R-M5-03'],'creation_notes':['Use\x20strict\x20mode\x20tpl_forward_privacy_delivery_proof\x20(3\x20conditions:\x20Signer\x20+\x20time\x20+\x20service\x20binding)','submitChainProof\x20about_address\x20=\x20peerAddress\x20(NOT\x20sessionId)','order_id\x20passed\x20via\x20description\x20string\x20field\x20(not\x20about_address)','Guard\x20table\x20item\x20name\x20MUST\x20be\x20<64\x20BCS\x20bytes\x20(MAX_NAME_LENGTH=64)','retained_submission\x20stores\x20Proof\x20address\x20for\x20arbitration\x20query','Proof\x20MUST\x20be\x20generated\x20by\x20messenger.submitChainProof\x20(not\x20manual)'],'example_use_case':'Customer\x20sends\x20delivery\x20address\x20via\x20Messenger\x20(encrypted).\x20Chain\x20stores\x20only\x20Proof.\x20'+'Merchant\x20verifies\x20Proof,\x20then\x20confirms\x20delivery.','publish_checklist':['Strict\x20mode\x20Guard\x20tested:\x203\x20conditions\x20verified\x20individually','Messenger\x20integration\x20tested\x20end-to-end\x20(submit\x20+\x20verify)','retained_submission\x20stored\x20Proof\x20address\x20queryable\x20from\x20progress_history','Guard\x20table\x20item\x20name\x20length\x20validated\x20(<64\x20BCS\x20bytes)']},{'id':'tpl_machine_reward','scene_id':'reward_incentive','name':'Reward\x20Incentive\x20Flow','description':'Customer\x20triggers\x20Reward\x20claim\x20at\x20specific\x20node.\x20Guard\x20prevents\x20double-claim\x20via\x20query_reward_record_count==0.\x20'+'Reward\x20object\x20independent\x20of\x20Allocator.','recommended_patterns':['P-M-SEQ'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'reward_ref','type':'reward_ref','required':!![],'description':'Reward\x20object\x20address\x20(must\x20be\x20already\x20created)'},{'name':'claim_node_name','type':'string','required':!![],'default':'ClaimReward','description':'Name\x20of\x20the\x20node\x20where\x20reward\x20claims\x20are\x20triggered'}],'example_nodes':[{'name':'Eligible'},{'name':'${claim_node_name}'},{'name':'Rewarded'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'Eligible','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'Eligible','next_node':'${claim_node_name}','threshold':0x1,'forwards':[{'name':'TriggerClaim','weight':0x1,'named_operator':'','guard':'reward_anti_double_guard','retained_submission':'claim_record'}]},{'prev_node':'${claim_node_name}','next_node':'Rewarded','threshold':0x1,'forwards':[{'name':'IssueReward','weight':0x1,'permission_index':0x3}]},{'prev_node':'Rewarded','next_node':'Complete','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_reward_one_time_claim','bound_to_forward':'TriggerClaim','purpose':'Verify\x20query_reward_record_count==0\x20to\x20prevent\x20double-claim'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Completes\x20flow'},{'index':0x3,'name':'reward_admin','description':'Issues\x20reward\x20tokens'}],'required_allocators':[{'name':'CompleteAllocation','trigger_node':'Complete','description':'Standard\x20allocation\x20(separate\x20from\x20Reward)'}],'forkable_fields':['claim_node_name','additional_reward_conditions'],'applicable_industries':['ecommerce','subscription','education','loyalty'],'relevant_risks':['R-M1-08','R-M2-05','R-M3-04','R-X1-14'],'creation_notes':['Reward\x20Guard\x20MUST\x20check\x20query_reward_record_count\x20==\x200\x20(R-X1-14\x20CRITICAL)','Reward\x20is\x20INDEPENDENT\x20of\x20Allocator\x20—\x20both\x20can\x20fire\x20on\x20different\x20nodes','Reward\x20object\x20must\x20be\x20created\x20BEFORE\x20publishing\x20this\x20Machine','retained_submission\x20stores\x20claim\x20record\x20for\x20audit'],'example_use_case':'Loyalty\x20program:\x20after\x20customer\x20completes\x205\x20orders,\x20eligible\x20to\x20claim\x20reward\x20token.\x20'+'Anti-double-claim\x20Guard\x20ensures\x20one\x20claim\x20per\x20customer.','publish_checklist':['Reward\x20object\x20already\x20created\x20and\x20tested','Anti-double-claim\x20Guard\x20tested:\x20claim\x20twice\x20should\x20fail\x20on\x20second\x20attempt','retained_submission\x20verified\x20(claim_record\x20queryable)']},{'id':'tpl_machine_wonder_feedback','scene_id':'wonder_feedback','name':'Wonder\x20Feedback\x20Flow\x20(Post-Completion\x20Rating)','description':'Post-completion\x20rating\x20flow:\x20Paid\x20(entry)\x20→\x20Shipped\x20→\x20Received\x20→\x20Completed\x20→\x20{Wonder\x20|\x20NoWonder}.\x20'+'After\x20the\x20order\x20reaches\x20\x27Completed\x27\x20(terminal\x20business\x20state,\x20funds\x20already\x20allocated\x20to\x20merchant),\x20'+'the\x20OrderHolder\x20(namedOperator=\x27\x27)\x20can\x20advance\x20Progress\x20to\x20\x27wonder\x27\x20(positive\x20review)\x20or\x20\x27no_wonder\x27\x20'+'(negative\x20review).\x20A\x20bound\x20Reward\x20object\x27s\x20claim_guard\x20verifies\x20Progress.current\x20==\x20\x27wonder\x27\x20before\x20'+'paying\x20out\x20—\x20reward\x20claim\x20needs\x20NO\x20Permission.\x20Dispute\x20is\x20NEVER\x20modeled\x20here:\x20it\x20flows\x20through\x20'+'Order\x20→\x20Arbitration.dispute()\x20→\x20Arb\x20→\x20arbitration()\x20ruling\x20→\x20arb_withdraw,\x20fully\x20off-Machine.','recommended_patterns':['P-M-SEQ','P-M-COMPETING'],'recommended_topology':['P-M-LINEAR','P-M-COMPETING'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object\x20(index\x202\x20=\x20merchant,\x20index\x203\x20=\x20admin)'},{'name':'wonder_node_name','type':'string','required':!![],'default':'wonder','description':'Node\x20name\x20for\x20positive\x20feedback\x20(praise)\x20terminal','constraint':'Must\x20match\x20/^(wonder|praise|thumbs_up)$/i\x20OR\x20be\x20a\x20custom\x20name;\x20must\x20NOT\x20match\x20dispute\x20anti-pattern\x20regex'},{'name':'no_wonder_node_name','type':'string','required':!![],'default':'no_wonder','description':'Node\x20name\x20for\x20negative\x20feedback\x20(complaint)\x20terminal','constraint':'Must\x20match\x20/^(no_wonder|complain|thumbs_down)$/i\x20OR\x20be\x20a\x20custom\x20name;\x20must\x20NOT\x20match\x20dispute\x20anti-pattern\x20regex'},{'name':'reward_ref','type':'reward_ref','required':![],'description':'Reward\x20object\x20address\x20(optional).\x20If\x20bound,\x20its\x20claim_guard\x20should\x20verify\x20Progress.current\x20==\x20wonder_node_name\x20AND\x20order.holder\x20==\x20signer.\x20Use\x20wonder_praise\x20or\x20wonder_feedback\x20reward\x20template.'},{'name':'rating_time_limit_days','type':'number','required':![],'default':'30','description':'Days\x20after\x20completion\x20during\x20which\x20the\x20customer\x20can\x20rate\x20(enforced\x20by\x20Guard\x20on\x20Praise/Complain\x20forwards\x20via\x20context(Clock))','constraint':'Must\x20be\x20>\x200;\x20reasonable\x20range\x207-90'}],'example_nodes':[{'name':'Paid','description':'Entry:\x20order\x20created\x20and\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'Shipped','description':'Merchant\x20dispatched\x20goods/service'},{'name':'Received','description':'Customer\x20confirmed\x20receipt'},{'name':'Completed','description':'Terminal\x20business\x20state\x20—\x20triggers\x20merchant\x20Allocation.\x20Funds\x20settled.'},{'name':'${wonder_node_name}','description':'Positive\x20feedback\x20terminal\x20(praise).\x20OrderHolder-only.\x20Reward-eligible.'},{'name':'${no_wonder_node_name}','description':'Negative\x20feedback\x20terminal\x20(complaint).\x20OrderHolder-only.\x20Optional\x20Repository\x20write\x20for\x20analytics.'}],'example_pairs':[{'prev_node':'','next_node':'Paid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'Paid','next_node':'Shipped','threshold':0x1,'forwards':[{'name':'Ship','weight':0x1,'permission_index':0x2,'named_operator':''}]},{'prev_node':'Shipped','next_node':'Received','threshold':0x1,'forwards':[{'name':'ConfirmReceive','weight':0x1,'named_operator':''}]},{'prev_node':'Received','next_node':'Completed','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2,'named_operator':''}]},{'prev_node':'Completed','next_node':'${wonder_node_name}','threshold':0x1,'forwards':[{'name':'Praise','weight':0x1,'named_operator':'','guard':'rating_window_guard','retained_submission':'rating_record'}]},{'prev_node':'Completed','next_node':'${no_wonder_node_name}','threshold':0x1,'forwards':[{'name':'Complain','weight':0x1,'named_operator':'','guard':'rating_window_guard','retained_submission':'rating_record'}]}],'required_guards':[{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'Praise','purpose':'Verify\x20Progress.current\x20==\x20\x27Completed\x27\x20(rating\x20only\x20allowed\x20after\x20completion)\x20AND\x20context(Clock)\x20<=\x20progress.entry_time\x20+\x20rating_time_limit_days'},{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'Complain','purpose':'Verify\x20Progress.current\x20==\x20\x27Completed\x27\x20(rating\x20only\x20allowed\x20after\x20completion)\x20AND\x20context(Clock)\x20<=\x20progress.entry_time\x20+\x20rating_time_limit_days'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Merchant\x20role\x20for\x20Ship\x20+\x20Finish\x20(NOT\x20for\x20rating\x20—\x20rating\x20is\x20OrderHolder-only\x20via\x20named_operator=\x27\x27)'},{'index':0x3,'name':'admin','description':'Admin\x20override\x20(optional)'}],'required_allocators':[{'name':'MerchantAllocation','trigger_node':'Completed','description':'100%\x20to\x20merchant\x20Treasury\x20or\x20personal\x20address.\x20Fires\x20at\x20Completion\x20—\x20NOT\x20at\x20Wonder/NoWonder\x20(those\x20are\x20reputation-only\x20terminals\x20with\x20no\x20fund\x20flow).'}],'forkable_fields':['wonder_node_name','no_wonder_node_name','rating_time_limit_days','additional_rating_nodes'],'applicable_industries':['ecommerce','service','rental','subscription','education'],'relevant_risks':['R-M1-01','R-M1-02','R-M1-08','R-M1-11','R-M2-01','R-M2-05','R-M3-02','R-M3-04','R-M4-01','R-M5-03'],'creation_notes':['DISPUTE\x20INDEPENDENCE:\x20This\x20Machine\x20MUST\x20NOT\x20contain\x20\x27disputed\x27,\x20\x27refunded\x27,\x20\x27arb\x27,\x20\x27arbitration\x27\x20nodes\x20(R-M1-11\x20critical).\x20Disputes\x20are\x20filed\x20off-Machine\x20via\x20arbitration::dispute(order,\x20arbitration).','Build\x20order:\x20Permission\x20→\x20Machine\x20(unpublished)\x20→\x20Guards\x20→\x20Bind\x20guards\x20→\x20Publish\x20→\x20Bind\x20to\x20Service\x20→\x20Bind\x20Reward\x20(optional)','First\x20node\x20\x27Paid\x27\x20represents\x20post-payment\x20state\x20—\x20Service.buy()\x20completes\x20payment\x20atomically\x20before\x20Progress\x20is\x20created','No\x20separate\x20\x27Order\x27\x20or\x20\x27Pay\x27\x20nodes\x20needed\x20—\x20payment\x20is\x20handled\x20by\x20Service.buy(),\x20not\x20Machine','Wonder/NoWonder\x20forwards\x20have\x20named_operator=\x27\x27\x20(empty)\x20—\x20this\x20delegates\x20to\x20the\x20OrderHolder\x20(customer).\x20No\x20Permission\x20index\x20needed\x20for\x20rating.','Completed\x20node\x20triggers\x20MerchantAllocation\x20—\x20funds\x20are\x20settled\x20BEFORE\x20the\x20rating\x20window\x20opens.\x20Rating\x20does\x20NOT\x20affect\x20fund\x20flow.','Competing\x20Pair:\x20Praise\x20vs\x20Complain\x20(first-wins)\x20—\x20one\x20rating\x20per\x20order,\x20enforced\x20by\x20Guard\x20+\x20retained_submission\x20audit\x20trail.','Reward\x20object\x20(if\x20bound)\x20is\x20INDEPENDENT\x20of\x20Allocator:\x20Reward.claim()\x20requires\x20Guard+passport,\x20not\x20Permission.\x20Guard\x20checks\x20Progress.current\x20==\x20\x27wonder\x27\x20AND\x20order.holder\x20==\x20signer.','rating_window_guard\x20enforces\x20time\x20limit:\x20context(Clock)\x20<=\x20progress.entry_time\x20+\x20rating_time_limit_days.\x20After\x20window\x20closes,\x20no\x20rating\x20possible\x20(Completed\x20becomes\x20true\x20terminal).','Optional:\x20bind\x20a\x20Repository\x20to\x20record\x20feedback\x20node\x20for\x20analytics.\x20Repository\x20write\x20happens\x20via\x20Guard\x27s\x20data\x20extraction\x20(NOT\x20auto-passed\x20—\x20see\x2006\x20§14.4).'],'example_use_case':'Photography\x20service:\x20Paid\x20→\x20Shipped\x20(booking\x20confirmed)\x20→\x20Received\x20(session\x20delivered)\x20→\x20Completed\x20'+'(photos\x20delivered,\x20funds\x20released\x20to\x20photographer)\x20→\x20customer\x20advances\x20to\x20\x27wonder\x27\x20(loved\x20the\x20work)\x20'+'or\x20\x27no_wonder\x27\x20(didn\x27t\x20love\x20it).\x20Bound\x20Reward\x20pays\x201\x20WOW\x20to\x20customers\x20who\x20advance\x20to\x20\x27wonder\x27.\x20'+'Merchant\x27s\x20wonder/no_wonder\x20ratio\x20becomes\x20an\x20on-chain\x20reputation\x20signal.\x20Disputes\x20(if\x20any)\x20are\x20'+'filed\x20separately\x20via\x20Arbitration\x20object\x20—\x20never\x20enter\x20this\x20Machine.','publish_checklist':['All\x206\x20nodes\x20verified:\x20no\x20\x27disputed\x27/\x27refunded\x27/\x27arb\x27/\x27arbitration\x27\x20names\x20(R-M1-11\x20PASS)','Entry\x20Pair\x20exists\x20(prev_node=\x27\x27\x20targets\x20\x27Paid\x27)','Competing\x20Pair\x20tested:\x20Praise\x20vs\x20Complain\x20—\x20first-wins\x20semantics\x20verified\x20on\x20testnet','rating_window_guard\x20tested:\x20rating\x20blocked\x20after\x20time\x20limit\x20expires','MerchantAllocation\x20fires\x20ONLY\x20at\x20Completed\x20(NOT\x20at\x20Wonder/NoWonder)','Reward\x20object\x20(if\x20bound):\x20claim_guard\x20tested\x20—\x20Progress.current\x20==\x20\x27wonder\x27\x20required,\x20claim\x20fails\x20at\x20\x27no_wonder\x27\x20or\x20\x27Completed\x27','named_operator=\x27\x27\x20on\x20Praise/Complain\x20forwards\x20verified\x20(OrderHolder-only\x20operation)','machineNode2file\x20export\x20as\x20backup']},{'id':'tpl_machine_subscription','scene_id':'subscription','name':'Subscription\x20/\x20Membership\x20Flow','description':'Subscribe\x20->\x20Pay\x20->\x20Activate\x20->\x20[Renew\x20|\x20Expire]\x20->\x20Cancel/End.\x20Time-lock\x20on\x20Renew.\x20'+'Competing\x20Pair:\x20Renew\x20vs\x20Expire\x20(first-wins).\x20Repository\x20stores\x20subscription\x20status.','recommended_patterns':['P-M-SEQ','P-M-COMPETING'],'recommended_topology':['P-M-LINEAR','P-M-COMPETING'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Provider\x20Permission\x20object'},{'name':'subscription_duration_days','type':'number','required':!![],'default':'30','description':'Days\x20between\x20Renew\x20and\x20Expire\x20eligibility'},{'name':'repository_ref','type':'address','required':!![],'description':'Repository\x20object\x20storing\x20subscription\x20status\x20(note:\x20not\x20consensus_repositories,\x20which\x20is\x20declarative-only\x20—\x20see\x2006\x20§14.4)'}],'example_nodes':[{'name':'Paid','description':'Entry:\x20subscription\x20created\x20and\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'Active'},{'name':'RenewEligible'},{'name':'Renewed'},{'name':'Expired'},{'name':'Cancelled'},{'name':'Ended'}],'example_pairs':[{'prev_node':'','next_node':'Paid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'Paid','next_node':'Active','threshold':0x1,'forwards':[{'name':'Activate','weight':0x1,'permission_index':0x2,'guard':'repository_write_guard'}]},{'prev_node':'Active','next_node':'RenewEligible','threshold':0x1,'forwards':[{'name':'TimeUnlock','weight':0x1,'permission_index':0x3,'guard':'time_lock_guard_${subscription_duration_days}_days'}]},{'prev_node':'RenewEligible','next_node':'Renewed','threshold':0x1,'forwards':[{'name':'Renew','weight':0x1,'named_operator':''}]},{'prev_node':'RenewEligible','next_node':'Expired','threshold':0x1,'forwards':[{'name':'AutoExpire','weight':0x1,'permission_index':0x3,'guard':'expire_time_guard'}]},{'prev_node':'RenewEligible','next_node':'Cancelled','threshold':0x1,'forwards':[{'name':'Cancel','weight':0x1,'named_operator':''}]},{'prev_node':'Renewed','next_node':'Active','threshold':0x1,'forwards':[{'name':'Reactivate','weight':0x1,'permission_index':0x2}]},{'prev_node':'Expired','next_node':'Ended','threshold':0x1,'forwards':[{'name':'CloseExpired','weight':0x1,'permission_index':0x3}]},{'prev_node':'Cancelled','next_node':'Ended','threshold':0x1,'forwards':[{'name':'CloseCancelled','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'TimeUnlock','purpose':'Time\x20lock:\x20context(Clock)\x20>=\x20progress.entry_time\x20+\x20${subscription_duration_days}\x20days'},{'guard_template_id':'tpl_write_guard_type_check','bound_to_forward':'Activate','purpose':'Write\x20subscription\x20status\x20to\x20Repository'},{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'AutoExpire','purpose':'Hard\x20expire:\x20context(Clock)\x20>=\x20progress.entry_time\x20+\x202x\x20duration'}],'required_permissions':[{'index':0x2,'name':'provider','description':'Provider\x20activates/reactivates'},{'index':0x3,'name':'admin','description':'Time-lock\x20triggers'}],'required_allocators':[{'name':'RenewAllocation','trigger_node':'Renewed','description':'Charge\x20renewal\x20fee\x20on\x20Renew'}],'forkable_fields':['duration_days','grace_period','additional_tiers'],'applicable_industries':['subscription','saas','membership','service'],'relevant_risks':['R-M1-01','R-M1-08','R-M2-01','R-M2-05','R-M3-02','R-M3-04','R-M4-01','R-M5-04'],'creation_notes':['First\x20node\x20\x27Paid\x27\x20represents\x20post-payment\x20state\x20—\x20Service.buy()\x20completes\x20subscription\x20payment\x20atomically\x20before\x20Progress\x20is\x20created','No\x20separate\x20\x27Subscribe\x27\x20or\x20\x27Pay\x27\x20nodes\x20needed\x20—\x20subscription\x20and\x20payment\x20are\x20handled\x20by\x20Service.buy(),\x20not\x20Machine','Time-lock\x20uses\x20context(Clock)\x20—\x20verify\x20Clock\x20address\x20in\x20Guard\x20table','Competing\x20Pair:\x20Renew\x20vs\x20Expire\x20vs\x20Cancel\x20—\x20first-wins','Renewed\x20node\x20loops\x20back\x20to\x20Active\x20(recurring\x20subscription)','Repository\x20records\x20subscription\x20status\x20for\x20cross-Machine\x20verification','Renewal\x20Allocation\x20triggers\x20on\x20Renewed\x20node\x20(not\x20Active\x20—\x20avoids\x20double-charge)','Note:\x20consensus_repositories\x20is\x20declarative-only\x20(NOT\x20auto-passed\x20to\x20Progress);\x20use\x20repository_ref\x20parameter\x20for\x20actual\x20Repository\x20object\x20—\x20see\x2006\x20§14.4','VARIANT\x20—\x20Content\x20subscription\x20(Substack-style):\x20replace\x20time-lock\x20Renew/Expire\x20with\x20content-delivery\x20flow:','\x20\x206-node\x20variant:\x20Paid\x20(entry)\x20→\x20ContentPublished\x20→\x20Completed\x20(terminal-success)','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Paid\x20→\x20Cancelled\x20(terminal-cancel)\x20|\x20Paid\x20→\x20Disputed\x20→\x20Refunded\x20(terminal-dispute)','\x20\x20Permission:\x20author=index\x201000\x20(publish\x20+\x20cancel),\x20arbitrator=index\x201500\x20(resolve\x20dispute),\x20reader=namedOperator=\x27\x27\x20(open\x20role,\x20no\x20specific\x20operator)','\x20\x20Guards:\x20deliver_guard\x20(verify\x20author\x20permission\x20+\x20content\x20hash),\x20cancel_guard\x20(verify\x20subscriber\x20request),\x20refund_guard\x20(verify\x20arbitration\x20outcome)','\x20\x20Allocators:\x20deliver=100%\x20to\x20author,\x20cancel=100%\x20refund\x20to\x20subscriber,\x20dispute=100%\x20refund\x20to\x20subscriber\x20(Guard-first-wins\x20pattern)','\x20\x20First-Forward-wins:\x20when\x20Paid\x20has\x20competing\x20forwards\x20(Deliver|Cancel|Dispute),\x20the\x20first\x20triggered\x20forward\x20wins;\x20subscribers\x20cannot\x20double-claim','CRITICAL\x20—\x20v1→v2\x20lesson:\x20arbitrations\x20MUST\x20be\x20added\x20BEFORE\x20Service.publish\x20(post-publish,\x20arbitrations\x20become\x20immutable\x20and\x20cannot\x20be\x20added\x20—\x20service.move\x20F-S-21)','\x20\x20If\x20you\x20accidentally\x20published\x20without\x20arbitrations,\x20you\x20MUST\x20create\x20a\x20new\x20Service\x20v2\x20with\x20arbitrations\x20bound\x20before\x20publishing\x20(the\x20v1\x20Service\x20must\x20be\x20paused/abandoned)','\x20\x20ConfirmGate\x20(C-S-19,\x20QS11)\x20will\x20warn\x20before\x20publish\x20without\x20arbitrations\x20—\x20do\x20not\x20bypass\x20this\x20warning\x20unless\x20explicitly\x20intending\x20no-arbitration\x20operation','Build\x20order\x20(content\x20variant):\x20Permission\x20→\x20Machine\x20(unpublished,\x20with\x20initial\x20forward)\x20→\x203\x20Guards\x20→\x203\x20Allocators\x20(template\x20on\x20Service)\x20→\x20Service\x20(unpublished,\x20bind\x20machine+buy_guard+order_allocators+arbitrations)\x20→\x20Publish\x20Service\x20→\x20Test\x20order\x20(3\x20paths:\x20normal/cancel/dispute)'],'example_use_case':'Monthly\x20SaaS\x20subscription:\x20$10/month.\x20Customer\x20can\x20renew\x20anytime\x20after\x20day\x2025.\x20'+'Auto-expire\x20on\x20day\x2035\x20if\x20not\x20renewed.\x20Cancel\x20anytime.\x0a\x0a'+'VARIANT\x20—\x20Content\x20subscription\x20(Substack-style):\x20$5/month\x20newsletter.\x20Author\x20publishes\x20content\x20→\x20'+'subscriber\x20reads.\x20Subscriber\x20can\x20cancel\x20anytime\x20for\x20full\x20refund.\x20Disputes\x20resolved\x20by\x20arbitrator\x20'+'(100%\x20refund\x20to\x20subscriber\x20if\x20dispute\x20upheld).\x206-node\x20Machine,\x203\x20Guards,\x203\x20Allocators.\x20'+'Tested\x20on\x20testnet\x20with\x203\x20order\x20paths:\x20normal\x20delivery,\x20cancel,\x20dispute.','publish_checklist':['Time-lock\x20Guards\x20tested\x20on\x20testnet\x20(both\x20TimeUnlock\x20+\x20AutoExpire)','Competing\x20Pair\x20semantics\x20verified\x20(Renew\x20vs\x20Expire\x20vs\x20Cancel)','Repository\x20write\x20tested\x20(subscription\x20status\x20queryable)','Renewal\x20loop\x20tested:\x20Paid\x20->\x20Active\x20->\x20RenewEligible\x20->\x20Renewed\x20->\x20Active','Content\x20variant:\x20initial\x20node\x20(prev_node=\x27\x27)\x20MUST\x20have\x20at\x20least\x20one\x20forward\x20(FIX-002)\x20—\x20empty\x20forwards=[]\x20causes\x20Progress\x20to\x20be\x20permanently\x20stuck','Content\x20variant:\x20arbitrations\x20added\x20BEFORE\x20publish\x20(cannot\x20add\x20post-publish\x20per\x20F-S-21)','Content\x20variant:\x203\x20order\x20paths\x20tested\x20on\x20testnet\x20—\x20normal\x20delivery,\x20cancel-within-grace,\x20dispute-resolution','Content\x20variant:\x20machineNode2file\x20export\x20as\x20backup\x20(covers\x20all\x206\x20nodes)']}];export const MACHINE_TEMPLATES_VERSION='1.0.0';export const MACHINE_TEMPLATES_COUNT=MACHINE_TEMPLATES['length'];export function getAllTemplates(){return MACHINE_TEMPLATES;}export function getTemplateById(a){return MACHINE_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScene(a){return MACHINE_TEMPLATES['filter'](b=>b['scene_id']===a);}export function getTemplatesByIndustry(a){return MACHINE_TEMPLATES['filter'](b=>b['applicable_industries']['includes'](a));}export function getTemplatesByPattern(a){return MACHINE_TEMPLATES['filter'](b=>b['recommended_patterns']['includes'](a));}export function suggestTemplateForIntent(a){const b=inferSceneFromFlow(a);if(!b)return undefined;const c=getTemplatesByScene(b['id']);return c[0x0];}export function getTemplateParameters(a){const b=getTemplateById(a);return b?b['parameters']:[];}export function getRequiredParameters(a){return getTemplateParameters(a)['filter'](b=>b['required']);}export function getOptionalParameters(a){return getTemplateParameters(a)['filter'](b=>!b['required']);}function validateParamType(a,b){switch(b){case'address':case'string':case'permission_ref':case'guard_ref':case'machine_ref':case'service_ref':case'arbitration_ref':case'reward_ref':return typeof a==='string';case'number':return typeof a==='number'||typeof a==='string'&&/^\d+$/['test'](a);case'boolean':return typeof a==='boolean';case'vec_address':case'vec_string':case'node_name_list':return Array['isArray'](a)&&a['every'](c=>typeof c==='string');default:return![];}}function deepSubstitute(a,b){if(typeof a==='string')return a['replace'](/\$\{(\w+)\}/g,(c,d)=>d in b?String(b[d]):'${'+d+'}');if(Array['isArray'](a))return a['map'](c=>deepSubstitute(c,b));if(a&&typeof a==='object'){const c={};for(const [d,e]of Object['entries'](a)){c[d]=deepSubstitute(e,b);}return c;}return a;}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'success':![],'validation_errors':['Template\x20not\x20found:\x20'+a]};const d=c['parameters']['filter'](h=>h['required']&&!(h['name']in b))['map'](h=>h['name']);if(d['length']>0x0)return{'success':![],'missing_params':d,'validation_errors':['Missing\x20required\x20parameters:\x20'+d['join'](',\x20')]};const e=[];for(const h of c['parameters']){if(h['name']in b){const i=b[h['name']];!validateParamType(i,h['type'])&&e['push']('Parameter\x20\x22'+h['name']+'\x22\x20type\x20mismatch:\x20expected\x20'+h['type']+',\x20got\x20'+typeof i);}}if(e['length']>0x0)return{'success':![],'validation_errors':e};const f=deepSubstitute(c['example_nodes'],b),g=deepSubstitute(c['example_pairs'],b);return{'success':!![],'filled_nodes':f,'filled_pairs':g};}export function forkTemplate(a){const b=getTemplateById(a);if(!b)return undefined;const c={};for(const d of b['forkable_fields']){c[d]='see\x20example_nodes/example_pairs';}return{'template_id':a,'forkable_fields':b['forkable_fields'],'current_values':c,'instructions':['Modify\x20fields\x20below\x20to\x20customize\x20the\x20workflow','Keep\x20template\x20structure\x20intact\x20unless\x20explicitly\x20noted','Run\x20risk\x20assessment\x20after\x20modification\x20(machine-risk.ts)','User\x20MUST\x20confirm\x20final\x20JSON\x20before\x20publish\x20(ConfirmGate)']};}export const DECISION_TREE={'Q1':{'question':'Does\x20the\x20workflow\x20involve\x20multiple\x20independent\x20services/parties?','no_next':'Q3'},'Q2':{'question':'Are\x20these\x20services\x20already\x20published\x20as\x20separate\x20Machines?','yes_template':'tpl_machine_cross_machine','no_next':'DECOMPOSE'},'Q3':{'question':'Does\x20any\x20node\x20require\x20multiple\x20parties\x27\x20confirmation\x20to\x20advance?','no_next':'Q5'},'Q4':{'question':'Do\x20all\x20parties\x20have\x20EQUAL\x20weight?','yes_template':'tpl_machine_dual_signature','no_next':'tpl_machine_weighted_voting'},'Q5':{'question':'Does\x20the\x20workflow\x20need\x20exception\x20branches\x20(lost,\x20return,\x20dispute)?','yes_template':'tpl_machine_ecommerce_exceptions','no_next':'Q6'},'Q6':{'question':'Does\x20it\x20involve\x20recurring\x20payments\x20or\x20time-based\x20state\x20changes?','yes_template':'tpl_machine_subscription','no_next':'Q7'},'Q7':{'question':'Does\x20it\x20need\x20privacy-preserving\x20data\x20delivery\x20(Messenger)?','yes_template':'tpl_machine_privacy_delivery','no_next':'Q8'},'Q8':{'question':'Does\x20it\x20involve\x20deposit/refund\x20separation?','yes_template':'tpl_machine_rental','no_next':'Q9'},'Q9':{'question':'Does\x20it\x20need\x20reward/incentive\x20distribution\x20at\x20a\x20specific\x20node?','yes_template':'tpl_machine_reward','no_next':'tpl_machine_ecommerce_standard'}};export function walkDecisionTree(a){let b='Q1';while(b){const c=DECISION_TREE[b];if(!c)return'UNKNOWN';const d=a[b];if(d===undefined)return b;if(d){if(c['yes_template'])return c['yes_template'];if(b==='Q1'){b='Q2';continue;}if(b==='Q3'){b='Q4';continue;}return'UNKNOWN';}else{if(c['no_next']){if(c['no_next']==='DECOMPOSE')return'DECOMPOSE_INTO_MULTIPLE_MACHINES';if(c['no_next']['startsWith']('tpl_'))return c['no_next'];b=c['no_next'];continue;}return'UNKNOWN';}}return'UNKNOWN';}export function verifyTemplateSceneReferences(){const a=[];for(const b of MACHINE_TEMPLATES){!findScene(b['scene_id'])&&a['push']({'template_id':b['id'],'invalid_scene_id':b['scene_id']});}return a;}export function getReferencedGuardTemplateIds(){const a=new Set();for(const b of MACHINE_TEMPLATES){for(const c of b['required_guards']){a['add'](c['guard_template_id']);}}return a;}export function getReferencedRiskIds(){const a=new Set();for(const b of MACHINE_TEMPLATES){for(const c of b['relevant_risks']){a['add'](c);}}return a;}export function listTemplates(){return MACHINE_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'scene_id':a['scene_id'],'patterns':a['recommended_patterns'],'industries':a['applicable_industries']}));}
|
|
1
|
+
import{findScene,inferSceneFromFlow}from'./machine-ledger.js';export const MACHINE_TEMPLATES=[{'id':'tpl_machine_ecommerce_standard','scene_id':'ecommerce_standard','name':'Standard\x20E-commerce\x20Flow','description':'Linear\x20e-commerce\x20workflow:\x20Paid\x20(entry)\x20->\x20Ship\x20->\x20Receive\x20->\x20Complete.\x20'+'Payment\x20is\x20handled\x20by\x20Service.buy()\x20atomically;\x20Machine\x20starts\x20at\x20post-payment\x20state.\x20'+'Funds\x20auto-allocated\x20to\x20merchant\x20at\x20Complete\x20node.\x20Recommended\x20baseline\x20for\x20new\x20merchants.','recommended_patterns':['P-M-SEQ'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object\x20address\x20or\x20name\x20(must\x20have\x20custom\x20indices\x20defined)','constraint':'Permission\x20must\x20already\x20be\x20created;\x20index\x202\x20(merchant)\x20and\x20index\x203\x20(admin)\x20recommended'},{'name':'ship_forward_name','type':'string','required':!![],'default':'Ship','description':'Forward\x20name\x20for\x20shipping\x20step','constraint':'Must\x20be\x20<64\x20BCS\x20bytes;\x20only\x20letters/digits/underscore'},{'name':'receive_forward_name','type':'string','required':!![],'default':'Receive','description':'Forward\x20name\x20for\x20customer\x20receipt\x20confirmation'},{'name':'complete_node_name','type':'string','required':!![],'default':'Complete','description':'Terminal\x20node\x20name\x20triggering\x20fund\x20allocation'}],'example_nodes':[{'name':'Paid','description':'Entry:\x20order\x20created\x20and\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'Shipped','description':'Goods\x20dispatched'},{'name':'Received','description':'Customer\x20confirmed\x20receipt'},{'name':'${complete_node_name}','description':'Terminal:\x20triggers\x20allocation'}],'example_pairs':[{'prev_node':'','next_node':'Paid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':'','permission_index':0x0}]},{'prev_node':'Paid','next_node':'Shipped','threshold':0x1,'forwards':[{'name':'${ship_forward_name}','weight':0x1,'permission_index':0x2,'named_operator':''}]},{'prev_node':'Shipped','next_node':'Received','threshold':0x1,'forwards':[{'name':'${receive_forward_name}','weight':0x1,'named_operator':'','permission_index':0x0}]},{'prev_node':'Received','next_node':'${complete_node_name}','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2,'named_operator':''}]}],'required_guards':[],'required_permissions':[{'index':0x2,'name':'merchant','description':'Merchant\x20role\x20for\x20Ship\x20+\x20Finish'},{'index':0x3,'name':'admin','description':'Admin\x20override\x20(optional)'}],'required_allocators':[{'name':'MerchantAllocation','trigger_node':'${complete_node_name}','description':'100%\x20to\x20merchant\x20Treasury\x20or\x20personal\x20address'}],'forkable_fields':['node_names','forward_names','thresholds','additional_branches'],'applicable_industries':['ecommerce','retail'],'relevant_risks':['R-M1-01','R-M1-02','R-M1-08','R-M2-01','R-M3-02','R-M4-01'],'creation_notes':['Build\x20order:\x20Permission\x20->\x20Machine\x20(unpublished)\x20->\x20Guards\x20->\x20Bind\x20guards\x20->\x20Publish\x20->\x20Bind\x20to\x20Service','First\x20node\x20\x27Paid\x27\x20represents\x20post-payment\x20state\x20—\x20Service.buy()\x20completes\x20payment\x20atomically\x20before\x20Progress\x20is\x20created','No\x20separate\x20\x27Order\x27\x20or\x20\x27Pay\x27\x20nodes\x20needed\x20—\x20payment\x20is\x20handled\x20by\x20Service.buy(),\x20not\x20Machine','Entry\x20point:\x20prev_node=\x27\x27\x20(empty\x20string)\x20targets\x20\x27Paid\x27\x20—\x20at\x20least\x20one\x20Pair\x20must\x20exist\x20with\x20empty\x20prev_node','If\x20using\x20P16\x20circular\x20reference\x20for\x20Service,\x20use\x20name\x20not\x20address\x20(Service\x20not\x20yet\x20published)'],'example_use_case':'Small\x20e-commerce\x20shop\x20selling\x20camera\x20accessories.\x20Linear\x20flow\x20with\x20no\x20exceptions.\x20'+'Funds\x20allocated\x20to\x20merchant\x20personal\x20address\x20on\x20Complete.','publish_checklist':['All\x204\x20nodes\x20have\x20at\x20least\x20one\x20outgoing\x20Forward\x20(except\x20terminal)','Entry\x20Pair\x20exists\x20(prev_node=\x27\x27\x20targets\x20\x27Paid\x27)','permissionIndex\x20values\x20match\x20Permission\x20object\x20indices','Test\x20Progress\x20run\x20on\x20testnet','machineNode2file\x20export\x20as\x20backup']},{'id':'tpl_machine_ecommerce_exceptions','scene_id':'ecommerce_with_exceptions','name':'E-commerce\x20Flow\x20with\x20Exception\x20Branches','description':'Multi-path\x20workflow:\x20Paid\x20(entry)\x20->\x20Ship\x20->\x20Receive/Lost/Return.\x20Lost\x20uses\x20dual-sig\x20(threshold=2).\x20'+'Payment\x20is\x20handled\x20by\x20Service.buy()\x20atomically;\x20Machine\x20starts\x20at\x20post-payment\x20state.\x20'+'Return\x20path\x20opens\x20Refund\x20->\x20Complete.\x20Competing\x20pairs\x20first-wins.','recommended_patterns':['P-M-SEQ','P-M-COMPETING'],'recommended_topology':['P-M-LINEAR','P-M-COMPETING'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object'},{'name':'lost_threshold','type':'number','required':!![],'default':'2','description':'Threshold\x20for\x20dual-sig\x20on\x20Lost\x20node','constraint':'Must\x20be\x202\x20(customer\x20+\x20merchant)'},{'name':'arbitration_ref','type':'arbitration_ref','required':![],'description':'Arbitration\x20object\x20if\x20Lost\x20escalates\x20to\x20arbitration'},{'name':'time_guard_days','type':'number','required':!![],'default':'10','description':'Days\x20before\x20auto-complete\x20trigger\x20(time\x20guard)','constraint':'Must\x20be\x20>\x200;\x20reasonable\x20range\x207-30'},{'name':'return_node_name','type':'string','required':!![],'default':'Return','description':'Name\x20of\x20the\x20return/refund\x20node\x20in\x20the\x20exception\x20branch'}],'example_nodes':[{'name':'Paid','description':'Entry:\x20order\x20created\x20and\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'Shipped'},{'name':'Received'},{'name':'Lost'},{'name':'Return'},{'name':'Refund'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'Paid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'Paid','next_node':'Shipped','threshold':0x1,'forwards':[{'name':'Ship','weight':0x1,'permission_index':0x2}]},{'prev_node':'Shipped','next_node':'Received','threshold':0x1,'forwards':[{'name':'ConfirmReceive','weight':0x1,'named_operator':''}]},{'prev_node':'Shipped','next_node':'Lost','threshold':'${lost_threshold}','forwards':[{'name':'CustomerReport','weight':0x1,'named_operator':''},{'name':'MerchantConfirm','weight':0x1,'permission_index':0x2}]},{'prev_node':'Shipped','next_node':'Return','threshold':0x1,'forwards':[{'name':'RequestReturn','weight':0x1,'named_operator':''}]},{'prev_node':'Received','next_node':'Complete','threshold':0x1,'forwards':[{'name':'TimeGuard','weight':0x1,'permission_index':0x3,'guard':'time_guard_${time_guard_days}_days'},{'name':'MerchantFinish','weight':0x1,'permission_index':0x2}]},{'prev_node':'Return','next_node':'Refund','threshold':0x1,'forwards':[{'name':'IssueRefund','weight':0x1,'permission_index':0x2}]},{'prev_node':'Refund','next_node':'Complete','threshold':0x1,'forwards':[{'name':'CloseReturn','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'MerchantConfirm','purpose':'Dual-sig\x20on\x20Lost\x20node'},{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'TimeGuard','purpose':'Time\x20lock\x20${time_guard_days}\x20days'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Merchant\x20role'},{'index':0x3,'name':'admin','description':'Admin\x20/\x20time-guard\x20trigger'}],'required_allocators':[{'name':'CompleteAllocation','trigger_node':'Complete','description':'Full\x20allocation\x20to\x20merchant\x20on\x20normal\x20completion'},{'name':'RefundAllocation','trigger_node':'Refund','description':'Full\x20refund\x20to\x20customer\x20on\x20return'},{'name':'LostAllocation','trigger_node':'Lost','description':'Optional:\x20partial\x20refund\x20or\x20escrow\x20(depends\x20on\x20policy)'}],'forkable_fields':['node_names','branch_conditions','time_guard_days','lost_threshold'],'applicable_industries':['ecommerce','logistics'],'relevant_risks':['R-M1-01','R-M1-03','R-M1-08','R-M2-01','R-M2-05','R-M3-02','R-M3-04','R-M3-05','R-M4-01','R-M5-03'],'creation_notes':['First\x20node\x20\x27Paid\x27\x20represents\x20post-payment\x20state\x20—\x20Service.buy()\x20completes\x20payment\x20atomically\x20before\x20Progress\x20is\x20created','No\x20separate\x20\x27Order\x27\x20or\x20\x27Pay\x27\x20nodes\x20needed\x20—\x20payment\x20is\x20handled\x20by\x20Service.buy(),\x20not\x20Machine','Competing\x20Pairs\x20(Shipped\x20->\x20Received/Lost/Return)\x20are\x20mutually\x20exclusive\x20—\x20first\x20threshold\x20met\x20wins','Lost\x20node\x20threshold=2\x20means\x20BOTH\x20customer\x20and\x20merchant\x20Forwards\x20must\x20execute','TimeGuard\x20must\x20use\x20context(Clock)\x20>=\x20progress.entry_time\x20+\x20duration','If\x20Lost\x20escalates\x20to\x20arbitration,\x20bind\x20arbitration_usage_guard\x20on\x20Lost\x20forward','Refund\x20Allocation\x20must\x20use\x20sharing.who=OrderHolder\x20(refund\x20to\x20customer,\x20NOT\x20merchant)'],'example_use_case':'Mid-size\x20e-commerce\x20with\x207-day\x20return\x20policy\x20and\x20dispute\x20handling.\x20'+'Lost\x20claims\x20require\x20customer+merchant\x20dual\x20confirmation.','publish_checklist':['All\x20competing\x20Pairs\x20tested:\x20verify\x20first-wins\x20semantics\x20on\x20testnet','Lost\x20dual-sig\x20tested:\x20incomplete\x20signatures\x20do\x20not\x20advance','TimeGuard\x20Clock\x20query\x20verified\x20(testnet)','All\x20three\x20Allocators\x20tested\x20with\x20correct\x20sharing.who','Arbitration\x20binding\x20(if\x20any)\x20verified\x20via\x20gen_passport']},{'id':'tpl_machine_rental','scene_id':'rental_standard','name':'Equipment\x20Rental\x20Flow','description':'Rental\x20flow:\x20DepositPaid\x20(entry)\x20->\x20Pickup\x20->\x20In\x20Use\x20->\x20Return\x20->\x20Refund\x20Deposit.\x20'+'Payment\x20is\x20handled\x20by\x20Service.buy()\x20atomically;\x20Machine\x20starts\x20at\x20post-deposit\x20state.\x20'+'Separates\x20deposit\x20from\x20rental\x20fee\x20(two\x20Allocators).\x20Damage\x20report\x20via\x20retained_submission.','recommended_patterns':['P-M-SEQ'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object'},{'name':'deposit_amount','type':'number','required':!![],'description':'Deposit\x20amount\x20in\x20smallest\x20WOW\x20unit','constraint':'Must\x20equal\x20order.amount\x20field;\x20verify\x20via\x20Guard\x20query'},{'name':'damage_inspection_node','type':'string','required':!![],'default':'DamageCheck','description':'Name\x20of\x20the\x20node\x20where\x20damage\x20inspection\x20occurs'},{'name':'return_node_name','type':'string','required':!![],'default':'Return','description':'Name\x20of\x20the\x20return\x20node\x20after\x20damage\x20check\x20fails'}],'example_nodes':[{'name':'DepositPaid','description':'Entry:\x20deposit\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'PickedUp'},{'name':'InUse'},{'name':'Return'},{'name':'DamageCheck'},{'name':'DepositRefund'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'DepositPaid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'DepositPaid','next_node':'PickedUp','threshold':0x1,'forwards':[{'name':'Pickup','weight':0x1,'named_operator':'','permission_index':0x2}]},{'prev_node':'PickedUp','next_node':'InUse','threshold':0x1,'forwards':[{'name':'StartUse','weight':0x1,'named_operator':''}]},{'prev_node':'InUse','next_node':'Return','threshold':0x1,'forwards':[{'name':'ReturnItem','weight':0x1,'named_operator':''}]},{'prev_node':'Return','next_node':'DamageCheck','threshold':0x1,'forwards':[{'name':'Inspect','weight':0x1,'permission_index':0x2,'retained_submission':'damage_report'}]},{'prev_node':'Return','next_node':'Complete','threshold':0x1,'forwards':[{'name':'CleanReturn','weight':0x1,'permission_index':0x2}]},{'prev_node':'DamageCheck','next_node':'DepositRefund','threshold':0x1,'forwards':[{'name':'DeductDamage','weight':0x1,'permission_index':0x2}]},{'prev_node':'DepositRefund','next_node':'Complete','threshold':0x1,'forwards':[{'name':'Close','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_privacy_delivery_proof','bound_to_forward':'Inspect','purpose':'Optional:\x20damage\x20evidence\x20proof\x20(photo,\x20video)'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Rental\x20provider'}],'required_allocators':[{'name':'RentalFeeAllocation','trigger_node':'Complete','description':'Rental\x20fee\x20to\x20merchant'},{'name':'DepositRefundAllocation','trigger_node':'DepositRefund','description':'Remaining\x20deposit\x20to\x20customer\x20(OrderHolder\x20sharing.who)'},{'name':'DamageDeductionAllocation','trigger_node':'DamageCheck','description':'Damage\x20deduction\x20to\x20merchant'}],'forkable_fields':['deposit_amount','damage_node_logic','additional_inspection_steps'],'applicable_industries':['rental','equipment','vehicle'],'relevant_risks':['R-M1-01','R-M1-08','R-M2-01','R-M2-04','R-M3-02','R-M4-01','R-M5-02'],'creation_notes':['First\x20node\x20\x27DepositPaid\x27\x20represents\x20post-payment\x20state\x20—\x20Service.buy()\x20completes\x20deposit\x20payment\x20atomically\x20before\x20Progress\x20is\x20created','No\x20separate\x20\x27Reserve\x27\x20or\x20\x27PayDeposit\x27\x20nodes\x20needed\x20—\x20reservation\x20and\x20payment\x20are\x20handled\x20by\x20Service.buy(),\x20not\x20Machine','Damage\x20report\x20uses\x20retained_submission\x20—\x20values\x20stored\x20uniquely\x20by\x20(current_node,\x20next_node,\x20forward_name)','Two\x20competing\x20Pairs\x20at\x20Return\x20node:\x20DamageCheck\x20vs\x20Complete\x20(clean\x20return)','DamageDeduction\x20Allocation\x20uses\x20sharing.who=Entity\x20(merchant),\x20not\x20OrderHolder'],'example_use_case':'Camera\x20equipment\x20rental:\x20customer\x20pays\x201000\x20WOW\x20deposit,\x20returns\x20equipment,\x20'+'merchant\x20inspects.\x20If\x20damaged,\x20200\x20WOW\x20deducted;\x20otherwise\x20full\x20refund.','publish_checklist':['Deposit\x20Guard\x20tested\x20(testnet)\x20with\x20valid/invalid\x20amounts','Damage\x20report\x20retained_submission\x20stored\x20correctly\x20(query\x20progress_history)','Both\x20Return\x20branches\x20tested\x20(DamageCheck\x20+\x20CleanReturn)','All\x20three\x20Allocators\x20verified\x20with\x20correct\x20sharing.who']},{'id':'tpl_machine_dual_signature','scene_id':'dual_signature','name':'Dual-Signature\x20Consensus\x20Flow','description':'Critical\x20node\x20requires\x20both\x20customer\x20+\x20merchant\x20confirmation.\x20threshold=2\x20with\x20two\x20Forwards\x20(weight=1\x20each).\x20'+'Customer\x20uses\x20namedOperator=\x27\x27\x20(OrderHolder);\x20merchant\x20uses\x20permissionIndex=2.','recommended_patterns':['P-M-AND'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object'},{'name':'critical_node_name','type':'string','required':!![],'default':'Approve','description':'Node\x20requiring\x20dual-sig'},{'name':'next_node_after_approval','type':'string','required':!![],'default':'Execute','description':'Name\x20of\x20the\x20node\x20that\x20follows\x20after\x20dual-signature\x20approval'}],'example_nodes':[{'name':'Initiated'},{'name':'${critical_node_name}','description':'Dual-sig\x20required\x20here'},{'name':'${next_node_after_approval}'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'Initiated','threshold':0x1,'forwards':[{'name':'Initiate','weight':0x1,'named_operator':''}]},{'prev_node':'Initiated','next_node':'${critical_node_name}','threshold':0x1,'forwards':[{'name':'Submit','weight':0x1,'named_operator':''}]},{'prev_node':'${critical_node_name}','next_node':'${next_node_after_approval}','threshold':0x2,'forwards':[{'name':'CustomerApprove','weight':0x1,'named_operator':'','guard':'customer_identity_guard'},{'name':'MerchantApprove','weight':0x1,'permission_index':0x2,'guard':'merchant_identity_guard'}]},{'prev_node':'${next_node_after_approval}','next_node':'Complete','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'CustomerApprove','purpose':'Verify\x20customer\x20identity\x20(order.owner)'},{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'MerchantApprove','purpose':'Verify\x20merchant\x20identity\x20(permission\x20holder)'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Merchant\x20approval'}],'required_allocators':[{'name':'CompleteAllocation','trigger_node':'Complete','description':'Allocation\x20on\x20dual-sig\x20completion'}],'forkable_fields':['critical_node_name','additional_approvers','guard_logic'],'applicable_industries':['ecommerce','service','logistics','escrow'],'relevant_risks':['R-M1-08','R-M2-01','R-M3-02','R-M3-04'],'creation_notes':['threshold=2\x20means\x20BOTH\x20Forwards\x20must\x20execute\x20to\x20advance\x20(AND\x20semantics)','Customer\x20Forward\x20uses\x20namedOperator=\x27\x27\x20(OrderHolder)','Merchant\x20Forward\x20uses\x20permissionIndex=2','If\x20either\x20party\x20fails\x20to\x20sign,\x20workflow\x20stalls\x20—\x20consider\x20adding\x20timeout\x20Guard'],'example_use_case':'High-value\x20order\x20(e.g.\x20real\x20estate\x20transaction)\x20requiring\x20both\x20buyer\x20and\x20seller\x20confirmation.','publish_checklist':['Both\x20Forward\x20identities\x20tested\x20on\x20testnet','Verify\x20partial\x20signature\x20does\x20NOT\x20advance\x20(threshold=2)','Guards\x20correctly\x20distinguish\x20customer\x20vs\x20merchant\x20identity']},{'id':'tpl_machine_weighted_voting','scene_id':'weighted_voting','name':'Weighted\x20Voting\x20Flow','description':'Multi-party\x20voting\x20with\x20unequal\x20weights.\x20threshold=100,\x20chief\x20weight=60,\x20members\x20weight=40\x20total.\x20'+'Each\x20member\x27s\x20weight\x20extracted\x20via\x20Guard\x20query\x20from\x20Arbitration\x20object.','recommended_patterns':['P-M-VOTE'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'arbitration_ref','type':'arbitration_ref','required':!![],'description':'Arbitration\x20object\x20storing\x20voter\x20weights'},{'name':'threshold_total','type':'number','required':!![],'default':'100','description':'Total\x20weight\x20threshold\x20for\x20decision'},{'name':'chief_weight','type':'number','required':!![],'default':'60','description':'Weight\x20assigned\x20to\x20the\x20chief\x20voter\x20(out\x20of\x20100)'},{'name':'member_count','type':'number','required':!![],'default':'5','description':'Number\x20of\x20voting\x20members\x20(excluding\x20chief)'}],'example_nodes':[{'name':'VoteOpened'},{'name':'Voting'},{'name':'Approved'},{'name':'Rejected'}],'example_pairs':[{'prev_node':'','next_node':'VoteOpened','threshold':0x1,'forwards':[{'name':'OpenVote','weight':0x1,'permission_index':0x3}]},{'prev_node':'VoteOpened','next_node':'Voting','threshold':0x1,'forwards':[{'name':'StartVoting','weight':0x1,'permission_index':0x3}]},{'prev_node':'Voting','next_node':'Approved','threshold':'${threshold_total}','forwards':[{'name':'ChiefVote','weight':'${chief_weight}','permission_index':0x2,'guard':'arb_voting_guard','retained_submission':'chief_vote_record'},{'name':'MemberVote','weight':0x8,'named_operator':'member','guard':'arb_voting_guard','retained_submission':'member_vote_record'}]},{'prev_node':'Voting','next_node':'Rejected','threshold':0x1,'forwards':[{'name':'TimeoutReject','weight':0x1,'permission_index':0x3,'guard':'voting_timeout_guard'}]}],'required_guards':[{'guard_template_id':'tpl_voting_guard_numeric_weight','bound_to_forward':'ChiefVote','purpose':'Verify\x20voting\x20eligibility\x20+\x20extract\x20weight\x20from\x20Arbitration'},{'guard_template_id':'tpl_voting_guard_numeric_weight','bound_to_forward':'MemberVote','purpose':'Verify\x20voting\x20eligibility\x20+\x20prevent\x20double-vote'}],'required_permissions':[{'index':0x2,'name':'chief','description':'Chief\x20voter\x20(high\x20weight)'},{'index':0x3,'name':'admin','description':'Vote\x20opener\x20/\x20timeout\x20trigger'}],'required_allocators':[{'name':'ApprovedAllocation','trigger_node':'Approved','description':'Allocation\x20on\x20approval'}],'forkable_fields':['weights','voter_count','timeout_days'],'applicable_industries':['governance','arbitration','dao'],'relevant_risks':['R-M1-08','R-M2-05','R-M3-04','R-M5-04','R-X1-14'],'creation_notes':['Member\x20weight\x20must\x20be\x20extracted\x20dynamically\x20via\x20Guard\x20query\x20(not\x20hardcoded\x20in\x20Forward)','Guard\x20MUST\x20check\x20arb.voted\x20has\x20[Signer]\x20to\x20prevent\x20double-voting\x20(R-X1-14\x20CRITICAL)','Competing\x20Pair:\x20Approved\x20vs\x20Rejected\x20(timeout)\x20—\x20first-wins','Voting\x20weight\x20is\x20query-derived;\x20Forward\x20weight\x20field\x20is\x20just\x20session\x20counter'],'example_use_case':'Arbitration\x20panel:\x201\x20chief\x20(weight\x2060)\x20+\x205\x20members\x20(weight\x208\x20each\x20=\x2040).\x20'+'Need\x20total\x20>=\x20100\x20to\x20approve.\x20Reject\x20after\x2072h\x20timeout.','publish_checklist':['Arbitration\x20object\x20created\x20and\x20tested','Double-vote\x20prevention\x20verified\x20(try\x20voting\x20twice\x20—\x20should\x20fail)','Weight\x20extraction\x20tested\x20with\x20different\x20voter\x20configurations','Timeout\x20Guard\x20(Clock)\x20verified\x20on\x20testnet']},{'id':'tpl_machine_cross_machine','scene_id':'cross_machine_supply_chain','name':'Cross-Machine\x20Supply\x20Chain','description':'Decomposed\x20supply\x20chain\x20across\x20multiple\x20Machines.\x20Machine\x20B\x27s\x20Forward\x20Guard\x20queries\x20Machine\x20A\x27s\x20Progress\x20'+'via\x20convert_witness=100\x20to\x20verify\x20upstream\x20completion\x20before\x20advancing.','recommended_patterns':['P-M-CROSS-MACHINE'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'machine_a_id','type':'machine_ref','required':!![],'description':'Upstream\x20Machine\x20(must\x20already\x20be\x20published)','constraint':'Machine\x20A\x20must\x20be\x20published\x20BEFORE\x20Machine\x20B\x27s\x20Guard\x20can\x20reference\x20its\x20Progress\x20'+'(Progress\x20creation\x20verifies\x20the\x20bound\x20Machine\x20is\x20published\x20—\x20see\x2006\x20§14.6)'},{'name':'machine_a_complete_node','type':'string','required':!![],'default':'Complete','description':'Target\x20node\x20name\x20in\x20Machine\x20A\x20to\x20verify'},{'name':'machine_b_permission','type':'permission_ref','required':!![],'description':'Machine\x20B\x27s\x20Permission\x20object'}],'example_nodes':[{'name':'UpstreamVerified'},{'name':'Production'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'UpstreamVerified','threshold':0x1,'forwards':[{'name':'VerifyUpstream','weight':0x1,'permission_index':0x2,'guard':'upstream_progress_guard','retained_submission':'upstream_progress_id'}]},{'prev_node':'UpstreamVerified','next_node':'Production','threshold':0x1,'forwards':[{'name':'StartProduction','weight':0x1,'permission_index':0x2}]},{'prev_node':'Production','next_node':'Complete','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'VerifyUpstream','purpose':'Query\x20Machine\x20A\x27s\x20Progress:\x20verify\x20it\x20reached\x20${machine_a_complete_node}'}],'required_permissions':[{'index':0x2,'name':'manufacturer','description':'Machine\x20B\x20operator'}],'required_allocators':[{'name':'CompleteAllocation','trigger_node':'Complete','description':'Allocation\x20to\x20Machine\x20B\x27s\x20merchant'}],'forkable_fields':['upstream_machine_ref','verification_node_name'],'applicable_industries':['manufacturing','logistics','retail','supply_chain'],'relevant_risks':['R-M1-01','R-M1-08','R-M2-01','R-M2-04','R-M3-04','R-M5-04','R-M5-05','R-M5-06'],'creation_notes':['Machine\x20A\x20MUST\x20be\x20published\x20before\x20Machine\x20B\x20(dependency\x20order)','Guard\x20uses\x20convert_witness=100\x20to\x20convert\x20submitted\x20Order/Progress\x20ID\x20into\x20queryable\x20Progress\x20object','Cross-Machine\x20dependency\x20is\x20one-way\x20(no\x20cycles)','retained_submission\x20stores\x20upstream\x20Progress\x20ID\x20for\x20later\x20audit','Multi-party\x20chain:\x20extend\x20pattern\x20with\x20Machine\x20C,\x20D,\x20...\x20(each\x20independently\x20published)','Dependency\x20verification:\x20enforced\x20when\x20the\x20Progress\x20object\x20is\x20created\x20(creation\x20checks\x20the\x20bound\x20Machine\x20is\x20published\x20—\x20see\x2006\x20§14.6)'],'example_use_case':'Supplier\x20(Machine\x20A)\x20->\x20Manufacturer\x20(Machine\x20B)\x20->\x20Retailer\x20(Machine\x20C).\x20'+'Manufacturer\x20cannot\x20start\x20production\x20until\x20supplier\x27s\x20Progress\x20reaches\x20\x27Complete\x27.','publish_checklist':['Machine\x20A\x20already\x20published\x20on-chain\x20(verify\x20via\x20onchain_objects)','Cross-Machine\x20Guard\x20tested\x20with\x20valid/invalid\x20upstream\x20Progress\x20IDs','retained_submission\x20verified\x20(query\x20progress_history\x20for\x20upstream_progress_id)','Independent\x20testing:\x20run\x20Machine\x20A\x20to\x20Complete,\x20then\x20attempt\x20Machine\x20B\x27s\x20VerifyUpstream']},{'id':'tpl_machine_privacy_delivery','scene_id':'privacy_delivery','name':'Privacy-Preserving\x20Delivery\x20Flow','description':'Customer\x20submits\x20privacy\x20data\x20via\x20Messenger\x20(encrypted,\x20off-chain).\x20Chain\x20stores\x20only\x20Merkle\x20Root\x20Proof.\x20'+'Guard\x20verifies\x20Proof\x20signature\x20+\x20timestamp\x20+\x20service\x20binding.\x20Uses\x20tpl_forward_privacy_delivery_proof\x20(strict\x20mode).','recommended_patterns':['P-M-SEQ'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object'},{'name':'proof_node_name','type':'string','required':!![],'default':'ProofSubmitted','description':'Name\x20of\x20the\x20node\x20where\x20delivery\x20proof\x20is\x20submitted'},{'name':'delivery_node_name','type':'string','required':!![],'default':'DeliveryConfirmed','description':'Name\x20of\x20the\x20node\x20where\x20delivery\x20confirmation\x20occurs'}],'example_nodes':[{'name':'Paid','description':'Entry:\x20order\x20created\x20and\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'${proof_node_name}','description':'Customer\x20submits\x20Proof\x20via\x20Messenger'},{'name':'${delivery_node_name}'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'Paid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'Paid','next_node':'${proof_node_name}','threshold':0x1,'forwards':[{'name':'SubmitProof','weight':0x1,'named_operator':'','guard':'tpl_forward_privacy_delivery_proof','retained_submission':'proof_address'}]},{'prev_node':'${proof_node_name}','next_node':'${delivery_node_name}','threshold':0x1,'forwards':[{'name':'ConfirmDelivery','weight':0x1,'permission_index':0x2}]},{'prev_node':'${delivery_node_name}','next_node':'Complete','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_privacy_delivery_proof','bound_to_forward':'SubmitProof','purpose':'Verify\x20Proof:\x20signer=proof.signer\x20∧\x20proof.time>order.time\x20∧\x20order.service=service'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Merchant\x20confirms\x20delivery'}],'required_allocators':[{'name':'CompleteAllocation','trigger_node':'Complete','description':'Allocation\x20to\x20merchant\x20after\x20delivery\x20confirmation'}],'forkable_fields':['proof_node_name','delivery_node_name','additional_evidence_steps'],'applicable_industries':['ecommerce','logistics','privacy_service'],'relevant_risks':['R-M1-01','R-M1-08','R-M2-01','R-M2-04','R-M3-02','R-M5-03'],'creation_notes':['Use\x20strict\x20mode\x20tpl_forward_privacy_delivery_proof\x20(3\x20conditions:\x20Signer\x20+\x20time\x20+\x20service\x20binding)','submitChainProof\x20about_address\x20=\x20peerAddress\x20(NOT\x20sessionId)','order_id\x20passed\x20via\x20description\x20string\x20field\x20(not\x20about_address)','Guard\x20table\x20item\x20name\x20MUST\x20be\x20<64\x20BCS\x20bytes\x20(MAX_NAME_LENGTH=64)','retained_submission\x20stores\x20Proof\x20address\x20for\x20arbitration\x20query','Proof\x20MUST\x20be\x20generated\x20by\x20messenger.submitChainProof\x20(not\x20manual)'],'example_use_case':'Customer\x20sends\x20delivery\x20address\x20via\x20Messenger\x20(encrypted).\x20Chain\x20stores\x20only\x20Proof.\x20'+'Merchant\x20verifies\x20Proof,\x20then\x20confirms\x20delivery.','publish_checklist':['Strict\x20mode\x20Guard\x20tested:\x203\x20conditions\x20verified\x20individually','Messenger\x20integration\x20tested\x20end-to-end\x20(submit\x20+\x20verify)','retained_submission\x20stored\x20Proof\x20address\x20queryable\x20from\x20progress_history','Guard\x20table\x20item\x20name\x20length\x20validated\x20(<64\x20BCS\x20bytes)']},{'id':'tpl_machine_reward','scene_id':'reward_incentive','name':'Reward\x20Incentive\x20Flow','description':'Customer\x20triggers\x20Reward\x20claim\x20at\x20specific\x20node.\x20Guard\x20prevents\x20double-claim\x20via\x20query_reward_record_count==0.\x20'+'Reward\x20object\x20independent\x20of\x20Allocator.','recommended_patterns':['P-M-SEQ'],'recommended_topology':['P-M-LINEAR'],'parameters':[{'name':'reward_ref','type':'reward_ref','required':!![],'description':'Reward\x20object\x20address\x20(must\x20be\x20already\x20created)'},{'name':'claim_node_name','type':'string','required':!![],'default':'ClaimReward','description':'Name\x20of\x20the\x20node\x20where\x20reward\x20claims\x20are\x20triggered'}],'example_nodes':[{'name':'Eligible'},{'name':'${claim_node_name}'},{'name':'Rewarded'},{'name':'Complete'}],'example_pairs':[{'prev_node':'','next_node':'Eligible','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'Eligible','next_node':'${claim_node_name}','threshold':0x1,'forwards':[{'name':'TriggerClaim','weight':0x1,'named_operator':'','guard':'reward_anti_double_guard','retained_submission':'claim_record'}]},{'prev_node':'${claim_node_name}','next_node':'Rewarded','threshold':0x1,'forwards':[{'name':'IssueReward','weight':0x1,'permission_index':0x3}]},{'prev_node':'Rewarded','next_node':'Complete','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_reward_one_time_claim','bound_to_forward':'TriggerClaim','purpose':'Verify\x20query_reward_record_count==0\x20to\x20prevent\x20double-claim'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Completes\x20flow'},{'index':0x3,'name':'reward_admin','description':'Issues\x20reward\x20tokens'}],'required_allocators':[{'name':'CompleteAllocation','trigger_node':'Complete','description':'Standard\x20allocation\x20(separate\x20from\x20Reward)'}],'forkable_fields':['claim_node_name','additional_reward_conditions'],'applicable_industries':['ecommerce','subscription','education','loyalty'],'relevant_risks':['R-M1-08','R-M2-05','R-M3-04','R-X1-14'],'creation_notes':['Reward\x20Guard\x20MUST\x20check\x20query_reward_record_count\x20==\x200\x20(R-X1-14\x20CRITICAL)','Reward\x20is\x20INDEPENDENT\x20of\x20Allocator\x20—\x20both\x20can\x20fire\x20on\x20different\x20nodes','Reward\x20object\x20must\x20be\x20created\x20BEFORE\x20publishing\x20this\x20Machine','retained_submission\x20stores\x20claim\x20record\x20for\x20audit'],'example_use_case':'Loyalty\x20program:\x20after\x20customer\x20completes\x205\x20orders,\x20eligible\x20to\x20claim\x20reward\x20token.\x20'+'Anti-double-claim\x20Guard\x20ensures\x20one\x20claim\x20per\x20customer.','publish_checklist':['Reward\x20object\x20already\x20created\x20and\x20tested','Anti-double-claim\x20Guard\x20tested:\x20claim\x20twice\x20should\x20fail\x20on\x20second\x20attempt','retained_submission\x20verified\x20(claim_record\x20queryable)']},{'id':'tpl_machine_wonder_feedback','scene_id':'wonder_feedback','name':'Wonder\x20Feedback\x20Flow\x20(Post-Completion\x20Rating)','description':'Post-completion\x20rating\x20flow:\x20Paid\x20(entry)\x20→\x20Shipped\x20→\x20Received\x20→\x20Completed\x20→\x20{Wonder\x20|\x20NoWonder}.\x20'+'After\x20the\x20order\x20reaches\x20\x27Completed\x27\x20(terminal\x20business\x20state,\x20funds\x20already\x20allocated\x20to\x20merchant),\x20'+'the\x20OrderHolder\x20(namedOperator=\x27\x27)\x20can\x20advance\x20Progress\x20to\x20\x27wonder\x27\x20(positive\x20review)\x20or\x20\x27no_wonder\x27\x20'+'(negative\x20review).\x20A\x20bound\x20Reward\x20object\x27s\x20claim_guard\x20verifies\x20Progress.current\x20==\x20\x27wonder\x27\x20before\x20'+'paying\x20out\x20—\x20reward\x20claim\x20needs\x20NO\x20Permission.\x20Dispute\x20is\x20NEVER\x20modeled\x20here:\x20it\x20flows\x20through\x20'+'the\x20Order\x27s\x20dispute\x20flow\x20→\x20Arb\x20case\x20→\x20arbiter\x20ruling\x20→\x20fee\x20withdrawal,\x20fully\x20off-Machine.','recommended_patterns':['P-M-SEQ','P-M-COMPETING'],'recommended_topology':['P-M-LINEAR','P-M-COMPETING'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Merchant\x20Permission\x20object\x20(index\x202\x20=\x20merchant,\x20index\x203\x20=\x20admin)'},{'name':'wonder_node_name','type':'string','required':!![],'default':'wonder','description':'Node\x20name\x20for\x20positive\x20feedback\x20(praise)\x20terminal','constraint':'Must\x20match\x20/^(wonder|praise|thumbs_up)$/i\x20OR\x20be\x20a\x20custom\x20name;\x20must\x20NOT\x20match\x20dispute\x20anti-pattern\x20regex'},{'name':'no_wonder_node_name','type':'string','required':!![],'default':'no_wonder','description':'Node\x20name\x20for\x20negative\x20feedback\x20(complaint)\x20terminal','constraint':'Must\x20match\x20/^(no_wonder|complain|thumbs_down)$/i\x20OR\x20be\x20a\x20custom\x20name;\x20must\x20NOT\x20match\x20dispute\x20anti-pattern\x20regex'},{'name':'reward_ref','type':'reward_ref','required':![],'description':'Reward\x20object\x20address\x20(optional).\x20If\x20bound,\x20its\x20claim_guard\x20should\x20verify\x20Progress.current\x20==\x20wonder_node_name\x20AND\x20order.holder\x20==\x20signer.\x20Use\x20wonder_praise\x20or\x20wonder_feedback\x20reward\x20template.'},{'name':'rating_time_limit_days','type':'number','required':![],'default':'30','description':'Days\x20after\x20completion\x20during\x20which\x20the\x20customer\x20can\x20rate\x20(enforced\x20by\x20Guard\x20on\x20Praise/Complain\x20forwards\x20via\x20context(Clock))','constraint':'Must\x20be\x20>\x200;\x20reasonable\x20range\x207-90'}],'example_nodes':[{'name':'Paid','description':'Entry:\x20order\x20created\x20and\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'Shipped','description':'Merchant\x20dispatched\x20goods/service'},{'name':'Received','description':'Customer\x20confirmed\x20receipt'},{'name':'Completed','description':'Terminal\x20business\x20state\x20—\x20triggers\x20merchant\x20Allocation.\x20Funds\x20settled.'},{'name':'${wonder_node_name}','description':'Positive\x20feedback\x20terminal\x20(praise).\x20OrderHolder-only.\x20Reward-eligible.'},{'name':'${no_wonder_node_name}','description':'Negative\x20feedback\x20terminal\x20(complaint).\x20OrderHolder-only.\x20Optional\x20Repository\x20write\x20for\x20analytics.'}],'example_pairs':[{'prev_node':'','next_node':'Paid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'Paid','next_node':'Shipped','threshold':0x1,'forwards':[{'name':'Ship','weight':0x1,'permission_index':0x2,'named_operator':''}]},{'prev_node':'Shipped','next_node':'Received','threshold':0x1,'forwards':[{'name':'ConfirmReceive','weight':0x1,'named_operator':''}]},{'prev_node':'Received','next_node':'Completed','threshold':0x1,'forwards':[{'name':'Finish','weight':0x1,'permission_index':0x2,'named_operator':''}]},{'prev_node':'Completed','next_node':'${wonder_node_name}','threshold':0x1,'forwards':[{'name':'Praise','weight':0x1,'named_operator':'','guard':'rating_window_guard','retained_submission':'rating_record'}]},{'prev_node':'Completed','next_node':'${no_wonder_node_name}','threshold':0x1,'forwards':[{'name':'Complain','weight':0x1,'named_operator':'','guard':'rating_window_guard','retained_submission':'rating_record'}]}],'required_guards':[{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'Praise','purpose':'Verify\x20Progress.current\x20==\x20\x27Completed\x27\x20(rating\x20only\x20allowed\x20after\x20completion)\x20AND\x20context(Clock)\x20<=\x20progress.entry_time\x20+\x20rating_time_limit_days'},{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'Complain','purpose':'Verify\x20Progress.current\x20==\x20\x27Completed\x27\x20(rating\x20only\x20allowed\x20after\x20completion)\x20AND\x20context(Clock)\x20<=\x20progress.entry_time\x20+\x20rating_time_limit_days'}],'required_permissions':[{'index':0x2,'name':'merchant','description':'Merchant\x20role\x20for\x20Ship\x20+\x20Finish\x20(NOT\x20for\x20rating\x20—\x20rating\x20is\x20OrderHolder-only\x20via\x20named_operator=\x27\x27)'},{'index':0x3,'name':'admin','description':'Admin\x20override\x20(optional)'}],'required_allocators':[{'name':'MerchantAllocation','trigger_node':'Completed','description':'100%\x20to\x20merchant\x20Treasury\x20or\x20personal\x20address.\x20Fires\x20at\x20Completion\x20—\x20NOT\x20at\x20Wonder/NoWonder\x20(those\x20are\x20reputation-only\x20terminals\x20with\x20no\x20fund\x20flow).'}],'forkable_fields':['wonder_node_name','no_wonder_node_name','rating_time_limit_days','additional_rating_nodes'],'applicable_industries':['ecommerce','service','rental','subscription','education'],'relevant_risks':['R-M1-01','R-M1-02','R-M1-08','R-M1-11','R-M2-01','R-M2-05','R-M3-02','R-M3-04','R-M4-01','R-M5-03'],'creation_notes':['DISPUTE\x20INDEPENDENCE:\x20This\x20Machine\x20MUST\x20NOT\x20contain\x20\x27disputed\x27,\x20\x27refunded\x27,\x20\x27arb\x27,\x20\x27arbitration\x27\x20nodes\x20(R-M1-11\x20critical).\x20Disputes\x20are\x20filed\x20off-Machine\x20—\x20through\x20the\x20Arbitration\x20dispute\x20flow\x20on\x20the\x20order\x20and\x20arbitration\x20objects.','Build\x20order:\x20Permission\x20→\x20Machine\x20(unpublished)\x20→\x20Guards\x20→\x20Bind\x20guards\x20→\x20Publish\x20→\x20Bind\x20to\x20Service\x20→\x20Bind\x20Reward\x20(optional)','First\x20node\x20\x27Paid\x27\x20represents\x20post-payment\x20state\x20—\x20Service.buy()\x20completes\x20payment\x20atomically\x20before\x20Progress\x20is\x20created','No\x20separate\x20\x27Order\x27\x20or\x20\x27Pay\x27\x20nodes\x20needed\x20—\x20payment\x20is\x20handled\x20by\x20Service.buy(),\x20not\x20Machine','Wonder/NoWonder\x20forwards\x20have\x20named_operator=\x27\x27\x20(empty)\x20—\x20this\x20delegates\x20to\x20the\x20OrderHolder\x20(customer).\x20No\x20Permission\x20index\x20needed\x20for\x20rating.','Completed\x20node\x20triggers\x20MerchantAllocation\x20—\x20funds\x20are\x20settled\x20BEFORE\x20the\x20rating\x20window\x20opens.\x20Rating\x20does\x20NOT\x20affect\x20fund\x20flow.','Competing\x20Pair:\x20Praise\x20vs\x20Complain\x20(first-wins)\x20—\x20one\x20rating\x20per\x20order,\x20enforced\x20by\x20Guard\x20+\x20retained_submission\x20audit\x20trail.','Reward\x20object\x20(if\x20bound)\x20is\x20INDEPENDENT\x20of\x20Allocator:\x20Reward.claim()\x20requires\x20Guard+passport,\x20not\x20Permission.\x20Guard\x20checks\x20Progress.current\x20==\x20\x27wonder\x27\x20AND\x20order.holder\x20==\x20signer.','rating_window_guard\x20enforces\x20time\x20limit:\x20context(Clock)\x20<=\x20progress.entry_time\x20+\x20rating_time_limit_days.\x20After\x20window\x20closes,\x20no\x20rating\x20possible\x20(Completed\x20becomes\x20true\x20terminal).','Optional:\x20bind\x20a\x20Repository\x20to\x20record\x20feedback\x20node\x20for\x20analytics.\x20Repository\x20write\x20happens\x20via\x20Guard\x27s\x20data\x20extraction\x20(NOT\x20auto-passed\x20—\x20see\x2006\x20§14.4).'],'example_use_case':'Photography\x20service:\x20Paid\x20→\x20Shipped\x20(booking\x20confirmed)\x20→\x20Received\x20(session\x20delivered)\x20→\x20Completed\x20'+'(photos\x20delivered,\x20funds\x20released\x20to\x20photographer)\x20→\x20customer\x20advances\x20to\x20\x27wonder\x27\x20(loved\x20the\x20work)\x20'+'or\x20\x27no_wonder\x27\x20(didn\x27t\x20love\x20it).\x20Bound\x20Reward\x20pays\x201\x20WOW\x20to\x20customers\x20who\x20advance\x20to\x20\x27wonder\x27.\x20'+'Merchant\x27s\x20wonder/no_wonder\x20ratio\x20becomes\x20an\x20on-chain\x20reputation\x20signal.\x20Disputes\x20(if\x20any)\x20are\x20'+'filed\x20separately\x20via\x20Arbitration\x20object\x20—\x20never\x20enter\x20this\x20Machine.','publish_checklist':['All\x206\x20nodes\x20verified:\x20no\x20\x27disputed\x27/\x27refunded\x27/\x27arb\x27/\x27arbitration\x27\x20names\x20(R-M1-11\x20PASS)','Entry\x20Pair\x20exists\x20(prev_node=\x27\x27\x20targets\x20\x27Paid\x27)','Competing\x20Pair\x20tested:\x20Praise\x20vs\x20Complain\x20—\x20first-wins\x20semantics\x20verified\x20on\x20testnet','rating_window_guard\x20tested:\x20rating\x20blocked\x20after\x20time\x20limit\x20expires','MerchantAllocation\x20fires\x20ONLY\x20at\x20Completed\x20(NOT\x20at\x20Wonder/NoWonder)','Reward\x20object\x20(if\x20bound):\x20claim_guard\x20tested\x20—\x20Progress.current\x20==\x20\x27wonder\x27\x20required,\x20claim\x20fails\x20at\x20\x27no_wonder\x27\x20or\x20\x27Completed\x27','named_operator=\x27\x27\x20on\x20Praise/Complain\x20forwards\x20verified\x20(OrderHolder-only\x20operation)','machineNode2file\x20export\x20as\x20backup']},{'id':'tpl_machine_subscription','scene_id':'subscription','name':'Subscription\x20/\x20Membership\x20Flow','description':'Subscribe\x20->\x20Pay\x20->\x20Activate\x20->\x20[Renew\x20|\x20Expire]\x20->\x20Cancel/End.\x20Time-lock\x20on\x20Renew.\x20'+'Competing\x20Pair:\x20Renew\x20vs\x20Expire\x20(first-wins).\x20Repository\x20stores\x20subscription\x20status.','recommended_patterns':['P-M-SEQ','P-M-COMPETING'],'recommended_topology':['P-M-LINEAR','P-M-COMPETING'],'parameters':[{'name':'merchant_permission','type':'permission_ref','required':!![],'description':'Provider\x20Permission\x20object'},{'name':'subscription_duration_days','type':'number','required':!![],'default':'30','description':'Days\x20between\x20Renew\x20and\x20Expire\x20eligibility'},{'name':'repository_ref','type':'address','required':!![],'description':'Repository\x20object\x20storing\x20subscription\x20status\x20(note:\x20not\x20consensus_repositories,\x20which\x20is\x20declarative-only\x20—\x20see\x2006\x20§14.4)'}],'example_nodes':[{'name':'Paid','description':'Entry:\x20subscription\x20created\x20and\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'Active'},{'name':'RenewEligible'},{'name':'Renewed'},{'name':'Expired'},{'name':'Cancelled'},{'name':'Ended'}],'example_pairs':[{'prev_node':'','next_node':'Paid','threshold':0x1,'forwards':[{'name':'Enter','weight':0x1,'named_operator':''}]},{'prev_node':'Paid','next_node':'Active','threshold':0x1,'forwards':[{'name':'Activate','weight':0x1,'permission_index':0x2,'guard':'repository_write_guard'}]},{'prev_node':'Active','next_node':'RenewEligible','threshold':0x1,'forwards':[{'name':'TimeUnlock','weight':0x1,'permission_index':0x3,'guard':'time_lock_guard_${subscription_duration_days}_days'}]},{'prev_node':'RenewEligible','next_node':'Renewed','threshold':0x1,'forwards':[{'name':'Renew','weight':0x1,'named_operator':''}]},{'prev_node':'RenewEligible','next_node':'Expired','threshold':0x1,'forwards':[{'name':'AutoExpire','weight':0x1,'permission_index':0x3,'guard':'expire_time_guard'}]},{'prev_node':'RenewEligible','next_node':'Cancelled','threshold':0x1,'forwards':[{'name':'Cancel','weight':0x1,'named_operator':''}]},{'prev_node':'Renewed','next_node':'Active','threshold':0x1,'forwards':[{'name':'Reactivate','weight':0x1,'permission_index':0x2}]},{'prev_node':'Expired','next_node':'Ended','threshold':0x1,'forwards':[{'name':'CloseExpired','weight':0x1,'permission_index':0x3}]},{'prev_node':'Cancelled','next_node':'Ended','threshold':0x1,'forwards':[{'name':'CloseCancelled','weight':0x1,'permission_index':0x2}]}],'required_guards':[{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'TimeUnlock','purpose':'Time\x20lock:\x20context(Clock)\x20>=\x20progress.entry_time\x20+\x20${subscription_duration_days}\x20days'},{'guard_template_id':'tpl_write_guard_type_check','bound_to_forward':'Activate','purpose':'Write\x20subscription\x20status\x20to\x20Repository'},{'guard_template_id':'tpl_forward_node_check','bound_to_forward':'AutoExpire','purpose':'Hard\x20expire:\x20context(Clock)\x20>=\x20progress.entry_time\x20+\x202x\x20duration'}],'required_permissions':[{'index':0x2,'name':'provider','description':'Provider\x20activates/reactivates'},{'index':0x3,'name':'admin','description':'Time-lock\x20triggers'}],'required_allocators':[{'name':'RenewAllocation','trigger_node':'Renewed','description':'Charge\x20renewal\x20fee\x20on\x20Renew'}],'forkable_fields':['duration_days','grace_period','additional_tiers'],'applicable_industries':['subscription','saas','membership','service'],'relevant_risks':['R-M1-01','R-M1-08','R-M2-01','R-M2-05','R-M3-02','R-M3-04','R-M4-01','R-M5-04'],'creation_notes':['First\x20node\x20\x27Paid\x27\x20represents\x20post-payment\x20state\x20—\x20Service.buy()\x20completes\x20subscription\x20payment\x20atomically\x20before\x20Progress\x20is\x20created','No\x20separate\x20\x27Subscribe\x27\x20or\x20\x27Pay\x27\x20nodes\x20needed\x20—\x20subscription\x20and\x20payment\x20are\x20handled\x20by\x20Service.buy(),\x20not\x20Machine','Time-lock\x20uses\x20context(Clock)\x20—\x20verify\x20Clock\x20address\x20in\x20Guard\x20table','Competing\x20Pair:\x20Renew\x20vs\x20Expire\x20vs\x20Cancel\x20—\x20first-wins','Renewed\x20node\x20loops\x20back\x20to\x20Active\x20(recurring\x20subscription)','Repository\x20records\x20subscription\x20status\x20for\x20cross-Machine\x20verification','Renewal\x20Allocation\x20triggers\x20on\x20Renewed\x20node\x20(not\x20Active\x20—\x20avoids\x20double-charge)','Note:\x20consensus_repositories\x20is\x20declarative-only\x20(NOT\x20auto-passed\x20to\x20Progress);\x20use\x20repository_ref\x20parameter\x20for\x20actual\x20Repository\x20object\x20—\x20see\x2006\x20§14.4','VARIANT\x20—\x20Content\x20subscription\x20(Substack-style):\x20replace\x20time-lock\x20Renew/Expire\x20with\x20content-delivery\x20flow:','\x20\x206-node\x20variant:\x20Paid\x20(entry)\x20→\x20ContentPublished\x20→\x20Completed\x20(terminal-success)','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Paid\x20→\x20Cancelled\x20(terminal-cancel)\x20|\x20Paid\x20→\x20Disputed\x20→\x20Refunded\x20(terminal-dispute)','\x20\x20Permission:\x20author=index\x201000\x20(publish\x20+\x20cancel),\x20arbitrator=index\x201500\x20(resolve\x20dispute),\x20reader=namedOperator=\x27\x27\x20(open\x20role,\x20no\x20specific\x20operator)','\x20\x20Guards:\x20deliver_guard\x20(verify\x20author\x20permission\x20+\x20content\x20hash),\x20cancel_guard\x20(verify\x20subscriber\x20request),\x20refund_guard\x20(verify\x20arbitration\x20outcome)','\x20\x20Allocators:\x20deliver=100%\x20to\x20author,\x20cancel=100%\x20refund\x20to\x20subscriber,\x20dispute=100%\x20refund\x20to\x20subscriber\x20(Guard-first-wins\x20pattern)','\x20\x20First-Forward-wins:\x20when\x20Paid\x20has\x20competing\x20forwards\x20(Deliver|Cancel|Dispute),\x20the\x20first\x20triggered\x20forward\x20wins;\x20subscribers\x20cannot\x20double-claim','CRITICAL\x20—\x20v1→v2\x20lesson:\x20arbitrations\x20MUST\x20be\x20added\x20BEFORE\x20Service.publish\x20(post-publish,\x20arbitrations\x20become\x20immutable\x20and\x20cannot\x20be\x20added\x20—\x20F-S-21)','\x20\x20If\x20you\x20accidentally\x20published\x20without\x20arbitrations,\x20you\x20MUST\x20create\x20a\x20new\x20Service\x20v2\x20with\x20arbitrations\x20bound\x20before\x20publishing\x20(the\x20v1\x20Service\x20must\x20be\x20paused/abandoned)','\x20\x20ConfirmGate\x20(C-S-19,\x20QS11)\x20will\x20warn\x20before\x20publish\x20without\x20arbitrations\x20—\x20do\x20not\x20bypass\x20this\x20warning\x20unless\x20explicitly\x20intending\x20no-arbitration\x20operation','Build\x20order\x20(content\x20variant):\x20Permission\x20→\x20Machine\x20(unpublished,\x20with\x20initial\x20forward)\x20→\x203\x20Guards\x20→\x203\x20Allocators\x20(template\x20on\x20Service)\x20→\x20Service\x20(unpublished,\x20bind\x20machine+buy_guard+order_allocators+arbitrations)\x20→\x20Publish\x20Service\x20→\x20Test\x20order\x20(3\x20paths:\x20normal/cancel/dispute)'],'example_use_case':'Monthly\x20SaaS\x20subscription:\x20$10/month.\x20Customer\x20can\x20renew\x20anytime\x20after\x20day\x2025.\x20'+'Auto-expire\x20on\x20day\x2035\x20if\x20not\x20renewed.\x20Cancel\x20anytime.\x0a\x0a'+'VARIANT\x20—\x20Content\x20subscription\x20(Substack-style):\x20$5/month\x20newsletter.\x20Author\x20publishes\x20content\x20→\x20'+'subscriber\x20reads.\x20Subscriber\x20can\x20cancel\x20anytime\x20for\x20full\x20refund.\x20Disputes\x20resolved\x20by\x20arbitrator\x20'+'(100%\x20refund\x20to\x20subscriber\x20if\x20dispute\x20upheld).\x206-node\x20Machine,\x203\x20Guards,\x203\x20Allocators.\x20'+'Tested\x20on\x20testnet\x20with\x203\x20order\x20paths:\x20normal\x20delivery,\x20cancel,\x20dispute.','publish_checklist':['Time-lock\x20Guards\x20tested\x20on\x20testnet\x20(both\x20TimeUnlock\x20+\x20AutoExpire)','Competing\x20Pair\x20semantics\x20verified\x20(Renew\x20vs\x20Expire\x20vs\x20Cancel)','Repository\x20write\x20tested\x20(subscription\x20status\x20queryable)','Renewal\x20loop\x20tested:\x20Paid\x20->\x20Active\x20->\x20RenewEligible\x20->\x20Renewed\x20->\x20Active','Content\x20variant:\x20initial\x20node\x20(prev_node=\x27\x27)\x20MUST\x20have\x20at\x20least\x20one\x20forward\x20(FIX-002)\x20—\x20empty\x20forwards=[]\x20causes\x20Progress\x20to\x20be\x20permanently\x20stuck','Content\x20variant:\x20arbitrations\x20added\x20BEFORE\x20publish\x20(cannot\x20add\x20post-publish\x20per\x20F-S-21)','Content\x20variant:\x203\x20order\x20paths\x20tested\x20on\x20testnet\x20—\x20normal\x20delivery,\x20cancel-within-grace,\x20dispute-resolution','Content\x20variant:\x20machineNode2file\x20export\x20as\x20backup\x20(covers\x20all\x206\x20nodes)']}];export const MACHINE_TEMPLATES_VERSION='1.0.0';export const MACHINE_TEMPLATES_COUNT=MACHINE_TEMPLATES['length'];export function getAllTemplates(){return MACHINE_TEMPLATES;}export function getTemplateById(a){return MACHINE_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScene(a){return MACHINE_TEMPLATES['filter'](b=>b['scene_id']===a);}export function getTemplatesByIndustry(a){return MACHINE_TEMPLATES['filter'](b=>b['applicable_industries']['includes'](a));}export function getTemplatesByPattern(a){return MACHINE_TEMPLATES['filter'](b=>b['recommended_patterns']['includes'](a));}export function suggestTemplateForIntent(a){const b=inferSceneFromFlow(a);if(!b)return undefined;const c=getTemplatesByScene(b['id']);return c[0x0];}export function getTemplateParameters(a){const b=getTemplateById(a);return b?b['parameters']:[];}export function getRequiredParameters(a){return getTemplateParameters(a)['filter'](b=>b['required']);}export function getOptionalParameters(a){return getTemplateParameters(a)['filter'](b=>!b['required']);}function validateParamType(a,b){switch(b){case'address':case'string':case'permission_ref':case'guard_ref':case'machine_ref':case'service_ref':case'arbitration_ref':case'reward_ref':return typeof a==='string';case'number':return typeof a==='number'||typeof a==='string'&&/^\d+$/['test'](a);case'boolean':return typeof a==='boolean';case'vec_address':case'vec_string':case'node_name_list':return Array['isArray'](a)&&a['every'](c=>typeof c==='string');default:return![];}}function deepSubstitute(a,b){if(typeof a==='string')return a['replace'](/\$\{(\w+)\}/g,(c,d)=>d in b?String(b[d]):'${'+d+'}');if(Array['isArray'](a))return a['map'](c=>deepSubstitute(c,b));if(a&&typeof a==='object'){const c={};for(const [d,e]of Object['entries'](a)){c[d]=deepSubstitute(e,b);}return c;}return a;}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'success':![],'validation_errors':['Template\x20not\x20found:\x20'+a]};const d=c['parameters']['filter'](h=>h['required']&&!(h['name']in b))['map'](h=>h['name']);if(d['length']>0x0)return{'success':![],'missing_params':d,'validation_errors':['Missing\x20required\x20parameters:\x20'+d['join'](',\x20')]};const e=[];for(const h of c['parameters']){if(h['name']in b){const i=b[h['name']];!validateParamType(i,h['type'])&&e['push']('Parameter\x20\x22'+h['name']+'\x22\x20type\x20mismatch:\x20expected\x20'+h['type']+',\x20got\x20'+typeof i);}}if(e['length']>0x0)return{'success':![],'validation_errors':e};const f=deepSubstitute(c['example_nodes'],b),g=deepSubstitute(c['example_pairs'],b);return{'success':!![],'filled_nodes':f,'filled_pairs':g};}export function forkTemplate(a){const b=getTemplateById(a);if(!b)return undefined;const c={};for(const d of b['forkable_fields']){c[d]='see\x20example_nodes/example_pairs';}return{'template_id':a,'forkable_fields':b['forkable_fields'],'current_values':c,'instructions':['Modify\x20fields\x20below\x20to\x20customize\x20the\x20workflow','Keep\x20template\x20structure\x20intact\x20unless\x20explicitly\x20noted','Run\x20risk\x20assessment\x20after\x20modification\x20(machine-risk.ts)','User\x20MUST\x20confirm\x20final\x20JSON\x20before\x20publish\x20(ConfirmGate)']};}export const DECISION_TREE={'Q1':{'question':'Does\x20the\x20workflow\x20involve\x20multiple\x20independent\x20services/parties?','no_next':'Q3'},'Q2':{'question':'Are\x20these\x20services\x20already\x20published\x20as\x20separate\x20Machines?','yes_template':'tpl_machine_cross_machine','no_next':'DECOMPOSE'},'Q3':{'question':'Does\x20any\x20node\x20require\x20multiple\x20parties\x27\x20confirmation\x20to\x20advance?','no_next':'Q5'},'Q4':{'question':'Do\x20all\x20parties\x20have\x20EQUAL\x20weight?','yes_template':'tpl_machine_dual_signature','no_next':'tpl_machine_weighted_voting'},'Q5':{'question':'Does\x20the\x20workflow\x20need\x20exception\x20branches\x20(lost,\x20return,\x20dispute)?','yes_template':'tpl_machine_ecommerce_exceptions','no_next':'Q6'},'Q6':{'question':'Does\x20it\x20involve\x20recurring\x20payments\x20or\x20time-based\x20state\x20changes?','yes_template':'tpl_machine_subscription','no_next':'Q7'},'Q7':{'question':'Does\x20it\x20need\x20privacy-preserving\x20data\x20delivery\x20(Messenger)?','yes_template':'tpl_machine_privacy_delivery','no_next':'Q8'},'Q8':{'question':'Does\x20it\x20involve\x20deposit/refund\x20separation?','yes_template':'tpl_machine_rental','no_next':'Q9'},'Q9':{'question':'Does\x20it\x20need\x20reward/incentive\x20distribution\x20at\x20a\x20specific\x20node?','yes_template':'tpl_machine_reward','no_next':'tpl_machine_ecommerce_standard'}};export function walkDecisionTree(a){let b='Q1';while(b){const c=DECISION_TREE[b];if(!c)return'UNKNOWN';const d=a[b];if(d===undefined)return b;if(d){if(c['yes_template'])return c['yes_template'];if(b==='Q1'){b='Q2';continue;}if(b==='Q3'){b='Q4';continue;}return'UNKNOWN';}else{if(c['no_next']){if(c['no_next']==='DECOMPOSE')return'DECOMPOSE_INTO_MULTIPLE_MACHINES';if(c['no_next']['startsWith']('tpl_'))return c['no_next'];b=c['no_next'];continue;}return'UNKNOWN';}}return'UNKNOWN';}export function verifyTemplateSceneReferences(){const a=[];for(const b of MACHINE_TEMPLATES){!findScene(b['scene_id'])&&a['push']({'template_id':b['id'],'invalid_scene_id':b['scene_id']});}return a;}export function getReferencedGuardTemplateIds(){const a=new Set();for(const b of MACHINE_TEMPLATES){for(const c of b['required_guards']){a['add'](c['guard_template_id']);}}return a;}export function getReferencedRiskIds(){const a=new Set();for(const b of MACHINE_TEMPLATES){for(const c of b['relevant_risks']){a['add'](c);}}return a;}export function listTemplates(){return MACHINE_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'scene_id':a['scene_id'],'patterns':a['recommended_patterns'],'industries':a['applicable_industries']}));}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const SEMANTIC_TO_MACHINE_RULES=[{'id':'P-M-SEQ','pattern_name':'Sequential\x20Execution','category':'execution','semantic_intent':'Single\x20actor\x20advances\x20workflow\x20one\x20step\x20at\x20a\x20time.\x20Each\x20Pair\x20has\x20threshold=1\x20with\x20a\x20single\x20Forward\x20weight=1.','match_keywords':['sequential','linear','one\x20step\x20at\x20a\x20time'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':'dynamic','structure':'Each\x20Pair:\x20{\x20threshold:\x201,\x20forwards:\x20[{\x20name,\x20weight:\x201,\x20namedOperator\x20|\x20permissionIndex\x20}]\x20}'},'constraints':['Each\x20Forward\x20must\x20have\x20at\x20least\x20one\x20of\x20namedOperator\x20or\x20permissionIndex','weight\x20>\x200\x20(typically\x201)','prev_node\x20references\x20must\x20form\x20a\x20valid\x20DAG\x20(no\x20cycles)'],'example':{'pair':{'prev_node':'NodeA','next_node':'NodeB','threshold':0x1,'forwards':[{'name':'Advance','weight':0x1,'named_operator':''}]}}},{'id':'P-M-AND','pattern_name':'Parallel\x20AND\x20(Dual-Signature\x20Consensus)','category':'execution','semantic_intent':'Multiple\x20parties\x20must\x20ALL\x20contribute\x20to\x20advance.\x20Pair\x20threshold=N\x20with\x20N\x20DISTINCT\x20Forwards\x20(weight=1\x20each)\x20—\x20one\x20forward\x20per\x20contributing\x20operator.\x20'+'A\x20single\x20forward\x20CANNOT\x20be\x20executed\x20by\x20two\x20different\x20people:\x20each\x20forward\x20is\x20single-operator-locked\x20by\x20the\x20first\x20account\x20that\x20accomplishes\x20it\x20'+'(progress.move\x20session_accomplish_imp;\x20a\x20second\x20operator\x20re-executing\x20the\x20same\x20accomplished\x20forward\x20aborts\x20E_NOT_THE_HOLDER,\x20and\x20the\x20weight\x20is\x20counted\x20only\x20once).\x20'+'So\x20N\x20operators\x20cooperating\x20on\x20a\x20threshold-N\x20transition\x20MUST\x20each\x20have\x20their\x20own\x20forward\x20in\x20the\x20Pair.','match_keywords':['and','all','dual-sig','both\x20confirm','both\x20must'],'schema_elements':{'threshold':0x2,'forward_count':0x2,'permission_model':'mixed','pair_count':0x1,'structure':'Pair:\x20{\x20threshold:\x20N,\x20forwards:\x20[{\x20weight:\x201,\x20namedOperator:\x20\x27\x27\x20},\x20{\x20weight:\x201,\x20permissionIndex:\x202\x20}]\x20}'},'constraints':['threshold\x20must\x20equal\x20the\x20number\x20of\x20required\x20Forwards','Each\x20contributing\x20operator\x20needs\x20a\x20DISTINCT\x20Forward\x20—\x20never\x20reuse\x20one\x20forward\x20for\x20two\x20people','Each\x20Forward\x20must\x20have\x20a\x20distinct\x20permission\x20model\x20(no\x20two\x20identical)','A\x20forward\x20is\x20locked\x20by\x20its\x20first\x20operator:\x20once\x20accomplished\x20it\x20contributes\x20its\x20weight\x20once\x20and\x20re-execution\x20by\x20others\x20aborts\x20E_NOT_THE_HOLDER','If\x20either\x20party\x20fails\x20to\x20sign,\x20workflow\x20stalls\x20—\x20consider\x20adding\x20timeout\x20Guard'],'example':{'pair':{'prev_node':'Initiated','next_node':'Approved','threshold':0x2,'forwards':[{'name':'CustomerApprove','weight':0x1,'named_operator':''},{'name':'MerchantApprove','weight':0x1,'permission_index':0x2}]}}},{'id':'P-M-OR','pattern_name':'Parallel\x20OR\x20(Any-One\x20Execution)','category':'execution','semantic_intent':'Any\x20one\x20of\x20multiple\x20paths\x20can\x20advance\x20the\x20workflow.\x20Multiple\x20Pairs,\x20each\x20threshold=1.','match_keywords':['or','any','either'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':'dynamic','structure':'Multiple\x20Pairs\x20from\x20same\x20prev_node,\x20each\x20with\x20threshold=1'},'constraints':['Distinct\x20next_node\x20for\x20each\x20Pair\x20(or\x20distinct\x20Forward)','If\x20targets\x20are\x20different\x20nodes,\x20this\x20becomes\x20COMPETING\x20topology','If\x20targets\x20are\x20same\x20node,\x20alternative\x20paths\x20converge\x20(FORKMERGE)'],'example':{'pairs':[{'prev_node':'Choice','next_node':'PathA','threshold':0x1,'forwards':[{'name':'ChooseA','weight':0x1,'named_operator':''}]},{'prev_node':'Choice','next_node':'PathB','threshold':0x1,'forwards':[{'name':'ChooseB','weight':0x1,'named_operator':''}]}]}},{'id':'P-M-VOTE','pattern_name':'Weighted\x20Voting','category':'execution','semantic_intent':'Multiple\x20parties\x20vote\x20with\x20unequal\x20weights.\x20threshold=100,\x20varied\x20weights\x20(e.g.\x2060+40).\x20'+'Guard\x20extracts\x20weight\x20dynamically\x20from\x20Arbitration\x20object.','match_keywords':['vote','weight','stakeholder'],'schema_elements':{'threshold':0x64,'forward_count':'dynamic','permission_model':'mixed','pair_count':0x1,'structure':'Pair:\x20{\x20threshold:\x20100,\x20forwards:\x20[{\x20weight:\x2060,\x20permissionIndex:\x202,\x20guard:\x20arb_voting_guard\x20},\x20{\x20weight:\x208,\x20namedOperator:\x20\x27member\x27,\x20guard:\x20arb_voting_guard\x20}]\x20}'},'constraints':['Guard\x20MUST\x20check\x20arb.voted\x20has\x20[Signer]\x20to\x20prevent\x20double-voting\x20(R-X1-14\x20CRITICAL)','Weight\x20is\x20query-derived\x20from\x20Arbitration\x20object\x20(not\x20hardcoded\x20in\x20Forward)','Competing\x20Pair\x20often\x20added:\x20Approved\x20vs\x20Rejected\x20(timeout)\x20—\x20first-wins','Forward\x20weight\x20field\x20is\x20just\x20session\x20counter;\x20actual\x20weight\x20from\x20Guard'],'example':{'pair':{'prev_node':'Voting','next_node':'Approved','threshold':0x64,'forwards':[{'name':'ChiefVote','weight':0x3c,'permission_index':0x2,'guard':'arb_voting_guard'},{'name':'MemberVote','weight':0x8,'named_operator':'member','guard':'arb_voting_guard'}]}}},{'id':'P-M-HYBRID','pattern_name':'Hybrid\x20Mode\x20(Key\x20Party\x20Required\x20+\x20Others\x20Optional)','category':'execution','semantic_intent':'One\x20key\x20party\x20must\x20contribute,\x20others\x20are\x20optional.\x20threshold=5\x20with\x20mixed\x20weights\x20(3+1+1).','match_keywords':['hybrid','mixed','key\x20party'],'schema_elements':{'threshold':0x5,'forward_count':0x3,'permission_model':'mixed','pair_count':0x1,'structure':'Pair:\x20{\x20threshold:\x205,\x20forwards:\x20[{\x20weight:\x203,\x20permissionIndex:\x202\x20(key)\x20},\x20{\x20weight:\x201,\x20namedOperator:\x20\x27role1\x27\x20},\x20{\x20weight:\x201,\x20namedOperator:\x20\x27role2\x27\x20}]\x20}'},'constraints':['Key\x20party\x27s\x20weight\x20must\x20alone\x20be\x20insufficient\x20(otherwise\x20optional\x20parties\x20are\x20meaningless)','Total\x20weight\x20of\x20all\x20Forwards\x20must\x20be\x20>=\x20threshold','Each\x20Forward\x20must\x20have\x20distinct\x20permission\x20model'],'example':{'pair':{'prev_node':'Review','next_node':'Approved','threshold':0x5,'forwards':[{'name':'ManagerApprove','weight':0x3,'permission_index':0x2},{'name':'EngineerApprove','weight':0x1,'named_operator':'engineer'},{'name':'QAApprove','weight':0x1,'named_operator':'qa'}]}}},{'id':'P-M-LINEAR','pattern_name':'Linear\x20Flow\x20(No\x20Branches)','category':'topology','semantic_intent':'Workflow\x20progresses\x20in\x20a\x20straight\x20line\x20with\x20no\x20branches.','match_keywords':['linear','straight','no\x20branches'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':'dynamic','structure':'Chain\x20of\x20Pairs:\x20A->B->C->D->...->Terminal'},'constraints':['Exactly\x20one\x20entry\x20Pair\x20(prev_node=\x27\x27)','Exactly\x20one\x20terminal\x20node\x20(no\x20outgoing\x20Pairs)','Each\x20non-terminal\x20node\x20has\x20exactly\x20one\x20outgoing\x20Pair'],'example':{'topology':'Entry\x20->\x20A\x20->\x20B\x20->\x20C\x20->\x20Terminal'}},{'id':'P-M-FORKMERGE','pattern_name':'Fork-Merge\x20(Parallel\x20Branches\x20Converging)','category':'topology','semantic_intent':'Main\x20flow\x20forks\x20into\x20multiple\x20parallel\x20branches,\x20then\x20merges\x20back\x20to\x20main\x20flow.','match_keywords':['fork','merge','parallel'],'schema_elements':{'threshold':0x1,'forward_count':'dynamic','permission_model':'mixed','pair_count':'dynamic','structure':'ForkNode\x20->\x20{BranchA,\x20BranchB}\x20->\x20MergeNode'},'constraints':['Multiple\x20Pairs\x20from\x20ForkNode\x20(one\x20per\x20branch)','All\x20branches\x20must\x20eventually\x20reach\x20MergeNode','MergeNode\x20has\x20multiple\x20incoming\x20Pairs\x20(merge\x20point)','Threshold\x20at\x20MergeNode\x20determines\x20if\x20all\x20branches\x20must\x20complete\x20or\x20just\x20some'],'example':{'topology':'ForkNode\x20->\x20BranchA\x20->\x20MergeNode;\x20ForkNode\x20->\x20BranchB\x20->\x20MergeNode'}},{'id':'P-M-COMPETING','pattern_name':'Competing\x20Pairs\x20(Mutually\x20Exclusive\x20Branches)','category':'topology','semantic_intent':'Multiple\x20Pairs\x20from\x20same\x20node\x20compete;\x20first\x20Pair\x20to\x20meet\x20threshold\x20wins,\x20others\x20abandoned.','match_keywords':['competing','exclusive','race'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':'dynamic','structure':'Same\x20prev_node\x20->\x20multiple\x20next_nodes\x20(each\x20Pair\x20independent)'},'constraints':['Mutually\x20exclusive\x20—\x20only\x20one\x20Pair\x20can\x20complete\x20per\x20session','First\x20Pair\x20to\x20reach\x20threshold\x20wins','Other\x20incomplete\x20Pairs\x20are\x20abandoned','Verify\x20no\x20dead\x20branches\x20(a\x20Pair\x20that\x20always\x20loses\x20to\x20another)'],'example':{'topology':'Shipped\x20->\x20Received;\x20Shipped\x20->\x20Lost;\x20Shipped\x20->\x20Return\x20(first\x20wins)'}},{'id':'P-M-PERM-SINGLE','pattern_name':'Single\x20Permission','category':'permission','semantic_intent':'Forward\x20uses\x20only\x20one\x20permission\x20type:\x20namedOperator\x20OR\x20permissionIndex.','match_keywords':['single\x20permission'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':0x1,'structure':'Forward:\x20{\x20name,\x20weight:\x201,\x20namedOperator:\x20\x27<role>\x27\x20|\x20permissionIndex:\x20<index>\x20}\x20(only\x20one\x20set)'},'constraints':['Either\x20namedOperator\x20or\x20permissionIndex\x20is\x20set\x20(not\x20both)','Empty\x20namedOperator=\x27\x27\x20grants\x20OrderHolder\x20(order\x20owner\x20+\x20agents)'],'example':{'forward':{'name':'Ship','weight':0x1,'permission_index':0x2}}},{'id':'P-M-PERM-MIXED','pattern_name':'Mixed\x20Permission\x20(Either-Or)','category':'permission','semantic_intent':'Forward\x20allows\x20EITHER\x20permission\x20to\x20execute\x20(internal\x20staff\x20OR\x20external\x20roles).','match_keywords':['mixed\x20permission','either'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'mixed','pair_count':0x1,'structure':'Forward:\x20{\x20name,\x20weight:\x201,\x20namedOperator:\x20\x27<role>\x27,\x20permissionIndex:\x20<index>\x20}\x20(both\x20set)'},'constraints':['Both\x20namedOperator\x20and\x20permissionIndex\x20are\x20set','Executor\x20needs\x20EITHER\x20permission\x20—\x20passing\x20either\x20check\x20is\x20sufficient','Use\x20case:\x20allow\x20internal\x20staff\x20OR\x20external\x20role\x20to\x20execute\x20the\x20same\x20Forward'],'example':{'forward':{'name':'Confirm','weight':0x1,'named_operator':'auditor','permission_index':0x2}}},{'id':'P-M-CROSS-MACHINE','pattern_name':'Cross-Machine\x20Dependency','category':'integration','semantic_intent':'Machine\x20B\x27s\x20Forward\x20Guard\x20queries\x20Machine\x20A\x27s\x20Progress\x20to\x20verify\x20upstream\x20completion.','match_keywords':['cross-machine','supply\x20chain','upstream'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':0x1,'structure':'Forward:\x20{\x20guard:\x20\x27upstream_progress_guard\x27,\x20retained_submission:\x20\x27upstream_progress_id\x27\x20}'},'constraints':['Machine\x20A\x20MUST\x20be\x20published\x20before\x20Machine\x20B\x20(dependency\x20order)','Guard\x20uses\x20convert_witness=100\x20to\x20convert\x20submitted\x20Order/Progress\x20ID\x20into\x20queryable\x20Progress','Cross-Machine\x20dependency\x20is\x20one-way\x20(no\x20cycles)','Dependency\x20verification:\x20indirect\x20via\x20progress::new\x20->\x20assert_published\x20(see\x2006\x20§14.6)','retained_submission\x20stores\x20upstream\x20Progress\x20ID\x20for\x20audit'],'example':{'forward':{'name':'VerifyUpstream','weight':0x1,'permission_index':0x2,'guard':'upstream_progress_guard','retained_submission':'upstream_progress_id'}}},{'id':'P-M-ALLOCATION-INTEGRATED','pattern_name':'Allocation-Integrated\x20Terminal','category':'integration','semantic_intent':'Terminal\x20node\x20triggers\x20Allocator\x20to\x20distribute\x20funds.\x20Allocation\x20independent\x20of\x20Machine\x20flow.','match_keywords':['allocation','fund\x20distribution','terminal'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':0x1,'structure':'Terminal\x20node\x20->\x20Allocator\x20entry\x20(configured\x20on\x20Service\x20order_allocators)'},'constraints':['Terminal\x20node\x20must\x20be\x20referenced\x20in\x20Service\x20order_allocators','Allocator\x20Guard\x20verifies\x20progress.current\x20==\x20terminal_node_name','sharing.who\x20determines\x20fund\x20recipient\x20(Entity\x20/\x20OrderHolder\x20/\x20etc.)','Multiple\x20Allocators\x20can\x20fire\x20on\x20different\x20terminal\x20nodes'],'example':{'terminal_node':'Complete','allocator':{'trigger_node':'Complete','sharing_who':'Entity','recipient':'merchant_treasury'}}}];export const NODE_FIELD_EXPLANATIONS=[{'field':'name','type':'string','required':!![],'semantic':'Node\x20name\x20(unique\x20identifier)','constraint':'<=64\x20BCS\x20bytes,\x20globally\x20unique'},{'field':'description','type':'string','required':![],'semantic':'Human-readable\x20description','constraint':'<=MAX_DESCRIPTION_LENGTH'},{'field':'b_pause','type':'boolean','required':![],'semantic':'Whether\x20node\x20is\x20paused\x20(blocks\x20execution)','constraint':'Default\x20false'},{'field':'b_submission','type':'boolean','required':![],'semantic':'Whether\x20submission\x20is\x20allowed\x20at\x20this\x20node','constraint':'Used\x20for\x20retained_submission\x20storage'}];export const PAIR_FIELD_EXPLANATIONS=[{'field':'prev_node','type':'string','required':!![],'semantic':'Source\x20node\x20(empty\x20\x27\x27\x20=\x20entry\x20point)','constraint':'Must\x20reference\x20existing\x20node\x20or\x20\x27\x27'},{'field':'next_node','type':'string','required':!![],'semantic':'Target\x20node','constraint':'Must\x20reference\x20existing\x20node'},{'field':'threshold','type':'number','required':!![],'semantic':'Required\x20total\x20forward\x20weight\x20to\x20advance','constraint':'>=0,\x20typically\x201-100'},{'field':'forwards','type':'array<Forward>','required':!![],'semantic':'List\x20of\x20Forwards\x20in\x20this\x20Pair','constraint':'1-20\x20Forwards\x20per\x20Pair'}];export const FORWARD_FIELD_EXPLANATIONS=[{'field':'name','type':'string','required':!![],'semantic':'Forward\x20name\x20(unique\x20within\x20Pair)','constraint':'<=64\x20BCS\x20bytes,\x20unique\x20within\x20Pair'},{'field':'weight','type':'number','required':!![],'semantic':'Weight\x20contribution\x20to\x20threshold','constraint':'>0,\x20typically\x201-100'},{'field':'namedOperator','type':'string\x20(optional)','required':![],'semantic':'Named\x20operator\x20role\x20(\x27\x27\x20=\x20OrderHolder)','constraint':'Optional,\x20but\x20Forward\x20needs\x20at\x20least\x20one\x20permission'},{'field':'permissionIndex','type':'number\x20(optional)','required':![],'semantic':'Permission\x20index\x20(custom\x20or\x20builtin)','constraint':'<\x20Permission.indices.length'},{'field':'guard','type':'address\x20(optional)','required':![],'semantic':'Guard\x20object\x20address\x20for\x20validation','constraint':'Must\x20be\x20CREATE-only\x20Guard,\x20already\x20created'},{'field':'retained_submission','type':'string\x20(optional)','required':![],'semantic':'Key\x20for\x20storing\x20submitted\x20values\x20in\x20history','constraint':'Uniquely\x20located\x20by\x20(current_node,\x20next_node,\x20forward_name)'}];export function identifyExecutionMode(a){const {threshold:b,forwards:c}=a,d=c['length'];if(b===0x1&&d===0x1)return'P-M-SEQ\x20(Sequential)';if(b===d&&d>=0x2){const e=c['some'](g=>g['permission_index']!==undefined)&&c['some'](g=>g['named_operator']!==undefined);return e?'P-M-AND\x20(Parallel\x20AND\x20/\x20Dual-Signature)':'P-M-AND\x20(Parallel\x20AND)';}if(b===0x64&&c['some'](g=>g['weight']<0x32&&g['weight']>0x0))return'P-M-VOTE\x20(Weighted\x20Voting)';if(b<d&&b>0x1)return'P-M-HYBRID\x20(Hybrid\x20Mode)';if(b===0x1&&d>=0x1)return'P-M-OR\x20(Parallel\x20OR)\x20or\x20P-M-SEQ\x20(if\x20single\x20Forward)';return'Unknown\x20(manual\x20review\x20needed)';}export function identifyTopology(a){const b=new Map(),c=new Map();for(const d of a){if(!b['has'](d['prev_node']))b['set'](d['prev_node'],[]);b['get'](d['prev_node'])['push'](d['next_node']);if(!c['has'](d['next_node']))c['set'](d['next_node'],[]);c['get'](d['next_node'])['push'](d['prev_node']);}for(const [e,f]of b){if(f['length']>0x1&&e!=='')return'P-M-COMPETING\x20(Competing\x20Pairs)';}for(const [g,h]of c){if(h['length']>0x1)return'P-M-FORKMERGE\x20(Fork-Merge)';}return'P-M-LINEAR\x20(Linear\x20Flow)';}export function matchSemanticPattern(a){const b=a['toLowerCase']();return SEMANTIC_TO_MACHINE_RULES['find'](c=>c['match_keywords']['some'](d=>b['includes'](d['toLowerCase']())));}export function explainForwardPermission(a){const b=a['named_operator']!==undefined&&a['named_operator']!==null,c=a['permission_index']!==undefined&&a['permission_index']!==null;if(b&&c){const d=a['named_operator']===''?'OrderHolder':'role\x20\x22'+a['named_operator']+'\x22';return'Mixed\x20permission:\x20'+d+'\x20OR\x20Permission\x20index\x20'+a['permission_index']+'\x20(either\x20sufficient)';}if(b){if(a['named_operator']==='')return'OrderHolder\x20(order\x20owner\x20+\x20agents)';return'NamedOperator\x20role\x20\x22'+a['named_operator']+'\x22';}if(c)return'Permission\x20index\x20'+a['permission_index'];return'❌\x20INVALID:\x20no\x20permission\x20set\x20(Forward\x20must\x20have\x20at\x20least\x20one\x20of\x20namedOperator\x20or\x20permissionIndex)';}export const MACHINE_CONSTRAINT_RULES=[{'id':'MC-C-01','name':'Node\x20count\x20<=\x20'+MAX_NODE_COUNT,'description':'MAX_NODE_COUNT','category':'creation','verification_location':'machine.move','on_chain_enforced':!![]},{'id':'MC-C-02','name':'Pair\x20count\x20per\x20node\x20<=\x20'+MAX_NODE_PAIR_COUNT,'description':'MAX_NODE_PAIR_COUNT','category':'creation','verification_location':'machine.move','on_chain_enforced':!![]},{'id':'MC-C-03','name':'Forward\x20count\x20per\x20Pair\x20<=\x20'+MAX_FORWARD_COUNT,'description':'MAX_FORWARD_COUNT','category':'creation','verification_location':'machine.move','on_chain_enforced':!![]},{'id':'MC-C-04','name':'Node\x20name\x20unique','description':'name\x20globally\x20unique','category':'creation','verification_location':'machine.move','on_chain_enforced':!![]},{'id':'MC-C-05','name':'Forward\x20name\x20unique\x20within\x20Pair','description':'name\x20unique\x20within\x20Pair','category':'creation','verification_location':'machine.move','on_chain_enforced':!![]},{'id':'MC-C-06','name':'Node\x20name\x20<=\x2064\x20BCS\x20bytes','description':'MAX_NAME_LENGTH','category':'creation','verification_location':'common.ts','on_chain_enforced':!![]},{'id':'MC-C-07','name':'Forward\x20has\x20at\x20least\x20one\x20permission','description':'namedOperator\x20or\x20permissionIndex','category':'creation','verification_location':'wowok-machine\x20SKILL','on_chain_enforced':![]},{'id':'MC-C-08','name':'permissionIndex\x20valid','description':'<\x20Permission.indices.length','category':'creation','verification_location':'permission.move','on_chain_enforced':!![]},{'id':'MC-C-09','name':'Guard\x20already\x20created','description':'guard\x20field\x20references\x20existing\x20Guard','category':'creation','verification_location':'guard.move','on_chain_enforced':!![]},{'id':'MC-C-10','name':'Guard\x20immutable','description':'Guard.b_immutable\x20==\x20true','category':'creation','verification_location':'guard.move','on_chain_enforced':!![]},{'id':'MC-C-11','name':'retained_submission\x20index\x20valid','description':'Corresponds\x20to\x20Guard\x20table\x20b_submission=true','category':'creation','verification_location':'guard.move','on_chain_enforced':!![]},{'id':'MC-C-12','name':'prev_node\x20references\x20valid','description':'Points\x20to\x20existing\x20node\x20or\x20\x27\x27','category':'creation','verification_location':'machine.move','on_chain_enforced':!![]},{'id':'MC-C-13','name':'threshold\x20>=\x200','description':'Non-negative','category':'creation','verification_location':'machine.move','on_chain_enforced':!![]},{'id':'MC-C-14','name':'weight\x20>\x200','description':'Positive','category':'creation','verification_location':'machine.move','on_chain_enforced':!![]},{'id':'MC-C-15','name':'description\x20length','description':'<=\x20MAX_DESCRIPTION_LENGTH','category':'creation','verification_location':'machine.move','on_chain_enforced':!![]},{'id':'MC-C-16','name':'bReplace\x20scope','description':'Acts\x20on\x20existing\x20node\x27s\x20pairs\x20list,\x20not\x20whole\x20Machine','category':'node_operation','verification_location':'machine.move:405-443','on_chain_enforced':!![]},{'id':'MC-C-17','name':'bReplace=false\x20merge\x20semantics','description':'Incremental\x20merge\x20by\x20prev_node\x20into\x20existing\x20pairs','category':'node_operation','verification_location':'machine.move:418-443','on_chain_enforced':!![]},{'id':'MC-C-18','name':'Non-existing\x20node\x20append','description':'push_back\x20new\x20node\x20(no\x20clear\x20triggered)','category':'node_operation','verification_location':'machine.move:418-443','on_chain_enforced':!![]},{'id':'MC-C-19','name':'Full\x20node\x20replacement\x20via\x20file\x20entry','description':'NodeJsonOrMarkdownFileSchema\x20(not\x20bReplace=true)','category':'node_operation','verification_location':'machine.ts:93-112','on_chain_enforced':![]},{'id':'MC-S-01','name':'At\x20least\x20one\x20entry\x20point','description':'Pair\x20with\x20prev_node=\x27\x27','category':'structure','verification_location':'machine-topology.ts','on_chain_enforced':![]},{'id':'MC-S-02','name':'At\x20least\x20one\x20terminal','description':'Node\x20with\x20no\x20outgoing\x20Pairs','category':'structure','verification_location':'machine-topology.ts','on_chain_enforced':![]},{'id':'MC-S-03','name':'No\x20orphaned\x20nodes','description':'All\x20non-entry\x20nodes\x20have\x20incoming\x20Pair','category':'structure','verification_location':'machine-topology.ts','on_chain_enforced':![]},{'id':'MC-S-04','name':'No\x20dead\x20branches','description':'All\x20thresholds\x20achievable','category':'structure','verification_location':'machine-topology.ts','on_chain_enforced':![]},{'id':'MC-S-05','name':'DAG\x20acyclic','description':'No\x20cycle\x20references','category':'structure','verification_location':'machine-topology.ts','on_chain_enforced':![]},{'id':'MC-P-01','name':'All\x20Guards\x20tested','description':'gen_passport\x20passed','category':'publish','verification_location':'confirm-gate.ts','on_chain_enforced':![]},{'id':'MC-P-02','name':'Backup\x20exported','description':'machineNode2file\x20executed','category':'publish','verification_location':'confirm-gate.ts','on_chain_enforced':![]},{'id':'MC-P-03','name':'Testnet\x20verified','description':'(recommended)\x20testnet\x20passed','category':'publish','verification_location':'confirm-gate.ts','on_chain_enforced':![]},{'id':'MC-P-04','name':'User\x20100%\x20confirmed','description':'ConfirmGate\x20passed','category':'publish','verification_location':'confirm-gate.ts','on_chain_enforced':![]},{'id':'MC-P-05','name':'Service\x20created\x20(if\x20bound)','description':'Service\x20exists','category':'publish','verification_location':'workflow-guidance.ts','on_chain_enforced':![]},{'id':'MC-R-01','name':'Node\x20ops\x20fail\x20after\x20publish','description':'E_ALREADY_PUBLISHED','category':'runtime','verification_location':'machine.move','on_chain_enforced':!![]},{'id':'MC-R-02','name':'Session\x20accumulation\x20correct','description':'weight\x20accumulation\x20logic','category':'runtime','verification_location':'progress.move','on_chain_enforced':!![]},{'id':'MC-R-03','name':'Competing\x20Pair\x20first-wins','description':'First\x20Pair\x20to\x20reach\x20threshold\x20wins','category':'runtime','verification_location':'progress.move','on_chain_enforced':!![]}];export function getConstraintsByCategory(a){return MACHINE_CONSTRAINT_RULES['filter'](b=>b['category']===a);}export function getConstraintById(a){return MACHINE_CONSTRAINT_RULES['find'](b=>b['id']===a);}export function getOnChainConstraints(){return MACHINE_CONSTRAINT_RULES['filter'](a=>a['on_chain_enforced']);}export function getOffChainConstraints(){return MACHINE_CONSTRAINT_RULES['filter'](a=>!a['on_chain_enforced']);}export const MACHINE_TRANSLATION_VERSION='1.0.0';export const MACHINE_PATTERNS_COUNT=SEMANTIC_TO_MACHINE_RULES['length'];export const MACHINE_CONSTRAINTS_COUNT=MACHINE_CONSTRAINT_RULES['length'];import{MAX_NODE_COUNT,MAX_NODE_PAIR_COUNT,MAX_FORWARD_COUNT}from'./onchain-constants.js';export function identifyNodeRole(a){const b=a['all_pairs']??[],c=(a['pairs']??b)['filter'](i=>i['prev_node']===a['name']),d=b['filter'](i=>i['next_node']===a['name']),e=b['some'](i=>i['prev_node']===''&&i['next_node']===a['name']),f=c['length']===0x0;if(e)return'entry';if(f)return'terminal';const g=new Set(c['map'](i=>i['next_node']));if(g['size']>0x1)return'branch';const h=new Set(d['map'](i=>i['prev_node'])['filter'](i=>i!==''));if(h['size']>0x1)return'merge';return'normal';}function explainGuardBinding(a){return{'address':a,'immutable_required':!![],'note':'Guard\x20'+a+'\x20validates\x20this\x20Forward\x27s\x20execution;\x20'+'must\x20be\x20immutable\x20(b_immutable=true)\x20and\x20pre-created\x20on-chain.'};}export function explainNode(a){const b=a['pairs']??[];return{'name':a['name'],'role':identifyNodeRole(a),'pairs':b['map'](c=>explainPair(c)),'description':a['description']};}export function explainPair(a){return{'prev_node':a['prev_node'],'next_node':a['next_node'],'threshold':a['threshold'],'execution_pattern':identifyExecutionMode(a),'forwards':a['forwards']['map'](b=>explainForward(b))};}export function explainForward(a){return{'name':a['name'],'permission':explainForwardPermission(a),'weight':a['weight'],'guard':a['guard']?explainGuardBinding(a['guard']):null,'retained_submission':a['retained_submission']??null};}
|
|
1
|
+
export const SEMANTIC_TO_MACHINE_RULES=[{'id':'P-M-SEQ','pattern_name':'Sequential\x20Execution','category':'execution','semantic_intent':'Single\x20actor\x20advances\x20workflow\x20one\x20step\x20at\x20a\x20time.\x20Each\x20Pair\x20has\x20threshold=1\x20with\x20a\x20single\x20Forward\x20weight=1.','match_keywords':['sequential','linear','one\x20step\x20at\x20a\x20time'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':'dynamic','structure':'Each\x20Pair:\x20{\x20threshold:\x201,\x20forwards:\x20[{\x20name,\x20weight:\x201,\x20namedOperator\x20|\x20permissionIndex\x20}]\x20}'},'constraints':['Each\x20Forward\x20must\x20have\x20at\x20least\x20one\x20of\x20namedOperator\x20or\x20permissionIndex','weight\x20>\x200\x20(typically\x201)','prev_node\x20references\x20must\x20form\x20a\x20valid\x20DAG\x20(no\x20cycles)'],'example':{'pair':{'prev_node':'NodeA','next_node':'NodeB','threshold':0x1,'forwards':[{'name':'Advance','weight':0x1,'named_operator':''}]}}},{'id':'P-M-AND','pattern_name':'Parallel\x20AND\x20(Dual-Signature\x20Consensus)','category':'execution','semantic_intent':'Multiple\x20parties\x20must\x20ALL\x20contribute\x20to\x20advance.\x20Pair\x20threshold=N\x20with\x20N\x20DISTINCT\x20Forwards\x20(weight=1\x20each)\x20—\x20one\x20forward\x20per\x20contributing\x20operator.\x20'+'A\x20single\x20forward\x20CANNOT\x20be\x20executed\x20by\x20two\x20different\x20people:\x20each\x20forward\x20is\x20single-operator-locked\x20by\x20the\x20first\x20account\x20that\x20accomplishes\x20it\x20'+'(once\x20accomplished,\x20a\x20forward\x20is\x20locked\x20to\x20that\x20operator;\x20a\x20second\x20operator\x20re-executing\x20the\x20same\x20accomplished\x20forward\x20aborts\x20E_NOT_THE_HOLDER,\x20and\x20the\x20weight\x20is\x20counted\x20only\x20once).\x20'+'So\x20N\x20operators\x20cooperating\x20on\x20a\x20threshold-N\x20transition\x20MUST\x20each\x20have\x20their\x20own\x20forward\x20in\x20the\x20Pair.','match_keywords':['and','all','dual-sig','both\x20confirm','both\x20must'],'schema_elements':{'threshold':0x2,'forward_count':0x2,'permission_model':'mixed','pair_count':0x1,'structure':'Pair:\x20{\x20threshold:\x20N,\x20forwards:\x20[{\x20weight:\x201,\x20namedOperator:\x20\x27\x27\x20},\x20{\x20weight:\x201,\x20permissionIndex:\x202\x20}]\x20}'},'constraints':['threshold\x20must\x20equal\x20the\x20number\x20of\x20required\x20Forwards','Each\x20contributing\x20operator\x20needs\x20a\x20DISTINCT\x20Forward\x20—\x20never\x20reuse\x20one\x20forward\x20for\x20two\x20people','Each\x20Forward\x20must\x20have\x20a\x20distinct\x20permission\x20model\x20(no\x20two\x20identical)','A\x20forward\x20is\x20locked\x20by\x20its\x20first\x20operator:\x20once\x20accomplished\x20it\x20contributes\x20its\x20weight\x20once\x20and\x20re-execution\x20by\x20others\x20aborts\x20E_NOT_THE_HOLDER','If\x20either\x20party\x20fails\x20to\x20sign,\x20workflow\x20stalls\x20—\x20consider\x20adding\x20timeout\x20Guard'],'example':{'pair':{'prev_node':'Initiated','next_node':'Approved','threshold':0x2,'forwards':[{'name':'CustomerApprove','weight':0x1,'named_operator':''},{'name':'MerchantApprove','weight':0x1,'permission_index':0x2}]}}},{'id':'P-M-OR','pattern_name':'Parallel\x20OR\x20(Any-One\x20Execution)','category':'execution','semantic_intent':'Any\x20one\x20of\x20multiple\x20paths\x20can\x20advance\x20the\x20workflow.\x20Multiple\x20Pairs,\x20each\x20threshold=1.','match_keywords':['or','any','either'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':'dynamic','structure':'Multiple\x20Pairs\x20from\x20same\x20prev_node,\x20each\x20with\x20threshold=1'},'constraints':['Distinct\x20next_node\x20for\x20each\x20Pair\x20(or\x20distinct\x20Forward)','If\x20targets\x20are\x20different\x20nodes,\x20this\x20becomes\x20COMPETING\x20topology','If\x20targets\x20are\x20same\x20node,\x20alternative\x20paths\x20converge\x20(FORKMERGE)'],'example':{'pairs':[{'prev_node':'Choice','next_node':'PathA','threshold':0x1,'forwards':[{'name':'ChooseA','weight':0x1,'named_operator':''}]},{'prev_node':'Choice','next_node':'PathB','threshold':0x1,'forwards':[{'name':'ChooseB','weight':0x1,'named_operator':''}]}]}},{'id':'P-M-VOTE','pattern_name':'Weighted\x20Voting','category':'execution','semantic_intent':'Multiple\x20parties\x20vote\x20with\x20unequal\x20weights.\x20threshold=100,\x20varied\x20weights\x20(e.g.\x2060+40).\x20'+'Guard\x20extracts\x20weight\x20dynamically\x20from\x20Arbitration\x20object.','match_keywords':['vote','weight','stakeholder'],'schema_elements':{'threshold':0x64,'forward_count':'dynamic','permission_model':'mixed','pair_count':0x1,'structure':'Pair:\x20{\x20threshold:\x20100,\x20forwards:\x20[{\x20weight:\x2060,\x20permissionIndex:\x202,\x20guard:\x20arb_voting_guard\x20},\x20{\x20weight:\x208,\x20namedOperator:\x20\x27member\x27,\x20guard:\x20arb_voting_guard\x20}]\x20}'},'constraints':['Guard\x20MUST\x20check\x20arb.voted\x20has\x20[Signer]\x20to\x20prevent\x20double-voting\x20(R-X1-14\x20CRITICAL)','Weight\x20is\x20query-derived\x20from\x20Arbitration\x20object\x20(not\x20hardcoded\x20in\x20Forward)','Competing\x20Pair\x20often\x20added:\x20Approved\x20vs\x20Rejected\x20(timeout)\x20—\x20first-wins','Forward\x20weight\x20field\x20is\x20just\x20session\x20counter;\x20actual\x20weight\x20from\x20Guard'],'example':{'pair':{'prev_node':'Voting','next_node':'Approved','threshold':0x64,'forwards':[{'name':'ChiefVote','weight':0x3c,'permission_index':0x2,'guard':'arb_voting_guard'},{'name':'MemberVote','weight':0x8,'named_operator':'member','guard':'arb_voting_guard'}]}}},{'id':'P-M-HYBRID','pattern_name':'Hybrid\x20Mode\x20(Key\x20Party\x20Required\x20+\x20Others\x20Optional)','category':'execution','semantic_intent':'One\x20key\x20party\x20must\x20contribute,\x20others\x20are\x20optional.\x20threshold=5\x20with\x20mixed\x20weights\x20(3+1+1).','match_keywords':['hybrid','mixed','key\x20party'],'schema_elements':{'threshold':0x5,'forward_count':0x3,'permission_model':'mixed','pair_count':0x1,'structure':'Pair:\x20{\x20threshold:\x205,\x20forwards:\x20[{\x20weight:\x203,\x20permissionIndex:\x202\x20(key)\x20},\x20{\x20weight:\x201,\x20namedOperator:\x20\x27role1\x27\x20},\x20{\x20weight:\x201,\x20namedOperator:\x20\x27role2\x27\x20}]\x20}'},'constraints':['Key\x20party\x27s\x20weight\x20must\x20alone\x20be\x20insufficient\x20(otherwise\x20optional\x20parties\x20are\x20meaningless)','Total\x20weight\x20of\x20all\x20Forwards\x20must\x20be\x20>=\x20threshold','Each\x20Forward\x20must\x20have\x20distinct\x20permission\x20model'],'example':{'pair':{'prev_node':'Review','next_node':'Approved','threshold':0x5,'forwards':[{'name':'ManagerApprove','weight':0x3,'permission_index':0x2},{'name':'EngineerApprove','weight':0x1,'named_operator':'engineer'},{'name':'QAApprove','weight':0x1,'named_operator':'qa'}]}}},{'id':'P-M-LINEAR','pattern_name':'Linear\x20Flow\x20(No\x20Branches)','category':'topology','semantic_intent':'Workflow\x20progresses\x20in\x20a\x20straight\x20line\x20with\x20no\x20branches.','match_keywords':['linear','straight','no\x20branches'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':'dynamic','structure':'Chain\x20of\x20Pairs:\x20A->B->C->D->...->Terminal'},'constraints':['Exactly\x20one\x20entry\x20Pair\x20(prev_node=\x27\x27)','Exactly\x20one\x20terminal\x20node\x20(no\x20outgoing\x20Pairs)','Each\x20non-terminal\x20node\x20has\x20exactly\x20one\x20outgoing\x20Pair'],'example':{'topology':'Entry\x20->\x20A\x20->\x20B\x20->\x20C\x20->\x20Terminal'}},{'id':'P-M-FORKMERGE','pattern_name':'Fork-Merge\x20(Parallel\x20Branches\x20Converging)','category':'topology','semantic_intent':'Main\x20flow\x20forks\x20into\x20multiple\x20parallel\x20branches,\x20then\x20merges\x20back\x20to\x20main\x20flow.','match_keywords':['fork','merge','parallel'],'schema_elements':{'threshold':0x1,'forward_count':'dynamic','permission_model':'mixed','pair_count':'dynamic','structure':'ForkNode\x20->\x20{BranchA,\x20BranchB}\x20->\x20MergeNode'},'constraints':['Multiple\x20Pairs\x20from\x20ForkNode\x20(one\x20per\x20branch)','All\x20branches\x20must\x20eventually\x20reach\x20MergeNode','MergeNode\x20has\x20multiple\x20incoming\x20Pairs\x20(merge\x20point)','Threshold\x20at\x20MergeNode\x20determines\x20if\x20all\x20branches\x20must\x20complete\x20or\x20just\x20some'],'example':{'topology':'ForkNode\x20->\x20BranchA\x20->\x20MergeNode;\x20ForkNode\x20->\x20BranchB\x20->\x20MergeNode'}},{'id':'P-M-COMPETING','pattern_name':'Competing\x20Pairs\x20(Mutually\x20Exclusive\x20Branches)','category':'topology','semantic_intent':'Multiple\x20Pairs\x20from\x20same\x20node\x20compete;\x20first\x20Pair\x20to\x20meet\x20threshold\x20wins,\x20others\x20abandoned.','match_keywords':['competing','exclusive','race'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':'dynamic','structure':'Same\x20prev_node\x20->\x20multiple\x20next_nodes\x20(each\x20Pair\x20independent)'},'constraints':['Mutually\x20exclusive\x20—\x20only\x20one\x20Pair\x20can\x20complete\x20per\x20session','First\x20Pair\x20to\x20reach\x20threshold\x20wins','Other\x20incomplete\x20Pairs\x20are\x20abandoned','Verify\x20no\x20dead\x20branches\x20(a\x20Pair\x20that\x20always\x20loses\x20to\x20another)'],'example':{'topology':'Shipped\x20->\x20Received;\x20Shipped\x20->\x20Lost;\x20Shipped\x20->\x20Return\x20(first\x20wins)'}},{'id':'P-M-PERM-SINGLE','pattern_name':'Single\x20Permission','category':'permission','semantic_intent':'Forward\x20uses\x20only\x20one\x20permission\x20type:\x20namedOperator\x20OR\x20permissionIndex.','match_keywords':['single\x20permission'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':0x1,'structure':'Forward:\x20{\x20name,\x20weight:\x201,\x20namedOperator:\x20\x27<role>\x27\x20|\x20permissionIndex:\x20<index>\x20}\x20(only\x20one\x20set)'},'constraints':['Either\x20namedOperator\x20or\x20permissionIndex\x20is\x20set\x20(not\x20both)','Empty\x20namedOperator=\x27\x27\x20grants\x20OrderHolder\x20(order\x20owner\x20+\x20agents)'],'example':{'forward':{'name':'Ship','weight':0x1,'permission_index':0x2}}},{'id':'P-M-PERM-MIXED','pattern_name':'Mixed\x20Permission\x20(Either-Or)','category':'permission','semantic_intent':'Forward\x20allows\x20EITHER\x20permission\x20to\x20execute\x20(internal\x20staff\x20OR\x20external\x20roles).','match_keywords':['mixed\x20permission','either'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'mixed','pair_count':0x1,'structure':'Forward:\x20{\x20name,\x20weight:\x201,\x20namedOperator:\x20\x27<role>\x27,\x20permissionIndex:\x20<index>\x20}\x20(both\x20set)'},'constraints':['Both\x20namedOperator\x20and\x20permissionIndex\x20are\x20set','Executor\x20needs\x20EITHER\x20permission\x20—\x20passing\x20either\x20check\x20is\x20sufficient','Use\x20case:\x20allow\x20internal\x20staff\x20OR\x20external\x20role\x20to\x20execute\x20the\x20same\x20Forward'],'example':{'forward':{'name':'Confirm','weight':0x1,'named_operator':'auditor','permission_index':0x2}}},{'id':'P-M-CROSS-MACHINE','pattern_name':'Cross-Machine\x20Dependency','category':'integration','semantic_intent':'Machine\x20B\x27s\x20Forward\x20Guard\x20queries\x20Machine\x20A\x27s\x20Progress\x20to\x20verify\x20upstream\x20completion.','match_keywords':['cross-machine','supply\x20chain','upstream'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':0x1,'structure':'Forward:\x20{\x20guard:\x20\x27upstream_progress_guard\x27,\x20retained_submission:\x20\x27upstream_progress_id\x27\x20}'},'constraints':['Machine\x20A\x20MUST\x20be\x20published\x20before\x20Machine\x20B\x20(dependency\x20order)','Guard\x20uses\x20convert_witness=100\x20to\x20convert\x20submitted\x20Order/Progress\x20ID\x20into\x20queryable\x20Progress','Cross-Machine\x20dependency\x20is\x20one-way\x20(no\x20cycles)','Dependency\x20verification:\x20enforced\x20when\x20the\x20Progress\x20object\x20is\x20created\x20(creation\x20checks\x20the\x20bound\x20Machine\x20is\x20published\x20—\x20see\x2006\x20§14.6)','retained_submission\x20stores\x20upstream\x20Progress\x20ID\x20for\x20audit'],'example':{'forward':{'name':'VerifyUpstream','weight':0x1,'permission_index':0x2,'guard':'upstream_progress_guard','retained_submission':'upstream_progress_id'}}},{'id':'P-M-ALLOCATION-INTEGRATED','pattern_name':'Allocation-Integrated\x20Terminal','category':'integration','semantic_intent':'Terminal\x20node\x20triggers\x20Allocator\x20to\x20distribute\x20funds.\x20Allocation\x20independent\x20of\x20Machine\x20flow.','match_keywords':['allocation','fund\x20distribution','terminal'],'schema_elements':{'threshold':0x1,'forward_count':0x1,'permission_model':'single','pair_count':0x1,'structure':'Terminal\x20node\x20->\x20Allocator\x20entry\x20(configured\x20on\x20Service\x20order_allocators)'},'constraints':['Terminal\x20node\x20must\x20be\x20referenced\x20in\x20Service\x20order_allocators','Allocator\x20Guard\x20verifies\x20progress.current\x20==\x20terminal_node_name','sharing.who\x20determines\x20fund\x20recipient\x20(Entity\x20/\x20OrderHolder\x20/\x20etc.)','Multiple\x20Allocators\x20can\x20fire\x20on\x20different\x20terminal\x20nodes'],'example':{'terminal_node':'Complete','allocator':{'trigger_node':'Complete','sharing_who':'Entity','recipient':'merchant_treasury'}}}];export const NODE_FIELD_EXPLANATIONS=[{'field':'name','type':'string','required':!![],'semantic':'Node\x20name\x20(unique\x20identifier)','constraint':'<=64\x20BCS\x20bytes,\x20globally\x20unique'},{'field':'description','type':'string','required':![],'semantic':'Human-readable\x20description','constraint':'<=MAX_DESCRIPTION_LENGTH'},{'field':'b_pause','type':'boolean','required':![],'semantic':'Whether\x20node\x20is\x20paused\x20(blocks\x20execution)','constraint':'Default\x20false'},{'field':'b_submission','type':'boolean','required':![],'semantic':'Whether\x20submission\x20is\x20allowed\x20at\x20this\x20node','constraint':'Used\x20for\x20retained_submission\x20storage'}];export const PAIR_FIELD_EXPLANATIONS=[{'field':'prev_node','type':'string','required':!![],'semantic':'Source\x20node\x20(empty\x20\x27\x27\x20=\x20entry\x20point)','constraint':'Must\x20reference\x20existing\x20node\x20or\x20\x27\x27'},{'field':'next_node','type':'string','required':!![],'semantic':'Target\x20node','constraint':'Must\x20reference\x20existing\x20node'},{'field':'threshold','type':'number','required':!![],'semantic':'Required\x20total\x20forward\x20weight\x20to\x20advance','constraint':'>=0,\x20typically\x201-100'},{'field':'forwards','type':'array<Forward>','required':!![],'semantic':'List\x20of\x20Forwards\x20in\x20this\x20Pair','constraint':'1-20\x20Forwards\x20per\x20Pair'}];export const FORWARD_FIELD_EXPLANATIONS=[{'field':'name','type':'string','required':!![],'semantic':'Forward\x20name\x20(unique\x20within\x20Pair)','constraint':'<=64\x20BCS\x20bytes,\x20unique\x20within\x20Pair'},{'field':'weight','type':'number','required':!![],'semantic':'Weight\x20contribution\x20to\x20threshold','constraint':'>0,\x20typically\x201-100'},{'field':'namedOperator','type':'string\x20(optional)','required':![],'semantic':'Named\x20operator\x20role\x20(\x27\x27\x20=\x20OrderHolder)','constraint':'Optional,\x20but\x20Forward\x20needs\x20at\x20least\x20one\x20permission'},{'field':'permissionIndex','type':'number\x20(optional)','required':![],'semantic':'Permission\x20index\x20(custom\x20or\x20builtin)','constraint':'<\x20Permission.indices.length'},{'field':'guard','type':'address\x20(optional)','required':![],'semantic':'Guard\x20object\x20address\x20for\x20validation','constraint':'Must\x20be\x20CREATE-only\x20Guard,\x20already\x20created'},{'field':'retained_submission','type':'string\x20(optional)','required':![],'semantic':'Key\x20for\x20storing\x20submitted\x20values\x20in\x20history','constraint':'Uniquely\x20located\x20by\x20(current_node,\x20next_node,\x20forward_name)'}];export function identifyExecutionMode(a){const {threshold:b,forwards:c}=a,d=c['length'];if(b===0x1&&d===0x1)return'P-M-SEQ\x20(Sequential)';if(b===d&&d>=0x2){const e=c['some'](g=>g['permission_index']!==undefined)&&c['some'](g=>g['named_operator']!==undefined);return e?'P-M-AND\x20(Parallel\x20AND\x20/\x20Dual-Signature)':'P-M-AND\x20(Parallel\x20AND)';}if(b===0x64&&c['some'](g=>g['weight']<0x32&&g['weight']>0x0))return'P-M-VOTE\x20(Weighted\x20Voting)';if(b<d&&b>0x1)return'P-M-HYBRID\x20(Hybrid\x20Mode)';if(b===0x1&&d>=0x1)return'P-M-OR\x20(Parallel\x20OR)\x20or\x20P-M-SEQ\x20(if\x20single\x20Forward)';return'Unknown\x20(manual\x20review\x20needed)';}export function identifyTopology(a){const b=new Map(),c=new Map();for(const d of a){if(!b['has'](d['prev_node']))b['set'](d['prev_node'],[]);b['get'](d['prev_node'])['push'](d['next_node']);if(!c['has'](d['next_node']))c['set'](d['next_node'],[]);c['get'](d['next_node'])['push'](d['prev_node']);}for(const [e,f]of b){if(f['length']>0x1&&e!=='')return'P-M-COMPETING\x20(Competing\x20Pairs)';}for(const [g,h]of c){if(h['length']>0x1)return'P-M-FORKMERGE\x20(Fork-Merge)';}return'P-M-LINEAR\x20(Linear\x20Flow)';}export function matchSemanticPattern(a){const b=a['toLowerCase']();return SEMANTIC_TO_MACHINE_RULES['find'](c=>c['match_keywords']['some'](d=>b['includes'](d['toLowerCase']())));}export function explainForwardPermission(a){const b=a['named_operator']!==undefined&&a['named_operator']!==null,c=a['permission_index']!==undefined&&a['permission_index']!==null;if(b&&c){const d=a['named_operator']===''?'OrderHolder':'role\x20\x22'+a['named_operator']+'\x22';return'Mixed\x20permission:\x20'+d+'\x20OR\x20Permission\x20index\x20'+a['permission_index']+'\x20(either\x20sufficient)';}if(b){if(a['named_operator']==='')return'OrderHolder\x20(order\x20owner\x20+\x20agents)';return'NamedOperator\x20role\x20\x22'+a['named_operator']+'\x22';}if(c)return'Permission\x20index\x20'+a['permission_index'];return'❌\x20INVALID:\x20no\x20permission\x20set\x20(Forward\x20must\x20have\x20at\x20least\x20one\x20of\x20namedOperator\x20or\x20permissionIndex)';}export const MACHINE_CONSTRAINT_RULES=[{'id':'MC-C-01','name':'Node\x20count\x20<=\x20'+MAX_NODE_COUNT,'description':'MAX_NODE_COUNT','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-02','name':'Pair\x20count\x20per\x20node\x20<=\x20'+MAX_NODE_PAIR_COUNT,'description':'MAX_NODE_PAIR_COUNT','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-03','name':'Forward\x20count\x20per\x20Pair\x20<=\x20'+MAX_FORWARD_COUNT,'description':'MAX_FORWARD_COUNT','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-04','name':'Node\x20name\x20unique','description':'name\x20globally\x20unique','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-05','name':'Forward\x20name\x20unique\x20within\x20Pair','description':'name\x20unique\x20within\x20Pair','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-06','name':'Node\x20name\x20<=\x2064\x20BCS\x20bytes','description':'MAX_NAME_LENGTH','category':'creation','verification_location':'common.ts','on_chain_enforced':!![]},{'id':'MC-C-07','name':'Forward\x20has\x20at\x20least\x20one\x20permission','description':'namedOperator\x20or\x20permissionIndex','category':'creation','verification_location':'wowok-machine\x20SKILL','on_chain_enforced':![]},{'id':'MC-C-08','name':'permissionIndex\x20valid','description':'<\x20Permission.indices.length','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-09','name':'Guard\x20already\x20created','description':'guard\x20field\x20references\x20existing\x20Guard','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-10','name':'Guard\x20immutable','description':'Guard.b_immutable\x20==\x20true','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-11','name':'retained_submission\x20index\x20valid','description':'Corresponds\x20to\x20Guard\x20table\x20b_submission=true','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-12','name':'prev_node\x20references\x20valid','description':'Points\x20to\x20existing\x20node\x20or\x20\x27\x27','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-13','name':'threshold\x20>=\x200','description':'Non-negative','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-14','name':'weight\x20>\x200','description':'Positive','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-15','name':'description\x20length','description':'<=\x20MAX_DESCRIPTION_LENGTH','category':'creation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-16','name':'bReplace\x20scope','description':'Acts\x20on\x20existing\x20node\x27s\x20pairs\x20list,\x20not\x20whole\x20Machine','category':'node_operation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-17','name':'bReplace=false\x20merge\x20semantics','description':'Incremental\x20merge\x20by\x20prev_node\x20into\x20existing\x20pairs','category':'node_operation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-18','name':'Non-existing\x20node\x20append','description':'Appends\x20the\x20new\x20node\x20(no\x20clear\x20triggered)','category':'node_operation','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-C-19','name':'Full\x20node\x20replacement\x20via\x20file\x20entry','description':'NodeJsonOrMarkdownFileSchema\x20(not\x20bReplace=true)','category':'node_operation','verification_location':'machine.ts:93-112','on_chain_enforced':![]},{'id':'MC-S-01','name':'At\x20least\x20one\x20entry\x20point','description':'Pair\x20with\x20prev_node=\x27\x27','category':'structure','verification_location':'machine-topology.ts','on_chain_enforced':![]},{'id':'MC-S-02','name':'At\x20least\x20one\x20terminal','description':'Node\x20with\x20no\x20outgoing\x20Pairs','category':'structure','verification_location':'machine-topology.ts','on_chain_enforced':![]},{'id':'MC-S-03','name':'No\x20orphaned\x20nodes','description':'All\x20non-entry\x20nodes\x20have\x20incoming\x20Pair','category':'structure','verification_location':'machine-topology.ts','on_chain_enforced':![]},{'id':'MC-S-04','name':'No\x20dead\x20branches','description':'All\x20thresholds\x20achievable','category':'structure','verification_location':'machine-topology.ts','on_chain_enforced':![]},{'id':'MC-S-05','name':'DAG\x20acyclic','description':'No\x20cycle\x20references','category':'structure','verification_location':'machine-topology.ts','on_chain_enforced':![]},{'id':'MC-P-01','name':'All\x20Guards\x20tested','description':'gen_passport\x20passed','category':'publish','verification_location':'confirm-gate.ts','on_chain_enforced':![]},{'id':'MC-P-02','name':'Backup\x20exported','description':'machineNode2file\x20executed','category':'publish','verification_location':'confirm-gate.ts','on_chain_enforced':![]},{'id':'MC-P-03','name':'Testnet\x20verified','description':'(recommended)\x20testnet\x20passed','category':'publish','verification_location':'confirm-gate.ts','on_chain_enforced':![]},{'id':'MC-P-04','name':'User\x20100%\x20confirmed','description':'ConfirmGate\x20passed','category':'publish','verification_location':'confirm-gate.ts','on_chain_enforced':![]},{'id':'MC-P-05','name':'Service\x20created\x20(if\x20bound)','description':'Service\x20exists','category':'publish','verification_location':'workflow-guidance.ts','on_chain_enforced':![]},{'id':'MC-R-01','name':'Node\x20ops\x20fail\x20after\x20publish','description':'E_ALREADY_PUBLISHED','category':'runtime','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-R-02','name':'Session\x20accumulation\x20correct','description':'weight\x20accumulation\x20logic','category':'runtime','verification_location':'on-chain','on_chain_enforced':!![]},{'id':'MC-R-03','name':'Competing\x20Pair\x20first-wins','description':'First\x20Pair\x20to\x20reach\x20threshold\x20wins','category':'runtime','verification_location':'on-chain','on_chain_enforced':!![]}];export function getConstraintsByCategory(a){return MACHINE_CONSTRAINT_RULES['filter'](b=>b['category']===a);}export function getConstraintById(a){return MACHINE_CONSTRAINT_RULES['find'](b=>b['id']===a);}export function getOnChainConstraints(){return MACHINE_CONSTRAINT_RULES['filter'](a=>a['on_chain_enforced']);}export function getOffChainConstraints(){return MACHINE_CONSTRAINT_RULES['filter'](a=>!a['on_chain_enforced']);}export const MACHINE_TRANSLATION_VERSION='1.0.0';export const MACHINE_PATTERNS_COUNT=SEMANTIC_TO_MACHINE_RULES['length'];export const MACHINE_CONSTRAINTS_COUNT=MACHINE_CONSTRAINT_RULES['length'];import{MAX_NODE_COUNT,MAX_NODE_PAIR_COUNT,MAX_FORWARD_COUNT}from'./onchain-constants.js';export function identifyNodeRole(a){const b=a['all_pairs']??[],c=(a['pairs']??b)['filter'](i=>i['prev_node']===a['name']),d=b['filter'](i=>i['next_node']===a['name']),e=b['some'](i=>i['prev_node']===''&&i['next_node']===a['name']),f=c['length']===0x0;if(e)return'entry';if(f)return'terminal';const g=new Set(c['map'](i=>i['next_node']));if(g['size']>0x1)return'branch';const h=new Set(d['map'](i=>i['prev_node'])['filter'](i=>i!==''));if(h['size']>0x1)return'merge';return'normal';}function explainGuardBinding(a){return{'address':a,'immutable_required':!![],'note':'Guard\x20'+a+'\x20validates\x20this\x20Forward\x27s\x20execution;\x20'+'must\x20be\x20immutable\x20(b_immutable=true)\x20and\x20pre-created\x20on-chain.'};}export function explainNode(a){const b=a['pairs']??[];return{'name':a['name'],'role':identifyNodeRole(a),'pairs':b['map'](c=>explainPair(c)),'description':a['description']};}export function explainPair(a){return{'prev_node':a['prev_node'],'next_node':a['next_node'],'threshold':a['threshold'],'execution_pattern':identifyExecutionMode(a),'forwards':a['forwards']['map'](b=>explainForward(b))};}export function explainForward(a){return{'name':a['name'],'permission':explainForwardPermission(a),'weight':a['weight'],'guard':a['guard']?explainGuardBinding(a['guard']):null,'retained_submission':a['retained_submission']??null};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{batchFetchObjectLinkerCore,fetchEntityPermission}from'../graph/onchain/sdk-batch.js';export const MIGRATION_CHECKLIST=['Payment\x20token:\x20testnet\x20always\x20settles\x20in\x20WOW;\x20on\x20mainnet\x20decide\x20whether\x20to\x20switch\x20to\x20USDT\x20/\x20USDC\x20/\x20ETH\x20/\x20BTC\x20/\x20WOW\x20(query\x20wowok_buildin_info\x20info=\x27mainnet\x20bridge\x20tokens\x27\x20for\x20each\x20token\x27s\x20exact\x20type\x20tag).','Location:\x20in-person\x20/\x20digital\x20services\x20MUST\x20set\x20a\x20correct\x20Service.location\x20(the\x20service\x20area\x20gates\x20purchase);\x20mailing\x20services\x20set\x20a\x20delivery\x20region\x20instead.','Arbitration:\x20strongly\x20recommended\x20on\x20mainnet\x20(bind\x20a\x20third-party\x20Arbitration\x20so\x20neither\x20you\x20nor\x20the\x20customer\x20controls\x20the\x20verdict);\x20optional\x20on\x20testnet.','WIP:\x20if\x20a\x20product\x20carries\x20a\x20WIP\x20file,\x20it\x20MUST\x20be\x20deployed\x20to\x20a\x20public\x20URL\x20—\x20on-chain\x20stores\x20only\x20the\x20URL\x20+\x20hash,\x20not\x20the\x20file.','Gas:\x20mainnet\x20deployment\x20needs\x20gas\x20(top\x20up\x20via\x20the\x20ETH\x20mainnet\x20bridge\x20or\x20airdrop);\x20testnet\x20is\x20free\x20via\x20the\x20faucet.'];async function snapshot(a,b,c){const d={'network':b,'has_build':![],'permissions':[],'services':[],'machines':[],'treasuries':[],'rewards':[],'contacts':[],'arbitrations':[]},e=await fetchEntityPermission(a,b,c),f=[...new Set((e?.['items']??[])['map'](h=>h['permission']))];d['permissions']=f;const g=await batchFetchObjectLinkerCore(f,b,c)['catch'](()=>undefined);for(const h of f){for(const i of g?.['get'](h)?.['items']??[]){const j=String(i?.['who']??'')['toLowerCase']();if(!j)continue;const k=objectTypeFromAddress(j);if(k===ObjectType['Service'])d['services']['push'](j);else{if(k===ObjectType['Machine'])d['machines']['push'](j);else{if(k===ObjectType['Treasury'])d['treasuries']['push'](j);else{if(k===ObjectType['Reward'])d['rewards']['push'](j);else{if(k===ObjectType['Contact'])d['contacts']['push'](j);else{if(k===ObjectType['Arbitration'])d['arbitrations']['push'](j);}}}}}}}return d['has_build']=f['length']>0x0||d['services']['length']>0x0||d['machines']['length']>0x0,d;}export async function migrationPreflight(a){const b=String(a['account']??'')['
|
|
1
|
+
import{objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{batchFetchObjectLinkerCore,fetchEntityPermission}from'../graph/onchain/sdk-batch.js';import{listLocalAccounts}from'./workflow-guidance.js';export const MIGRATION_CHECKLIST=['Payment\x20token:\x20testnet\x20always\x20settles\x20in\x20WOW;\x20on\x20mainnet\x20decide\x20whether\x20to\x20switch\x20to\x20USDT\x20/\x20USDC\x20/\x20ETH\x20/\x20BTC\x20/\x20WOW\x20(query\x20wowok_buildin_info\x20info=\x27mainnet\x20bridge\x20tokens\x27\x20for\x20each\x20token\x27s\x20exact\x20type\x20tag).','Location:\x20in-person\x20/\x20digital\x20services\x20MUST\x20set\x20a\x20correct\x20Service.location\x20(the\x20service\x20area\x20gates\x20purchase);\x20mailing\x20services\x20set\x20a\x20delivery\x20region\x20instead.','Arbitration:\x20strongly\x20recommended\x20on\x20mainnet\x20(bind\x20a\x20third-party\x20Arbitration\x20so\x20neither\x20you\x20nor\x20the\x20customer\x20controls\x20the\x20verdict);\x20optional\x20on\x20testnet.','WIP:\x20if\x20a\x20product\x20carries\x20a\x20WIP\x20file,\x20it\x20MUST\x20be\x20deployed\x20to\x20a\x20public\x20URL\x20—\x20on-chain\x20stores\x20only\x20the\x20URL\x20+\x20hash,\x20not\x20the\x20file.','Gas:\x20mainnet\x20deployment\x20needs\x20gas\x20(top\x20up\x20via\x20the\x20ETH\x20mainnet\x20bridge\x20or\x20airdrop);\x20testnet\x20is\x20free\x20via\x20the\x20faucet.'];async function snapshot(a,b,c){const d={'network':b,'has_build':![],'permissions':[],'services':[],'machines':[],'treasuries':[],'rewards':[],'contacts':[],'arbitrations':[]},e=await fetchEntityPermission(a,b,c),f=[...new Set((e?.['items']??[])['map'](h=>h['permission']))];d['permissions']=f;const g=await batchFetchObjectLinkerCore(f,b,c)['catch'](()=>undefined);for(const h of f){for(const i of g?.['get'](h)?.['items']??[]){const j=String(i?.['who']??'')['toLowerCase']();if(!j)continue;const k=objectTypeFromAddress(j);if(k===ObjectType['Service'])d['services']['push'](j);else{if(k===ObjectType['Machine'])d['machines']['push'](j);else{if(k===ObjectType['Treasury'])d['treasuries']['push'](j);else{if(k===ObjectType['Reward'])d['rewards']['push'](j);else{if(k===ObjectType['Contact'])d['contacts']['push'](j);else{if(k===ObjectType['Arbitration'])d['arbitrations']['push'](j);}}}}}}}return d['has_build']=f['length']>0x0||d['services']['length']>0x0||d['machines']['length']>0x0,d;}export async function migrationPreflight(a){const b=String(a['account']??'')['trim']();if(!b)throw new Error('migration_preflight\x20requires\x20\x27account\x27\x20(an\x20account\x20address\x20or\x20name).\x20'+'Pass\x20the\x20account\x20to\x20check\x20its\x20testnet\x20vs\x20mainnet\x20build\x20status.');let c=b['toLowerCase']();if(!c['startsWith']('0x')){const h=(await listLocalAccounts())['find'](i=>i['name']?.['toLowerCase']()===b['toLowerCase']());if(!h?.['address'])throw new Error('invalid\x20parameter:account\x20\x27'+b+'\x27\x20not\x20found\x20among\x20local\x20accounts\x20—\x20check\x20account_list,\x20or\x20pass\x20the\x20account\x27s\x200x\x20address');c=String(h['address'])['toLowerCase']();}const d=a['source_network']??'testnet',e=a['target_network']??'mainnet',[f,g]=await Promise['all']([snapshot(c,d,a['no_cache']),snapshot(c,e,a['no_cache'])]);return{'action':'migration_preflight','account':c,'source_network':d,'target_network':e,'source':f,'target':g,'migration_checklist':MIGRATION_CHECKLIST};}
|