@wowok/agent-mcp 3.2.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/exposure.d.ts +8 -8
- package/dist/config/judgment.d.ts +20 -20
- package/dist/config/rule-engine.d.ts +20 -20
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/graph/onchain/facts.js +1 -1
- package/dist/graph/onchain/sdk-batch.d.ts +1 -0
- package/dist/graph/onchain/sdk-batch.js +1 -1
- package/dist/graph/onchain/sdk-dataplane.d.ts +1 -0
- package/dist/graph/onchain/sdk-dataplane.js +1 -1
- package/dist/knowledge/allocation-templates.d.ts +1 -1
- package/dist/knowledge/allocation-templates.js +1 -1
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +1 -1
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/builtin-templates.d.ts +1 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/discount-threshold.d.ts +15 -0
- package/dist/knowledge/discount-threshold.js +1 -0
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.d.ts +2 -2
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-generalizer.d.ts +38 -1
- package/dist/knowledge/industry-generalizer.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/onchain-constants.d.ts +2 -2
- package/dist/knowledge/onchain-constants.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +10 -0
- package/dist/knowledge/strategy-manuals.d.ts +1 -1
- package/dist/knowledge/strategy-manuals.js +1 -1
- package/dist/knowledge/template-loader.d.ts +20 -0
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/arbitrator-interest.js +1 -1
- package/dist/participation/customer-interest.js +1 -1
- package/dist/participation/merchant-interest.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/mode-actions.d.ts +12 -1
- package/dist/playbooks/service-build/mode-actions.js +1 -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/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/reverse-mapping-refund-p0-5.spec.d.ts +1 -0
- package/dist/playbooks/service-build/reverse-mapping-refund-p0-5.spec.js +1 -0
- package/dist/playbooks/service-build/reverse-mapping.js +1 -1
- package/dist/playbooks/service-build/semantic-graph.js +1 -1
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/review/index.js +1 -1
- package/dist/role/profiles.js +1 -1
- package/dist/role/types.d.ts +2 -0
- package/dist/role/types.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/call/allocation.d.ts +7 -7
- 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/bridge.d.ts +5 -9
- package/dist/schema/call/bridge.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 +11 -11
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +2 -2
- package/dist/schema/call/order.d.ts +1 -1
- package/dist/schema/call/payment.d.ts +1 -1
- package/dist/schema/call/permission.d.ts +1 -1
- package/dist/schema/call/personal.d.ts +1 -1
- package/dist/schema/call/progress.d.ts +1 -1
- package/dist/schema/call/proof.d.ts +2 -2
- package/dist/schema/call/repository.d.ts +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 +5 -5
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/call/treasury.d.ts +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/evaluation/index.d.ts +6 -2
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +8 -8
- package/dist/schema/goal/planning.d.ts +15 -15
- package/dist/schema/industry-pack/index.d.ts +15 -0
- package/dist/schema/industry-pack/modes.d.ts +15 -0
- package/dist/schema/industry-pack/modes.js +1 -1
- package/dist/schema/intent-radar/index.d.ts +3 -0
- package/dist/schema/intent-radar/index.js +1 -1
- package/dist/schema/local/index.d.ts +577 -18
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +140 -20
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +30 -28
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +708 -708
- package/dist/schema/persona/index.js +1 -1
- package/dist/schema/query/bi.d.ts +20 -6
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +32 -32
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-query/index.d.ts +3 -3
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/watch/index.d.ts +2 -2
- package/dist/schema/workflow/index.d.ts +2 -2
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +6 -2
- package/dist/schemas/account_operation.schema.json +1 -1
- package/dist/schemas/bridge_operation.schema.json +2 -10
- package/dist/schemas/evaluation_operation.output.json +2 -0
- package/dist/schemas/evaluation_operation.schema.json +2 -0
- package/dist/schemas/index.json +7 -1
- package/dist/schemas/industry_pack_operation.output.json +87 -4
- package/dist/schemas/intent_radar.output.json +2 -0
- package/dist/schemas/intent_radar.schema.json +1 -0
- package/dist/schemas/local_cache_operation.output.json +1536 -0
- package/dist/schemas/local_cache_operation.schema.json +101 -0
- package/dist/schemas/local_mark_operation.output.json +51 -36
- package/dist/schemas/local_mark_operation.schema.json +1 -0
- package/dist/schemas/messenger_operation.schema.json +358 -35
- package/dist/schemas/onchain_operations.schema.json +10 -10
- package/dist/schemas/onchain_operations_allocation.schema.json +1 -1
- package/dist/schemas/onchain_operations_arbitration.schema.json +3 -3
- package/dist/schemas/onchain_operations_payment.schema.json +1 -1
- package/dist/schemas/onchain_operations_reward.schema.json +1 -1
- package/dist/schemas/onchain_operations_service.schema.json +3 -3
- package/dist/schemas/onchain_operations_treasury.schema.json +1 -1
- package/dist/schemas/onchain_table_data.output.json +11 -0
- package/dist/schemas/query_toolkit.output.json +11 -4
- package/dist/schemas/query_toolkit.schema.json +13 -2
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/local.d.ts +1 -0
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/messenger.d.ts +9 -2
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/name-resolution.d.ts +4 -0
- package/dist/tools/handlers/name-resolution.js +1 -0
- package/dist/tools/handlers/name-resolution.spec.d.ts +1 -0
- package/dist/tools/handlers/name-resolution.spec.js +1 -0
- package/dist/tools/handlers/onchain-name-registration.d.ts +37 -0
- package/dist/tools/handlers/onchain-name-registration.js +1 -0
- package/dist/tools/handlers/onchain-name-registration.spec.d.ts +1 -0
- package/dist/tools/handlers/onchain-name-registration.spec.js +1 -0
- package/dist/tools/handlers/onchain.d.ts +1 -0
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.d.ts +1 -0
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/local.js +1 -1
- package/dist/tools/sanitize-description-roundtrip.spec.d.ts +1 -0
- package/dist/tools/sanitize-description-roundtrip.spec.js +1 -0
- package/dist/tools/sanitize-output.d.ts +1 -0
- package/dist/tools/sanitize-output.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{classifyRelease,releaseBodyHash,releaseSentinelLine,stripReleaseSentinel}from'./release-sentinel.js';export const STRATEGY_MANUAL_FILENAME='strategy-manual.md';export const STRATEGY_MANUAL_VERSION=0x2;const MANUAL_KIND='strategy-manual';export function renderStrategyManual(a){const b=BUILTIN_STRATEGY_MANUALS[a];if(!b)return null;return releaseSentinelLine(MANUAL_KIND,b['version'],releaseBodyHash(b['body']))+'\x0a'+b['body'];}export function parseManualSentinel(a){return stripReleaseSentinel(a,MANUAL_KIND)['sentinel'];}export function classifyManualFile(a,b){const c=BUILTIN_STRATEGY_MANUALS[a];if(!c)return'user_file';const {sentinel:d,content:e}=stripReleaseSentinel(b,MANUAL_KIND);if(!d)return'user_file';return classifyRelease(d,e,c['version']);}export function getBuiltinStrategyManual(a){return BUILTIN_STRATEGY_MANUALS[a];}export function listBuiltinStrategyManualIndustries(){return Object['keys'](BUILTIN_STRATEGY_MANUALS);}const EDUCATION_MANUAL='#\x20Education\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20attendance-based\x20education\x20services\x20on\x20WoWok.\x0a>\x20Curated\x20from\x20the\x20K1\x20six-industry\x20commercial\x20handbook.\x20Figures\x20marked\x0a>\x20**[estimate]**\x20are\x20planning\x20estimates;\x20empirical\x20anchors\x20are\x20marked\x20**[K1]**.\x0a\x0a##\x201.\x20What\x20you\x20are\x20really\x20selling\x0a\x0aYou\x20are\x20not\x20selling\x20\x22crypto\x20payments\x22.\x20You\x20are\x20selling\x20the\x20one\x20guarantee\x0aparents\x20could\x20not\x20buy\x20anywhere:\x20**unearned\x20tuition\x20can\x20never\x20be\x20embezzled,\x20and\x0athe\x20parent\x20can\x20verify\x20that\x20on-chain\x20themselves.**\x0a\x0aThe\x20traditional\x20risk\x20stack\x20is\x20brutal:\x20parents\x20prepay\x20in\x20full,\x20the\x20platform\x0atakes\x2025–40%,\x20institutions\x20can\x20commingle\x20the\x20funds,\x20teachers\x20settle\x207–13\x20days\x0alater,\x20and\x20when\x20an\x20institution\x20collapses\x20(documented\x20cases\x20of\x20$500M+\x20in\x0aprepaid\x20tuition\x20unaccounted\x20for),\x20recovery\x20is\x2040–80%\x20at\x20best.\x20Regulators\x20require\x0acustody,\x20but\x20paper\x20custody\x20can\x20be\x20technically\x20hollowed\x20out\x20when\x20the\x20collecting\x0aentity\x20is\x20not\x20the\x20custodial\x20entity.\x0a\x0aYour\x20WoWok\x20structure\x20makes\x20the\x20failure\x20structurally\x20impossible:\x0a\x0a1.\x20Parent\x20prepays\x20into\x20an\x20Allocation\x20contract\x20—\x20funds\x20never\x20land\x20on\x20your\x20books.\x0a2.\x20Every\x20lesson\x27s\x20fee\x20releases\x20on\x20the\x20parent\x27s\x20attendance\x20signature\x0a\x20\x20\x20(`attendance_guard_signer`),\x20in\x20seconds.\x0a3.\x20Withdrawal\x20at\x20a\x20\x22withdrawn\x22\x20node\x20refunds\x20all\x20unearned\x20lessons\x20in\x20a\x20single\x0a\x20\x20\x20transaction,\x20with\x20no\x20institutional\x20cooperation\x20—\x20100%\x20recovery\x20by\x20design.\x0a4.\x20`setting_lock_duration`\x20locks\x20the\x20fee\x20schedule\x20(default\x2030\x20days).\x0a\x0aOne\x20sentence\x20for\x20every\x20landing\x20page:\x20*\x22Unearned\x20tuition\x20can\x20never\x20be\x20taken\x20—\x0aand\x20you\x20can\x20verify\x20that\x20sentence\x20yourself\x20on-chain.\x22*\x0a\x0aHonest\x20boundary,\x20always:\x20the\x20structure\x20prevents\x20fund\x20embezzlement.\x20It\x20does\x20not\x0aprevent\x20bad\x20teaching.\x20Say\x20so.\x20Overclaiming\x20destroys\x20the\x20only\x20moat\x20you\x20have:\x0averifiable\x20honesty.\x0a\x0a##\x202.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20AOV\x20(30-lesson\x20package)\x20|\x20¥3,000\x20**[K1]**\x20|\x0a|\x20Legacy\x20combined\x20fee\x20|\x20Incumbent\x20live-class\x20platform\x2030%\x20≈\x20¥900/order\x20|\x0a|\x20WoW\x20cost\x20|\x20gas\x20≈\x20$0.05–2.5\x20for\x20N+2\x20transactions\x20|\x0a|\x20Extra\x20per\x20order\x20|\x20≈\x20¥890\x20|\x0a|\x20Teacher\x20settlement\x20|\x207–13\x20days\x20→\x20seconds\x20|\x0a\x0aFormula:\x20extra\x20per\x20order\x20=\x20legacy\x20fee\x20rate\x20×\x20AOV\x20−\x20(gas\x20+\x20keeper\x20amortization\x0a+\x20one-time\x20migration\x20cost).\x20The\x20gas\x20line\x20is\x20noise\x20against\x20¥900\x20saved;\x20adoption\x0apays\x20on\x20essentially\x20the\x20first\x20package.\x20Price\x20in\x20fiat\x20terms\x20—\x20WOW\x20token\x0avolatility\x20must\x20never\x20enter\x20a\x20parent\x27s\x20tuition\x20decision.\x0a\x0a##\x203.\x20Pricing\x20models\x0a\x0a1.\x20**Per-lesson\x20escrow\x20release**\x20(default).\x20Escrowed\x20package,\x201/N\x20release\x20per\x0a\x20\x20\x20attendance\x20signature.\x20Fits\x20every\x20attendance-based\x20scenario.\x0a2.\x20**Package\x20price\x20with\x20rate-based\x20release**.\x20¥3,000\x20class\x20packages;\x20refund\x0a\x20\x20\x20policy\x20declared\x20up\x20front;\x20compensation\x20fund\x20bound.\x0a3.\x20**Trial-class\x20conversion\x20price**.\x20One\x20escrowed\x20trial,\x20enrollment\x20balance\x0a\x20\x20\x20only\x20after\x20the\x20parent\x20signs;\x20pairs\x20with\x20referral\x20reward.\x20Never\x20run\x20trials\x0a\x20\x20\x20permanently\x20below\x20delivery\x20cost.\x0a\x0aPosture\x20guidance:\x0a\x0a-\x20**Volume**:\x20group-buy\x20and\x20early-bird\x20through\x20parent\x20KOC\x20communities;\x0a\x20\x20trial-class\x20discounts\x20as\x20the\x20cold-start\x20hook.\x20Never\x20below\x20per-lesson\x20cost.\x0a-\x20**Balanced**:\x20mix\x20institutional\x20direct\x20sales\x20with\x20community\x20KOC\x20growth.\x0a-\x20**Margin**:\x20sell\x20compliance\x20to\x20mid-size\x20institutions\x20as\x20a\x20moat\x20—\x20\x22I\x20locked\x0a\x20\x20tuition\x20into\x20an\x20on-chain\x20contract;\x20do\x20you\x20dare?\x22\x20is\x20*their*\x20sales\x20line\x20to\x0a\x20\x20parents.\x20BD\x20costs\x20¥1,500–3,000\x20per\x20signed\x20institution.\x0a\x0aRecorded/self-paced\x20courses\x20are\x20a\x20MISMATCH.\x20Route\x20them\x20to\x20the\x20subscription\x0amodel\x20(per-period\x20signed\x20charges\x20+\x20delivery\x20gate).\x20Do\x20not\x20sell\x20them\x20as\x0aattendance\x20escrow\x20—\x20the\x20mode-fit\x20check\x20is\x20a\x20standard\x20intake\x20action.\x0a\x0a##\x204.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x20Service\x20with\x20the\x20education\x20blueprint:\x20`attendance_guard_signer`\x20at\x0a\x20\x20\x20\x20\x20\x20every\x20lesson\x20node,\x20rate-mode\x20Allocator\x20releasing\x20per\x20lesson.\x0a-\x20[\x20]\x20A\x20\x22withdrawn\x22\x20node\x20with\x20a\x20one-transaction\x20refund\x20Allocator\x20path.\x0a-\x20[\x20]\x20`setting_lock_duration`\x20on\x20the\x20fee\x20schedule.\x0a-\x20[\x20]\x20Arbitration\x20bound\x20+\x20compensation\x20fund\x20funded.\x0a-\x20[\x20]\x20Public\x20verification\x20view:\x20order,\x20Allocation\x20and\x20Payment\x20objects\x0a\x20\x20\x20\x20\x20\x20readable\x20by\x20the\x20parent\x20(reverse\x20readability\x20is\x20validated\x20in\x20K1).\x0a-\x20[\x20]\x20Target:\x20a\x20fully\x20configured\x20shop\x20in\x20≤10\x20guided\x20dialogues\x20(K1\x20validated\x2011).\x0a\x0a##\x205.\x20The\x2090-day\x20campaigns\x0a\x0a**Campaign\x20A\x20—\x20\x22Tuition\x20Transparency\x20Experiment\x22\x20(M1–M2).**\x20One\x20seed\x0ainstitution\x20runs\x20two\x20parallel\x20classes:\x20traditional\x20collection\x20vs\x20WoW\x0acustody.\x20Publish\x20everything:\x20parents\x20see\x20the\x20B-class\x20contract\x20balance\x20and\x0arelease\x20records.\x20At\x20the\x20week-4\x20parent\x20open\x20day,\x20demo\x20a\x20mid-course\x20withdrawal\x0arefund\x20live,\x20one\x20transaction.\x20KPI:\x201\x20anchor\x20institution,\x20≥30\x20escrow\x20orders,\x0aone\x20verifiable\x20case\x20piece,\x20parent\x20NPS\x20≥60.\x20Budget\x20$6–9K\x20**[estimate]**.\x0a\x0a**Campaign\x20B\x20—\x20\x22The\x20Regulatory\x20Answer\x22\x20(M2–M3).**\x20No\x20ads.\x20Publish\x20the\x0awhite-paper\x20*From\x20Paper\x20Custody\x20to\x20Protocol\x20Custody*,\x20route\x20it\x20to\x20local\x0aregulatory\x20discussions,\x20trade\x20media\x20and\x20parent\x20communities.\x20Frame:\x20\x22WoW\x20is\x0athe\x20technical\x20answer\x20to\x20custody\x20regulation,\x20not\x20its\x20object.\x22\x20Have\x20a\x2024-hour\x0aresponse\x20draft\x20ready\x20for\x20the\x20next\x20sector\x20failure\x20news\x20cycle\x20—\x20one\x20will\x20come.\x0aKPI:\x202\x20media\x20citations,\x203\x20inbound\x20institutions,\x20$0\x20ad\x20spend.\x0a\x0a##\x206.\x20Channels\x20in\x20order\x0a\x0a1.\x20Parent-rights\x20and\x20local\x20parent\x20KOC\x20groups\x20(¥30–80\x20per\x20paying\x20parent).\x0a2.\x20Institutional\x20direct\x20BD\x20—\x20supply\x20decides\x20the\x20two-sided\x20cold\x20start.\x0a3.\x20Industry\x20media\x20/\x20policy\x20white-papers\x20—\x20zero-cost\x20endorsement.\x0a4.\x20Paid\x20ads\x20—\x20do\x20not\x20use\x20in\x20the\x20first\x2090\x20days;\x20they\x20conflict\x20with\x20the\x20trust\x0a\x20\x20\x20narrative.\x0a\x0a##\x207.\x20Conversion\x20and\x20retention\x0a\x0a-\x20Show\x20the\x20contract\x20balance\x20and\x20release\x20history\x20BEFORE\x20payment.\x0a-\x20The\x20live\x20withdrawal-refund\x20demo\x20is\x20the\x20trial-to-enrollment\x20closer.\x0a-\x20Renew\x20on\x20per-lesson\x20release\x20history\x20+\x20attendance\x20records;\x20use\x20sibling\x20and\x0a\x20\x20referral\x20rewards\x20rather\x20than\x20discounting.\x0a-\x20Institutions\x20can\x20recruit\x20teachers\x20with\x20\x22settlement\x20in\x20seconds\x22\x20—\x20the\x20same\x0a\x20\x20feature\x20sells\x20both\x20sides.\x0a\x0a##\x208.\x20Competitor\x20watch\x20(weekly)\x0a\x0aTrack\x20headline\x20price\x20vs\x20escrow\x20structure,\x20arbitration\x20availability,\x0acompensation-fund\x20coverage,\x20release\x20granularity,\x20and\x20refund-window\x20terms.\x0aNever\x20respond\x20to\x20a\x20price\x20war\x20with\x20discounts:\x20respond\x20by\x20inviting\x20the\x20parent\x0ato\x20read\x20the\x20contract.\x0a\x0a##\x209.\x20Red\x20lines\x0a\x0a1.\x20Recorded-only\x20products\x20route\x20to\x20subscription\x20—\x20never\x20disguised\x20as\x0a\x20\x20\x20attendance\x20courses.\x0a2.\x20Never\x20imply\x20the\x20structure\x20guarantees\x20teaching\x20quality.\x0a3.\x20All\x20external\x20material\x20carries\x20the\x20testnet\x20/\x20estimate\x20/\x20WOW-price\x0a\x20\x20\x20disclaimers.\x20Fiat-denominated\x20figures\x20only.\x0a',RENTAL_MANUAL='#\x20Rental\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20high-value\x20equipment\x20and\x20P2P\x20rentals\x20on\x0a>\x20WoWok.\x20Anchors\x20marked\x20**[k1rent]**\x20come\x20from\x20the\x20fully\x20executed\x20on-chain\x0a>\x20rental\x20pilot;\x20**[estimate]**\x20marks\x20planning\x20figures.\x0a\x0a##\x201.\x20What\x20you\x20are\x20really\x20selling\x0a\x0aRentals\x20are\x20a\x20dispute\x20business\x20that\x20pretends\x20to\x20be\x20a\x20utilization\x20business.\x0aThe\x20incumbent\x20stack\x20has\x20three\x20structural\x20holes:\x0a\x0a1.\x20**Fake\x20deposits.**\x20Card\x20pre-authorizations\x20are\x20not\x20real\x20deductions;\x2077%\x20of\x0a\x20\x20\x20hosts\x20collect\x20no\x20deposit\x20at\x20all\x20—\x20deterrence\x20is\x20zero.\x0a2.\x20**Evidence\x20asymmetry.**\x20Without\x20dated\x20pre-rental\x20photos,\x20damage-claim\x0a\x20\x20\x20rejection\x20runs\x2020%\x20→\x2070%;\x20even\x20paid\x20claims\x20are\x20discounted\x20for\x20depreciation\x0a\x20\x20\x20(60–85%\x20actually\x20paid).\x0a3.\x20**Slow,\x20weaponized\x20settlement.**\x20Refunds\x20take\x207–15\x20business\x20days;\x20review\x0a\x20\x20\x20extortion\x20($50–200\x20per\x20review)\x20shares\x20the\x20same\x20game\x20window\x20as\x20claims.\x0a\x0aWoWok\x20closes\x20all\x20three.\x20Rent\x20+\x20a\x20REAL\x20deposit\x20are\x20bundled\x20into\x20the\x20order\x20and\x0aescrowed\x20in\x20the\x20Allocation\x20contract.\x20A\x20pre-rental\x20WIP\x20hash\x20baseline\x20is\x0amandatory\x20at\x20the\x20handover_out\x20node.\x20On\x20return,\x20post-rental\x20WIP\x20is\x20compared\x20and\x0aexactly\x20one\x20of\x20three\x20mutually\x20exclusive\x20Allocator\x20paths\x20fires:\x20clean\x20return\x0a(deposit\x20back\x20in\x20full),\x20cancellation\x20(full\x20refund),\x20or\x20graded\x20damage\x0adeduction.\x20Settlement\x20is\x20a\x20single\x20allocation\x20transaction\x20—\x20≈3\x20seconds\x20on\x0ak1rent\x20**[k1rent]**\x20—\x20exact\x20to\x20the\x20cent.\x0a\x0aYour\x20sentence:\x20*\x22The\x20platform\x20itself\x20admitted\x20the\x20evidence\x20crisis\x20—\x20we\x20turned\x0ait\x20into\x20structural\x20immunity,\x20and\x20the\x20deposit\x20is\x20real.\x22*\x0a\x0a##\x202.\x20The\x20k1rent\x20receipts\x20are\x20your\x20marketing\x0a\x0aThree\x20immutable\x20Payment\x20records\x20exist\x20from\x20the\x20pilot:\x0a\x0a-\x20`0x078b0834`\x20—\x20clean:\x202\x20rent\x20→\x20merchant,\x203\x20deposit\x20→\x20customer;\x0a-\x20`0xfac811d5`\x20—\x20cancellation:\x205\x20fully\x20→\x20customer;\x0a-\x20`0xe812ed37`\x20—\x20damage:\x203.5\x20→\x20merchant,\x201.5\x20→\x20customer.\x0a\x0aA\x20traditional\x20platform\x27s\x20\x22case\x20study\x22\x20cannot\x20be\x20independently\x20verified.\x20These\x0athree\x20can,\x20by\x20anyone,\x20forever.\x20Build\x20the\x20interactive\x20audit\x20page\x20around\x20the\x0a10-node\x20machine\x20+\x20three\x20paths\x20and\x20make\x20that\x20page\x20the\x20center\x20of\x20your\x0aacquisition.\x0a\x0a##\x203.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20AOV\x20(camera,\x203\x20days)\x20|\x20$200\x20|\x0a|\x20Legacy\x20host-side\x20commission\x20|\x2015.5%\x20≈\x20$31/order\x20|\x0a|\x20Full-cycle\x20WoW\x20cost\x20|\x20≈\x200.05\x20WOW\x20≈\x20¥0.35\x20(5–7\x20txns)\x20**[k1rent]**\x20|\x0a|\x20Deposit\x20refund\x20|\x207–15\x20business\x20days\x20→\x20≈3\x20seconds\x20|\x0a|\x20Insurance/arbitration\x20collapse\x20|\x20Incumbent\x20vehicle-rental\x20platform:\x20$750M\x20burden\x20|\x0a\x0aPrice\x20floor:\x20rental\x20rate\x20must\x20cover\x20maintenance\x20+\x20depreciation\x20+\x0abracket-expected\x20damage.\x20The\x20deposit\x20is\x20never\x20lent\x20against\x20or\x20rehypothecated.\x0a\x0a##\x204.\x20Pricing\x20models\x0a\x0a1.\x20**Rent\x20+\x20deposit\x20bundled\x20escrow,\x20three-path\x20settlement**\x20(default\x20and\x0a\x20\x20\x20core).\x20Pre-rental\x20WIP\x20baseline\x20is\x20non-negotiable\x20—\x20without\x20it\x20the\x20damage\x0a\x20\x20\x20guard\x20cannot\x20pass\x20and\x20the\x20product\x20does\x20not\x20exist.\x0a2.\x20**Pre-agreed\x20graded\x20damage\x20brackets**\x20(light\x2020%\x20/\x20heavy\x2050%\x20/\x20total\x20100%)\x0a\x20\x20\x20for\x20continuous\x20damage\x20amounts\x20like\x20the\x20$347.50\x20case.\x20Brackets\x20are\x0a\x20\x20\x20disclosed\x20and\x20accepted\x20at\x20order\x20time;\x20micro-arbitration\x20only\x20assigns\x20the\x0a\x20\x20\x20bracket\x20—\x20it\x20never\x20improvises\x20amounts.\x0a3.\x20**Duration\x20discount\x20ladder**\x20(monthly\x2010%\x20/\x20quarterly\x2020%\x20/\x20annual\x2030%)\x0a\x20\x20\x20to\x20push\x20utilization,\x20never\x20below\x20maintenance\x20+\x20depreciation\x20per\x20period.\x0a\x0aPosture\x20guidance:\x20volume\x20plays\x20utilization\x20and\x20repeat\x20credits\x20(but\x20never\x0awaives\x20the\x20real\x20deposit);\x20margin\x20sells\x20premium\x20high-value\x20gear\x20on\x0averifiable\x20deposit\x20safety\x20and\x203-second\x20refunds;\x20balanced\x20runs\x20the\x2010-merchant\x0aseed\x20program.\x0a\x0a##\x205.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x2010-node\x20rental\x20machine\x20with\x20handover_out\x20baseline\x20node\x20and\x20return\x20node.\x0a-\x20[\x20]\x20WIP\x20hash\x20capture\x20guided\x20UX\x20at\x20both\x20handover\x20and\x20return\x20(this\x20is\x20the\x0a\x20\x20\x20\x20\x20\x20trust\x20moment\x20—\x20make\x20it\x20easy,\x20not\x20bureaucratic).\x0a-\x20[\x20]\x20Three\x20mutually\x20exclusive\x20Allocator\x20paths,\x20first-match\x20semantics.\x0a-\x20[\x20]\x20Independent\x20arbitration\x20permission\x20(see\x20red\x20line:\x20do\x20not\x20claim\x0a\x20\x20\x20\x20\x20\x20contract-enforced\x20independence\x20without\x20negative-test\x20backing).\x0a-\x20[\x20]\x20Keeper\x20auto-return\x20reminders\x20as\x20standard\x20onboarding,\x20$5–20/month\x0a\x20\x20\x20\x20\x20\x20transparently\x20priced.\x0a-\x20[\x20]\x20Compensation\x20fund\x20sized\x20for\x20the\x20high-value\x20inventory\x20tail.\x0a\x0a##\x206.\x20The\x2090-day\x20campaigns\x0a\x0a**Campaign\x20A\x20—\x20\x22Audit\x20This\x20Ledger\x20Yourself\x22\x20(M1).**\x20Publish\x20the\x20k1rent\x0aaudit\x20page\x20and\x20invite\x20anyone\x20to\x20audit\x20it.\x20Distribute\x20in\x20photography\x20forums,\x0acamera\x20second-hand\x20groups,\x20Reddit\x20r/photography,\x20Bilibili\x20gear\x20channels.\x20KPI:\x0a≥5,000\x20audit-page\x20UV,\x203\x20inbound\x20rental\x20merchants,\x201\x20organic\x20KOC\x20retelling.\x0aBudget\x20$1.5–2.5K\x20**[estimate]**.\x0a\x0a**Campaign\x20B\x20—\x20\x22Deposit\x20Protection\x20Program\x22\x20(M1–M3).**\x20Recruit\x2010\x20equipment\x0arental\x20merchants;\x20templated\x20build\x20≤10\x20dialogues;\x20keeper\x20subsidy\x20$20/mo\x20per\x0amerchant\x20plus\x20first-order\x20gas\x20subsidy\x20for\x203\x20months.\x20KPI:\x2010\x20published\x0aServices,\x20≥100\x20cumulative\x20orders,\x20zero\x20escalated\x20disputes\x20(everything\x20closed\x0aby\x20guard\x20or\x20on-chain\x20micro-arbitration).\x20Budget\x20$8–12K\x20**[estimate]**.\x0a\x0a##\x207.\x20Cold-start\x20mechanics\x0a\x0aSign\x20supply\x20first.\x20Equipment\x20owners\x20get\x20the\x20deposit-custody\x20sales\x20line;\x20\x22my\x0arule:\x20on-chain\x20deposit\x22\x20is\x20their\x20filter\x20for\x20serious\x20renters.\x20Owners\x20bring\x0ademand.\x20Targets:\x20camera/gear,\x20construction\x20machinery,\x20outdoor\x20equipment,\x20and\x0aP2P\x20hosts\x20—\x20high-value,\x20low-frequency,\x20damage-dispute-rich,\x20AOV\x20$100–500.\x0a\x0aIntercept\x20second-hand\x20marketplace\x20dispute\x20threads\x20with\x20one\x20line:\x20\x22this\x0adispute\x20could\x20not\x20have\x20happened\x20on\x20WoW\x22\x20—\x20plus\x20the\x20audit\x20link.\x0a\x0a##\x208.\x20Competitor\x20watch\x20(biweekly)\x0a\x0aRent\x20price,\x20whether\x20the\x20deposit\x20is\x20actually\x20held\x20(vs\x20card\x20auth),\x20pre-rental\x0aevidence\x20requirement,\x20refund\x20speed,\x20arbitration\x20independence.\x20Cite\x0aopponents\x27\x20own\x20documents\x20(incumbent\x20policy\x20reversals\x20such\x20as\x20AI-image\x20claim\x0abans,\x20and\x20platform\x20shutdowns)\x20—\x20their\x20copy\x20outperforms\x20any\x20copy\x20you\x20could\x20write.\x0a\x0a##\x209.\x20Retention\x0a\x0a-\x20Show\x20historical\x20settlement\x20transactions\x20to\x20first-time\x20renters\x20before\x20they\x0a\x20\x20fund.\x0a-\x20Re-rental\x20via\x20accumulated\x20credit,\x20not\x20coupons.\x0a-\x20Keep\x20claims\x20structurally\x20separate\x20from\x20reviews\x20—\x20this\x20kills\x20review\x0a\x20\x20extortion\x20and\x20is\x20worth\x20saying\x20out\x20loud.\x0a\x0a##\x2010.\x20Red\x20lines\x0a\x0a1.\x20No\x20damage\x20deduction\x20without\x20a\x20pre-rental\x20baseline\x20(guard\x20must\x20fail).\x0a2.\x20\x22Contract-enforced\x22\x20arbitration\x20claims\x20require\x20negative-test\x20backing\x0a\x20\x20\x20first\x20(P-5\x20lesson).\x0a3.\x20Never\x20hide\x20the\x20keeper\x20subscription\x20cost.\x0a',FREELANCE_MANUAL='#\x20Freelance\x20(Services)\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20project-based\x20freelancers\x20and\x20small\x20studios\x0a>\x20on\x20WoWok.\x20Anchors\x20from\x20the\x20K1\x20enterprise\x20talent-marketplace\x20analysis;\x0a>\x20**[estimate]**\x20marks\x20planning\x20figures.\x0a\x0a##\x201.\x20What\x20you\x20are\x20really\x20selling\x0a\x0aIncumbent\x20freelance\x20platforms\x20extract\x20on\x20four\x20axes\x20simultaneously:\x0a\x0a-\x2015.4%\x20take\x20(plus\x203–7.99%\x20client-side\x20fees\x20and\x20contract\x20startup\x20fees);\x0a-\x20Connects\x20bid-entry\x20costs\x20of\x20$48–120\x20for\x20a\x20first\x20order,\x20with\x20~60%\x20of\x0a\x20\x20proposals\x20getting\x20no\x20reply;\x0a-\x20up\x20to\x2027\x20days\x20from\x20delivery\x20to\x20settled\x20cash;\x0a-\x20arbitration\x20at\x20$337.50\x20per\x20party\x20—\x20which\x20makes\x20every\x20dispute\x20under\x20~$700\x0a\x20\x20structurally\x20unsolvable,\x20precisely\x20the\x20long-tail\x20amount\x20band;\x0a-\x20reputation\x20locked\x20inside\x20the\x20platform\x20(JSS),\x20plus\x2010-minute\x20screenshot\x0a\x20\x20surveillance\x20(Work\x20Diary).\x0a\x0aWoWok\x20flips\x20each\x20one:\x20escrow\x20at\x20signing,\x20WIP\x20delivery\x20anchoring,\x20acceptance\x0asignature\x20releasing\x20funds\x20in\x20seconds,\x2014-day\x20silence\x20auto-acceptance\x20via\x20time\x0aguard\x20+\x20keeper,\x20micro-arbitration\x20at\x20any\x20amount,\x20and\x20a\x20Passport\x20credential\x0athe\x20freelancer\x20carries\x20across\x20every\x20client\x20and\x20industry.\x0a\x0aYour\x20sentence:\x20*\x22The\x20incumbent\x20says\x20disputes\x20under\x20$700\x20aren\x27t\x20worth\x20solving.\x0aWe\x20say\x20every\x20one\x20is\x20—\x20and\x20your\x20reputation\x20is\x20your\x20asset,\x20not\x20their\x20hostage.\x22*\x0a\x0aPhilosophy\x20line\x20that\x20also\x20functions\x20as\x20a\x20filter:\x20**we\x20verify\x20outcomes,\x20we\x20do\x0anot\x20monitor\x20processes.**\x20Decline\x20hourly-surveillance\x20clients\x20happily.\x0a\x0a##\x202.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20Milestone\x20contract\x20AOV\x20|\x20$1,000\x20|\x0a|\x20Legacy\x20take\x20|\x2015.4%\x20≈\x20$154\x20(+\x20client\x203–7.99%)\x20|\x0a|\x20WoW\x20cost\x20|\x20gas\x20$0.01–0.6\x20across\x204–8\x20txns\x20|\x0a|\x20Arbitration\x20|\x20≈\x20$0.01\x20vs\x20$337.50/party\x20|\x0a|\x20Settlement\x20|\x20up\x20to\x2027\x20days\x20→\x20seconds\x20|\x0a\x0aA\x20single\x20$1,000\x20contract\x20retains\x20≈$153\x20that\x20used\x20to\x20leave;\x20adoption\x20pays\x20on\x0athe\x20first\x20escrowed\x20job.\x0a\x0a##\x203.\x20Pricing\x20models\x0a\x0a1.\x20**Milestone\x20escrow\x20with\x20acceptance\x20signature**\x20(default).\x20Every\x20milestone\x0a\x20\x20\x20objectively\x20verifiable;\x20`deliver_guard_wip`\x20anchors\x20the\x20delivery,\x0a\x20\x20\x20`accept_guard_signer`\x20releases,\x2014-day\x20time\x20guard\x20auto-accepts.\x0a2.\x20**Fixed-price\x20deliverable\x20with\x20revision\x20loops**\x20(logos,\x20translations,\x0a\x20\x20\x20articles).\x20Revision\x20rounds\x20modeled\x20as\x20machine\x20loops\x20—\x20cap\x20the\x20rounds\x20up\x0a\x20\x20\x20front.\x0a3.\x20**Demand-based\x20reverse\x20bidding**:\x20clients\x20post\x20Demands,\x20you\x20present\x20with\x0a\x20\x20\x20Passport/trust\x20gating;\x20zero\x20connect\x20fees,\x20no\x2060%-no-reply\x20graveyard.\x0a\x0aPosture\x20guidance:\x20volume\x20competes\x20on\x20Demand\x20participation\x20and\x20first-order\x0aspeed;\x20margin\x20positions\x20on\x20public\x20on-chain\x20delivery\x20history\x20and\x20refuses\x0aprocess\x20surveillance;\x20balanced\x20standardizes\x20milestone\x20templates\x20and\x20mixes\x0aDemand\x20with\x20referral\x20clients.\x0a\x0a##\x204.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x20Service\x20priced\x20per\x20milestone\x20(3–5\x20splits\x20in\x20the\x20first\x20proposal\x20—\x20it\x0a\x20\x20\x20\x20\x20\x20de-risks\x20the\x20client\x20and\x20signals\x20professionalism).\x0a-\x20[\x20]\x20Escrow\x20before\x20any\x20work\x20starts.\x20Never\x20start\x20on\x20a\x20\x22trusted\x20client\x22\x0a\x20\x20\x20\x20\x20\x20promise.\x0a-\x20[\x20]\x20WIP\x20hashing\x20at\x20each\x20delivery;\x20acceptance\x20gate;\x2014-day\x20auto-accept\x20time\x0a\x20\x20\x20\x20\x20\x20guard\x20+\x20keeper.\x0a-\x20[\x20]\x20Arbitration\x20bound\x20even\x20on\x20small\x20jobs\x20—\x20the\x20cost\x20is\x20trivial\x20and\x20the\x0a\x20\x20\x20\x20\x20\x20availability\x20is\x20the\x20pitch.\x0a-\x20[\x20]\x20Passport\x20issuance\x20workflow\x20ready\x20before\x20leading\x20with\x20portability\x0a\x20\x20\x20\x20\x20\x20claims\x20(BUG-02\x20P0\x20dependency).\x0a\x0a##\x205.\x20Campaign\x20sequencing\x20(start\x20M2,\x20need\x20≥20\x20merchants\x20first)\x0a\x0a**\x22$699\x20Arbitration\x20Clinic\x22\x20(M2–M3).**\x20Publicly\x20accept\x20and\x20resolve\x20real\x0asub-$700\x20commercial\x20disputes\x20on-chain;\x20publish\x20a\x20weekly\x20micro-arbitration\x0adocumentary.\x20KPI:\x20≥10\x20closed\x20arbitrations,\x20≥3,000\x20average\x20reads\x20per\x20episode,\x0aarbitrator\x20pool\x20≥15.\x20Budget\x20$3–5K\x20**[estimate]**.\x0a\x0a**\x22Transparent\x20Income\x20Witnesses\x22\x20KOC\x20program.**\x20Sign\x205–8\x20mid-tier\x20(not\x0ahead-tier)\x20freelancers\x20who\x20publish\x20real\x20incumbent-vs-WoW\x20income\x20comparisons\x20at\x0aauditable\x20addresses.\x20KOL\x20settlement\x20auto-splits\x20via\x20Allocation\x20after\x20verified\x0afirst-order\x20conversion\x20—\x20no\x20monthly\x20net\x20terms.\x20KPI:\x20≥30\x20registered\x0afreelancers\x20per\x20KOC,\x20on-chain-verifiable\x20conversion\x20≥8%.\x20Budget\x20$6–10K\x0a**[estimate]**.\x0a\x0a##\x206.\x20Channels\x0a\x0ar/freelance,\x20Indie\x20Hackers,\x20digital-nomad\x20communities\x20(67%\x20of\x20Gen\x20Z\x20regard\x0amultiple\x20income\x20streams\x20as\x20essential\x20—\x20Passport\x20lands\x20here),\x20design\x20and\x0atranslation\x20verticals,\x20and\x20Demand\x20bounty\x20events\x20for\x20the\x20demand\x20side.\x0aEstimated\x20$3–8\x20per\x20registered\x20freelancer\x20**[estimate]**.\x0a\x0a##\x207.\x20Conversion\x20and\x20retention\x0a\x0a-\x20Proposals\x20show\x20WIP\x20hashes\x20of\x20similar\x20completed\x20milestones.\x0a-\x20Always\x20propose\x20the\x20milestone\x20split\x20in\x20the\x20first\x20message.\x0a-\x20At\x20delivery,\x20explicitly\x20point\x20at\x20the\x20Passport\x20credential\x20earned:\x20every\x0a\x20\x20clean\x20completion\x20is\x20a\x20portable\x20asset.\x20That\x20sentence\x20is\x20the\x20retention\x20loop.\x0a-\x20Revision\x20scope\x20is\x20agreed\x20before\x20escrow,\x20never\x20negotiated\x20mid-delivery.\x0a\x0a##\x208.\x20Competitor\x20watch\x20(biweekly)\x0a\x0aEffective\x20fee\x20after\x20tiered\x20cuts,\x20escrow\x20availability,\x20settlement\x20speed,\x0aarbitration\x20fee\x20floor,\x20reputation\x20portability.\x20Let\x20the\x20platform\x27s\x20own\x20fee\x0aadjustment\x20notices\x20carry\x20the\x20contrast.\x0a\x0a##\x209.\x20Red\x20lines\x0a\x0a1.\x20No\x20work\x20before\x20milestone\x20escrow.\x0a2.\x20No\x20reputation-portability\x20claims\x20before\x20Passport\x20issuance\x20UX\x20is\x0a\x20\x20\x20production-ready.\x0a3.\x20Never\x20bid\x20below\x20the\x20minimum-rate\x20floor\x20to\x20win\x20volume\x20—\x20outcome\x0a\x20\x20\x20verification\x20is\x20a\x20premium\x20position.\x0a',SUBSCRIPTION_MANUAL='#\x20Subscription\x20/\x20Membership\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20creator\x20memberships,\x20newsletters\x20and\x20indie\x0a>\x20software\x20on\x20WoWok.\x20Anchors\x20from\x20the\x20K1\x20creator-membership\x20/\x20fan-subscription\x20/\x0a>\x20app-store-IAP\x20analysis.\x0a\x0a##\x201.\x20What\x20you\x20are\x20really\x20selling\x0a\x0aThe\x20subscription\x20industry\x20runs\x20on\x20institutional\x20dark\x20patterns:\x20incumbent\x0amembership\x20platforms\x20raised\x20fees\x20unilaterally\x20three\x20times\x20in\x20thirteen\x20years\x0a(5%\x20→\x208–12%\x20→\x2010%);\x20app-store\x20IAP\x20takes\x2030%\x20and\x20floats\x20payouts\x20for\x20up\x20to\x2075\x0adays;\x20consumers\x20underestimate\x20subscription\x20spend\x20by\x202.5×\x20and\x2042%\x20pay\x20for\x0aservices\x20they\x20do\x20not\x20use;\x20incumbent\x20cancellation\x20flows\x20ran\x204\x20pages\x20/\x206\x20clicks\x20/\x0a15\x20options\x20(FTC\x20$2.5B\x20settlement\x20context);\x20and\x20creators\x20who\x20stop\x20publishing\x0akeep\x20getting\x20paid\x20by\x20their\x20subscribers.\x0a\x0aYour\x20structure\x20makes\x20the\x20dark\x20patterns\x20impossible\x20rather\x20than\x20merely\x0adisclosed:\x0a\x0a-\x20`charge_guard_signer`\x20—\x20EVERY\x20period\x27s\x20charge\x20needs\x20the\x20subscriber\x27s\x0a\x20\x20explicit\x20signature.\x20No\x20auto-renewal\x20path\x20exists.\x0a-\x20`deliver_guard_wip`\x20—\x20without\x20delivered\x20value,\x20the\x20period\x27s\x20charge\x20cannot\x0a\x20\x20pass.\x20This\x20is\x20an\x20industry\x20blank:\x20no\x20incumbent\x20can\x20offer\x20it.\x0a-\x20`cancel_guard_signer`\x20—\x20cancellation\x20is\x20one\x20signature\x20(15\x20options\x20→\x201).\x0a-\x20Allocation\x20100%\x20→\x20creator,\x20frozen\x20at\x20publish.\x20The\x20thirteen-year\x20rate-ratchet\x0a\x20\x20history\x20cannot\x20repeat;\x20it\x20is\x20a\x20protocol\x20property,\x20not\x20a\x20promise.\x0a\x0aThe\x20per-period\x20signature\x20is\x20DELIBERATE\x20FRICTION.\x20Sell\x20it\x20correctly:\x20friction\x0ais\x20protection;\x20the\x20people\x20who\x20remain\x20after\x20signing\x20are\x20real\x20fans;\x20the\x20friction\x0ais\x20a\x20retention-quality\x20certificate.\x20Never\x20sneak\x20auto-renewal\x20back\x20in\x20to\x0aoptimize\x20conversion.\x0a\x0aYour\x20sentence:\x20*\x22Thirteen\x20years\x20of\x20unilateral\x20price\x20raises\x20cannot\x20exist\x20in\x20a\x0afrozen\x20contract\x20—\x20and\x20every\x20single\x20charge\x20is\x20one\x20you\x20signed\x20yourself.\x22*\x0a\x0a##\x202.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20Creator\x20monthly\x20anchor\x20|\x20$100/month\x20($1,200/year)\x20|\x0a|\x20Legacy\x20take\x20|\x20Incumbent\x20membership\x20platform\x2010%\x20≈\x20$10/month;\x20mobile\x20app-store\x20IAP\x2030%\x20|\x0a|\x20WoW\x20cost\x20|\x20gas\x20$0.03–2\x20across\x2024\x20annual\x20txns\x20|\x0a|\x20Payout\x20|\x20IAP\x20up\x20to\x2075-day\x20float\x20→\x20seconds\x20per\x20period\x20|\x0a|\x20Extra\x20per\x20year\x20|\x20≈\x20$120\x20on\x20a\x20single\x20$100/mo\x20membership\x20|\x0a\x0aFloor:\x20no\x20period\x20charge\x20passes\x20without\x20delivery\x20evidence.\x20The\x20creator\x20must\x0akeep\x20producing\x20—\x20that\x20obligation\x20is\x20the\x20subscriber\x27s\x20protection\x20and\x20the\x0aproduct\x27s\x20integrity.\x0a\x0a##\x203.\x20Pricing\x20models\x0a\x0a1.\x20**Per-period\x20signed\x20charge\x20with\x20delivery\x20gate**\x20(default).\x20Monthly\x20or\x0a\x20\x20\x20chosen\x20cadence;\x20explicit\x20signature\x20each\x20period;\x20charge\x20blocked\x20without\x0a\x20\x20\x20delivery\x20proof;\x20one-signature\x20cancellation.\x0a2.\x20**Annual\x20prepay\x20released\x20per\x20period**.\x20Annual\x20cash\x20lands\x20in\x20escrow\x20and\x0a\x20\x20\x20releases\x20monthly\x20—\x20prepayment\x20with\x20structural\x20stoppage\x20protection\x20for\x0a\x20\x20\x20undelivered\x20months.\x0a3.\x20**Tiered\x20membership**.\x20Each\x20tier\x20maps\x20to\x20concrete\x20deliverables\x20and\x20its\x20own\x0a\x20\x20\x20delivery\x20guard;\x20up/downgrade\x20takes\x20effect\x20next\x20period\x20only.\x20Tier\x0a\x20\x20\x20deliverables\x20must\x20be\x20specific\x20enough\x20for\x20a\x20guard\x20to\x20evaluate.\x0a\x0aPosture\x20guidance:\x20volume\x20rides\x20the\x20consumer\x20\x22signing\x20movement\x22\x20with\x0afirst-month\x20pricing;\x20margin\x20serves\x20fewer\x20true\x20fans\x20at\x20premium\x20tiers\x20and\x0arefuses\x2030%\x20channels;\x20balanced\x20pairs\x20acquisition\x20tools\x20with\x20retention\x0arituals.\x0a\x0a##\x204.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x20Billing-cycle\x20machine\x20with\x20charge\x20guard\x20+\x20delivery\x20gate\x20per\x20period.\x0a-\x20[\x20]\x20One-signature\x20cancellation\x20node;\x20confirm\x20there\x20is\x20exactly\x20one\x20path.\x0a-\x20[\x20]\x20Frozen\x20Allocation\x20100%\x20to\x20creator;\x20no\x20post-publish\x20fee\x20edit\x20surface.\x0a-\x20[\x20]\x20Annual\x20plan:\x20escrowed\x20prepay,\x20per-period\x20release,\x20undelivered-month\x0a\x20\x20\x20\x20\x20\x20refund\x20guaranteed\x20structurally.\x0a-\x20[\x20]\x20DRM/content\x20access\x20rules\x20declared\x20off-chain\x20where\x20applicable.\x0a\x0a##\x205.\x20The\x20\x22Signing\x20Movement\x22\x20campaign\x20(M2–M4)\x0a\x0aTwo\x20assets,\x20one\x20narrative:\x0a\x0a1.\x20**Consumer\x20side\x20—\x20subscription\x20checkup\x20widget.**\x20Input\x20your\x20subscription\x0a\x20\x20\x20list;\x20learn\x20how\x20much\x20you\x20annually\x20pay\x20for\x20unused\x20services\x20(cite\x20the\x202.5×\x0a\x20\x20\x20underestimate\x20and\x2042%\x20unused\x20figures).\x20KPI:\x20≥20,000\x20checkups.\x0a2.\x20**Creator\x20side\x20—\x20\x22100%\x20Arrival\x20Day\x22.**\x20One\x20day\x20each\x20month,\x20creators\x20post\x0a\x20\x20\x20their\x20on-chain\x20per-period\x20release\x20receipts.\x20KPI:\x2030\x20onboarded\x20creators.\x0a\x0aPlus\x20the\x20one-signature\x20cancellation\x20demo\x20video\x20(target\x20≥100K\x20views).\x20Launch\x0aagainst\x20FTC/platform\x20price-hike\x20news\x20cycles\x20—\x20they\x20recur\x20predictably;\x20keep\x0a24-hour\x20response\x20drafts.\x20Budget\x20$4–7K\x20**[estimate]**.\x0a\x0aCapture\x20education\x20recorded-course\x20overflow:\x20the\x20routing\x20rule\x20sends\x0arecorded/self-paced\x20courses\x20here\x20from\x20the\x20education\x20intake.\x0a\x0a##\x206.\x20Channels\x0a\x0aCreator\x20communities\x20(Discord,\x20membership-platform\x20forums\x20—\x20the\x20$131–180\x0amedian-monthly\x20creators\x20feel\x20a\x2010–20%\x20fee\x20as\x20a\x20survival\x20issue),\x20newsletter\x20and\x0aindie-dev\x20circles\x20(IAP\x2030%\x20+\x2075-day\x20float),\x20Hacker\x20News\x20and\x20the\x0aanti-dark-pattern\x20audience.\x20$2–5\x20per\x20subscriber\x20**[estimate]**.\x20Values\x0aalignment\x20beats\x20ad\x20spend\x20in\x20this\x20segment.\x0a\x0a##\x207.\x20Retention\x0a\x0a-\x20Migrate\x20creators\x20one\x20tier\x20at\x20a\x20time;\x20show\x20per-period\x20release\x20receipts.\x0a-\x20Lead\x20with\x20the\x20unused-month\x20guarantee:\x20no\x20delivery,\x20no\x20charge.\x0a-\x20The\x20cancellation\x20demo\x20doubles\x20as\x20a\x20conversion\x20asset\x20—\x20trust\x20that\x20you\x20can\x0a\x20\x20leave\x20is\x20why\x20people\x20stay.\x0a-\x20Upgrade/downgrade\x20effective\x20next\x20period\x20keeps\x20accounting\x20and\x20guard\x20logic\x0a\x20\x20honest.\x0a\x0a##\x208.\x20Competitor\x20watch\x20(weekly)\x0a\x0aTake\x20rate\x20and\x20unilateral-change\x20history,\x20charge\x20transparency,\x20cancellation\x0aclick\x20count,\x20stopped-creator\x20policy,\x20time-to-payout.\x20Contrast\x20the\x20FTC\x0asettlement\x20and\x20frozen\x20Allocation\x20—\x20opponent\x20documents,\x20not\x20your\x20adjectives.\x0a\x0a##\x209.\x20Red\x20lines\x0a\x0a1.\x20Never\x20implement,\x20document,\x20or\x20imply\x20auto-renewal.\x0a2.\x20Never\x20charge\x20a\x20period\x20without\x20delivery\x20evidence.\x0a3.\x20Rate-lock\x20claims\x20exist\x20only\x20through\x20published\x20frozen\x20Allocation.\x0a',TRAVEL_MANUAL='#\x20Travel\x20(Custom\x20&\x20Multi-Segment)\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20custom-trip\x20and\x20multi-segment\x20travel\x20studios\x0a>\x20on\x20WoWok.\x20This\x20is\x20a\x20tier-3\x20playbook:\x20the\x20economics\x20are\x20the\x20strongest\x20in\x20the\x0a>\x20catalog,\x20but\x20the\x20adoption\x20bottleneck\x20is\x20real.\x20Anchors\x20from\x20the\x20K1\x20global-OTA\x0a>\x20/\x20package-tour\x20analysis.\x0a\x0a##\x201.\x20Why\x20travel\x20is\x20deliberately\x20third\x20in\x20line\x0a\x0aGlobal\x20OTAs\x27\x20effective\x20hotel\x20commission\x20runs\x2025–36%\x20after\x20loyalty-tier\x0astacking,\x20the\x20merchant\x20model\x20floats\x20roughly\x20$134B/year\x20in\x20client\x20money,\x20VCC\x0amanual\x20settlement\x20takes\x202–6\x20weeks,\x20and\x20the\x20fund\x20waterfall\x20is\x20invisible:\x0atravelers\x20see\x20totals,\x20hotels\x20see\x20net\x20rates.\x20When\x20failures\x20happen\x20—\x20a\x20major\x0atour\x20operator\x27s\x20collapse\x20stranding\x20hundreds\x20of\x20thousands\x20of\x20customers,\x20tens\x20of\x0abillions\x20in\x20pandemic\x20refunds\x20—\x20relief\x20is\x20post-hoc;\x20EU261\x20compensates\x20flight\x0alegs\x20while\x20downstream\x20segments\x20simply\x20die.\x0a\x0aWoWok\x27s\x20answer\x20is\x20structurally\x20superior:\x20a\x20multi-segment\x20machine\x0a(`segment_D1..DN`)\x20releases\x20each\x20segment\x27s\x20fee\x20as\x20its\x20WIP\x20passes;\x20an\x0ainterrupted\x20node\x20refunds\x20undelivered\x20segments\x20in\x20one\x20transaction;\x20the\x20agent\x0aruns\x20a\x20second-level\x20Allocation\x20from\x20its\x20own\x20Treasury\x20so\x20the\x20waterfall\x20is\x0areadable\x20on-chain;\x20Treasury-scoped\x20Payments\x20can\x20compensate\x20across\x20segments.\x0a\x0aThe\x20bottleneck\x20is\x20adoption,\x20not\x20economics:\x20hotels\x20and\x20drivers\x20are\x20not\x20on\x0achain.\x20That\x20is\x20why\x20the\x20first\x20viable\x20form\x20is\x20the\x20**agent\x20as\x20the\x20single\x0aon-chain\x20counterparty**\x20—\x20agent↔client\x20custody\x20closes\x20the\x20trust\x20loop\x20alone,\x0aand\x20supplier\x20participation\x20grows\x20later\x20with\x20the\x20Passport\x20network.\x20Do\x20not\x0afront-load\x20this\x20industry\x20before\x20the\x20tier-1/2\x20reputation\x20network\x20exists.\x0a\x0aYour\x20sentence:\x20*\x22A\x20collapsed\x20tour\x20operator\x27s\x20stranded\x20millions\x20were\x20post-hoc\x0arelief.\x20The\x20same\x20money\x20in\x20custody\x20with\x20interruption\x20branches\x20is\x20pre-event\x0aisolation.\x22*\x0a\x0a##\x202.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20AOV\x20(5-segment\x20custom\x20trip)\x20|\x20$2,000\x20|\x0a|\x20Effective\x20legacy\x20commission\x20|\x2025–36%\x20≈\x20$350–720/trip\x20|\x0a|\x20WoW\x20cost\x20|\x20gas\x20≈\x20$0.02–1\x20across\x202×segments+3\x20txns\x20|\x0a|\x20Settlement\x20|\x20VCC\x202–6\x20weeks\x20→\x20per-segment\x20seconds\x20|\x0a\x0aGas\x20is\x20noise\x20against\x20$350–700\x20saved\x20per\x20trip.\x20The\x20binding\x20constraint\x20is\x0asupplier\x20adoption;\x20never\x20pretend\x20otherwise.\x0a\x0a##\x203.\x20Pricing\x20models\x0a\x0a1.\x20**Multi-leg\x20itinerary\x20with\x20per-segment\x20release**\x20(default\x20and\x20core).\x0a\x20\x20\x20Every\x20segment\x20has\x20WIP\x20evidence\x20and\x20its\x20own\x20Allocator\x20slice;\x20the\x0a\x20\x20\x20interrupted\x20path\x20refunds\x20undelivered\x20legs\x20in\x20one\x20transaction.\x0a2.\x20**Agent\x20single-counterparty\x20custody**\x20for\x20downstream\x20suppliers\x20not\x20yet\x20on\x0a\x20\x20\x20chain.\x20The\x20agent\x20escrows\x20against\x20the\x20client,\x20holds\x20correct\x20licensing\x20and\x0a\x20\x20\x20funds\x20compensation\x20coverage\x20sized\x20to\x20the\x20maximum\x20single\x20segment.\x0a3.\x20**Weather/condition-guaranteed\x20pricing**\x20via\x20quoted\x20guard\x20+\x20a\x20specified\x0a\x20\x20\x20evidence\x20repository\x20oracle;\x20auto-refund\x20on\x20trigger\x20—\x20test\x20the\x20trigger\x0a\x20\x20\x20source\x20before\x20selling\x20it.\x0a\x0aFIT\x20EXCLUSION:\x20do\x20not\x20sell\x20standard\x20standalone\x20flights\x20or\x20hotels.\x20The\x20WoW\x0avalue\x20there\x20is\x20weak;\x20the\x20fit\x20is\x20custom\x20and\x20packaged\x20multi-segment\x20trips\x0a(package-tour\x20archetype\x20fit:\x2010/10).\x0a\x0a##\x204.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x20Segment\x20machine\x20D1..DN\x20with\x20per-segment\x20WIP\x20gates\x20and\x20release\x0a\x20\x20\x20\x20\x20\x20Allocators.\x0a-\x20[\x20]\x20Explicit\x20interrupted\x20node\x20with\x20one-transaction\x20refund.\x0a-\x20[\x20]\x20Agent\x20Entity\x20with\x20own\x20Treasury\x20+\x20second-level\x20Allocation;\x20waterfall\x0a\x20\x20\x20\x20\x20\x20readable\x20by\x20the\x20buyer\x20BEFORE\x20payment.\x0a-\x20[\x20]\x20Per-leg\x20cancellation\x20policy\x20disclosed\x20at\x20sale;\x20refundable\x20vs\x0a\x20\x20\x20\x20\x20\x20non-refundable\x20legs\x20separated,\x20never\x20blurred.\x0a-\x20[\x20]\x20Compensation\x20fund\x20sized\x20for\x20the\x20maximum\x20single\x20segment.\x0a-\x20[\x20]\x20Weather/condition\x20guard\x20trigger\x20source\x20specified\x20and\x20tested.\x0a\x0a##\x205.\x20Pilot\x20playbook\x20(M4+)\x0a\x0a-\x20Pilot\x20with\x202–3\x20custom-trip\x20/\x20packaged-tour\x20studios\x20under\x20agent-only\x0a\x20\x20custody.\x20Budget\x20$10–15K\x20**[estimate]**.\x0a-\x20Asset\x201:\x20the\x20interactive\x20**$2,000\x20waterfall\x20visualization**\x20—\x20exactly\x20how\x0a\x20\x20the\x20trip\x20price\x20splits\x20to\x20hotel,\x20guide\x20and\x20agent,\x20readable\x20on-chain\x20before\x0a\x20\x20purchase.\x20No\x20OTA\x20on\x20earth\x20can\x20show\x20this.\x0a-\x20Asset\x202:\x20the\x20**weather-guard\x20auto-refund\x20demo**\x20—\x20converts\x20\x22escrow\x22\x20from\x20a\x0a\x20\x20word\x20into\x20a\x20visible\x20guarantee.\x0a-\x20Anchor\x20content\x20to\x20the\x20next\x20large\x20travel-failure\x20news\x20cycle;\x20the\x20structural\x0a\x20\x20contrast\x20(pre-event\x20isolation\x20vs\x20post-hoc\x20relief)\x20writes\x20itself.\x0a\x0a##\x206.\x20Competitor\x20watch\x20(monthly)\x0a\x0aEffective\x20commission\x20after\x20loyalty-tier\x20stacking,\x20waterfall\x20transparency,\x0aper-leg\x20cancellation\x20terms,\x20downstream\x20refund\x20handling\x20(the\x20EU261\x20gap),\x0asettlement\x20speed.\x20Travel\x20is\x20seasonal\x20and\x20contractual\x20—\x20monthly\x20is\x20sufficient;\x0aspend\x20the\x20attention\x20on\x20the\x20pilot\x20studios.\x0a\x0a##\x207.\x20Retention\x0a\x0a-\x20The\x20pre-trip\x20waterfall\x20inspection\x20is\x20the\x20sales\x20asset\x20AND\x20the\x20delivery\x0a\x20\x20promise\x20—\x20rebook\x20on\x20the\x20gap\x20between\x20the\x20two\x20being\x20zero.\x0a-\x20Interrupted-segment\x20one-transaction\x20refund\x20demonstrated\x20before\x20payment.\x0a-\x20Win\x20re-books\x20with\x20itinerary\x20history\x20and\x20per-leg\x20transparency,\x20not\x20points.\x0a\x0a##\x208.\x20Red\x20lines\x0a\x0a1.\x20No\x20standard\x20flight/hotel\x20resale\x20—\x20weak\x20fit,\x20damages\x20positioning.\x0a2.\x20No\x20large\x20cross-period\x20custody\x20marketing\x20before\x20stablecoin\x20bridging\x20is\x0a\x20\x20\x20ready;\x20price\x20in\x20fiat\x20terms.\x0a3.\x20Never\x20commingle\x20undelivered-segment\x20funds\x20with\x20operating\x20cash;\x20cross-leg\x0a\x20\x20\x20responsibility\x20disclosed,\x20never\x20blurred.\x0a',RETAIL_MANUAL='#\x20Retail\x20(Private-Domain\x20Commerce)\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20sellers\x20who\x20already\x20own\x20traffic\x20—\x20DTC\x20sites,\x0a>\x20community\x20commerce\x20and\x20creator\x20stores\x20—\x20on\x20WoWok.\x20Tier-3\x20deliberately:\x20WoW\x0a>\x20replaces\x20the\x20trust\x20and\x20settlement\x20tax,\x20not\x20the\x20traffic.\x20Anchors\x20from\x20the\x0a>\x20K1\x20scale-marketplace\x20/\x20vertical-handmade\x20analysis.\x0a\x0a##\x201.\x20The\x20honest\x20admission\x20that\x20makes\x20the\x20pitch\x20work\x0a\x0aScale-marketplace\x20sellers\x20carry\x20a\x2030–35%\x20combined\x20burden\x20(8–15%\x20referral\x20+\x0afulfillment\x20+\x20Q4\x20storage\x20multipliers\x20+\x208–12%\x20TACoS),\x20wait\x2014\x20days\x20for\x0asettlement\x20under\x20DD+7\x20reserves\x20that\x20can\x20jump\x20to\x20DD+90\x20(new\x20sellers\x20commonly\x0aface\x20100%\x20reserves),\x20face\x20guarantee-program\x20rulings\x20that\x20default\x20to\x20the\x20buyer\x0aon\x20absence,\x20and\x20absorb\x20a\x2019.3%\x20return\x20rate\x20of\x20which\x20~9%\x20is\x20fraudulent.\x0aUnilateral\x20fee\x20increases\x20on\x20incumbent\x20handmade\x20marketplaces\x20(24.2%)\x20complete\x0athe\x20picture.\x0a\x0aWoWok\x20answers\x20with\x20escrow\x20released\x20on\x20the\x20receipt-confirmation\x20guard,\x0areturn-auth\x20gating\x20that\x20requires\x20dual-signed\x20or\x20logistics-repository\x20evidence,\x0aconfigurable\x20arbitration\x20voting\x20periods,\x20and\x20a\x20repository\x20provenance\x20chain.\x0a\x0aThe\x20honest\x20admission:\x20**WoW\x20does\x20not\x20sell\x20traffic.**\x20The\x20incumbent\x27s\x2040.5%\x0ashare\x20is\x20the\x20value\x20of\x20demand,\x20and\x20a\x20zero-traffic\x20seller\x20should\x20be\x20rejected\x20at\x0aintake.\x20The\x20filter\x20sentence\x20is\x20the\x20strategy:\x20*\x22Of\x20the\x2030%\x20you\x20pay\x20the\x0aincumbent\x20marketplace,\x20which\x20part\x20buys\x20traffic\x20and\x20which\x20buys\x20trust?\x20We\x20don\x27t\x0asell\x20traffic\x20—\x20trust\x20is\x20free.\x22*\x20Putting\x20the\x20boundary\x20in\x20the\x20intake\x0aquestionnaire\x20raises\x20conversion\x20quality.\x0a\x0a##\x202.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20Private-domain\x20AOV\x20|\x20$50\x20|\x0a|\x20Legacy\x20combined\x20burden\x20|\x2030–35%\x20≈\x20$300–350\x20per\x20$1,000\x20GMV\x20|\x0a|\x20WoW\x20cost\x20per\x20$1,000\x20GMV\x20|\x20gas\x20≈\x20$0.01–0.5\x20across\x204–6\x20txns\x20(<\x20$1)\x20|\x0a|\x20Settlement\x20|\x2014\x20days\x20+\x20reserve\x20risk\x20→\x20seconds\x20|\x0a|\x20Return\x20rate\x20/\x20fraud\x20share\x20|\x2019.3%\x20/\x209%\x20|\x0a\x0aFloor:\x20never\x20price\x20below\x20COGS\x20+\x20shipping\x20+\x20expected-return\x20provision;\x0acompensation\x20coverage\x20at\x205×\x20maximum\x20single\x20order\x20by\x20default.\x20The\x20economics\x0awork\x20at\x20almost\x20any\x20AOV\x20—\x20traffic\x20availability\x20is\x20the\x20only\x20admission\x0acriterion.\x0a\x0a##\x203.\x20Pricing\x20models\x0a\x0a1.\x20**Escrow\x20released\x20on\x20confirmed\x20receipt**\x20(default).\x20Funds\x20release\x20seconds\x0a\x20\x20\x20after\x20the\x20receipt\x20guard;\x20`return_auth_guard`\x20requires\x20return\x20evidence;\x0a\x20\x20\x20repository\x20provenance\x20supports\x20authenticity\x20claims.\x0a2.\x20**Member/bundle\x20pricing\x20for\x20private\x20communities**.\x20Spend-threshold\x20and\x0a\x20\x20\x20member\x20pricing\x20via\x20rewards\x20inside\x20the\x20owned\x20channel\x20—\x20no\x20platform\x20TACoS.\x0a\x20\x20\x20Bundles\x20stay\x20escrowed\x20per\x20deliverable;\x20never\x20release\x20pre-shipment.\x0a\x0aPosture\x20guidance:\x20volume\x20converts\x20existing\x20flow\x20into\x20escrow\x20GMV\x20with\x0afirst-order\x20and\x20spend-threshold\x20rewards\x20(viable\x20only\x20because\x20gas\x20is\x20under\x20$1\x0aper\x20thousand\x20GMV);\x20margin\x20sells\x20provenance-authenticated\x20premium\x20goods\x20with\x0arepository\x20evidence;\x20balanced\x20pilots\x205–8\x20sellers\x20around\x20the\x20gas-bill\x20proof\x0aevent.\x0a\x0a##\x204.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x20Order\x20→\x20escrow\x20→\x20shipment\x20→\x20receipt-guard\x20release,\x20seconds\x20latency.\x0a-\x20[\x20]\x20Return-auth\x20flow\x20requiring\x20dual\x20signature\x20or\x20logistics\x20repository\x0a\x20\x20\x20\x20\x20\x20record\x20(structurally\x20raises\x20fraud\x20cost\x20against\x20the\x209%\x20fraud\x20share).\x0a-\x20[\x20]\x20Arbitration\x20with\x20configured\x20voting\x20period;\x20no\x20auto-default\x20rulings.\x0a-\x20[\x20]\x20Compensation\x20fund\x205×\x20max\x20single\x20order.\x0a-\x20[\x20]\x20Repository\x20provenance\x20chain\x20for\x20SKUs\x20where\x20authenticity\x20is\x20claimed.\x0a-\x20[\x20]\x20Intake\x20questionnaire\x20confirming\x20existing\x20traffic;\x20reject\x20zero-traffic\x0a\x20\x20\x20\x20\x20\x20applicants\x20explicitly.\x0a\x0a##\x205.\x20Pilot\x20playbook\x20(M4+)\x0a\x0a-\x20**\x22$1,000\x20GMV\x20Cost\x20Teardown\x22\x20livestream**:\x20the\x20same\x20shop\x27s\x20private-domain\x0a\x20\x20orders\x20run\x20through\x20WoW,\x20full-cycle\x20gas\x20bill\x20published\x20against\x20the\x20$300–350\x0a\x20\x20incumbent\x20burden\x20for\x20identical\x20GMV.\x20Numbers\x20in\x20fiat.\x0a-\x20**Fee-hike\x20refugee\x20targeting**:\x20recruit\x20directly\x20from\x20communities\x20hit\x20by\x20the\x0a\x20\x2024.2%\x20unilateral\x20fee\x20event\x20—\x20the\x20triggering\x20event\x20is\x20the\x20acquisition\x0a\x20\x20channel.\x0a-\x205–8\x20sellers\x20pilot,\x20budget\x20$6–10K\x20**[estimate]**.\x0a\x0a##\x206.\x20Channels\x0a\x0a1.\x20Existing\x20private-traffic\x20sellers\x20(DTC,\x20community\x20commerce,\x20We-commerce)\x0a\x20\x20\x20—\x20the\x20only\x20segment\x20that\x20passes\x20the\x20filter.\x0a2.\x20Incumbent\x20fee-hike\x20victim\x20communities.\x0a3.\x20Live\x20cost-comparison\x20events\x20and\x20their\x20replays.\x0a\x0a##\x207.\x20Conversion\x20and\x20retention\x0a\x0a-\x20Make\x20receipt\x20confirmation\x20a\x20one-tap\x20moment\x20and\x20show\x20the\x20release\x20seconds\x0a\x20\x20later\x20—\x20the\x20speed\x20gap\x20to\x2014-day\x20+\x20reserve\x20settlement\x20is\x20visceral.\x0a-\x20Re-purchase\x20via\x20spend\x20cashback\x20and\x20repository-issued\x20provenance\x0a\x20\x20certificates.\x0a-\x20Show\x20return-averse\x20buyers\x20the\x20evidence-gated\x20return\x20flow\x20up\x20front;\x20it\x0a\x20\x20protects\x20them\x20as\x20much\x20as\x20the\x20seller.\x0a\x0a##\x208.\x20Competitor\x20watch\x20(weekly)\x0a\x0aHeadline\x20price,\x20reserve\x20policy,\x20return-fraud\x20handling,\x20arbitration\x20default\x0abehavior,\x20provenance\x20evidence.\x20Retail\x20promotion\x20cycles\x20move\x20fast;\x20weekly\x0acadence.\x20Never\x20answer\x20a\x20price\x20war\x20—\x20answer\x20with\x20the\x20settlement\x20and\x20reserve\x0acontrast.\x0a\x0a##\x209.\x20Red\x20lines\x0a\x0a1.\x20Never\x20promise\x20traffic.\x0a2.\x20No\x20auto-default\x20buyer-win\x20rulings;\x20the\x20arbitration\x20voting\x20period\x20must\x20be\x0a\x20\x20\x20configured.\x0a3.\x20Physical\x20authenticity\x20claims\x20require\x20repository\x20evidence\x20—\x20never\x20beyond\x0a\x20\x20\x20what\x20the\x20evidence\x20proves.\x0a',BUILTIN_STRATEGY_MANUALS={'education':{'industry':'education','version':STRATEGY_MANUAL_VERSION,'body':EDUCATION_MANUAL},'rental':{'industry':'rental','version':STRATEGY_MANUAL_VERSION,'body':RENTAL_MANUAL},'freelance':{'industry':'freelance','version':STRATEGY_MANUAL_VERSION,'body':FREELANCE_MANUAL},'subscription':{'industry':'subscription','version':STRATEGY_MANUAL_VERSION,'body':SUBSCRIPTION_MANUAL},'travel':{'industry':'travel','version':STRATEGY_MANUAL_VERSION,'body':TRAVEL_MANUAL},'retail':{'industry':'retail','version':STRATEGY_MANUAL_VERSION,'body':RETAIL_MANUAL}};
|
|
1
|
+
import{classifyRelease,releaseBodyHash,releaseSentinelLine,stripReleaseSentinel}from'./release-sentinel.js';export const STRATEGY_MANUAL_FILENAME='strategy-manual.md';export const STRATEGY_MANUAL_VERSION=0x3;const MANUAL_KIND='strategy-manual';export function renderStrategyManual(a){const b=BUILTIN_STRATEGY_MANUALS[a];if(!b)return null;return releaseSentinelLine(MANUAL_KIND,b['version'],releaseBodyHash(b['body']))+'\x0a'+b['body'];}export function parseManualSentinel(a){return stripReleaseSentinel(a,MANUAL_KIND)['sentinel'];}export function classifyManualFile(a,b){const c=BUILTIN_STRATEGY_MANUALS[a];if(!c)return'user_file';const {sentinel:d,content:e}=stripReleaseSentinel(b,MANUAL_KIND);if(!d)return'user_file';return classifyRelease(d,e,c['version']);}export function getBuiltinStrategyManual(a){return BUILTIN_STRATEGY_MANUALS[a];}export function listBuiltinStrategyManualIndustries(){return Object['keys'](BUILTIN_STRATEGY_MANUALS);}const EDUCATION_MANUAL='#\x20Education\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20attendance-based\x20education\x20services\x20on\x20WoWok.\x0a>\x20Curated\x20from\x20the\x20K1\x20six-industry\x20commercial\x20handbook.\x20Figures\x20marked\x0a>\x20**[estimate]**\x20are\x20planning\x20estimates;\x20empirical\x20anchors\x20are\x20marked\x20**[K1]**.\x0a\x0a##\x20Business\x20model\x20—\x20direct\x20sales\x0a\x0aWoWok\x20takes\x20no\x20platform\x20commission;\x20a\x20merchant\x20pays\x20only\x20gas,\x20and\x20the\x20default\x0apayout\x20gives\x20the\x20merchant\x20the\x20whole\x20sale.\x20Never\x20copy\x20the\x20incumbent\x20live-class\x0aplatform\x27s\x2030%\x20take\x20+\x20service\x20fee\x20into\x20an\x20allocator:\x20that\x20share\x20is\x20displaced\x20by\x0adesign,\x20not\x20a\x20parameter,\x20and\x20nobody\x20would\x20receive\x20it.\x20If\x20you\x20ARE\x20the\x20aggregator\x0a(a\x20chain\x20or\x20a\x20multi-supplier\x20school\x20network)\x20you\x20may\x20charge\x20your\x20own\x20fee,\x20but\x0aonly\x20with:\x20an\x20explicit\x20number\x20the\x20buyer\x20can\x20compute\x20before\x20ordering;\x20an\x20explicit\x0aNON-EMPTY\x20recipient\x20Entity\x20(an\x20empty\x20one\x20silently\x20routes\x20the\x20share\x20to\x20the\x0adeploying\x20AI\x20—\x20see\x20`ts-sdk/w/local/index.ts:74-86`);\x20and\x20no\x20mandatory\x20transit\x0apool\x20on\x20the\x20payout\x20path\x20—\x20never\x20a\x20fee\x20via\x20a\x20`Surplus`\x20leg,\x20which\x20calls\x0a`balance::withdraw_all`\x20and\x20so\x20doubles\x20as\x20draining\x20the\x20pool.\x20Compete\x20on\x0aescrow/arbitration\x20value,\x20not\x20price.\x0a\x0a##\x201.\x20What\x20you\x20are\x20really\x20selling\x0a\x0aYou\x20are\x20not\x20selling\x20\x22crypto\x20payments\x22.\x20You\x20are\x20selling\x20the\x20one\x20guarantee\x0aparents\x20could\x20not\x20buy\x20anywhere:\x20**unearned\x20tuition\x20can\x20never\x20be\x20embezzled,\x20and\x0athe\x20parent\x20can\x20verify\x20that\x20on-chain\x20themselves.**\x0a\x0aThe\x20traditional\x20risk\x20stack\x20is\x20brutal:\x20parents\x20prepay\x20in\x20full,\x20the\x20incumbent\x0aplatform\x20takes\x2025–40%,\x20institutions\x20can\x20commingle\x20the\x20funds,\x20teachers\x20settle\x207–13\x20days\x0alater,\x20and\x20when\x20an\x20institution\x20collapses\x20(documented\x20cases\x20of\x20$500M+\x20in\x0aprepaid\x20tuition\x20unaccounted\x20for),\x20recovery\x20is\x2040–80%\x20at\x20best.\x20Regulators\x20require\x0acustody,\x20but\x20paper\x20custody\x20can\x20be\x20technically\x20hollowed\x20out\x20when\x20the\x20collecting\x0aentity\x20is\x20not\x20the\x20custodial\x20entity.\x0a\x0aYour\x20WoWok\x20structure\x20makes\x20the\x20failure\x20structurally\x20impossible:\x0a\x0a1.\x20Parent\x20prepays\x20into\x20an\x20Allocation\x20contract\x20—\x20funds\x20never\x20land\x20on\x20your\x20books.\x0a2.\x20Every\x20lesson\x27s\x20fee\x20releases\x20on\x20the\x20parent\x27s\x20attendance\x20signature\x0a\x20\x20\x20(`attendance_guard_signer`),\x20in\x20seconds.\x0a3.\x20Withdrawal\x20at\x20a\x20\x22withdrawn\x22\x20node\x20refunds\x20all\x20unearned\x20lessons\x20in\x20a\x20single\x0a\x20\x20\x20transaction,\x20with\x20no\x20institutional\x20cooperation\x20—\x20100%\x20recovery\x20by\x20design.\x0a4.\x20`setting_lock_duration`\x20locks\x20the\x20fee\x20schedule\x20(default\x2030\x20days).\x0a\x0aOne\x20sentence\x20for\x20every\x20landing\x20page:\x20*\x22Unearned\x20tuition\x20can\x20never\x20be\x20taken\x20—\x0aand\x20you\x20can\x20verify\x20that\x20sentence\x20yourself\x20on-chain.\x22*\x0a\x0aHonest\x20boundary,\x20always:\x20the\x20structure\x20prevents\x20fund\x20embezzlement.\x20It\x20does\x20not\x0aprevent\x20bad\x20teaching.\x20Say\x20so.\x20Overclaiming\x20destroys\x20the\x20only\x20moat\x20you\x20have:\x0averifiable\x20honesty.\x0a\x0a##\x202.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20AOV\x20(30-lesson\x20package)\x20|\x20¥3,000\x20**[K1]**\x20|\x0a|\x20Legacy\x20combined\x20fee\x20(INCUMBENT\x20benchmark,\x20displaced\x20—\x20not\x20a\x20parameter)\x20|\x20Incumbent\x20live-class\x20platform\x2030%\x20≈\x20¥900/order\x20|\x0a|\x20WoW\x20cost\x20|\x20gas\x20≈\x20$0.05–2.5\x20for\x20N+2\x20transactions\x20|\x0a|\x20Extra\x20per\x20order\x20|\x20≈\x20¥890\x20|\x0a|\x20Teacher\x20settlement\x20|\x207–13\x20days\x20→\x20seconds\x20|\x0a\x0aFormula:\x20extra\x20per\x20order\x20=\x20incumbent\x20fee\x20rate\x20×\x20AOV\x20−\x20(gas\x20+\x20keeper\x20amortization\x0a+\x20one-time\x20migration\x20cost).\x20That\x20incumbent\x20fee\x20is\x20the\x20number\x20being\x20displaced\x20—\x0ait\x20is\x20NOT\x20a\x20fee\x20you\x20charge;\x20under\x20direct\x20sales\x20your\x20own\x20default\x20payout\x20is\x20100%\x0aof\x20the\x20sale.\x20The\x20gas\x20line\x20is\x20noise\x20against\x20¥900\x20saved;\x20adoption\x0apays\x20on\x20essentially\x20the\x20first\x20package.\x20Price\x20in\x20fiat\x20terms\x20—\x20WOW\x20token\x0avolatility\x20must\x20never\x20enter\x20a\x20parent\x27s\x20tuition\x20decision.\x0a\x0a##\x203.\x20Pricing\x20models\x0a\x0a1.\x20**Per-lesson\x20escrow\x20release**\x20(default).\x20Escrowed\x20package,\x201/N\x20release\x20per\x0a\x20\x20\x20attendance\x20signature.\x20Fits\x20every\x20attendance-based\x20scenario.\x0a2.\x20**Package\x20price\x20with\x20rate-based\x20release**.\x20¥3,000\x20class\x20packages;\x20refund\x0a\x20\x20\x20policy\x20declared\x20up\x20front;\x20compensation\x20fund\x20bound.\x0a3.\x20**Trial-class\x20conversion\x20price**.\x20One\x20escrowed\x20trial,\x20enrollment\x20balance\x0a\x20\x20\x20only\x20after\x20the\x20parent\x20signs;\x20pairs\x20with\x20referral\x20reward.\x20Never\x20run\x20trials\x0a\x20\x20\x20permanently\x20below\x20delivery\x20cost.\x0a\x0aPosture\x20guidance:\x0a\x0a-\x20**Volume**:\x20group-buy\x20and\x20early-bird\x20through\x20parent\x20KOC\x20communities;\x0a\x20\x20trial-class\x20discounts\x20as\x20the\x20cold-start\x20hook.\x20Never\x20below\x20per-lesson\x20cost.\x0a-\x20**Balanced**:\x20mix\x20institutional\x20B2B\x20direct\x20selling\x20with\x20community\x20KOC\x20growth.\x0a-\x20**Margin**:\x20sell\x20compliance\x20to\x20mid-size\x20institutions\x20as\x20a\x20moat\x20—\x20\x22I\x20locked\x0a\x20\x20tuition\x20into\x20an\x20on-chain\x20contract;\x20do\x20you\x20dare?\x22\x20is\x20*their*\x20sales\x20line\x20to\x0a\x20\x20parents.\x20BD\x20costs\x20¥1,500–3,000\x20per\x20signed\x20institution.\x0a\x0aRecorded/self-paced\x20courses\x20are\x20a\x20MISMATCH.\x20Route\x20them\x20to\x20the\x20subscription\x0amodel\x20(per-period\x20signed\x20charges\x20+\x20delivery\x20gate).\x20Do\x20not\x20sell\x20them\x20as\x0aattendance\x20escrow\x20—\x20the\x20mode-fit\x20check\x20is\x20a\x20standard\x20intake\x20action.\x0a\x0a##\x204.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x20Service\x20with\x20the\x20education\x20blueprint:\x20`attendance_guard_signer`\x20at\x0a\x20\x20\x20\x20\x20\x20every\x20lesson\x20node,\x20rate-mode\x20Allocator\x20releasing\x20per\x20lesson.\x0a-\x20[\x20]\x20A\x20\x22withdrawn\x22\x20node\x20with\x20a\x20one-transaction\x20refund\x20Allocator\x20path.\x0a-\x20[\x20]\x20`setting_lock_duration`\x20on\x20the\x20fee\x20schedule.\x0a-\x20[\x20]\x20Arbitration\x20bound\x20+\x20compensation\x20fund\x20funded.\x0a-\x20[\x20]\x20Public\x20verification\x20view:\x20order,\x20Allocation\x20and\x20Payment\x20objects\x0a\x20\x20\x20\x20\x20\x20readable\x20by\x20the\x20parent\x20(reverse\x20readability\x20is\x20validated\x20in\x20K1).\x0a-\x20[\x20]\x20Target:\x20a\x20fully\x20configured\x20shop\x20in\x20≤10\x20guided\x20dialogues\x20(K1\x20validated\x2011).\x0a\x0a##\x205.\x20The\x2090-day\x20campaigns\x0a\x0a**Campaign\x20A\x20—\x20\x22Tuition\x20Transparency\x20Experiment\x22\x20(M1–M2).**\x20One\x20seed\x0ainstitution\x20runs\x20two\x20parallel\x20classes:\x20traditional\x20collection\x20vs\x20WoW\x0acustody.\x20Publish\x20everything:\x20parents\x20see\x20the\x20B-class\x20contract\x20balance\x20and\x0arelease\x20records.\x20At\x20the\x20week-4\x20parent\x20open\x20day,\x20demo\x20a\x20mid-course\x20withdrawal\x0arefund\x20live,\x20one\x20transaction.\x20KPI:\x201\x20anchor\x20institution,\x20≥30\x20escrow\x20orders,\x0aone\x20verifiable\x20case\x20piece,\x20parent\x20NPS\x20≥60.\x20Budget\x20$6–9K\x20**[estimate]**.\x0a\x0a**Campaign\x20B\x20—\x20\x22The\x20Regulatory\x20Answer\x22\x20(M2–M3).**\x20No\x20ads.\x20Publish\x20the\x0awhite-paper\x20*From\x20Paper\x20Custody\x20to\x20Protocol\x20Custody*,\x20route\x20it\x20to\x20local\x0aregulatory\x20discussions,\x20trade\x20media\x20and\x20parent\x20communities.\x20Frame:\x20\x22WoW\x20is\x0athe\x20technical\x20answer\x20to\x20custody\x20regulation,\x20not\x20its\x20object.\x22\x20Have\x20a\x2024-hour\x0aresponse\x20draft\x20ready\x20for\x20the\x20next\x20sector\x20failure\x20news\x20cycle\x20—\x20one\x20will\x20come.\x0aKPI:\x202\x20media\x20citations,\x203\x20inbound\x20institutions,\x20$0\x20ad\x20spend.\x0a\x0a##\x206.\x20Channels\x20in\x20order\x0a\x0a1.\x20Parent-rights\x20and\x20local\x20parent\x20KOC\x20groups\x20(¥30–80\x20per\x20paying\x20parent).\x0a2.\x20Institutional\x20direct\x20BD\x20—\x20supply\x20decides\x20the\x20two-sided\x20cold\x20start.\x0a3.\x20Industry\x20media\x20/\x20policy\x20white-papers\x20—\x20zero-cost\x20endorsement.\x0a4.\x20Paid\x20ads\x20—\x20do\x20not\x20use\x20in\x20the\x20first\x2090\x20days;\x20they\x20conflict\x20with\x20the\x20trust\x0a\x20\x20\x20narrative.\x0a\x0a##\x207.\x20Conversion\x20and\x20retention\x0a\x0a-\x20Show\x20the\x20contract\x20balance\x20and\x20release\x20history\x20BEFORE\x20payment.\x0a-\x20The\x20live\x20withdrawal-refund\x20demo\x20is\x20the\x20trial-to-enrollment\x20closer.\x0a-\x20Renew\x20on\x20per-lesson\x20release\x20history\x20+\x20attendance\x20records;\x20use\x20sibling\x20and\x0a\x20\x20referral\x20rewards\x20rather\x20than\x20discounting.\x0a-\x20Institutions\x20can\x20recruit\x20teachers\x20with\x20\x22settlement\x20in\x20seconds\x22\x20—\x20the\x20same\x0a\x20\x20feature\x20sells\x20both\x20sides.\x0a\x0a##\x208.\x20Competitor\x20watch\x20(weekly)\x0a\x0aTrack\x20headline\x20price\x20vs\x20escrow\x20structure,\x20arbitration\x20availability,\x0acompensation-fund\x20coverage,\x20release\x20granularity,\x20and\x20refund-window\x20terms.\x0aNever\x20respond\x20to\x20a\x20price\x20war\x20with\x20discounts:\x20respond\x20by\x20inviting\x20the\x20parent\x0ato\x20read\x20the\x20contract.\x0a\x0a##\x209.\x20Red\x20lines\x0a\x0a1.\x20Recorded-only\x20products\x20route\x20to\x20subscription\x20—\x20never\x20disguised\x20as\x0a\x20\x20\x20attendance\x20courses.\x0a2.\x20Never\x20imply\x20the\x20structure\x20guarantees\x20teaching\x20quality.\x0a3.\x20All\x20external\x20material\x20carries\x20the\x20testnet\x20/\x20estimate\x20/\x20WOW-price\x0a\x20\x20\x20disclaimers.\x20Fiat-denominated\x20figures\x20only.\x0a',RENTAL_MANUAL='#\x20Rental\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20high-value\x20equipment\x20and\x20P2P\x20rentals\x20on\x0a>\x20WoWok.\x20Anchors\x20marked\x20**[k1rent]**\x20come\x20from\x20the\x20fully\x20executed\x20on-chain\x0a>\x20rental\x20pilot;\x20**[estimate]**\x20marks\x20planning\x20figures.\x0a\x0a##\x20Business\x20model\x20—\x20direct\x20sales\x0a\x0aWoWok\x20takes\x20no\x20platform\x20commission;\x20a\x20merchant\x20pays\x20only\x20gas,\x20and\x20the\x20default\x0apayout\x20gives\x20the\x20merchant\x20the\x20whole\x20sale.\x20Never\x20copy\x20the\x20incumbent\x27s\x2015.5%\x20host\x0acommission\x20+\x20guest\x20service\x20fee\x20into\x20an\x20allocator:\x20that\x20share\x20is\x20displaced\x20by\x0adesign,\x20not\x20a\x20parameter,\x20and\x20nobody\x20would\x20receive\x20it.\x20If\x20you\x20ARE\x20the\x20aggregator\x0a(a\x20chain,\x20an\x20equipment\x20fleet\x20operator,\x20a\x20hosting\x20consortium)\x20you\x20may\x20charge\x0ayour\x20own\x20fee,\x20but\x20only\x20with:\x20an\x20explicit\x20number\x20the\x20buyer\x20can\x20compute\x20before\x0aordering;\x20an\x20explicit\x20NON-EMPTY\x20recipient\x20Entity\x20(an\x20empty\x20one\x20silently\x20routes\x0athe\x20share\x20to\x20the\x20deploying\x20AI\x20—\x20see\x20`ts-sdk/w/local/index.ts:74-86`);\x20and\x20no\x0amandatory\x20transit\x20pool\x20on\x20the\x20payout\x20path\x20—\x20never\x20a\x20fee\x20via\x20a\x20`Surplus`\x20leg,\x0awhich\x20calls\x20`balance::withdraw_all`\x20and\x20so\x20doubles\x20as\x20draining\x20the\x20pool.\x0aCompete\x20on\x20escrow/arbitration\x20value,\x20not\x20price.\x0a\x0a##\x201.\x20What\x20you\x20are\x20really\x20selling\x0a\x0aRentals\x20are\x20a\x20dispute\x20business\x20that\x20pretends\x20to\x20be\x20a\x20utilization\x20business.\x0aThe\x20incumbent\x20stack\x20has\x20three\x20structural\x20holes:\x0a\x0a1.\x20**Fake\x20deposits.**\x20Card\x20pre-authorizations\x20are\x20not\x20real\x20deductions;\x2077%\x20of\x0a\x20\x20\x20hosts\x20collect\x20no\x20deposit\x20at\x20all\x20—\x20deterrence\x20is\x20zero.\x0a2.\x20**Evidence\x20asymmetry.**\x20Without\x20dated\x20pre-rental\x20photos,\x20damage-claim\x0a\x20\x20\x20rejection\x20runs\x2020%\x20→\x2070%;\x20even\x20paid\x20claims\x20are\x20discounted\x20for\x20depreciation\x0a\x20\x20\x20(60–85%\x20actually\x20paid).\x0a3.\x20**Slow,\x20weaponized\x20settlement.**\x20Refunds\x20take\x207–15\x20business\x20days;\x20review\x0a\x20\x20\x20extortion\x20($50–200\x20per\x20review)\x20shares\x20the\x20same\x20game\x20window\x20as\x20claims.\x0a\x0aWoWok\x20closes\x20all\x20three.\x20Rent\x20+\x20a\x20REAL\x20deposit\x20are\x20bundled\x20into\x20the\x20order\x20and\x0aescrowed\x20in\x20the\x20Allocation\x20contract.\x20A\x20pre-rental\x20WIP\x20hash\x20baseline\x20is\x0amandatory\x20at\x20the\x20handover_out\x20node.\x20On\x20return,\x20post-rental\x20WIP\x20is\x20compared\x20and\x0aexactly\x20one\x20of\x20three\x20mutually\x20exclusive\x20Allocator\x20paths\x20fires:\x20clean\x20return\x0a(deposit\x20back\x20in\x20full),\x20cancellation\x20(full\x20refund),\x20or\x20graded\x20damage\x0adeduction.\x20Settlement\x20is\x20a\x20single\x20allocation\x20transaction\x20—\x20≈3\x20seconds\x20on\x0ak1rent\x20**[k1rent]**\x20—\x20exact\x20to\x20the\x20cent.\x0a\x0aYour\x20sentence:\x20*\x22The\x20incumbent\x20platform\x20itself\x20admitted\x20the\x20evidence\x20crisis\x20—\x0awe\x20turned\x20it\x20into\x20structural\x20immunity,\x20and\x20the\x20deposit\x20is\x20real.\x22*\x0a\x0a##\x202.\x20The\x20k1rent\x20receipts\x20are\x20your\x20marketing\x0a\x0aThree\x20immutable\x20Payment\x20records\x20exist\x20from\x20the\x20pilot:\x0a\x0a-\x20`0x078b0834`\x20—\x20clean:\x202\x20rent\x20→\x20merchant,\x203\x20deposit\x20→\x20customer;\x0a-\x20`0xfac811d5`\x20—\x20cancellation:\x205\x20fully\x20→\x20customer;\x0a-\x20`0xe812ed37`\x20—\x20damage:\x203.5\x20→\x20merchant,\x201.5\x20→\x20customer.\x0a\x0aA\x20traditional\x20platform\x27s\x20\x22case\x20study\x22\x20cannot\x20be\x20independently\x20verified.\x20These\x0athree\x20can,\x20by\x20anyone,\x20forever.\x20Build\x20the\x20interactive\x20audit\x20page\x20around\x20the\x0a10-node\x20machine\x20+\x20three\x20paths\x20and\x20make\x20that\x20page\x20the\x20center\x20of\x20your\x0aacquisition.\x0a\x0a##\x203.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20AOV\x20(camera,\x203\x20days)\x20|\x20$200\x20|\x0a|\x20Legacy\x20host-side\x20commission\x20(INCUMBENT\x20benchmark,\x20displaced\x20—\x20not\x20a\x20parameter)\x20|\x2015.5%\x20≈\x20$31/order\x20|\x0a|\x20Full-cycle\x20WoW\x20cost\x20|\x20≈\x200.05\x20WOW\x20≈\x20¥0.35\x20(5–7\x20txns)\x20**[k1rent]**\x20|\x0a|\x20Deposit\x20refund\x20|\x207–15\x20business\x20days\x20→\x20≈3\x20seconds\x20|\x0a|\x20Insurance/arbitration\x20collapse\x20|\x20Incumbent\x20vehicle-rental\x20platform:\x20$750M\x20burden\x20|\x0a\x0aThat\x2015.5%\x20is\x20the\x20incumbent\x27s,\x20not\x20yours:\x20under\x20direct\x20sales\x20the\x20host\x27s\x20default\x0apayout\x20is\x20Rate\x2010000\x20to\x20the\x20host\x27s\x20own\x20Entity,\x20and\x20the\x20deposit\x20refund\x20is\x20a\x0aseparate\x20leg\x20to\x20the\x20customer.\x20Only\x20a\x20declared\x20third\x20party\x20(cleaning,\x20repair)\x0aever\x20earns\x20a\x20non-zero\x20share,\x20and\x20its\x20Entity\x20must\x20be\x20non-empty\x20and\x20visible\x20to\x20the\x0arenter\x20BEFORE\x20the\x20order\x20is\x20funded.\x0a\x0aPrice\x20floor:\x20rental\x20rate\x20must\x20cover\x20maintenance\x20+\x20depreciation\x20+\x0abracket-expected\x20damage.\x20The\x20deposit\x20is\x20never\x20lent\x20against\x20or\x20rehypothecated.\x0a\x0a##\x204.\x20Pricing\x20models\x0a\x0a1.\x20**Rent\x20+\x20deposit\x20bundled\x20escrow,\x20three-path\x20settlement**\x20(default\x20and\x0a\x20\x20\x20core).\x20Pre-rental\x20WIP\x20baseline\x20is\x20non-negotiable\x20—\x20without\x20it\x20the\x20damage\x0a\x20\x20\x20guard\x20cannot\x20pass\x20and\x20the\x20product\x20does\x20not\x20exist.\x0a2.\x20**Pre-agreed\x20graded\x20damage\x20brackets**\x20(light\x2020%\x20/\x20heavy\x2050%\x20/\x20total\x20100%)\x0a\x20\x20\x20for\x20continuous\x20damage\x20amounts\x20like\x20the\x20$347.50\x20case.\x20Brackets\x20are\x0a\x20\x20\x20disclosed\x20and\x20accepted\x20at\x20order\x20time;\x20micro-arbitration\x20only\x20assigns\x20the\x0a\x20\x20\x20bracket\x20—\x20it\x20never\x20improvises\x20amounts.\x0a3.\x20**Duration\x20discount\x20ladder**\x20(monthly\x2010%\x20/\x20quarterly\x2020%\x20/\x20annual\x2030%)\x0a\x20\x20\x20to\x20push\x20utilization,\x20never\x20below\x20maintenance\x20+\x20depreciation\x20per\x20period.\x0a\x0aPosture\x20guidance:\x20volume\x20plays\x20utilization\x20and\x20repeat\x20credits\x20(but\x20never\x0awaives\x20the\x20real\x20deposit);\x20margin\x20sells\x20premium\x20high-value\x20gear\x20on\x0averifiable\x20deposit\x20safety\x20and\x203-second\x20refunds;\x20balanced\x20runs\x20the\x2010-merchant\x0aseed\x20program.\x0a\x0a##\x205.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x2010-node\x20rental\x20machine\x20with\x20handover_out\x20baseline\x20node\x20and\x20return\x20node.\x0a-\x20[\x20]\x20WIP\x20hash\x20capture\x20guided\x20UX\x20at\x20both\x20handover\x20and\x20return\x20(this\x20is\x20the\x0a\x20\x20\x20\x20\x20\x20trust\x20moment\x20—\x20make\x20it\x20easy,\x20not\x20bureaucratic).\x0a-\x20[\x20]\x20Three\x20mutually\x20exclusive\x20Allocator\x20paths,\x20first-match\x20semantics.\x0a-\x20[\x20]\x20Independent\x20arbitration\x20permission\x20(see\x20red\x20line:\x20do\x20not\x20claim\x0a\x20\x20\x20\x20\x20\x20contract-enforced\x20independence\x20without\x20negative-test\x20backing).\x0a-\x20[\x20]\x20Keeper\x20auto-return\x20reminders\x20as\x20standard\x20onboarding,\x20$5–20/month\x0a\x20\x20\x20\x20\x20\x20transparently\x20priced.\x0a-\x20[\x20]\x20Compensation\x20fund\x20sized\x20for\x20the\x20high-value\x20inventory\x20tail.\x0a\x0a##\x206.\x20The\x2090-day\x20campaigns\x0a\x0a**Campaign\x20A\x20—\x20\x22Audit\x20This\x20Ledger\x20Yourself\x22\x20(M1).**\x20Publish\x20the\x20k1rent\x0aaudit\x20page\x20and\x20invite\x20anyone\x20to\x20audit\x20it.\x20Distribute\x20in\x20photography\x20forums,\x0acamera\x20second-hand\x20groups,\x20Reddit\x20r/photography,\x20Bilibili\x20gear\x20channels.\x20KPI:\x0a≥5,000\x20audit-page\x20UV,\x203\x20inbound\x20rental\x20merchants,\x201\x20organic\x20KOC\x20retelling.\x0aBudget\x20$1.5–2.5K\x20**[estimate]**.\x0a\x0a**Campaign\x20B\x20—\x20\x22Deposit\x20Protection\x20Program\x22\x20(M1–M3).**\x20Recruit\x2010\x20equipment\x0arental\x20merchants;\x20templated\x20build\x20≤10\x20dialogues;\x20keeper\x20subsidy\x20$20/mo\x20per\x0amerchant\x20plus\x20first-order\x20gas\x20subsidy\x20for\x203\x20months.\x20KPI:\x2010\x20published\x0aServices,\x20≥100\x20cumulative\x20orders,\x20zero\x20escalated\x20disputes\x20(everything\x20closed\x0aby\x20guard\x20or\x20on-chain\x20micro-arbitration).\x20Budget\x20$8–12K\x20**[estimate]**.\x0a\x0a##\x207.\x20Cold-start\x20mechanics\x0a\x0aSign\x20supply\x20first.\x20Equipment\x20owners\x20get\x20the\x20deposit-custody\x20sales\x20line;\x20\x22my\x0arule:\x20on-chain\x20deposit\x22\x20is\x20their\x20filter\x20for\x20serious\x20renters.\x20Owners\x20bring\x0ademand.\x20Targets:\x20camera/gear,\x20construction\x20machinery,\x20outdoor\x20equipment,\x20and\x0aP2P\x20hosts\x20—\x20high-value,\x20low-frequency,\x20damage-dispute-rich,\x20AOV\x20$100–500.\x0a\x0aIntercept\x20second-hand\x20marketplace\x20dispute\x20threads\x20with\x20one\x20line:\x20\x22this\x0adispute\x20could\x20not\x20have\x20happened\x20on\x20WoW\x22\x20—\x20plus\x20the\x20audit\x20link.\x0a\x0a##\x208.\x20Competitor\x20watch\x20(biweekly)\x0a\x0aRent\x20price,\x20whether\x20the\x20deposit\x20is\x20actually\x20held\x20(vs\x20card\x20auth),\x20pre-rental\x0aevidence\x20requirement,\x20refund\x20speed,\x20arbitration\x20independence.\x20Cite\x0aopponents\x27\x20own\x20documents\x20(incumbent\x20policy\x20reversals\x20such\x20as\x20AI-image\x20claim\x0abans,\x20and\x20platform\x20shutdowns)\x20—\x20their\x20copy\x20outperforms\x20any\x20copy\x20you\x20could\x20write.\x0a\x0a##\x209.\x20Retention\x0a\x0a-\x20Show\x20historical\x20settlement\x20transactions\x20to\x20first-time\x20renters\x20before\x20they\x0a\x20\x20fund.\x0a-\x20Re-rental\x20via\x20accumulated\x20credit,\x20not\x20coupons.\x0a-\x20Keep\x20claims\x20structurally\x20separate\x20from\x20reviews\x20—\x20this\x20kills\x20review\x0a\x20\x20extortion\x20and\x20is\x20worth\x20saying\x20out\x20loud.\x0a\x0a##\x2010.\x20Red\x20lines\x0a\x0a1.\x20No\x20damage\x20deduction\x20without\x20a\x20pre-rental\x20baseline\x20(guard\x20must\x20fail).\x0a2.\x20\x22Contract-enforced\x22\x20arbitration\x20claims\x20require\x20negative-test\x20backing\x0a\x20\x20\x20first\x20(P-5\x20lesson).\x0a3.\x20Never\x20hide\x20the\x20keeper\x20subscription\x20cost.\x0a',FREELANCE_MANUAL='#\x20Freelance\x20(Services)\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20project-based\x20freelancers\x20and\x20small\x20studios\x0a>\x20on\x20WoWok.\x20Anchors\x20from\x20the\x20K1\x20enterprise\x20talent-marketplace\x20analysis;\x0a>\x20**[estimate]**\x20marks\x20planning\x20figures.\x0a\x0a##\x20Business\x20model\x20—\x20direct\x20sales\x0a\x0aWoWok\x20takes\x20no\x20platform\x20commission;\x20a\x20merchant\x20pays\x20only\x20gas,\x20and\x20the\x20default\x0apayout\x20gives\x20the\x20merchant\x20the\x20whole\x20sale.\x20Never\x20copy\x20the\x20incumbent\x27s\x2015.4%\x20take\x0a(+\x20its\x203–7.99%\x20client-side\x20fee\x20and\x20contract\x20startup\x20fee)\x20into\x20an\x20allocator:\x20that\x0ashare\x20is\x20displaced\x20by\x20design,\x20not\x20a\x20parameter,\x20and\x20nobody\x20would\x20receive\x20it.\x20If\x0ayou\x20ARE\x20the\x20aggregator\x20(a\x20talent\x20agency,\x20a\x20multi-contract\x20orchestrator)\x20you\x20may\x0acharge\x20your\x20own\x20fee,\x20but\x20only\x20with:\x20an\x20explicit\x20number\x20the\x20buyer\x20can\x20compute\x0abefore\x20ordering;\x20an\x20explicit\x20NON-EMPTY\x20recipient\x20Entity\x20(an\x20empty\x20one\x20silently\x0aroutes\x20the\x20share\x20to\x20the\x20deploying\x20AI\x20—\x20see\x20`ts-sdk/w/local/index.ts:74-86`);\x20and\x0ano\x20mandatory\x20transit\x20pool\x20on\x20the\x20payout\x20path\x20—\x20never\x20a\x20fee\x20via\x20a\x20`Surplus`\x0aleg,\x20which\x20calls\x20`balance::withdraw_all`\x20and\x20so\x20doubles\x20as\x20draining\x20the\x20pool.\x0aCompete\x20on\x20escrow/arbitration\x20value,\x20not\x20price.\x0a\x0a##\x201.\x20What\x20you\x20are\x20really\x20selling\x0a\x0aIncumbent\x20freelance\x20platforms\x20extract\x20on\x20four\x20axes\x20simultaneously:\x0a\x0a-\x2015.4%\x20take\x20(plus\x203–7.99%\x20client-side\x20fees\x20and\x20contract\x20startup\x20fees);\x0a-\x20Connects\x20bid-entry\x20costs\x20of\x20$48–120\x20for\x20a\x20first\x20order,\x20with\x20~60%\x20of\x0a\x20\x20proposals\x20getting\x20no\x20reply;\x0a-\x20up\x20to\x2027\x20days\x20from\x20delivery\x20to\x20settled\x20cash;\x0a-\x20arbitration\x20at\x20$337.50\x20per\x20party\x20—\x20which\x20makes\x20every\x20dispute\x20under\x20~$700\x0a\x20\x20structurally\x20unsolvable,\x20precisely\x20the\x20long-tail\x20amount\x20band;\x0a-\x20reputation\x20locked\x20inside\x20the\x20platform\x20(JSS),\x20plus\x2010-minute\x20screenshot\x0a\x20\x20surveillance\x20(Work\x20Diary).\x0a\x0aWoWok\x20flips\x20each\x20one:\x20escrow\x20at\x20signing,\x20WIP\x20delivery\x20anchoring,\x20acceptance\x0asignature\x20releasing\x20funds\x20in\x20seconds,\x2014-day\x20silence\x20auto-acceptance\x20via\x20time\x0aguard\x20+\x20keeper,\x20micro-arbitration\x20at\x20any\x20amount,\x20and\x20a\x20Passport\x20credential\x0athe\x20freelancer\x20carries\x20across\x20every\x20client\x20and\x20industry.\x0a\x0aYour\x20sentence:\x20*\x22The\x20incumbent\x20says\x20disputes\x20under\x20$700\x20aren\x27t\x20worth\x20solving.\x0aWe\x20say\x20every\x20one\x20is\x20—\x20and\x20your\x20reputation\x20is\x20your\x20asset,\x20not\x20their\x20hostage.\x22*\x0a\x0aPhilosophy\x20line\x20that\x20also\x20functions\x20as\x20a\x20filter:\x20**we\x20verify\x20outcomes,\x20we\x20do\x0anot\x20monitor\x20processes.**\x20Decline\x20hourly-surveillance\x20clients\x20happily.\x0a\x0a##\x202.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20Milestone\x20contract\x20AOV\x20|\x20$1,000\x20|\x0a|\x20Legacy\x20take\x20(INCUMBENT\x20benchmark,\x20displaced\x20—\x20not\x20a\x20parameter)\x20|\x2015.4%\x20≈\x20$154\x20(+\x20client\x203–7.99%)\x20|\x0a|\x20WoW\x20cost\x20|\x20gas\x20$0.01–0.6\x20across\x204–8\x20txns\x20|\x0a|\x20Arbitration\x20|\x20≈\x20$0.01\x20vs\x20$337.50/party\x20|\x0a|\x20Settlement\x20|\x20up\x20to\x2027\x20days\x20→\x20seconds\x20|\x0a\x0aA\x20single\x20$1,000\x20contract\x20retains\x20≈$153\x20that\x20used\x20to\x20leave;\x20adoption\x20pays\x20on\x0athe\x20first\x20escrowed\x20job.\x20That\x20$154\x20is\x20the\x20incumbent\x27s\x20cut,\x20not\x20a\x20line\x20in\x20your\x0aallocator\x20—\x20your\x20default\x20settlement\x20is\x20Rate\x2010000\x20to\x20your\x20own\x20Entity.\x20If\x20you\x0aare\x20an\x20agency\x20orchestrating\x20several\x20freelancers,\x20your\x20own\x20fee\x20must\x20be\x20an\x0aexplicit\x20Amount\x20or\x20Rate\x20leg\x20to\x20an\x20explicit\x20non-empty\x20Entity,\x20disclosed\x20before\x0athe\x20client\x20orders\x20—\x20never\x20an\x20implicit\x20remainder\x20and\x20never\x20a\x20`Surplus`\x20entry.\x0a\x0a##\x203.\x20Pricing\x20models\x0a\x0a1.\x20**Milestone\x20escrow\x20with\x20acceptance\x20signature**\x20(default).\x20Every\x20milestone\x0a\x20\x20\x20objectively\x20verifiable;\x20`deliver_guard_wip`\x20anchors\x20the\x20delivery,\x0a\x20\x20\x20`accept_guard_signer`\x20releases,\x2014-day\x20time\x20guard\x20auto-accepts.\x0a2.\x20**Fixed-price\x20deliverable\x20with\x20revision\x20loops**\x20(logos,\x20translations,\x0a\x20\x20\x20articles).\x20Revision\x20rounds\x20modeled\x20as\x20machine\x20loops\x20—\x20cap\x20the\x20rounds\x20up\x0a\x20\x20\x20front.\x0a3.\x20**Demand-based\x20reverse\x20bidding**:\x20clients\x20post\x20Demands,\x20you\x20present\x20with\x0a\x20\x20\x20Passport/trust\x20gating;\x20zero\x20connect\x20fees,\x20no\x2060%-no-reply\x20graveyard.\x0a\x0aPosture\x20guidance:\x20volume\x20competes\x20on\x20Demand\x20participation\x20and\x20first-order\x0aspeed;\x20margin\x20positions\x20on\x20public\x20on-chain\x20delivery\x20history\x20and\x20refuses\x0aprocess\x20surveillance;\x20balanced\x20standardizes\x20milestone\x20templates\x20and\x20mixes\x0aDemand\x20with\x20referral\x20clients.\x0a\x0a##\x204.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x20Service\x20priced\x20per\x20milestone\x20(3–5\x20splits\x20in\x20the\x20first\x20proposal\x20—\x20it\x0a\x20\x20\x20\x20\x20\x20de-risks\x20the\x20client\x20and\x20signals\x20professionalism).\x0a-\x20[\x20]\x20Escrow\x20before\x20any\x20work\x20starts.\x20Never\x20start\x20on\x20a\x20\x22trusted\x20client\x22\x0a\x20\x20\x20\x20\x20\x20promise.\x0a-\x20[\x20]\x20WIP\x20hashing\x20at\x20each\x20delivery;\x20acceptance\x20gate;\x2014-day\x20auto-accept\x20time\x0a\x20\x20\x20\x20\x20\x20guard\x20+\x20keeper.\x0a-\x20[\x20]\x20Arbitration\x20bound\x20even\x20on\x20small\x20jobs\x20—\x20the\x20cost\x20is\x20trivial\x20and\x20the\x0a\x20\x20\x20\x20\x20\x20availability\x20is\x20the\x20pitch.\x0a-\x20[\x20]\x20Passport\x20issuance\x20workflow\x20ready\x20before\x20leading\x20with\x20portability\x0a\x20\x20\x20\x20\x20\x20claims\x20(BUG-02\x20P0\x20dependency).\x0a\x0a##\x205.\x20Campaign\x20sequencing\x20(start\x20M2,\x20need\x20≥20\x20merchants\x20first)\x0a\x0a**\x22$699\x20Arbitration\x20Clinic\x22\x20(M2–M3).**\x20Publicly\x20accept\x20and\x20resolve\x20real\x0asub-$700\x20commercial\x20disputes\x20on-chain;\x20publish\x20a\x20weekly\x20micro-arbitration\x0adocumentary.\x20KPI:\x20≥10\x20closed\x20arbitrations,\x20≥3,000\x20average\x20reads\x20per\x20episode,\x0aarbitrator\x20pool\x20≥15.\x20Budget\x20$3–5K\x20**[estimate]**.\x0a\x0a**\x22Transparent\x20Income\x20Witnesses\x22\x20KOC\x20program.**\x20Sign\x205–8\x20mid-tier\x20(not\x0ahead-tier)\x20freelancers\x20who\x20publish\x20real\x20incumbent-vs-WoW\x20income\x20comparisons\x20at\x0aauditable\x20addresses.\x20KOL\x20settlement\x20auto-splits\x20via\x20Allocation\x20after\x20verified\x0afirst-order\x20conversion\x20—\x20no\x20monthly\x20net\x20terms.\x20KPI:\x20≥30\x20registered\x0afreelancers\x20per\x20KOC,\x20on-chain-verifiable\x20conversion\x20≥8%.\x20Budget\x20$6–10K\x0a**[estimate]**.\x0a\x0a##\x206.\x20Channels\x0a\x0ar/freelance,\x20Indie\x20Hackers,\x20digital-nomad\x20communities\x20(67%\x20of\x20Gen\x20Z\x20regard\x0amultiple\x20income\x20streams\x20as\x20essential\x20—\x20Passport\x20lands\x20here),\x20design\x20and\x0atranslation\x20verticals,\x20and\x20Demand\x20bounty\x20events\x20for\x20the\x20demand\x20side.\x0aEstimated\x20$3–8\x20per\x20registered\x20freelancer\x20**[estimate]**.\x0a\x0a##\x207.\x20Conversion\x20and\x20retention\x0a\x0a-\x20Proposals\x20show\x20WIP\x20hashes\x20of\x20similar\x20completed\x20milestones.\x0a-\x20Always\x20propose\x20the\x20milestone\x20split\x20in\x20the\x20first\x20message.\x0a-\x20At\x20delivery,\x20explicitly\x20point\x20at\x20the\x20Passport\x20credential\x20earned:\x20every\x0a\x20\x20clean\x20completion\x20is\x20a\x20portable\x20asset.\x20That\x20sentence\x20is\x20the\x20retention\x20loop.\x0a-\x20Revision\x20scope\x20is\x20agreed\x20before\x20escrow,\x20never\x20negotiated\x20mid-delivery.\x0a\x0a##\x208.\x20Competitor\x20watch\x20(biweekly)\x0a\x0aEffective\x20fee\x20after\x20tiered\x20cuts,\x20escrow\x20availability,\x20settlement\x20speed,\x0aarbitration\x20fee\x20floor,\x20reputation\x20portability.\x20Let\x20the\x20incumbent\x20platform\x27s\x20own\x0afee\x20adjustment\x20notices\x20carry\x20the\x20contrast\x20—\x20every\x20one\x20of\x20those\x20figures\x20is\x20theirs,\x0aand\x20none\x20of\x20them\x20is\x20a\x20default\x20you\x20inherit.\x0a\x0a##\x209.\x20Red\x20lines\x0a\x0a1.\x20No\x20work\x20before\x20milestone\x20escrow.\x0a2.\x20No\x20reputation-portability\x20claims\x20before\x20Passport\x20issuance\x20UX\x20is\x0a\x20\x20\x20production-ready.\x0a3.\x20Never\x20bid\x20below\x20the\x20minimum-rate\x20floor\x20to\x20win\x20volume\x20—\x20outcome\x0a\x20\x20\x20verification\x20is\x20a\x20premium\x20position.\x0a',SUBSCRIPTION_MANUAL='#\x20Subscription\x20/\x20Membership\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20creator\x20memberships,\x20newsletters\x20and\x20indie\x0a>\x20software\x20on\x20WoWok.\x20Anchors\x20from\x20the\x20K1\x20creator-membership\x20/\x20fan-subscription\x20/\x0a>\x20app-store-IAP\x20analysis.\x0a\x0a##\x20Business\x20model\x20—\x20direct\x20sales\x0a\x0aWoWok\x20takes\x20no\x20platform\x20commission;\x20a\x20merchant\x20pays\x20only\x20gas,\x20and\x20the\x20default\x0apayout\x20gives\x20the\x20creator\x20the\x20whole\x20sale.\x20Never\x20copy\x20the\x20incumbent\x20membership\x0aplatform\x27s\x2010%\x20(or\x20the\x20app\x20store\x27s\x2030%\x20IAP\x20cut)\x20into\x20an\x20allocator:\x20those\x0ashares\x20are\x20displaced\x20by\x20design,\x20not\x20parameters,\x20and\x20nobody\x20would\x20receive\x20them.\x0aIf\x20you\x20ARE\x20the\x20aggregator\x20(a\x20bundle\x20seller,\x20a\x20multi-creator\x20programme,\x20an\x0aapp\x20distributor\x20reselling\x20several\x20creators)\x20you\x20may\x20charge\x20your\x20own\x20fee,\x20but\x0aonly\x20with:\x20an\x20explicit\x20number\x20the\x20subscriber\x20can\x20compute\x20before\x20ordering;\x20an\x0aexplicit\x20NON-EMPTY\x20recipient\x20Entity\x20(an\x20empty\x20one\x20silently\x20routes\x20the\x20share\x20to\x0athe\x20deploying\x20AI\x20—\x20see\x20`ts-sdk/w/local/index.ts:74-86`);\x20and\x20no\x20mandatory\x0atransit\x20pool\x20on\x20the\x20payout\x20path\x20—\x20never\x20a\x20fee\x20via\x20a\x20`Surplus`\x20leg,\x20which\x20calls\x0a`balance::withdraw_all`\x20and\x20so\x20doubles\x20as\x20draining\x20the\x20pool.\x20Compete\x20on\x0aescrow/arbitration\x20value,\x20not\x20price.\x0a\x0a##\x201.\x20What\x20you\x20are\x20really\x20selling\x0a\x0aThe\x20subscription\x20industry\x20runs\x20on\x20institutional\x20dark\x20patterns:\x20incumbent\x0amembership\x20platforms\x20raised\x20fees\x20unilaterally\x20three\x20times\x20in\x20thirteen\x20years\x0a(5%\x20→\x208–12%\x20→\x2010%);\x20app-store\x20IAP\x20takes\x2030%\x20and\x20floats\x20payouts\x20for\x20up\x20to\x2075\x0adays;\x20consumers\x20underestimate\x20subscription\x20spend\x20by\x202.5×\x20and\x2042%\x20pay\x20for\x0aservices\x20they\x20do\x20not\x20use;\x20incumbent\x20cancellation\x20flows\x20ran\x204\x20pages\x20/\x206\x20clicks\x20/\x0a15\x20options\x20(FTC\x20$2.5B\x20settlement\x20context);\x20and\x20creators\x20who\x20stop\x20publishing\x0akeep\x20getting\x20paid\x20by\x20their\x20subscribers.\x0a\x0aYour\x20structure\x20makes\x20the\x20dark\x20patterns\x20impossible\x20rather\x20than\x20merely\x0adisclosed:\x0a\x0a-\x20`charge_guard_signer`\x20—\x20EVERY\x20period\x27s\x20charge\x20needs\x20the\x20subscriber\x27s\x0a\x20\x20explicit\x20signature.\x20No\x20auto-renewal\x20path\x20exists.\x0a-\x20`deliver_guard_wip`\x20—\x20without\x20delivered\x20value,\x20the\x20period\x27s\x20charge\x20cannot\x0a\x20\x20pass.\x20This\x20is\x20an\x20industry\x20blank:\x20no\x20incumbent\x20can\x20offer\x20it.\x0a-\x20`cancel_guard_signer`\x20—\x20cancellation\x20is\x20one\x20signature\x20(15\x20options\x20→\x201).\x0a-\x20Allocation\x20100%\x20→\x20creator,\x20frozen\x20at\x20publish.\x20The\x20thirteen-year\x20rate-ratchet\x0a\x20\x20history\x20cannot\x20repeat;\x20it\x20is\x20a\x20protocol\x20property,\x20not\x20a\x20promise.\x0a\x0aThe\x20per-period\x20signature\x20is\x20DELIBERATE\x20FRICTION.\x20Sell\x20it\x20correctly:\x20friction\x0ais\x20protection;\x20the\x20people\x20who\x20remain\x20after\x20signing\x20are\x20real\x20fans;\x20the\x20friction\x0ais\x20a\x20retention-quality\x20certificate.\x20Never\x20sneak\x20auto-renewal\x20back\x20in\x20to\x0aoptimize\x20conversion.\x0a\x0aYour\x20sentence:\x20*\x22Thirteen\x20years\x20of\x20unilateral\x20price\x20raises\x20cannot\x20exist\x20in\x20a\x0afrozen\x20contract\x20—\x20and\x20every\x20single\x20charge\x20is\x20one\x20you\x20signed\x20yourself.\x22*\x0a\x0a##\x202.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20Creator\x20monthly\x20anchor\x20|\x20$100/month\x20($1,200/year)\x20|\x0a|\x20Legacy\x20take\x20(INCUMBENT\x20benchmarks,\x20displaced\x20—\x20not\x20parameters)\x20|\x20Incumbent\x20membership\x20platform\x2010%\x20≈\x20$10/month;\x20mobile\x20app-store\x20IAP\x2030%\x20|\x0a|\x20WoW\x20cost\x20|\x20gas\x20$0.03–2\x20across\x2024\x20annual\x20txns\x20|\x0a|\x20Payout\x20|\x20IAP\x20up\x20to\x2075-day\x20float\x20→\x20seconds\x20per\x20period\x20|\x0a|\x20Extra\x20per\x20year\x20|\x20≈\x20$120\x20on\x20a\x20single\x20$100/mo\x20membership\x20|\x0a\x0aThose\x20two\x20percentages\x20are\x20the\x20incumbents\x27\x20numbers,\x20quoted\x20only\x20to\x20show\x20the\x20gap\x0athey\x20charge.\x20Under\x20direct\x20sales\x20neither\x20appears\x20in\x20your\x20payout:\x20the\x20default\x20is\x0aRate\x2010000\x20to\x20the\x20creator,\x20frozen\x20at\x20publish.\x20A\x20distributor\x20reselling\x20several\x0acreators\x20is\x20the\x20aggregator\x20case\x20—\x20its\x20own\x20fee\x20must\x20be\x20an\x20explicit\x20leg\x20to\x20an\x0aexplicit\x20non-empty\x20Entity,\x20disclosed\x20before\x20the\x20subscriber\x20signs,\x20and\x20never\x20an\x0aimplicit\x20remainder\x20or\x20a\x20`Surplus`\x20drain.\x0a\x0aFloor:\x20no\x20period\x20charge\x20passes\x20without\x20delivery\x20evidence.\x20The\x20creator\x20must\x0akeep\x20producing\x20—\x20that\x20obligation\x20is\x20the\x20subscriber\x27s\x20protection\x20and\x20the\x0aproduct\x27s\x20integrity.\x0a\x0a##\x203.\x20Pricing\x20models\x0a\x0a1.\x20**Per-period\x20signed\x20charge\x20with\x20delivery\x20gate**\x20(default).\x20Monthly\x20or\x0a\x20\x20\x20chosen\x20cadence;\x20explicit\x20signature\x20each\x20period;\x20charge\x20blocked\x20without\x0a\x20\x20\x20delivery\x20proof;\x20one-signature\x20cancellation.\x0a2.\x20**Annual\x20prepay\x20released\x20per\x20period**.\x20Annual\x20cash\x20lands\x20in\x20escrow\x20and\x0a\x20\x20\x20releases\x20monthly\x20—\x20prepayment\x20with\x20structural\x20stoppage\x20protection\x20for\x0a\x20\x20\x20undelivered\x20months.\x0a3.\x20**Tiered\x20membership**.\x20Each\x20tier\x20maps\x20to\x20concrete\x20deliverables\x20and\x20its\x20own\x0a\x20\x20\x20delivery\x20guard;\x20up/downgrade\x20takes\x20effect\x20next\x20period\x20only.\x20Tier\x0a\x20\x20\x20deliverables\x20must\x20be\x20specific\x20enough\x20for\x20a\x20guard\x20to\x20evaluate.\x0a\x0aPosture\x20guidance:\x20volume\x20rides\x20the\x20consumer\x20\x22signing\x20movement\x22\x20with\x0afirst-month\x20pricing;\x20margin\x20serves\x20fewer\x20true\x20fans\x20at\x20premium\x20tiers\x20and\x0arefuses\x2030%\x20channels;\x20balanced\x20pairs\x20acquisition\x20tools\x20with\x20retention\x0arituals.\x0a\x0a##\x204.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x20Billing-cycle\x20machine\x20with\x20charge\x20guard\x20+\x20delivery\x20gate\x20per\x20period.\x0a-\x20[\x20]\x20One-signature\x20cancellation\x20node;\x20confirm\x20there\x20is\x20exactly\x20one\x20path.\x0a-\x20[\x20]\x20Frozen\x20Allocation\x20100%\x20to\x20creator;\x20no\x20post-publish\x20fee\x20edit\x20surface.\x0a-\x20[\x20]\x20Annual\x20plan:\x20escrowed\x20prepay,\x20per-period\x20release,\x20undelivered-month\x0a\x20\x20\x20\x20\x20\x20refund\x20guaranteed\x20structurally.\x0a-\x20[\x20]\x20DRM/content\x20access\x20rules\x20declared\x20off-chain\x20where\x20applicable.\x0a\x0a##\x205.\x20The\x20\x22Signing\x20Movement\x22\x20campaign\x20(M2–M4)\x0a\x0aTwo\x20assets,\x20one\x20narrative:\x0a\x0a1.\x20**Consumer\x20side\x20—\x20subscription\x20checkup\x20widget.**\x20Input\x20your\x20subscription\x0a\x20\x20\x20list;\x20learn\x20how\x20much\x20you\x20annually\x20pay\x20for\x20unused\x20services\x20(cite\x20the\x202.5×\x0a\x20\x20\x20underestimate\x20and\x2042%\x20unused\x20figures).\x20KPI:\x20≥20,000\x20checkups.\x0a2.\x20**Creator\x20side\x20—\x20\x22100%\x20Arrival\x20Day\x22.**\x20One\x20day\x20each\x20month,\x20creators\x20post\x0a\x20\x20\x20their\x20on-chain\x20per-period\x20release\x20receipts.\x20KPI:\x2030\x20onboarded\x20creators.\x0a\x0aPlus\x20the\x20one-signature\x20cancellation\x20demo\x20video\x20(target\x20≥100K\x20views).\x20Launch\x0aagainst\x20FTC/platform\x20price-hike\x20news\x20cycles\x20—\x20they\x20recur\x20predictably;\x20keep\x0a24-hour\x20response\x20drafts.\x20Budget\x20$4–7K\x20**[estimate]**.\x0a\x0aCapture\x20education\x20recorded-course\x20overflow:\x20the\x20routing\x20rule\x20sends\x0arecorded/self-paced\x20courses\x20here\x20from\x20the\x20education\x20intake.\x0a\x0a##\x206.\x20Channels\x0a\x0aCreator\x20communities\x20(Discord,\x20membership-platform\x20forums\x20—\x20the\x20$131–180\x0amedian-monthly\x20creators\x20experience\x20the\x20incumbent\x27s\x2010–20%\x20fee\x20as\x20a\x20survival\x0aissue),\x20newsletter\x20and\x20indie-dev\x20circles\x20(incumbent\x20IAP\x2030%\x20+\x2075-day\x20float),\x0aHacker\x20News\x20and\x20the\x20anti-dark-pattern\x20audience.\x20$2–5\x20per\x20subscriber\x0a**[estimate]**.\x20Values\x20alignment\x20beats\x20ad\x20spend\x20in\x20this\x20segment.\x0a\x0a##\x207.\x20Retention\x0a\x0a-\x20Migrate\x20creators\x20one\x20tier\x20at\x20a\x20time;\x20show\x20per-period\x20release\x20receipts.\x0a-\x20Lead\x20with\x20the\x20unused-month\x20guarantee:\x20no\x20delivery,\x20no\x20charge.\x0a-\x20The\x20cancellation\x20demo\x20doubles\x20as\x20a\x20conversion\x20asset\x20—\x20trust\x20that\x20you\x20can\x0a\x20\x20leave\x20is\x20why\x20people\x20stay.\x0a-\x20Upgrade/downgrade\x20effective\x20next\x20period\x20keeps\x20accounting\x20and\x20guard\x20logic\x0a\x20\x20honest.\x0a\x0a##\x208.\x20Competitor\x20watch\x20(weekly)\x0a\x0aTake\x20rate\x20and\x20unilateral-change\x20history,\x20charge\x20transparency,\x20cancellation\x0aclick\x20count,\x20stopped-creator\x20policy,\x20time-to-payout.\x20Contrast\x20the\x20FTC\x0asettlement\x20and\x20frozen\x20Allocation\x20—\x20opponent\x20documents,\x20not\x20your\x20adjectives.\x0a\x0a##\x209.\x20Red\x20lines\x0a\x0a1.\x20Never\x20implement,\x20document,\x20or\x20imply\x20auto-renewal.\x0a2.\x20Never\x20charge\x20a\x20period\x20without\x20delivery\x20evidence.\x0a3.\x20Rate-lock\x20claims\x20exist\x20only\x20through\x20published\x20frozen\x20Allocation.\x0a',TRAVEL_MANUAL='#\x20Travel\x20(Custom\x20&\x20Multi-Segment)\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20custom-trip\x20and\x20multi-segment\x20travel\x20studios\x0a>\x20on\x20WoWok.\x20This\x20is\x20a\x20tier-3\x20playbook:\x20the\x20economics\x20are\x20the\x20strongest\x20in\x20the\x0a>\x20catalog,\x20but\x20the\x20adoption\x20bottleneck\x20is\x20real.\x20Anchors\x20from\x20the\x20K1\x20global-OTA\x0a>\x20/\x20package-tour\x20analysis.\x0a\x0a##\x20Business\x20model\x20—\x20direct\x20sales\x0a\x0aWoWok\x20takes\x20no\x20platform\x20commission;\x20a\x20merchant\x20pays\x20only\x20gas,\x20and\x20the\x20default\x0apayout\x20gives\x20the\x20merchant\x20the\x20whole\x20sale.\x20Never\x20copy\x20the\x20OTA\x27s\x2025–36%\x20commission\x0ainto\x20an\x20allocator:\x20that\x20share\x20is\x20displaced\x20by\x20design,\x20not\x20a\x20parameter,\x20and\x0anobody\x20would\x20receive\x20it.\x20Travel\x20is\x20the\x20clearest\x20aggregator\x20case\x20—\x20if\x20you\x20ARE\x20the\x0aoperator\x20(an\x20agent\x20selling\x20hotels,\x20guides\x20and\x20drivers\x20it\x20did\x20not\x20supply),\x20your\x0aown\x20fee\x20is\x20allowed,\x20but\x20only\x20with:\x20an\x20explicit\x20number\x20the\x20traveler\x20can\x20compute\x0abefore\x20booking;\x20an\x20explicit\x20NON-EMPTY\x20recipient\x20Entity\x20per\x20leg\x20(an\x20empty\x20one\x0asilently\x20routes\x20the\x20share\x20to\x20the\x20deploying\x20AI\x20—\x20see\x0a`ts-sdk/w/local/index.ts:74-86`);\x20and\x20no\x20mandatory\x20transit\x20pool\x20on\x20the\x20payout\x0apath\x20—\x20never\x20a\x20fee\x20via\x20a\x20`Surplus`\x20leg,\x20which\x20calls\x20`balance::withdraw_all`\x20and\x0aso\x20doubles\x20as\x20draining\x20the\x20pool.\x20Compete\x20on\x20escrow/arbitration\x20value,\x20not\x20price.\x0a\x0a##\x201.\x20Why\x20travel\x20is\x20deliberately\x20third\x20in\x20line\x0a\x0aGlobal\x20OTAs\x27\x20effective\x20hotel\x20commission\x20runs\x2025–36%\x20after\x20loyalty-tier\x0astacking,\x20the\x20merchant\x20model\x20floats\x20roughly\x20$134B/year\x20in\x20client\x20money,\x20VCC\x0amanual\x20settlement\x20takes\x202–6\x20weeks,\x20and\x20the\x20fund\x20waterfall\x20is\x20invisible:\x0atravelers\x20see\x20totals,\x20hotels\x20see\x20net\x20rates.\x20When\x20failures\x20happen\x20—\x20a\x20major\x0atour\x20operator\x27s\x20collapse\x20stranding\x20hundreds\x20of\x20thousands\x20of\x20customers,\x20tens\x20of\x0abillions\x20in\x20pandemic\x20refunds\x20—\x20relief\x20is\x20post-hoc;\x20EU261\x20compensates\x20flight\x0alegs\x20while\x20downstream\x20segments\x20simply\x20die.\x0a\x0aWoWok\x27s\x20answer\x20is\x20structurally\x20superior:\x20a\x20multi-segment\x20machine\x0a(`segment_D1..DN`)\x20releases\x20each\x20segment\x27s\x20fee\x20as\x20its\x20WIP\x20passes;\x20an\x0ainterrupted\x20node\x20refunds\x20undelivered\x20segments\x20in\x20one\x20transaction;\x20the\x20agent\x0aruns\x20a\x20second-level\x20Allocation\x20from\x20its\x20own\x20Treasury\x20so\x20the\x20waterfall\x20is\x0areadable\x20on-chain;\x20Treasury-scoped\x20Payments\x20can\x20compensate\x20across\x20segments.\x0a\x0aThe\x20bottleneck\x20is\x20adoption,\x20not\x20economics:\x20hotels\x20and\x20drivers\x20are\x20not\x20on\x0achain.\x20That\x20is\x20why\x20the\x20first\x20viable\x20form\x20is\x20the\x20**agent\x20as\x20the\x20single\x0aon-chain\x20counterparty**\x20—\x20agent↔client\x20custody\x20closes\x20the\x20trust\x20loop\x20alone,\x0aand\x20supplier\x20participation\x20grows\x20later\x20with\x20the\x20Passport\x20network.\x20Do\x20not\x0afront-load\x20this\x20industry\x20before\x20the\x20tier-1/2\x20reputation\x20network\x20exists.\x0a\x0aYour\x20sentence:\x20*\x22A\x20collapsed\x20tour\x20operator\x27s\x20stranded\x20millions\x20were\x20post-hoc\x0arelief.\x20The\x20same\x20money\x20in\x20custody\x20with\x20interruption\x20branches\x20is\x20pre-event\x0aisolation.\x22*\x0a\x0a##\x202.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20AOV\x20(5-segment\x20custom\x20trip)\x20|\x20$2,000\x20|\x0a|\x20Effective\x20legacy\x20commission\x20(INCUMBENT\x20benchmark,\x20displaced\x20—\x20not\x20a\x20parameter)\x20|\x2025–36%\x20≈\x20$350–720/trip\x20|\x0a|\x20WoW\x20cost\x20|\x20gas\x20≈\x20$0.02–1\x20across\x202×segments+3\x20txns\x20|\x0a|\x20Settlement\x20|\x20VCC\x202–6\x20weeks\x20→\x20per-segment\x20seconds\x20|\x0a\x0aGas\x20is\x20noise\x20against\x20$350–700\x20saved\x20per\x20trip.\x20That\x20$350–720\x20is\x20the\x20OTA\x27s\x20cut,\x0anot\x20yours:\x20a\x20merchant\x27s\x20own\x20segments\x20pay\x20out\x20Rate\x2010000\x20to\x20the\x20merchant\x27s\x0aEntity,\x20and\x20an\x20aggregator\x27s\x20own\x20fee\x20must\x20be\x20one\x20explicit,\x20pre-order-disclosed\x0anumber\x20on\x20an\x20explicit\x20non-empty\x20Entity\x20—\x20never\x20`order\x20total\x20-\x20segment\x20sums`\x0aimplicitly\x20absorbed,\x20never\x20a\x20`Surplus`\x20remainder.\x20The\x20binding\x20constraint\x20is\x0asupplier\x20adoption;\x20never\x20pretend\x20otherwise.\x0a\x0a##\x203.\x20Pricing\x20models\x0a\x0a1.\x20**Multi-leg\x20itinerary\x20with\x20per-segment\x20release**\x20(default\x20and\x20core).\x0a\x20\x20\x20Every\x20segment\x20has\x20WIP\x20evidence\x20and\x20its\x20own\x20Allocator\x20slice;\x20the\x0a\x20\x20\x20interrupted\x20path\x20refunds\x20undelivered\x20legs\x20in\x20one\x20transaction.\x0a2.\x20**Agent\x20single-counterparty\x20custody**\x20for\x20downstream\x20suppliers\x20not\x20yet\x20on\x0a\x20\x20\x20chain.\x20The\x20agent\x20escrows\x20against\x20the\x20client,\x20holds\x20correct\x20licensing\x20and\x0a\x20\x20\x20funds\x20compensation\x20coverage\x20sized\x20to\x20the\x20maximum\x20single\x20segment.\x0a3.\x20**Weather/condition-guaranteed\x20pricing**\x20via\x20quoted\x20guard\x20+\x20a\x20specified\x0a\x20\x20\x20evidence\x20repository\x20oracle;\x20auto-refund\x20on\x20trigger\x20—\x20test\x20the\x20trigger\x0a\x20\x20\x20source\x20before\x20selling\x20it.\x0a\x0aFIT\x20EXCLUSION:\x20do\x20not\x20sell\x20standard\x20standalone\x20flights\x20or\x20hotels.\x20The\x20WoW\x0avalue\x20there\x20is\x20weak;\x20the\x20fit\x20is\x20custom\x20and\x20packaged\x20multi-segment\x20trips\x0a(package-tour\x20archetype\x20fit:\x2010/10).\x0a\x0a##\x204.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x20Segment\x20machine\x20D1..DN\x20with\x20per-segment\x20WIP\x20gates\x20and\x20release\x0a\x20\x20\x20\x20\x20\x20Allocators.\x0a-\x20[\x20]\x20Explicit\x20interrupted\x20node\x20with\x20one-transaction\x20refund.\x0a-\x20[\x20]\x20Agent\x20Entity\x20with\x20own\x20Treasury\x20+\x20second-level\x20Allocation;\x20waterfall\x0a\x20\x20\x20\x20\x20\x20readable\x20by\x20the\x20buyer\x20BEFORE\x20payment.\x0a-\x20[\x20]\x20Per-leg\x20cancellation\x20policy\x20disclosed\x20at\x20sale;\x20refundable\x20vs\x0a\x20\x20\x20\x20\x20\x20non-refundable\x20legs\x20separated,\x20never\x20blurred.\x0a-\x20[\x20]\x20Compensation\x20fund\x20sized\x20for\x20the\x20maximum\x20single\x20segment.\x0a-\x20[\x20]\x20Weather/condition\x20guard\x20trigger\x20source\x20specified\x20and\x20tested.\x0a\x0a##\x205.\x20Pilot\x20playbook\x20(M4+)\x0a\x0a-\x20Pilot\x20with\x202–3\x20custom-trip\x20/\x20packaged-tour\x20studios\x20under\x20agent-only\x0a\x20\x20custody.\x20Budget\x20$10–15K\x20**[estimate]**.\x0a-\x20Asset\x201:\x20the\x20interactive\x20**$2,000\x20waterfall\x20visualization**\x20—\x20exactly\x20how\x0a\x20\x20the\x20trip\x20price\x20splits\x20to\x20hotel,\x20guide\x20and\x20agent,\x20readable\x20on-chain\x20before\x0a\x20\x20purchase.\x20No\x20OTA\x20on\x20earth\x20can\x20show\x20this.\x0a-\x20Asset\x202:\x20the\x20**weather-guard\x20auto-refund\x20demo**\x20—\x20converts\x20\x22escrow\x22\x20from\x20a\x0a\x20\x20word\x20into\x20a\x20visible\x20guarantee.\x0a-\x20Anchor\x20content\x20to\x20the\x20next\x20large\x20travel-failure\x20news\x20cycle;\x20the\x20structural\x0a\x20\x20contrast\x20(pre-event\x20isolation\x20vs\x20post-hoc\x20relief)\x20writes\x20itself.\x0a\x0a##\x206.\x20Competitor\x20watch\x20(monthly)\x0a\x0aEffective\x20commission\x20after\x20loyalty-tier\x20stacking,\x20waterfall\x20transparency,\x0aper-leg\x20cancellation\x20terms,\x20downstream\x20refund\x20handling\x20(the\x20EU261\x20gap),\x0asettlement\x20speed.\x20Travel\x20is\x20seasonal\x20and\x20contractual\x20—\x20monthly\x20is\x20sufficient;\x0aspend\x20the\x20attention\x20on\x20the\x20pilot\x20studios.\x0a\x0a##\x207.\x20Retention\x0a\x0a-\x20The\x20pre-trip\x20waterfall\x20inspection\x20is\x20the\x20sales\x20asset\x20AND\x20the\x20delivery\x0a\x20\x20promise\x20—\x20rebook\x20on\x20the\x20gap\x20between\x20the\x20two\x20being\x20zero.\x0a-\x20Interrupted-segment\x20one-transaction\x20refund\x20demonstrated\x20before\x20payment.\x0a-\x20Win\x20re-books\x20with\x20itinerary\x20history\x20and\x20per-leg\x20transparency,\x20not\x20points.\x0a\x0a##\x208.\x20Red\x20lines\x0a\x0a1.\x20No\x20standard\x20flight/hotel\x20resale\x20—\x20weak\x20fit,\x20damages\x20positioning.\x0a2.\x20No\x20large\x20cross-period\x20custody\x20marketing\x20before\x20stablecoin\x20bridging\x20is\x0a\x20\x20\x20ready;\x20price\x20in\x20fiat\x20terms.\x0a3.\x20Never\x20commingle\x20undelivered-segment\x20funds\x20with\x20operating\x20cash;\x20cross-leg\x0a\x20\x20\x20responsibility\x20disclosed,\x20never\x20blurred.\x0a',RETAIL_MANUAL='#\x20Retail\x20(Private-Domain\x20Commerce)\x20Merchant\x20Strategy\x20Manual\x0a\x0a>\x20Built-in\x20tactical\x20playbook\x20for\x20sellers\x20who\x20already\x20own\x20traffic\x20—\x20DTC\x20sites,\x0a>\x20community\x20commerce\x20and\x20creator\x20stores\x20—\x20on\x20WoWok.\x20Tier-3\x20deliberately:\x20WoW\x0a>\x20replaces\x20the\x20trust\x20and\x20settlement\x20tax,\x20not\x20the\x20traffic.\x20Anchors\x20from\x20the\x0a>\x20K1\x20scale-marketplace\x20/\x20vertical-handmade\x20analysis.\x0a\x0a##\x20Business\x20model\x20—\x20direct\x20sales\x0a\x0aWoWok\x20takes\x20no\x20platform\x20commission;\x20a\x20merchant\x20pays\x20only\x20gas,\x20and\x20the\x20default\x0apayout\x20gives\x20the\x20seller\x20the\x20whole\x20sale.\x20Never\x20copy\x20the\x20marketplace\x27s\x2030–35%\x0acombined\x20burden\x20into\x20an\x20allocator:\x20that\x20share\x20is\x20displaced\x20by\x20design,\x20not\x20a\x0aparameter,\x20and\x20nobody\x20would\x20receive\x20it.\x20If\x20you\x20ARE\x20the\x20aggregator\x20(a\x20channel\x0aselling\x20several\x20sellers,\x20a\x20bundle,\x20a\x20live-commerce\x20host)\x20you\x20may\x20charge\x20your\x0aown\x20fee,\x20but\x20only\x20with:\x20an\x20explicit\x20number\x20the\x20buyer\x20can\x20compute\x20before\x0aordering;\x20an\x20explicit\x20NON-EMPTY\x20recipient\x20Entity\x20(an\x20empty\x20one\x20silently\x20routes\x0athe\x20share\x20to\x20the\x20deploying\x20AI\x20—\x20see\x20`ts-sdk/w/local/index.ts:74-86`);\x20and\x20no\x0amandatory\x20transit\x20pool\x20on\x20the\x20payout\x20path\x20—\x20never\x20a\x20fee\x20via\x20a\x20`Surplus`\x20leg,\x0awhich\x20calls\x20`balance::withdraw_all`\x20and\x20so\x20doubles\x20as\x20draining\x20the\x20pool.\x0aCompete\x20on\x20escrow/arbitration\x20value,\x20not\x20price.\x0a\x0a##\x201.\x20The\x20honest\x20admission\x20that\x20makes\x20the\x20pitch\x20work\x0a\x0aScale-marketplace\x20sellers\x20carry\x20a\x2030–35%\x20combined\x20burden\x20(8–15%\x20referral\x20+\x0afulfillment\x20+\x20Q4\x20storage\x20multipliers\x20+\x208–12%\x20TACoS),\x20wait\x2014\x20days\x20for\x0asettlement\x20under\x20DD+7\x20reserves\x20that\x20can\x20jump\x20to\x20DD+90\x20(new\x20sellers\x20commonly\x0aface\x20100%\x20reserves),\x20face\x20guarantee-program\x20rulings\x20that\x20default\x20to\x20the\x20buyer\x0aon\x20absence,\x20and\x20absorb\x20a\x2019.3%\x20return\x20rate\x20of\x20which\x20~9%\x20is\x20fraudulent.\x0aUnilateral\x20fee\x20increases\x20on\x20incumbent\x20handmade\x20marketplaces\x20(24.2%)\x20complete\x0athe\x20picture.\x0a\x0aWoWok\x20answers\x20with\x20escrow\x20released\x20on\x20the\x20receipt-confirmation\x20guard,\x0areturn-auth\x20gating\x20that\x20requires\x20dual-signed\x20or\x20logistics-repository\x20evidence,\x0aconfigurable\x20arbitration\x20voting\x20periods,\x20and\x20a\x20repository\x20provenance\x20chain.\x0a\x0aThe\x20honest\x20admission:\x20**WoW\x20does\x20not\x20sell\x20traffic.**\x20The\x20incumbent\x27s\x2040.5%\x0ashare\x20is\x20the\x20value\x20of\x20demand,\x20and\x20a\x20zero-traffic\x20seller\x20should\x20be\x20rejected\x20at\x0aintake.\x20The\x20filter\x20sentence\x20is\x20the\x20strategy:\x20*\x22Of\x20the\x2030%\x20you\x20pay\x20the\x0aincumbent\x20marketplace,\x20which\x20part\x20buys\x20traffic\x20and\x20which\x20buys\x20trust?\x20We\x20don\x27t\x0asell\x20traffic\x20—\x20trust\x20is\x20free,\x20and\x20the\x20whole\x20sale\x20is\x20yours.\x22*\x20Putting\x20the\x0aboundary\x20in\x20the\x20intake\x20questionnaire\x20raises\x20conversion\x20quality.\x0a\x0a##\x202.\x20Economics\x20to\x20memorize\x0a\x0a|\x20Anchor\x20|\x20Value\x20|\x0a|---|---|\x0a|\x20Private-domain\x20AOV\x20|\x20$50\x20|\x0a|\x20Legacy\x20combined\x20burden\x20(INCUMBENT\x20benchmark,\x20displaced\x20—\x20not\x20a\x20parameter)\x20|\x2030–35%\x20≈\x20$300–350\x20per\x20$1,000\x20GMV\x20|\x0a|\x20WoW\x20cost\x20per\x20$1,000\x20GMV\x20|\x20gas\x20≈\x20$0.01–0.5\x20across\x204–6\x20txns\x20(<\x20$1)\x20|\x0a|\x20Settlement\x20|\x2014\x20days\x20+\x20reserve\x20risk\x20→\x20seconds\x20|\x0a|\x20Return\x20rate\x20/\x20fraud\x20share\x20|\x2019.3%\x20/\x209%\x20|\x0a\x0aThat\x20$300–350\x20is\x20the\x20marketplace\x27s\x20burden,\x20not\x20your\x20price:\x20your\x20default\x0asettlement\x20is\x20Rate\x2010000\x20to\x20your\x20own\x20Entity.\x20A\x20channel\x20that\x20resells\x20several\x0asellers\x20is\x20the\x20aggregator\x20case\x20and\x20may\x20charge\x20its\x20own\x20explicit,\x20disclosed\x20fee\x20to\x0aa\x20non-empty\x20Entity\x20—\x20never\x20an\x20implicit\x20remainder,\x20never\x20a\x20`Surplus`\x20drain.\x0a\x0aFloor:\x20never\x20price\x20below\x20COGS\x20+\x20shipping\x20+\x20expected-return\x20provision;\x0acompensation\x20coverage\x20at\x205×\x20maximum\x20single\x20order\x20by\x20default.\x20The\x20economics\x0awork\x20at\x20almost\x20any\x20AOV\x20—\x20traffic\x20availability\x20is\x20the\x20only\x20admission\x0acriterion.\x0a\x0a##\x203.\x20Pricing\x20models\x0a\x0a1.\x20**Escrow\x20released\x20on\x20confirmed\x20receipt**\x20(default).\x20Funds\x20release\x20seconds\x0a\x20\x20\x20after\x20the\x20receipt\x20guard;\x20`return_auth_guard`\x20requires\x20return\x20evidence;\x0a\x20\x20\x20repository\x20provenance\x20supports\x20authenticity\x20claims.\x0a2.\x20**Member/bundle\x20pricing\x20for\x20private\x20communities**.\x20Spend-threshold\x20and\x0a\x20\x20\x20member\x20pricing\x20via\x20rewards\x20inside\x20the\x20owned\x20channel\x20—\x20no\x20platform\x20TACoS.\x0a\x20\x20\x20Bundles\x20stay\x20escrowed\x20per\x20deliverable;\x20never\x20release\x20pre-shipment.\x0a\x0aPosture\x20guidance:\x20volume\x20converts\x20existing\x20flow\x20into\x20escrow\x20GMV\x20with\x0afirst-order\x20and\x20spend-threshold\x20rewards\x20(viable\x20only\x20because\x20gas\x20is\x20under\x20$1\x0aper\x20thousand\x20GMV);\x20margin\x20sells\x20provenance-authenticated\x20premium\x20goods\x20with\x0arepository\x20evidence;\x20balanced\x20pilots\x205–8\x20sellers\x20around\x20the\x20gas-bill\x20proof\x0aevent.\x0a\x0a##\x204.\x20Build\x20checklist\x0a\x0a-\x20[\x20]\x20Order\x20→\x20escrow\x20→\x20shipment\x20→\x20receipt-guard\x20release,\x20seconds\x20latency.\x0a-\x20[\x20]\x20Return-auth\x20flow\x20requiring\x20dual\x20signature\x20or\x20logistics\x20repository\x0a\x20\x20\x20\x20\x20\x20record\x20(structurally\x20raises\x20fraud\x20cost\x20against\x20the\x209%\x20fraud\x20share).\x0a-\x20[\x20]\x20Arbitration\x20with\x20configured\x20voting\x20period;\x20no\x20auto-default\x20rulings.\x0a-\x20[\x20]\x20Compensation\x20fund\x205×\x20max\x20single\x20order.\x0a-\x20[\x20]\x20Repository\x20provenance\x20chain\x20for\x20SKUs\x20where\x20authenticity\x20is\x20claimed.\x0a-\x20[\x20]\x20Intake\x20questionnaire\x20confirming\x20existing\x20traffic;\x20reject\x20zero-traffic\x0a\x20\x20\x20\x20\x20\x20applicants\x20explicitly.\x0a\x0a##\x205.\x20Pilot\x20playbook\x20(M4+)\x0a\x0a-\x20**\x22$1,000\x20GMV\x20Cost\x20Teardown\x22\x20livestream**:\x20the\x20same\x20shop\x27s\x20private-domain\x0a\x20\x20orders\x20run\x20through\x20WoW,\x20full-cycle\x20gas\x20bill\x20published\x20against\x20the\x20$300–350\x0a\x20\x20incumbent\x20burden\x20for\x20identical\x20GMV.\x20Numbers\x20in\x20fiat.\x0a-\x20**Fee-hike\x20refugee\x20targeting**:\x20recruit\x20directly\x20from\x20communities\x20hit\x20by\x20the\x0a\x20\x2024.2%\x20unilateral\x20fee\x20event\x20—\x20the\x20triggering\x20event\x20is\x20the\x20acquisition\x0a\x20\x20channel.\x0a-\x205–8\x20sellers\x20pilot,\x20budget\x20$6–10K\x20**[estimate]**.\x0a\x0a##\x206.\x20Channels\x0a\x0a1.\x20Existing\x20private-traffic\x20sellers\x20(DTC,\x20community\x20commerce,\x20We-commerce)\x0a\x20\x20\x20—\x20the\x20only\x20segment\x20that\x20passes\x20the\x20filter.\x0a2.\x20Incumbent\x20fee-hike\x20victim\x20communities.\x0a3.\x20Live\x20cost-comparison\x20events\x20and\x20their\x20replays.\x0a\x0a##\x207.\x20Conversion\x20and\x20retention\x0a\x0a-\x20Make\x20receipt\x20confirmation\x20a\x20one-tap\x20moment\x20and\x20show\x20the\x20release\x20seconds\x0a\x20\x20later\x20—\x20the\x20speed\x20gap\x20to\x2014-day\x20+\x20reserve\x20settlement\x20is\x20visceral.\x0a-\x20Re-purchase\x20via\x20spend\x20cashback\x20and\x20repository-issued\x20provenance\x0a\x20\x20certificates.\x0a-\x20Show\x20return-averse\x20buyers\x20the\x20evidence-gated\x20return\x20flow\x20up\x20front;\x20it\x0a\x20\x20protects\x20them\x20as\x20much\x20as\x20the\x20seller.\x0a\x0a##\x208.\x20Competitor\x20watch\x20(weekly)\x0a\x0aHeadline\x20price,\x20reserve\x20policy,\x20return-fraud\x20handling,\x20arbitration\x20default\x0abehavior,\x20provenance\x20evidence.\x20Retail\x20promotion\x20cycles\x20move\x20fast;\x20weekly\x0acadence.\x20Never\x20answer\x20a\x20price\x20war\x20—\x20answer\x20with\x20the\x20settlement\x20and\x20reserve\x0acontrast.\x0a\x0a##\x209.\x20Red\x20lines\x0a\x0a1.\x20Never\x20promise\x20traffic.\x0a2.\x20No\x20auto-default\x20buyer-win\x20rulings;\x20the\x20arbitration\x20voting\x20period\x20must\x20be\x0a\x20\x20\x20configured.\x0a3.\x20Physical\x20authenticity\x20claims\x20require\x20repository\x20evidence\x20—\x20never\x20beyond\x0a\x20\x20\x20what\x20the\x20evidence\x20proves.\x0a',BUILTIN_STRATEGY_MANUALS={'education':{'industry':'education','version':STRATEGY_MANUAL_VERSION,'body':EDUCATION_MANUAL},'rental':{'industry':'rental','version':STRATEGY_MANUAL_VERSION,'body':RENTAL_MANUAL},'freelance':{'industry':'freelance','version':STRATEGY_MANUAL_VERSION,'body':FREELANCE_MANUAL},'subscription':{'industry':'subscription','version':STRATEGY_MANUAL_VERSION,'body':SUBSCRIPTION_MANUAL},'travel':{'industry':'travel','version':STRATEGY_MANUAL_VERSION,'body':TRAVEL_MANUAL},'retail':{'industry':'retail','version':STRATEGY_MANUAL_VERSION,'body':RETAIL_MANUAL}};
|
|
@@ -55,6 +55,26 @@ export declare const TemplateFrontmatterSchema: z.ZodObject<{
|
|
|
55
55
|
rate: "rate";
|
|
56
56
|
}>;
|
|
57
57
|
once_per_order: z.ZodOptional<z.ZodBoolean>;
|
|
58
|
+
rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
59
|
+
track: z.ZodEnum<{
|
|
60
|
+
refund: "refund";
|
|
61
|
+
settlement: "settlement";
|
|
62
|
+
}>;
|
|
63
|
+
recipient: z.ZodEnum<{
|
|
64
|
+
entity: "entity";
|
|
65
|
+
signer: "signer";
|
|
66
|
+
guard_identifier: "guard_identifier";
|
|
67
|
+
}>;
|
|
68
|
+
recipient_key: z.ZodOptional<z.ZodString>;
|
|
69
|
+
mode: z.ZodEnum<{
|
|
70
|
+
amount: "amount";
|
|
71
|
+
surplus: "surplus";
|
|
72
|
+
rate: "rate";
|
|
73
|
+
}>;
|
|
74
|
+
value: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
75
|
+
value_from: z.ZodOptional<z.ZodString>;
|
|
76
|
+
note: z.ZodOptional<z.ZodString>;
|
|
77
|
+
}, z.core.$strict>>>;
|
|
58
78
|
description: z.ZodString;
|
|
59
79
|
}, z.core.$strict>;
|
|
60
80
|
fee_params: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync,mkdirSync,readdirSync,readFileSync,renameSync,rmdirSync,statSync,writeFileSync}from'node:fs';import{join}from'node:path';import{z}from'zod';import{getWowokDataDir,getWowokIndustryDir}from'@wowok/wowok';import{SUPPORTED_INDUSTRIES}from'../customer/user-preferences.js';import{isRegisteredIndustry}from'./industry-registry.js';import{BUILTIN_TEMPLATES,BUILTIN_TEMPLATES_VERSION}from'./builtin-templates.js';import{classifyRelease,releaseBodyHash,releaseSentinelLine,stripReleaseSentinel}from'./release-sentinel.js';export const TEMPLATES_SUBDIR='templates';export function resolveTemplatesDir(){return process['env']['WOWOK_TEMPLATES_DIR']||getWowokIndustryDir();}function resolveLegacyTemplatesDir(){return process['env']['WOWOK_LEGACY_TEMPLATES_DIR']||join(getWowokDataDir(),'templates');}const MachineNodeSchema=z['object']({'name':z['string']()['min'](0x1),'role':z['string']()['min'](0x1),'operator':z['enum'](['merchant','order_payer'])['optional'](),'semantic_role':z['enum'](['draft','active','delivered','final','cancelled'])['optional']()}),GuardRefSchema=z['object']({'template_id':z['string']()['regex'](/^(pattern\.[a-z0-9_]+|tpl_[a-z0-9_]+)$/,'guard\x20template_id\x20must\x20be\x20a\x20\x27pattern.*\x27\x20design\x20pattern\x20or\x20\x27tpl_*\x27\x20guard\x20template'),'host':z['enum'](['service','machine','reward','repository','arbitration']),'purpose':z['string']()['min'](0x1)}),AllocatorSchema=z['object']({'recipient':z['enum'](['signer','entity','fixed']),'refund_track':z['enum'](['order_anchored'])['optional'](),'count':z['number']()['int']()['positive'](),'mode':z['enum'](['amount','rate','surplus']),'once_per_order':z['boolean']()['optional'](),'description':z['string']()['min'](0x1)})['strict'](),IndustryNameSchema=z['string']()['regex'](/^[a-z][a-z0-9_]*$/,'industry\x20must\x20be\x20lowercase\x20snake_case\x20(a-z,\x200-9,\x20_)')['refine'](a=>isRegisteredIndustry(a),{'message':'unknown\x20industry\x20—\x20register\x20it\x20first\x20via\x20an\x20industry\x20pack\x20'+'(industry_pack_operation\x20action=\x27scaffold\x27)\x20or\x20the\x20industry\x20generalizer;\x20'+('builtin\x20industries:\x20'+SUPPORTED_INDUSTRIES['join'](',\x20'))});export const TemplateFrontmatterSchema=z['object']({'id':z['string']()['regex'](/^[a-z][a-z0-9_-]*\/[a-z][a-z0-9_-]*$/,'id\x20must\x20be\x20\x27<industry>/<variant>\x27'),'industry':IndustryNameSchema,'variant':z['string']()['regex'](/^[a-z][a-z0-9_-]*$/),'product_ref':z['string']()['regex'](/^[a-z][a-z0-9._-]*$/,'product_ref\x20must\x20be\x20a\x20lowercase\x20product\x20slug')['optional'](),'archetype':z['enum'](['leader','challenger']),'phase':z['number']()['int']()['min'](0x1)['max'](0x3),'machine_shape':z['array'](MachineNodeSchema)['min'](0x1),'guards':z['array'](GuardRefSchema),'allocator':AllocatorSchema,'fee_params':z['record'](z['string'](),z['union']([z['number'](),z['string']()])),'trust_mechanisms':z['array'](z['string']()),'keeper_dependencies':z['array'](z['string']()),'recommended_role':z['enum'](['merchant','supplier','both']),'role_rationale':z['string']()['min'](0x1),'differences':z['array'](z['string']()),'user_inputs':z['array'](z['string']()),'key_risk':z['string']()['min'](0x1),'build_notes':z['array'](z['string']()),'time_anchors':z['record'](z['string'](),z['string']())['optional']()})['strict']();export function parseTemplateFile(a){const b=a['replace'](/^\uFEFF/,'')['replace'](/^<!-- builtin:[a-z0-9-]+:v\d+:[0-9a-f]+ -->\r?\n/,''),c=b['split'](/\r?\n/);if(c[0x0]?.['trim']()!=='---')throw new Error('template\x20must\x20start\x20with\x20a\x20\x27---\x27\x20frontmatter\x20block');let d=-0x1;for(let f=0x1;f<c['length'];f++){if(c[f]['trim']()==='---'){d=f;break;}}if(d===-0x1)throw new Error('unterminated\x20frontmatter\x20block\x20(missing\x20closing\x20\x27---\x27)');const e={};for(let g=0x1;g<d;g++){const h=c[g];if(!h['trim']()||h['trim']()['startsWith']('#'))continue;const j=h['indexOf'](':');if(j===-0x1)throw new Error('invalid\x20frontmatter\x20line\x20'+(g+0x1)+':\x20\x27'+h['trim']()+'\x27\x20(expected\x20\x27key:\x20value\x27)');const k=h['slice'](0x0,j)['trim'](),l=h['slice'](j+0x1)['trim']();if(!k)throw new Error('invalid\x20frontmatter\x20line\x20'+(g+0x1)+':\x20empty\x20key');if(l['startsWith']('[')||l['startsWith']('{'))try{e[k]=JSON['parse'](l);}catch(m){throw new Error('frontmatter\x20key\x20\x27'+k+'\x27\x20is\x20not\x20valid\x20JSON:\x20'+m['message']);}else/^-?\d+(\.\d+)?$/['test'](l)?e[k]=Number(l):e[k]=l;}return{'frontmatter':e,'body':c['slice'](d+0x1)['join']('\x0a')['trim']()};}function frontmatterLine(a,b){if(typeof b==='number')return a+':\x20'+b;if(typeof b==='string')return a+':\x20'+b;return a+':\x20'+JSON['stringify'](b);}export const TEMPLATE_SENTINEL_KIND='industry-template';function canonicalTemplateContent(a){const b=[['id',a['id']],['industry',a['industry']],['variant',a['variant']],['product_ref',a['product_ref']],['archetype',a['archetype']],['phase',a['phase']],['recommended_role',a['recommended_role']],['role_rationale',a['role_rationale']],['key_risk',a['key_risk']],['machine_shape',a['machine_shape']],['guards',a['guards']],['allocator',a['allocator']],['fee_params',a['fee_params']],['trust_mechanisms',a['trust_mechanisms']],['keeper_dependencies',a['keeper_dependencies']],['differences',a['differences']],['user_inputs',a['user_inputs']],['build_notes',a['build_notes']],...a['time_anchors']?[['time_anchors',a['time_anchors']]]:[]],c=['---',...b['map'](([e,f])=>frontmatterLine(e,f)),'---'],d=['','#\x20'+a['industry']+'\x20/\x20'+a['variant']+'\x20('+a['archetype']+')','','>\x20Industry\x20archetype\x20template.\x20Editable\x20and\x20migratable:\x20the\x20frontmatter\x20is','>\x20zod-validated\x20on\x20every\x20load;\x20the\x20body\x20is\x20free-form\x20guidance\x20for\x20the\x20AI.','','##\x20Key\x20risk','',a['key_risk'],'','##\x20Differences\x20vs\x20the\x20sibling\x20variant','',...a['differences']['map'](e=>'-\x20'+e),'','##\x20User\x20inputs\x20(inject\x20at\x20build\x20time)','',...a['user_inputs']['map'](e=>'-\x20'+e),'','##\x20Risk-avoidance\x20checklist\x20(R1-R10)','',...a['trust_mechanisms']['map'](e=>'-\x20'+e),'','##\x20Build\x20notes','',...a['build_notes']['map'](e=>'-\x20'+e),''];return[...c,...d]['join']('\x0a');}export function renderTemplateFile(a){const b=canonicalTemplateContent(a);return releaseSentinelLine(TEMPLATE_SENTINEL_KIND,BUILTIN_TEMPLATES_VERSION,releaseBodyHash(b))+'\x0a'+b;}let seeded=![];function migrateLegacyTemplates(a){const b=resolveLegacyTemplatesDir();if(b===a)return;if(!existsSync(b))return;try{for(const c of readdirSync(b,{'withFileTypes':!![]})){if(!c['isDirectory']())continue;const d=join(b,c['name']),e=join(a,c['name'],TEMPLATES_SUBDIR);for(const g of readdirSync(d,{'withFileTypes':!![]})){if(!g['isFile']()||!g['name']['endsWith']('.md'))continue;const h=join(e,g['name']);if(existsSync(h))continue;mkdirSync(e,{'recursive':!![]}),renameSync(join(d,g['name']),h);}try{rmdirSync(d);}catch{}}try{rmdirSync(b);}catch{}}catch{}}export function seedBuiltinTemplates(){const a=[],b=resolveTemplatesDir();migrateLegacyTemplates(b);for(const c of BUILTIN_TEMPLATES){const d=join(b,c['industry'],TEMPLATES_SUBDIR),e=join(d,c['variant']+'.md'),f={'template':c['id'],'status':'written','path':e};try{if(!existsSync(e))mkdirSync(d,{'recursive':!![]}),writeFileSync(e,renderTemplateFile(c),'utf-8');else{const {sentinel:g,content:h}=stripReleaseSentinel(readFileSync(e,'utf-8'),TEMPLATE_SENTINEL_KIND);if(!g)f['status']='skipped_user_file',f['detail']='template\x20file\x20exists\x20without\x20builtin\x20sentinel;\x20leaving\x20user\x20file\x20untouched';else{const i=classifyRelease(g,h,BUILTIN_TEMPLATES_VERSION);if(i==='current')f['status']='current';else i==='user_modified'?(f['status']='skipped_user_modified',f['detail']='template\x20file\x20was\x20edited\x20locally;\x20keeping\x20user\x20content\x20and\x20not\x20upgrading'):(writeFileSync(e,renderTemplateFile(c),'utf-8'),f['status']='updated');}}}catch(j){f['status']='error',f['detail']=j['message'];}a['push'](f);}return a;}const cache=new Map();export function reloadTemplates(){cache['clear'](),seeded=![];}export function loadAndValidate(a){const b=readFileSync(a,'utf-8');let c;try{c=parseTemplateFile(b);}catch(e){throw new Error('template\x20\x27'+a+'\x27\x20failed\x20to\x20parse:\x20'+e['message']);}const d=TemplateFrontmatterSchema['safeParse'](c['frontmatter']);if(!d['success']){const f=d['error']['issues']['map'](g=>(g['path']['join']('.')||'<root>')+':\x20'+g['message'])['join'](';\x20');throw new Error('template\x20\x27'+a+'\x27\x20failed\x20validation:\x20'+f);}return{...d['data'],'body':c['body'],'source_path':a};}function templateFilesOnDisk(a){const b=[];if(!existsSync(a))return b;for(const c of readdirSync(a,{'withFileTypes':!![]})){if(!c['isDirectory']())continue;const d=join(a,c['name'],TEMPLATES_SUBDIR);if(!existsSync(d))continue;for(const e of readdirSync(d,{'withFileTypes':!![]})){if(e['isFile']()&&e['name']['endsWith']('.md'))b['push'](join(d,e['name']));}}return b['sort']();}export function listTemplates(){!seeded&&(seedBuiltinTemplates(),seeded=!![]);const a=resolveTemplatesDir(),b=[],c=[],d=new Set();for(const e of templateFilesOnDisk(a)){d['add'](e);try{const f=statSync(e)['mtimeMs'],g=cache['get'](e);if(g&&g['mtimeMs']===f){b['push'](g['template']);continue;}const h=loadAndValidate(e);cache['set'](e,{'mtimeMs':f,'template':h}),b['push'](h);}catch(i){cache['delete'](e),c['push'](i['message']);}}for(const j of[...cache['keys']()]){if(!d['has'](j))cache['delete'](j);}return b['sort']((k,l)=>k['id']['localeCompare'](l['id'])),{'templates':b,'errors':c};}export function getTemplate(a){return listTemplates()['templates']['find'](b=>b['id']===a);}export function getTemplatesByIndustry(a){return listTemplates()['templates']['filter'](b=>b['industry']===a);}
|
|
1
|
+
import{existsSync,mkdirSync,readdirSync,readFileSync,renameSync,rmdirSync,statSync,writeFileSync}from'node:fs';import{join}from'node:path';import{z}from'zod';import{getWowokDataDir,getWowokIndustryDir}from'@wowok/wowok';import{SUPPORTED_INDUSTRIES}from'../customer/user-preferences.js';import{isRegisteredIndustry}from'./industry-registry.js';import{BUILTIN_TEMPLATES,BUILTIN_TEMPLATES_VERSION}from'./builtin-templates.js';import{classifyRelease,releaseBodyHash,releaseSentinelLine,stripReleaseSentinel}from'./release-sentinel.js';export const TEMPLATES_SUBDIR='templates';export function resolveTemplatesDir(){return process['env']['WOWOK_TEMPLATES_DIR']||getWowokIndustryDir();}function resolveLegacyTemplatesDir(){return process['env']['WOWOK_LEGACY_TEMPLATES_DIR']||join(getWowokDataDir(),'templates');}const MachineNodeSchema=z['object']({'name':z['string']()['min'](0x1),'role':z['string']()['min'](0x1),'operator':z['enum'](['merchant','order_payer'])['optional'](),'semantic_role':z['enum'](['draft','active','delivered','final','cancelled'])['optional']()}),GuardRefSchema=z['object']({'template_id':z['string']()['regex'](/^(pattern\.[a-z0-9_]+|tpl_[a-z0-9_]+)$/,'guard\x20template_id\x20must\x20be\x20a\x20\x27pattern.*\x27\x20design\x20pattern\x20or\x20\x27tpl_*\x27\x20guard\x20template'),'host':z['enum'](['service','machine','reward','repository','arbitration']),'purpose':z['string']()['min'](0x1)}),AllocatorRowSchema=z['object']({'track':z['enum'](['settlement','refund']),'recipient':z['enum'](['entity','guard_identifier','signer']),'recipient_key':z['string']()['min'](0x1)['optional'](),'mode':z['enum'](['amount','rate','surplus']),'value':z['union']([z['string'](),z['number']()])['optional'](),'value_from':z['string']()['optional'](),'note':z['string']()['optional']()})['strict'](),AllocatorSchema=z['object']({'recipient':z['enum'](['signer','entity','fixed']),'refund_track':z['enum'](['order_anchored'])['optional'](),'count':z['number']()['int']()['positive'](),'mode':z['enum'](['amount','rate','surplus']),'once_per_order':z['boolean']()['optional'](),'rows':z['array'](AllocatorRowSchema)['optional'](),'description':z['string']()['min'](0x1)})['strict'](),IndustryNameSchema=z['string']()['regex'](/^[a-z][a-z0-9_]*$/,'industry\x20must\x20be\x20lowercase\x20snake_case\x20(a-z,\x200-9,\x20_)')['refine'](a=>isRegisteredIndustry(a),{'message':'unknown\x20industry\x20—\x20register\x20it\x20first\x20via\x20an\x20industry\x20pack\x20'+'(industry_pack_operation\x20action=\x27scaffold\x27)\x20or\x20the\x20industry\x20generalizer;\x20'+('builtin\x20industries:\x20'+SUPPORTED_INDUSTRIES['join'](',\x20'))});export const TemplateFrontmatterSchema=z['object']({'id':z['string']()['regex'](/^[a-z][a-z0-9_-]*\/[a-z][a-z0-9_-]*$/,'id\x20must\x20be\x20\x27<industry>/<variant>\x27'),'industry':IndustryNameSchema,'variant':z['string']()['regex'](/^[a-z][a-z0-9_-]*$/),'product_ref':z['string']()['regex'](/^[a-z][a-z0-9._-]*$/,'product_ref\x20must\x20be\x20a\x20lowercase\x20product\x20slug')['optional'](),'archetype':z['enum'](['leader','challenger']),'phase':z['number']()['int']()['min'](0x1)['max'](0x3),'machine_shape':z['array'](MachineNodeSchema)['min'](0x1),'guards':z['array'](GuardRefSchema),'allocator':AllocatorSchema,'fee_params':z['record'](z['string'](),z['union']([z['number'](),z['string']()])),'trust_mechanisms':z['array'](z['string']()),'keeper_dependencies':z['array'](z['string']()),'recommended_role':z['enum'](['merchant','supplier','both']),'role_rationale':z['string']()['min'](0x1),'differences':z['array'](z['string']()),'user_inputs':z['array'](z['string']()),'key_risk':z['string']()['min'](0x1),'build_notes':z['array'](z['string']()),'time_anchors':z['record'](z['string'](),z['string']())['optional']()})['strict']();export function parseTemplateFile(a){const b=a['replace'](/^\uFEFF/,'')['replace'](/^<!-- builtin:[a-z0-9-]+:v\d+:[0-9a-f]+ -->\r?\n/,''),c=b['split'](/\r?\n/);if(c[0x0]?.['trim']()!=='---')throw new Error('template\x20must\x20start\x20with\x20a\x20\x27---\x27\x20frontmatter\x20block');let d=-0x1;for(let f=0x1;f<c['length'];f++){if(c[f]['trim']()==='---'){d=f;break;}}if(d===-0x1)throw new Error('unterminated\x20frontmatter\x20block\x20(missing\x20closing\x20\x27---\x27)');const e={};for(let g=0x1;g<d;g++){const h=c[g];if(!h['trim']()||h['trim']()['startsWith']('#'))continue;const j=h['indexOf'](':');if(j===-0x1)throw new Error('invalid\x20frontmatter\x20line\x20'+(g+0x1)+':\x20\x27'+h['trim']()+'\x27\x20(expected\x20\x27key:\x20value\x27)');const k=h['slice'](0x0,j)['trim'](),l=h['slice'](j+0x1)['trim']();if(!k)throw new Error('invalid\x20frontmatter\x20line\x20'+(g+0x1)+':\x20empty\x20key');if(l['startsWith']('[')||l['startsWith']('{'))try{e[k]=JSON['parse'](l);}catch(m){throw new Error('frontmatter\x20key\x20\x27'+k+'\x27\x20is\x20not\x20valid\x20JSON:\x20'+m['message']);}else/^-?\d+(\.\d+)?$/['test'](l)?e[k]=Number(l):e[k]=l;}return{'frontmatter':e,'body':c['slice'](d+0x1)['join']('\x0a')['trim']()};}function frontmatterLine(a,b){if(typeof b==='number')return a+':\x20'+b;if(typeof b==='string')return a+':\x20'+b;return a+':\x20'+JSON['stringify'](b);}export const TEMPLATE_SENTINEL_KIND='industry-template';function canonicalTemplateContent(a){const b=[['id',a['id']],['industry',a['industry']],['variant',a['variant']],['product_ref',a['product_ref']],['archetype',a['archetype']],['phase',a['phase']],['recommended_role',a['recommended_role']],['role_rationale',a['role_rationale']],['key_risk',a['key_risk']],['machine_shape',a['machine_shape']],['guards',a['guards']],['allocator',a['allocator']],['fee_params',a['fee_params']],['trust_mechanisms',a['trust_mechanisms']],['keeper_dependencies',a['keeper_dependencies']],['differences',a['differences']],['user_inputs',a['user_inputs']],['build_notes',a['build_notes']],...a['time_anchors']?[['time_anchors',a['time_anchors']]]:[]],c=['---',...b['map'](([e,f])=>frontmatterLine(e,f)),'---'],d=['','#\x20'+a['industry']+'\x20/\x20'+a['variant']+'\x20('+a['archetype']+')','','>\x20Industry\x20archetype\x20template.\x20Editable\x20and\x20migratable:\x20the\x20frontmatter\x20is','>\x20zod-validated\x20on\x20every\x20load;\x20the\x20body\x20is\x20free-form\x20guidance\x20for\x20the\x20AI.','','##\x20Key\x20risk','',a['key_risk'],'','##\x20Differences\x20vs\x20the\x20sibling\x20variant','',...a['differences']['map'](e=>'-\x20'+e),'','##\x20User\x20inputs\x20(inject\x20at\x20build\x20time)','',...a['user_inputs']['map'](e=>'-\x20'+e),'','##\x20Risk-avoidance\x20checklist\x20(R1-R10)','',...a['trust_mechanisms']['map'](e=>'-\x20'+e),'','##\x20Build\x20notes','',...a['build_notes']['map'](e=>'-\x20'+e),''];return[...c,...d]['join']('\x0a');}export function renderTemplateFile(a){const b=canonicalTemplateContent(a);return releaseSentinelLine(TEMPLATE_SENTINEL_KIND,BUILTIN_TEMPLATES_VERSION,releaseBodyHash(b))+'\x0a'+b;}let seeded=![];function migrateLegacyTemplates(a){const b=resolveLegacyTemplatesDir();if(b===a)return;if(!existsSync(b))return;try{for(const c of readdirSync(b,{'withFileTypes':!![]})){if(!c['isDirectory']())continue;const d=join(b,c['name']),e=join(a,c['name'],TEMPLATES_SUBDIR);for(const g of readdirSync(d,{'withFileTypes':!![]})){if(!g['isFile']()||!g['name']['endsWith']('.md'))continue;const h=join(e,g['name']);if(existsSync(h))continue;mkdirSync(e,{'recursive':!![]}),renameSync(join(d,g['name']),h);}try{rmdirSync(d);}catch{}}try{rmdirSync(b);}catch{}}catch{}}export function seedBuiltinTemplates(){const a=[],b=resolveTemplatesDir();migrateLegacyTemplates(b);for(const c of BUILTIN_TEMPLATES){const d=join(b,c['industry'],TEMPLATES_SUBDIR),e=join(d,c['variant']+'.md'),f={'template':c['id'],'status':'written','path':e};try{if(!existsSync(e))mkdirSync(d,{'recursive':!![]}),writeFileSync(e,renderTemplateFile(c),'utf-8');else{const {sentinel:g,content:h}=stripReleaseSentinel(readFileSync(e,'utf-8'),TEMPLATE_SENTINEL_KIND);if(!g)f['status']='skipped_user_file',f['detail']='template\x20file\x20exists\x20without\x20builtin\x20sentinel;\x20leaving\x20user\x20file\x20untouched';else{const i=classifyRelease(g,h,BUILTIN_TEMPLATES_VERSION);if(i==='current')f['status']='current';else i==='user_modified'?(f['status']='skipped_user_modified',f['detail']='template\x20file\x20was\x20edited\x20locally;\x20keeping\x20user\x20content\x20and\x20not\x20upgrading'):(writeFileSync(e,renderTemplateFile(c),'utf-8'),f['status']='updated');}}}catch(j){f['status']='error',f['detail']=j['message'];}a['push'](f);}return a;}const cache=new Map();export function reloadTemplates(){cache['clear'](),seeded=![];}export function loadAndValidate(a){const b=readFileSync(a,'utf-8');let c;try{c=parseTemplateFile(b);}catch(e){throw new Error('template\x20\x27'+a+'\x27\x20failed\x20to\x20parse:\x20'+e['message']);}const d=TemplateFrontmatterSchema['safeParse'](c['frontmatter']);if(!d['success']){const f=d['error']['issues']['map'](g=>(g['path']['join']('.')||'<root>')+':\x20'+g['message'])['join'](';\x20');throw new Error('template\x20\x27'+a+'\x27\x20failed\x20validation:\x20'+f);}return{...d['data'],'body':c['body'],'source_path':a};}function templateFilesOnDisk(a){const b=[];if(!existsSync(a))return b;for(const c of readdirSync(a,{'withFileTypes':!![]})){if(!c['isDirectory']())continue;const d=join(a,c['name'],TEMPLATES_SUBDIR);if(!existsSync(d))continue;for(const e of readdirSync(d,{'withFileTypes':!![]})){if(e['isFile']()&&e['name']['endsWith']('.md'))b['push'](join(d,e['name']));}}return b['sort']();}export function listTemplates(){!seeded&&(seedBuiltinTemplates(),seeded=!![]);const a=resolveTemplatesDir(),b=[],c=[],d=new Set();for(const e of templateFilesOnDisk(a)){d['add'](e);try{const f=statSync(e)['mtimeMs'],g=cache['get'](e);if(g&&g['mtimeMs']===f){b['push'](g['template']);continue;}const h=loadAndValidate(e);cache['set'](e,{'mtimeMs':f,'template':h}),b['push'](h);}catch(i){cache['delete'](e),c['push'](i['message']);}}for(const j of[...cache['keys']()]){if(!d['has'](j))cache['delete'](j);}return b['sort']((k,l)=>k['id']['localeCompare'](l['id'])),{'templates':b,'errors':c};}export function getTemplate(a){return listTemplates()['templates']['find'](b=>b['id']===a);}export function getTemplatesByIndustry(a){return listTemplates()['templates']['filter'](b=>b['industry']===a);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{GUARD_TEMPLATES,fillGuardTemplate}from'./guard-templates.js';import{MACHINE_TEMPLATES,fillTemplate as
|
|
1
|
+
import{GUARD_TEMPLATES,fillGuardTemplate}from'./guard-templates.js';import{MACHINE_TEMPLATES,fillTemplate as a244a}from'./machine-templates.js';import{SERVICE_TEMPLATES,fillServiceTemplate}from'./service-templates.js';import{ORDER_TEMPLATES,fillTemplate as a244b}from'./order-templates.js';import{PROGRESS_TEMPLATES,fillProgressTemplate}from'./progress-templates.js';import{ARBITRATION_TEMPLATES,fillTemplate as a244c}from'./arbitration-templates.js';import{TREASURY_TEMPLATES,fillTemplate as a244d}from'./treasury-templates.js';import{PERMISSION_TEMPLATES,fillTemplate as a244e}from'./permission-templates.js';import{PASSPORT_TEMPLATES,fillTemplate as a244f}from'./passport-templates.js';import{ALLOCATION_TEMPLATES,fillTemplate as a244g}from'./allocation-templates.js';import{CONTACT_TEMPLATES,fillTemplate as a244h}from'./contact-templates.js';import{REWARD_TEMPLATES}from'./reward-templates.js';export const TEMPLATE_REGISTRY_VERSION=0x1;export const TEMPLATE_OBJECT_TYPES=['guard','machine','service','order','progress','arbitration','treasury','permission','passport','allocation','reward','contact'];function normalizeParam(a){return{'name':a['name'],'type':a['type'],'description':a['description']??'','required':a['required'],...a['default']!==undefined?{'default':a['default']}:{},...a['constraint']!==undefined?{'constraint':a['constraint']}:{}};}function guardMeta(a){return{'id':a['id'],'object_type':'guard','name':a['name'],'description':a['description'],'scenes':[a['scene_id']],'industries':a['applicable_industries'],'instantiable':!![],'parameters':a['parameters']['map'](b=>normalizeParam(b))};}function machineMeta(a){return{'id':a['id'],'object_type':'machine','name':a['name'],'description':a['description'],'scenes':[a['scene_id']],'industries':a['applicable_industries'],'instantiable':!![],'parameters':a['parameters']['map'](b=>normalizeParam(b))};}function bodyMeta(a,b,c,d){return{'id':a['id'],'object_type':b,'name':a['name'],'description':a['description'],'scenes':c,'industries':d,'instantiable':!![],'parameters':a['params']['map'](e=>normalizeParam(e))};}function rewardMeta(a){return{'id':a['type'],'object_type':'reward','name':a['name'],'description':a['description'],'scenes':[],'industries':[],'instantiable':![],'parameters':a['parameters']['map'](b=>normalizeParam(b))};}let REGISTRY=null,ID_COLLISIONS=[];function buildRegistry(){const a=new Map(),b=[],c=d=>{if(a['has'](d['meta']['id'])){b['push'](d['meta']['id']);return;}a['set'](d['meta']['id'],d);};for(const d of GUARD_TEMPLATES){c({'meta':guardMeta(d),'raw':d,'notes':d['creation_notes']});}for(const e of MACHINE_TEMPLATES){c({'meta':machineMeta(e),'raw':e,'notes':e['creation_notes']});}for(const f of SERVICE_TEMPLATES){c({'meta':bodyMeta(f,'service',f['applicable_scenes'],f['industry_tags']),'raw':f,'notes':f['notes']});}for(const g of ORDER_TEMPLATES){c({'meta':bodyMeta(g,'order',g['applicable_scenes'],g['industry_tags']),'raw':g,'notes':g['notes']});}for(const h of PROGRESS_TEMPLATES){c({'meta':bodyMeta(h,'progress',h['applicable_scenes'],h['industry_tags']),'raw':h,'notes':h['notes']});}for(const i of ARBITRATION_TEMPLATES){c({'meta':bodyMeta(i,'arbitration',i['applicable_scenes'],i['industry_tags']),'raw':i,'notes':i['notes']});}for(const j of TREASURY_TEMPLATES){c({'meta':bodyMeta(j,'treasury',j['applicable_scenes'],j['industry_tags']),'raw':j,'notes':j['notes']});}for(const k of PERMISSION_TEMPLATES){c({'meta':bodyMeta(k,'permission',k['applicable_scenes'],k['industry_tags']),'raw':k,'notes':k['notes']});}for(const l of PASSPORT_TEMPLATES){c({'meta':bodyMeta(l,'passport',l['applicable_scenarios'],l['industry_tags']),'raw':l,'notes':l['notes']});}for(const m of ALLOCATION_TEMPLATES){c({'meta':bodyMeta(m,'allocation',m['applicable_scenes'],m['industry_tags']),'raw':m,'notes':m['notes']});}for(const n of REWARD_TEMPLATES){c({'meta':rewardMeta(n),'raw':n,'guidance':{'guardCondition':n['guardCondition'],'amountRange':n['amountRange'],'allocationStrategy':n['allocationStrategy'],'example':n['example'],'relevantGuardOps':n['relevantGuardOps']}});}for(const o of CONTACT_TEMPLATES){c({'meta':bodyMeta(o,'contact',o['applicable_scenes'],o['industry_tags']),'raw':o,'notes':o['notes']});}return ID_COLLISIONS=b,a;}function registry(){return!REGISTRY&&(REGISTRY=buildRegistry()),REGISTRY;}export function getTemplateIdCollisions(){return registry(),ID_COLLISIONS;}export function getTemplateCounts(){const a=Object['fromEntries'](TEMPLATE_OBJECT_TYPES['map'](b=>[b,0x0]));for(const b of registry()['values']()){a[b['meta']['object_type']]+=0x1;}return a;}export function listTemplates(a){const b=[...registry()['values']()]['map'](c=>c['meta']);return a?b['filter'](c=>c['object_type']===a):b;}export function getTemplateDetail(a){const b=registry()['get'](a);if(!b)return null;return{...b['meta'],'raw':b['raw'],...b['notes']?{'notes':b['notes']}:{},...b['guidance']?{'guidance':b['guidance']}:{}};}export function findTemplateObjectType(a){return registry()['get'](a)?.['meta']['object_type']??null;}export function instantiateTemplate(a,b){const c=registry()['get'](a);if(!c)return{'ok':![],'object_type':null,'template_id':a,'error':'Template\x20not\x20found:\x20'+a+'.\x20Use\x20get_templates\x20without\x20\x27template\x27\x20to\x20list\x20all\x20template\x20ids.'};const d=c['meta']['object_type'];if(!c['meta']['instantiable'])return{'ok':![],'object_type':d,'template_id':a,'error':'Reward\x20templates\x20are\x20guidance-only\x20(prose\x20guard\x20conditions)\x20and\x20cannot\x20be\x20'+'instantiated\x20into\x20executable\x20JSON.\x20Use\x20the\x20guidance\x20payload\x20to\x20design\x20the\x20'+'Reward\x20+\x20Guard\x20manually.','guidance':c['guidance']};switch(d){case'guard':{const e=fillGuardTemplate(a,b);if(!e['ok'])return{'ok':![],'object_type':d,'template_id':a,'error':e['error'],...e['missing']?{'missing_params':e['missing']}:{}};return{'ok':!![],'object_type':d,'template_id':a,'body':{'table':e['table'],'root':e['root']},...c['notes']?{'notes':c['notes']}:{}};}case'machine':{const f=a244a(a,b);if(!f['success'])return{'ok':![],'object_type':d,'template_id':a,'error':f['validation_errors']?.['join'](';\x20')??'Machine\x20template\x20fill\x20failed',...f['missing_params']?{'missing_params':f['missing_params']}:{}};return{'ok':!![],'object_type':d,'template_id':a,'body':{'nodes':f['filled_nodes'],'pairs':f['filled_pairs']},...c['notes']?{'notes':c['notes']}:{}};}case'service':{const g=fillServiceTemplate(a,b);if(!g['ok'])return{'ok':![],'object_type':d,'template_id':a,'error':g['error']??'Service\x20template\x20fill\x20failed',...g['missing_required']?{'missing_params':g['missing_required']}:{}};return{'ok':!![],'object_type':d,'template_id':a,'body':g['body'],...c['notes']?{'notes':c['notes']}:{}};}case'order':case'arbitration':case'treasury':case'permission':case'passport':case'allocation':case'progress':case'contact':{const h=fillBodyTemplate(d,a,b);if(!h['ok'])return{'ok':![],'object_type':d,'template_id':a,'error':h['error']};return{'ok':!![],'object_type':d,'template_id':a,'body':h['body'],...c['notes']?{'notes':c['notes']}:{}};}default:return{'ok':![],'object_type':d,'template_id':a,'error':'Instantiation\x20not\x20supported\x20for\x20object_type\x20\x27'+d+'\x27'};}}function fillBodyTemplate(a,b,c){switch(a){case'order':return a244b(b,c);case'arbitration':return a244c(b,c);case'treasury':return a244d(b,c);case'permission':return a244e(b,c);case'passport':return a244f(b,c);case'allocation':return a244g(b,c);case'progress':return fillProgressTemplate(b,c);case'contact':return a244h(b,c);default:return{'ok':![],'error':'No\x20body-template\x20fill\x20for\x20\x27'+a+'\x27'};}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ENTRYPOINT}from'@wowok/wowok';import{buildViewport,runNodeAnalyzers}from'../graph/onchain/index.js';import{makeProposalNode}from'../graph/onchain/proposal-graph.js';import{machineRuleNodeAnalyzer,allocationRuleNodeAnalyzer}from'./rule-node-analyzers.js';import{GUARD_TEMPLATES}from'./guard-templates.js';import{GUARD_DESIGN_PATTERNS}from'./guard-design-patterns.js';import{unannotatedBuyerActionNodes}from'./scenario-modes.js';const DISPUTE_NODE_REGEX=/(^|_)(disputed?|arbitration|arb)(_|$)|^(refund|refunded|deposit_refunded|deposit_deducted|cancel|cancelled)$/i,KNOWN_GUARD_REF_IDS=new Set([...GUARD_DESIGN_PATTERNS['map'](a=>a['id']),...GUARD_TEMPLATES['map'](a=>a['id'])]);function guardRefChecks(a){const b=[];for(const c of a['guards']){if(!/^(pattern\.[a-z0-9_]+|tpl_[a-z0-9_]+)$/['test'](c['template_id'])){b['push']({'rule_id':'R-REF-01','severity':'high','title':'Guard\x20reference\x20\x27'+c['template_id']+'\x27\x20is\x20not\x20a\x20resolvable\x20id','detail':'Guard\x20references\x20must\x20name\x20a\x20guard\x20design\x20pattern\x20(\x27pattern.*\x27,\x20'+GUARD_DESIGN_PATTERNS['length']+'\x20available)\x20or\x20a\x20guard\x20template\x20(\x27tpl_*\x27,\x20'+GUARD_TEMPLATES['length']+'\x20available).\x20Bare\x20prose\x20ids\x20dangle:\x20no\x20builder\x20can\x20resolve\x20them,\x20so\x20the\x20AI\x20invents\x20guard\x20logic\x20at\x20build\x20time.','suggestion':'Replace\x20with\x20the\x20semantically\x20nearest\x20pattern.*/tpl_*\x20id\x20(compose\x20multi-condition\x20logic\x20in\x20the\x20purpose\x20text).'});continue;}!KNOWN_GUARD_REF_IDS['has'](c['template_id'])&&b['push']({'rule_id':'R-REF-02','severity':'high','title':'Guard\x20reference\x20\x27'+c['template_id']+'\x27\x20does\x20not\x20exist\x20in\x20any\x20guard\x20catalog','detail':'The\x20id\x20is\x20namespaced\x20correctly\x20but\x20matches\x20no\x20guard\x20design\x20pattern\x20nor\x20guard\x20template\x20—\x20a\x20dangling\x20reference\x20the\x20AI\x20cannot\x20resolve.','suggestion':'Fix\x20the\x20id\x20(typo)\x20or\x20point\x20it\x20at\x20the\x20nearest\x20existing\x20pattern.*/tpl_*\x20entry.'});}return b;}function staticChecks(a){const b=[];for(const h of a['machine_shape']){DISPUTE_NODE_REGEX['test'](h['name'])&&b['push']({'rule_id':'R-M1-11','severity':'critical','title':'Machine\x20node\x20\x27'+h['name']+'\x27\x20models\x20dispute/refund\x20flow','detail':'Disputes\x20are\x20independent\x20of\x20the\x20Machine\x20workflow;\x20refunds\x20route\x20via\x20Allocators\x20triggered\x20by\x20business\x20states.','suggestion':'Remove\x20the\x20node;\x20route\x20refunds\x20via\x20Allocator\x20states\x20(closed_cancel/returned)\x20and\x20disputes\x20via\x20the\x20Arbitration\x20object.'});}for(const i of a['guards']){/time_lock|order_holder|progress_state/['test'](i['template_id'])&&!/order\.service|project bind|service binding/i['test'](i['purpose'])&&b['push']({'rule_id':'R-C3-05','severity':'medium','title':'Guard\x20\x27'+i['template_id']+'\x27\x20consumes\x20a\x20submitted\x20Order\x20without\x20project\x20binding','detail':'Passport\x20submissions\x20are\x20caller-built;\x20without\x20logic_equal[order.service,\x20<service>]\x20a\x20stale\x20order\x20from\x20another\x20project\x20can\x20satisfy\x20the\x20guard\x20for\x20a\x20fresh\x20order.','suggestion':'State\x20the\x20project\x20binding\x20in\x20the\x20guard\x20purpose\x20AND\x20include\x20it\x20in\x20the\x20guard\x20root\x20at\x20build\x20time.'});}a['machine_shape']['length']===0x0&&b['push']({'rule_id':'R-M1-01','severity':'critical','title':'machine_shape\x20is\x20empty','detail':'No\x20entry\x20node\x20—\x20the\x20Machine\x20cannot\x20start.','suggestion':'Add\x20at\x20least\x20one\x20entry\x20node\x20representing\x20the\x20escrowed\x20state.'});const c=a['guards']['some'](j=>/refund|cancel/i['test'](j['template_id'])||/refund|cancel/i['test'](j['purpose']))||/refund/i['test'](a['allocator']['description']);!c&&b['push']({'rule_id':'R1','severity':'high','title':'No\x20refund\x20path\x20detected','detail':'No\x20refund/cancel\x20guard\x20and\x20no\x20refund\x20route\x20in\x20the\x20allocator\x20description.','suggestion':'Add\x20a\x20refund/cancel\x20guard\x20or\x20an\x20allocator\x20refund\x20route\x20before\x20publishing.'});const d=a['guards']['some'](j=>j['host']==='arbitration')||a['trust_mechanisms']['some'](j=>j['startsWith']('R2'));!d&&b['push']({'rule_id':'R2','severity':'high','title':'No\x20independent\x20Arbitration\x20reference\x20detected','detail':'The\x20template\x20carries\x20no\x20arbitration-hosted\x20guard\x20and\x20no\x20R2\x20trust\x20mechanism.','suggestion':'Mount\x20an\x20independent\x20Arbitration\x20object\x20with\x20its\x20own\x20Permission.'});a['keeper_dependencies']['length']===0x0&&b['push']({'rule_id':'R9','severity':'medium','title':'No\x20keeper\x20dependencies\x20declared','detail':'Time-driven\x20transitions\x20only\x20ALLOW\x20advancement\x20—\x20someone\x20must\x20run\x20the\x20keepers.','suggestion':'Declare\x20the\x20keeper\x20operations\x20(timeouts,\x20window\x20expiries,\x20settlement\x20triggers).'});const e=Object['keys'](a['fee_params'])['filter'](j=>/commission|fee|rate_bps/i['test'](j));if(a['allocator']['mode']==='rate'&&e['length']>0x0){const j=a['allocator']['description']['toLowerCase'](),k=/platform|treasury|fee (account|recipient)|to the (platform|service owner)/['test'](j)||/surplus/['test'](j);!k&&b['push']({'rule_id':'R-ALLOC-01','severity':'high','title':'Rate\x20allocator\x20has\x20no\x20declared\x20destination\x20for\x20the\x20platform/fee\x20share','detail':'fee_params\x20carry\x20commission\x20keys\x20('+e['join'](',\x20')+')\x20but\x20the\x20allocator\x20description\x20does\x20not\x20state\x20where\x20the\x20platform\x20share\x20lands.\x20On-chain\x20allocation\x20delivers\x20each\x20Rate\x20to\x20ITS\x20recipient\x20slot;\x20a\x20share\x20bound\x20to\x20the\x20merchant\x20entity\x20pays\x20the\x20merchant\x20—\x20the\x20fee\x20has\x20nowhere\x20to\x20go\x20(verified\x20on\x20testnet:\x20the\x20fee\x20share\x20settled\x20at\x20the\x20merchant\x20owner).','suggestion':'Name\x20the\x20recipient\x20slot\x20per\x20share\x20(platform/treasury\x20entity\x20vs\x20seller\x20surplus)\x20in\x20the\x20allocator\x20description,\x20and\x20bind\x20the\x20platform\x20Rate\x20to\x20a\x20distinct\x20non-merchant\x20entity\x20before\x20publishing.'});}const f=unannotatedBuyerActionNodes(a['machine_shape']);return f['length']>0x0&&b['push']({'rule_id':'R-OPER-01','severity':'medium','title':'Buyer-side\x20node(s)\x20without\x20an\x20operator\x20annotation','detail':'Node(s)\x20'+f['map'](l=>'\x27'+l+'\x27')['join'](',\x20')+'\x20look\x20like\x20order-payer\x20actions\x20but\x20carry\x20no\x20operator\x20field.\x20At\x20build\x20time\x20they\x20default\x20to\x20a\x20merchant\x20permission\x20slot,\x20and\x20the\x20order\x20payer\x20cannot\x20advance\x20them\x20(E_PERMISSION_DENIED).','suggestion':'Annotate\x20true\x20buyer\x20actions\x20with\x20operator:\x20\x22order_payer\x22\x20(an\x20EMPTY\x20namedOperator\x20—\x20the\x20on-chain\x20check\x20resolves\x20it\x20to\x20the\x20order\x20payer);\x20rename\x20merchant-side\x20states\x20(e.g.\x20\x27cancelled\x27\x20->\x20\x27merchant_cancelled\x27)\x20when\x20the\x20actor\x20is\x20NOT\x20the\x20buyer.'}),b;}const PERIOD_COUNT_KEY_REGEX=/^(monthly_allocators|term_count|session_count|segment_count|periods|cycles|installments)$/;function poolPeriodCount(a){for(const [b,c]of Object['entries'](a['fee_params'])){if(PERIOD_COUNT_KEY_REGEX['test'](b)&&typeof c==='number'&&c>=0x2)return c;}return undefined;}function periodicReleaseChecks(a){const b=poolPeriodCount(a);if(b===undefined)return[];const c=[a['allocator']['description'],...a['build_notes'],...a['trust_mechanisms'],...a['guards']['map'](f=>f['purpose'])]['join']('\x20\x0a\x20'),d=[];/surplus/i['test'](c)&&!/no surplus|surplus[^.\n]*(disabled|forbidden|disallowed)|amount mode only|single surplus/i['test'](c)&&d['push']({'rule_id':'R-PER-01','severity':'high','title':'Multi-period\x20pool\x20('+b+'\x20periods)\x20declares\x20Surplus\x20without\x20a\x20terminal-only\x20qualifier','detail':'A\x20Surplus\x20allocator\x20entry\x20runs\x20balance::withdraw_all\x20(allocation.move:288-298).\x20In\x20a\x20pool\x20pre-funded\x20for\x20'+b+'\x20periods\x20it\x20drains\x20every\x20future\x20release,\x20not\x20just\x20the\x20remainder.','suggestion':'Release\x20each\x20period\x20with\x20Amount;\x20if\x20the\x20pool\x20remainder\x20settles\x20in\x20one\x20entry,\x20declare\x20it\x20explicitly\x20as\x20the\x20SINGLE\x20terminal\x20Surplus\x20at\x20the\x20settlement\x20node,\x20or\x20disable\x20Surplus\x20outright.'});const e=/per[- ](month|period|term|session|cycle|segment)|one per (rent )?period|release-sequence lock/i['test'](c);return!e&&d['push']({'rule_id':'R-PER-02','severity':'high','title':'Multi-period\x20pool\x20('+b+'\x20periods)\x20declares\x20no\x20per-period\x20release\x20Guard','detail':'alloc()\x20has\x20no\x20consumed/nonce\x20flag\x20(allocation.move:204-321):\x20two\x20releases\x20bound\x20to\x20the\x20SAME\x20Guard\x20can\x20both\x20fire\x20the\x20same\x20day\x20and\x20drain\x20the\x20pool.\x20The\x20cadence\x20gate\x20must\x20be\x20one\x20Guard\x20per\x20period.','suggestion':'Declare\x20one\x20release\x20Guard\x20per\x20period\x20(per-month/per-term\x20time-lock\x20Guards,\x20each\x20keyed\x20to\x20its\x20own\x20period\x20window)\x20in\x20the\x20guard\x20set.'}),!/threshold[^.\n]*(one|single|per[- ]|month|period|term|session|=\s*0\b|\b0\b|must be 0)/i['test'](c)&&d['push']({'rule_id':'R-PER-03','severity':'medium','title':'Multi-period\x20pool\x20('+b+'\x20periods)\x20does\x20not\x20pin\x20threshold\x20to\x20one\x20period','detail':'alloc()\x20asserts\x20balance\x20>=\x20threshold\x20before\x20EVERY\x20release\x20(allocation.move:206).\x20A\x20threshold\x20sized\x20to\x20the\x20total\x20pool\x20passes\x20the\x20first\x20release\x20and\x20then\x20locks\x20all\x20remaining\x20periods.','suggestion':'State\x20in\x20the\x20allocator\x20description\x20or\x20build\x20notes\x20that\x20threshold\x20=\x20one\x20period\x27s\x20release\x20amount\x20(never\x20the\x20pre-funded\x20total).'}),d;}const MIN_PRICE_KEY_REGEX=/^(?:min_[a-z0-9_]*?(?:price|amount|usd|value)|price_floor)$/,FLOOR_TEXT_REGEX=/fixed (?:fee|charge)[^.\n]*(?:<|less than|below) [^.\n]*(?:lowest|minimum|min)|minimum (?:sku|order|item|unit) (?:price|amount)|(?:below|under|<=)\s*the\s+smallest[^.\n]*(?:order|escrow|booking|price)/i,FIXED_FEE_TEXT_REGEX=/\bamount mode\b|fixed (?:fee|fulfillment|fulfilment|per[- ]order) (?:fee|charge)|\bAmount\b[^.\n]*(?:fee|charge)/i;function fundAnchorChecks(a){const b=[],c=[a['allocator']['description'],...a['build_notes'],...a['trust_mechanisms'],...a['guards']['map'](h=>h['template_id']+'\x20'+h['purpose'])]['join']('\x20\x0a\x20'),d=a['allocator']['refund_track']==='order_anchored'||/allocator_order_anchor/['test'](c)||/guardidentifier\(0\)|order[- ]anchored|for_object/i['test'](c);!d&&b['push']({'rule_id':'R-ANCHOR-01','severity':'critical','title':'Allocator\x20has\x20no\x20order\x20anchor\x20—\x20its\x20Guard\x20cannot\x20bind\x20the\x20paying\x20Order','detail':'Every\x20recipient\x20of\x20this\x20allocator\x20is\x20a\x20fixed\x20party\x20(recipient=\x27'+a['allocator']['recipient']+'\x27,\x20no\x20GuardIdentifier\x20row),\x20so\x20nothing\x20in\x20the\x20Guard\x27s\x20verification\x20context\x20names\x20the\x20Order\x20being\x20settled:\x20Recipient::Entity/Signer\x20are\x20resolved\x20without\x20any\x20submission\x20check\x20(allocation.move:383-388)\x20and\x20the\x20Allocation\x20itself\x20never\x20enters\x20the\x20Guard\x20context.\x20Testnet\x20proved\x20the\x20consequence:\x20a\x20passport\x20built\x20from\x20an\x20ALREADY-SETTLED\x20order\x20of\x20the\x20same\x20Service\x20drained\x20a\x20different\x20order\x27s\x20escrow\x20(CR-01).\x20The\x20identifier-255\x20once-slot\x20does\x20not\x20help\x20—\x20it\x20is\x20stored\x20per\x20Allocation,\x20so\x20a\x20fresh\x20pool\x20has\x20no\x20record.','suggestion':'Adopt\x20pattern.allocator_order_anchor:\x20add\x20one\x20{GuardIdentifier:\x200}\x20row\x20with\x20Rate\x200\x20(pays\x20nothing,\x20makes\x20the\x20submitted\x20Order\x20the\x20Guard\x27s\x20binding\x20target),\x20declare\x20refund_track:\x20\x22order_anchored\x22,\x20and\x20pin\x20the\x20Guard\x20expression\x20to\x20that\x20identifier\x20plus\x20logic_equal[order.service,\x20<this\x20service>].'});const e=a['allocator']['mode']==='amount',f=e||FIXED_FEE_TEXT_REGEX['test'](c),g=Object['keys'](a['fee_params'])['some'](h=>MIN_PRICE_KEY_REGEX['test'](h))||FLOOR_TEXT_REGEX['test'](c);return f&&!g&&b['push']({'rule_id':'R-FIXFEE-01','severity':e?'critical':'high','title':'Fixed\x20Amount\x20fee\x20with\x20no\x20minimum\x20order\x20value\x20—\x20sub-fee\x20orders\x20deadlock\x20permanently','detail':'alloc()\x20asserts\x20balance\x20>=\x20fix\x20before\x20distributing\x20(allocation.move:322):\x20an\x20order\x20escrowed\x20BELOW\x20the\x20fixed\x20fee\x20can\x20never\x20settle,\x20and\x20the\x20terminal\x20nodes\x20(completed/closed_cancel)\x20leave\x20no\x20refund\x20path\x20for\x20it,\x20so\x20buyer\x20funds\x20and\x20the\x20order\x20strand\x20forever\x20(testnet\x20CR-02,\x20reproduced\x20on\x20a\x200.001\x20WOW\x20SKU\x20against\x20a\x200.15\x20WOW\x20fee).','suggestion':'Declare\x20a\x20minimum\x20listing/order\x20value\x20above\x20every\x20fixed\x20leg\x20in\x20fee_params\x20(e.g.\x20min_sku_price)\x20and\x20state\x20it\x20in\x20the\x20allocator\x20description,\x20or\x20model\x20the\x20per-order\x20fee\x20as\x20Rate/RateGross\x20instead\x20of\x20a\x20fixed\x20Amount.'}),a['allocator']['once_per_order']===!![]&&!/per[- ]allocation|per[- ]pool|not cross[- ]order|within (a|the) (pool|allocation)/i['test'](c)&&b['push']({'rule_id':'R-ONCE-SCOPE-01','severity':'medium','title':'once_per_order\x20claim\x20does\x20not\x20state\x20its\x20per-Allocation\x20scope','detail':'The\x20identifier-255\x20once-slot\x20is\x20keyed\x20(guard,\x20allocator,\x20submission)\x20ON\x20ONE\x20Allocation,\x20so\x20replay\x20immunity\x20holds\x20within\x20a\x20single\x20pool\x20only;\x20a\x20second\x20Allocation\x20of\x20the\x20same\x20Service\x20starts\x20with\x20no\x20record.\x20Presenting\x20ONCE\x20as\x20general\x20idempotency\x20is\x20what\x20let\x20testnet\x20CR-01\x20read\x20as\x20\x27already\x20protected\x27.','suggestion':'Say\x20explicitly\x20that\x20255\x20protects\x20one\x20pool,\x20and\x20pair\x20it\x20with\x20the\x20order\x20anchor\x20(R-ANCHOR-01)\x20for\x20cross-order\x20safety.'}),b;}const BRANCH_STATE_REGEX=/(cancel|return|withdraw|exit|expired)/i;function syntheticMachine(a){const b=a['machine_shape']['map'](e=>({'name':e['name'],'description':e['role'],'operator':e['operator']})),c=[],d=(e,f)=>[{'name':e,'weight':0x1,'named_operator':f==='order_payer'?'':'order_holder'}];b['length']>0x0&&c['push']({'prev_node':'','next_node':b[0x0]['name'],'threshold':0x1,'forwards':d('enter_'+b[0x0]['name'],b[0x0]['operator'])});for(let e=0x0;e<b['length']-0x1;e++){const f=b[e]['name'],g=b[e+0x1];if(BRANCH_STATE_REGEX['test'](g['name']))continue;c['push']({'prev_node':f,'next_node':g['name'],'threshold':0x1,'forwards':d(f+'_to_'+g['name'],g['operator'])});}if(b['length']>0x0)for(const h of b){BRANCH_STATE_REGEX['test'](h['name'])&&c['push']({'prev_node':b[0x0]['name'],'next_node':h['name'],'threshold':0x1,'forwards':d('to_'+h['name'],h['operator'])});}return{'nodes':b,'pairs':c};}function singleNodeGraph(a){return{'network':ENTRYPOINT['Testnet'],'seed':a['id'],'builtAt':Date['now'](),'nodes':new Map([[a['id'],a]]),'edges':[],'out':new Map(),'inc':new Map(),'gaps':[],'truncations':[],'rpcReport':{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0},'budgetExhausted':{}};}function analyzerFindings(a){const b=makeProposalNode('machine',syntheticMachine(a)),c=makeProposalNode('allocation',{}),d=[];for(const e of[b,c]){const g=singleNodeGraph(e),h=buildViewport(g,g['seed'],'neutral');for(const i of runNodeAnalyzers(h,[machineRuleNodeAnalyzer,allocationRuleNodeAnalyzer])){d['push'](i);}}return d;}const SEVERITY_ORDER={'low':0x0,'medium':0x1,'high':0x2,'critical':0x3};export function scanTemplate(a){const b=[...staticChecks(a),...guardRefChecks(a),...fundAnchorChecks(a),...periodicReleaseChecks(a)];for(const e of analyzerFindings(a)){const g=e['severity']==='info'?'low':e['severity'];b['push']({'rule_id':e['ruleId'],'severity':g,'title':e['title'],'detail':e['detail'],'suggestion':e['suggestion']});}b['sort']((h,i)=>SEVERITY_ORDER[i['severity']]-SEVERITY_ORDER[h['severity']]);const c=b['length']>0x0?b[0x0]['severity']:'low',d=b['filter'](h=>h['severity']==='critical')['map'](h=>''+(h['rule_id']?h['rule_id']+':\x20':'')+h['title']);return{'template_id':a['id'],'risk_level':c,'passed':d['length']===0x0,'findings':b,'red_flags':d};}
|
|
1
|
+
import{ENTRYPOINT}from'@wowok/wowok';import{buildViewport,runNodeAnalyzers}from'../graph/onchain/index.js';import{makeProposalNode}from'../graph/onchain/proposal-graph.js';import{machineRuleNodeAnalyzer,allocationRuleNodeAnalyzer}from'./rule-node-analyzers.js';import{GUARD_TEMPLATES}from'./guard-templates.js';import{GUARD_DESIGN_PATTERNS}from'./guard-design-patterns.js';import{unannotatedBuyerActionNodes}from'./scenario-modes.js';const PLATFORM_TAKE_KEY=/^(?:platform_(?:share|commission|take)_bps|platform_fee_rate_bps|commission_rate_bps|(?:base_)?commission_rate_bps|offsite_ads_rate_bps|service_fee_rate_bps|payment_fee_bps)$/,MERCHANT_OWN_PRICE_KEY=/^(?:merchant_service_fee_bps|contract_fee_(?:small|large)_usd|contract_fee_tier_boundary_usd|digital_product_fee_(?:bps|min_usd|max_usd)|arbitration_fee.*|escrow_.*|min_.*|max_.*)$/,MERCHANT_SHARE_KEY=/^(?:host|property|partner|institution|landlord|freelancer|creator|seller|instructor)_rate_bps$/;function directSalesEconomyChecks(a){const b=[],c=a['fee_params'],d=Object['keys'](c)['filter'](n=>PLATFORM_TAKE_KEY['test'](n)&&typeof c[n]==='number'&&c[n]!==0x0);d['length']>0x0&&b['push']({'rule_id':'R-ECON-01','severity':'critical','title':'Template\x20mandates\x20a\x20platform\x20commission\x20('+d['map'](n=>n+'='+c[n])['join'](',\x20')+')','detail':'WoWok\x20is\x20DIRECT\x20SALES:\x20the\x20protocol\x20never\x20extracts\x20and\x20a\x20merchant\x20pays\x20only\x20gas,\x20so\x20the\x20merchant-side\x20share\x20must\x20default\x20to\x20the\x20whole\x20sale.\x20A\x20non-zero\x20platform\x20take\x20is\x20(a)\x20an\x20extraction\x20the\x20platform\x20has\x20no\x20right\x20to,\x20and\x20(b)\x20an\x20UNALLOCATED\x20liability\x20—\x20no\x20template\x20declares\x20a\x20platform\x20address,\x20so\x20at\x20build\x20time\x20it\x20resolves\x20to\x20the\x20deploying\x20merchant\x20itself\x20(blank\x20→\x20Account.Instance(),\x20ts-sdk/w/local/index.ts:74-86),\x20to\x20the\x20keeper\x20(Recipient::Signer\x20→\x20tx_context::sender,\x20allocation.move:386-387),\x20or\x20back\x20to\x20the\x20buyer\x20(Recipient::GuardIdentifier,\x20allocation.move:378-382).\x20None\x20of\x20those\x20is\x20revenue.','suggestion':'Set\x20'+d['join'](',\x20')+'\x20to\x200\x20and\x20give\x20the\x20merchant\x20the\x20whole\x20sale\x20(single\x20Rate\x2010000\x20leg).\x20If\x20the\x20merchant\x20IS\x20the\x20aggregator\x20and\x20genuinely\x20charges\x20a\x20fee,\x20declare\x20it\x20via\x20merchant_service_fee_bps\x20with\x20an\x20EXPLICIT\x20non-empty\x20recipient\x20Entity.'});const e=a['allocator']['description'],f=/(?:commission|take|platform|remainder|share)\s*(?:=|:)\s*order\s*total\s*-\s*(?:segment|sum)/i['test'](e),g=/(?:platform|commission|fee|take)[^.;]{0,120}\bsurplus\b|\bsurplus\b[^.;]{0,120}(?:platform|commission|fee|take)/i['test'](e);f&&b['push']({'rule_id':'R-ECON-02','severity':'critical','title':'Take\x20is\x20an\x20implicit\x20remainder\x20(not\x20computable\x20before\x20ordering)','detail':'The\x20allocator\x20describes\x20the\x20platform\x20share\x20as\x20\x22order\x20total\x20-\x20segment\x20sums\x22,\x20so\x20the\x20amount\x20taken\x20depends\x20on\x20the\x20segment\x20configuration\x20rather\x20than\x20a\x20declared\x20rate.\x20A\x20buyer\x20(or\x20their\x20AI)\x20cannot\x20compute\x20the\x20take\x20BEFORE\x20ordering,\x20which\x20defeats\x20pre-order\x20evaluation\x20—\x20and\x20an\x20unbounded\x20remainder\x20off\x20a\x20transit\x20pool\x20is\x20unbounded\x20extraction.','suggestion':'Pin\x20every\x20share\x20to\x20an\x20EXPLICIT\x20Rate\x20(or\x20an\x20Amount\x20derived\x20from\x20a\x20declared\x20rate).\x20A\x20supplier\x20fee\x20belongs\x20in\x20its\x20own\x20explicitly-priced\x20segment\x20order,\x20never\x20as\x20a\x20residual\x20share.'});g&&b['push']({'rule_id':'R-ECON-02','severity':'high','title':'Fee\x20appears\x20to\x20be\x20taken\x20by\x20a\x20Surplus\x20leg','detail':'A\x20Surplus\x20sharing\x20entry\x20allocates\x20the\x20WHOLE\x20remaining\x20balance\x20(allocation.move:427\x20withdraw_all\x20semantics),\x20so\x20it\x20cannot\x20express\x20\x22take\x2015%\x22:\x20it\x20doubles\x20as\x20draining\x20the\x20pool.\x20Note\x20the\x20SAME\x20mechanism\x20is\x20why\x20rental/p2p-shortstay\x20disables\x20Surplus\x20outright\x20to\x20protect\x20the\x20claim-window\x20balance.','suggestion':'Use\x20Rate\x20(or\x20RateGross)\x20for\x20any\x20proportional\x20share.\x20Reserve\x20Surplus\x20for\x20an\x20explicitly-bounded\x20residual\x20whose\x20recipient\x20and\x20cap\x20are\x20stated.'});const h=/\{\s*(?:who|Entity|Signer|GuardIdentifier)\s*:/['test'](e)||/recipient\s*[:=]/i['test'](e),i=/^(?:merchant_service_fee_bps|digital_product_fee_bps|logistics_rate_bps|service_fee_rate_bps)$/,j=Object['keys'](c)['some'](n=>i['test'](n)&&typeof c[n]==='number'&&c[n]!==0x0);j&&!h&&d['length']===0x0&&b['push']({'rule_id':'R-ECON-03','severity':'high','title':'Fee-bearing\x20template\x20names\x20no\x20recipient\x20slot\x20for\x20the\x20non-merchant\x20share','detail':'fee_params\x20carry\x20fee-shaped\x20keys\x20but\x20the\x20allocator\x20names\x20no\x20recipient\x20for\x20them.\x20On-chain\x20each\x20Rate\x20lands\x20in\x20ITS\x20OWN\x20recipient\x20slot;\x20an\x20unnamed\x20one\x20resolves\x20to\x20the\x20deploying\x20account\x20(ts-sdk/w/local/index.ts:74-86),\x20to\x20the\x20keeper\x20(allocation.move:386-387),\x20or\x20back\x20to\x20the\x20buyer.\x20The\x20share\x20is\x20then\x20an\x20unallocated\x20liability\x20rather\x20than\x20revenue.','suggestion':'State\x20the\x20recipient\x20per\x20share\x20in\x20the\x20allocator\x20description\x20and\x20bind\x20it\x20to\x20an\x20explicit\x20NON-EMPTY\x20Entity\x20the\x20buyer\x20can\x20see\x20before\x20ordering.\x20Never\x20leave\x20it\x20blank.'});const k=/(?:layer-?1|service-?level|pool)[^.]*settles? the full amount|full amount to the (?:platform|organizer) pool/i['test'](e);k&&b['push']({'rule_id':'R-ECON-04','severity':'medium','title':'Escrow\x20transits\x20an\x20organizer\x20pool\x20before\x20reaching\x20the\x20merchant','detail':'The\x20full\x20order\x20amount\x20settles\x20into\x20a\x20platform/organizer\x20pool\x20first\x20and\x20is\x20then\x20redistributed.\x20That\x20contradicts\x20the\x20direct-sales\x20promise\x20(\x22money\x20moves\x20only\x20between\x20the\x20two\x20parties\x22)\x20and\x20makes\x20the\x20organizer\x20a\x20waypoint\x20on\x20every\x20payout,\x20including\x20every\x20refund.','suggestion':'Release\x20supplier\x20segments\x20directly\x20from\x20the\x20order\x27s\x20own\x20Allocation,\x20and\x20make\x20the\x20organizer\x20a\x20named\x20party\x20rather\x20than\x20a\x20transit\x20node.'});const l=Object['keys'](c)['find'](n=>/^attributed_.*_bps$/['test'](n)&&typeof c[n]==='number'),m=Object['keys'](c)['find'](n=>/^(?:base_)?commission_rate_bps$/['test'](n)&&typeof c[n]==='number');l&&m&&c[l]>c[m]&&b['push']({'rule_id':'R-ECON-05','severity':'medium','title':'Attribution-priced\x20take:\x20a\x20cheaper\x20acquisition\x20channel\x20is\x20charged\x20MORE','detail':l+'='+c[l]+'\x20exceeds\x20'+m+'='+c[m]+'.\x20Charging\x20more\x20for\x20attributed\x20orders\x20means\x20the\x20merchant\x27s\x20cheap\x20channels\x20(KOC,\x20social,\x20repeat\x20buyers)\x20are\x20penalised\x20—\x20the\x20opposite\x20of\x20what\x20direct\x20sales\x20should\x20reward.','suggestion':'Price\x20every\x20channel\x20identically.\x20Attribution\x20may\x20change\x20RANKING,\x20never\x20the\x20take.'});if(a['allocator']['mode']==='rate'){const n=Object['keys'](c)['filter'](q=>MERCHANT_SHARE_KEY['test'](q)&&typeof c[q]==='number'),o=Object['keys'](c)['filter'](q=>PLATFORM_TAKE_KEY['test'](q)&&typeof c[q]==='number'),p=[...n,...o];if(n['length']>0x0&&o['length']>0x0){const q=p['map'](u=>c[u])['filter'](u=>typeof u==='number'),r=q['reduce']((u,v)=>u+v,0x0),s=/surplus/i['test'](e);r!==0x2710&&!s&&b['push']({'rule_id':'R-ECON-06','severity':'critical','title':'Rate\x20shares\x20sum\x20to\x20'+r+',\x20not\x2010000','detail':'Declared\x20rate\x20shares\x20('+p['map']((u,v)=>u+'='+q[v])['join']('\x20+\x20')+')\x20total\x20'+r+'.\x20With\x20no\x20Surplus\x20recipient\x20the\x20remainder\x20is\x20not\x20protected:\x20the\x20chain\x20records\x20no\x20\x22already\x20triggered\x22\x20flag,\x20so\x20a\x20balance\x20left\x20behind\x20after\x20a\x20partial\x20split\x20can\x20be\x20claimed\x20REPEATEDLY\x20by\x20anyone\x20passing\x20the\x20same\x20Guard.\x20This\x20is\x20exactly\x20what\x20happens\x20when\x20a\x20platform\x20leg\x20is\x20zeroed\x20without\x20recomputing\x20the\x20merchant\x20leg.','suggestion':'Make\x20the\x20shares\x20sum\x20to\x20exactly\x2010000,\x20or\x20declare\x20an\x20explicit\x20Surplus\x20recipient\x20for\x20the\x20residual.'});}}return b;}const DISPUTE_NODE_REGEX=/(^|_)(disputed?|arbitration|arb)(_|$)|^(refund|refunded|deposit_refunded|deposit_deducted|cancel|cancelled)$/i,KNOWN_GUARD_REF_IDS=new Set([...GUARD_DESIGN_PATTERNS['map'](a=>a['id']),...GUARD_TEMPLATES['map'](a=>a['id'])]);function guardRefChecks(a){const b=[];for(const c of a['guards']){if(!/^(pattern\.[a-z0-9_]+|tpl_[a-z0-9_]+)$/['test'](c['template_id'])){b['push']({'rule_id':'R-REF-01','severity':'high','title':'Guard\x20reference\x20\x27'+c['template_id']+'\x27\x20is\x20not\x20a\x20resolvable\x20id','detail':'Guard\x20references\x20must\x20name\x20a\x20guard\x20design\x20pattern\x20(\x27pattern.*\x27,\x20'+GUARD_DESIGN_PATTERNS['length']+'\x20available)\x20or\x20a\x20guard\x20template\x20(\x27tpl_*\x27,\x20'+GUARD_TEMPLATES['length']+'\x20available).\x20Bare\x20prose\x20ids\x20dangle:\x20no\x20builder\x20can\x20resolve\x20them,\x20so\x20the\x20AI\x20invents\x20guard\x20logic\x20at\x20build\x20time.','suggestion':'Replace\x20with\x20the\x20semantically\x20nearest\x20pattern.*/tpl_*\x20id\x20(compose\x20multi-condition\x20logic\x20in\x20the\x20purpose\x20text).'});continue;}!KNOWN_GUARD_REF_IDS['has'](c['template_id'])&&b['push']({'rule_id':'R-REF-02','severity':'high','title':'Guard\x20reference\x20\x27'+c['template_id']+'\x27\x20does\x20not\x20exist\x20in\x20any\x20guard\x20catalog','detail':'The\x20id\x20is\x20namespaced\x20correctly\x20but\x20matches\x20no\x20guard\x20design\x20pattern\x20nor\x20guard\x20template\x20—\x20a\x20dangling\x20reference\x20the\x20AI\x20cannot\x20resolve.','suggestion':'Fix\x20the\x20id\x20(typo)\x20or\x20point\x20it\x20at\x20the\x20nearest\x20existing\x20pattern.*/tpl_*\x20entry.'});}return b;}function staticChecks(a){const b=[];for(const f of a['machine_shape']){DISPUTE_NODE_REGEX['test'](f['name'])&&b['push']({'rule_id':'R-M1-11','severity':'critical','title':'Machine\x20node\x20\x27'+f['name']+'\x27\x20models\x20dispute/refund\x20flow','detail':'Disputes\x20are\x20independent\x20of\x20the\x20Machine\x20workflow;\x20refunds\x20route\x20via\x20Allocators\x20triggered\x20by\x20business\x20states.','suggestion':'Remove\x20the\x20node;\x20route\x20refunds\x20via\x20Allocator\x20states\x20(closed_cancel/returned)\x20and\x20disputes\x20via\x20the\x20Arbitration\x20object.'});}for(const h of a['guards']){/time_lock|order_holder|progress_state/['test'](h['template_id'])&&!/order\.service|project bind|service binding/i['test'](h['purpose'])&&b['push']({'rule_id':'R-C3-05','severity':'medium','title':'Guard\x20\x27'+h['template_id']+'\x27\x20consumes\x20a\x20submitted\x20Order\x20without\x20project\x20binding','detail':'Passport\x20submissions\x20are\x20caller-built;\x20without\x20logic_equal[order.service,\x20<service>]\x20a\x20stale\x20order\x20from\x20another\x20project\x20can\x20satisfy\x20the\x20guard\x20for\x20a\x20fresh\x20order.','suggestion':'State\x20the\x20project\x20binding\x20in\x20the\x20guard\x20purpose\x20AND\x20include\x20it\x20in\x20the\x20guard\x20root\x20at\x20build\x20time.'});}a['machine_shape']['length']===0x0&&b['push']({'rule_id':'R-M1-01','severity':'critical','title':'machine_shape\x20is\x20empty','detail':'No\x20entry\x20node\x20—\x20the\x20Machine\x20cannot\x20start.','suggestion':'Add\x20at\x20least\x20one\x20entry\x20node\x20representing\x20the\x20escrowed\x20state.'});const c=a['guards']['some'](i=>/refund|cancel/i['test'](i['template_id'])||/refund|cancel/i['test'](i['purpose']))||/refund/i['test'](a['allocator']['description']);!c&&b['push']({'rule_id':'R1','severity':'high','title':'No\x20refund\x20path\x20detected','detail':'No\x20refund/cancel\x20guard\x20and\x20no\x20refund\x20route\x20in\x20the\x20allocator\x20description.','suggestion':'Add\x20a\x20refund/cancel\x20guard\x20or\x20an\x20allocator\x20refund\x20route\x20before\x20publishing.'});const d=a['guards']['some'](i=>i['host']==='arbitration')||a['trust_mechanisms']['some'](i=>i['startsWith']('R2'));!d&&b['push']({'rule_id':'R2','severity':'high','title':'No\x20independent\x20Arbitration\x20reference\x20detected','detail':'The\x20template\x20carries\x20no\x20arbitration-hosted\x20guard\x20and\x20no\x20R2\x20trust\x20mechanism.','suggestion':'Mount\x20an\x20independent\x20Arbitration\x20object\x20with\x20its\x20own\x20Permission.'});a['keeper_dependencies']['length']===0x0&&b['push']({'rule_id':'R9','severity':'medium','title':'No\x20keeper\x20dependencies\x20declared','detail':'Time-driven\x20transitions\x20only\x20ALLOW\x20advancement\x20—\x20someone\x20must\x20run\x20the\x20keepers.','suggestion':'Declare\x20the\x20keeper\x20operations\x20(timeouts,\x20window\x20expiries,\x20settlement\x20triggers).'});b['push'](...directSalesEconomyChecks(a));const e=unannotatedBuyerActionNodes(a['machine_shape']);return e['length']>0x0&&b['push']({'rule_id':'R-OPER-01','severity':'medium','title':'Buyer-side\x20node(s)\x20without\x20an\x20operator\x20annotation','detail':'Node(s)\x20'+e['map'](i=>'\x27'+i+'\x27')['join'](',\x20')+'\x20look\x20like\x20order-payer\x20actions\x20but\x20carry\x20no\x20operator\x20field.\x20At\x20build\x20time\x20they\x20default\x20to\x20a\x20merchant\x20permission\x20slot,\x20and\x20the\x20order\x20payer\x20cannot\x20advance\x20them\x20(E_PERMISSION_DENIED).','suggestion':'Annotate\x20true\x20buyer\x20actions\x20with\x20operator:\x20\x22order_payer\x22\x20(an\x20EMPTY\x20namedOperator\x20—\x20the\x20on-chain\x20check\x20resolves\x20it\x20to\x20the\x20order\x20payer);\x20rename\x20merchant-side\x20states\x20(e.g.\x20\x27cancelled\x27\x20->\x20\x27merchant_cancelled\x27)\x20when\x20the\x20actor\x20is\x20NOT\x20the\x20buyer.'}),b;}const PERIOD_COUNT_KEY_REGEX=/^(monthly_allocators|term_count|session_count|segment_count|periods|cycles|installments)$/;function poolPeriodCount(a){for(const [b,c]of Object['entries'](a['fee_params'])){if(PERIOD_COUNT_KEY_REGEX['test'](b)&&typeof c==='number'&&c>=0x2)return c;}return undefined;}function periodicReleaseChecks(a){const b=poolPeriodCount(a);if(b===undefined)return[];const c=[a['allocator']['description'],...a['build_notes'],...a['trust_mechanisms'],...a['guards']['map'](f=>f['purpose'])]['join']('\x20\x0a\x20'),d=[];/surplus/i['test'](c)&&!/no surplus|surplus[^.\n]*(disabled|forbidden|disallowed)|amount mode only|single surplus/i['test'](c)&&d['push']({'rule_id':'R-PER-01','severity':'high','title':'Multi-period\x20pool\x20('+b+'\x20periods)\x20declares\x20Surplus\x20without\x20a\x20terminal-only\x20qualifier','detail':'A\x20Surplus\x20allocator\x20entry\x20runs\x20balance::withdraw_all\x20(allocation.move:288-298).\x20In\x20a\x20pool\x20pre-funded\x20for\x20'+b+'\x20periods\x20it\x20drains\x20every\x20future\x20release,\x20not\x20just\x20the\x20remainder.','suggestion':'Release\x20each\x20period\x20with\x20Amount;\x20if\x20the\x20pool\x20remainder\x20settles\x20in\x20one\x20entry,\x20declare\x20it\x20explicitly\x20as\x20the\x20SINGLE\x20terminal\x20Surplus\x20at\x20the\x20settlement\x20node,\x20or\x20disable\x20Surplus\x20outright.'});const e=/per[- ](month|period|term|session|cycle|segment)|one per (rent )?period|release-sequence lock/i['test'](c);return!e&&d['push']({'rule_id':'R-PER-02','severity':'high','title':'Multi-period\x20pool\x20('+b+'\x20periods)\x20declares\x20no\x20per-period\x20release\x20Guard','detail':'alloc()\x20has\x20no\x20consumed/nonce\x20flag\x20(allocation.move:204-321):\x20two\x20releases\x20bound\x20to\x20the\x20SAME\x20Guard\x20can\x20both\x20fire\x20the\x20same\x20day\x20and\x20drain\x20the\x20pool.\x20The\x20cadence\x20gate\x20must\x20be\x20one\x20Guard\x20per\x20period.','suggestion':'Declare\x20one\x20release\x20Guard\x20per\x20period\x20(per-month/per-term\x20time-lock\x20Guards,\x20each\x20keyed\x20to\x20its\x20own\x20period\x20window)\x20in\x20the\x20guard\x20set.'}),!/threshold[^.\n]*(one|single|per[- ]|month|period|term|session|=\s*0\b|\b0\b|must be 0)/i['test'](c)&&d['push']({'rule_id':'R-PER-03','severity':'medium','title':'Multi-period\x20pool\x20('+b+'\x20periods)\x20does\x20not\x20pin\x20threshold\x20to\x20one\x20period','detail':'alloc()\x20asserts\x20balance\x20>=\x20threshold\x20before\x20EVERY\x20release\x20(allocation.move:206).\x20A\x20threshold\x20sized\x20to\x20the\x20total\x20pool\x20passes\x20the\x20first\x20release\x20and\x20then\x20locks\x20all\x20remaining\x20periods.','suggestion':'State\x20in\x20the\x20allocator\x20description\x20or\x20build\x20notes\x20that\x20threshold\x20=\x20one\x20period\x27s\x20release\x20amount\x20(never\x20the\x20pre-funded\x20total).'}),d;}const MIN_PRICE_KEY_REGEX=/^(?:min_[a-z0-9_]*?(?:price|amount|usd|value)|price_floor)$/,FLOOR_TEXT_REGEX=/fixed (?:fee|charge)[^.\n]*(?:<|less than|below) [^.\n]*(?:lowest|minimum|min)|minimum (?:sku|order|item|unit) (?:price|amount)|(?:below|under|<=)\s*the\s+smallest[^.\n]*(?:order|escrow|booking|price)/i,FIXED_FEE_TEXT_REGEX=/\bamount mode\b|fixed (?:fee|fulfillment|fulfilment|per[- ]order) (?:fee|charge)|\bAmount\b[^.\n]*(?:fee|charge)/i;function fundAnchorChecks(a){const b=[],c=[a['allocator']['description'],...a['build_notes'],...a['trust_mechanisms'],...a['guards']['map'](h=>h['template_id']+'\x20'+h['purpose'])]['join']('\x20\x0a\x20'),d=a['allocator']['refund_track']==='order_anchored'||/allocator_order_anchor/['test'](c)||/guardidentifier\(0\)|order[- ]anchored|for_object/i['test'](c);!d&&b['push']({'rule_id':'R-ANCHOR-01','severity':'critical','title':'Allocator\x20has\x20no\x20order\x20anchor\x20—\x20its\x20Guard\x20cannot\x20bind\x20the\x20paying\x20Order','detail':'Every\x20recipient\x20of\x20this\x20allocator\x20is\x20a\x20fixed\x20party\x20(recipient=\x27'+a['allocator']['recipient']+'\x27,\x20no\x20GuardIdentifier\x20row),\x20so\x20nothing\x20in\x20the\x20Guard\x27s\x20verification\x20context\x20names\x20the\x20Order\x20being\x20settled:\x20Recipient::Entity/Signer\x20are\x20resolved\x20without\x20any\x20submission\x20check\x20(allocation.move:383-388)\x20and\x20the\x20Allocation\x20itself\x20never\x20enters\x20the\x20Guard\x20context.\x20Testnet\x20proved\x20the\x20consequence:\x20a\x20passport\x20built\x20from\x20an\x20ALREADY-SETTLED\x20order\x20of\x20the\x20same\x20Service\x20drained\x20a\x20different\x20order\x27s\x20escrow\x20(CR-01).\x20The\x20identifier-255\x20once-slot\x20does\x20not\x20help\x20—\x20it\x20is\x20stored\x20per\x20Allocation,\x20so\x20a\x20fresh\x20pool\x20has\x20no\x20record.','suggestion':'Adopt\x20pattern.allocator_order_anchor:\x20add\x20one\x20{GuardIdentifier:\x200}\x20row\x20with\x20Rate\x200\x20(pays\x20nothing,\x20makes\x20the\x20submitted\x20Order\x20the\x20Guard\x27s\x20binding\x20target),\x20declare\x20refund_track:\x20\x22order_anchored\x22,\x20and\x20pin\x20the\x20Guard\x20expression\x20to\x20that\x20identifier\x20plus\x20logic_equal[order.service,\x20<this\x20service>].'});const e=a['allocator']['mode']==='amount',f=e||FIXED_FEE_TEXT_REGEX['test'](c),g=Object['keys'](a['fee_params'])['some'](h=>MIN_PRICE_KEY_REGEX['test'](h))||FLOOR_TEXT_REGEX['test'](c);return f&&!g&&b['push']({'rule_id':'R-FIXFEE-01','severity':e?'critical':'high','title':'Fixed\x20Amount\x20fee\x20with\x20no\x20minimum\x20order\x20value\x20—\x20sub-fee\x20orders\x20deadlock\x20permanently','detail':'alloc()\x20asserts\x20balance\x20>=\x20fix\x20before\x20distributing\x20(allocation.move:322):\x20an\x20order\x20escrowed\x20BELOW\x20the\x20fixed\x20fee\x20can\x20never\x20settle,\x20and\x20the\x20terminal\x20nodes\x20(completed/closed_cancel)\x20leave\x20no\x20refund\x20path\x20for\x20it,\x20so\x20buyer\x20funds\x20and\x20the\x20order\x20strand\x20forever\x20(testnet\x20CR-02,\x20reproduced\x20on\x20a\x200.001\x20WOW\x20SKU\x20against\x20a\x200.15\x20WOW\x20fee).','suggestion':'Declare\x20a\x20minimum\x20listing/order\x20value\x20above\x20every\x20fixed\x20leg\x20in\x20fee_params\x20(e.g.\x20min_sku_price)\x20and\x20state\x20it\x20in\x20the\x20allocator\x20description,\x20or\x20model\x20the\x20per-order\x20fee\x20as\x20Rate/RateGross\x20instead\x20of\x20a\x20fixed\x20Amount.'}),a['allocator']['once_per_order']===!![]&&!/per[- ]allocation|per[- ]pool|not cross[- ]order|within (a|the) (pool|allocation)/i['test'](c)&&b['push']({'rule_id':'R-ONCE-SCOPE-01','severity':'medium','title':'once_per_order\x20claim\x20does\x20not\x20state\x20its\x20per-Allocation\x20scope','detail':'The\x20identifier-255\x20once-slot\x20is\x20keyed\x20(guard,\x20allocator,\x20submission)\x20ON\x20ONE\x20Allocation,\x20so\x20replay\x20immunity\x20holds\x20within\x20a\x20single\x20pool\x20only;\x20a\x20second\x20Allocation\x20of\x20the\x20same\x20Service\x20starts\x20with\x20no\x20record.\x20Presenting\x20ONCE\x20as\x20general\x20idempotency\x20is\x20what\x20let\x20testnet\x20CR-01\x20read\x20as\x20\x27already\x20protected\x27.','suggestion':'Say\x20explicitly\x20that\x20255\x20protects\x20one\x20pool,\x20and\x20pair\x20it\x20with\x20the\x20order\x20anchor\x20(R-ANCHOR-01)\x20for\x20cross-order\x20safety.'}),b;}function templateText(a,b=[]){return[a['allocator']['description'],...a['build_notes'],...a['trust_mechanisms'],...a['guards']['map'](c=>c['template_id']+'\x20'+c['purpose']),...a['machine_shape']['map'](c=>c['name']+'\x20'+c['role']),...Object['entries'](a['time_anchors']??{})['map'](([c,d])=>c+'\x20'+d),...b]['join']('\x20\x0a\x20');}const STAY_DATE_REGEX=/check[\s-]?in|check[\s-]?out|departure\s+date|arrival\s+date|booking\s+date|checkin|checkout|stay\s+date|stay_nights|\bstay\s+nights?\b|\bper\s+night\b|入住|退房|离店|到店日/i,CHAIN_CLOCK_REGEX=/order\.time|progress\.current_time|\border\s+time\b|witness/i,REPOSITORY_DATE_SOURCE_REGEX=/(?:write|writes|written|storing|store|stores|persist|persisted|record|records|read|reads)\b[^.\n]{0,90}repositor|repositor\w*\b[^.\n]{0,90}(?:stay|check[\s-]?in|check[\s-]?out|departure|arrival|date)/i;function timeWindowAnchorChecks(a){const b=templateText(a);if(!STAY_DATE_REGEX['test'](b))return[];if(CHAIN_CLOCK_REGEX['test'](b)||REPOSITORY_DATE_SOURCE_REGEX['test'](b))return[];const c=b['match'](new RegExp(STAY_DATE_REGEX['source'],'gi'))??[],d=/\d+\s*[-–]\s*\d+\s*h(?:ours?|rs?)?\s*(?:adjustable|tunable|configurable)|\badjustable\b|\btunable\b/i['test'](b);return[{'rule_id':'R-WIN-ANCHOR-01','severity':'high','title':'Per-order\x20time\x20window(s)\x20anchored\x20to\x20a\x20stay\x20date\x20that\x20does\x20not\x20exist\x20on\x20chain\x20('+Array['from'](new Set(c))['slice'](0x0,0x5)['join'](',\x20')+')','detail':'The\x20template\x27s\x20windows\x20are\x20relative\x20to\x20a\x20check-in\x20/\x20check-out\x20/\x20departure\x20/\x20night\x20date.\x20No\x20such\x20field\x20exists\x20on\x20chain:\x20'+'`Order.items`\x20is\x20`vector<SaleItem>`\x20with\x20`SaleItem\x20{\x20item,\x20price,\x20quantity,\x20wip_hash\x20}`\x20(order.move:28-33)\x20and\x20the\x20purchasable\x20'+'`Sale\x20{\x20name,\x20price,\x20stock,\x20suspension,\x20wip,\x20wip_hash\x20}`\x20(service.move:100-107)\x20carries\x20no\x20schedule;\x20the\x20only\x20per-order\x20clock\x20is\x20'+'`Order.time`\x20(order.move:74),\x20the\x20CREATION\x20timestamp.\x20`Progress.current_time`\x20(progress.move:85)\x20is\x20overwritten\x20on\x20every\x20forward\x20'+'(progress.move:458)\x20and\x20`Progress.history`\x20records\x20node\x20visits,\x20so\x20neither\x20is\x20a\x20business\x20date.\x20A\x20window\x20declared\x20relative\x20to\x20the\x20'+'stay\x20calendar\x20is\x20therefore\x20UNREACHABLE\x20—\x20every\x20published\x20Guard\x20silently\x20measures\x20from\x20booking\x20time\x20instead,\x20and\x20for\x20a\x20lead\x20time\x20of\x20'+'days-to-weeks\x20that\x20is\x20a\x20material\x20semantic\x20loss,\x20not\x20a\x20rounding\x20error.'+(d?'\x20The\x20window\x20is\x20also\x20advertised\x20as\x20adjustable,\x20which\x20is\x20doubly\x20unreachable:\x20a\x20Guard\x20is\x20frozen\x20at\x20creation\x20'+'(transfer::freeze_object,\x20guard.move:262)\x20and\x20Machine\x20forwards\x20are\x20immutable\x20after\x20publish\x20(the\x20not-published\x20guard,\x20'+'machine.move:313),\x20so\x20an\x20\x27N-Mh\x20adjustable\x27\x20window\x20means\x20one\x20separately\x20published\x20Guard\x20per\x20window\x20value,\x20never\x20a\x20tunable\x20one.':''),'suggestion':'Express\x20every\x20window\x20relative\x20to\x20`order.time`\x20(or\x20`order.time\x20+\x20<window>`),\x20and\x20if\x20the\x20business\x20promise\x20is\x20genuinely\x20a\x20stay-date\x20'+'deadline,\x20write\x20the\x20stay\x20dates\x20into\x20a\x20Repository\x20at\x20buy\x20time,\x20pin\x20that\x20Repository\x20address\x20as\x20a\x20table\x20constant,\x20and\x20read\x20them\x20in\x20the\x20'+'Guard\x20(`query\x20repository.data`).\x20State\x20the\x20residual\x20semantic\x20loss\x20in\x20build_notes\x20rather\x20than\x20declaring\x20a\x20calendar-relative\x20window.'}];}function signerRefundChecks(a){const b=[],c=a['allocator']['rows']??[],d=c['find'](i=>i['recipient']==='signer'),e=a['allocator']['recipient']==='signer';if(!d&&!e)return b;const f=templateText(a),g=/refund|chargeback|repay|退款|(?:pay(?:ment|out)?|release|send|transfer|settle)\w*[^.\n]{0,40}to the (?:buyer|order|customer)/i['test'](f);if(!g)return b;const h=d?'allocator\x20row\x20'+d['track']+'/'+(d['recipient_key']??'?'):'allocator.recipient=\x27signer\x27';return b['push']({'rule_id':'R-SIGNER-02','severity':'high','title':'Refund\x20leg\x20pays\x20Recipient::Signer\x20—\x20the\x20keeper,\x20not\x20the\x20buyer\x20('+h+')','detail':'`Recipient::Signer`\x20resolves\x20to\x20`tx_context::sender(ctx)`\x20(allocation.move:386-388),\x20i.e.\x20whoever\x20signed\x20the\x20transaction\x20that\x20triggered\x20'+'`alloc`.\x20Time-driven\x20refunds\x20are\x20keeper-triggered\x20by\x20construction,\x20so\x20this\x20leg\x20pays\x20the\x20KEEPER,\x20and\x20because\x20`alloc()`\x20records\x20no\x20'+'consumed\x20flag\x20for\x20the\x20recipient,\x20first-come-first-served.\x20Only\x20`Recipient::GuardIdentifier`\x20(resolved\x20through\x20the\x20Guard\x20submission,\x20'+'allocation.move:376-381)\x20or\x20an\x20explicit\x20`Entity`\x20is\x20safe\x20for\x20a\x20refund.','suggestion':'Replace\x20the\x20Signer\x20refund\x20row\x20with\x20a\x20`{GuardIdentifier:\x200}`\x20row\x20(the\x20submission\x20for\x20a\x20Service-created\x20Allocation\x20is\x20pinned\x20to\x20the\x20paying\x20'+'Order,\x20so\x20only\x20`order.owner`\x20can\x20receive\x20it)\x20and\x20bind\x20the\x20Guard\x20to\x20`order.owner`\x20+\x20`progress.current\x20==\x20<refund\x20node>`.'}),b;}function orderAnchorDeclarationChecks(a){const b=templateText(a),c=a['allocator']['refund_track']==='order_anchored'||/order[\s-]anchored|order anchor|refund recipient is the order|anchor row|guardidentifier\s*\(\s*0\s*\)|for_object|退款接收方为订单/i['test'](b);if(!c)return[];const d=(a['allocator']['rows']??[])['some'](g=>g['recipient']==='guard_identifier'||g['recipient']==='guard_identifier_to_order'),e=a['guards']['some'](h=>h['template_id']==='pattern.allocator_order_anchor');if(d||e)return[];const f=a['allocator']['recipient']??'?';return[{'rule_id':'R-RECIPIENT-02','severity':'high','title':'Order-anchored\x20refund\x20recipient\x20is\x20asserted\x20in\x20prose\x20but\x20declared\x20nowhere\x20machine-checkable','detail':'The\x20template\x20claims\x20an\x20order-anchored\x20escrow\x20/\x20refund\x20recipient\x20while\x20its\x20machine-readable\x20allocator\x20says\x20recipient=\x27'+f+'\x27\x20'+'with\x20no\x20`guard_identifier`\x20row\x20and\x20no\x20`pattern.allocator_order_anchor`\x20Guard\x20reference.\x20Two\x20on-chain\x20facts\x20make\x20the\x20claim\x20as\x20written\x20'+'unbuildable:\x20(1)\x20`Recipient`\x20has\x20only\x20`GuardIdentifier(u8)`\x20/\x20`Entity(address)`\x20/\x20`Signer`\x20(allocation.move:100-104)\x20—\x20there\x20is\x20NO\x20'+'`Order`\x20variant,\x20so\x20\x27the\x20refund\x20recipient\x20is\x20the\x20order\x20object\x27\x20can\x20only\x20be\x20written\x20as\x20a\x20`GuardIdentifier`\x20row;\x20(2)\x20recipients\x20that\x20are\x20'+'all\x20fixed\x20`Entity`\x20rows\x20resolve\x20without\x20the\x20passport\x20submission\x20(allocation.move:383-388)\x20and\x20the\x20Allocation\x20never\x20enters\x20the\x20Guard\x20'+'context,\x20so\x20the\x20Guard\x20has\x20no\x20order\x20to\x20bind\x20at\x20all\x20—\x20the\x20CR-01\x20drain\x20shape.\x20A\x20build\x20agent\x20reading\x20the\x20prose\x20instead\x20of\x20the\x20schema\x20will\x20'+'emit\x20an\x20Entity\x20refund\x20leg\x20to\x20the\x20merchant,\x20or\x20a\x20Signer\x20leg\x20to\x20the\x20keeper.','suggestion':'Declare\x20the\x20anchor\x20machine-checkably:\x20one\x20`{\x20recipient:\x20\x27guard_identifier\x27,\x20recipient_key:\x20\x270\x27,\x20mode:\x20\x27rate\x27,\x20value:\x200\x20}`\x20row\x20(the\x20'+'pattern.allocator_order_anchor\x20convention)\x20plus\x20`refund_track:\x20\x27order_anchored\x27`,\x20and\x20reference\x20`pattern.allocator_order_anchor`\x20in\x20the\x20'+'guard\x20set\x20with\x20the\x20`logic_equal[order.service,\x20<this\x20service>]`\x20binding\x20stated\x20in\x20its\x20purpose.'}];}const EDGE_DEPENDENCY_REGEX=/\b(?:incoming|outgoing|arb_refund)\s+edge\b|\bstop[\s-]node\b|\bedges?\b|\bpairs?\b|\bforwards?\b|one pair|two pairs/i;function topologyChecks(a){const b=[],c=templateText(a);EDGE_DEPENDENCY_REGEX['test'](c)&&b['push']({'rule_id':'R-TOPO-01','severity':'high','title':'machine_shape\x20ships\x20nodes\x20only\x20—\x20no\x20Pair/forward\x20list,\x20so\x20stop-node\x20fund-exit\x20coverage\x20is\x20unauditable','detail':'This\x20template\x27s\x20correctness\x20depends\x20on\x20Machine\x20edges\x20(its\x20own\x20notes\x20reason\x20about\x20incoming/outgoing\x20edges,\x20pairs\x20and\x20stop-node\x20'+'fund-exit\x20coverage),\x20but\x20`machine_shape`\x20carries\x20NO\x20edges:\x20an\x20edge\x20on\x20chain\x20is\x20`Node[target].pairs\x20=\x20{\x20prev_node,\x20threshold,\x20'+'forwards[]\x20}`,\x20which\x20this\x20schema\x20cannot\x20express.\x20The\x20scanner\x20therefore\x20has\x20to\x20invent\x20a\x20linear\x20chain,\x20and\x20the\x20mandatory\x20'+'stop-node\x20walk\x20(R-M5-03\x20/\x20R-M5-09:\x20every\x20rest\x20state\x20needs\x20a\x20defined\x20withdrawal\x20AND\x20refund\x20rule,\x20satisfiable\x20in\x20both\x20directions)\x20'+'cannot\x20be\x20performed\x20—\x20an\x20uncovered\x20stop\x20node\x20strands\x20escrow\x20permanently\x20once\x20Machine\x20+\x20Allocator\x20are\x20frozen\x20at\x20publish.','suggestion':'Either\x20state\x20the\x20edges\x20explicitly\x20in\x20build_notes\x20as\x20`prev\x20─forward(op,w)→\x20next`\x20with\x20the\x20Pair\x20grouping,\x20or\x20declare\x20a\x20machine-readable\x20'+'edge\x20list\x20so\x20the\x20scanner\x20can\x20audit\x20stop-node\x20coverage\x20and\x20prev_node\x20uniqueness\x20instead\x20of\x20guessing.'});const d=a['machine_shape']['map'](i=>i['name']);if(d['length']===0x0)return b;const e=d['filter'](i=>BRANCH_STATE_REGEX['test'](i));if(e['length']===0x0)return b;const f=d[0x0],g=!BRANCH_STATE_REGEX['test'](d[0x1]),h=(g?0x1:0x0)+e['length'];if(h<=0x1)return b;return b['push']({'rule_id':'R-TOPO-02','severity':'high','title':'Node\x20\x27'+f+'\x27\x20needs\x20'+h+'\x20outgoing\x20rails\x20—\x20they\x20must\x20be\x20ONE\x20Pair\x20with\x20multiple\x20forwards','detail':'From\x20\x27'+f+'\x27\x20the\x20declared\x20node\x20set\x20requires\x20'+h+'\x20distinct\x20rails\x20'+('('+(g?'the\x20linear\x20rail\x20to\x20\x27'+d[0x1]+'\x27,\x20':''))+(e['map'](i=>'the\x20branch\x20to\x20\x27'+i+'\x27')['join'](',\x20')+').\x20On\x20chain\x20a\x20Machine\x20has\x20exactly\x20ONE\x20Pair\x20per\x20(node,\x20prev_node):\x20')+'`assert!(!vector::contains(&res,\x20&pair.prev_node),\x20E_DUPLICATE_NODE_PREV)`\x20(machine.move:168)\x20rejects\x20a\x20second\x20Pair\x20with\x20the\x20same\x20'+'prev_node.\x20Emitting\x20one\x20Pair\x20per\x20rail\x20ABORTS\x20at\x20publish\x20—\x20and\x20because\x20Machine\x20+\x20Guard\x20are\x20immutable\x20afterwards,\x20the\x20failure\x20surfaces\x20only\x20'+'after\x20the\x20whole\x20Service\x20is\x20configured.\x20Note\x20also\x20that\x20one\x20forward\x20cannot\x20satisfy\x20two\x20operators:\x20each\x20forward\x20contributes\x20its\x20weight\x20at\x20'+'most\x20once\x20(locked\x20by\x20its\x20first\x20operator),\x20so\x20a\x20dual-confirmation\x20step\x20needs\x20`threshold\x20=\x202`\x20with\x20two\x20DISTINCT\x20forwards.','suggestion':'Merge\x20all\x20'+h+'\x20rails\x20out\x20of\x20\x27'+f+'\x27\x20into\x20ONE\x20Pair\x20with\x20'+h+'\x20forwards;\x20raise\x20the\x20Pair\x20threshold\x20to\x20the\x20'+'number\x20of\x20DISTINCT\x20operators\x20that\x20must\x20act,\x20and\x20state\x20the\x20merged\x20Pair\x20explicitly\x20in\x20build_notes\x20so\x20a\x20builder\x20cannot\x20split\x20it.'}),b;}function compoundPayoutChecks(a){const b=templateText(a),c=a['allocator']['rows']??[],d=a['allocator']['refund_track']!==undefined||c['some'](f=>f['track']==='refund')||/refund|退款/i['test'](a['allocator']['description']);if(!d)return[];const e=a['guards']['some'](f=>f['host']==='arbitration')||a['trust_mechanisms']['some'](f=>/^R2\b/['test'](f))||/compensation[_ ]fund/i['test'](b);if(!e)return[];return[{'rule_id':'R-COMPOUND-01','severity':'high','title':'Dispute-reachable\x20refund-to-order\x20rail\x20AND\x20a\x20bound\x20Arbitration\x20—\x20the\x20same\x20order\x20can\x20be\x20paid\x20twice','detail':'This\x20template\x20funds\x20a\x20refund\x20to\x20the\x20buyer\x20from\x20the\x20order\x20escrow\x20AND\x20relies\x20on\x20the\x20compensation\x20fund\x20via\x20Arbitration.\x20Those\x20are\x20'+'INDEPENDENT\x20on-chain\x20channels:\x20the\x20compensation\x20payout\x20path\x20(service.move:471+)\x20pays\x20out\x20of\x20the\x20compensation\x20fund\x20while\x20the\x20refund\x20Allocator\x20'+'pays\x20out\x20of\x20the\x20escrow,\x20and\x20the\x20only\x20cross-channel\x20guard\x20is\x20`Order.claimed_by`\x20(order.move:94-97\x20the\x20already-claimed\x20guard),\x20which\x20'+'the\x20compensation\x20payout\x20path\x20sets\x20but\x20`alloc()`\x20never\x20reads.\x20So\x20an\x20arbitration\x20award\x20and\x20a\x20keeper-advanced\x20refund\x20rail\x20both\x20succeed\x20for\x20the\x20same\x20'+'order.\x20VERIFIED\x20LIVE\x20on\x20the\x20OTA\x20build:\x20a\x20guest\x20took\x20a\x20full\x20escrow\x20refund\x20AND\x20a\x203x-order\x20compensation\x20for\x20one\x20booking\x20—\x20the\x20merchant\x20'+'carried\x20both,\x20so\x20the\x20effective\x20payout\x20was\x20a\x20multiple\x20of\x20the\x20order\x20value.','suggestion':'Pick\x20ONE\x20buyer-remedy\x20channel\x20per\x20order\x20and\x20make\x20the\x20other\x20structurally\x20unreachable:\x20either\x20drop\x20the\x20order-anchored\x20refund\x20rail\x20in\x20'+'favour\x20of\x20the\x20compensation\x20payout,\x20or\x20state\x20that\x20arbitration\x20awards\x20are\x20recorded/capped\x20at\x20zero\x20when\x20the\x20refund\x20rail\x20has\x20already\x20paid\x20'+'(e.g.\x20the\x20ruling\x20target\x20is\x20a\x20non-monetary\x20remedy\x20such\x20as\x20a\x20Reputation\x20mark).\x20Do\x20not\x20leave\x20both\x20rails\x20funded\x20and\x20dispute-reachable.'}];}const BRANCH_STATE_REGEX=/(cancel|return|withdraw|exit|expired)/i;function syntheticMachine(a){const b=a['machine_shape']['map'](e=>({'name':e['name'],'description':e['role'],'operator':e['operator']})),c=[],d=(e,f)=>[{'name':e,'weight':0x1,'named_operator':f==='order_payer'?'':'order_holder'}];b['length']>0x0&&c['push']({'prev_node':'','next_node':b[0x0]['name'],'threshold':0x1,'forwards':d('enter_'+b[0x0]['name'],b[0x0]['operator'])});for(let e=0x0;e<b['length']-0x1;e++){const f=b[e]['name'],g=b[e+0x1];if(BRANCH_STATE_REGEX['test'](g['name']))continue;c['push']({'prev_node':f,'next_node':g['name'],'threshold':0x1,'forwards':d(f+'_to_'+g['name'],g['operator'])});}if(b['length']>0x0)for(const h of b){BRANCH_STATE_REGEX['test'](h['name'])&&c['push']({'prev_node':b[0x0]['name'],'next_node':h['name'],'threshold':0x1,'forwards':d('to_'+h['name'],h['operator'])});}return{'nodes':b,'pairs':c};}function singleNodeGraph(a){return{'network':ENTRYPOINT['Testnet'],'seed':a['id'],'builtAt':Date['now'](),'nodes':new Map([[a['id'],a]]),'edges':[],'out':new Map(),'inc':new Map(),'gaps':[],'truncations':[],'rpcReport':{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0},'budgetExhausted':{}};}function analyzerFindings(a){const b=makeProposalNode('machine',syntheticMachine(a)),c=makeProposalNode('allocation',{}),d=[];for(const e of[b,c]){const g=singleNodeGraph(e),h=buildViewport(g,g['seed'],'neutral');for(const i of runNodeAnalyzers(h,[machineRuleNodeAnalyzer,allocationRuleNodeAnalyzer])){d['push'](i);}}return d;}const SEVERITY_ORDER={'low':0x0,'medium':0x1,'high':0x2,'critical':0x3};export function scanTemplate(a){const b=[...staticChecks(a),...guardRefChecks(a),...fundAnchorChecks(a),...periodicReleaseChecks(a),...timeWindowAnchorChecks(a),...signerRefundChecks(a),...orderAnchorDeclarationChecks(a),...topologyChecks(a),...compoundPayoutChecks(a)];for(const e of analyzerFindings(a)){const g=e['severity']==='info'?'low':e['severity'];b['push']({'rule_id':e['ruleId'],'severity':g,'title':e['title'],'detail':e['detail'],'suggestion':e['suggestion']});}b['sort']((h,i)=>SEVERITY_ORDER[i['severity']]-SEVERITY_ORDER[h['severity']]);const c=b['length']>0x0?b[0x0]['severity']:'low',d=b['filter'](h=>h['severity']==='critical')['map'](h=>''+(h['rule_id']?h['rule_id']+':\x20':'')+h['title']);return{'template_id':a['id'],'risk_level':c,'passed':d['length']===0x0,'findings':b,'red_flags':d};}
|