@wowok/agent-mcp 3.4.4 → 3.4.5
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/.build-stamp.json +3 -3
- package/dist/chain-semantics/composition-truth.js +1 -1
- package/dist/composition/audit.js +1 -1
- package/dist/composition/compile.js +1 -1
- package/dist/composition/emit-phases.js +1 -1
- package/dist/composition/guard-fill.js +1 -1
- package/dist/composition/input-normalize.js +1 -1
- package/dist/composition/materialize.js +1 -1
- package/dist/composition/mode-gates.js +1 -1
- package/dist/composition/param-disclosure.js +1 -1
- package/dist/composition/plan-run-store.js +1 -0
- package/dist/composition/reflux.js +1 -1
- package/dist/composition/role-bindings.js +1 -0
- package/dist/composition/shape-expand.js +1 -1
- package/dist/composition/supply-chain-emit.js +1 -1
- package/dist/config/judgment.d.ts +13 -25
- package/dist/config/judgment.js +1 -1
- package/dist/config/match-policy-file.js +1 -1
- package/dist/config/rule-engine.d.ts +4 -10
- package/dist/config/rule-engine.js +1 -1
- package/dist/config/template-params.js +1 -1
- package/dist/evaluation/engine.js +1 -1
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/capability.js +1 -1
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exposure.js +1 -1
- package/dist/harness/forward-roster-preflight.js +1 -0
- package/dist/keeper/detectors.js +1 -1
- package/dist/knowledge/allocator-rail-verifier.js +1 -1
- package/dist/knowledge/arb-operation-face.js +1 -1
- package/dist/knowledge/arbitration-rail-verifier.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +17 -1
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/rules/alloc_audit.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/allocation.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/arb.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/arbitration.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/bridge.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/contact.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/demand.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/graph.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/guard.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/machine.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/oracle.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/order.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/payment.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/permission.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/personal.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/plan.json +153 -33
- package/dist/knowledge/baselines/rules/plan.json.good +153 -33
- package/dist/knowledge/baselines/rules/plan.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/progress.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/proof.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/registrar.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/repository.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/resource.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/reward.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/service.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/treasury.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/util.json.good.sha256 +1 -0
- package/dist/knowledge/builtin-templates.d.ts +1 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/discount-threshold.js +1 -1
- package/dist/knowledge/fee-param-bindings.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-binding-table.js +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +3 -2
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/knob-docs.js +1 -1
- package/dist/knowledge/machine-topology.js +1 -1
- package/dist/knowledge/param-schema.js +1 -1
- package/dist/knowledge/param-tiers.js +1 -1
- package/dist/knowledge/path-oracle/products/alibaba-1688.js +1 -1
- package/dist/knowledge/path-oracle/products/amazon.js +1 -1
- package/dist/knowledge/path-oracle/products/booking-com.js +1 -1
- package/dist/knowledge/path-oracle/products/contra.js +1 -1
- package/dist/knowledge/path-oracle/products/costco.js +1 -1
- package/dist/knowledge/path-oracle/products/duoduo-maicai.js +1 -1
- package/dist/knowledge/path-oracle/products/etsy.js +1 -1
- package/dist/knowledge/path-oracle/products/gamefound.js +1 -1
- package/dist/knowledge/path-oracle/products/gofundme.js +1 -1
- package/dist/knowledge/path-oracle/products/klook.js +1 -1
- package/dist/knowledge/path-oracle/products/ninety-nine-designs.js +1 -1
- package/dist/knowledge/path-oracle/products/pinduoduo-kuaituantuan.js +1 -1
- package/dist/knowledge/path-oracle/products/shansong.js +1 -1
- package/dist/knowledge/path-oracle/products/taobao-presale.js +1 -1
- package/dist/knowledge/path-oracle/products/upwork-catalog.js +1 -1
- package/dist/knowledge/path-oracle/products/upwork.js +1 -1
- package/dist/knowledge/pattern-resolutions.js +1 -1
- package/dist/knowledge/protocol-facts.js +1 -1
- package/dist/knowledge/publish-gate.js +1 -1
- package/dist/knowledge/publish-surface-contract.js +1 -1
- 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/time-units.js +1 -0
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/radar-core.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/migration-planner.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/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/review/index.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +110 -2
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/boundary-coercion.js +1 -0
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +56 -8
- package/dist/schema/call/order.d.ts +37 -10
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/permission.d.ts +210 -30
- package/dist/schema/call/personal.d.ts +56 -8
- package/dist/schema/call/progress.d.ts +28 -4
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +84 -12
- package/dist/schema/common/index.d.ts +14 -2
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +1 -1
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +168 -24
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +655 -22
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +22 -110
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workflow/index.d.ts +4 -0
- package/dist/schema/workflow/index.js +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/benchmark_migration_operation.schema.json +1 -1
- package/dist/schemas/evaluation_operation.schema.json +1 -1
- package/dist/schemas/goal_operation.schema.json +1 -1
- package/dist/schemas/guard_rebind_replacement.schema.json +1 -0
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/messenger_operation.schema.json +1 -1
- package/dist/schemas/onchain_operations.schema.json +1 -1
- package/dist/schemas/onchain_operations_allocation.schema.json +1 -1
- package/dist/schemas/onchain_operations_arbitration.schema.json +1 -1
- package/dist/schemas/onchain_operations_contact.schema.json +1 -1
- package/dist/schemas/onchain_operations_demand.schema.json +1 -1
- package/dist/schemas/onchain_operations_gen_passport.schema.json +1 -1
- package/dist/schemas/onchain_operations_machine.schema.json +1 -1
- package/dist/schemas/onchain_operations_order.schema.json +1 -1
- package/dist/schemas/onchain_operations_permission.schema.json +1 -1
- package/dist/schemas/onchain_operations_personal.schema.json +1 -1
- package/dist/schemas/onchain_operations_progress.schema.json +1 -1
- package/dist/schemas/onchain_operations_proof.schema.json +1 -1
- package/dist/schemas/onchain_operations_repository.schema.json +1 -1
- package/dist/schemas/onchain_operations_reward.schema.json +1 -1
- package/dist/schemas/onchain_operations_service.schema.json +1 -1
- package/dist/schemas/onchain_operations_treasury.schema.json +1 -1
- package/dist/schemas/persona_operation.schema.json +1 -1
- package/dist/schemas/time_convert.schema.json +1 -0
- package/dist/schemas/wip_file.schema.json +1 -1
- package/dist/schemas/workflow_operation.schema.json +1 -1
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/fund-rail-recipe.js +1 -1
- package/dist/tools/handlers/guard-rebind-replacement.js +1 -0
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/mark-namespace.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/settle-sweep.js +1 -1
- package/dist/tools/handlers/time-convert.js +1 -0
- package/dist/tools/handlers/wip.js +1 -1
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/local.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/wip-verify-ledger.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PUBLISH_SURFACE_CONTRACT_VERSION='1.5.0';export const PUBLISH_SURFACE_CONTRACT=[{'id':'MC-TOPOLOGY-01','gate':'auditMachineNodes','faces':['machine_publish'],'enforcement':'always','defect_class':'R-M1-11\x20dispute\x20nodes\x20on-Machine\x20/\x20MC-C-04\x20missing\x20entry\x20pair\x20/\x20operator\x20sanity\x20on\x20effective\x20node\x20set\x20(inline\x20AND\x20by-reference)','origin':'R-M1-11,\x20MC-C-04;\x20F-001\x20effective-state\x20fix','wired_in':'wrap'},{'id':'MC-CLOSURE-01','gate':'closureFindings','faces':['machine_publish'],'enforcement':'always','defect_class':'publish\x20closure\x20findings\x20on\x20machine\x20graph\x20(unreachable/terminal\x20anomalies)','origin':'PG-CLOSURE-01\x20(gf32)','wired_in':'wrap'},{'id':'MC-TASKBIND-01','gate':'lintForwardGuardsTaskBinding','faces':['machine_publish'],'enforcement':'always','defect_class':'forward\x20guards\x20with\x20task-row\x20binding\x20gaps\x20—\x20unauthorized\x20dual-rail\x20advance','origin':'gfm31\x20P05\x20(1000/1002\x20unauthorized\x20dual-track,\x20chain-rejected\x20within\x20minutes)','wired_in':'wrap'},{'id':'MC-REVIEWLOCK-01','gate':'lintForwardReviewLocks','faces':['machine_publish'],'enforcement':'always','defect_class':'review-window\x20forward\x20locks\x20missing/mispinned','origin':'proactive\x20consolidation','wired_in':'wrap'},{'id':'MC-ARBRAIL-01','gate':'lintForwardArbRulingRails','faces':['machine_publish'],'enforcement':'always','defect_class':'an\x20arbitration\x20OUTCOME\x20that\x20cannot\x20move\x20the\x20order,\x20judged\x20on\x20the\x20frozen\x20graph\x20by\x20QUERY\x20SEMANTICS\x20(never\x20template_id\x20or\x20node\x20name):\x20ARB_RULING_PRESENCE_ONLY\x20/\x20ARB_RULING_STATUS_GATE\x20block;\x20ARB_RULING_VENUE_UNBOUND\x20/\x20ARB_RULING_ZERO_EXIT\x20warn;\x20ARB_RULING_ONE_SIDED\x20discloses','origin':'publish-face\x20twin\x20of\x20the\x20scan-only\x20R-DIR-01/02\x20+\x20R-ARB-ZERO-EXIT,\x20which\x20classify\x20by\x20template_id\x20and\x20semantic_role\x20—\x20neither\x20survives\x20to\x20the\x20chain,\x20so\x20a\x20hand-composed\x20store\x20never\x20saw\x20them\x20(the\x20same\x20gap\x20that\x20made\x20SV-RAILPAIR-01\x20unconditional).\x20Severity\x20per\x20measurement\x20over\x20v170:\x20presence-only\x20and\x20arb.status\x20are\x200/16\x20arbitration\x20archetypes\x20(blockable);\x20won-only\x20is\x208/16\x20and\x20the\x20only\x202\x20ruling-only\x20waypoints\x20are\x20declared-final\x20post-settlement\x20re-routers\x20whose\x20drained-escrow\x20exemption\x20is\x20NOT\x20statically\x20decidable\x20at\x20publish\x20(disclose/warn\x20only)','wired_in':'wrap'},{'id':'MC-TIMEPROFILE-01','gate':'lintForwardGuardsTimeProfile','faces':['machine_publish'],'enforcement':'always','defect_class':'forward\x20guard\x20time-profile\x20contradictions\x20(timeout\x20vs\x20window).\x20NAMED\x20DEGRADE\x20(N8\x20ktt6\x20F-14\x20re-carving\x202026-11-04):\x20env.window_profile=\x27test\x27\x20downgrades\x20the\x20numeric\x20violations\x20to\x20loud\x20disclosures\x20for\x20a\x20DISPOSABLE\x20trial\x20run\x20—\x20but\x20a\x20test-profile\x20publish\x20on\x20an\x20explicit\x20real\x20network\x20(testnet/mainnet)\x20is\x20BLOCKED\x20on\x20every\x20face\x20in\x20the\x20harness\x20pre-publish\x20hook','origin':'R7-01\x20family','wired_in':'wrap'},{'id':'MC-SVCCONST-01','gate':'lintForwardGuardServiceConstants','faces':['machine_publish'],'enforcement':'always','defect_class':'guard\x20pinned\x20to\x20wrong-shop\x20Service\x20constant\x20slot\x20—\x20order\x20strands\x20(guard\x20creation\x20module\x20conflict\x20on-chain)','origin':'P0-3\x20mtb-tn-261030','wired_in':'wrap'},{'id':'MC-BINDSEM-01','gate':'lintGuardBindingSemantics','faces':['machine_publish','service_publish','guard_binding'],'enforcement':'always','defect_class':'per-host\x20guard\x20binding\x20semantics\x20—\x20drain\x20surface\x20/\x20T10\x20hijack\x20binds\x20(MF_SLOT_IDENTITY_ANCHOR\x20family)','origin':'ruling\x202026-10-31\x20(G2)','wired_in':'wrap'},{'id':'GSEM-WALK-01','gate':'lintGuardSemanticWalk','faces':['machine_publish','service_publish','guard_binding'],'enforcement':'always','defect_class':'guard-tree\x20SEMANTICS\x20that\x20shape\x20lints\x20pass\x20but\x20the\x20chain\x20trips\x20at\x20verify\x20time:\x20unknown\x20or\x20arity-mismatched\x20queries\x20(CHAIN_QUERY_REGISTRY\x20truth),\x20operand-type\x20vs\x20query-return-type\x20mismatches\x20(zr9x\x20F-34\x20Value-row\x20numeric\x20compare\x20→\x20MovePrimitiveRuntimeError),\x20query\x20object\x20pinned\x20to\x20a\x20wrong-typed\x20/\x20untagged\x20/\x20undeclared\x20/\x20empty\x20slot\x20(abnb\x20F-25\x20resource-absence\x20family,\x20zr9x\x20F-42\x20stale\x20pin),\x20undeclared\x20identifier\x20slots,\x20certain-true\x20whole-tree\x20folds\x20(zr9x\x20F-13\x20always-true\x20voting\x20leg\x20—\x20on\x20arb/voting\x20guards\x20a\x20TRUST\x20defect)\x20and\x20certain-false\x20folds\x20(zr9x\x20F-35\x20CLOSES=0),\x20and\x20static\x20repository-row\x20reads\x20whose\x20producer\x20is\x20unproven\x20(loud\x20UNVERIFIED,\x20zr9x\x20F-36)','origin':'user\x20directive\x20⑤\x202026-11-05\x20—\x20machine\x20publish\x20/\x20service\x20publish\x20/\x20guard\x20binding\x20evaluated\x20guard\x20SHAPE\x20only;\x20semantics\x20surfaced\x20solely\x20as\x20runtime\x20MovePrimitiveRuntimeError.\x20Single-authority\x20predicates\x20reused\x20from\x20guard-risk.ts\x20(foldCertainOutcome,\x20QUERY_TYPE_ALIASES,\x20rootReferencedIdentifiers);\x20call\x20site\x20=\x20shared\x20binding\x20verifier\x20verifyCollectedGuardBindings\x20(findings\x20ride\x20the\x20binding\x20gate\x27s\x20result;\x20this\x20entry\x20is\x20the\x20registry\x20citation)','wired_in':'wrap'},{'id':'MC-TASKBIND-PRE-01','gate':'lintMachineTaskBindingPreflight','faces':['machine_publish'],'enforcement':'always','defect_class':'machine-side\x20task\x20binding\x20preflight\x20(order/task\x20row\x20anchors\x20resolvable)','origin':'K4R\x20claimed_by\x20ordering\x20leg\x20batch','wired_in':'wrap'},{'id':'MC-SVCCONST-REF-01','gate':'lintMachineGuardServiceConstants','faces':['machine_publish','service_publish'],'enforcement':'always','defect_class':'by-reference\x20machine\x20publish:\x20guard\x20constants\x20pinned\x20to\x20foreign\x20Service','origin':'P0-3\x20residual\x20(machine\x20ref\x20publish\x20face)','wired_in':'wrap'},{'id':'MC-EVIDENCE-01','gate':'lintForwardGuardEvidenceMarkers','faces':['machine_publish'],'enforcement':'always','defect_class':'forward\x20guard\x20evidence\x20markers\x20(proof/event\x20anchors)\x20malformed','origin':'proactive\x20consolidation','wired_in':'wrap'},{'id':'SV-PERMAUTH-01','gate':'checkPermissionAuthorization','faces':['service_publish'],'enforcement':'strict_audit_only','defect_class':'IMMUT-002\x20—\x20custom\x20permission\x20index\x20grants\x20unauthorized\x20writers\x20(immutable\x20after\x20publish)','origin':'IMMUT-002\x20(OUTAGE\x20vs\x20EVIDENCE\x20degrade)','wired_in':'wrap'},{'id':'SV-WIPBIND-01','gate':'lintSalesWipBindings','faces':['service_publish'],'enforcement':'always','defect_class':'sales\x20payload\x20WIP\x20bindings\x20dangling\x20(price/stock\x20refs\x20unresolvable)','origin':'TPL-P1-04/05\x20family','wired_in':'wrap'},{'id':'SV-ALLOCGUARD-01','gate':'lintAllocatorGuards','faces':['service_publish'],'enforcement':'always','defect_class':'allocator-bound\x20guard\x20roots\x20unresolvable\x20/\x20fund-safety\x20contradiction\x20(chain-grounded).\x20Its\x20R-TIME-PROFILE\x20leg\x20shares\x20the\x20MC-TIMEPROFILE-01\x20named\x20degrade\x20(env.window_profile=\x27test\x27;\x20real-network\x20formal\x20publish\x20still\x20BLOCKS)','origin':'allocator-rail-verifier\x20publish\x20face\x20(ledger\x20rule\x208\x20authority)','wired_in':'wrap'},{'id':'SV-ESCROWEXIT-01','gate':'lintServiceEscrowExitCoverage','faces':['service_publish'],'enforcement':'always','defect_class':'R-ESCROW-LEAF\x20—\x20terminal\x20node\x20with\x20NO\x20drain\x20entry\x20exists\x20→\x20escrow\x20strands\x20(1.0\x20WOW实证)','origin':'R-ESCROW-LEAF\x20(4R-05)','wired_in':'wrap'},{'id':'SV-RAILEXIT-01','gate':'verifyRailExitSatisfiability','faces':['service_publish'],'enforcement':'always','defect_class':'the\x20SATISFIABILITY\x20half\x20of\x20R-ESCROW-LEAF\x20—\x20a\x20terminal\x20whose\x20rails\x20all\x20pin\x20the\x20right\x20node\x20yet\x20none\x20can\x20ever\x20FIRE,\x20so\x20the\x20escrow\x20strands\x20while\x20SV-ESCROWEXIT-01\x20reports\x20green:\x20RAIL_EXIT_WINDOW_CLOSED\x20(a\x20monotone-closing\x20clock\x20leg\x20in\x20an\x20unavoidable\x20position\x20—\x20draining\x20escrow\x20through\x20a\x20rail\x20is\x20an\x20explicit\x20call\x20needing\x20a\x20same-tx\x20passport,\x20so\x20once\x20the\x20window\x20shuts\x20no\x20signer\x20can\x20produce\x20one,\x20and\x20the\x20pool\x20is\x20append-only\x20with\x20no\x20drain\x20backdoor)\x20/\x20RAIL_EXIT_ARB_GATED\x20(an\x20unavoidable\x20arb.*\x20read,\x20which\x20returns\x20W_OBJECT_NOT_FOUND\x20and\x20ABORTS\x20the\x20whole\x20tx\x20rather\x20than\x20evaluating\x20false,\x20so\x20the\x20never-disputed\x20majority\x20has\x20no\x20exit)','origin':'R-ESCROW-LEAF\x20upgrade\x20(task\x20③,\x202026-11-04).\x20Severity\x20per\x20two-layer\x20measurement\x20over\x20v170:\x20LAYER\x20A\x20—\x20of\x20127\x20declared\x20rail\x20keys,\x2078\x20resolve\x20to\x20a\x20concrete\x20body\x20through\x20the\x20compiler\x27s\x20own\x20default-resolution\x20chain\x20and\x20ZERO\x20trips\x20either\x20code;\x20LAYER\x20B\x20is\x20resolution-independent\x20and\x20carries\x20the\x20argument\x20—\x20pattern.time_window_upper_bound\x20(the\x20closing\x20design)\x20is\x20bound\x20to\x20machine_forward\x20ONLY\x20across\x20all\x2030\x20archetypes,\x20exactly\x20as\x20its\x20own\x20`host`\x20field\x20declares,\x20and\x20no\x20arb-reading\x20tpl_*\x20is\x20bound\x20to\x20any\x20rail.\x20A\x20hit\x20therefore\x20means\x20the\x20payload\x20diverged\x20from\x20every\x20shipped\x20archetype.\x20Doctrine\x20source:\x20pattern.time_window_upper_bound\x27s\x20EXPIRY\x20SEMANTICS\x20note\x20—\x20\x27an\x20expired\x20window\x20only\x20fails\x20the\x20FORWARD\x20it\x20gates\x20…\x20pair\x20with\x20a\x20machine\x20expiry\x20node\x20or\x20an\x20allocator\x20recover\x20rail\x20for\x20the\x20post-window\x20fund\x20path\x27;\x20a\x20closing\x20leg\x20ON\x20the\x20fund\x20rail\x20is\x20that\x20pairing\x20inverted','wired_in':'wrap'},{'id':'SV-ARBNEUTRAL-01','gate':'checkArbitrationNeutrality','faces':['service_publish'],'enforcement':'strict_audit_only','defect_class':'R2-04\x20—\x20arbitrator-neutral\x20object\x20bound\x20as\x20merchant-biased\x20referee\x20(degraded\x20read\x20degrades\x20verdict)','origin':'R2-04\x20(OUTAGE\x20vs\x20EVIDENCE\x20degrade)','wired_in':'wrap'},{'id':'SV-RAILPAIR-01','gate':'lintAllocatorRailPairing','faces':['service_publish'],'enforcement':'always','defect_class':'H1B-03\x20—\x20symbolic\x20rail\x20verification\x20over\x20the\x20allocator\x20guards\x20(RAIL_TERMINAL_UNCOVERED\x20/\x20RAIL_AWARD_EXIT_MISSING\x20/\x20RAIL_CLAIMED_BY_LEG\x20/\x20RAIL_NO_CALLER_IDENTITY_BOUND\x20/\x20RAIL_DEAD_LITERAL).\x20UNCONDITIONAL\x20since\x202026-11-04\x20(was\x20arbitration-scoped),\x20fed\x20a\x20TOPOLOGY-DERIVED\x20node\x20matrix\x20via\x20chainNodeRailMatrix\x20—\x20the\x20chain\x20stores\x20no\x20semantic\x20role,\x20so\x20the\x20former\x20bare\x20{name}\x20rows\x20left\x20`terminals`\x20empty\x20and\x20RAIL_TERMINAL_UNCOVERED\x20could\x20never\x20fire\x20on\x20a\x20publish\x20payload\x20—\x20and,\x20from\x20the\x20same\x20day,\x20fed\x20the\x20SERVICE\x27S\x20EFFECTIVE\x20ON-CHAIN\x20BINDING:\x20a\x20publish-by-reference\x20(staged)\x20call\x20carries\x20neither\x20allocators\x20nor\x20a\x20machine\x20because\x20both\x20were\x20bound\x20in\x20earlier\x20calls,\x20so\x20the\x20payload-only\x20read\x20returned\x20silent\x20on\x20exactly\x20the\x20hand-compose\x20flow\x20this\x20incident\x20class\x20lives\x20in.\x20`serviceRef`\x20now\x20resolves\x20the\x20Service\x20object\x20once\x20and\x20its\x20`order_allocators`/`machine`\x20backfill\x20both\x20gaps\x20(same\x20move\x20as\x20the\x20R-ESCROW-LEAF\x20cure);\x20an\x20unresolvable\x20ref\x20is\x20graded\x20by\x20face\x20—\x20a\x20FAILED\x20read\x20blocks\x20only\x20the\x20strict\x20dry_run\x20audit\x20and\x20warns\x20on\x20the\x20formal\x20publish\x20(OUTAGE\x20vs\x20EVIDENCE),\x20a\x20read\x20that\x20resolved\x20NO\x20Service\x20object\x20warns\x20on\x20both','origin':'H1B-03\x20(1.0\x20WOW\x20stranded);\x20scope+matrix\x20cure\x202026-11-04\x20(publish\x20face\x20was\x20strictly\x20weaker\x20than\x20the\x20compile\x20face,\x20which\x20runs\x20the\x20same\x20verifier\x20on\x20every\x20archetype);\x20staged-binding\x20cure\x202026-11-04\x20(the\x20\x27UNCONDITIONAL\x27\x20claim\x20was\x20false\x20for\x20publish-by-reference\x20until\x20the\x20on-chain\x20binding\x20became\x20the\x20fallback\x20source)\x20—\x20landing\x20risk\x20measured\x20over\x20the\x20catalog\x20before\x20enabling:\x2030\x20archetypes\x20/\x20119\x20resolved\x20rails\x20/\x200\x20publish-face\x20criticals,\x2083\x20info\x20receipts\x20(builtin-allocator-rails.spec.ts\x20invariant\x20(d)),\x20plus\x20the\x20matrix\x20half\x20in\x20publish-rail-matrix.spec.ts','wired_in':'wrap'},{'id':'SV-ECHO-01','gate':'echoServicePublishBindings','faces':['service_publish'],'enforcement':'always','defect_class':'et21\x20ISS-015\x20—\x20last-chance\x20binding\x20echo:\x20every\x20named\x20binding\x20this\x20payload\x20will\x20freeze\x20(machine\x20/\x20order_allocators\x20guards\x20+\x20Entity\x20recipients\x20/\x20order_allocators_append\x20/\x20arbitrations\x20/\x20rewards\x20/\x20object.permission)\x20is\x20resolved\x20name\x20→\x20address\x20→\x20on-chain\x20object\x20type\x20through\x20the\x20namespace-aware\x20LocalMark\x20resolver.\x20An\x20UNRESOLVABLE\x20local\x20name\x20or\x20a\x20resolved\x20type\x20that\x20does\x20not\x20match\x20the\x20slot\x20(expected\x20Entity\x20payee\x20resolving\x20to\x20a\x20Guard)\x20BLOCKS\x20the\x20FORMAL\x20publish\x20—\x20order_allocators\x20is\x20append-only\x20after\x20publish\x20(the\x20allocator\x20table\x20can\x20never\x20be\x20edited\x20once\x20the\x20service\x20is\x20live),\x20so\x20a\x20mis-bound\x20payee\x20is\x20permanently\x20wrong;\x20the\x20dry_run\x20strict\x20audit\x20echoes\x20WITHOUT\x20blocking\x20(the\x20formal\x20dispatch\x20is\x20the\x20irreversible\x20step).\x20Cross-build\x20bare-name\x20collision\x20advisories\x20ride\x20the\x20same\x20resolver\x20(LocalMark\x20write-path\x20namespace,\x20same\x20slice)','origin':'et21\x20ISS-015\x20(publish-face\x20audit\x20ledger\x20P0#4;\x20binding-manifest\x20echo\x20first\x20slice,\x202026-11-04)','wired_in':'wrap'},{'id':'AUTH-COMPILE-01','gate':'checkAllocatorRails','faces':['service_publish','machine_publish'],'enforcement':'always','defect_class':'compile.ts\x20rail\x20blockers\x20—\x20RAIL_TERMINAL_UNCOVERED\x20/\x20RAIL_CLAIMED_BY_LEG\x20/\x20RAIL_NO_CALLER_IDENTITY_BOUND\x20/\x20REFUND_GATE_POLARITY_MIX\x20(template/DSL\x20path)','origin':'allocator-rail-verifier\x20(compile-time\x20authority)','wired_in':'compile'},{'id':'AUTH-AUDITRULES-01','gate':'audit_machine_bound','faces':['service_publish'],'enforcement':'advisory','defect_class':'audit-rules\x20catalog\x20—\x20machine\x20bound\x20/\x20dangling\x20deps\x20/\x20repo\x20integrity\x20caller\x20legs\x20(aggregate_risks\x20face,\x20wowok-auditor\x20consumer)','origin':'audit-rules.ts\x20catalog','wired_in':'audit-rules'},{'id':'SV-REFUNDSAT-01','gate':'checkRefundRecipientSatisfiability','faces':['service_publish'],'enforcement':'always','defect_class':'T10-10\x20—\x20a\x20refund\x20guard\x20pinning\x20its\x20recipient\x20identifier\x20to\x20context(Signer)\x20is\x20unsatisfiable\x20against\x20the\x20order-anchored\x20escrow,\x20so\x20order\x20funds\x20strand\x20permanently\x20once\x20the\x20allocators\x20lock\x20(fail-soft\x20to\x20advisory\x20on\x20fetch\x20error)','origin':'T10-10\x20(GuardIdentifier\x20x\x20for_object\x20x\x20Guard-equality\x20triple)','wired_in':'onchain'},{'id':'SV-ARBDECOR-01','gate':'checkArbitrationsBeforePublish','faces':['service_publish'],'enforcement':'always','defect_class':'decorative\x20dispute\x20path\x20—\x20a\x20bound\x20Arbitration\x20whose\x20voting_guard\x20roster\x20leaves\x20the\x20arb-side\x20admin\x20as\x20the\x20only\x20voter\x20AND\x20the\x20judge\x20(R-ARB-VOTE-LOCK\x20concentration);\x20fail-soft\x20to\x20advisory\x20on\x20resolution/query\x20error','origin':'R-ARB-VOTE-LOCK','wired_in':'onchain'},{'id':'SV-ARB-VENUE-WHITELIST-01','gate':'lintArbVenueWhitelist','faces':['service_publish'],'enforcement':'always','defect_class':'arb\x20venue\x20whitelist\x20violation\x20—\x20a\x20service\x20binding\x20an\x20arbitration\x20whose\x20venue\x20address\x20is\x20not\x20in\x20the\x20operator\x27s\x20declared\x20arb_venues\x20(or\x20an\x20unconstrained\x20venue\x20on\x20a\x20strict\x20profile):\x20the\x20venue\x20is\x20the\x20immutable-bind\x20refund-rail\x20counterparty\x20(bind\x20only\x20before\x20first\x20publish),\x20so\x20a\x20wrong\x20venue\x20is\x20an\x20IMMUT-002-class\x20lock-in;\x20unbound\x20services\x20and\x20undefined\x20whitelists\x20skip\x20silently\x20(nothing\x20to\x20compare)','origin':'R-ARB-VENUE-WHITELIST\x20(ktt2/duoduo-maicai\x202026-11-09\x20joint\x20triage\x20—\x20scanner\x20rule\x20R-ARB-VENUE-WHITELIST\x27s\x20publish-face\x20twin)','wired_in':'wrap'},{'id':'SV-RECIPIENT-01','gate':'checkEntityRecipientGate','faces':['service_publish'],'enforcement':'always','defect_class':'R-RECIPIENT-03\x20—\x20a\x20blank/omitted\x20allocator\x20recipient\x20resolves\x20to\x20the\x20DEFAULT\x20LOCAL\x20ACCOUNT,\x20silently\x20routing\x20customer\x20escrow\x20to\x20the\x20builder;\x20blocks\x20rather\x20than\x20warns\x20because\x20order_allocators\x20is\x20L1-immutable\x20after\x20publish\x20(the\x20same\x20gate\x20also\x20covers\x20allocation.allocators)','origin':'R-RECIPIENT-03\x20(direct-sales\x20Entity\x20recipient)','wired_in':'onchain'},{'id':'SV-ALLOCPLAN-01','gate':'checkOrderAllocatorsPrePublish','faces':['service_publish'],'enforcement':'always','defect_class':'R-A-1\x20allocator-plan\x20structural\x20family\x20+\x20R-A-2-03\x20duplicate\x20guards\x20—\x20the\x20subset\x20decidable\x20without\x20Guard\x20table/root\x20evidence\x20blocks;\x20everything\x20else\x20degrades\x20to\x20a\x20warning,\x20and\x20an\x20internal\x20error\x20never\x20blocks\x20(the\x20gate\x20must\x20not\x20become\x20a\x20new\x20failure\x20mode)','origin':'R-A-1\x20/\x20R-A-2-03','wired_in':'onchain'},{'id':'SV-WIPNET-01','gate':'checkSalesWipNetworkDeployment','faces':['service_publish'],'enforcement':'always','defect_class':'a\x20localnet-only\x20WIP\x20is\x20unreachable\x20from\x20testnet/mainnet\x20machines,\x20so\x20every\x20order\x20fails\x20100%\x20—\x20hard-blocked\x20on\x20those\x20networks,\x20advisory\x20on\x20localnet','origin':'WIP-B\x20network\x20calibration','wired_in':'onchain'},{'id':'SV-ZEROPRICE-01','gate':'checkSalesZeroPrice','faces':['service_publish'],'enforcement':'always','defect_class':'F-BS-76\x20—\x20sale()\x20has\x20no\x20price\x20floor\x20so\x20price\x200\x20lists\x20fine,\x20then\x20NOBODY\x20can\x20ever\x20buy\x20it\x20(client\x20zero-total\x20gate\x20and\x20the\x20on-chain\x20zero-total\x20abort\x20both\x20refuse);\x20discovery\x20cost\x20one\x20run\x201\x20679\x20440\x20gas\x20to\x20add\x20and\x20787\x20124\x20to\x20remove','origin':'F-BS-76\x20(bs-mn-261022)','wired_in':'onchain'},{'id':'SV-UMIMS-01','gate':'checkUmContactHasIm','faces':['service_publish'],'enforcement':'always','defect_class':'an\x20empty\x20Contact\x20ims\x20vector\x20leaves\x20pre-order\x20negotiation,\x20customer_required\x20private-info\x20delivery\x20and\x20post-sale\x20support\x20with\x20NO\x20channel\x20—\x20Messenger\x20routes\x20to\x20ims\x20members,\x20so\x20the\x20store\x20publishes\x20unreachable','origin':'on-chain\x20contact\x20ims\x20routing','wired_in':'onchain'},{'id':'SV-AUDITCAT-01','gate':'auditService','faces':['service_publish'],'enforcement':'advisory','defect_class':'audit-rules\x20service\x20catalog\x20(SKIP_RULES-filtered)\x20—\x20NOTE:\x20an\x20`error`-severity\x20finding\x20is\x20pushed\x20as\x20an\x20[AUDIT\x20ERROR]\x20constraintWarning\x20and\x20does\x20NOT\x20block,\x20so\x20the\x20catalog\x27s\x20own\x20severity\x20scale\x20is\x20cosmetic\x20on\x20this\x20face','origin':'audit-rules.ts\x20catalog','wired_in':'onchain'},{'id':'MC-PERMISS-01','gate':'checkMachinePermissionBeforePublish','faces':['machine_publish'],'enforcement':'advisory','defect_class':'a\x20forward\x27s\x20permissionIndex\x20with\x20no\x20entity\x20granted\x20on\x20the\x20bound\x20Permission\x20—\x20the\x20edge\x20is\x20unadvanceable\x20by\x20anyone\x20(advisory\x20because\x20a\x20new\x20Permission\x20may\x20be\x20granted\x20after\x20publish)','origin':'permission-index\x20grant\x20coverage','wired_in':'onchain'},{'id':'MC-ORPHANGUARD-01','gate':'lintMachineGuardBindings','faces':['machine_publish'],'enforcement':'advisory','defect_class':'F-29\x20—\x20the\x20session\x20created\x20Guard\x20object(s)\x20but\x20the\x20publishable\x20graph\x20binds\x20ZERO\x20of\x20them\x20on\x20any\x20forward\x20(the\x20silent-drop\x20shape:\x20$ref\x20pre-evaluated\x20to\x20undefined,\x20JSON.stringify\x20drops\x20the\x20key,\x20publish\x20succeeds,\x20edges\x20freeze\x20unguarded)','origin':'F-29\x20(tv8-tn-261030)','wired_in':'onchain'},{'id':'MC-ANCHORREACH-01','gate':'checkGuardAnchorReachability','faces':['machine_publish'],'enforcement':'advisory','defect_class':'a\x20guard\x20time-anchor\x20that\x20no\x20reachable\x20node\x20ever\x20establishes\x20makes\x20its\x20window\x20unsatisfiable\x20—\x20the\x20guard\x20can\x20never\x20pass,\x20so\x20the\x20rail\x20it\x20gates\x20is\x20dead\x20(Dijkstra\x20over\x20the\x20anchor\x20x\x20node\x20profile)','origin':'guard-anchor-reach.ts','wired_in':'onchain'},{'id':'GD-NODEGATE-01','gate':'lintGuardNodeGates','faces':['guard_binding'],'enforcement':'advisory','defect_class':'guard\x20node-gate\x20advisory\x20on\x20the\x20guard\x20create/update\x20face\x20—\x20a\x20node\x20pin\x20that\x20the\x20intended\x20host\x20machine\x20never\x20enters','origin':'guard\x20node-gate\x20parse\x20(parseGuardNodeGates)','wired_in':'onchain'},{'id':'GD-REWARDONCE-01','gate':'checkRewardOnceArming','faces':['guard_binding'],'enforcement':'advisory','defect_class':'a\x20funded\x20Reward\x20pool\x20whose\x20mounted\x20guard\x20carries\x20no\x20once-stamp\x20is\x20replayable,\x20and\x20the\x20bsw4\x20F-11\x20window-delay\x20advisory\x20rides\x20the\x20same\x20sweep;\x20reward\x20guard_add\x20is\x20a\x20bind\x20face\x20per\x20isGuardBindingOperation','origin':'bsw4\x20F-11\x20/\x20reward\x20replay\x20stamp','wired_in':'onchain'},{'id':'GD-REWARDEVID-01','gate':'verifyRewardEvidenceBindings','faces':['guard_binding'],'enforcement':'advisory','defect_class':'reward\x20evidence\x20bindings\x20that\x20the\x20deployed\x20package\x20drops\x20on\x20read-back\x20—\x20fail-soft,\x20never\x20masks\x20the\x20operation\x27s\x20own\x20outcome','origin':'reward\x20evidence\x20read-back','wired_in':'onchain'},{'id':'SV-REWARDDEADLOCK-01','gate':'lintRewardClaimNodeGateDeadlock','faces':['service_publish'],'enforcement':'always','defect_class':'a\x20pre-funded\x20reward\x27s\x20claim\x20guard\x20pins\x20equality\x20node\x20gates\x20that\x20exclude\x20every\x20reachable\x20evidence-marker\x20node\x20on\x20the\x20same\x20lifecycle\x20branch\x20—\x20the\x20claim\x20either\x20pays\x20without\x20evidence\x20or\x20aborts\x207\x20after\x20the\x20forward\x20(guards\x20are\x20immutable,\x20the\x20binding\x20freezes\x20at\x20publish;\x20machine-graph-unreadable\x20degrades\x20to\x20warning,\x20never\x20guesses)','origin':'O18\x20incident\x20/\x20F-MTW-12\x20(reward-deadlock\x20lint,\x20guard-node-gates.ts)','wired_in':'wrap'}];export const PUBLISH_SURFACE_EXEMPT_GATES={'checkAllocatorRails':'compile-face\x20authority\x20(template\x20path);\x20invoked\x20by\x20the\x20compile\x20pipeline,\x20registered\x20as\x20AUTH-COMPILE-01','auditRepoIntegrityAndCallerLegs':'plan-level\x20repo\x20integrity\x20(plan\x20build\x20face,\x20not\x20the\x20dispatch\x20publish\x20gate)','checkForeignServicePins':'plan-level\x20foreign\x20pin\x20disclosure\x20(plan\x20build\x20face)','checkDaysUnitSlots':'compile\x20normalization\x20check\x20(plan\x20build\x20face)','checkWindowTruncation':'compile\x20normalization\x20check\x20(plan\x20build\x20face)','dropEmptyVecGuards':'compile\x20normalization\x20step\x20(not\x20a\x20gate)','checkProjectStage':'project\x20tool\x20stage\x20hint\x20(wip_file/project\x20face,\x20not\x20publish)','lintAllocatorGuardSet':'internal\x20helper\x20behind\x20lintAllocatorGuards\x20and\x20the\x20pre-buy\x20screening\x20gate','lintTaskBindingAdvisories':'internal\x20helper\x20behind\x20the\x20task-binding\x20advisory\x20family\x20(protocol\x20254)','lintGuard':'guard-lint\x20module\x20entry\x20invoked\x20INSIDE\x20composing\x20lints,\x20not\x20a\x20publish\x20gate\x20itself','lintReviewLockedTerminals':'internal\x20helper\x20behind\x20lintForwardReviewLocks','verifyAllocatorRails':'internal\x20helper\x20behind\x20lintAllocatorRailPairing\x20(single-source\x20verifier\x20core)','verifyArbitrationRulingRails':'internal\x20helper\x20behind\x20lintForwardArbRulingRails\x20(single-source\x20ruling-rail\x20verifier\x20core)','verifyCollectedGuardBindings':'internal\x20helper\x20behind\x20lintGuardBindingSemantics\x20(batch\x20collection)','verifyGuardBinding':'internal\x20helper\x20behind\x20verifyCollectedGuardBindings\x20(single\x20host)','auditGuardRelies':'internal\x20helper\x20inside\x20verifyCollectedGuardBindings\x20(guard-relies\x20audit)','checkEntityRecipients':'internal\x20helper\x20behind\x20checkEntityRecipientGate\x20(registered\x20as\x20SV-RECIPIENT-01)','checkArbitrationVenueOrder':'Arbitration\x20CREATION\x20face\x20(venue\x20ordering\x20findings\x20at\x20arb\x20build),\x20not\x20a\x20Service/Machine\x20publish\x20gate','checkClientSchemaCompatibility':'client\x20schema-version\x20negotiation\x20(schema\x20layer),\x20not\x20a\x20publish\x20gate','checkDiscountFloorBeforeIssue':'discount\x20ISSUANCE\x20face\x20—\x20judged\x20when\x20a\x20discount\x20is\x20created,\x20not\x20at\x20publish','checkDiscountThresholdBeforeBuy':'BUY\x20face\x20—\x20the\x20pre_buy\x20gate\x20(wrap.ts\x20runPreBuyChecks)\x20owns\x20purchase-time\x20screening','verifyGuardFailureLegs':'runtime\x20E_VERIFY_FAILED\x20diagnosis\x20(leg-by-leg\x20replay\x20of\x20a\x20FAILED\x20guard\x20submission),\x20not\x20a\x20pre-publish\x20gate','verifyOrderNewLanded':'post-transaction\x20read-back\x20of\x20an\x20order_new\x20landing,\x20not\x20a\x20pre-publish\x20gate'};export function gatesForFace(a){return PUBLISH_SURFACE_CONTRACT['filter'](b=>b['faces']['includes'](a));}export function blockingGatesForFace(a){return gatesForFace(a)['filter'](b=>b['enforcement']==='always');}
|
|
1
|
+
export const PUBLISH_SURFACE_CONTRACT_VERSION='1.5.0';export const PUBLISH_SURFACE_CONTRACT=[{'id':'MC-TOPOLOGY-01','gate':'auditMachineNodes','faces':['machine_publish'],'enforcement':'always','defect_class':'R-M1-11\x20dispute\x20nodes\x20on-Machine\x20/\x20MC-C-04\x20missing\x20entry\x20pair\x20/\x20operator\x20sanity\x20on\x20effective\x20node\x20set\x20(inline\x20AND\x20by-reference)','origin':'R-M1-11,\x20MC-C-04;\x20F-001\x20effective-state\x20fix','wired_in':'wrap'},{'id':'MC-CLOSURE-01','gate':'closureFindings','faces':['machine_publish'],'enforcement':'always','defect_class':'publish\x20closure\x20findings\x20on\x20machine\x20graph\x20(unreachable/terminal\x20anomalies)','origin':'PG-CLOSURE-01\x20(gf32)','wired_in':'wrap'},{'id':'MC-TASKBIND-01','gate':'lintForwardGuardsTaskBinding','faces':['machine_publish'],'enforcement':'always','defect_class':'forward\x20guards\x20with\x20task-row\x20binding\x20gaps\x20—\x20unauthorized\x20dual-rail\x20advance','origin':'gfm31\x20P05\x20(1000/1002\x20unauthorized\x20dual-track,\x20chain-rejected\x20within\x20minutes)','wired_in':'wrap'},{'id':'MC-REVIEWLOCK-01','gate':'lintForwardReviewLocks','faces':['machine_publish'],'enforcement':'always','defect_class':'review-window\x20forward\x20locks\x20missing/mispinned','origin':'proactive\x20consolidation','wired_in':'wrap'},{'id':'MC-ARBRAIL-01','gate':'lintForwardArbRulingRails','faces':['machine_publish'],'enforcement':'always','defect_class':'an\x20arbitration\x20OUTCOME\x20that\x20cannot\x20move\x20the\x20order,\x20judged\x20on\x20the\x20frozen\x20graph\x20by\x20QUERY\x20SEMANTICS\x20(never\x20template_id\x20or\x20node\x20name):\x20ARB_RULING_PRESENCE_ONLY\x20/\x20ARB_RULING_STATUS_GATE\x20block;\x20ARB_RULING_VENUE_UNBOUND\x20/\x20ARB_RULING_ZERO_EXIT\x20warn;\x20ARB_RULING_ONE_SIDED\x20discloses','origin':'publish-face\x20twin\x20of\x20the\x20scan-only\x20R-DIR-01/02\x20+\x20R-ARB-ZERO-EXIT,\x20which\x20classify\x20by\x20template_id\x20and\x20semantic_role\x20—\x20neither\x20survives\x20to\x20the\x20chain,\x20so\x20a\x20hand-composed\x20store\x20never\x20saw\x20them\x20(the\x20same\x20gap\x20that\x20made\x20SV-RAILPAIR-01\x20unconditional).\x20Severity\x20per\x20measurement\x20over\x20v170:\x20presence-only\x20and\x20arb.status\x20are\x200/16\x20arbitration\x20archetypes\x20(blockable);\x20won-only\x20is\x208/16\x20and\x20the\x20only\x202\x20ruling-only\x20waypoints\x20are\x20declared-final\x20post-settlement\x20re-routers\x20whose\x20drained-escrow\x20exemption\x20is\x20NOT\x20statically\x20decidable\x20at\x20publish\x20(disclose/warn\x20only)','wired_in':'wrap'},{'id':'MC-TIMEPROFILE-01','gate':'lintForwardGuardsTimeProfile','faces':['machine_publish'],'enforcement':'always','defect_class':'forward\x20guard\x20time-profile\x20contradictions\x20(timeout\x20vs\x20window).\x20NAMED\x20DEGRADE\x20(N8\x20ktt6\x20F-14\x20re-carving\x202026-11-04):\x20env.window_profile=\x27test\x27\x20downgrades\x20the\x20numeric\x20violations\x20to\x20loud\x20disclosures\x20for\x20a\x20DISPOSABLE\x20trial\x20run\x20—\x20but\x20a\x20test-profile\x20publish\x20on\x20an\x20explicit\x20real\x20network\x20(testnet/mainnet)\x20is\x20BLOCKED\x20on\x20every\x20face\x20in\x20the\x20harness\x20pre-publish\x20hook','origin':'R7-01\x20family','wired_in':'wrap'},{'id':'MC-SVCCONST-01','gate':'lintForwardGuardServiceConstants','faces':['machine_publish'],'enforcement':'always','defect_class':'guard\x20pinned\x20to\x20wrong-shop\x20Service\x20constant\x20slot\x20—\x20order\x20strands\x20(guard\x20creation\x20module\x20conflict\x20on-chain)','origin':'P0-3\x20mtb-tn-261030','wired_in':'wrap'},{'id':'MC-BINDSEM-01','gate':'lintGuardBindingSemantics','faces':['machine_publish','service_publish','guard_binding'],'enforcement':'always','defect_class':'per-host\x20guard\x20binding\x20semantics\x20—\x20drain\x20surface\x20/\x20T10\x20hijack\x20binds\x20(MF_SLOT_IDENTITY_ANCHOR\x20family)','origin':'ruling\x202026-10-31\x20(G2)','wired_in':'wrap'},{'id':'GSEM-WALK-01','gate':'lintGuardSemanticWalk','faces':['machine_publish','service_publish','guard_binding'],'enforcement':'always','defect_class':'guard-tree\x20SEMANTICS\x20that\x20shape\x20lints\x20pass\x20but\x20the\x20chain\x20trips\x20at\x20verify\x20time:\x20unknown\x20or\x20arity-mismatched\x20queries\x20(CHAIN_QUERY_REGISTRY\x20truth),\x20operand-type\x20vs\x20query-return-type\x20mismatches\x20(zr9x\x20F-34\x20Value-row\x20numeric\x20compare\x20→\x20MovePrimitiveRuntimeError),\x20query\x20object\x20pinned\x20to\x20a\x20wrong-typed\x20/\x20untagged\x20/\x20undeclared\x20/\x20empty\x20slot\x20(abnb\x20F-25\x20resource-absence\x20family,\x20zr9x\x20F-42\x20stale\x20pin),\x20undeclared\x20identifier\x20slots,\x20certain-true\x20whole-tree\x20folds\x20(zr9x\x20F-13\x20always-true\x20voting\x20leg\x20—\x20on\x20arb/voting\x20guards\x20a\x20TRUST\x20defect)\x20and\x20certain-false\x20folds\x20(zr9x\x20F-35\x20CLOSES=0),\x20and\x20static\x20repository-row\x20reads\x20whose\x20producer\x20is\x20unproven\x20(loud\x20UNVERIFIED,\x20zr9x\x20F-36)','origin':'user\x20directive\x20⑤\x202026-11-05\x20—\x20machine\x20publish\x20/\x20service\x20publish\x20/\x20guard\x20binding\x20evaluated\x20guard\x20SHAPE\x20only;\x20semantics\x20surfaced\x20solely\x20as\x20runtime\x20MovePrimitiveRuntimeError.\x20Single-authority\x20predicates\x20reused\x20from\x20guard-risk.ts\x20(foldCertainOutcome,\x20QUERY_TYPE_ALIASES,\x20rootReferencedIdentifiers);\x20call\x20site\x20=\x20shared\x20binding\x20verifier\x20verifyCollectedGuardBindings\x20(findings\x20ride\x20the\x20binding\x20gate\x27s\x20result;\x20this\x20entry\x20is\x20the\x20registry\x20citation)','wired_in':'wrap'},{'id':'MC-TASKBIND-PRE-01','gate':'lintMachineTaskBindingPreflight','faces':['machine_publish'],'enforcement':'always','defect_class':'machine-side\x20task\x20binding\x20preflight\x20(order/task\x20row\x20anchors\x20resolvable)','origin':'K4R\x20claimed_by\x20ordering\x20leg\x20batch','wired_in':'wrap'},{'id':'MC-SVCCONST-REF-01','gate':'lintMachineGuardServiceConstants','faces':['machine_publish','service_publish'],'enforcement':'always','defect_class':'by-reference\x20machine\x20publish:\x20guard\x20constants\x20pinned\x20to\x20foreign\x20Service','origin':'P0-3\x20residual\x20(machine\x20ref\x20publish\x20face)','wired_in':'wrap'},{'id':'MC-EVIDENCE-01','gate':'lintForwardGuardEvidenceMarkers','faces':['machine_publish'],'enforcement':'always','defect_class':'forward\x20guard\x20evidence\x20markers\x20(proof/event\x20anchors)\x20malformed','origin':'proactive\x20consolidation','wired_in':'wrap'},{'id':'SV-PERMAUTH-01','gate':'checkPermissionAuthorization','faces':['service_publish'],'enforcement':'strict_audit_only','defect_class':'IMMUT-002\x20—\x20custom\x20permission\x20index\x20grants\x20unauthorized\x20writers\x20(immutable\x20after\x20publish)','origin':'IMMUT-002\x20(OUTAGE\x20vs\x20EVIDENCE\x20degrade)','wired_in':'wrap'},{'id':'SV-WIPBIND-01','gate':'lintSalesWipBindings','faces':['service_publish'],'enforcement':'always','defect_class':'sales\x20payload\x20WIP\x20bindings\x20dangling\x20(price/stock\x20refs\x20unresolvable)','origin':'TPL-P1-04/05\x20family','wired_in':'wrap'},{'id':'SV-ALLOCGUARD-01','gate':'lintAllocatorGuards','faces':['service_publish'],'enforcement':'always','defect_class':'allocator-bound\x20guard\x20roots\x20unresolvable\x20/\x20fund-safety\x20contradiction\x20(chain-grounded).\x20Its\x20R-TIME-PROFILE\x20leg\x20shares\x20the\x20MC-TIMEPROFILE-01\x20named\x20degrade\x20(env.window_profile=\x27test\x27;\x20real-network\x20formal\x20publish\x20still\x20BLOCKS)','origin':'allocator-rail-verifier\x20publish\x20face\x20(ledger\x20rule\x208\x20authority)','wired_in':'wrap'},{'id':'SV-ESCROWEXIT-01','gate':'lintServiceEscrowExitCoverage','faces':['service_publish'],'enforcement':'always','defect_class':'R-ESCROW-LEAF\x20—\x20terminal\x20node\x20with\x20NO\x20drain\x20entry\x20exists\x20→\x20escrow\x20strands\x20(1.0\x20WOW实证)','origin':'R-ESCROW-LEAF\x20(4R-05)','wired_in':'wrap'},{'id':'SV-RAILEXIT-01','gate':'verifyRailExitSatisfiability','faces':['service_publish'],'enforcement':'always','defect_class':'the\x20SATISFIABILITY\x20half\x20of\x20R-ESCROW-LEAF\x20—\x20a\x20terminal\x20whose\x20rails\x20all\x20pin\x20the\x20right\x20node\x20yet\x20none\x20can\x20ever\x20FIRE,\x20so\x20the\x20escrow\x20strands\x20while\x20SV-ESCROWEXIT-01\x20reports\x20green:\x20RAIL_EXIT_WINDOW_CLOSED\x20(a\x20monotone-closing\x20clock\x20leg\x20in\x20an\x20unavoidable\x20position\x20—\x20draining\x20escrow\x20through\x20a\x20rail\x20is\x20an\x20explicit\x20call\x20needing\x20a\x20same-tx\x20passport,\x20so\x20once\x20the\x20window\x20shuts\x20no\x20signer\x20can\x20produce\x20one,\x20and\x20the\x20pool\x20is\x20append-only\x20with\x20no\x20drain\x20backdoor)\x20/\x20RAIL_EXIT_ARB_GATED\x20(an\x20unavoidable\x20arb.*\x20read,\x20which\x20returns\x20W_OBJECT_NOT_FOUND\x20and\x20ABORTS\x20the\x20whole\x20tx\x20rather\x20than\x20evaluating\x20false,\x20so\x20the\x20never-disputed\x20majority\x20has\x20no\x20exit)','origin':'R-ESCROW-LEAF\x20upgrade\x20(task\x20③,\x202026-11-04).\x20Severity\x20per\x20two-layer\x20measurement\x20over\x20v170:\x20LAYER\x20A\x20—\x20of\x20127\x20declared\x20rail\x20keys,\x2078\x20resolve\x20to\x20a\x20concrete\x20body\x20through\x20the\x20compiler\x27s\x20own\x20default-resolution\x20chain\x20and\x20ZERO\x20trips\x20either\x20code;\x20LAYER\x20B\x20is\x20resolution-independent\x20and\x20carries\x20the\x20argument\x20—\x20pattern.time_window_upper_bound\x20(the\x20closing\x20design)\x20is\x20bound\x20to\x20machine_forward\x20ONLY\x20across\x20all\x2030\x20archetypes,\x20exactly\x20as\x20its\x20own\x20`host`\x20field\x20declares,\x20and\x20no\x20arb-reading\x20tpl_*\x20is\x20bound\x20to\x20any\x20rail.\x20A\x20hit\x20therefore\x20means\x20the\x20payload\x20diverged\x20from\x20every\x20shipped\x20archetype.\x20Doctrine\x20source:\x20pattern.time_window_upper_bound\x27s\x20EXPIRY\x20SEMANTICS\x20note\x20—\x20\x27an\x20expired\x20window\x20only\x20fails\x20the\x20FORWARD\x20it\x20gates\x20…\x20pair\x20with\x20a\x20machine\x20expiry\x20node\x20or\x20an\x20allocator\x20recover\x20rail\x20for\x20the\x20post-window\x20fund\x20path\x27;\x20a\x20closing\x20leg\x20ON\x20the\x20fund\x20rail\x20is\x20that\x20pairing\x20inverted','wired_in':'wrap'},{'id':'SV-ARBNEUTRAL-01','gate':'checkArbitrationNeutrality','faces':['service_publish'],'enforcement':'strict_audit_only','defect_class':'R2-04\x20—\x20arbitrator-neutral\x20object\x20bound\x20as\x20merchant-biased\x20referee\x20(degraded\x20read\x20degrades\x20verdict)','origin':'R2-04\x20(OUTAGE\x20vs\x20EVIDENCE\x20degrade)','wired_in':'wrap'},{'id':'SV-RAILPAIR-01','gate':'lintAllocatorRailPairing','faces':['service_publish'],'enforcement':'always','defect_class':'H1B-03\x20—\x20symbolic\x20rail\x20verification\x20over\x20the\x20allocator\x20guards\x20(RAIL_TERMINAL_UNCOVERED\x20/\x20RAIL_AWARD_EXIT_MISSING\x20/\x20RAIL_CLAIMED_BY_LEG\x20/\x20RAIL_NO_CALLER_IDENTITY_BOUND\x20/\x20RAIL_DEAD_LITERAL).\x20UNCONDITIONAL\x20since\x202026-11-04\x20(was\x20arbitration-scoped),\x20fed\x20a\x20TOPOLOGY-DERIVED\x20node\x20matrix\x20via\x20chainNodeRailMatrix\x20—\x20the\x20chain\x20stores\x20no\x20semantic\x20role,\x20so\x20the\x20former\x20bare\x20{name}\x20rows\x20left\x20`terminals`\x20empty\x20and\x20RAIL_TERMINAL_UNCOVERED\x20could\x20never\x20fire\x20on\x20a\x20publish\x20payload\x20—\x20and,\x20from\x20the\x20same\x20day,\x20fed\x20the\x20SERVICE\x27S\x20EFFECTIVE\x20ON-CHAIN\x20BINDING:\x20a\x20publish-by-reference\x20(staged)\x20call\x20carries\x20neither\x20allocators\x20nor\x20a\x20machine\x20because\x20both\x20were\x20bound\x20in\x20earlier\x20calls,\x20so\x20the\x20payload-only\x20read\x20returned\x20silent\x20on\x20exactly\x20the\x20hand-compose\x20flow\x20this\x20incident\x20class\x20lives\x20in.\x20`serviceRef`\x20now\x20resolves\x20the\x20Service\x20object\x20once\x20and\x20its\x20`order_allocators`/`machine`\x20backfill\x20both\x20gaps\x20(same\x20move\x20as\x20the\x20R-ESCROW-LEAF\x20cure);\x20an\x20unresolvable\x20ref\x20is\x20graded\x20by\x20face\x20—\x20a\x20FAILED\x20read\x20blocks\x20only\x20the\x20strict\x20dry_run\x20audit\x20and\x20warns\x20on\x20the\x20formal\x20publish\x20(OUTAGE\x20vs\x20EVIDENCE),\x20a\x20read\x20that\x20resolved\x20NO\x20Service\x20object\x20warns\x20on\x20both','origin':'H1B-03\x20(1.0\x20WOW\x20stranded);\x20scope+matrix\x20cure\x202026-11-04\x20(publish\x20face\x20was\x20strictly\x20weaker\x20than\x20the\x20compile\x20face,\x20which\x20runs\x20the\x20same\x20verifier\x20on\x20every\x20archetype);\x20staged-binding\x20cure\x202026-11-04\x20(the\x20\x27UNCONDITIONAL\x27\x20claim\x20was\x20false\x20for\x20publish-by-reference\x20until\x20the\x20on-chain\x20binding\x20became\x20the\x20fallback\x20source)\x20—\x20landing\x20risk\x20measured\x20over\x20the\x20catalog\x20before\x20enabling:\x2030\x20archetypes\x20/\x20119\x20resolved\x20rails\x20/\x200\x20publish-face\x20criticals,\x2083\x20info\x20receipts\x20(builtin-allocator-rails.spec.ts\x20invariant\x20(d)),\x20plus\x20the\x20matrix\x20half\x20in\x20publish-rail-matrix.spec.ts','wired_in':'wrap'},{'id':'SV-ECHO-01','gate':'echoServicePublishBindings','faces':['service_publish'],'enforcement':'always','defect_class':'et21\x20ISS-015\x20—\x20last-chance\x20binding\x20echo:\x20every\x20named\x20binding\x20this\x20payload\x20will\x20freeze\x20(machine\x20/\x20order_allocators\x20guards\x20+\x20Entity\x20recipients\x20/\x20order_allocators_append\x20/\x20arbitrations\x20/\x20rewards\x20/\x20object.permission)\x20is\x20resolved\x20name\x20→\x20address\x20→\x20on-chain\x20object\x20type\x20through\x20the\x20namespace-aware\x20LocalMark\x20resolver.\x20An\x20UNRESOLVABLE\x20local\x20name\x20or\x20a\x20resolved\x20type\x20that\x20does\x20not\x20match\x20the\x20slot\x20(expected\x20Entity\x20payee\x20resolving\x20to\x20a\x20Guard)\x20BLOCKS\x20the\x20FORMAL\x20publish\x20—\x20order_allocators\x20is\x20append-only\x20after\x20publish\x20(the\x20allocator\x20table\x20can\x20never\x20be\x20edited\x20once\x20the\x20service\x20is\x20live),\x20so\x20a\x20mis-bound\x20payee\x20is\x20permanently\x20wrong;\x20the\x20dry_run\x20strict\x20audit\x20echoes\x20WITHOUT\x20blocking\x20(the\x20formal\x20dispatch\x20is\x20the\x20irreversible\x20step).\x20Cross-build\x20bare-name\x20collision\x20advisories\x20ride\x20the\x20same\x20resolver\x20(LocalMark\x20write-path\x20namespace,\x20same\x20slice)','origin':'et21\x20ISS-015\x20(publish-face\x20audit\x20ledger\x20P0#4;\x20binding-manifest\x20echo\x20first\x20slice,\x202026-11-04)','wired_in':'wrap'},{'id':'AUTH-COMPILE-01','gate':'checkAllocatorRails','faces':['service_publish','machine_publish'],'enforcement':'always','defect_class':'compile.ts\x20rail\x20blockers\x20—\x20RAIL_TERMINAL_UNCOVERED\x20/\x20RAIL_CLAIMED_BY_LEG\x20/\x20RAIL_NO_CALLER_IDENTITY_BOUND\x20/\x20REFUND_GATE_POLARITY_MIX\x20(template/DSL\x20path)','origin':'allocator-rail-verifier\x20(compile-time\x20authority)','wired_in':'compile'},{'id':'AUTH-AUDITRULES-01','gate':'audit_machine_bound','faces':['service_publish'],'enforcement':'advisory','defect_class':'audit-rules\x20catalog\x20—\x20machine\x20bound\x20/\x20dangling\x20deps\x20/\x20repo\x20integrity\x20caller\x20legs\x20(aggregate_risks\x20face,\x20wowok-auditor\x20consumer)','origin':'audit-rules.ts\x20catalog','wired_in':'audit-rules'},{'id':'SV-REFUNDSAT-01','gate':'checkRefundRecipientSatisfiability','faces':['service_publish'],'enforcement':'always','defect_class':'T10-10\x20—\x20a\x20refund\x20guard\x20pinning\x20its\x20recipient\x20identifier\x20to\x20context(Signer)\x20is\x20unsatisfiable\x20against\x20the\x20order-anchored\x20escrow,\x20so\x20order\x20funds\x20strand\x20permanently\x20once\x20the\x20allocators\x20lock\x20(fail-soft\x20to\x20advisory\x20on\x20fetch\x20error)','origin':'T10-10\x20(GuardIdentifier\x20x\x20for_object\x20x\x20Guard-equality\x20triple)','wired_in':'onchain'},{'id':'SV-ARBDECOR-01','gate':'checkArbitrationsBeforePublish','faces':['service_publish'],'enforcement':'always','defect_class':'decorative\x20dispute\x20path\x20—\x20a\x20bound\x20Arbitration\x20whose\x20voting_guard\x20roster\x20leaves\x20the\x20arb-side\x20admin\x20as\x20the\x20only\x20voter\x20AND\x20the\x20judge\x20(R-ARB-VOTE-LOCK\x20concentration);\x20fail-soft\x20to\x20advisory\x20on\x20resolution/query\x20error','origin':'R-ARB-VOTE-LOCK','wired_in':'onchain'},{'id':'SV-ARB-VENUE-WHITELIST-01','gate':'lintArbVenueWhitelist','faces':['service_publish'],'enforcement':'always','defect_class':'arb\x20venue\x20whitelist\x20violation\x20—\x20a\x20service\x20binding\x20an\x20arbitration\x20whose\x20venue\x20address\x20is\x20not\x20in\x20the\x20operator\x27s\x20declared\x20arb_venues\x20(or\x20an\x20unconstrained\x20venue\x20on\x20a\x20strict\x20profile):\x20the\x20venue\x20is\x20the\x20immutable-bind\x20refund-rail\x20counterparty\x20(bind\x20only\x20before\x20first\x20publish),\x20so\x20a\x20wrong\x20venue\x20is\x20an\x20IMMUT-002-class\x20lock-in;\x20unbound\x20services\x20and\x20undefined\x20whitelists\x20skip\x20silently\x20(nothing\x20to\x20compare)','origin':'R-ARB-VENUE-WHITELIST\x20(ktt2/duoduo-maicai\x202026-11-09\x20joint\x20triage\x20—\x20scanner\x20rule\x20R-ARB-VENUE-WHITELIST\x27s\x20publish-face\x20twin)','wired_in':'wrap'},{'id':'SV-RECIPIENT-01','gate':'checkEntityRecipientGate','faces':['service_publish'],'enforcement':'always','defect_class':'R-RECIPIENT-03\x20—\x20a\x20blank/omitted\x20allocator\x20recipient\x20resolves\x20to\x20the\x20DEFAULT\x20LOCAL\x20ACCOUNT,\x20silently\x20routing\x20customer\x20escrow\x20to\x20the\x20builder;\x20blocks\x20rather\x20than\x20warns\x20because\x20order_allocators\x20is\x20L1-immutable\x20after\x20publish\x20(the\x20same\x20gate\x20also\x20covers\x20allocation.allocators)','origin':'R-RECIPIENT-03\x20(direct-sales\x20Entity\x20recipient)','wired_in':'onchain'},{'id':'SV-ALLOCPLAN-01','gate':'checkOrderAllocatorsPrePublish','faces':['service_publish'],'enforcement':'always','defect_class':'R-A-1\x20allocator-plan\x20structural\x20family\x20+\x20R-A-2-03\x20duplicate\x20guards\x20—\x20the\x20subset\x20decidable\x20without\x20Guard\x20table/root\x20evidence\x20blocks;\x20everything\x20else\x20degrades\x20to\x20a\x20warning,\x20and\x20an\x20internal\x20error\x20never\x20blocks\x20(the\x20gate\x20must\x20not\x20become\x20a\x20new\x20failure\x20mode)','origin':'R-A-1\x20/\x20R-A-2-03','wired_in':'onchain'},{'id':'SV-WIPNET-01','gate':'checkSalesWipNetworkDeployment','faces':['service_publish'],'enforcement':'always','defect_class':'a\x20localnet-only\x20WIP\x20is\x20unreachable\x20from\x20testnet/mainnet\x20machines,\x20so\x20every\x20order\x20fails\x20100%\x20—\x20hard-blocked\x20on\x20those\x20networks,\x20advisory\x20on\x20localnet','origin':'WIP-B\x20network\x20calibration','wired_in':'onchain'},{'id':'SV-ZEROPRICE-01','gate':'checkSalesZeroPrice','faces':['service_publish'],'enforcement':'always','defect_class':'F-BS-76\x20—\x20sale()\x20has\x20no\x20price\x20floor\x20so\x20price\x200\x20lists\x20fine,\x20then\x20NOBODY\x20can\x20ever\x20buy\x20it\x20(client\x20zero-total\x20gate\x20and\x20the\x20on-chain\x20zero-total\x20abort\x20both\x20refuse);\x20discovery\x20cost\x20one\x20run\x201\x20679\x20440\x20gas\x20to\x20add\x20and\x20787\x20124\x20to\x20remove','origin':'F-BS-76\x20(bs-mn-261022)','wired_in':'onchain'},{'id':'SV-UMIMS-01','gate':'checkUmContactHasIm','faces':['service_publish'],'enforcement':'always','defect_class':'an\x20empty\x20Contact\x20ims\x20vector\x20leaves\x20pre-order\x20negotiation,\x20customer_required\x20private-info\x20delivery\x20and\x20post-sale\x20support\x20with\x20NO\x20channel\x20—\x20Messenger\x20routes\x20to\x20ims\x20members,\x20so\x20the\x20store\x20publishes\x20unreachable','origin':'on-chain\x20contact\x20ims\x20routing','wired_in':'onchain'},{'id':'SV-AUDITCAT-01','gate':'auditService','faces':['service_publish'],'enforcement':'advisory','defect_class':'audit-rules\x20service\x20catalog\x20(SKIP_RULES-filtered)\x20—\x20NOTE:\x20an\x20`error`-severity\x20finding\x20is\x20pushed\x20as\x20an\x20[AUDIT\x20ERROR]\x20constraintWarning\x20and\x20does\x20NOT\x20block,\x20so\x20the\x20catalog\x27s\x20own\x20severity\x20scale\x20is\x20cosmetic\x20on\x20this\x20face','origin':'audit-rules.ts\x20catalog','wired_in':'onchain'},{'id':'MC-PERMISS-01','gate':'checkMachinePermissionBeforePublish','faces':['machine_publish'],'enforcement':'advisory','defect_class':'a\x20forward\x27s\x20permissionIndex\x20with\x20no\x20entity\x20granted\x20on\x20the\x20bound\x20Permission\x20—\x20the\x20edge\x20is\x20unadvanceable\x20by\x20anyone\x20(advisory\x20because\x20a\x20new\x20Permission\x20may\x20be\x20granted\x20after\x20publish)','origin':'permission-index\x20grant\x20coverage','wired_in':'onchain'},{'id':'MC-ORPHANGUARD-01','gate':'lintMachineGuardBindings','faces':['machine_publish'],'enforcement':'advisory','defect_class':'F-29\x20—\x20the\x20session\x20created\x20Guard\x20object(s)\x20but\x20the\x20publishable\x20graph\x20binds\x20ZERO\x20of\x20them\x20on\x20any\x20forward\x20(the\x20silent-drop\x20shape:\x20$ref\x20pre-evaluated\x20to\x20undefined,\x20JSON.stringify\x20drops\x20the\x20key,\x20publish\x20succeeds,\x20edges\x20freeze\x20unguarded)','origin':'F-29\x20(tv8-tn-261030)','wired_in':'onchain'},{'id':'MC-ANCHORREACH-01','gate':'checkGuardAnchorReachability','faces':['machine_publish'],'enforcement':'advisory','defect_class':'a\x20guard\x20time-anchor\x20that\x20no\x20reachable\x20node\x20ever\x20establishes\x20makes\x20its\x20window\x20unsatisfiable\x20—\x20the\x20guard\x20can\x20never\x20pass,\x20so\x20the\x20rail\x20it\x20gates\x20is\x20dead\x20(Dijkstra\x20over\x20the\x20anchor\x20x\x20node\x20profile)','origin':'guard-anchor-reach.ts','wired_in':'onchain'},{'id':'GD-NODEGATE-01','gate':'lintGuardNodeGates','faces':['guard_binding'],'enforcement':'advisory','defect_class':'guard\x20node-gate\x20advisory\x20on\x20the\x20guard\x20create/update\x20face\x20—\x20a\x20node\x20pin\x20that\x20the\x20intended\x20host\x20machine\x20never\x20enters','origin':'guard\x20node-gate\x20parse\x20(parseGuardNodeGates)','wired_in':'onchain'},{'id':'GD-REWARDONCE-01','gate':'checkRewardOnceArming','faces':['guard_binding'],'enforcement':'advisory','defect_class':'a\x20funded\x20Reward\x20pool\x20whose\x20mounted\x20guard\x20carries\x20no\x20once-stamp\x20is\x20replayable,\x20and\x20the\x20bsw4\x20F-11\x20window-delay\x20advisory\x20rides\x20the\x20same\x20sweep;\x20reward\x20guard_add\x20is\x20a\x20bind\x20face\x20per\x20isGuardBindingOperation','origin':'bsw4\x20F-11\x20/\x20reward\x20replay\x20stamp','wired_in':'onchain'},{'id':'GD-REWARDEVID-01','gate':'verifyRewardEvidenceBindings','faces':['guard_binding'],'enforcement':'advisory','defect_class':'reward\x20evidence\x20bindings\x20that\x20the\x20deployed\x20package\x20drops\x20on\x20read-back\x20—\x20fail-soft,\x20never\x20masks\x20the\x20operation\x27s\x20own\x20outcome','origin':'reward\x20evidence\x20read-back','wired_in':'onchain'},{'id':'SV-REWARDDEADLOCK-01','gate':'lintRewardClaimNodeGateDeadlock','faces':['service_publish'],'enforcement':'always','defect_class':'a\x20pre-funded\x20reward\x27s\x20claim\x20guard\x20pins\x20equality\x20node\x20gates\x20that\x20exclude\x20every\x20reachable\x20evidence-marker\x20node\x20on\x20the\x20same\x20lifecycle\x20branch\x20—\x20the\x20claim\x20either\x20pays\x20without\x20evidence\x20or\x20aborts\x207\x20after\x20the\x20forward\x20(guards\x20are\x20immutable,\x20the\x20binding\x20freezes\x20at\x20publish;\x20machine-graph-unreadable\x20degrades\x20to\x20warning,\x20never\x20guesses)','origin':'O18\x20incident\x20/\x20F-MTW-12\x20(reward-deadlock\x20lint,\x20guard-node-gates.ts)','wired_in':'wrap'}];export const PUBLISH_SURFACE_EXEMPT_GATES={'checkAllocatorRails':'compile-face\x20authority\x20(template\x20path);\x20invoked\x20by\x20the\x20compile\x20pipeline,\x20registered\x20as\x20AUTH-COMPILE-01','auditRepoIntegrityAndCallerLegs':'plan-level\x20repo\x20integrity\x20(plan\x20build\x20face,\x20not\x20the\x20dispatch\x20publish\x20gate)','checkForeignServicePins':'plan-level\x20foreign\x20pin\x20disclosure\x20(plan\x20build\x20face)','checkDaysUnitSlots':'compile\x20normalization\x20check\x20(plan\x20build\x20face)','checkWindowTruncation':'compile\x20normalization\x20check\x20(plan\x20build\x20face)','dropEmptyVecGuards':'compile\x20normalization\x20step\x20(not\x20a\x20gate)','checkProjectStage':'project\x20tool\x20stage\x20hint\x20(wip_file/project\x20face,\x20not\x20publish)','lintAllocatorGuardSet':'internal\x20helper\x20behind\x20lintAllocatorGuards\x20and\x20the\x20pre-buy\x20screening\x20gate','lintTaskBindingAdvisories':'internal\x20helper\x20behind\x20the\x20task-binding\x20advisory\x20family\x20(protocol\x20254)','lintGuard':'guard-lint\x20module\x20entry\x20invoked\x20INSIDE\x20composing\x20lints,\x20not\x20a\x20publish\x20gate\x20itself','lintReviewLockedTerminals':'internal\x20helper\x20behind\x20lintForwardReviewLocks','verifyAllocatorRails':'internal\x20helper\x20behind\x20lintAllocatorRailPairing\x20(single-source\x20verifier\x20core)','verifyArbitrationRulingRails':'internal\x20helper\x20behind\x20lintForwardArbRulingRails\x20(single-source\x20ruling-rail\x20verifier\x20core)','verifyCollectedGuardBindings':'internal\x20helper\x20behind\x20lintGuardBindingSemantics\x20(batch\x20collection)','verifyGuardBinding':'internal\x20helper\x20behind\x20verifyCollectedGuardBindings\x20(single\x20host)','auditGuardRelies':'internal\x20helper\x20inside\x20verifyCollectedGuardBindings\x20(guard-relies\x20audit)','checkEntityRecipients':'internal\x20helper\x20behind\x20checkEntityRecipientGate\x20(registered\x20as\x20SV-RECIPIENT-01)','checkArbitrationVenueOrder':'Arbitration\x20CREATION\x20face\x20(venue\x20ordering\x20findings\x20at\x20arb\x20build),\x20not\x20a\x20Service/Machine\x20publish\x20gate','checkClientSchemaCompatibility':'client\x20schema-version\x20negotiation\x20(schema\x20layer),\x20not\x20a\x20publish\x20gate','checkDiscountFloorBeforeIssue':'discount\x20ISSUANCE\x20face\x20—\x20judged\x20when\x20a\x20discount\x20is\x20created,\x20not\x20at\x20publish','checkDiscountBalanceGateBeforeIssue':'discount\x20ISSUANCE\x20face\x20—\x20balance-gate\x20coupling\x20(HIS-44):\x20judged\x20when\x20a\x20discount\x20is\x20created\x20against\x20a\x20balance-gated\x20service,\x20not\x20at\x20publish','checkDiscountThresholdBeforeBuy':'BUY\x20face\x20—\x20the\x20pre_buy\x20gate\x20(wrap.ts\x20runPreBuyChecks)\x20owns\x20purchase-time\x20screening','verifyGuardFailureLegs':'runtime\x20E_VERIFY_FAILED\x20diagnosis\x20(leg-by-leg\x20replay\x20of\x20a\x20FAILED\x20guard\x20submission),\x20not\x20a\x20pre-publish\x20gate','verifyOrderNewLanded':'post-transaction\x20read-back\x20of\x20an\x20order_new\x20landing,\x20not\x20a\x20pre-publish\x20gate'};export function gatesForFace(a){return PUBLISH_SURFACE_CONTRACT['filter'](b=>b['faces']['includes'](a));}export function blockingGatesForFace(a){return gatesForFace(a)['filter'](b=>b['enforcement']==='always');}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{copyFileSync,existsSync,mkdirSync,readdirSync,readFileSync,rmSync,statSync,writeFileSync}from'node:fs';import{dirname,join,relative,sep}from'node:path';import{z}from'zod';import{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{knobDocLines}from'./knob-docs.js';import{MachineProseEnvelopeSchema}from'./template-prose.js';import{INDUSTRY_NAV_FILENAME,classifyIndustryNav,renderIndustryNav,wrapBullet,wrapParagraph}from'./template-nav.js';import{classifyRelease,releaseBodyHash,releaseSentinelLine,stripReleaseSentinel}from'./release-sentinel.js';export const TEMPLATES_SUBDIR='templates';export const MACHINE_TEMPLATES_SUBDIR='.machine';export const TEMPLATE_ARCHIVE_SUBDIR='.archive';export function resolveTemplatesDir(){return process['env']['WOWOK_TEMPLATES_DIR']||getWowokIndustryDir();}const MachineEdgeSchema=z['object']({'prev':z['string'](),'forward':z['string']()['min'](0x1)['optional'](),'operator':z['enum'](['merchant','order_payer'])['optional'](),'named_operator':z['string']()['min'](0x1)['optional'](),'permission_index':z['number']()['int']()['min'](0x3e8)['optional'](),'guard_key':z['string']()['min'](0x1)['optional']()}),MachineNodeSchema=z['object']({'name':z['string']()['min'](0x1),'role':z['string']()['min'](0x1),'operator':z['enum'](['merchant','order_payer'])['optional'](),'named_operator':z['string']()['min'](0x1)['optional'](),'semantic_role':z['enum'](['draft','active','delivered','final','cancelled'])['optional'](),'optional':z['boolean']()['optional'](),'threshold':z['number']()['int']()['min'](0x0)['optional'](),'from':z['array'](z['union']([z['string'](),MachineEdgeSchema]))['optional'](),'segment':z['object']({'id':z['string']()['min'](0x1),'count_from':z['string']()['min'](0x1)})['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),'key':z['string']()['min'](0x1),'policy':z['object']({'name':z['string']()['min'](0x1)['optional'](),'description':z['string']()['min'](0x1)['optional'](),'id_from':z['string']()['min'](0x1)['optional'](),'value_type':z['string']()['min'](0x1)['optional']()})['optional'](),'params':z['record'](z['string'](),z['unknown']())['optional'](),'identity_leg_exempt':z['string']()['min'](0x1)['optional'](),'node_set_segments':z['array'](z['string']()['min'](0x1))['optional'](),'node_set_nodes':z['array'](z['string']()['min'](0x1))['optional']()}),ConditionalGuardEmissionSchema=z['object']({'guard_key':z['string']()['min'](0x1),'param':z['string']()['min'](0x1),'values':z['array'](z['string']()['min'](0x1))['min'](0x2),'emit_value':z['string']()['min'](0x1),'question':z['string']()['min'](0x1)})['strict'](),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','formula']),'value':z['union']([z['string'](),z['number']()])['optional'](),'value_from':z['string']()['optional'](),'value_from_complement':z['string']()['min'](0x1)['optional'](),'repeat_from':z['string']()['min'](0x1)['optional'](),'fix':z['union']([z['string'](),z['number']()])['optional'](),'fix_from':z['string']()['optional'](),'guard_key':z['string']()['min'](0x1)['optional'](),'formula':z['object']({'selector':z['number']()['int']()['min'](0x0)['max'](0x2),'repo':z['string']()['min'](0x1)['optional'](),'key':z['string']()['min'](0x1)['optional'](),'predicate':z['unknown']()['optional'](),'ids':z['array'](z['unknown']())['optional']()})['strict']()['optional'](),'note':z['string']()['optional']()})['strict'](),AllocatorSchema=z['object']({'recipient':z['enum'](['signer','entity','fixed']),'recipient_key':z['string']()['min'](0x1)['optional'](),'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'](),UserInputSpecSchema=z['object']({'question':z['string']()['min'](0x1),'param_key':z['string']()['min'](0x1),'note':z['string']()['min'](0x1)['optional']()})['strict'](),RuleDeclarationSchema=z['object']({'id':z['string']()['regex'](/^[a-z0-9-]+$/,'id\x20must\x20be\x20a\x20lowercase\x20slug'),'rule':z['string']()['min'](0xf,'rule\x20text\x20must\x20be\x20a\x20full\x20sentence\x20(15-char\x20floor)'),'binding':z['object']({'kind':z['enum'](['machine_node','machine_edge','guard','allocator_row','fee_param','keeper_duty','time_anchor','conditional_guard','off_chain']),'ref':z['string']()['min'](0x1)})['strict']()['optional'](),'status':z['enum'](['expressible','unexpressible'])['optional'](),'unexpressible_ref':z['string']()['regex'](/^U-\d+[ab]?$/,'unexpressible_ref\x20must\x20look\x20like\x20U-13\x20/\x20U-19b')['optional'](),'note':z['string']()['min'](0x1)['optional']()})['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']()),'keeper_duty':z['array'](z['object']({'when':z['string']()['min'](0x1),'action':z['string']()['min'](0x1),'miss_consequence':z['string']()['min'](0x1),'duty_kind':z['string']()['min'](0x1)['optional'](),'detector':z['enum'](['payment_unclaimed','progress_actionable','settlement_pending','timeout_intermediate'])['optional'](),'anchor':z['string']()['min'](0x1)['optional'](),'window_param':z['string']()['min'](0x1)['optional']()})['strict']())['optional'](),'recommended_role':z['enum'](['merchant','supplier','both']),'role_rationale':z['string']()['min'](0x1),'differences':z['array'](z['string']()),'user_inputs':z['array'](z['string']()),'user_input_specs':z['array'](UserInputSpecSchema)['optional'](),'key_risk':z['string']()['min'](0x1)['max'](0x12c,'key_risk\x20must\x20be\x20a\x20one-line\x20risk\x20statement\x20(<=\x20300\x20chars)\x20—\x20rules\x20and\x20doctrine\x20do\x20not\x20belong\x20in\x20this\x20field')['refine'](a=>!/STANDING RULE|TECHNOLOGY PROVIDER|NOT A PARTY TO THE DEAL|Full text:/i['test'](a),{'message':'key_risk\x20carries\x20an\x20instruction-block\x20fragment\x20(STANDING\x20RULE\x20/\x20provider\x20doctrine\x20/\x20\x27Full\x20text:\x27\x20reference)\x20—\x20keep\x20doctrine\x20in\x20body\x20prose\x20or\x20playbooks,\x20not\x20in\x20this\x20field'}),'build_notes':z['array'](z['string']()),'prose_language':z['enum'](['en','other'])['optional'](),'machine_prose':z['record'](z['string'](),MachineProseEnvelopeSchema)['optional'](),'evidence_refs':z['array'](z['string']())['optional'](),'conditional_guards':z['array'](ConditionalGuardEmissionSchema)['optional'](),'time_anchors':z['record'](z['string'](),z['string']())['optional'](),'payment_model':z['enum'](['milestone','subscription','escrow'])['optional'](),'arbitration_mode':z['enum'](['none','merchant_pick','mutual_pick','third_party'])['optional'](),'reward_claim_policy':z['object']({'kind':z['enum'](['once','periodic','capped']),'min_claim_interval_ms':z['number']()['optional'](),'max_total_per_recipient':z['string']()['optional']()})['optional'](),'review_mode':z['enum'](['none','review','review_reward'])['optional'](),'experience_compensation_mode':z['enum'](['none','reward'])['optional'](),'price_rebate_mode':z['enum'](['none','reward'])['optional'](),'after_sales_mode':z['enum'](['none','return','exchange','warranty'])['optional'](),'acceptance_mode':z['enum'](['none','milestone','contest','bounty','agent'])['optional'](),'installment_mode':z['enum'](['none','deposit_balance','milestone_n'])['optional'](),'affiliate_mode':z['enum'](['none','commission'])['optional'](),'crowdfunding_mode':z['enum'](['none','threshold','flexible'])['optional'](),'logistics_mode':z['enum'](['none','carrier','merchant_managed','courier','pickup_point'])['optional'](),'compensation_fund_policy':z['enum'](['allowed','forbidden'])['optional'](),'reentry_kind':z['enum'](['none','review-loop','paid-cycle'])['optional'](),'settlement_window_merge':z['array'](z['string']())['optional'](),'supply_rules':z['array'](RuleDeclarationSchema)['optional'](),'labor_rules':z['array'](RuleDeclarationSchema)['optional'](),'incentive_rules':z['array'](RuleDeclarationSchema)['optional'](),'ops_kpis':z['array'](RuleDeclarationSchema)['optional']()})['strict']();export function userInputSpecIssues(a){if(a['user_input_specs']===undefined)return[];const b=[],c=new Set();for(const [d,e]of a['user_input_specs']['entries']()){!(e['param_key']in a['fee_params'])&&b['push']('user_input_specs['+d+'].param_key\x20\x27'+e['param_key']+'\x27\x20is\x20not\x20a\x20declared\x20fee_param\x20—\x20declare\x20it\x20in\x20fee_params\x20(the\x20question\x20fills\x20it)\x20or\x20fix\x20the\x20key'),c['has'](e['param_key'])&&b['push']('user_input_specs['+d+']\x20asks\x20about\x20\x27'+e['param_key']+'\x27\x20twice\x20—\x20one\x20question\x20per\x20parameter'),c['add'](e['param_key']);}return b;}import{validateAllocatorRows}from'./template-validation.js';import{validateRuleDeclarations}from'./rule-declarations.js';export{validateAllocatorRows};export function platformShareBps(a){const b=Object['keys'](a)['find'](c=>/(?:platform|commission|service_fee)[a-z_]*_bps$/['test'](c)&&!/^attributed_/['test'](c)&&!/_cap_bps$/['test'](c)&&typeof a[c]==='number');return b!==undefined?a[b]:undefined;}export const PLATFORM_TAKE_KEY=/^(?:platform_(?:share|commission|take|tool_fee)_bps|platform_fee_rate_bps|commission_rate_bps|(?:base_)?commission_rate_bps|offsite_ads_rate_bps|service_fee_rate_bps|payment_fee_bps)$/;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{if(/^-?\d+(\.\d+)?$/['test'](l))e[k]=Number(l);else{if(l['startsWith']('\x22')&&l['endsWith']('\x22')&&l['length']>=0x2||l['startsWith']('\x27')&&l['endsWith']('\x27')&&l['length']>=0x2){if(l[0x0]==='\x22')try{e[k]=JSON['parse'](l);}catch(n){throw new Error('frontmatter\x20key\x20\x27'+k+'\x27\x20is\x20not\x20valid\x20JSON:\x20'+n['message']);}else e[k]=l['slice'](0x1,-0x1);}else 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';export function canonicalTemplateContent(a){const b=a,c=[['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']],...a['keeper_duty']?[['keeper_duty',a['keeper_duty']]]:[],['differences',a['differences']],['user_inputs',a['user_inputs']],...a['user_input_specs']?[['user_input_specs',a['user_input_specs']]]:[],['build_notes',a['build_notes']],...b['prose_language']?[['prose_language',b['prose_language']]]:[],...b['machine_prose']?[['machine_prose',b['machine_prose']]]:[],...a['evidence_refs']?[['evidence_refs',a['evidence_refs']]]:[],...a['conditional_guards']?[['conditional_guards',a['conditional_guards']]]:[],...a['time_anchors']?[['time_anchors',a['time_anchors']]]:[],...a['payment_model']?[['payment_model',a['payment_model']]]:[],...a['arbitration_mode']?[['arbitration_mode',a['arbitration_mode']]]:[],...a['review_mode']?[['review_mode',a['review_mode']]]:[],...a['experience_compensation_mode']?[['experience_compensation_mode',a['experience_compensation_mode']]]:[],...a['price_rebate_mode']?[['price_rebate_mode',a['price_rebate_mode']]]:[],...a['after_sales_mode']?[['after_sales_mode',a['after_sales_mode']]]:[],...a['acceptance_mode']?[['acceptance_mode',a['acceptance_mode']]]:[],...a['installment_mode']?[['installment_mode',a['installment_mode']]]:[],...a['affiliate_mode']?[['affiliate_mode',a['affiliate_mode']]]:[],...a['crowdfunding_mode']?[['crowdfunding_mode',a['crowdfunding_mode']]]:[],...a['logistics_mode']?[['logistics_mode',a['logistics_mode']]]:[],...a['reward_claim_policy']?[['reward_claim_policy',a['reward_claim_policy']]]:[],...a['compensation_fund_policy']?[['compensation_fund_policy',a['compensation_fund_policy']]]:[],...a['reentry_kind']&&a['reentry_kind']!=='none'?[['reentry_kind',a['reentry_kind']]]:[],...a['settlement_window_merge']?[['settlement_window_merge',a['settlement_window_merge']]]:[],...a['supply_rules']?[['supply_rules',a['supply_rules']]]:[],...a['labor_rules']?[['labor_rules',a['labor_rules']]]:[],...a['incentive_rules']?[['incentive_rules',a['incentive_rules']]]:[],...a['ops_kpis']?[['ops_kpis',a['ops_kpis']]]:[]],d=['---',...c['map'](([f,g])=>frontmatterLine(f,g)),'---'],e=['','#\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'](f=>'-\x20'+f),'','##\x20Build-time\x20inputs\x20&\x20standing\x20constraints\x20(non-parameter)','',...a['user_inputs']['map'](f=>'-\x20'+f),...a['user_input_specs']&&a['user_input_specs']['length']>0x0?['','##\x20Structured\x20business\x20questions\x20(answer\x20rides\x20fee_overrides)','',...a['user_input_specs']['map'](f=>'-\x20\x22'+f['question']+'\x22\x20→\x20fee_overrides.'+f['param_key']+(f['note']?'\x20—\x20'+f['note']:''))]:[],'','##\x20Risk-avoidance\x20checklist\x20(R1-R10)','',...a['trust_mechanisms']['map'](f=>'-\x20'+f),'','##\x20Build\x20notes','',...a['build_notes']['map'](f=>'-\x20'+f),''];return[...d,...e]['join']('\x0a');}export function renderTemplateFile(a){const b=canonicalTemplateContent(a);return releaseSentinelLine(TEMPLATE_SENTINEL_KIND,BUILTIN_TEMPLATES_VERSION,releaseBodyHash(b))+'\x0a'+b;}export function templateCatalogDigest(a){const b=BUILTIN_TEMPLATES['find'](c=>c['id']===a);if(!b)return undefined;return releaseBodyHash(canonicalTemplateContent(b));}export const TEMPLATE_KNOBS_SENTINEL_KIND='template-knobs';export const TEMPLATE_KNOBS_VERSION=0x5;export const TemplateKnobOverlaySchema=TemplateFrontmatterSchema['pick']({'fee_params':!![],'key_risk':!![],'recommended_role':!![],'role_rationale':!![],'differences':!![],'user_inputs':!![],'payment_model':!![],'arbitration_mode':!![],'review_mode':!![],'experience_compensation_mode':!![],'price_rebate_mode':!![],'after_sales_mode':!![],'acceptance_mode':!![],'installment_mode':!![],'affiliate_mode':!![],'crowdfunding_mode':!![],'logistics_mode':!![],'reward_claim_policy':!![],'reentry_kind':!![],'compensation_fund_policy':!![]})['partial']()['extend']({'id':z['string']()['regex'](/^[a-z][a-z0-9._-]*\/[a-z][a-z0-9._-]*$/,'knob\x20file\x20id\x20must\x20be\x20\x27<industry>/<variant>\x27')})['strict']();export function foldKnobFrontmatter(a){const b={},c={};for(const [d,e]of Object['entries'](a)){d['startsWith']('fee_params.')?c[d['slice']('fee_params.'['length'])]=e:b[d]=e;}if(Object['keys'](c)['length']>0x0)b['fee_params']=c;return b;}export function parseKnobFile(a,b){const c=stripReleaseSentinel(a,TEMPLATE_KNOBS_SENTINEL_KIND);let d;try{const f=parseTemplateFile(c['sentinel']?c['content']:a);d=f['frontmatter'];}catch{return null;}const e=TemplateKnobOverlaySchema['safeParse'](foldKnobFrontmatter(d));if(!e['success']||e['data']['id']!==b)return null;return e['data'];}function knobLine(a,b){if(typeof b==='number')return a+':\x20'+b;if(typeof b==='string')return/^-?\d+(\.\d+)?$/['test'](b)?a+':\x20\x27'+b+'\x27':a+':\x20'+b;return a+':\x20'+JSON['stringify'](b);}export function canonicalKnobContent(a){const b=['id:\x20'+a['id'],knobLine('key_risk',a['key_risk']),knobLine('recommended_role',a['recommended_role']),knobLine('role_rationale',a['role_rationale']),...Object['keys'](a['fee_params'])['sort']()['flatMap'](d=>[...knobDocLines(d),knobLine('fee_params.'+d,a['fee_params'][d])]),...a['payment_model']!==undefined?[knobLine('payment_model',a['payment_model'])]:[],...a['arbitration_mode']!==undefined?[knobLine('arbitration_mode',a['arbitration_mode'])]:[],...a['review_mode']!==undefined?[knobLine('review_mode',a['review_mode'])]:[],...a['experience_compensation_mode']!==undefined?[knobLine('experience_compensation_mode',a['experience_compensation_mode'])]:[],...a['after_sales_mode']!==undefined?[knobLine('after_sales_mode',a['after_sales_mode'])]:[],...a['acceptance_mode']!==undefined?[knobLine('acceptance_mode',a['acceptance_mode'])]:[],...a['installment_mode']!==undefined?[knobLine('installment_mode',a['installment_mode'])]:[],...a['affiliate_mode']!==undefined?[knobLine('affiliate_mode',a['affiliate_mode'])]:[],...a['crowdfunding_mode']!==undefined?[knobLine('crowdfunding_mode',a['crowdfunding_mode'])]:[],...a['logistics_mode']!==undefined?[knobLine('logistics_mode',a['logistics_mode'])]:[],...a['reward_claim_policy']!==undefined?[knobLine('reward_claim_policy',a['reward_claim_policy'])]:[],...a['reentry_kind']!==undefined&&a['reentry_kind']!=='none'?[knobLine('reentry_kind',a['reentry_kind'])]:[],...a['compensation_fund_policy']!==undefined?[knobLine('compensation_fund_policy',a['compensation_fund_policy'])]:[],knobLine('differences',a['differences']),knobLine('user_inputs',a['user_inputs'])],c=['','#\x20'+a['industry']+'\x20/\x20'+a['variant']+'\x20('+a['archetype']+')\x20—\x20business\x20knobs','','>\x20THIS\x20file\x20is\x20the\x20one\x20you\x20edit.\x20Each\x20line\x20above\x20the\x20body\x20is\x20a\x20knob\x20the','>\x20build\x20honors:\x20`fee_params.<name>`\x20(numbers\x20—\x20pricing\x20windows,\x20caps,','>\x20pools),\x20the\x20mode\x20switches\x20(review/arbitration/logistics/...),\x20and\x20the','>\x20guidance\x20prose\x20below.\x20Lines\x20starting\x20with\x20`#`\x20are\x20read-only\x20docs\x20for','>\x20the\x20knob\x20line\x20below\x20them\x20—\x20edit\x20the\x20value\x20line,\x20never\x20the\x20`#`\x20lines','>\x20(docs\x20refresh\x20with\x20each\x20release).\x20The\x20workflow\x20structure\x20itself','>\x20(nodes,\x20guards,\x20fund\x20rails)\x20is\x20system-managed\x20in\x20a\x20hidden\x20`.machine/`','>\x20file\x20next\x20to\x20this\x20one\x20and\x20is\x20deliberately\x20not\x20exposed\x20—\x20change','>\x20business\x20intent\x20through\x20these\x20knobs\x20or\x20through\x20the\x20migration\x20wizard,','>\x20never\x20by\x20editing\x20node\x20graphs\x20by\x20hand.','','##\x20Key\x20risk','',...wrapParagraph(a['key_risk']),'','##\x20Differences\x20vs\x20the\x20sibling\x20variant','',...a['differences']['flatMap'](e=>wrapBullet(e)),'','##\x20Build-time\x20inputs\x20&\x20standing\x20constraints\x20(non-parameter)','',...a['user_inputs']['flatMap'](d=>wrapBullet(d)),'','##\x20Your\x20notes\x20(free-form\x20—\x20the\x20AI\x20reads\x20this\x20body\x20as\x20guidance)','','-\x20(Add\x20your\x20own\x20pricing,\x20tone,\x20or\x20policy\x20notes\x20below\x20—\x20they\x20override\x20the','\x20\x20generic\x20guidance\x20the\x20same\x20way\x20playbook.md\x20does.)',''];return['---',...b,'---',...c]['join']('\x0a');}export function renderKnobFile(a){const b=canonicalKnobContent(a);return releaseSentinelLine(TEMPLATE_KNOBS_SENTINEL_KIND,TEMPLATE_KNOBS_VERSION,releaseBodyHash(b))+'\x0a'+b;}export function classifyKnobFile(a,b){const c=stripReleaseSentinel(a,TEMPLATE_KNOBS_SENTINEL_KIND);if(!c['sentinel'])return null;if(parseKnobFile(c['content'],b)===null)return null;const d=classifyRelease(c['sentinel'],c['content'],TEMPLATE_KNOBS_VERSION);return d==='user_file'?null:d;}export function applyKnobOverlay(a,b,c){const d=b['fee_params']!==undefined?Object['keys'](b['fee_params'])['filter'](e=>!(e in a['fee_params'])):[];if(d['length']>0x0)throw new Error('template\x20\x27'+a['id']+'\x27\x20—\x20knob\x20overlay\x20declares\x20fee_params\x20key(s)\x20unknown\x20to\x20the\x20machine\x20layer:\x20'+d['join'](',\x20')+'.\x20'+'Knobs\x20are\x20a\x20pure\x20override\x20surface\x20(D2/F-03\x20single\x20source\x20of\x20truth):\x20a\x20key\x20the\x20.machine\x20template\x20does\x20not\x20declare\x20'+'cannot\x20land\x20and\x20would\x20silently\x20fork\x20the\x20template\x20into\x20two\x20truths.\x20Declare\x20it\x20in\x20the\x20machine\x20template\x20instead.');return{...a,...b['fee_params']!==undefined?{'fee_params':{...a['fee_params'],...b['fee_params']}}:{},...b['key_risk']!==undefined?{'key_risk':b['key_risk']}:{},...b['recommended_role']!==undefined?{'recommended_role':b['recommended_role']}:{},...b['role_rationale']!==undefined?{'role_rationale':b['role_rationale']}:{},...b['differences']!==undefined?{'differences':b['differences']}:{},...b['user_inputs']!==undefined?{'user_inputs':b['user_inputs']}:{},...b['payment_model']!==undefined?{'payment_model':b['payment_model']}:{},...b['arbitration_mode']!==undefined?{'arbitration_mode':b['arbitration_mode']}:{},...b['review_mode']!==undefined?{'review_mode':b['review_mode']}:{},...b['experience_compensation_mode']!==undefined?{'experience_compensation_mode':b['experience_compensation_mode']}:{},...b['after_sales_mode']!==undefined?{'after_sales_mode':b['after_sales_mode']}:{},...b['acceptance_mode']!==undefined?{'acceptance_mode':b['acceptance_mode']}:{},...b['installment_mode']!==undefined?{'installment_mode':b['installment_mode']}:{},...b['affiliate_mode']!==undefined?{'affiliate_mode':b['affiliate_mode']}:{},...b['crowdfunding_mode']!==undefined?{'crowdfunding_mode':b['crowdfunding_mode']}:{},...b['logistics_mode']!==undefined?{'logistics_mode':b['logistics_mode']}:{},...b['reward_claim_policy']!==undefined?{'reward_claim_policy':b['reward_claim_policy']}:{},...b['reentry_kind']!==undefined?{'reentry_kind':b['reentry_kind']}:{},...b['compensation_fund_policy']!==undefined?{'compensation_fund_policy':b['compensation_fund_policy']}:{},'body':c};}function machineTemplateFile(a,b){return join(a,b['industry'],TEMPLATES_SUBDIR,MACHINE_TEMPLATES_SUBDIR,b['variant']+'.md');}function knobTemplateFile(a,b){return join(a,b['industry'],TEMPLATES_SUBDIR,b['variant']+'.md');}function archiveBackupFile(a,b,c){return join(a,b['industry'],TEMPLATES_SUBDIR,TEMPLATE_ARCHIVE_SUBDIR,''+b['variant']+c);}export function matchBuiltinTemplateSlot(a){const b=relative(resolveTemplatesDir(),a);if(!b||b['startsWith']('..'))return null;const c=b['split'](sep);if(c['length']===0x4&&c[0x1]===TEMPLATES_SUBDIR&&c[0x2]===MACHINE_TEMPLATES_SUBDIR&&c[0x3]['endsWith']('.md')){const d=c[0x3]['slice'](0x0,-'.md'['length']),e=BUILTIN_TEMPLATES['find'](f=>f['industry']===c[0x0]&&f['variant']===d)??null;return e?{'template':e,'part':'machine'}:null;}if(c['length']===0x3&&c[0x1]===TEMPLATES_SUBDIR&&c[0x2]['endsWith']('.md')){const f=c[0x2]['slice'](0x0,-'.md'['length']),g=BUILTIN_TEMPLATES['find'](h=>h['industry']===c[0x0]&&h['variant']===f)??null;return g?{'template':g,'part':'knobs'}:null;}return null;}let seeded=![];export function seedBuiltinTemplates(){const a=[],b=resolveTemplatesDir();for(const c of BUILTIN_TEMPLATES){const d=machineTemplateFile(b,c),e=knobTemplateFile(b,c),f=dirname(d),g=canonicalTemplateContent(c),h={'template':c['id'],'status':'written','path':d};try{if(!existsSync(d))mkdirSync(f,{'recursive':!![]}),writeFileSync(d,renderTemplateFile(c),'utf-8');else{const i=readFileSync(d,'utf-8'),{sentinel:j,content:k}=stripReleaseSentinel(i,TEMPLATE_SENTINEL_KIND);!j?k===g?(writeFileSync(d,renderTemplateFile(c),'utf-8'),h['status']='restamped',h['detail']='body\x20matches\x20canonical\x20but\x20no\x20sentinel\x20present;\x20sentinel\x20header\x20added,\x20body\x20untouched'):(h['status']='skipped_user_file',h['detail']='machine\x20file\x20exists\x20without\x20builtin\x20sentinel\x20and\x20body\x20differs\x20from\x20canonical;\x20leaving\x20user\x20file\x20untouched'):k===g?j['version']!==BUILTIN_TEMPLATES_VERSION||releaseBodyHash(k)!==j['hash']?(writeFileSync(d,renderTemplateFile(c),'utf-8'),h['status']='restamped',h['detail']='body\x20matches\x20canonical\x20but\x20sentinel\x20stale/wrong;\x20header\x20refreshed,\x20body\x20untouched'):h['status']='current':(h['status']='skipped_modified',h['detail']='body\x20differs\x20from\x20canonical;\x20not\x20overwritten\x20by\x20seeding\x20—\x20use\x20repair_builtin_templates\x20(preview→confirm)\x20to\x20reseed');}}catch(l){h['status']='error',h['detail']=l['message'];}a['push'](h);try{a['push'](seedKnobSlot(b,c));}catch(m){a['push']({'template':c['id'],'status':'error','path':e,'detail':m['message']});}}try{a['push'](...seedIndustryNavPages(b));}catch{}return a;}function seedKnobSlot(a,b){const c=knobTemplateFile(a,b),d={'template':b['id'],'status':'knob_written','path':c};if(!existsSync(c))return mkdirSync(dirname(c),{'recursive':!![]}),writeFileSync(c,renderKnobFile(b),'utf-8'),d['detail']='knob\x20file\x20written\x20(fresh)',d;const e=readFileSync(c,'utf-8'),f=classifyKnobFile(e,b['id']);if(f==='current'){const j=stripReleaseSentinel(e,TEMPLATE_KNOBS_SENTINEL_KIND)['content'];if(j!==canonicalKnobContent(b))return writeFileSync(c,renderKnobFile(b),'utf-8'),{...d,'status':'knob_current','detail':'seed-cure\x20resync:\x20unmodified\x20knob\x20release\x20lagged\x20the\x20running\x20seed\x20and\x20was\x20re-rendered\x20(layer\x20consistency\x20—\x20the\x20knob\x20layer\x20must\x20never\x20outrank\x20the\x20seed\x20with\x20stale\x20release\x20content)'};return{...d,'status':'knob_current'};}if(f==='outdated')return writeFileSync(c,renderKnobFile(b),'utf-8'),{...d,'status':'knob_current','detail':'unmodified\x20older\x20knob\x20release\x20auto-upgraded\x20to\x20the\x20current\x20render'};if(f==='user_modified'){const k=stripReleaseSentinel(e,TEMPLATE_KNOBS_SENTINEL_KIND)['content'];return{...d,'status':'knob_kept_user','detail':k!==canonicalKnobContent(b)?'user-edited\x20knobs\x20kept\x20by\x20design\x20(never\x20overwritten);\x20body\x20differs\x20from\x20the\x20running\x20seed\x20render\x20—\x20verify\x20the\x20values\x20are\x20intentional\x20(knob\x20config\x20outranks\x20the\x20seed\x20at\x20runtime)':'user-edited\x20knobs\x20kept\x20by\x20design\x20(never\x20overwritten)'};}let g;try{g=String(parseTemplateFile(e)['frontmatter']['id']??'');}catch{g=undefined;}if(g!==b['id'])return{...d,'status':'skipped_user_file','detail':'a\x20non-knob\x20file\x20(id\x20\x27'+(g??'<unparseable>')+'\x27)\x20occupies\x20the\x20knob\x20slot;\x20machine\x20template\x20wins,\x20file\x20untouched\x20—\x20rename\x20it\x20to\x20free\x20the\x20slot'};const h=join(dirname(c),TEMPLATE_ARCHIVE_SUBDIR);mkdirSync(h,{'recursive':!![]});const i=join(h,b['variant']+'.pre-split.md');return writeFileSync(i,e,'utf-8'),rmSync(c,{'force':!![]}),writeFileSync(c,renderKnobFile(b),'utf-8'),{...d,'status':'knob_written','detail':'obsolete\x20pre-S8\x20single-file\x20template\x20retired\x20to\x20'+i+';\x20knob\x20file\x20re-rendered\x20from\x20the\x20current\x20catalog'};}function seedIndustryNavPages(a){const b=[],c=new Map();for(const d of BUILTIN_TEMPLATES){const e=c['get'](d['industry'])??[];e['push'](d),c['set'](d['industry'],e);}for(const [f,g]of[...c['entries']()]['sort']()){const h=join(a,f,INDUSTRY_NAV_FILENAME),i={'template':'nav/'+f,'status':'written','path':h};try{if(!existsSync(h))mkdirSync(dirname(h),{'recursive':!![]}),writeFileSync(h,renderIndustryNav(f,g),'utf-8');else{const j=classifyIndustryNav(readFileSync(h,'utf-8'));if(j==='current')i['status']='current';else j==='outdated'?(writeFileSync(h,renderIndustryNav(f,g),'utf-8'),i['status']='restamped',i['detail']='unmodified\x20older\x20nav\x20page\x20auto-upgraded'):(i['status']='skipped_modified',i['detail']='nav\x20page\x20user-edited;\x20kept\x20by\x20design');}}catch(k){i['status']='error',i['detail']=k['message'];}b['push'](i);}return b;}export function summarizeTemplateDiff(a,b){let c,d;try{c=parseTemplateFile(a);}catch(g){return'on-disk\x20file\x20is\x20not\x20parseable\x20('+g['message']+');\x20full\x20content\x20will\x20be\x20replaced';}try{d=parseTemplateFile(b);}catch{return'canonical\x20render\x20is\x20not\x20parseable\x20(code\x20defect);\x20full\x20content\x20will\x20be\x20replaced';}const e=[],f=new Set([...Object['keys'](c['frontmatter']),...Object['keys'](d['frontmatter'])]);for(const h of[...f]['sort']()){const i=h in c['frontmatter'],j=h in d['frontmatter'];if(i&&!j)e['push']('-'+h);else{if(!i&&j)e['push']('+'+h);else{if(JSON['stringify'](c['frontmatter'][h])!==JSON['stringify'](d['frontmatter'][h]))e['push']('~'+h);}}}return c['body']!==d['body']&&e['push']('~body\x20('+c['body']['split']('\x0a')['length']+'\x20->\x20'+d['body']['split']('\x0a')['length']+'\x20lines)'),e['length']>0x0?e['join'](',\x20'):'whitespace/ordering\x20only';}export function repairBuiltinTemplates(a){const b=[],c=resolveTemplatesDir(),d=a?.['backup']!==![],e=a?.['dryRun']===!![],f=new Set(a?.['includeUserEdited']??[]);for(const g of BUILTIN_TEMPLATES){const h=machineTemplateFile(c,g);if(!existsSync(h))continue;const i=canonicalTemplateContent(g);let j=null,k='';const l={'template':g['id'],'status':'would_update','path':h};try{const p=stripReleaseSentinel(readFileSync(h,'utf-8'),TEMPLATE_SENTINEL_KIND);j=p['sentinel'],k=p['content'];}catch(q){l['status']='error',l['detail']=q['message'],b['push'](l);continue;}if(k===i)continue;let m;if(j){if(j['version']>BUILTIN_TEMPLATES_VERSION){l['status']='error',l['detail']='newer\x20release\x20on\x20disk\x20(sentinel\x20v'+j['version']+'\x20>\x20running\x20catalog\x20v'+BUILTIN_TEMPLATES_VERSION+')\x20—\x20'+'repair\x20would\x20DOWNGRADE\x20and\x20lose\x20the\x20newer\x20release\x27s\x20content;\x20refused.\x20Upgrade\x20the\x20MCP\x20server\x20instead',b['push'](l);continue;}if(releaseBodyHash(k)!==j['hash']){if(!f['has'](g['id']))continue;m='sentinel-body\x20hash\x20mismatch\x20(sentinel\x20v'+j['version']+'\x20no\x20longer\x20binds\x20the\x20body)\x20'+'reseeded\x20under\x20EXPLICIT\x20include_user_edited\x20authorization';}else m='untouched\x20older\x20release\x20(sentinel\x20v'+j['version']+',\x20current\x20v'+BUILTIN_TEMPLATES_VERSION+')';}else{let r;try{r=String(parseTemplateFile(k)['frontmatter']['id']??'');}catch{continue;}if(r!==g['id'])continue;m='legacy\x20sentinel-less\x20builtin\x20file';}const n=summarizeTemplateDiff(k,i),o=d?';\x20previous\x20body\x20would\x20be\x20saved\x20in\x20templates/.archive/':'';if(e){l['status']='would_update',l['detail']=m+'\x20would\x20be\x20reseeded\x20from\x20BUILTIN_TEMPLATES\x20('+g['id']+')\x20—\x20diff\x20vs\x20canonical:\x20'+n+o+'\x20—\x20execute\x20with\x20authorize=true\x20after\x20the\x20user\x20explicitly\x20confirms',b['push'](l);continue;}try{if(d){const s=archiveBackupFile(c,g,'.repair.md');mkdirSync(dirname(s),{'recursive':!![]}),copyFileSync(h,s);}writeFileSync(h,renderTemplateFile(g),'utf-8'),cache['delete'](h),l['status']='updated',l['detail']=m+'\x20reseeded\x20from\x20BUILTIN_TEMPLATES\x20('+g['id']+')\x20—\x20diff\x20was:\x20'+n+(d?';\x20previous\x20body\x20saved\x20in\x20templates/.archive/':'');}catch(u){l['status']='error',l['detail']=u['message'];}b['push'](l);}return b;}export function builtinTemplateDrift(a){const b=new Set(a?.['includeUserEdited']??[]),c=[],d=resolveTemplatesDir();for(const e of BUILTIN_TEMPLATES){const f=machineTemplateFile(d,e);if(!existsSync(f)){c['push']({'template':e['id'],'path':f,'state':'missing','repairable':!![],'detail':'no\x20file\x20on\x20disk;\x20seeding\x20will\x20create\x20it'});continue;}const g=canonicalTemplateContent(e);let h=null,i='';try{const k=stripReleaseSentinel(readFileSync(f,'utf-8'),TEMPLATE_SENTINEL_KIND);h=k['sentinel'],i=k['content'];}catch(l){c['push']({'template':e['id'],'path':f,'state':'modified','repairable':![],'detail':'unreadable:\x20'+l['message']});continue;}if(i===g)continue;const j=summarizeTemplateDiff(i,g);if(!h){let m;try{m=String(parseTemplateFile(i)['frontmatter']['id']??'');}catch{m=undefined;}m===e['id']?c['push']({'template':e['id'],'path':f,'state':'modified','repairable':!![],'detail':'legacy\x20sentinel-less\x20builtin\x20file\x20—\x20seeding\x20never\x20rewrites\x20it\x20and\x20no\x20sentinel\x20proves\x20provenance;\x20repair\x20can\x20reseed\x20—\x20diff\x20vs\x20canonical:\x20'+j}):c['push']({'template':e['id'],'path':f,'state':'modified','repairable':![],'detail':'no\x20release\x20sentinel\x20and\x20id\x20\x27'+(m??'<unparseable>')+'\x27\x20does\x20not\x20match\x20the\x20builtin\x20id\x20—\x20a\x20user\x20file\x20occupies\x20this\x20path;\x20never\x20touched\x20(rename\x20it\x20to\x20free\x20the\x20slot)'});continue;}if(releaseBodyHash(i)===h['hash'])h['version']>BUILTIN_TEMPLATES_VERSION?c['push']({'template':e['id'],'path':f,'state':'modified','repairable':![],'detail':'newer\x20release\x20(sentinel\x20v'+h['version']+'\x20>\x20running\x20catalog\x20v'+BUILTIN_TEMPLATES_VERSION+')\x20—\x20'+'repair\x20would\x20DOWNGRADE\x20and\x20lose\x20the\x20newer\x20release\x27s\x20content;\x20repairable:\x20false.\x20'+'Upgrade\x20the\x20MCP\x20server\x20to\x20match\x20—\x20diff\x20vs\x20canonical:\x20'+j}):c['push']({'template':e['id'],'path':f,'state':'modified','repairable':!![],'detail':'untouched\x20older\x20release\x20(sentinel\x20v'+h['version']+',\x20current\x20v'+BUILTIN_TEMPLATES_VERSION+')\x20—\x20repair\x20can\x20upgrade\x20—\x20diff\x20vs\x20canonical:\x20'+j});else{const n=b['has'](e['id']);c['push']({'template':e['id'],'path':f,'state':'modified','repairable':n,'detail':n?'sentinel-body\x20hash\x20mismatch\x20(sentinel\x20v'+h['version']+'\x20no\x20longer\x20binds\x20the\x20body)\x20—\x20reseedable\x20under\x20the\x20explicit\x20include_user_edited\x20authorization\x20for\x20this\x20id\x20—\x20diff\x20vs\x20canonical:\x20'+j:'user-edited\x20body\x20—\x20kept\x20by\x20design;\x20repair\x20never\x20overwrites\x20user\x20edits\x20—\x20diff\x20vs\x20canonical:\x20'+j});}}for(const o of c){const p=BUILTIN_TEMPLATES['find'](q=>q['id']===o['template']);if(p)o['knob_state']=knobFileState(d,p);}return c;}function knobFileState(a,b){const c=knobTemplateFile(a,b);if(!existsSync(c))return'missing';try{return classifyKnobFile(readFileSync(c,'utf-8'),b['id'])==='user_modified'?'user_modified':'current';}catch{return'current';}}export function templateTruthStamps(a){const b=resolveTemplatesDir(),c=BUILTIN_TEMPLATES['find'](n=>n['id']===a);if(!c){const n=getTemplate(a),o=n?.['source_path'];if(!o||!existsSync(o))return{'template':a,'source':'user','content_sha256':'','machine_layer':null,'knob_layer':null,'consistency':'user_template'};const {content:q}=stripReleaseSentinel(readFileSync(o,'utf-8'),TEMPLATE_SENTINEL_KIND);return{'template':a,'source':'user','content_sha256':releaseBodyHash(q),'machine_layer':null,'knob_layer':null,'consistency':'user_template'};}const d=machineTemplateFile(b,c);let e='',f=null;if(existsSync(d)){const r=stripReleaseSentinel(readFileSync(d,'utf-8'),TEMPLATE_SENTINEL_KIND);f=r['sentinel'],e=r['content'];}const g=canonicalTemplateContent(c),h=f!==null&&releaseBodyHash(e)===f['hash'],i=e===g,j=i?undefined:summarizeTemplateDiff(e,g),k=knobTemplateFile(b,c);let l;if(!existsSync(k))l={'path':k,'state':'missing','override_keys':[]};else{const s=readFileSync(k,'utf-8'),t=classifyKnobFile(s,c['id']),u=t!==null?parseKnobFile(stripReleaseSentinel(s,TEMPLATE_KNOBS_SENTINEL_KIND)['content'],c['id']):null,v=u?[...u['fee_params']!==undefined?Object['keys'](u['fee_params'])['map'](w=>'fee_params.'+w):[],...Object['keys'](u)['filter'](w=>w!=='id'&&w!=='fee_params')]:[];l={'path':k,'state':t??'invalid','override_keys':v};}const m=!i||f!==null&&!h;return{'template':a,'source':'builtin','schema_version':BUILTIN_TEMPLATES_VERSION,'content_sha256':releaseBodyHash(e),'machine_layer':{'path':d,'sentinel':f,'sentinel_binds_body':h,'matches_catalog':i},'knob_layer':l,'consistency':m?'drifted':'verified',...m&&j!==undefined?{'differences':j}:{}};}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(h){throw new Error('template\x20\x27'+a+'\x27\x20failed\x20to\x20parse:\x20'+h['message']);}const d=TemplateFrontmatterSchema['safeParse'](c['frontmatter']);if(!d['success']){const i=d['error']['issues']['map'](j=>(j['path']['join']('.')||'<root>')+':\x20'+j['message'])['join'](';\x20');throw new Error('template\x20\x27'+a+'\x27\x20failed\x20validation:\x20'+i);}const e=validateAllocatorRows(d['data']);if(e['length']>0x0)throw new Error('template\x20\x27'+a+'\x27\x20failed\x20allocator-row\x20validation:\x20'+e['join'](';\x20'));const f=userInputSpecIssues(d['data']);if(f['length']>0x0)throw new Error('template\x20\x27'+a+'\x27\x20failed\x20user_input_specs\x20validation:\x20'+f['join'](';\x20'));const g=validateRuleDeclarations(d['data']);if(g['length']>0x0)throw new Error('template\x20\x27'+a+'\x27\x20failed\x20rule-declaration\x20validation:\x20'+g['join'](';\x20'));return{...d['data'],'body':c['body'],'source_path':a};}function templateFilesOnDisk(a){const b=[];if(!existsSync(a))return b;const c=new Set(BUILTIN_TEMPLATES['map'](d=>d['industry']+'/'+d['variant']));for(const d of readdirSync(a,{'withFileTypes':!![]})){if(!d['isDirectory']())continue;const e=join(a,d['name'],TEMPLATES_SUBDIR);if(!existsSync(e))continue;const g=join(e,MACHINE_TEMPLATES_SUBDIR);if(existsSync(g))for(const h of readdirSync(g,{'withFileTypes':!![]})){if(!h['isFile']()||!h['name']['endsWith']('.md'))continue;const i=h['name']['slice'](0x0,-'.md'['length']),j=c['has'](d['name']+'/'+i)?join(e,h['name']):null;b['push']({'file':join(g,h['name']),'id':d['name']+'/'+i,'knobFile':j});}for(const k of readdirSync(e,{'withFileTypes':!![]})){if(!k['isFile']()||!k['name']['endsWith']('.md'))continue;const l=k['name']['slice'](0x0,-'.md'['length']);if(c['has'](d['name']+'/'+l))continue;b['push']({'file':join(e,k['name']),'id':d['name']+'/'+l,'knobFile':null});}}return b['sort']((m,n)=>m['file']['localeCompare'](n['file']));}export function listTemplates(){!seeded&&(seedBuiltinTemplates(),seeded=!![]);const a=resolveTemplatesDir(),b=[],c=[],d=new Map(),e=new Set();for(const {file:f,id:g,knobFile:h}of templateFilesOnDisk(a)){e['add'](f);try{const i=statSync(f)['mtimeMs'],j=h&&existsSync(h)?statSync(h)['mtimeMs']:0x0,k=cache['get'](f);if(k&&k['mtimeMs']===i&&k['knobMtimeMs']===j){b['push'](k['template']);continue;}let l=loadAndValidate(f);if(h&&j>0x0){const m=readFileSync(h,'utf-8'),n=parseKnobFile(m,l['id']);if(n){l=applyKnobOverlay(l,n,parseTemplateFile(m)['body']);const o=validateAllocatorRows(l);if(o['length']>0x0)throw new Error('template\x20\x27'+f+'\x27\x20—\x20knob\x20overlay\x20\x27'+h+'\x27\x20broke\x20allocator-row\x20validation:\x20'+o['join'](';\x20'));}else c['push']('knob\x20file\x20\x27'+h+'\x27\x20is\x20not\x20a\x20valid\x20knob\x20overlay\x20for\x20\x27'+l['id']+'\x27\x20—\x20ignored,\x20machine\x20template\x20used\x20as-is');}cache['set'](f,{'mtimeMs':i,'knobMtimeMs':j,'template':l}),b['push'](l);}catch(p){cache['delete'](f),c['push'](p['message']),d['set'](g,p['message']);}}for(const q of[...cache['keys']()]){if(!e['has'](q))cache['delete'](q);}return b['sort']((r,s)=>r['id']['localeCompare'](s['id'])),loadErrorsById=d,{'templates':b,'errors':c};}let loadErrorsById=new Map();export function getTemplateLoadError(a){return listTemplates(),loadErrorsById['get'](a);}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{copyFileSync,existsSync,mkdirSync,readdirSync,readFileSync,rmSync,statSync,writeFileSync}from'node:fs';import{dirname,join,relative,sep}from'node:path';import{z}from'zod';import{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{knobDocLines}from'./knob-docs.js';import{MachineProseEnvelopeSchema}from'./template-prose.js';import{INDUSTRY_NAV_FILENAME,classifyIndustryNav,renderIndustryNav,wrapBullet,wrapParagraph}from'./template-nav.js';import{classifyRelease,releaseBodyHash,releaseSentinelLine,stripReleaseSentinel}from'./release-sentinel.js';export const TEMPLATES_SUBDIR='templates';export const MACHINE_TEMPLATES_SUBDIR='.machine';export const TEMPLATE_ARCHIVE_SUBDIR='.archive';export function resolveTemplatesDir(){return process['env']['WOWOK_TEMPLATES_DIR']||getWowokIndustryDir();}const MachineEdgeSchema=z['object']({'prev':z['string'](),'forward':z['string']()['min'](0x1)['optional'](),'operator':z['enum'](['merchant','order_payer'])['optional'](),'named_operator':z['string']()['min'](0x1)['optional'](),'permission_index':z['number']()['int']()['min'](0x3e8)['optional'](),'guard_key':z['string']()['min'](0x1)['optional']()}),MachineNodeSchema=z['object']({'name':z['string']()['min'](0x1),'role':z['string']()['min'](0x1),'operator':z['enum'](['merchant','order_payer'])['optional'](),'named_operator':z['string']()['min'](0x1)['optional'](),'semantic_role':z['enum'](['draft','active','delivered','final','cancelled'])['optional'](),'optional':z['boolean']()['optional'](),'threshold':z['number']()['int']()['min'](0x0)['optional'](),'from':z['array'](z['union']([z['string'](),MachineEdgeSchema]))['optional'](),'segment':z['object']({'id':z['string']()['min'](0x1),'count_from':z['string']()['min'](0x1)})['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),'key':z['string']()['min'](0x1),'policy':z['object']({'name':z['string']()['min'](0x1)['optional'](),'description':z['string']()['min'](0x1)['optional'](),'id_from':z['string']()['min'](0x1)['optional'](),'value_type':z['string']()['min'](0x1)['optional'](),'write_once':z['boolean']()['optional'](),'id_from_submission':z['number']()['int']()['optional'](),'data_from_submission':z['number']()['int']()['optional']()})['optional'](),'params':z['record'](z['string'](),z['unknown']())['optional'](),'identity_leg_exempt':z['string']()['min'](0x1)['optional'](),'node_set_segments':z['array'](z['string']()['min'](0x1))['optional'](),'node_set_nodes':z['array'](z['string']()['min'](0x1))['optional']()}),ConditionalGuardEmissionSchema=z['object']({'guard_key':z['string']()['min'](0x1),'param':z['string']()['min'](0x1),'values':z['array'](z['string']()['min'](0x1))['min'](0x2),'emit_value':z['string']()['min'](0x1),'question':z['string']()['min'](0x1)})['strict'](),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','formula']),'value':z['union']([z['string'](),z['number']()])['optional'](),'value_from':z['string']()['optional'](),'value_from_complement':z['string']()['min'](0x1)['optional'](),'repeat_from':z['string']()['min'](0x1)['optional'](),'fix':z['union']([z['string'](),z['number']()])['optional'](),'fix_from':z['string']()['optional'](),'guard_key':z['string']()['min'](0x1)['optional'](),'formula':z['object']({'selector':z['number']()['int']()['min'](0x0)['max'](0x2),'repo':z['string']()['min'](0x1)['optional'](),'key':z['string']()['min'](0x1)['optional'](),'predicate':z['unknown']()['optional'](),'ids':z['array'](z['unknown']())['optional']()})['strict']()['optional'](),'note':z['string']()['optional']()})['strict'](),AllocatorSchema=z['object']({'recipient':z['enum'](['signer','entity','fixed']),'recipient_key':z['string']()['min'](0x1)['optional'](),'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'](),UserInputSpecSchema=z['object']({'question':z['string']()['min'](0x1),'param_key':z['string']()['min'](0x1),'note':z['string']()['min'](0x1)['optional']()})['strict'](),RuleDeclarationSchema=z['object']({'id':z['string']()['regex'](/^[a-z0-9-]+$/,'id\x20must\x20be\x20a\x20lowercase\x20slug'),'rule':z['string']()['min'](0xf,'rule\x20text\x20must\x20be\x20a\x20full\x20sentence\x20(15-char\x20floor)'),'binding':z['object']({'kind':z['enum'](['machine_node','machine_edge','guard','allocator_row','fee_param','keeper_duty','time_anchor','conditional_guard','off_chain']),'ref':z['string']()['min'](0x1)})['strict']()['optional'](),'status':z['enum'](['expressible','unexpressible'])['optional'](),'unexpressible_ref':z['string']()['regex'](/^U-\d+[ab]?$/,'unexpressible_ref\x20must\x20look\x20like\x20U-13\x20/\x20U-19b')['optional'](),'note':z['string']()['min'](0x1)['optional']()})['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']()),'keeper_duty':z['array'](z['object']({'when':z['string']()['min'](0x1),'action':z['string']()['min'](0x1),'miss_consequence':z['string']()['min'](0x1),'duty_kind':z['string']()['min'](0x1)['optional'](),'detector':z['enum'](['payment_unclaimed','progress_actionable','settlement_pending','timeout_intermediate'])['optional'](),'anchor':z['string']()['min'](0x1)['optional'](),'window_param':z['string']()['min'](0x1)['optional']()})['strict']())['optional'](),'recommended_role':z['enum'](['merchant','supplier','both']),'role_rationale':z['string']()['min'](0x1),'differences':z['array'](z['string']()),'user_inputs':z['array'](z['string']()),'user_input_specs':z['array'](UserInputSpecSchema)['optional'](),'key_risk':z['string']()['min'](0x1)['max'](0x12c,'key_risk\x20must\x20be\x20a\x20one-line\x20risk\x20statement\x20(<=\x20300\x20chars)\x20—\x20rules\x20and\x20doctrine\x20do\x20not\x20belong\x20in\x20this\x20field')['refine'](a=>!/STANDING RULE|TECHNOLOGY PROVIDER|NOT A PARTY TO THE DEAL|Full text:/i['test'](a),{'message':'key_risk\x20carries\x20an\x20instruction-block\x20fragment\x20(STANDING\x20RULE\x20/\x20provider\x20doctrine\x20/\x20\x27Full\x20text:\x27\x20reference)\x20—\x20keep\x20doctrine\x20in\x20body\x20prose\x20or\x20playbooks,\x20not\x20in\x20this\x20field'}),'build_notes':z['array'](z['string']()),'prose_language':z['enum'](['en','other'])['optional'](),'machine_prose':z['record'](z['string'](),MachineProseEnvelopeSchema)['optional'](),'evidence_refs':z['array'](z['string']())['optional'](),'conditional_guards':z['array'](ConditionalGuardEmissionSchema)['optional'](),'time_anchors':z['record'](z['string'](),z['string']())['optional'](),'payment_model':z['enum'](['milestone','subscription','escrow'])['optional'](),'arbitration_mode':z['enum'](['none','merchant_pick','mutual_pick','third_party'])['optional'](),'reward_claim_policy':z['object']({'kind':z['enum'](['once','periodic','capped']),'min_claim_interval_ms':z['number']()['optional'](),'max_total_per_recipient':z['string']()['optional']()})['optional'](),'review_mode':z['enum'](['none','review','review_reward'])['optional'](),'experience_compensation_mode':z['enum'](['none','reward'])['optional'](),'price_rebate_mode':z['enum'](['none','reward'])['optional'](),'after_sales_mode':z['enum'](['none','return','exchange','warranty'])['optional'](),'acceptance_mode':z['enum'](['none','milestone','contest','bounty','agent'])['optional'](),'installment_mode':z['enum'](['none','deposit_balance','milestone_n'])['optional'](),'affiliate_mode':z['enum'](['none','commission'])['optional'](),'crowdfunding_mode':z['enum'](['none','threshold','flexible'])['optional'](),'logistics_mode':z['enum'](['none','carrier','merchant_managed','courier','pickup_point'])['optional'](),'compensation_fund_policy':z['enum'](['allowed','forbidden'])['optional'](),'reentry_kind':z['enum'](['none','review-loop','paid-cycle'])['optional'](),'settlement_window_merge':z['array'](z['string']())['optional'](),'supply_rules':z['array'](RuleDeclarationSchema)['optional'](),'labor_rules':z['array'](RuleDeclarationSchema)['optional'](),'incentive_rules':z['array'](RuleDeclarationSchema)['optional'](),'ops_kpis':z['array'](RuleDeclarationSchema)['optional']()})['strict']();export function userInputSpecIssues(a){if(a['user_input_specs']===undefined)return[];const b=[],c=new Set();for(const [d,e]of a['user_input_specs']['entries']()){!(e['param_key']in a['fee_params'])&&b['push']('user_input_specs['+d+'].param_key\x20\x27'+e['param_key']+'\x27\x20is\x20not\x20a\x20declared\x20fee_param\x20—\x20declare\x20it\x20in\x20fee_params\x20(the\x20question\x20fills\x20it)\x20or\x20fix\x20the\x20key'),c['has'](e['param_key'])&&b['push']('user_input_specs['+d+']\x20asks\x20about\x20\x27'+e['param_key']+'\x27\x20twice\x20—\x20one\x20question\x20per\x20parameter'),c['add'](e['param_key']);}return b;}import{validateAllocatorRows}from'./template-validation.js';import{validateRuleDeclarations}from'./rule-declarations.js';export{validateAllocatorRows};export function platformShareBps(a){const b=Object['keys'](a)['find'](c=>/(?:platform|commission|service_fee)[a-z_]*_bps$/['test'](c)&&!/^attributed_/['test'](c)&&!/_cap_bps$/['test'](c)&&typeof a[c]==='number');return b!==undefined?a[b]:undefined;}export const PLATFORM_TAKE_KEY=/^(?:platform_(?:share|commission|take|tool_fee)_bps|platform_fee_rate_bps|commission_rate_bps|(?:base_)?commission_rate_bps|offsite_ads_rate_bps|service_fee_rate_bps|payment_fee_bps)$/;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{if(/^-?\d+(\.\d+)?$/['test'](l))e[k]=Number(l);else{if(l['startsWith']('\x22')&&l['endsWith']('\x22')&&l['length']>=0x2||l['startsWith']('\x27')&&l['endsWith']('\x27')&&l['length']>=0x2){if(l[0x0]==='\x22')try{e[k]=JSON['parse'](l);}catch(n){throw new Error('frontmatter\x20key\x20\x27'+k+'\x27\x20is\x20not\x20valid\x20JSON:\x20'+n['message']);}else e[k]=l['slice'](0x1,-0x1);}else 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';export function canonicalTemplateContent(a){const b=a,c=[['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']],...a['keeper_duty']?[['keeper_duty',a['keeper_duty']]]:[],['differences',a['differences']],['user_inputs',a['user_inputs']],...a['user_input_specs']?[['user_input_specs',a['user_input_specs']]]:[],['build_notes',a['build_notes']],...b['prose_language']?[['prose_language',b['prose_language']]]:[],...b['machine_prose']?[['machine_prose',b['machine_prose']]]:[],...a['evidence_refs']?[['evidence_refs',a['evidence_refs']]]:[],...a['conditional_guards']?[['conditional_guards',a['conditional_guards']]]:[],...a['time_anchors']?[['time_anchors',a['time_anchors']]]:[],...a['payment_model']?[['payment_model',a['payment_model']]]:[],...a['arbitration_mode']?[['arbitration_mode',a['arbitration_mode']]]:[],...a['review_mode']?[['review_mode',a['review_mode']]]:[],...a['experience_compensation_mode']?[['experience_compensation_mode',a['experience_compensation_mode']]]:[],...a['price_rebate_mode']?[['price_rebate_mode',a['price_rebate_mode']]]:[],...a['after_sales_mode']?[['after_sales_mode',a['after_sales_mode']]]:[],...a['acceptance_mode']?[['acceptance_mode',a['acceptance_mode']]]:[],...a['installment_mode']?[['installment_mode',a['installment_mode']]]:[],...a['affiliate_mode']?[['affiliate_mode',a['affiliate_mode']]]:[],...a['crowdfunding_mode']?[['crowdfunding_mode',a['crowdfunding_mode']]]:[],...a['logistics_mode']?[['logistics_mode',a['logistics_mode']]]:[],...a['reward_claim_policy']?[['reward_claim_policy',a['reward_claim_policy']]]:[],...a['compensation_fund_policy']?[['compensation_fund_policy',a['compensation_fund_policy']]]:[],...a['reentry_kind']&&a['reentry_kind']!=='none'?[['reentry_kind',a['reentry_kind']]]:[],...a['settlement_window_merge']?[['settlement_window_merge',a['settlement_window_merge']]]:[],...a['supply_rules']?[['supply_rules',a['supply_rules']]]:[],...a['labor_rules']?[['labor_rules',a['labor_rules']]]:[],...a['incentive_rules']?[['incentive_rules',a['incentive_rules']]]:[],...a['ops_kpis']?[['ops_kpis',a['ops_kpis']]]:[]],d=['---',...c['map'](([f,g])=>frontmatterLine(f,g)),'---'],e=['','#\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'](f=>'-\x20'+f),'','##\x20Build-time\x20inputs\x20&\x20standing\x20constraints\x20(non-parameter)','',...a['user_inputs']['map'](f=>'-\x20'+f),...a['user_input_specs']&&a['user_input_specs']['length']>0x0?['','##\x20Structured\x20business\x20questions\x20(answer\x20rides\x20fee_overrides)','',...a['user_input_specs']['map'](f=>'-\x20\x22'+f['question']+'\x22\x20→\x20fee_overrides.'+f['param_key']+(f['note']?'\x20—\x20'+f['note']:''))]:[],'','##\x20Risk-avoidance\x20checklist\x20(R1-R10)','',...a['trust_mechanisms']['map'](f=>'-\x20'+f),'','##\x20Build\x20notes','',...a['build_notes']['map'](f=>'-\x20'+f),''];return[...d,...e]['join']('\x0a');}export function renderTemplateFile(a){const b=canonicalTemplateContent(a);return releaseSentinelLine(TEMPLATE_SENTINEL_KIND,BUILTIN_TEMPLATES_VERSION,releaseBodyHash(b))+'\x0a'+b;}export function templateCatalogDigest(a){const b=BUILTIN_TEMPLATES['find'](c=>c['id']===a);if(!b)return undefined;return releaseBodyHash(canonicalTemplateContent(b));}export const TEMPLATE_KNOBS_SENTINEL_KIND='template-knobs';export const TEMPLATE_KNOBS_VERSION=0x5;export const TemplateKnobOverlaySchema=TemplateFrontmatterSchema['pick']({'fee_params':!![],'key_risk':!![],'recommended_role':!![],'role_rationale':!![],'differences':!![],'user_inputs':!![],'payment_model':!![],'arbitration_mode':!![],'review_mode':!![],'experience_compensation_mode':!![],'price_rebate_mode':!![],'after_sales_mode':!![],'acceptance_mode':!![],'installment_mode':!![],'affiliate_mode':!![],'crowdfunding_mode':!![],'logistics_mode':!![],'reward_claim_policy':!![],'reentry_kind':!![],'compensation_fund_policy':!![]})['partial']()['extend']({'id':z['string']()['regex'](/^[a-z][a-z0-9._-]*\/[a-z][a-z0-9._-]*$/,'knob\x20file\x20id\x20must\x20be\x20\x27<industry>/<variant>\x27')})['strict']();export function foldKnobFrontmatter(a){const b={},c={};for(const [d,e]of Object['entries'](a)){d['startsWith']('fee_params.')?c[d['slice']('fee_params.'['length'])]=e:b[d]=e;}if(Object['keys'](c)['length']>0x0)b['fee_params']=c;return b;}export function parseKnobFile(a,b){const c=stripReleaseSentinel(a,TEMPLATE_KNOBS_SENTINEL_KIND);let d;try{const f=parseTemplateFile(c['sentinel']?c['content']:a);d=f['frontmatter'];}catch{return null;}const e=TemplateKnobOverlaySchema['safeParse'](foldKnobFrontmatter(d));if(!e['success']||e['data']['id']!==b)return null;return e['data'];}function knobLine(a,b){if(typeof b==='number')return a+':\x20'+b;if(typeof b==='string')return/^-?\d+(\.\d+)?$/['test'](b)?a+':\x20\x27'+b+'\x27':a+':\x20'+b;return a+':\x20'+JSON['stringify'](b);}export function canonicalKnobContent(a){const b=['id:\x20'+a['id'],knobLine('key_risk',a['key_risk']),knobLine('recommended_role',a['recommended_role']),knobLine('role_rationale',a['role_rationale']),...Object['keys'](a['fee_params'])['sort']()['flatMap'](d=>[...knobDocLines(d),knobLine('fee_params.'+d,a['fee_params'][d])]),...a['payment_model']!==undefined?[knobLine('payment_model',a['payment_model'])]:[],...a['arbitration_mode']!==undefined?[knobLine('arbitration_mode',a['arbitration_mode'])]:[],...a['review_mode']!==undefined?[knobLine('review_mode',a['review_mode'])]:[],...a['experience_compensation_mode']!==undefined?[knobLine('experience_compensation_mode',a['experience_compensation_mode'])]:[],...a['after_sales_mode']!==undefined?[knobLine('after_sales_mode',a['after_sales_mode'])]:[],...a['acceptance_mode']!==undefined?[knobLine('acceptance_mode',a['acceptance_mode'])]:[],...a['installment_mode']!==undefined?[knobLine('installment_mode',a['installment_mode'])]:[],...a['affiliate_mode']!==undefined?[knobLine('affiliate_mode',a['affiliate_mode'])]:[],...a['crowdfunding_mode']!==undefined?[knobLine('crowdfunding_mode',a['crowdfunding_mode'])]:[],...a['logistics_mode']!==undefined?[knobLine('logistics_mode',a['logistics_mode'])]:[],...a['reward_claim_policy']!==undefined?[knobLine('reward_claim_policy',a['reward_claim_policy'])]:[],...a['reentry_kind']!==undefined&&a['reentry_kind']!=='none'?[knobLine('reentry_kind',a['reentry_kind'])]:[],...a['compensation_fund_policy']!==undefined?[knobLine('compensation_fund_policy',a['compensation_fund_policy'])]:[],knobLine('differences',a['differences']),knobLine('user_inputs',a['user_inputs'])],c=['','#\x20'+a['industry']+'\x20/\x20'+a['variant']+'\x20('+a['archetype']+')\x20—\x20business\x20knobs','','>\x20THIS\x20file\x20is\x20the\x20one\x20you\x20edit.\x20Each\x20line\x20above\x20the\x20body\x20is\x20a\x20knob\x20the','>\x20build\x20honors:\x20`fee_params.<name>`\x20(numbers\x20—\x20pricing\x20windows,\x20caps,','>\x20pools),\x20the\x20mode\x20switches\x20(review/arbitration/logistics/...),\x20and\x20the','>\x20guidance\x20prose\x20below.\x20Lines\x20starting\x20with\x20`#`\x20are\x20read-only\x20docs\x20for','>\x20the\x20knob\x20line\x20below\x20them\x20—\x20edit\x20the\x20value\x20line,\x20never\x20the\x20`#`\x20lines','>\x20(docs\x20refresh\x20with\x20each\x20release).\x20The\x20workflow\x20structure\x20itself','>\x20(nodes,\x20guards,\x20fund\x20rails)\x20is\x20system-managed\x20in\x20a\x20hidden\x20`.machine/`','>\x20file\x20next\x20to\x20this\x20one\x20and\x20is\x20deliberately\x20not\x20exposed\x20—\x20change','>\x20business\x20intent\x20through\x20these\x20knobs\x20or\x20through\x20the\x20migration\x20wizard,','>\x20never\x20by\x20editing\x20node\x20graphs\x20by\x20hand.','','##\x20Key\x20risk','',...wrapParagraph(a['key_risk']),'','##\x20Differences\x20vs\x20the\x20sibling\x20variant','',...a['differences']['flatMap'](e=>wrapBullet(e)),'','##\x20Build-time\x20inputs\x20&\x20standing\x20constraints\x20(non-parameter)','',...a['user_inputs']['flatMap'](d=>wrapBullet(d)),'','##\x20Your\x20notes\x20(free-form\x20—\x20the\x20AI\x20reads\x20this\x20body\x20as\x20guidance)','','-\x20(Add\x20your\x20own\x20pricing,\x20tone,\x20or\x20policy\x20notes\x20below\x20—\x20they\x20override\x20the','\x20\x20generic\x20guidance\x20the\x20same\x20way\x20playbook.md\x20does.)',''];return['---',...b,'---',...c]['join']('\x0a');}export function renderKnobFile(a){const b=canonicalKnobContent(a);return releaseSentinelLine(TEMPLATE_KNOBS_SENTINEL_KIND,TEMPLATE_KNOBS_VERSION,releaseBodyHash(b))+'\x0a'+b;}export function classifyKnobFile(a,b){const c=stripReleaseSentinel(a,TEMPLATE_KNOBS_SENTINEL_KIND);if(!c['sentinel'])return null;if(parseKnobFile(c['content'],b)===null)return null;const d=classifyRelease(c['sentinel'],c['content'],TEMPLATE_KNOBS_VERSION);return d==='user_file'?null:d;}export function applyKnobOverlay(a,b,c){const d=b['fee_params']!==undefined?Object['keys'](b['fee_params'])['filter'](e=>!(e in a['fee_params'])):[];if(d['length']>0x0)throw new Error('template\x20\x27'+a['id']+'\x27\x20—\x20knob\x20overlay\x20declares\x20fee_params\x20key(s)\x20unknown\x20to\x20the\x20machine\x20layer:\x20'+d['join'](',\x20')+'.\x20'+'Knobs\x20are\x20a\x20pure\x20override\x20surface\x20(D2/F-03\x20single\x20source\x20of\x20truth):\x20a\x20key\x20the\x20.machine\x20template\x20does\x20not\x20declare\x20'+'cannot\x20land\x20and\x20would\x20silently\x20fork\x20the\x20template\x20into\x20two\x20truths.\x20Declare\x20it\x20in\x20the\x20machine\x20template\x20instead.');return{...a,...b['fee_params']!==undefined?{'fee_params':{...a['fee_params'],...b['fee_params']}}:{},...b['key_risk']!==undefined?{'key_risk':b['key_risk']}:{},...b['recommended_role']!==undefined?{'recommended_role':b['recommended_role']}:{},...b['role_rationale']!==undefined?{'role_rationale':b['role_rationale']}:{},...b['differences']!==undefined?{'differences':b['differences']}:{},...b['user_inputs']!==undefined?{'user_inputs':b['user_inputs']}:{},...b['payment_model']!==undefined?{'payment_model':b['payment_model']}:{},...b['arbitration_mode']!==undefined?{'arbitration_mode':b['arbitration_mode']}:{},...b['review_mode']!==undefined?{'review_mode':b['review_mode']}:{},...b['experience_compensation_mode']!==undefined?{'experience_compensation_mode':b['experience_compensation_mode']}:{},...b['after_sales_mode']!==undefined?{'after_sales_mode':b['after_sales_mode']}:{},...b['acceptance_mode']!==undefined?{'acceptance_mode':b['acceptance_mode']}:{},...b['installment_mode']!==undefined?{'installment_mode':b['installment_mode']}:{},...b['affiliate_mode']!==undefined?{'affiliate_mode':b['affiliate_mode']}:{},...b['crowdfunding_mode']!==undefined?{'crowdfunding_mode':b['crowdfunding_mode']}:{},...b['logistics_mode']!==undefined?{'logistics_mode':b['logistics_mode']}:{},...b['reward_claim_policy']!==undefined?{'reward_claim_policy':b['reward_claim_policy']}:{},...b['reentry_kind']!==undefined?{'reentry_kind':b['reentry_kind']}:{},...b['compensation_fund_policy']!==undefined?{'compensation_fund_policy':b['compensation_fund_policy']}:{},'body':c};}function machineTemplateFile(a,b){return join(a,b['industry'],TEMPLATES_SUBDIR,MACHINE_TEMPLATES_SUBDIR,b['variant']+'.md');}function knobTemplateFile(a,b){return join(a,b['industry'],TEMPLATES_SUBDIR,b['variant']+'.md');}function archiveBackupFile(a,b,c){return join(a,b['industry'],TEMPLATES_SUBDIR,TEMPLATE_ARCHIVE_SUBDIR,''+b['variant']+c);}export function matchBuiltinTemplateSlot(a){const b=relative(resolveTemplatesDir(),a);if(!b||b['startsWith']('..'))return null;const c=b['split'](sep);if(c['length']===0x4&&c[0x1]===TEMPLATES_SUBDIR&&c[0x2]===MACHINE_TEMPLATES_SUBDIR&&c[0x3]['endsWith']('.md')){const d=c[0x3]['slice'](0x0,-'.md'['length']),e=BUILTIN_TEMPLATES['find'](f=>f['industry']===c[0x0]&&f['variant']===d)??null;return e?{'template':e,'part':'machine'}:null;}if(c['length']===0x3&&c[0x1]===TEMPLATES_SUBDIR&&c[0x2]['endsWith']('.md')){const f=c[0x2]['slice'](0x0,-'.md'['length']),g=BUILTIN_TEMPLATES['find'](h=>h['industry']===c[0x0]&&h['variant']===f)??null;return g?{'template':g,'part':'knobs'}:null;}return null;}let seeded=![];export function seedBuiltinTemplates(){const a=[],b=resolveTemplatesDir();for(const c of BUILTIN_TEMPLATES){const d=machineTemplateFile(b,c),e=knobTemplateFile(b,c),f=dirname(d),g=canonicalTemplateContent(c),h={'template':c['id'],'status':'written','path':d};try{if(!existsSync(d))mkdirSync(f,{'recursive':!![]}),writeFileSync(d,renderTemplateFile(c),'utf-8');else{const i=readFileSync(d,'utf-8'),{sentinel:j,content:k}=stripReleaseSentinel(i,TEMPLATE_SENTINEL_KIND);!j?k===g?(writeFileSync(d,renderTemplateFile(c),'utf-8'),h['status']='restamped',h['detail']='body\x20matches\x20canonical\x20but\x20no\x20sentinel\x20present;\x20sentinel\x20header\x20added,\x20body\x20untouched'):(h['status']='skipped_user_file',h['detail']='machine\x20file\x20exists\x20without\x20builtin\x20sentinel\x20and\x20body\x20differs\x20from\x20canonical;\x20leaving\x20user\x20file\x20untouched'):k===g?j['version']!==BUILTIN_TEMPLATES_VERSION||releaseBodyHash(k)!==j['hash']?(writeFileSync(d,renderTemplateFile(c),'utf-8'),h['status']='restamped',h['detail']='body\x20matches\x20canonical\x20but\x20sentinel\x20stale/wrong;\x20header\x20refreshed,\x20body\x20untouched'):h['status']='current':(h['status']='skipped_modified',h['detail']='body\x20differs\x20from\x20canonical;\x20not\x20overwritten\x20by\x20seeding\x20—\x20use\x20repair_builtin_templates\x20(preview→confirm)\x20to\x20reseed');}}catch(l){h['status']='error',h['detail']=l['message'];}a['push'](h);try{a['push'](seedKnobSlot(b,c));}catch(m){a['push']({'template':c['id'],'status':'error','path':e,'detail':m['message']});}}try{a['push'](...seedIndustryNavPages(b));}catch{}return a;}function seedKnobSlot(a,b){const c=knobTemplateFile(a,b),d={'template':b['id'],'status':'knob_written','path':c};if(!existsSync(c))return mkdirSync(dirname(c),{'recursive':!![]}),writeFileSync(c,renderKnobFile(b),'utf-8'),d['detail']='knob\x20file\x20written\x20(fresh)',d;const e=readFileSync(c,'utf-8'),f=classifyKnobFile(e,b['id']);if(f==='current'){const j=stripReleaseSentinel(e,TEMPLATE_KNOBS_SENTINEL_KIND)['content'];if(j!==canonicalKnobContent(b))return writeFileSync(c,renderKnobFile(b),'utf-8'),{...d,'status':'knob_current','detail':'seed-cure\x20resync:\x20unmodified\x20knob\x20release\x20lagged\x20the\x20running\x20seed\x20and\x20was\x20re-rendered\x20(layer\x20consistency\x20—\x20the\x20knob\x20layer\x20must\x20never\x20outrank\x20the\x20seed\x20with\x20stale\x20release\x20content)'};return{...d,'status':'knob_current'};}if(f==='outdated')return writeFileSync(c,renderKnobFile(b),'utf-8'),{...d,'status':'knob_current','detail':'unmodified\x20older\x20knob\x20release\x20auto-upgraded\x20to\x20the\x20current\x20render'};if(f==='user_modified'){const k=stripReleaseSentinel(e,TEMPLATE_KNOBS_SENTINEL_KIND)['content'];return{...d,'status':'knob_kept_user','detail':k!==canonicalKnobContent(b)?'user-edited\x20knobs\x20kept\x20by\x20design\x20(never\x20overwritten);\x20body\x20differs\x20from\x20the\x20running\x20seed\x20render\x20—\x20verify\x20the\x20values\x20are\x20intentional\x20(knob\x20config\x20outranks\x20the\x20seed\x20at\x20runtime)':'user-edited\x20knobs\x20kept\x20by\x20design\x20(never\x20overwritten)'};}let g;try{g=String(parseTemplateFile(e)['frontmatter']['id']??'');}catch{g=undefined;}if(g!==b['id'])return{...d,'status':'skipped_user_file','detail':'a\x20non-knob\x20file\x20(id\x20\x27'+(g??'<unparseable>')+'\x27)\x20occupies\x20the\x20knob\x20slot;\x20machine\x20template\x20wins,\x20file\x20untouched\x20—\x20rename\x20it\x20to\x20free\x20the\x20slot'};const h=join(dirname(c),TEMPLATE_ARCHIVE_SUBDIR);mkdirSync(h,{'recursive':!![]});const i=join(h,b['variant']+'.pre-split.md');return writeFileSync(i,e,'utf-8'),rmSync(c,{'force':!![]}),writeFileSync(c,renderKnobFile(b),'utf-8'),{...d,'status':'knob_written','detail':'obsolete\x20pre-S8\x20single-file\x20template\x20retired\x20to\x20'+i+';\x20knob\x20file\x20re-rendered\x20from\x20the\x20current\x20catalog'};}function seedIndustryNavPages(a){const b=[],c=new Map();for(const d of BUILTIN_TEMPLATES){const e=c['get'](d['industry'])??[];e['push'](d),c['set'](d['industry'],e);}for(const [f,g]of[...c['entries']()]['sort']()){const h=join(a,f,INDUSTRY_NAV_FILENAME),i={'template':'nav/'+f,'status':'written','path':h};try{if(!existsSync(h))mkdirSync(dirname(h),{'recursive':!![]}),writeFileSync(h,renderIndustryNav(f,g),'utf-8');else{const j=classifyIndustryNav(readFileSync(h,'utf-8'));if(j==='current')i['status']='current';else j==='outdated'?(writeFileSync(h,renderIndustryNav(f,g),'utf-8'),i['status']='restamped',i['detail']='unmodified\x20older\x20nav\x20page\x20auto-upgraded'):(i['status']='skipped_modified',i['detail']='nav\x20page\x20user-edited;\x20kept\x20by\x20design');}}catch(k){i['status']='error',i['detail']=k['message'];}b['push'](i);}return b;}export function summarizeTemplateDiff(a,b){let c,d;try{c=parseTemplateFile(a);}catch(g){return'on-disk\x20file\x20is\x20not\x20parseable\x20('+g['message']+');\x20full\x20content\x20will\x20be\x20replaced';}try{d=parseTemplateFile(b);}catch{return'canonical\x20render\x20is\x20not\x20parseable\x20(code\x20defect);\x20full\x20content\x20will\x20be\x20replaced';}const e=[],f=new Set([...Object['keys'](c['frontmatter']),...Object['keys'](d['frontmatter'])]);for(const h of[...f]['sort']()){const i=h in c['frontmatter'],j=h in d['frontmatter'];if(i&&!j)e['push']('-'+h);else{if(!i&&j)e['push']('+'+h);else{if(JSON['stringify'](c['frontmatter'][h])!==JSON['stringify'](d['frontmatter'][h]))e['push']('~'+h);}}}return c['body']!==d['body']&&e['push']('~body\x20('+c['body']['split']('\x0a')['length']+'\x20->\x20'+d['body']['split']('\x0a')['length']+'\x20lines)'),e['length']>0x0?e['join'](',\x20'):'whitespace/ordering\x20only';}export function repairBuiltinTemplates(a){const b=[],c=resolveTemplatesDir(),d=a?.['backup']!==![],e=a?.['dryRun']===!![],f=new Set(a?.['includeUserEdited']??[]);for(const g of BUILTIN_TEMPLATES){const h=machineTemplateFile(c,g);if(!existsSync(h))continue;const i=canonicalTemplateContent(g);let j=null,k='';const l={'template':g['id'],'status':'would_update','path':h};try{const p=stripReleaseSentinel(readFileSync(h,'utf-8'),TEMPLATE_SENTINEL_KIND);j=p['sentinel'],k=p['content'];}catch(q){l['status']='error',l['detail']=q['message'],b['push'](l);continue;}if(k===i)continue;let m;if(j){if(j['version']>BUILTIN_TEMPLATES_VERSION){l['status']='error',l['detail']='newer\x20release\x20on\x20disk\x20(sentinel\x20v'+j['version']+'\x20>\x20running\x20catalog\x20v'+BUILTIN_TEMPLATES_VERSION+')\x20—\x20'+'repair\x20would\x20DOWNGRADE\x20and\x20lose\x20the\x20newer\x20release\x27s\x20content;\x20refused.\x20Upgrade\x20the\x20MCP\x20server\x20instead',b['push'](l);continue;}if(releaseBodyHash(k)!==j['hash']){if(!f['has'](g['id']))continue;m='sentinel-body\x20hash\x20mismatch\x20(sentinel\x20v'+j['version']+'\x20no\x20longer\x20binds\x20the\x20body)\x20'+'reseeded\x20under\x20EXPLICIT\x20include_user_edited\x20authorization';}else m='untouched\x20older\x20release\x20(sentinel\x20v'+j['version']+',\x20current\x20v'+BUILTIN_TEMPLATES_VERSION+')';}else{let r;try{r=String(parseTemplateFile(k)['frontmatter']['id']??'');}catch{continue;}if(r!==g['id'])continue;m='legacy\x20sentinel-less\x20builtin\x20file';}const n=summarizeTemplateDiff(k,i),o=d?';\x20previous\x20body\x20would\x20be\x20saved\x20in\x20templates/.archive/':'';if(e){l['status']='would_update',l['detail']=m+'\x20would\x20be\x20reseeded\x20from\x20BUILTIN_TEMPLATES\x20('+g['id']+')\x20—\x20diff\x20vs\x20canonical:\x20'+n+o+'\x20—\x20execute\x20with\x20authorize=true\x20after\x20the\x20user\x20explicitly\x20confirms',b['push'](l);continue;}try{if(d){const s=archiveBackupFile(c,g,'.repair.md');mkdirSync(dirname(s),{'recursive':!![]}),copyFileSync(h,s);}writeFileSync(h,renderTemplateFile(g),'utf-8'),cache['delete'](h),l['status']='updated',l['detail']=m+'\x20reseeded\x20from\x20BUILTIN_TEMPLATES\x20('+g['id']+')\x20—\x20diff\x20was:\x20'+n+(d?';\x20previous\x20body\x20saved\x20in\x20templates/.archive/':'');}catch(u){l['status']='error',l['detail']=u['message'];}b['push'](l);}return b;}export function builtinTemplateDrift(a){const b=new Set(a?.['includeUserEdited']??[]),c=[],d=resolveTemplatesDir();for(const e of BUILTIN_TEMPLATES){const f=machineTemplateFile(d,e);if(!existsSync(f)){c['push']({'template':e['id'],'path':f,'state':'missing','repairable':!![],'detail':'no\x20file\x20on\x20disk;\x20seeding\x20will\x20create\x20it'});continue;}const g=canonicalTemplateContent(e);let h=null,i='';try{const k=stripReleaseSentinel(readFileSync(f,'utf-8'),TEMPLATE_SENTINEL_KIND);h=k['sentinel'],i=k['content'];}catch(l){c['push']({'template':e['id'],'path':f,'state':'modified','repairable':![],'detail':'unreadable:\x20'+l['message']});continue;}if(i===g)continue;const j=summarizeTemplateDiff(i,g);if(!h){let m;try{m=String(parseTemplateFile(i)['frontmatter']['id']??'');}catch{m=undefined;}m===e['id']?c['push']({'template':e['id'],'path':f,'state':'modified','repairable':!![],'detail':'legacy\x20sentinel-less\x20builtin\x20file\x20—\x20seeding\x20never\x20rewrites\x20it\x20and\x20no\x20sentinel\x20proves\x20provenance;\x20repair\x20can\x20reseed\x20—\x20diff\x20vs\x20canonical:\x20'+j}):c['push']({'template':e['id'],'path':f,'state':'modified','repairable':![],'detail':'no\x20release\x20sentinel\x20and\x20id\x20\x27'+(m??'<unparseable>')+'\x27\x20does\x20not\x20match\x20the\x20builtin\x20id\x20—\x20a\x20user\x20file\x20occupies\x20this\x20path;\x20never\x20touched\x20(rename\x20it\x20to\x20free\x20the\x20slot)'});continue;}if(releaseBodyHash(i)===h['hash'])h['version']>BUILTIN_TEMPLATES_VERSION?c['push']({'template':e['id'],'path':f,'state':'modified','repairable':![],'detail':'newer\x20release\x20(sentinel\x20v'+h['version']+'\x20>\x20running\x20catalog\x20v'+BUILTIN_TEMPLATES_VERSION+')\x20—\x20'+'repair\x20would\x20DOWNGRADE\x20and\x20lose\x20the\x20newer\x20release\x27s\x20content;\x20repairable:\x20false.\x20'+'Upgrade\x20the\x20MCP\x20server\x20to\x20match\x20—\x20diff\x20vs\x20canonical:\x20'+j}):c['push']({'template':e['id'],'path':f,'state':'modified','repairable':!![],'detail':'untouched\x20older\x20release\x20(sentinel\x20v'+h['version']+',\x20current\x20v'+BUILTIN_TEMPLATES_VERSION+')\x20—\x20repair\x20can\x20upgrade\x20—\x20diff\x20vs\x20canonical:\x20'+j});else{const n=b['has'](e['id']);c['push']({'template':e['id'],'path':f,'state':'modified','repairable':n,'detail':n?'sentinel-body\x20hash\x20mismatch\x20(sentinel\x20v'+h['version']+'\x20no\x20longer\x20binds\x20the\x20body)\x20—\x20reseedable\x20under\x20the\x20explicit\x20include_user_edited\x20authorization\x20for\x20this\x20id\x20—\x20diff\x20vs\x20canonical:\x20'+j:'user-edited\x20body\x20—\x20kept\x20by\x20design;\x20repair\x20never\x20overwrites\x20user\x20edits\x20—\x20diff\x20vs\x20canonical:\x20'+j});}}for(const o of c){const p=BUILTIN_TEMPLATES['find'](q=>q['id']===o['template']);if(p)o['knob_state']=knobFileState(d,p);}return c;}function knobFileState(a,b){const c=knobTemplateFile(a,b);if(!existsSync(c))return'missing';try{return classifyKnobFile(readFileSync(c,'utf-8'),b['id'])==='user_modified'?'user_modified':'current';}catch{return'current';}}export function templateTruthStamps(a){const b=resolveTemplatesDir(),c=BUILTIN_TEMPLATES['find'](n=>n['id']===a);if(!c){const n=getTemplate(a),o=n?.['source_path'];if(!o||!existsSync(o))return{'template':a,'source':'user','content_sha256':'','machine_layer':null,'knob_layer':null,'consistency':'user_template'};const {content:q}=stripReleaseSentinel(readFileSync(o,'utf-8'),TEMPLATE_SENTINEL_KIND);return{'template':a,'source':'user','content_sha256':releaseBodyHash(q),'machine_layer':null,'knob_layer':null,'consistency':'user_template'};}const d=machineTemplateFile(b,c);let e='',f=null;if(existsSync(d)){const r=stripReleaseSentinel(readFileSync(d,'utf-8'),TEMPLATE_SENTINEL_KIND);f=r['sentinel'],e=r['content'];}const g=canonicalTemplateContent(c),h=f!==null&&releaseBodyHash(e)===f['hash'],i=e===g,j=i?undefined:summarizeTemplateDiff(e,g),k=knobTemplateFile(b,c);let l;if(!existsSync(k))l={'path':k,'state':'missing','override_keys':[]};else{const s=readFileSync(k,'utf-8'),t=classifyKnobFile(s,c['id']),u=t!==null?parseKnobFile(stripReleaseSentinel(s,TEMPLATE_KNOBS_SENTINEL_KIND)['content'],c['id']):null,v=u?[...u['fee_params']!==undefined?Object['keys'](u['fee_params'])['map'](w=>'fee_params.'+w):[],...Object['keys'](u)['filter'](w=>w!=='id'&&w!=='fee_params')]:[];l={'path':k,'state':t??'invalid','override_keys':v};}const m=!i||f!==null&&!h;return{'template':a,'source':'builtin','schema_version':BUILTIN_TEMPLATES_VERSION,'content_sha256':releaseBodyHash(e),'machine_layer':{'path':d,'sentinel':f,'sentinel_binds_body':h,'matches_catalog':i},'knob_layer':l,'consistency':m?'drifted':'verified',...m&&j!==undefined?{'differences':j}:{}};}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(h){throw new Error('template\x20\x27'+a+'\x27\x20failed\x20to\x20parse:\x20'+h['message']);}const d=TemplateFrontmatterSchema['safeParse'](c['frontmatter']);if(!d['success']){const i=d['error']['issues']['map'](j=>(j['path']['join']('.')||'<root>')+':\x20'+j['message'])['join'](';\x20');throw new Error('template\x20\x27'+a+'\x27\x20failed\x20validation:\x20'+i);}const e=validateAllocatorRows(d['data']);if(e['length']>0x0)throw new Error('template\x20\x27'+a+'\x27\x20failed\x20allocator-row\x20validation:\x20'+e['join'](';\x20'));const f=userInputSpecIssues(d['data']);if(f['length']>0x0)throw new Error('template\x20\x27'+a+'\x27\x20failed\x20user_input_specs\x20validation:\x20'+f['join'](';\x20'));const g=validateRuleDeclarations(d['data']);if(g['length']>0x0)throw new Error('template\x20\x27'+a+'\x27\x20failed\x20rule-declaration\x20validation:\x20'+g['join'](';\x20'));return{...d['data'],'body':c['body'],'source_path':a};}function templateFilesOnDisk(a){const b=[];if(!existsSync(a))return b;const c=new Set(BUILTIN_TEMPLATES['map'](d=>d['industry']+'/'+d['variant']));for(const d of readdirSync(a,{'withFileTypes':!![]})){if(!d['isDirectory']())continue;const e=join(a,d['name'],TEMPLATES_SUBDIR);if(!existsSync(e))continue;const g=join(e,MACHINE_TEMPLATES_SUBDIR);if(existsSync(g))for(const h of readdirSync(g,{'withFileTypes':!![]})){if(!h['isFile']()||!h['name']['endsWith']('.md'))continue;const i=h['name']['slice'](0x0,-'.md'['length']),j=c['has'](d['name']+'/'+i)?join(e,h['name']):null;b['push']({'file':join(g,h['name']),'id':d['name']+'/'+i,'knobFile':j});}for(const k of readdirSync(e,{'withFileTypes':!![]})){if(!k['isFile']()||!k['name']['endsWith']('.md'))continue;const l=k['name']['slice'](0x0,-'.md'['length']);if(c['has'](d['name']+'/'+l))continue;b['push']({'file':join(e,k['name']),'id':d['name']+'/'+l,'knobFile':null});}}return b['sort']((m,n)=>m['file']['localeCompare'](n['file']));}export function listTemplates(){!seeded&&(seedBuiltinTemplates(),seeded=!![]);const a=resolveTemplatesDir(),b=[],c=[],d=new Map(),e=new Set();for(const {file:f,id:g,knobFile:h}of templateFilesOnDisk(a)){e['add'](f);try{const i=statSync(f)['mtimeMs'],j=h&&existsSync(h)?statSync(h)['mtimeMs']:0x0,k=cache['get'](f);if(k&&k['mtimeMs']===i&&k['knobMtimeMs']===j){b['push'](k['template']);continue;}let l=loadAndValidate(f);if(h&&j>0x0){const m=readFileSync(h,'utf-8'),n=parseKnobFile(m,l['id']);if(n){l=applyKnobOverlay(l,n,parseTemplateFile(m)['body']);const o=validateAllocatorRows(l);if(o['length']>0x0)throw new Error('template\x20\x27'+f+'\x27\x20—\x20knob\x20overlay\x20\x27'+h+'\x27\x20broke\x20allocator-row\x20validation:\x20'+o['join'](';\x20'));}else c['push']('knob\x20file\x20\x27'+h+'\x27\x20is\x20not\x20a\x20valid\x20knob\x20overlay\x20for\x20\x27'+l['id']+'\x27\x20—\x20ignored,\x20machine\x20template\x20used\x20as-is');}cache['set'](f,{'mtimeMs':i,'knobMtimeMs':j,'template':l}),b['push'](l);}catch(p){cache['delete'](f),c['push'](p['message']),d['set'](g,p['message']);}}for(const q of[...cache['keys']()]){if(!e['has'](q))cache['delete'](q);}return b['sort']((r,s)=>r['id']['localeCompare'](s['id'])),loadErrorsById=d,{'templates':b,'errors':c};}let loadErrorsById=new Map();export function getTemplateLoadError(a){return listTemplates(),loadErrorsById['get'](a);}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 a356a}from'./machine-templates.js';import{SERVICE_TEMPLATES,fillServiceTemplate}from'./service-templates.js';import{ORDER_TEMPLATES,fillTemplate as a356b}from'./order-templates.js';import{PROGRESS_TEMPLATES,fillProgressTemplate}from'./progress-templates.js';import{ARBITRATION_TEMPLATES,fillTemplate as a356c}from'./arbitration-templates.js';import{TREASURY_TEMPLATES,fillTemplate as a356d}from'./treasury-templates.js';import{PERMISSION_TEMPLATES,fillTemplate as a356e}from'./permission-templates.js';import{PASSPORT_TEMPLATES,fillTemplate as a356f}from'./passport-templates.js';import{ALLOCATION_TEMPLATES,fillTemplate as a356g}from'./allocation-templates.js';import{CONTACT_TEMPLATES,fillTemplate as a356h}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=a356a(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 a356b(b,c);case'arbitration':return a356c(b,c);case'treasury':return a356d(b,c);case'permission':return a356e(b,c);case'passport':return a356f(b,c);case'allocation':return a356g(b,c);case'progress':return fillProgressTemplate(b,c);case'contact':return a356h(b,c);default:return{'ok':![],'error':'No\x20body-template\x20fill\x20for\x20\x27'+a+'\x27'};}}
|