@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
|
-
import{CREATABLE_OBJECTS,createsOf,isLate,isRef,resolveValue}from'./plan.js';import{auditPlan}from'./audit.js';import{normalizeGuardRowNames}from'./guard-fill.js';import{dryRunGateKey,hasDryRunAudit,recordDryRunAudit,setPendingPlanFunding,consumePendingPlanFunding,clearPendingPlanFunding}from'../tools/publish-gate-state.js';import{isDeterministicOutcomeMessage}from'./inflight.js';function deriveCreated(a){if(Array['isArray'](a['created']))return a['created'];const b=Array['isArray'](a['objectChanges'])?a['objectChanges']:[];return b['filter'](d=>d?.['type']==='created'&&typeof d?.['objectId']==='string')['map'](d=>({'object':d['objectId'],'type_raw':d['objectType']}));}export function handlerExecutor(a){return async(b,c,d)=>{const {handleOnchainOperations:e}=await import('../tools/handlers/onchain.js'),f=await e({'operation_type':b,'data':c,'env':d===undefined?a:d}),g=f['structuredContent']??{},h=g['result']!==undefined&&g['result']['data']!==undefined?g['result']:g,i=h['data']?.['result']??h['result']??h,j=h['outcome']??h['data']?.['outcome']??g['outcome']??g['status'];return{'outcome':j==='executed'||j==='success'?'executed':j==='pending_input'?'pending_input':'failed','digest':i['digest']??h['digest'],'created':deriveCreated(i),'error':i['error']??h['error']};};}function normalizeGuardTable(a,b){if(!Array['isArray'](a))return{'table':a,'description':b};return normalizeGuardRowNames(a,b,MAX_DESCRIPTION_CONTENT);}const MAX_DESCRIPTION_CONTENT=0xf9e,MAX_POLICY_DESCRIPTION_BYTES=0x1f4;export function truncateProseUtf8(a,b){if(Buffer['byteLength'](a,'utf8')<=b)return a;let c=0x0,d=a['length'];while(c<d){const i=c+d+0x1>>0x1;if(Buffer['byteLength'](a['slice'](0x0,i),'utf8')<=b)c=i;else d=i-0x1;}const e=a['slice'](0x0,c),f=Math['max'](0x1,Math['floor'](e['length']/0x2)),g=Math['max'](e['lastIndexOf']('。'),e['lastIndexOf']('.'),e['lastIndexOf']('.'),e['lastIndexOf']('!'),e['lastIndexOf']('!'),e['lastIndexOf']('?'),e['lastIndexOf']('?'),e['lastIndexOf'](';'),e['lastIndexOf'](';'));if(g+0x1>=f)return e['slice'](0x0,g+0x1)['trimEnd']();const h=e['lastIndexOf']('\x20');if(h+0x1>=f)return e['slice'](0x0,h)['trimEnd']();return e['trimEnd']();}function truncateToBytes(a,b){return truncateProseUtf8(a,b);}function truncateDescription(a){if(typeof a!=='string')return a;if(Buffer['byteLength'](a,'utf8')>MAX_DESCRIPTION_CONTENT)return truncateToBytes(a,MAX_DESCRIPTION_CONTENT-0x3)+'...';return a;}export function adaptConfigureParams(a,b){if(a==='pause'&&b!==null&&typeof b==='object'&&!Array['isArray'](b))return b['pause'];if(a==='guard_add'&&b!==null&&typeof b==='object'&&!Array['isArray'](b))return[b];if(a==='coin_add'&&b!==null&&typeof b==='object'&&!Array['isArray'](b)){const c=b,d=c['coin'];if(c['balance']===undefined&&(typeof d==='number'||typeof d==='string'&&/^[0-9]+$/['test'](d)))return{'balance':d};}if(a==='order_allocators'&&b!==null&&typeof b==='object'){const e=b,f=e['allocators'];if(Array['isArray'](f)){const g=f['map'](h=>{const i=h,j=i['sharing'];if(!Array['isArray'](j))return h;return{...i,'sharing':j['map'](k=>{const m=k,n=m['who'];if(n&&typeof n['Entity']==='string')return{...m,'who':{'Entity':{'name_or_address':n['Entity']}}};return k;})};});return{...e,'allocators':g};}}if(a==='sales'&&b!==null&&typeof b==='object'){const h=b,i=h['sales'];if(Array['isArray'](i)){const j=i['map'](k=>{if(!k||typeof k!=='object')return k;const l=k,m=l['stock']??l['quantity']??0x0;return{'suspension':![],'wip':'',...l,'stock':m};});return{...h,'sales':j};}}if(a==='policies'&&b!==null&&typeof b==='object'&&!Array['isArray'](b)){const k=b,l=k['policy'];if(Array['isArray'](l))return{...k,'policy':l['map'](m=>{if(!m||typeof m!=='object')return m;const n=m;return{...Array['isArray'](n['write_guard'])?null:{'write_guard':[]},...n,...typeof n['description']==='string'?{'description':truncateToBytes(n['description'],MAX_POLICY_DESCRIPTION_BYTES)}:{}};})};}return b;}export function adaptCreateData(a,b){const {name:c,permission:d,type_parameter:e,nodes:f,...g}=b;if(g['description']!==undefined)g['description']=truncateDescription(g['description']);switch(a['object']){case'service':case'arbitration':return{'object':{'name':c,'type_parameter':e,'permission':d},...g};case'machine':return{'object':{'name':c,...d!==undefined?{'permission':d}:{}},...g['description']!==undefined?{'description':g['description']}:{},'node':{'op':'add','nodes':f,'bReplace':!![]}};case'guard':{const h=normalizeGuardTable(b['table'],b['description']);return{...b,'description':truncateDescription(h['description']),'table':h['table']};}case'permission':case'contact':case'repository':default:{const i=g['policies'];return{'object':{'name':c,...d!==undefined?{'permission':d}:{}},...g,...a['object']==='repository'&&Array['isArray'](i)?{'policies':{'op':'set','policy':i['map'](j=>{if(!j||typeof j!=='object')return j;const k=j;return{...Array['isArray'](k['write_guard'])?null:{'write_guard':[]},...k,...typeof k['description']==='string'?{'description':truncateToBytes(k['description'],MAX_POLICY_DESCRIPTION_BYTES)}:{}};})}}:{}};}}}export function preflightPlan(a){const b=auditPlan(a),c=new Set(b['findings']['map'](h=>h['rule_id'])),d=c['has']('ARB-KEY-PLANE-01'),e=b['issues']['length']===0x0&&!b['findings']['some'](h=>h['level']==='critical')&&!d,f=b['facts']['settlement_triggers_display'],g=a['steps']['map'](h=>{if(h['op']!=='publish')return h;const i=h['preflight']['map'](j=>{const k=j['check']['endsWith']('_publish')?e:!c['has'](j['check']),l=typeof f==='string'&&f['length']>0x0&&(j['check']['endsWith']('_publish')||j['check']==='SETTLEMENT-TRIGGER-SCOPE')?'who\x20can\x20trigger\x20settlement\x20(settlement_triggers):\x20'+f:undefined;return{...j,'status':k?'pass':'fail',...l!==undefined?{'detail':l}:{}};});return{...h,'preflight':i};});return{'plan':{...a,'steps':g},'audit':b};}export function bindAuditPlan(a){const b=new Map();for(const h of a['steps']){if(h['op']!=='create')continue;const i=h['params']['name'];if(typeof i==='string'&&i['length']>0x0)b['set'](i,h['id']);}const c=new Set(a['external_refs']??[]),d=[],e=new Set(['value','Entity','name_or_address','objects','coin']),f=(j,k,l,m)=>{if(!e['has'](l))return;b['has'](m)&&d['push']({'step':j,'slot':k,'kind':'intra_plan_bare_name','value':m});},g=(j,k,l)=>{if(b['has'](l))d['push']({'step':j,'slot':k,'kind':'intra_plan_bare_name','value':l});else!c['has'](l)&&d['push']({'step':j,'slot':k,'kind':'undeclared_external','value':l});};for(const j of a['steps']){if(j['op']==='configure'){const m=j['target'];if(typeof m==='string')f(j['id'],'target','value',m);else{if(isLate(m)){const n=m['$late'];if(n['by']==='local_name')g(j['id'],'target',n['mark']);}}}if(j['op']==='publish')continue;const k=j['params'];if(typeof k==='string')f(j['id'],'params','value',k);const l=(o,p,r)=>{if(o===null||o===undefined)return;if(Array['isArray'](o)){o['forEach']((u,w)=>l(u,p,r+'['+String(w)+']'));return;}if(typeof o==='object'){if(isRef(o))return;if(isLate(o)){const u=o['$late'];if(u['by']==='local_name')g(j['id'],r,u['mark']);return;}for(const [w,x]of Object['entries'](o)){l(x,w,r==='params'?'params.'+w:r+'.'+w);}return;}if(typeof o==='string')f(j['id'],r,p,o);};l(k,'','params');}return d;}function retrievalFor(a){if(a==='service')return'stop\x20new\x20orders\x20first\x20(onchain_operations\x20data\x20key\x20\x27pause\x27),\x20then\x20take\x20the\x20fund\x20back\x20'+'(data\x20key\x20\x27compensation_fund_withdraw\x27,\x20owner\x20signer\x20—\x20the\x20pool\x20returns\x20to\x20the\x20owner)';if(a==='arb'||a==='arbitration')return'withdraw\x20arbitration\x20fees\x20(onchain_operations\x20data\x20key\x20\x27arb_withdraw\x27,\x20arbitrator\x20signer):\x20from\x20state\x205\x20'+'(Finished)\x20immediately;\x20from\x20state\x203\x20(ruled,\x20objection\x20window\x20open)\x20ONLY\x2030\x20days\x20after\x20the\x20ruling\x20—\x20'+'before\x20expiry\x20the\x20object\x20is\x20locked\x20until\x20<ruling_time\x20+\x2030\x20days>\x20and\x20teardown\x20is\x20refused;\x20from\x20state\x204\x20'+'(objectionable)\x20NEVER.\x20Then\x20cash\x20out\x20via\x20the\x20arb\x20fees_transfer\x20chain\x20(arb\x20→\x20recipient\x20→\x20LocalMark\x20→\x20WOW)';if(a==='permission')return'holds\x20no\x20build-time\x20money\x20—\x20a\x20Permission\x20carries\x20no\x20recoverable\x20funds;\x20a\x20frozen\x20one\x20only\x20leaves\x20'+'LocalMark\x20name\x20clutter\x20(same\x20advice\x20as\x20frozen\x20leftovers)';if(a==='reward')return'drain\x20the\x20pool\x20(onchain_operations\x20data\x20key\x20\x27withdraw\x27,\x20owner\x20signer;\x20'+'confirm\x20the\x20pool\x20balance\x20first\x20—\x20a\x20short\x20pool\x20aborts\x20cleanly\x20without\x20paying)';return'holds\x20no\x20build-time\x20money;\x20create-frozen\x20—\x20it\x20cannot\x20be\x20deleted\x20or\x20unbound.\x20'+'Remove\x20its\x20LocalMark\x20name\x20(local_mark_operation)\x20so\x20later\x20runs\x20never\x20bind\x20it\x20by\x20name';}export function bindRecoveryList(a,b){const c=new Map(a['steps']['map'](g=>[g['id'],g])),d=new Map();for(const g of a['steps']){if(g['op']!=='configure')continue;if(g['method']!=='coin_add'&&g['method']!=='compensation_fund_add')continue;const h=g['target'],i=h!==null&&typeof h==='object'?h['$ref']:undefined,j=g['params']?.['balance'];typeof i==='string'&&(typeof j==='string'||typeof j==='number')&&d['set'](i,String(j));}const e=[],f=(k,l)=>{const m=c['get'](k),n=m?.['op']==='create'?m:undefined,o=n?.['object'],p=n?String(n['params']['name']??''):'',q=d['get'](k);e['push']({'step':k,...o!==undefined?{'kind':o}:{},...p?{'object':p}:{},...l?{'address':l}:{},...q!==undefined?{'funded':q}:{},...o!==undefined?{'retrieval':retrievalFor(o)}:{}});};if(b)for(const [k,l]of Object['entries'](b)){f(k,typeof l==='string'&&l['length']>0x0?l:undefined);}else{for(const m of a['steps'])if(m['op']==='create')f(m['id']);}return e;}function teardownPlan(a){if(a['length']===0x0)return'';const b=[],c=a['find'](d=>d['kind']==='service');c!==undefined&&b['push']('\x20\x201.\x20stop\x20new\x20orders:\x20onchain_operations\x20on\x20the\x20Service'+(c['address']?'\x20'+c['address']:'')+'\x20with\x20data\x20key\x20\x27pause\x27.','\x20\x202.\x20take\x20the\x20compensation\x20fund\x20back:\x20the\x20same\x20Service,\x20data\x20key\x20\x27compensation_fund_withdraw\x27\x20(owner\x20signer\x20—\x20the\x20pool\x20returns\x20to\x20the\x20owner;\x20real\x20money\x20only\x20if\x20the\x20money-in\x20step\x20ran\x20—\x20confirm\x20the\x20balance\x20first).');for(const d of a['filter'](e=>e['kind']==='reward')){b['push']('\x20\x20'+(b['length']+0x1)+'.\x20drain\x20the\x20reward\x20pool'+(d['address']?'\x20'+d['address']:'')+':\x20data\x20key\x20\x27withdraw\x27\x20(owner\x20signer;\x20confirm\x20the\x20pool\x20balance\x20first\x20—\x20a\x20short\x20pool\x20aborts\x20cleanly).');}for(const e of a['filter'](f=>f['kind']==='arb'||f['kind']==='arbitration')){b['push']('\x20\x20'+(b['length']+0x1)+'.\x20arbitration\x20fees'+(e['address']?'\x20on\x20'+e['address']:'')+':\x20data\x20key\x20\x27arb_withdraw\x27\x20(arbitrator\x20signer)\x20—\x20IF\x20the\x20arb\x20is\x20in\x20state\x205\x20(Finished)\x20withdraw\x20immediately;\x20IF\x20it\x20sits\x20in\x20state\x203\x20(ruled,\x20objection\x20window\x20open)\x20it\x20is\x20locked\x20until\x20<ruling_time\x20+\x2030\x20days>\x20—\x20teardown\x20refused\x20until\x20that\x20date,\x20then\x20retry;\x20state\x204\x20(objectionable)\x20can\x20NEVER\x20withdraw.');}return a['some'](f=>f['kind']!==undefined&&f['kind']!=='service'&&f['kind']!=='reward')&&b['push']('\x20\x20'+(b['length']+0x1)+'.\x20frozen\x20leftovers\x20(guards,\x20machine,\x20repositories)\x20cannot\x20be\x20deleted\x20or\x20unbound\x20—\x20they\x20stay\x20inert\x20on\x20chain;\x20remove\x20their\x20LocalMark\x20names\x20(local_mark_operation)\x20so\x20later\x20runs\x20never\x20bind\x20them\x20by\x20name.'),'\x0aTEARDOWN\x20PLAN\x20(abandon\x20this\x20run\x27s\x20store\x20—\x20execute\x20top\x20to\x20bottom):\x0a'+b['join']('\x0a');}export function bindAuditReport(a,b){const c=a['slice'](0x0,0xc)['map'](e=>'\x20\x20•\x20step\x20\x27'+e['step']+'\x27\x20'+e['slot']+'\x20->\x20\x27'+e['value']+'\x27\x20('+(e['kind']==='intra_plan_bare_name'?'names\x20an\x20object\x20THIS\x20plan\x20creates\x20—\x20must\x20be\x20{\x22$ref\x22:\x20\x22<create_step_id>\x22}':'undeclared\x20external\x20local_name\x20—\x20declare\x20it\x20in\x20plan.external_refs\x20or\x20bind\x20a\x20plan\x20ref')+')'),d=b['length']>0x0?b['map'](e=>{const f=e['object']!==undefined?(e['kind']??'object')+':\x20'+e['object']:e['kind']??'';return'\x20\x20•\x20'+e['step']+(f?'\x20('+f+')':'')+(e['address']!==undefined?'\x20@'+e['address']:'\x20—\x20no\x20address\x20recorded\x20—\x20find\x20the\x20object\x20by\x20its\x20name\x20(workspace/onchain_objects)\x20or\x20its\x20create\x20digest')+(e['funded']!==undefined?';\x20plan-funded\x20'+e['funded']+'\x20raw\x20(confirm\x20the\x20live\x20balance\x20before\x20relying\x20on\x20it)':'')+(e['retrieval']!==undefined?';\x20take\x20back:\x20'+e['retrieval']:'');})['join']('\x0a'):'\x20\x20•\x20(none\x20—\x20nothing\x20was\x20executed\x20in\x20this\x20run;\x20no\x20funds\x20or\x20objects\x20to\x20recover)';return'Offending\x20slots:\x0a'+c['join']('\x0a')+(a['length']>0xc?'\x0a\x20\x20…\x20+'+(a['length']-0xc)+'\x20more':'')+'\x0a'+('RECOVERY\x20LIST\x20(objects\x20already\x20created\x20by\x20this\x20run\x20—\x20id\x20+\x20digest/address\x20—\x20so\x20you\x20can\x20recover\x20funds/objects):\x0a'+d)+teardownPlan(b);}function stripGenerics(a){return a['replace'](/<.*>$/,'');}function matchCreated(a,b){const c=stripGenerics(b);return a['created']['find'](d=>{if(typeof d['type_raw']!=='string'||typeof d['object']!=='string')return![];return stripGenerics(d['type_raw'])['endsWith']('::'+c);})?.['object'];}async function recoverTimedOutCreate(a,b,c,d,e,f){if(a['recoverCreated']===undefined)return undefined;if(isDeterministicOutcomeMessage(f['error']??''))return undefined;const g=CREATABLE_OBJECTS[b['object']];if(typeof g!=='string'||g['length']===0x0)return undefined;return a['recoverCreated']({'op':b['object'],'data':c,'env':d,'startedAtMs':e,...f['digest']!==undefined?{'digest':f['digest']}:{},'expectedTypeSuffix':stripGenerics(g)});}export function planUsesEnvSigner(a){let b=![];const c=d=>{if(b||d===null||typeof d!=='object')return;if(Array['isArray'](d)){for(const g of d)c(g);return;}const e=d,f=e['$late'];if(f?.['by']==='env_signer'){b=!![];return;}for(const h of Object['values'](e))c(h);};for(const d of a['steps']){if(b)break;c(d['params']),c(d['target']);}return b;}const DEFAULT_LATE=a=>{if(a['by']==='address'){if(typeof a['address']!=='string'||a['address']['length']===0x0)throw new Error('unresolved\x20late\x20binding\x20{$late:{by:\x27address\x27}}\x20resolved\x20to\x20an\x20EMPTY\x20value\x20—\x20an\x20empty\x20Entity/name\x20slot\x20makes\x20the\x20SDK\x20substitute\x20the\x20deployer\x27s\x20own\x20account\x20(cour\x20ENTITY-LATENAME),\x20so\x20this\x20is\x20a\x20hard\x20stop;\x20bind\x20a\x20real\x20address');return a['address'];}if(a['by']==='env_signer')throw new Error('unresolved\x20late\x20binding\x20{$late:{by:\x27env_signer\x27}}\x20(no\x20envSignerRef\x20injected)\x20—\x20pass\x20env.account\x20(the\x20default\x20signing\x20account)\x20to\x20plan_execute');if(typeof a['mark']!=='string'||a['mark']['length']===0x0)throw new Error('unresolved\x20late\x20binding\x20{$late:{by:\x27local_name\x27}}\x20with\x20an\x20EMPTY\x20mark\x20—\x20an\x20empty\x20Entity/name\x20slot\x20makes\x20the\x20SDK\x20substitute\x20the\x20deployer\x27s\x20own\x20account\x20(cour\x20ENTITY-LATENAME),\x20so\x20this\x20is\x20a\x20hard\x20stop;\x20declare\x20and\x20register\x20the\x20LocalMark\x20name\x20first');throw new Error('unresolved\x20late\x20binding\x20(no\x20resolver\x20injected):\x20local_name\x20\x27'+a['mark']+'\x27');};export const CAMPAIGN_DEADLINE_MIN_LEAD_MS=0xa*0xea60;export function reanchorCampaignDeadline(a,b){const c=a['derived_params']?.['find'](m=>m['param']==='campaign_deadline_ms');if(!c||!(c['input']>0x0))return{'plan':a};const d=c['from']==='campaign_duration_hours'?0x36ee80:0x5265c00,e=b??Date['now'](),f=Math['round'](e+c['input']*d),g=c['value'];if(f===g)return{'plan':a};let h=0x0;const i=m=>{if(Array['isArray'](m))return m['map'](i);if(m!==null&&typeof m==='object'){const n=m;if(n['value_type']==='U64'&&n['value']===g)return h+=0x1,{...n,'value':f};const o={};for(const [p,q]of Object['entries'](n))o[p]=i(q);return o;}return m;},j=a['steps']['map'](m=>m['op']==='create'?{...m,'params':i(m['params'])}:m),k={...a['inputs']};if(k['campaign_deadline_ms']===g)k['campaign_deadline_ms']=f;const l=(a['derived_params']??[])['map'](m=>m===c?{...m,'value':f,'at_ms':e,'note':m['note']+';\x20RE-ANCHORED\x20at\x20materialize\x20(W6-01):\x20the\x20EXECUTED\x20value\x20is\x20the\x20'+('materialize\x20instant\x20+\x20'+c['input']+'\x20')+(c['from']==='campaign_duration_hours'?'hour(s)':'day(s)')+'\x20—\x20the\x20compile-time\x20constant\x20is\x20superseded'}:m);return{'plan':{...a,'steps':j,'inputs':k,'derived_params':l},'reanchor':{'param':'campaign_deadline_ms','from_value':g,'to_value':f,'anchor_ms':e,'from_source':c['from'],'input':c['input'],'cells_rewritten':h}};}export function campaignDeadlineFreshness(a,b){const c=a['inputs']?.['campaign_deadline_ms'],d=typeof c==='number'?c:Number(c);if(!Number['isFinite'](d)||d<=0x0)return undefined;const e=b??Date['now']();if(e>=d)return{'code':'CAMPAIGN_DEADLINE_PAST','deadline_ms':d,'now_ms':e,'detail':'campaign_deadline_ms\x20('+d+')\x20has\x20already\x20passed\x20(now\x20'+e+')\x20—\x20the\x20round\x20is\x20'+'CAMPAIGN-CLOSED\x20before\x20a\x20single\x20step\x20ran;\x20nothing\x20was\x20executed.\x20Rebuild\x20the\x20plan:\x20pass\x20'+'campaign_duration_days\x20/\x20campaign_duration_hours\x20(the\x20deadline\x20is\x20RE-ANCHORED\x20at\x20'+'materialize\x20time,\x20so\x20lag\x20can\x20never\x20expire\x20it)\x20or\x20a\x20fresh\x20campaign_deadline_ms.\x20'+'An\x20explicit\x20absolute\x20deadline\x20is\x20a\x20strict\x20static\x20opt-in\x20and\x20is\x20never\x20re-anchored.'};if(d-e<CAMPAIGN_DEADLINE_MIN_LEAD_MS)return{'code':'CAMPAIGN_DEADLINE_IMMINENT','deadline_ms':d,'now_ms':e,'detail':'campaign_deadline_ms\x20('+d+')\x20is\x20under\x20'+Math['round'](CAMPAIGN_DEADLINE_MIN_LEAD_MS/0xea60)+'\x20'+('minutes\x20away\x20(now\x20'+e+')\x20—\x20by\x20the\x20time\x20any\x20buyer\x20sees\x20the\x20listing\x20the\x20round\x20is\x20a\x20polarity\x20')+'coin\x20flip;\x20nothing\x20was\x20executed.\x20Rebuild\x20with\x20a\x20longer\x20campaign_duration_*\x20or\x20a\x20later\x20deadline.'};return undefined;}export async function materializePlan(a,b,c){const d=(c?.['completedSteps']?.['length']??0x0)>0x0,f=d?{'plan':a}:reanchorCampaignDeadline(a);a=f['plan'];const g=campaignDeadlineFreshness(a),{plan:h,audit:i}=preflightPlan(a);if(g)return{'steps':h['steps']['map'](w=>({'stepId':w['id'],'status':'blocked','error':g['code']+':\x20'+g['detail']})),'outputs':{},'completed':![],'budgetExhausted':![],'preflight':i,'readback':{'ok':![],'checks':[{'name':'campaign_deadline_freshness','ok':![],'detail':g['detail']}]}};const j=new Map(Object['entries'](c?.['outputs']??{})),k=new Set(c?.['completedSteps']??[]),l=[],m=b['resolveLate']??DEFAULT_LATE,n=w=>{if(w['by']==='env_signer'){if(typeof b['envSignerRef']==='string'&&b['envSignerRef']['length']>0x0)return b['envSignerRef'];throw new Error('step\x20carries\x20{$late:{by:\x27env_signer\x27}}\x20but\x20no\x20default\x20account\x20was\x20provided\x20—\x20pass\x20env.account\x20to\x20plan_execute');}const x=m(w);if(typeof x!=='string'||x['length']===0x0)throw new Error('unresolved\x20late\x20binding\x20{$late:'+JSON['stringify'](w)+'}\x20resolved\x20to\x20an\x20EMPTY\x20value\x20—\x20an\x20empty\x20Entity/name\x20slot\x20makes\x20the\x20SDK\x20substitute\x20the\x20deployer\x27s\x20own\x20account\x20(cour\x20ENTITY-LATENAME);\x20fail-closed,\x20register/bind\x20the\x20value\x20first');return x;},o=new Map(h['steps']['filter'](w=>w['op']==='create')['map'](w=>[w['id'],w['object']])),p=w=>resolveValue(w,j,n),q=w=>{if(w['account']===undefined)return b['env'];const x=b['envByAccount']?.[w['account']];if(x===undefined)throw new Error('step\x20\x27'+w['id']+'\x27\x20declares\x20account\x20\x27'+w['account']+'\x27\x20but\x20no\x20env\x20was\x20provided\x20for\x20it\x20—\x20'+('re-run\x20plan_execute\x20with\x20accounts[\x22'+w['account']+'\x22]\x20(a\x20declared\x20account\x20never\x20falls\x20back\x20')+'to\x20the\x20default\x20signer:\x20the\x20controller\x20identity\x20is\x20the\x20point)');return x;};let r=![],s='halted\x20by\x20earlier\x20failure/blocked\x20publish';const t=b['timeoutMs']!==undefined&&b['timeoutMs']>0x0?Date['now']()+b['timeoutMs']:undefined;let u=![];for(const [w,x]of h['steps']['entries']()){if(r){l['push']({'stepId':x['id'],'status':'blocked','error':s});continue;}if(k['has'](x['id'])){if(o['has'](x['id'])){const y=j['get'](x['id']);if(y===undefined){l['push']({'stepId':x['id'],'status':'failed','error':'resumed\x20create\x20step\x20has\x20no\x20recorded\x20output\x20—\x20pass\x20its\x20created\x20address\x20in\x20previous_outputs'}),r=!![];continue;}l['push']({'stepId':x['id'],'status':'executed','address':y,'error':'resumed\x20from\x20a\x20prior\x20run\x20(adopted,\x20not\x20re-executed)'});continue;}l['push']({'stepId':x['id'],'status':'executed','error':'resumed\x20from\x20a\x20prior\x20run\x20(adopted,\x20not\x20re-executed)'});continue;}if(t!==undefined&&Date['now']()>=t){u=!![],r=!![],s='time\x20budget\x20('+b['timeoutMs']+'ms)\x20exhausted\x20before\x20this\x20step\x20—\x20RESUME,\x20not\x20re-run:\x20send\x20plan_execute\x20again\x20with\x20completed_steps\x20=\x20every\x20stepId\x20whose\x20status\x20is\x20\x27executed\x27,\x20previous_outputs\x20=\x20outputs',l['push']({'stepId':x['id'],'status':'blocked','error':s});continue;}try{if(x['op']==='publish'){const D=x['preflight']['filter'](P=>P['status']==='fail');if(D['length']>0x0){l['push']({'stepId':x['id'],'status':'blocked','error':'preflight\x20failed:\x20'+D['map'](P=>P['check'])['join'](',\x20')+'\x20(refusing\x20to\x20publish\x20—\x20A-2)'});continue;}const E=p(x['target']),F=o['get'](x['target']['$ref'])??'',G={'object':E,'publish':!![]},H=h['steps']['find'](P=>P['op']==='create'&&P['id']===x['target']['$ref']),I=H?.['params']?.['reentry_kind'];typeof I==='string'&&I!=='none'&&(G['reentry_kind']=I);const J=h['steps']['some'](P=>P['op']==='configure'&&P['method']==='voting_guard');J&&F==='service'&&(G['arbitration_open_vote_ack']=!![]);const K={};for(let P=w+0x1;P<h['steps']['length'];P++){const Q=h['steps'][P];if(Q['op']!=='configure'||Q['method']!=='coin_add')continue;const R=Q['params']?.['balance'],S=typeof R==='number'?R:Number(R);if(!Number['isFinite'](S)||S<=0x0)continue;try{const T=p(Q['target']);typeof T==='string'&&T!==''&&(K[T['toLowerCase']()]=(K[T['toLowerCase']()]??0x0)+S);}catch{}}setPendingPlanFunding(K);const L=q(x),M=L?.['dry_run']===!![];let N;if(!M&&!hasDryRunAudit(dryRunGateKey('onchain_operations',{'operation_type':F,'data':G}))){const U=await b['execute'](F,G,{...L,'dry_run':!![]});if(U['outcome']!=='executed'){l['push']({'stepId':x['id'],'status':'blocked','error':'AUTO\x20DRY-RUN\x20PRESTEP\x20(ruling\x202026-11-04):\x20the\x20dry_run:true\x20simulation\x20of\x20THIS\x20'+'publish\x20payload\x20FAILED\x20—\x20the\x20formal\x20publish\x20is\x20BLOCKED,\x20never\x20broadcast.\x20'+('Dry-run\x20diagnostics:\x20'+(U['error']??U['outcome']))}),r=!![];continue;}recordDryRunAudit(dryRunGateKey('onchain_operations',{'operation_type':F,'data':G})),N='AUTO\x20DRY-RUN\x20PRESTEP\x20(ruling\x202026-11-04):\x20the\x20dry_run:true\x20simulation\x20of\x20THIS\x20exact\x20payload\x20PASSED\x20and\x20registered\x20the\x20session\x20ledger;\x20the\x20formal\x20face\x20follows.';}const O=await b['execute'](F,G,L);if(O['outcome']!=='executed'){l['push']({'stepId':x['id'],'status':'failed',...O['digest']!==undefined?{'digest':O['digest']}:{},'error':O['error']??O['outcome']}),r=!![];continue;}l['push']({'stepId':x['id'],'status':'executed','digest':O['digest'],'address':E,...N!==undefined?{'error':N}:{}});continue;}const z=isRef(x['params'])?p(x['params']):Object['fromEntries'](Object['entries'](x['params'])['map'](([V,W])=>[V,p(W)]));if(x['op']==='create'){const V=adaptCreateData(x,z),W=q(x),X=Date['now'](),Y=await b['execute'](x['object'],V,W);if(Y['outcome']!=='executed'){const a0=await recoverTimedOutCreate(b,x,V,W,X,Y)['catch'](()=>undefined);if(a0!==undefined){j['set'](x['id'],a0['object']),l['push']({'stepId':x['id'],'status':'executed',...a0['digest']!==undefined?{'digest':a0['digest']}:{},'address':a0['object'],'recovered':!![],'error':'AUTO-RECOVERED\x20(timeout\x20reverse\x20lookup):\x20the\x20dispatch\x20outcome\x20was\x20never\x20observed,\x20but\x20exactly\x20ONE\x20'+(x['object']+'\x20created\x20by\x20this\x20sender\x20landed\x20inside\x20the\x20call\x20window\x20—\x20ADOPTED\x20as\x20this\x20step\x27s\x20output\x20')+'(recovered:true).\x20A\x20second,\x20blind\x20re-run\x20of\x20this\x20step\x20would\x20create\x20a\x20DUPLICATE;\x20continue\x20from\x20the\x20next\x20step.'});continue;}l['push']({'stepId':x['id'],'status':'failed',...Y['digest']!==undefined?{'digest':Y['digest']}:{},'error':Y['error']??Y['outcome']}),r=!![];continue;}const Z=matchCreated(Y,CREATABLE_OBJECTS[x['object']]);if(Z===undefined){l['push']({'stepId':x['id'],'status':'failed',...Y['digest']!==undefined?{'digest':Y['digest']}:{},'error':'created\x20'+x['object']+'\x20not\x20found\x20in\x20transaction\x20result'}),r=!![];continue;}j['set'](x['id'],Z),l['push']({'stepId':x['id'],'status':'executed','digest':Y['digest'],'address':Z});continue;}const A=p(x['target']),B=o['get'](isRef(x['target'])?x['target']['$ref']:'')??'';if(B===''){l['push']({'stepId':x['id'],'status':'failed','error':'PLAN_TARGET_REF_REQUIRED:\x20step\x20\x27'+x['id']+'\x27\x20target\x20does\x20not\x20trace\x20to\x20a\x20create\x20step\x20in\x20this\x20plan\x20—\x20'+'configure\x20targets\x20must\x20be\x20{\x22$ref\x22:\x20\x22<create_step_id>\x22}\x20(a\x20bare\x20name\x20binds\x20the\x20global\x20mark\x20namespace\x20across\x20runs,\x20W5-05)'}),r=!![];continue;}const C=await b['execute'](B,{'object':A,[x['method']]:adaptConfigureParams(x['method'],z)},q(x));if(x['method']==='coin_add')consumePendingPlanFunding(A);if(C['outcome']!=='executed'){l['push']({'stepId':x['id'],'status':'failed',...C['digest']!==undefined?{'digest':C['digest']}:{},'error':C['error']??C['outcome']}),r=!![];continue;}l['push']({'stepId':x['id'],'status':'executed','digest':C['digest'],'address':A});}catch(a1){const a2=a1?.['digest'];l['push']({'stepId':x['id'],'status':'failed',...typeof a2==='string'&&a2?{'digest':a2}:{},'error':a1 instanceof Error?a1['message']:String(a1)});if(x['op']==='configure'&&x['method']==='coin_add')try{consumePendingPlanFunding(p(x['target']));}catch{}r=!![];}}clearPendingPlanFunding();const v=await verifyMaterialization(h,j,b,l);return{'steps':l,'outputs':Object['fromEntries'](j),'completed':l['length']>0x0&&l['every'](a3=>a3['status']==='executed'),'budgetExhausted':u,'preflight':i,'readback':v,...f['reanchor']?{'deadline_reanchor':f['reanchor']}:{}};}function planAllocatorRows(a){const b=[],c=d=>{if(typeof d==='object'&&d!==null&&!Array['isArray'](d)){const e=d;if(Array['isArray'](e['allocators']))d=e['allocators'];}if(!Array['isArray'](d))return;for(const f of d){if(typeof f==='object'&&f!==null)b['push'](f);}};for(const d of a['steps']){if(d['op']==='create'&&d['object']==='service')c(d['params']['order_allocators']);if(d['op']==='configure'&&d['method']==='order_allocators')c(d['params']['allocators']);}return b;}function declaredRepoPolicyNames(a,b){const c=[],d=e=>{if(!Array['isArray'](e))return;for(const f of e){const g=f?.['name'];if(typeof g==='string'&&g['trim']()!==''&&!c['includes'](g['trim']()))c['push'](g['trim']());}};for(const e of a['steps']){if(e['op']==='create'&&e['id']===b){d(e['params']['policies']);continue;}if(e['op']!=='configure'||e['method']!=='policies')continue;const f=e['target'],g=f!==null&&typeof f==='object'&&typeof f['$ref']==='string'?f['$ref']:undefined;if(g!==b)continue;if(e['params']['op']!=='add')continue;d(e['params']['policy']);}return c;}export function conservationCheck(a){const b=planAllocatorRows(a);if(b['length']===0x0)return[{'name':'allocator_conservation','ok':![],'detail':'no\x20allocator\x20rows\x20(PLAN-ALLOC-01)'}];const c=[];return b['forEach']((d,e)=>{const f=d['track']??'settlement',g=typeof d['guard']==='object'&&d['guard']!==null?String(d['guard']['$ref']??JSON['stringify'](d['guard'])['slice'](0x0,0x28)):String(d['guard']??'?'),h='conservation:'+f+'['+e+']'+(g!=='?'?'('+g+')':''),i=(d['sharing']??[])['map'](l=>l['mode']);if(i['some'](l=>l==='Amount')){c['push']({'name':h,'ok':!![],'detail':'contains\x20Amount-mode\x20row(s)\x20—\x20fixed\x20payouts\x20are\x20not\x20statically\x20verifiable\x20against\x20the\x20escrow\x20total'});return;}let j=0x0;for(const l of d['sharing']??[]){if(l['mode']==='Rate'||l['mode']==='RateGross')j+=Number(l['sharing']??0x0);}const k=i['some'](n=>n==='Surplus');if(j>0x2710)c['push']({'name':h,'ok':![],'detail':'rate\x20sum\x20'+j+'\x20>\x2010000\x20—\x20row\x20pays\x20out\x20MORE\x20than\x20it\x20holds'});else j<0x2710&&!k?c['push']({'name':h,'ok':![],'detail':'rate\x20sum\x20'+j+'\x20<\x2010000\x20and\x20no\x20Surplus\x20row\x20—\x20the\x20remainder\x20has\x20no\x20fund\x20exit'}):c['push']({'name':h,'ok':!![],'detail':k?'rate\x20sum\x20'+j+'\x20+\x20Surplus\x20row\x20absorbs\x20the\x20remainder':'rate\x20sum\x20'+j+'\x20==\x2010000'});}),c;}async function verifyMaterialization(a,b,c,d=[]){const f=[...conservationCheck(a)],g=a['steps']['filter'](h=>h['op']==='create')['length'];if(g>0x0){const h=b['size'];f['push']({'name':'created_objects','ok':h>0x0,'detail':h+'\x20object(s)\x20materialized\x20on-chain\x20of\x20'+g+'\x20declared\x20create\x20step(s)'+(h===0x0?'\x20—\x20NOTHING\x20was\x20built;\x20treat\x20the\x20deployment\x20as\x20NOT\x20done':'')});}if(a['steps']['length']>0x0&&d['length']>0x0){const i=d['filter'](j=>j['status']==='executed')['length'];f['push']({'name':'executed_steps','ok':i===d['length'],'detail':i+'/'+d['length']+'\x20step(s)\x20executed\x20this\x20run'});}if(c['read']!==undefined){for(const j of createsOf(a,'repository')){const k=b['get'](j['id']);if(k===undefined)continue;const l=declaredRepoPolicyNames(a,j['id']);if(l['length']===0x0)continue;try{const m=await c['read'](k,'repository',c['env']);if(m===undefined||m===null){f['push']({'name':'readback:'+j['id'],'ok':![],'detail':'repository\x20'+k+'\x20not\x20readable\x20after\x20creation'});continue;}const n=new Set((Array['isArray'](m['policies'])?m['policies']:[])['map'](q=>typeof q?.['name']==='string'?q['name']['toLowerCase']():'')['filter'](Boolean)),o=l['filter'](p=>!n['has'](p['toLowerCase']()));f['push']({'name':'readback:'+j['id']+':policies','ok':o['length']===0x0,'detail':o['length']===0x0?'on-chain\x20policies\x20cover\x20the\x20'+l['length']+'\x20plan-declared:\x20'+l['join'](',\x20'):'PLAN\x20DECLARED\x20but\x20NOT\x20on-chain:\x20'+o['join'](',\x20')+'\x20(declared:\x20'+l['join'](',\x20')+';\x20chain:\x20'+([...n]['join'](',\x20')||'none')+').\x20Every\x20guard\x20leg\x20reading\x20a\x20missing\x20key\x20can\x20never\x20open\x20—\x20a\x20rating-floor\x20reward\x20becomes\x20permanently\x20unclaimable.\x20Fix\x20BEFORE\x20any\x20buyer\x20flow:\x20repository\x20policies\x20configure\x20{op:\x22add\x22,\x20policy:[{name:\x22'+o[0x0]+'\x22,\x20write_guard:\x22<the\x20credential\x20guard\x20ADDRESS\x20as\x20a\x20plain\x20string>\x22,\x20id_from:\x22none\x22,\x20value_type:\x22U64\x22,\x20description:\x22...\x22}]}\x20(permission\x20102\x20—\x20write_guard\x20must\x20be\x20the\x20guard\x20address\x20STRING,\x20the\x20object\x20form\x20is\x20schema-rejected),\x20then\x20re-verify.'});}catch(p){f['push']({'name':'readback:'+j['id'],'ok':![],'detail':p instanceof Error?p['message']:String(p)});}}for(const q of createsOf(a,'service')){const r=b['get'](q['id']);if(r===undefined)continue;try{const s=await c['read'](r,'service',c['env']);if(s===undefined||s===null){f['push']({'name':'readback:'+q['id'],'ok':![],'detail':'service\x20'+r+'\x20not\x20readable\x20after\x20creation'});continue;}const t=planAllocatorRows(a)['length'],u=s['order_allocators']?.['allocators']?.['length']??(Array['isArray'](s['order_allocators'])?s['order_allocators']['length']:undefined);u!==undefined&&f['push']({'name':'readback:'+q['id']+':allocators','ok':u>=t,'detail':'on-chain\x20allocator\x20rows\x20'+u+'\x20vs\x20plan\x20'+t});}catch(v){f['push']({'name':'readback:'+q['id'],'ok':![],'detail':v instanceof Error?v['message']:String(v)});}}}return{'ok':f['every'](w=>w['ok']),'checks':f};}
|
|
1
|
+
import{CREATABLE_OBJECTS,createsOf,isLate,isRef,resolveValue}from'./plan.js';import{auditPlan}from'./audit.js';import{normalizeGuardRowNames}from'./guard-fill.js';import{dryRunGateKey,hasDryRunAudit,recordDryRunAudit,setPendingPlanFunding,consumePendingPlanFunding,clearPendingPlanFunding}from'../tools/publish-gate-state.js';import{isDeterministicOutcomeMessage}from'./inflight.js';import{buildStampSuffix}from'../build-stamp.js';import{BUILTIN_TEMPLATES_VERSION}from'../knowledge/builtin-templates.js';function deriveCreated(a){if(Array['isArray'](a['created']))return a['created'];const b=Array['isArray'](a['objectChanges'])?a['objectChanges']:[];return b['filter'](d=>d?.['type']==='created'&&typeof d?.['objectId']==='string')['map'](d=>({'object':d['objectId'],'type_raw':d['objectType']}));}export function handlerExecutor(a){return async(b,c,d)=>{const {handleOnchainOperations:e}=await import('../tools/handlers/onchain.js'),f=await e({'operation_type':b,'data':c,'env':d===undefined?a:d}),g=f['structuredContent']??{},h=g['result']!==undefined&&g['result']['data']!==undefined?g['result']:g,i=h['data']?.['result']??h['result']??h,j=h['outcome']??h['data']?.['outcome']??g['outcome']??g['status'];return{'outcome':j==='executed'||j==='success'?'executed':j==='pending_input'?'pending_input':'failed','digest':i['digest']??h['digest'],'created':deriveCreated(i),'error':i['error']??h['error']};};}function normalizeGuardTable(a,b){if(!Array['isArray'](a))return{'table':a,'description':b};return normalizeGuardRowNames(a,b,MAX_DESCRIPTION_CONTENT);}const MAX_DESCRIPTION_CONTENT=0xf9e,MAX_POLICY_DESCRIPTION_BYTES=0x1f4;export function truncateProseUtf8(a,b){if(Buffer['byteLength'](a,'utf8')<=b)return a;let c=0x0,d=a['length'];while(c<d){const i=c+d+0x1>>0x1;if(Buffer['byteLength'](a['slice'](0x0,i),'utf8')<=b)c=i;else d=i-0x1;}const e=a['slice'](0x0,c),f=Math['max'](0x1,Math['floor'](e['length']/0x2)),g=Math['max'](e['lastIndexOf']('。'),e['lastIndexOf']('.'),e['lastIndexOf']('.'),e['lastIndexOf']('!'),e['lastIndexOf']('!'),e['lastIndexOf']('?'),e['lastIndexOf']('?'),e['lastIndexOf'](';'),e['lastIndexOf'](';'));if(g+0x1>=f)return e['slice'](0x0,g+0x1)['trimEnd']();const h=e['lastIndexOf']('\x20');if(h+0x1>=f)return e['slice'](0x0,h)['trimEnd']();return e['trimEnd']();}function truncateToBytes(a,b){return truncateProseUtf8(a,b);}function truncateDescription(a){if(typeof a!=='string')return a;if(Buffer['byteLength'](a,'utf8')>MAX_DESCRIPTION_CONTENT)return truncateToBytes(a,MAX_DESCRIPTION_CONTENT-0x3)+'...';return a;}export function adaptConfigureParams(a,b){if(a==='pause'&&b!==null&&typeof b==='object'&&!Array['isArray'](b))return b['pause'];if(a==='setting_lock_duration_add'&&b!==null&&typeof b==='object'&&!Array['isArray'](b)){const c=b['setting_lock_duration_add'];if(typeof c==='number'&&Number['isFinite'](c))return c;}if(a==='guard_add'&&b!==null&&typeof b==='object'&&!Array['isArray'](b))return[b];if(a==='coin_add'&&b!==null&&typeof b==='object'&&!Array['isArray'](b)){const d=b,e=d['coin'];if(d['balance']===undefined&&(typeof e==='number'||typeof e==='string'&&/^[0-9]+$/['test'](e)))return{'balance':e};}if(a==='order_allocators'&&b!==null&&typeof b==='object'){const f=b,g=f['allocators'];if(Array['isArray'](g)){const h=g['map'](i=>{const j=i,k=j['sharing'];if(!Array['isArray'](k))return i;return{...j,'sharing':k['map'](m=>{const n=m,o=n['who'];if(o&&typeof o['Entity']==='string')return{...n,'who':{'Entity':{'name_or_address':o['Entity']}}};return m;})};});return{...f,'allocators':h};}}if(a==='sales'&&b!==null&&typeof b==='object'){const i=b,j=i['sales'];if(Array['isArray'](j)){const k=j['map'](l=>{if(!l||typeof l!=='object')return l;const m=l,n=m['stock']??m['quantity']??0x0;return{'suspension':![],'wip':'',...m,'stock':n};});return{...i,'sales':k};}}if(a==='policies'&&b!==null&&typeof b==='object'&&!Array['isArray'](b)){const l=b,m=l['policy'];if(Array['isArray'](m))return{...l,'policy':m['map'](n=>{if(!n||typeof n!=='object')return n;const o=n;return{...Array['isArray'](o['write_guard'])?null:{'write_guard':[]},...o,...typeof o['description']==='string'?{'description':truncateToBytes(o['description'],MAX_POLICY_DESCRIPTION_BYTES)}:{}};})};}return b;}export function adaptCreateData(a,b){const {name:c,permission:d,type_parameter:e,nodes:f,...g}=b;if(g['description']!==undefined)g['description']=truncateDescription(g['description']);switch(a['object']){case'service':case'arbitration':return{'object':{'name':c,'type_parameter':e,'permission':d},...g};case'machine':return{'object':{'name':c,...d!==undefined?{'permission':d}:{}},...g['description']!==undefined?{'description':g['description']}:{},'node':{'op':'add','nodes':f,'bReplace':!![]}};case'guard':{const h=normalizeGuardTable(b['table'],b['description']),{purpose:i,...j}=b;return{...j,'description':truncateDescription(h['description']),'table':h['table']};}case'permission':case'contact':case'repository':default:{const k=g['policies'];return{'object':{'name':c,...d!==undefined?{'permission':d}:{}},...g,...a['object']==='repository'&&Array['isArray'](k)?{'policies':{'op':'set','policy':k['map'](l=>{if(!l||typeof l!=='object')return l;const m=l;return{...Array['isArray'](m['write_guard'])?null:{'write_guard':[]},...m,...typeof m['description']==='string'?{'description':truncateToBytes(m['description'],MAX_POLICY_DESCRIPTION_BYTES)}:{}};})}}:{}};}}}export function preflightPlan(a){const b=auditPlan(a),c=new Set(b['findings']['map'](i=>i['rule_id'])),d=c['has']('ARB-KEY-PLANE-01'),e=b['issues']['length']===0x0&&!b['findings']['some'](i=>i['level']==='critical')&&!d,f=b['facts']['settlement_triggers_display'],g='version\x20anchor\x20(K3\x20invariant\x208):\x20templates\x20v'+BUILTIN_TEMPLATES_VERSION+buildStampSuffix(),h=a['steps']['map'](i=>{if(i['op']!=='publish')return i;const j=i['preflight']['map'](k=>{const l=k['check']['endsWith']('_publish')?e:!c['has'](k['check']),m=[];(k['check']['endsWith']('_publish')||k['check']==='SETTLEMENT-TRIGGER-SCOPE')&&(typeof f==='string'&&f['length']>0x0&&m['push']('who\x20can\x20trigger\x20settlement\x20(settlement_triggers):\x20'+f));if(k['check']['endsWith']('_publish'))m['push'](g);const n=m['length']>0x0?m['join']('\x20|\x20'):undefined;return{...k,'status':l?'pass':'fail',...n!==undefined?{'detail':n}:{}};});return{...i,'preflight':j};});return{'plan':{...a,'steps':h},'audit':b};}export function bindAuditPlan(a){const b=new Map();for(const h of a['steps']){if(h['op']!=='create')continue;const i=h['params']['name'];if(typeof i==='string'&&i['length']>0x0)b['set'](i,h['id']);}const c=new Set(a['external_refs']??[]),d=[],e=new Set(['value','Entity','name_or_address','objects','coin']),f=(j,k,l,m)=>{if(!e['has'](l))return;b['has'](m)&&d['push']({'step':j,'slot':k,'kind':'intra_plan_bare_name','value':m});},g=(j,k,l)=>{if(b['has'](l))d['push']({'step':j,'slot':k,'kind':'intra_plan_bare_name','value':l});else!c['has'](l)&&d['push']({'step':j,'slot':k,'kind':'undeclared_external','value':l});};for(const j of a['steps']){if(j['op']==='configure'){const m=j['target'];if(typeof m==='string')f(j['id'],'target','value',m);else{if(isLate(m)){const n=m['$late'];if(n['by']==='local_name')g(j['id'],'target',n['mark']);}}}if(j['op']==='publish')continue;const k=j['params'];if(typeof k==='string')f(j['id'],'params','value',k);const l=(o,p,r)=>{if(o===null||o===undefined)return;if(Array['isArray'](o)){o['forEach']((u,w)=>l(u,p,r+'['+String(w)+']'));return;}if(typeof o==='object'){if(isRef(o))return;if(isLate(o)){const u=o['$late'];if(u['by']==='local_name')g(j['id'],r,u['mark']);return;}for(const [w,x]of Object['entries'](o)){l(x,w,r==='params'?'params.'+w:r+'.'+w);}return;}if(typeof o==='string')f(j['id'],r,p,o);};l(k,'','params');}return d;}function retrievalFor(a){if(a==='service')return'stop\x20new\x20orders\x20first\x20(onchain_operations\x20data\x20key\x20\x27pause\x27),\x20then\x20take\x20the\x20fund\x20back\x20'+'(data\x20key\x20\x27compensation_fund_withdraw\x27,\x20owner\x20signer\x20—\x20the\x20pool\x20returns\x20to\x20the\x20owner)';if(a==='arb'||a==='arbitration')return'withdraw\x20arbitration\x20fees\x20(onchain_operations\x20data\x20key\x20\x27arb_withdraw\x27,\x20arbitrator\x20signer):\x20from\x20state\x205\x20'+'(Finished)\x20immediately;\x20from\x20state\x203\x20(ruled,\x20objection\x20window\x20open)\x20ONLY\x2030\x20days\x20after\x20the\x20ruling\x20—\x20'+'before\x20expiry\x20the\x20object\x20is\x20locked\x20until\x20<ruling_time\x20+\x2030\x20days>\x20and\x20teardown\x20is\x20refused;\x20from\x20state\x204\x20'+'(objectionable)\x20NEVER.\x20Then\x20cash\x20out\x20via\x20the\x20arb\x20fees_transfer\x20chain\x20(arb\x20→\x20recipient\x20→\x20LocalMark\x20→\x20WOW)';if(a==='permission')return'holds\x20no\x20build-time\x20money\x20—\x20a\x20Permission\x20carries\x20no\x20recoverable\x20funds;\x20a\x20frozen\x20one\x20only\x20leaves\x20'+'LocalMark\x20name\x20clutter\x20(same\x20advice\x20as\x20frozen\x20leftovers)';if(a==='reward')return'drain\x20the\x20pool\x20(onchain_operations\x20data\x20key\x20\x27withdraw\x27,\x20owner\x20signer;\x20'+'confirm\x20the\x20pool\x20balance\x20first\x20—\x20a\x20short\x20pool\x20aborts\x20cleanly\x20without\x20paying)';return'holds\x20no\x20build-time\x20money;\x20create-frozen\x20—\x20it\x20cannot\x20be\x20deleted\x20or\x20unbound.\x20'+'Remove\x20its\x20LocalMark\x20name\x20(local_mark_operation)\x20so\x20later\x20runs\x20never\x20bind\x20it\x20by\x20name';}export function bindRecoveryList(a,b){const c=new Map(a['steps']['map'](g=>[g['id'],g])),d=new Map();for(const g of a['steps']){if(g['op']!=='configure')continue;if(g['method']!=='coin_add'&&g['method']!=='compensation_fund_add')continue;const h=g['target'],i=h!==null&&typeof h==='object'?h['$ref']:undefined,j=g['params']?.['balance'];typeof i==='string'&&(typeof j==='string'||typeof j==='number')&&d['set'](i,String(j));}const e=[],f=(k,l)=>{const m=c['get'](k),n=m?.['op']==='create'?m:undefined,o=n?.['object'],p=n?String(n['params']['name']??''):'',q=d['get'](k);e['push']({'step':k,...o!==undefined?{'kind':o}:{},...p?{'object':p}:{},...l?{'address':l}:{},...q!==undefined?{'funded':q}:{},...o!==undefined?{'retrieval':retrievalFor(o)}:{}});};if(b)for(const [k,l]of Object['entries'](b)){f(k,typeof l==='string'&&l['length']>0x0?l:undefined);}else{for(const m of a['steps'])if(m['op']==='create')f(m['id']);}return e;}function teardownPlan(a){if(a['length']===0x0)return'';const b=[],c=a['find'](d=>d['kind']==='service');c!==undefined&&b['push']('\x20\x201.\x20stop\x20new\x20orders:\x20onchain_operations\x20on\x20the\x20Service'+(c['address']?'\x20'+c['address']:'')+'\x20with\x20data\x20key\x20\x27pause\x27.','\x20\x202.\x20take\x20the\x20compensation\x20fund\x20back:\x20the\x20same\x20Service,\x20data\x20key\x20\x27compensation_fund_withdraw\x27\x20(owner\x20signer\x20—\x20the\x20pool\x20returns\x20to\x20the\x20owner;\x20real\x20money\x20only\x20if\x20the\x20money-in\x20step\x20ran\x20—\x20confirm\x20the\x20balance\x20first).');for(const d of a['filter'](e=>e['kind']==='reward')){b['push']('\x20\x20'+(b['length']+0x1)+'.\x20drain\x20the\x20reward\x20pool'+(d['address']?'\x20'+d['address']:'')+':\x20data\x20key\x20\x27withdraw\x27\x20(owner\x20signer;\x20confirm\x20the\x20pool\x20balance\x20first\x20—\x20a\x20short\x20pool\x20aborts\x20cleanly).');}for(const e of a['filter'](f=>f['kind']==='arb'||f['kind']==='arbitration')){b['push']('\x20\x20'+(b['length']+0x1)+'.\x20arbitration\x20fees'+(e['address']?'\x20on\x20'+e['address']:'')+':\x20data\x20key\x20\x27arb_withdraw\x27\x20(arbitrator\x20signer)\x20—\x20IF\x20the\x20arb\x20is\x20in\x20state\x205\x20(Finished)\x20withdraw\x20immediately;\x20IF\x20it\x20sits\x20in\x20state\x203\x20(ruled,\x20objection\x20window\x20open)\x20it\x20is\x20locked\x20until\x20<ruling_time\x20+\x2030\x20days>\x20—\x20teardown\x20refused\x20until\x20that\x20date,\x20then\x20retry;\x20state\x204\x20(objectionable)\x20can\x20NEVER\x20withdraw.');}return a['some'](f=>f['kind']!==undefined&&f['kind']!=='service'&&f['kind']!=='reward')&&b['push']('\x20\x20'+(b['length']+0x1)+'.\x20frozen\x20leftovers\x20(guards,\x20machine,\x20repositories)\x20cannot\x20be\x20deleted\x20or\x20unbound\x20—\x20they\x20stay\x20inert\x20on\x20chain;\x20remove\x20their\x20LocalMark\x20names\x20(local_mark_operation)\x20so\x20later\x20runs\x20never\x20bind\x20them\x20by\x20name.'),'\x0aTEARDOWN\x20PLAN\x20(abandon\x20this\x20run\x27s\x20store\x20—\x20execute\x20top\x20to\x20bottom):\x0a'+b['join']('\x0a');}export function bindAuditReport(a,b){const c=a['slice'](0x0,0xc)['map'](e=>'\x20\x20•\x20step\x20\x27'+e['step']+'\x27\x20'+e['slot']+'\x20->\x20\x27'+e['value']+'\x27\x20('+(e['kind']==='intra_plan_bare_name'?'names\x20an\x20object\x20THIS\x20plan\x20creates\x20—\x20must\x20be\x20{\x22$ref\x22:\x20\x22<create_step_id>\x22}':'undeclared\x20external\x20local_name\x20—\x20declare\x20it\x20in\x20plan.external_refs\x20or\x20bind\x20a\x20plan\x20ref')+')'),d=b['length']>0x0?b['map'](e=>{const f=e['object']!==undefined?(e['kind']??'object')+':\x20'+e['object']:e['kind']??'';return'\x20\x20•\x20'+e['step']+(f?'\x20('+f+')':'')+(e['address']!==undefined?'\x20@'+e['address']:'\x20—\x20no\x20address\x20recorded\x20—\x20find\x20the\x20object\x20by\x20its\x20name\x20(workspace/onchain_objects)\x20or\x20its\x20create\x20digest')+(e['funded']!==undefined?';\x20plan-funded\x20'+e['funded']+'\x20raw\x20(confirm\x20the\x20live\x20balance\x20before\x20relying\x20on\x20it)':'')+(e['retrieval']!==undefined?';\x20take\x20back:\x20'+e['retrieval']:'');})['join']('\x0a'):'\x20\x20•\x20(none\x20—\x20nothing\x20was\x20executed\x20in\x20this\x20run;\x20no\x20funds\x20or\x20objects\x20to\x20recover)';return'Offending\x20slots:\x0a'+c['join']('\x0a')+(a['length']>0xc?'\x0a\x20\x20…\x20+'+(a['length']-0xc)+'\x20more':'')+'\x0a'+('RECOVERY\x20LIST\x20(objects\x20already\x20created\x20by\x20this\x20run\x20—\x20id\x20+\x20digest/address\x20—\x20so\x20you\x20can\x20recover\x20funds/objects):\x0a'+d)+teardownPlan(b);}function stripGenerics(a){return a['replace'](/<.*>$/,'');}function matchCreated(a,b){const c=stripGenerics(b);return a['created']['find'](d=>{if(typeof d['type_raw']!=='string'||typeof d['object']!=='string')return![];return stripGenerics(d['type_raw'])['endsWith']('::'+c);})?.['object'];}async function recoverTimedOutCreate(a,b,c,d,e,f){if(a['recoverCreated']===undefined)return undefined;if(isDeterministicOutcomeMessage(f['error']??''))return undefined;const g=CREATABLE_OBJECTS[b['object']];if(typeof g!=='string'||g['length']===0x0)return undefined;return a['recoverCreated']({'op':b['object'],'data':c,'env':d,'startedAtMs':e,...f['digest']!==undefined?{'digest':f['digest']}:{},'expectedTypeSuffix':stripGenerics(g)});}export function planUsesEnvSigner(a){let b=![];const c=d=>{if(b||d===null||typeof d!=='object')return;if(Array['isArray'](d)){for(const g of d)c(g);return;}const e=d,f=e['$late'];if(f?.['by']==='env_signer'){b=!![];return;}for(const h of Object['values'](e))c(h);};for(const d of a['steps']){if(b)break;c(d['params']),c(d['target']);}return b;}const DEFAULT_LATE=a=>{if(a['by']==='address'){if(typeof a['address']!=='string'||a['address']['length']===0x0)throw new Error('unresolved\x20late\x20binding\x20{$late:{by:\x27address\x27}}\x20resolved\x20to\x20an\x20EMPTY\x20value\x20—\x20an\x20empty\x20Entity/name\x20slot\x20makes\x20the\x20SDK\x20substitute\x20the\x20deployer\x27s\x20own\x20account\x20(cour\x20ENTITY-LATENAME),\x20so\x20this\x20is\x20a\x20hard\x20stop;\x20bind\x20a\x20real\x20address');return a['address'];}if(a['by']==='env_signer')throw new Error('unresolved\x20late\x20binding\x20{$late:{by:\x27env_signer\x27}}\x20(no\x20envSignerRef\x20injected)\x20—\x20pass\x20env.account\x20(the\x20default\x20signing\x20account)\x20to\x20plan_execute');if(typeof a['mark']!=='string'||a['mark']['length']===0x0)throw new Error('unresolved\x20late\x20binding\x20{$late:{by:\x27local_name\x27}}\x20with\x20an\x20EMPTY\x20mark\x20—\x20an\x20empty\x20Entity/name\x20slot\x20makes\x20the\x20SDK\x20substitute\x20the\x20deployer\x27s\x20own\x20account\x20(cour\x20ENTITY-LATENAME),\x20so\x20this\x20is\x20a\x20hard\x20stop;\x20declare\x20and\x20register\x20the\x20LocalMark\x20name\x20first');throw new Error('unresolved\x20late\x20binding\x20(no\x20resolver\x20injected):\x20local_name\x20\x27'+a['mark']+'\x27');};export const CAMPAIGN_DEADLINE_MIN_LEAD_MS=0xa*0xea60;export function reanchorCampaignDeadline(a,b){const c=a['derived_params']?.['find'](m=>m['param']==='campaign_deadline_ms');if(!c||!(c['input']>0x0))return{'plan':a};const d=c['from']==='campaign_duration_hours'?0x36ee80:0x5265c00,e=b??Date['now'](),f=Math['round'](e+c['input']*d),g=c['value'];if(f===g)return{'plan':a};let h=0x0;const i=m=>{if(Array['isArray'](m))return m['map'](i);if(m!==null&&typeof m==='object'){const n=m;if(n['value_type']==='U64'&&n['value']===g)return h+=0x1,{...n,'value':f};const o={};for(const [p,q]of Object['entries'](n))o[p]=i(q);return o;}return m;},j=a['steps']['map'](m=>m['op']==='create'?{...m,'params':i(m['params'])}:m),k={...a['inputs']};if(k['campaign_deadline_ms']===g)k['campaign_deadline_ms']=f;const l=(a['derived_params']??[])['map'](m=>m===c?{...m,'value':f,'at_ms':e,'note':m['note']+';\x20RE-ANCHORED\x20at\x20materialize\x20(W6-01):\x20the\x20EXECUTED\x20value\x20is\x20the\x20'+('materialize\x20instant\x20+\x20'+c['input']+'\x20')+(c['from']==='campaign_duration_hours'?'hour(s)':'day(s)')+'\x20—\x20the\x20compile-time\x20constant\x20is\x20superseded'}:m);return{'plan':{...a,'steps':j,'inputs':k,'derived_params':l},'reanchor':{'param':'campaign_deadline_ms','from_value':g,'to_value':f,'anchor_ms':e,'from_source':c['from'],'input':c['input'],'cells_rewritten':h}};}export function campaignDeadlineFreshness(a,b){const c=a['inputs']?.['campaign_deadline_ms'],d=typeof c==='number'?c:Number(c);if(!Number['isFinite'](d)||d<=0x0)return undefined;const e=b??Date['now']();if(e>=d)return{'code':'CAMPAIGN_DEADLINE_PAST','deadline_ms':d,'now_ms':e,'detail':'campaign_deadline_ms\x20('+d+')\x20has\x20already\x20passed\x20(now\x20'+e+')\x20—\x20the\x20round\x20is\x20'+'CAMPAIGN-CLOSED\x20before\x20a\x20single\x20step\x20ran;\x20nothing\x20was\x20executed.\x20Rebuild\x20the\x20plan:\x20pass\x20'+'campaign_duration_days\x20/\x20campaign_duration_hours\x20(the\x20deadline\x20is\x20RE-ANCHORED\x20at\x20'+'materialize\x20time,\x20so\x20lag\x20can\x20never\x20expire\x20it)\x20or\x20a\x20fresh\x20campaign_deadline_ms.\x20'+'An\x20explicit\x20absolute\x20deadline\x20is\x20a\x20strict\x20static\x20opt-in\x20and\x20is\x20never\x20re-anchored.'};if(d-e<CAMPAIGN_DEADLINE_MIN_LEAD_MS)return{'code':'CAMPAIGN_DEADLINE_IMMINENT','deadline_ms':d,'now_ms':e,'detail':'campaign_deadline_ms\x20('+d+')\x20is\x20under\x20'+Math['round'](CAMPAIGN_DEADLINE_MIN_LEAD_MS/0xea60)+'\x20'+('minutes\x20away\x20(now\x20'+e+')\x20—\x20by\x20the\x20time\x20any\x20buyer\x20sees\x20the\x20listing\x20the\x20round\x20is\x20a\x20polarity\x20')+'coin\x20flip;\x20nothing\x20was\x20executed.\x20Rebuild\x20with\x20a\x20longer\x20campaign_duration_*\x20or\x20a\x20later\x20deadline.'};return undefined;}export async function materializePlan(a,b,c){const d=(c?.['completedSteps']?.['length']??0x0)>0x0,f=d?{'plan':a}:reanchorCampaignDeadline(a);a=f['plan'];const g=campaignDeadlineFreshness(a),{plan:h,audit:i}=preflightPlan(a);if(g)return{'steps':h['steps']['map'](x=>({'stepId':x['id'],'status':'blocked','error':g['code']+':\x20'+g['detail']})),'outputs':{},'completed':![],'budgetExhausted':![],'preflight':i,'readback':{'ok':![],'checks':[{'name':'campaign_deadline_freshness','ok':![],'detail':g['detail']}]}};const j=new Map(Object['entries'](c?.['outputs']??{})),k=new Set(c?.['completedSteps']??[]),l=[],m=b['resolveLate']??DEFAULT_LATE,n=x=>{if(x['by']==='env_signer'){if(typeof b['envSignerRef']==='string'&&b['envSignerRef']['length']>0x0)return b['envSignerRef'];throw new Error('step\x20carries\x20{$late:{by:\x27env_signer\x27}}\x20but\x20no\x20default\x20account\x20was\x20provided\x20—\x20pass\x20env.account\x20to\x20plan_execute');}const y=m(x);if(typeof y!=='string'||y['length']===0x0)throw new Error('unresolved\x20late\x20binding\x20{$late:'+JSON['stringify'](x)+'}\x20resolved\x20to\x20an\x20EMPTY\x20value\x20—\x20an\x20empty\x20Entity/name\x20slot\x20makes\x20the\x20SDK\x20substitute\x20the\x20deployer\x27s\x20own\x20account\x20(cour\x20ENTITY-LATENAME);\x20fail-closed,\x20register/bind\x20the\x20value\x20first');return y;},o=new Map(h['steps']['filter'](x=>x['op']==='create')['map'](x=>[x['id'],x['object']])),p=x=>resolveValue(x,j,n),q=x=>{if(x['account']===undefined)return b['env'];const y=b['envByAccount']?.[x['account']];if(y===undefined)throw new Error('step\x20\x27'+x['id']+'\x27\x20declares\x20account\x20\x27'+x['account']+'\x27\x20but\x20no\x20env\x20was\x20provided\x20for\x20it\x20—\x20'+('re-run\x20plan_execute\x20with\x20accounts[\x22'+x['account']+'\x22]\x20(a\x20declared\x20account\x20never\x20falls\x20back\x20')+'to\x20the\x20default\x20signer:\x20the\x20controller\x20identity\x20is\x20the\x20point)');return y;};let r=![],s='halted\x20by\x20earlier\x20failure/blocked\x20publish';const t=x=>{l['push'](x);try{b['onStepResult']?.(x);}catch{}},u=b['timeoutMs']!==undefined&&b['timeoutMs']>0x0?Date['now']()+b['timeoutMs']:undefined;let v=![];for(const [x,y]of h['steps']['entries']()){if(r){t({'stepId':y['id'],'status':'blocked','error':s});continue;}if(k['has'](y['id'])){if(o['has'](y['id'])){const z=j['get'](y['id']);if(z===undefined){t({'stepId':y['id'],'status':'failed','error':'resumed\x20create\x20step\x20has\x20no\x20recorded\x20output\x20—\x20pass\x20its\x20created\x20address\x20in\x20previous_outputs'}),r=!![];continue;}t({'stepId':y['id'],'status':'executed','address':z,'error':'resumed\x20from\x20a\x20prior\x20run\x20(adopted,\x20not\x20re-executed)'});continue;}t({'stepId':y['id'],'status':'executed','error':'resumed\x20from\x20a\x20prior\x20run\x20(adopted,\x20not\x20re-executed)'});continue;}if(u!==undefined&&Date['now']()>=u){v=!![],r=!![],s='time\x20budget\x20('+b['timeoutMs']+'ms)\x20exhausted\x20before\x20this\x20step\x20—\x20RESUME,\x20not\x20re-run:\x20send\x20plan_execute\x20again\x20with\x20completed_steps\x20=\x20every\x20stepId\x20whose\x20status\x20is\x20\x27executed\x27,\x20previous_outputs\x20=\x20outputs',t({'stepId':y['id'],'status':'blocked','error':s});continue;}try{if(y['op']==='publish'){const E=y['preflight']['filter'](Q=>Q['status']==='fail');if(E['length']>0x0){t({'stepId':y['id'],'status':'blocked','error':'preflight\x20failed:\x20'+E['map'](Q=>Q['check'])['join'](',\x20')+'\x20(refusing\x20to\x20publish\x20—\x20A-2)'});continue;}const F=p(y['target']),G=o['get'](y['target']['$ref'])??'',H={'object':F,'publish':!![]},I=h['steps']['find'](Q=>Q['op']==='create'&&Q['id']===y['target']['$ref']),J=I?.['params']?.['reentry_kind'];typeof J==='string'&&J!=='none'&&(H['reentry_kind']=J);const K=h['steps']['some'](Q=>Q['op']==='configure'&&Q['method']==='voting_guard');K&&G==='service'&&(H['arbitration_open_vote_ack']=!![]);const L={};for(let Q=x+0x1;Q<h['steps']['length'];Q++){const R=h['steps'][Q];if(R['op']!=='configure'||R['method']!=='coin_add')continue;const S=R['params']?.['balance'],T=typeof S==='number'?S:Number(S);if(!Number['isFinite'](T)||T<=0x0)continue;try{const U=p(R['target']);typeof U==='string'&&U!==''&&(L[U['toLowerCase']()]=(L[U['toLowerCase']()]??0x0)+T);}catch{}}setPendingPlanFunding(L);const M=q(y),N=M?.['dry_run']===!![];let O;if(!N&&!hasDryRunAudit(dryRunGateKey('onchain_operations',{'operation_type':G,'data':H}))){const V=await b['execute'](G,H,{...M,'dry_run':!![]});if(V['outcome']!=='executed'){t({'stepId':y['id'],'status':'blocked','error':'AUTO\x20DRY-RUN\x20PRESTEP\x20(ruling\x202026-11-04):\x20the\x20dry_run:true\x20simulation\x20of\x20THIS\x20'+'publish\x20payload\x20FAILED\x20—\x20the\x20formal\x20publish\x20is\x20BLOCKED,\x20never\x20broadcast.\x20'+('Dry-run\x20diagnostics:\x20'+(V['error']??V['outcome']))}),r=!![];continue;}recordDryRunAudit(dryRunGateKey('onchain_operations',{'operation_type':G,'data':H})),O='AUTO\x20DRY-RUN\x20PRESTEP\x20(ruling\x202026-11-04):\x20the\x20dry_run:true\x20simulation\x20of\x20THIS\x20exact\x20payload\x20PASSED\x20and\x20registered\x20the\x20session\x20ledger;\x20the\x20formal\x20face\x20follows.';}const P=await b['execute'](G,H,M);if(P['outcome']!=='executed'){t({'stepId':y['id'],'status':'failed',...P['digest']!==undefined?{'digest':P['digest']}:{},'error':P['error']??P['outcome']}),r=!![];continue;}t({'stepId':y['id'],'status':'executed','digest':P['digest'],'address':F,...O!==undefined?{'error':O}:{}});continue;}const A=isRef(y['params'])?p(y['params']):Object['fromEntries'](Object['entries'](y['params'])['map'](([W,X])=>[W,p(X)]));if(y['op']==='create'){const W=adaptCreateData(y,A),X=q(y),Y=Date['now'](),Z=await b['execute'](y['object'],W,X);if(Z['outcome']!=='executed'){const a1=await recoverTimedOutCreate(b,y,W,X,Y,Z)['catch'](()=>undefined);if(a1!==undefined){j['set'](y['id'],a1['object']),t({'stepId':y['id'],'status':'executed',...a1['digest']!==undefined?{'digest':a1['digest']}:{},'address':a1['object'],'recovered':!![],'error':'AUTO-RECOVERED\x20(timeout\x20reverse\x20lookup):\x20the\x20dispatch\x20outcome\x20was\x20never\x20observed,\x20but\x20exactly\x20ONE\x20'+(y['object']+'\x20created\x20by\x20this\x20sender\x20landed\x20inside\x20the\x20call\x20window\x20—\x20ADOPTED\x20as\x20this\x20step\x27s\x20output\x20')+'(recovered:true).\x20A\x20second,\x20blind\x20re-run\x20of\x20this\x20step\x20would\x20create\x20a\x20DUPLICATE;\x20continue\x20from\x20the\x20next\x20step.'});continue;}t({'stepId':y['id'],'status':'failed',...Z['digest']!==undefined?{'digest':Z['digest']}:{},'error':Z['error']??Z['outcome']}),r=!![];continue;}const a0=matchCreated(Z,CREATABLE_OBJECTS[y['object']]);if(a0===undefined){t({'stepId':y['id'],'status':'failed',...Z['digest']!==undefined?{'digest':Z['digest']}:{},'error':'created\x20'+y['object']+'\x20not\x20found\x20in\x20transaction\x20result'}),r=!![];continue;}j['set'](y['id'],a0),t({'stepId':y['id'],'status':'executed','digest':Z['digest'],'address':a0});continue;}const B=p(y['target']),C=o['get'](isRef(y['target'])?y['target']['$ref']:'')??'';if(C===''){t({'stepId':y['id'],'status':'failed','error':'PLAN_TARGET_REF_REQUIRED:\x20step\x20\x27'+y['id']+'\x27\x20target\x20does\x20not\x20trace\x20to\x20a\x20create\x20step\x20in\x20this\x20plan\x20—\x20'+'configure\x20targets\x20must\x20be\x20{\x22$ref\x22:\x20\x22<create_step_id>\x22}\x20(a\x20bare\x20name\x20binds\x20the\x20global\x20mark\x20namespace\x20across\x20runs,\x20W5-05)'}),r=!![];continue;}const D=await b['execute'](C,{'object':B,[y['method']]:adaptConfigureParams(y['method'],A)},q(y));if(y['method']==='coin_add')consumePendingPlanFunding(B);if(D['outcome']!=='executed'){t({'stepId':y['id'],'status':'failed',...D['digest']!==undefined?{'digest':D['digest']}:{},'error':D['error']??D['outcome']}),r=!![];continue;}t({'stepId':y['id'],'status':'executed','digest':D['digest'],'address':B});}catch(a2){const a3=a2?.['digest'];t({'stepId':y['id'],'status':'failed',...typeof a3==='string'&&a3?{'digest':a3}:{},'error':a2 instanceof Error?a2['message']:String(a2)});if(y['op']==='configure'&&y['method']==='coin_add')try{consumePendingPlanFunding(p(y['target']));}catch{}r=!![];}}clearPendingPlanFunding();const w=await verifyMaterialization(h,j,b,l);return{'steps':l,'outputs':Object['fromEntries'](j),'completed':l['length']>0x0&&l['every'](a4=>a4['status']==='executed'),'budgetExhausted':v,'preflight':i,'readback':w,...f['reanchor']?{'deadline_reanchor':f['reanchor']}:{}};}function planAllocatorRows(a){const b=[],c=d=>{if(typeof d==='object'&&d!==null&&!Array['isArray'](d)){const e=d;if(Array['isArray'](e['allocators']))d=e['allocators'];}if(!Array['isArray'](d))return;for(const f of d){if(typeof f==='object'&&f!==null)b['push'](f);}};for(const d of a['steps']){if(d['op']==='create'&&d['object']==='service')c(d['params']['order_allocators']);if(d['op']==='configure'&&d['method']==='order_allocators')c(d['params']['allocators']);}return b;}function declaredRepoPolicyNames(a,b){const c=[],d=e=>{if(!Array['isArray'](e))return;for(const f of e){const g=f?.['name'];if(typeof g==='string'&&g['trim']()!==''&&!c['includes'](g['trim']()))c['push'](g['trim']());}};for(const e of a['steps']){if(e['op']==='create'&&e['id']===b){d(e['params']['policies']);continue;}if(e['op']!=='configure'||e['method']!=='policies')continue;const f=e['target'],g=f!==null&&typeof f==='object'&&typeof f['$ref']==='string'?f['$ref']:undefined;if(g!==b)continue;if(e['params']['op']!=='add')continue;d(e['params']['policy']);}return c;}export function conservationCheck(a){const b=planAllocatorRows(a);if(b['length']===0x0)return[{'name':'allocator_conservation','ok':![],'detail':'no\x20allocator\x20rows\x20(PLAN-ALLOC-01)'}];const c=[];return b['forEach']((d,e)=>{const f=d['track']??'settlement',g=typeof d['guard']==='object'&&d['guard']!==null?String(d['guard']['$ref']??JSON['stringify'](d['guard'])['slice'](0x0,0x28)):String(d['guard']??'?'),h='conservation:'+f+'['+e+']'+(g!=='?'?'('+g+')':''),i=(d['sharing']??[])['map'](l=>l['mode']);if(i['some'](l=>l==='Amount')){c['push']({'name':h,'ok':!![],'detail':'contains\x20Amount-mode\x20row(s)\x20—\x20fixed\x20payouts\x20are\x20not\x20statically\x20verifiable\x20against\x20the\x20escrow\x20total'});return;}let j=0x0;for(const l of d['sharing']??[]){if(l['mode']==='Rate'||l['mode']==='RateGross')j+=Number(l['sharing']??0x0);}const k=i['some'](n=>n==='Surplus');if(j>0x2710)c['push']({'name':h,'ok':![],'detail':'rate\x20sum\x20'+j+'\x20>\x2010000\x20—\x20row\x20pays\x20out\x20MORE\x20than\x20it\x20holds'});else j<0x2710&&!k?c['push']({'name':h,'ok':![],'detail':'rate\x20sum\x20'+j+'\x20<\x2010000\x20and\x20no\x20Surplus\x20row\x20—\x20the\x20remainder\x20has\x20no\x20fund\x20exit'}):c['push']({'name':h,'ok':!![],'detail':k?'rate\x20sum\x20'+j+'\x20+\x20Surplus\x20row\x20absorbs\x20the\x20remainder':'rate\x20sum\x20'+j+'\x20==\x2010000'});}),c;}function moneyLegKey(a,b){const c=typeof a==='string'?a['trim']()['toLowerCase']():'';if(c!=='amount'&&c!=='rate')return undefined;const d=typeof b==='number'?b:typeof b==='string'&&/^\d+(?:\.\d+)?$/['test'](b['trim']())?Number(b):Number['NaN'];return Number['isFinite'](d)?c+':'+d:undefined;}async function verifyMaterialization(a,b,c,d=[]){const f=[...conservationCheck(a)],g=a['steps']['filter'](h=>h['op']==='create')['length'];if(g>0x0){const h=b['size'];f['push']({'name':'created_objects','ok':h>0x0,'detail':h+'\x20object(s)\x20materialized\x20on-chain\x20of\x20'+g+'\x20declared\x20create\x20step(s)'+(h===0x0?'\x20—\x20NOTHING\x20was\x20built;\x20treat\x20the\x20deployment\x20as\x20NOT\x20done':'')});}if(a['steps']['length']>0x0&&d['length']>0x0){const i=d['filter'](j=>j['status']==='executed')['length'];f['push']({'name':'executed_steps','ok':i===d['length'],'detail':i+'/'+d['length']+'\x20step(s)\x20executed\x20this\x20run'});}if(c['read']!==undefined){for(const j of createsOf(a,'repository')){const k=b['get'](j['id']);if(k===undefined)continue;const l=declaredRepoPolicyNames(a,j['id']);if(l['length']===0x0)continue;try{const m=await c['read'](k,'repository',c['env']);if(m===undefined||m===null){f['push']({'name':'readback:'+j['id'],'ok':![],'detail':'repository\x20'+k+'\x20not\x20readable\x20after\x20creation'});continue;}const n=new Set((Array['isArray'](m['policies'])?m['policies']:[])['map'](q=>typeof q?.['name']==='string'?q['name']['toLowerCase']():'')['filter'](Boolean)),o=l['filter'](p=>!n['has'](p['toLowerCase']()));f['push']({'name':'readback:'+j['id']+':policies','ok':o['length']===0x0,'detail':o['length']===0x0?'on-chain\x20policies\x20cover\x20the\x20'+l['length']+'\x20plan-declared:\x20'+l['join'](',\x20'):'PLAN\x20DECLARED\x20but\x20NOT\x20on-chain:\x20'+o['join'](',\x20')+'\x20(declared:\x20'+l['join'](',\x20')+';\x20chain:\x20'+([...n]['join'](',\x20')||'none')+').\x20Every\x20guard\x20leg\x20reading\x20a\x20missing\x20key\x20can\x20never\x20open\x20—\x20a\x20rating-floor\x20reward\x20becomes\x20permanently\x20unclaimable.\x20Fix\x20BEFORE\x20any\x20buyer\x20flow:\x20repository\x20policies\x20configure\x20{op:\x22add\x22,\x20policy:[{name:\x22'+o[0x0]+'\x22,\x20write_guard:\x22<the\x20credential\x20guard\x20ADDRESS\x20as\x20a\x20plain\x20string>\x22,\x20id_from:\x22none\x22,\x20value_type:\x22U64\x22,\x20description:\x22...\x22}]}\x20(permission\x20102\x20—\x20write_guard\x20must\x20be\x20the\x20guard\x20address\x20STRING,\x20the\x20object\x20form\x20is\x20schema-rejected),\x20then\x20re-verify.'});}catch(p){f['push']({'name':'readback:'+j['id'],'ok':![],'detail':p instanceof Error?p['message']:String(p)});}}for(const q of createsOf(a,'service')){const r=b['get'](q['id']);if(r===undefined)continue;try{const s=await c['read'](r,'service',c['env']);if(s===undefined||s===null){f['push']({'name':'readback:'+q['id'],'ok':![],'detail':'service\x20'+r+'\x20not\x20readable\x20after\x20creation'});continue;}const t=planAllocatorRows(a)['length'],u=s['order_allocators']?.['allocators']?.['length']??(Array['isArray'](s['order_allocators'])?s['order_allocators']['length']:undefined);u!==undefined&&f['push']({'name':'readback:'+q['id']+':allocators','ok':u>=t,'detail':'on-chain\x20allocator\x20rows\x20'+u+'\x20vs\x20plan\x20'+t});const v=s['order_allocators'],w=Array['isArray'](v?.['allocators'])?v['allocators']:undefined;if(w!==undefined&&w['some'](x=>Array['isArray'](x['sharing']))){const x=planAllocatorRows(a)['flatMap'](A=>typeof A==='object'&&A!==null&&Array['isArray'](A['sharing'])?A['sharing']:[])['map'](A=>moneyLegKey(A['mode'],A['sharing']))['filter'](A=>A!==undefined)['sort'](),y=w['flatMap'](A=>Array['isArray'](A['sharing'])?A['sharing']:[])['map'](A=>moneyLegKey(A['mode'],A['value']))['filter'](A=>A!==undefined)['sort'](),z=x['length']===y['length']&&x['every']((A,B)=>A===y[B]);f['push']({'name':'readback:'+q['id']+':constants','ok':z,'detail':z?'knob→allocator→constant\x20reconciliation:\x20all\x20'+x['length']+'\x20pinned\x20money\x20leg(s)\x20match\x20on-chain\x20(mode:value\x20multiset);\x20guard-window\x20time\x20constants\x20are\x20not\x20readable\x20on\x20this\x20channel\x20(disclosed\x20gap,\x20ddmc3\x20F-D3-16)':'MONEY-CONSTANT\x20MISMATCH\x20—\x20deployment\x20NOT\x20verified:\x20plan\x20legs\x20['+(x['join'](',\x20')||'none')+']\x20vs\x20on-chain\x20['+(y['join'](',\x20')||'none')+'].\x20A\x20pinned\x20Amount/Rate\x20constant\x20reached\x20the\x20chain\x20at\x20a\x20different\x20magnitude\x20than\x20the\x20plan\x20declares\x20(the\x20A8\x20money-scale\x20hazard\x20landing\x20post-compile).\x20Re-deploy\x20from\x20the\x20unmodified\x20plan;\x20never\x20hand-patch\x20allocator\x20numbers\x20between\x20compile\x20and\x20execute.'});}else(w!==undefined||v!==undefined&&v!==null)&&f['push']({'name':'readback:'+q['id']+':constants','ok':!![],'detail':'order_allocators\x20present\x20but\x20its\x20sharing\x20rows\x20are\x20unreadable\x20on\x20this\x20channel\x20—\x20constant\x20reconciliation\x20skipped\x20(data\x20gap,\x20not\x20a\x20mismatch)'});}catch(A){f['push']({'name':'readback:'+q['id'],'ok':![],'detail':A instanceof Error?A['message']:String(A)});}}}return{'ok':f['every'](B=>B['ok']),'checks':f};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{afterSalesRailRegex as a22a,afterSalesRailNodeMatches}from'../knowledge/template-scanner.js';import{TWO_TX_RENEW_RECIPE}from'../knowledge/protocol-facts.js';function emitAfterSalesGates(a,b){const c=[];if(a==='none')return c;const d=a22a(a),e=b['shape']['some'](f=>afterSalesRailNodeMatches(a,f['name']));return!e&&c['push']({'code':'AFTER_SALES_RAIL_MISSING','detail':'after_sales_mode\x20\x27'+a+'\x27\x20declares\x20a\x20buyer\x20after-sales\x20remedy,\x20but\x20machine_shape\x20has\x20no\x20'+('backing\x20rail\x20(no\x20node\x20matching\x20'+d+').\x20Add\x20the\x20'+a+'\x20node\x20family\x20')+'(e.g.\x20return_requested\x20->\x20returned\x20for\x20\x27return\x27)\x20as\x20a\x20node-gated\x20fund\x20rail\x20(decision\x2011:\x20NEVER\x20a\x20'+'claimed_by\x20leg\x20—\x20RAIL_CLAIMED_BY_LEG\x20critical)\x20anchored\x20on\x20the\x20delivered\x20ENTRY\x20time\x20'+'(INV-C2,\x20TIME-ANCHOR-01);\x20refund\x20and\x20award\x20are\x20independent\x20tracks\x20and\x20any\x20overlap\x20is\x20disclosed\x20'+'at\x20the\x20dual-payout\x20gate\x20(DUAL-RAIL-01).\x20Or\x20set\x20after_sales_mode\x20\x27none\x27\x20if\x20this\x20shop\x20ships\x20no\x20such\x20remedy.'}),c;}function emitAcceptanceGates(a,b){const c=[],d=[];if(a==='none')return{'blockers':c,'disclosures':d};const e=a==='contest'||a==='bounty'||a==='agent';e&&b['arbitrationMode']!=='third_party'&&c['push']({'code':'ACCEPTANCE_JUDGE_NOT_INDEPENDENT','detail':'acceptance_mode\x20\x27'+a+'\x27\x20is\x20a\x20judge-decided\x20acceptance\x20(a\x20third\x20party\x20rules\x20on\x20'+('release),\x20but\x20arbitration_mode\x20is\x20\x27'+(b['arbitrationMode']??'none')+'\x27,\x20not\x20\x27third_party\x27.\x20')+'The\x20party\x20owing\x20the\x20payout\x20must\x20not\x20also\x20decide\x20whether\x20it\x20is\x20owed\x20(merchant\x20self-adjudication,\x20'+'INV-A3).\x20Set\x20arbitration_mode\x20\x27third_party\x27\x20so\x20an\x20independent\x20venue/judge\x20Permission\x20rules\x20'+'(R2;\x20enforced\x20at\x20publish\x20by\x20controller-disjointness),\x20or\x20use\x20acceptance_mode\x20\x27milestone\x27\x20if\x20the\x20'+'buyer\x20genuinely\x20self-adjudicates.'});const f=b['feeParams']['revision_rounds_max'],g=typeof f==='number'||typeof f==='string'&&f['trim']()!==''&&/^\d+$/['test'](f['trim']());if(g){const h=b['guardSpecs']['some'](i=>i['host']==='repository'||/repository/i['test'](i['template_id']));!h&&c['push']({'code':'ACCEPTANCE_REVISION_UNBOUNDED','detail':'acceptance_mode\x20\x27'+a+'\x27\x20declares\x20a\x20bounded\x20revision\x20loop\x20'+('(fee_params.revision_rounds_max\x20=\x20'+String(f)+'),\x20but\x20no\x20counter-backed\x20Repository\x20')+'guard\x20exists.\x20The\x20chain\x20caps\x20EDGE\x20count\x20(MAX_FORWARD\x20/\x20MAX_NODE_PAIR),\x20never\x20VISIT\x20count,\x20'+'so\x20a\x20finite\x20cap\x20in\x20fee_params\x20alone\x20is\x20a\x20promise\x20the\x20chain\x20cannot\x20keep\x20(INV-A1).\x20Either\x20declare\x20'+'revision_rounds_max\x20\x27unlimited\x27\x20(the\x20honest\x20form\x20—\x20the\x20revision\x20loop\x20is\x20then\x20genuinely\x20'+'unbounded)\x20or\x20mount\x20a\x20counter-backed\x20Repository\x20guard\x20(pattern.repository_data_check\x20reading\x20a\x20'+'per-order\x20revision\x20tally\x20written\x20via\x20pattern.repository_write_authorization)\x20that\x20gates\x20the\x20'+'redelivery\x20forward\x20once\x20the\x20tally\x20reaches\x20the\x20cap.'});}if(a==='contest')d['push']('Winner\x20rule\x20(first-to-node):\x20the\x20winner\x20is\x20the\x20first\x20account\x20whose\x20forward\x20completes\x20entry\x20into\x20'+'the\x20adjudication\x20node\x20—\x20computable\x20from\x20the\x20order\x27s\x20Progress\x20history\x20(first\x20matching\x20entry,\x20earliest\x20'+'time);\x20ties\x20resolve\x20by\x20chain\x20timestamp.\x20This\x20rule\x20is\x20disclosed\x20for\x20judge/merchant\x20reference;\x20the\x20'+'chain\x20stores\x20no\x20winner\x20field\x20(F-RQD2-05).');else a==='bounty'&&d['push']('Winner\x20rule\x20(judge-accepted\x20triage):\x20winners\x20are\x20the\x20submitters\x20whose\x20reports\x20the\x20independent\x20judge\x20'+'accepts\x20(severity-ranked);\x20the\x20Progress\x20history\x20proves\x20who\x20delivered,\x20the\x20judge\x20permission\x20decides\x20'+'which\x20delivery\x20wins.');return{'blockers':c,'disclosures':d};}function emitInstallmentGates(a,b){const c=[];if(a==='none')return c;const d=/(due|owed|owing|unpaid|awaiting|pending)/i,f=/(paid|captured|funded|settled)/i,g=/(deposit|down_?pay|balance_due|balance_owed|awaiting|installment|milestone)/i,h=/(refund|cancel|exit|forfeit|kill|void|abandon|release|expire|lapse)/i,i=[];for(const s of b['shape']){const t=s['name'];for(const u of s['from']??[]){typeof u==='string'?i['push']({'prev':u,'target':t}):i['push']({'prev':u['prev'],'target':t,'guardKey':u['guard_key']});}}const j=i['filter'](w=>d['test'](w['prev'])&&f['test'](w['target'])&&(w['guardKey']===undefined||w['guardKey']['trim']()===''));j['length']>0x0&&c['push']({'code':'INSTALLMENT_FUNDING_UNGATED','detail':'installment_mode\x20\x27'+a+'\x27\x20captures\x20a\x20later\x20payment,\x20but\x20the\x20funding\x20forward(s)\x20'+j['map'](w=>'\x27'+w['prev']+'\x27\x20→\x20\x27'+w['target']+'\x27')['join'](',\x20')+'\x20carry\x20NO\x20guard_key.\x20A\x20bare\x20advance\x20records\x20the\x20balance\x20as\x20paid\x20WITHOUT\x20the\x20capture\x20landing\x20in\x20the\x20'+'Allocation\x20—\x20a\x20zero-value\x20advance\x20(INV-B1,\x20H4).\x20Bind\x20a\x20fund-gate\x20Guard\x20on\x20each\x20capture\x20forward\x20'+'(constant\x20=\x20order\x20address,\x20convert_witness\x20OrderAllocation(109),\x20allocation.balance\x20query\x201051\x20>=\x20the\x20'+'capture\x20amount).\x20PRE-STATE\x20CONSTRAINT\x20(esound-mn-261021\x20B-1,\x20mainnet-verified):\x20guards\x20read\x20the\x20'+'COMMITTED\x20pre-transaction\x20balance\x20—\x20funding\x20that\x20lands\x20in\x20the\x20SAME\x20PTB\x20(the\x20one-PTB\x20order_renew\x20'+'payment\x20half)\x20is\x20INVISIBLE\x20to\x20the\x20forward\x27s\x20guard,\x20so\x20a\x20balance-gated\x20capture\x20advanced\x20by\x20'+('order_renew\x20ALWAYS\x20aborts.\x20'+TWO_TX_RENEW_RECIPE+'\x20Pair\x20the\x20balance\x20gate\x20with\x20the\x20once\x20slot\x20')+'(H5\x20—\x20the\x20fund\x20gate\x20is\x20a\x20STATE\x20READ,\x20not\x20a\x20once)\x20so\x20a\x20replay\x20cannot\x20re-capture.'});const k=new Set(b['rows']['filter'](w=>w['track']==='refund'||w['track']==='settlement')['map'](w=>w['guard_key'])['filter'](w=>typeof w==='string'&&w['trim']()!=='')),l=new Set(b['shape']['map'](w=>w['name'])),m=new Map(b['shape']['map'](w=>[w['name'],w['semantic_role']])),o=new Set();for(const w of b['guardSpecs']){if(w['host']!=='machine'||!/allocator_node_gate|progress_state_check/['test'](w['template_id']))continue;if(!k['has'](w['key']))continue;for(const x of Object['values'](w['params']??{})){if(typeof x==='string'&&l['has'](x))o['add'](x);}}const p=new Map();for(const y of i){const z=p['get'](y['prev'])??[];z['push'](y['target']),p['set'](y['prev'],z);}const q=A=>{const B=new Set([A]),C=[...p['get'](A)??[]];while(C['length']>0x0){const D=C['pop']();if(o['has'](D))return!![];const E=m['get'](D);if(E==='final'||E==='cancelled')return!![];if(B['has'](D))continue;B['add'](D);for(const F of p['get'](D)??[])if(!B['has'](F))C['push'](F);}return![];},r=[];for(const A of b['shape']){if(!g['test'](A['name']))continue;const B=i['filter'](D=>D['prev']===A['name']),C=q(A['name']);if(!C){const D=B['filter'](E=>h['test'](E['target']))['map'](E=>'\x27'+E['target']+'\x27');r['push'](D['length']>0x0?A['name']+'\x20(keyword-named\x20target(s)\x20'+D['join'](',\x20')+'\x20reach\x20no\x20refund/settlement\x20rail\x20and\x20no\x20final/cancelled\x20state\x20—\x20the\x20NAME\x20alone\x20is\x20not\x20an\x20exit)':A['name']);}}return r['length']>0x0&&c['push']({'code':'INSTALLMENT_DEPOSIT_STRANDED','detail':'installment_mode\x20\x27'+a+'\x27\x20holds\x20a\x20buyer\x20payment\x20at\x20state(s)\x20'+r['map'](E=>'\x27'+E+'\x27')['join'](',\x20')+'\x20with\x20NO\x20deposit-exit\x20rail\x20(no\x20outgoing\x20refund\x20/\x20cancel\x20/\x20forfeit\x20/\x20expire\x20edge).\x20There\x20is\x20no\x20on-chain\x20'+'obligation\x20to\x20pay\x20the\x20balance\x20(INV-B2,\x20H1),\x20so\x20a\x20buyer\x20who\x20walks\x20away\x20strands\x20the\x20already-paid\x20portion\x20'+'at\x20that\x20node\x20permanently\x20(Machine\x20+\x20Allocator\x20immutable,\x20IMMUT-001).\x20Add\x20a\x20deposit-exit\x20rail\x20from\x20each\x20'+'held\x20state\x20—\x20a\x20refund/cancel\x20forward\x20into\x20an\x20exit\x20node\x20whose\x20allocator\x20returns\x20the\x20held\x20funds\x20to\x20the\x20'+'order\x20payer\x20(GuardIdentifier(0))\x20or\x20applies\x20the\x20declared\x20deposit_exit_policy\x20(full\x20refund\x20vs\x20a\x20kill\x20fee\x20'+'compensating\x20the\x20merchant\x20for\x20the\x20reserved\x20capacity).'}),c;}function emitAffiliateGates(a,b){const c=[];if(a==='none')return c;const d=/(commission|affiliate|referr|attribut|partner_?payout)/i,e=b['shape']['some'](i=>d['test'](i['name'])),f=b['rows']['some'](i=>d['test'](i['value_from']??'')||d['test'](i['recipient_key']??''));!e&&!f&&c['push']({'code':'AFFILIATE_RAIL_MISSING','detail':'affiliate_mode\x20\x27'+a+'\x27\x20declares\x20a\x20referral/affiliate\x20commission\x20overlay,\x20but\x20machine_shape\x20has\x20no\x20'+'commission-family\x20node\x20and\x20the\x20allocator\x20has\x20no\x20commission\x20row\x20—\x20a\x20declared\x20partner\x20payout\x20with\x20no\x20rail\x20to\x20'+'walk\x20it\x20is\x20a\x20false\x20promise\x20at\x20quote\x20time\x20(INV-D3).\x20Add\x20an\x20INDEPENDENT\x20commission\x20leg:\x20a\x20Rate\x20row\x20off\x20a\x20'+'dedicated\x20commission\x20pool\x20(never\x20a\x20Surplus/Rate\x20drain\x20of\x20the\x20buyer\x27s\x20goods\x20escrow\x20—\x20anti-grab-pool)\x20to\x20an\x20explicit\x20'+'non-empty\x20partner\x20Entity,\x20gated\x20by\x20a\x20window-anchored\x20claim\x20guard\x20(INV-D1\x20rides\x20TIME-ANCHOR-01)\x20so\x20the\x20'+'commission\x20is\x20claimable\x20only\x20after\x20the\x20attribution/refund\x20window\x20closes.'});const g=/(post-?lock|clawback|unrecoverable|irrevocab|no\s*(?:revers|recov|clawback)|cannot be reversed|once released|released commission)/i,h=b['buildNotes']['some'](i=>g['test'](i));return!h&&c['push']({'code':'AFFILIATE_CLAWBACK_UNDISCLOSED','detail':'affiliate_mode\x20\x27'+a+'\x27\x20declares\x20a\x20commission\x20but\x20no\x20build_note\x20discloses\x20the\x20post-lock\x20no-clawback\x20'+'truth\x20(INV-D2).\x20SOLE\x20TRUTH:\x20Allocation\x20distribute\x20is\x20a\x20ONE-WAY\x20outflow\x20(no\x20debit/clawback\x20primitive,\x20§11.0\x20G2),\x20'+'so\x20once\x20a\x20commission\x20is\x20RELEASED\x20it\x20CANNOT\x20be\x20reversed\x20on\x20chain\x20—\x20a\x20refund/chargeback\x20after\x20release\x20leaves\x20the\x20'+'affiliate\x20commission\x20unrecoverable.\x20Add\x20a\x20build_note\x20stating\x20this\x20honestly\x20(e.g.\x20\x22post-lock:\x20a\x20released\x20'+'affiliate\x20commission\x20is\x20unrecoverable\x20—\x20refunds\x20after\x20the\x20attribution\x20window\x20do\x20NOT\x20claw\x20back\x20the\x20'+'partner\x20payout\x22).\x20L-04/D-5:\x20never\x20imply\x20a\x20recovery\x20capability\x20the\x20chain\x20does\x20not\x20have.'}),c;}function emitCrowdfundingGates(a,b){const c=[];if(a==='none')return c;const d=/(releas|settle|funded|disburs|project)/i,e=/(refund|missed|unmet|return|reimburse)/i,f=b['shape']['some'](s=>d['test'](s['name'])),g=b['rows']['some'](s=>s['track']==='settlement'&&(d['test'](s['guard_key']??'')||d['test'](s['recipient_key']??''))),h=b['shape']['some'](s=>e['test'](s['name'])),i=b['rows']['some'](s=>s['track']==='refund'||e['test'](s['guard_key']??''));!f&&!g&&c['push']({'code':'CROWDFUNDING_THRESHOLD_GATE_MISSING','detail':'crowdfunding_mode\x20\x27'+a+'\x27\x20declares\x20a\x20campaign\x20but\x20machine_shape\x20has\x20no\x20release/settlement\x20'+'node\x20and\x20the\x20allocator\x20has\x20no\x20settlement\x20row\x20to\x20the\x20project\x20Entity\x20—\x20the\x20escrowed\x20contributions\x20would\x20'+'strand\x20at\x20the\x20deadline\x20with\x20no\x20exit\x20rail\x20(INV-E1).\x20Add\x20a\x20release\x20leg\x20(Rate\x2010000\x20to\x20a\x20NON-EMPTY\x20project\x20'+'Entity,\x20gated\x20at\x20the\x20campaign-deadline\x20settlement\x20terminal)\x20and,\x20for\x20a\x20threshold\x20campaign,\x20its\x20D-BUG-2\x20'+'refund\x20twin.'});a==='threshold'&&!h&&!i&&c['push']({'code':'CROWDFUNDING_THRESHOLD_GATE_MISSING','detail':'crowdfunding_mode\x20\x27threshold\x27\x20declares\x20an\x20all-or-nothing\x20campaign\x20but\x20there\x20is\x20NO\x20refund-family\x20node/row\x20—\x20'+'a\x20missed\x20goal\x20would\x20strand\x20every\x20contribution\x20instead\x20of\x20returning\x20it\x20(INV-E1\x20/\x20D-BUG-2).\x20Add\x20the\x20refund\x20'+'leg\x20(per-contributor,\x20order-anchored\x20user\x20slot\x200\x20—\x20the\x20submitted\x20Order,\x20never\x20slot\x20254;\x20node-gated\x20at\x20the\x20'+'refund\x20terminal,\x20decision\x2011\x20—\x20never\x20a\x20claimed_by\x20leg)\x20as\x20the\x20mutually-exclusive\x20twin\x20of\x20the\x20'+'release\x20leg:\x20aggregate\x20>=\x20goal\x20→\x20release;\x20aggregate\x20<\x20goal\x20→\x20refund.'});if(a==='threshold'){const s=b['guardSpecs']['filter'](v=>v['host']==='repository'||/repository_write/i['test'](v['template_id'])),t=s['length']>0x0,u=s['some'](v=>{const w=(v['policy']?.['id_from']??'')['toLowerCase']();return w==='signer'||w==='clock';});if(!t)c['push']({'code':'CROWDFUNDING_AGGREGATE_UNBOUND','detail':'crowdfunding_mode\x20\x27threshold\x27\x20gates\x20release\x20on\x20an\x20aggregate\x20funding\x20total,\x20but\x20no\x20host:\x22repository\x22\x20'+'write\x20policy\x20declares\x20the\x20contribution\x20rows\x20—\x20with\x20no\x20write-bound\x20policy\x20the\x20total\x20is\x20forgeable,\x20so\x20'+'anyone\x20could\x20inflate\x20the\x20aggregate\x20and\x20fake\x20a\x20\x27goal\x20met\x27\x20(INV-E2\x20/\x20R-X1-17:\x20existence-is-not-trust).\x20'+'Mount\x20pattern.repository_write_authorization\x20(identity\x20leaf\x20order.owner==Signer\x20/\x20order.agent\x20has\x20Signer)\x20'+'and\x20key\x20the\x20contribution\x20rows\x20by\x20the\x20funder\x27s\x20ORDER\x20(policy\x20id_from\x20unset;\x20row\x20id\x20=\x20the\x20Order\x20address).'});else{if(u){const v=s['filter'](w=>{const x=(w['policy']?.['id_from']??'')['toLowerCase']();return x==='signer'||x==='clock';})['map'](w=>'\x27'+w['key']+'\x27');c['push']({'code':'CROWDFUNDING_SIGNER_KEYED_ROWS','detail':'crowdfunding_mode\x20\x27threshold\x27\x20gates\x20release\x20on\x20an\x20aggregate\x20funding\x20total,\x20but\x20the\x20contribution\x20'+('policy\x20'+v['join'](',\x20')+'\x20keys\x20rows\x20by\x20the\x20WALLET\x20(id_from\x20signer/clock)\x20—\x20the\x20OLD\x20pre-migration\x20')+'shape\x20(ksc-tn-261024\x20F-01/F-05).\x20Wallet-keyed\x20rows\x20feed\x20the\x20escrow-bound\x20sum\x20(query\x201179,\x20per-row\x20'+'min(row,\x20order.amount,\x20LIVE\x20allocation.balance))\x20ZERO\x20—\x20the\x20goal\x20gate\x20silently\x20bricks\x20—\x20and\x20the\x20free-form\x20sum-where\x20(1174)\x20stays\x20'+'self-reported,\x20so\x20a\x20backer\x20can\x20still\x20record\x201.0\x20for\x20a\x200.1\x20pledge.\x20Key\x20the\x20rows\x20by\x20the\x20funder\x27s\x20ORDER\x20'+'instead\x20(policy\x20id_from\x20unset;\x20the\x20backer\x27s\x20tooling\x20submits\x20the\x20row\x20id\x20=\x20their\x20Order\x20address\x20through\x20'+'the\x20passport-bearing\x20data\x20write),\x20pass\x20those\x20ORDER\x20addresses\x20as\x20the\x20aggregate\x27s\x20candidate\x20ids,\x20and\x20pair\x20the\x20gate\x20'+'with\x20the\x20live-escrow\x20leg\x20(allocation.balance\x20query\x201051\x20via\x20convert_witness\x20OrderAllocation\x20109,\x20'+'>=\x20order.amount)\x20so\x20a\x20refunded/never-funded\x20order\x20can\x20neither\x20count\x20toward\x20the\x20goal\x20nor\x20be\x20settled.'});}}}c['push'](...emitCampaignDeadlineGate(b));const j=b['buildNotes'],k=/(attest|keeper|aggregate trust|read-?only sum|not a chain-?verified|independent recomputation)/i,l=/(not investment|non-?investment|no (?:investment )?return|never promise)/i,m=/(kyc|aml|securities|money-?transmission|regulatory|cross-border|compliance)/i,n=/(no-?refund|non-?refundable|keep-?it-?all)/i,o=j['some'](w=>l['test'](w)),p=j['some'](w=>m['test'](w)),q=a==='threshold'?j['some'](w=>k['test'](w)):!![],r=a==='flexible'?j['some'](w=>n['test'](w)):!![];if(!q||!o||!p||!r){const w=[!q?'the\x20aggregate-trust\x20boundary\x20(the\x20funding\x20total\x20is\x20a\x20keeper-attested\x20Repository\x20sum,\x20NOT\x20a\x20chain-verified\x20money\x20oracle)':null,!o?'the\x20L-01\x20non-investment\x20statement\x20(never\x20promise\x20returns\x20/\x20promote\x20coin\x20price;\x20not\x20investment\x20advice\x20or\x20a\x20return\x20promise)':null,!p?'the\x20L-05\x20KYC/AML\x20+\x20cross-border\x20regulatory\x20caution\x20(HIGH\x20intensity)':null,!r?'the\x20flexible\x20keep-it-all\x20NO-REFUND\x20posture\x20(contributions\x20non-refundable\x20once\x20the\x20deadline\x20passes;\x20no\x20refunds)':null]['filter'](Boolean);c['push']({'code':'CROWDFUNDING_DISCLOSURE_MISSING','detail':'crowdfunding_mode\x20\x27'+a+'\x27\x20declares\x20a\x20campaign\x20but\x20no\x20build_note\x20carries:\x20'+w['join'](';\x20')+'\x20'+'(INV-E3\x20/\x20L-04\x20/\x20L-01\x20/\x20L-05).\x20Add\x20these\x20as\x20honest\x20build_notes\x20—\x20never\x20present\x20an\x20attested\x20aggregate\x20as\x20a\x20'+'chain-verified\x20custody\x20proof,\x20never\x20imply\x20investment\x20returns,\x20and\x20flag\x20the\x20compliance\x20surface.'});}return c;}function emitLogisticsGates(a,b){const c=[];if(a==='none')return c;const d=b['shape'],e=d['some'](g=>g['named_operator']!==undefined||(g['from']??[])['some'](h=>h['named_operator']!==undefined));a==='courier'&&!e&&c['push']({'code':'LOGISTICS_COURIER_RAIL_MISSING','detail':'logistics_mode\x20\x27courier\x27\x20declares\x20per-order\x20dispatched\x20riders,\x20but\x20machine_shape\x20carries\x20NO\x20named_operator\x20'+'rail.\x20A\x20dispatched\x20rider\x20is\x20NEITHER\x20a\x20permission\x20entity\x20NOR\x20the\x20buyer\x20—\x20the\x20ONLY\x20forward\x20they\x20can\x20ever\x20'+'pass\x20is\x20a\x20namedOperator\x20roster\x20rail\x20(the\x20rider\x20namespace\x27s\x20per-order\x20roster,\x20written\x20by\x20the\x20dispatch\x20'+'keeper\x20via\x20permission\x20index\x20221;\x20K-1\x20batch\x20B).\x20Bind\x20the\x20handover\x20forwards\x20(merchant→courier\x20pickup,\x20'+'courier→buyer\x20drop-off)\x20with\x20named_operator\x20\x27<namespace>\x27\x20—\x20and\x20disclose\x20the\x20roster\x20duty\x20in\x20a\x20build_note\x20'+'(the\x20NAMED_OPERATOR_ROSTER_UNDISCLOSED\x20gate\x20and\x20the\x20G6\x20dispatch\x20disclosure\x20below\x20enforce\x20the\x20rest).'});const f=/(deliver|courier|shipping|freight|ride|dispatch|logistic)/i;if(a==='courier'){const g=b['rows']['find'](h=>h['mode']==='surplus'&&f['test']((h['value_from']??'')+'\x20'+(h['recipient_key']??'')));g!==undefined&&c['push']({'code':'LOGISTICS_COURIER_FEE_POOLED','detail':'logistics_mode\x20\x27courier\x27\x20has\x20a\x20delivery-fee\x20allocator\x20row\x20in\x20SURPLUS\x20mode\x20'+('(value_from/recipient_key\x20\x27'+(g['value_from']??g['recipient_key']??'')+'\x27)\x20—\x20a\x20surplus\x20leg\x20')+'drains\x20the\x20remainder\x20of\x20the\x20pool\x20it\x20hangs\x20on,\x20which\x20for\x20a\x20courier\x20build\x20IS\x20the\x20buyer\x27s\x20goods\x20escrow\x20'+'(the\x20grab-pool\x20shape\x20the\x20affiliate\x20INV-D3\x20family\x20bans).\x20The\x20delivery\x20fee\x20is\x20KNOWN\x20at\x20order\x20time\x20—\x20the\x20'+'buyer\x20sees\x20and\x20pays\x20it\x20before\x20dispatch\x20—\x20so\x20make\x20it\x20an\x20INDEPENDENT\x20leg:\x20a\x20fixed\x20Amount\x20row\x20(or\x20a\x20Rate\x20'+'row\x20off\x20a\x20dedicated\x20delivery-fee\x20pool\x20funded\x20separately),\x20never\x20a\x20Surplus/Rate\x20drain\x20of\x20the\x20goods\x20pool.'});}if(a==='pickup_point'){const h=b['guardSpecs']['some'](j=>j['template_id']==='pattern.time_lock_absolute'||j['template_id']==='tpl_time_lock_absolute_ms'),i=b['guardSpecs']['some'](j=>j['template_id']==='pattern.time_window_upper_bound'||j['template_id']==='tpl_time_window_upper'||j['template_id']==='tpl_time_window_upper_absolute_ms');(!h||!i)&&c['push']({'code':'LOGISTICS_PICKUP_CUTOFF_MISSING','detail':'logistics_mode\x20\x27pickup_point\x27\x20declares\x20batch\x20consolidation,\x20but\x20the\x20shape\x20is\x20missing\x20'+(''+(!h?'the\x20ABSOLUTE\x20batch-cutoff\x20release\x20gate\x20(pattern.time_lock_absolute\x20—\x20every\x20funder\x27s/leader\x27s\x20release\x20anchors\x20on\x20the\x20SAME\x20shared\x20cutoff\x20clock,\x20not\x20per-order\x20entry+duration)':''))+(''+(!h&&!i?'\x20and\x20':''))+(''+(!i?'the\x20unclaimed-goods\x20exit\x20window\x20(pattern.time_window_upper_bound\x20—\x20goods\x20never\x20picked\x20up\x20must\x20refund/return\x20at\x20a\x20bounded\x20deadline,\x20never\x20hold\x20open-ended)':''))+'.\x20Both\x20are\x20mandatory:\x20without\x20the\x20shared\x20cutoff\x20the\x20batch\x20is\x20not\x20a\x20batch\x20(each\x20order\x20releases\x20on\x20its\x20own\x20clock),\x20and\x20without\x20the\x20exit\x20window\x20an\x20unclaimed\x20parcel\x20strands\x20in\x20the\x20pickup\x20point\x20forever.'});}if(a==='carrier'){const j=/(track|shipping evidence|waybill|airbill|carrier record|parcel evidence)/i,k=b['guardSpecs']['some'](l=>l['host']==='machine'&&j['test'](l['key']+'\x20'+l['purpose']));!k&&c['push']({'code':'LOGISTICS_CARRIER_EVIDENCE_MISSING','detail':'logistics_mode\x20\x27carrier\x27\x20declares\x20third-party\x20carrier\x20shipment,\x20but\x20NO\x20machine\x20guard\x20binds\x20'+'shipping/tracking\x20evidence.\x20Add\x20a\x20repository_data_check\x20guard\x20on\x20the\x20ship\x20forward\x20keyed\x20to\x20a\x20'+'tracking-hash\x20row\x20(the\x20retail\x20idiom:\x20the\x20evidence\x20Repository\x20row\x20is\x20written\x20by\x20an\x20authorized\x20'+'writer\x20—\x20pattern.repository_write_authorization\x20—\x20and\x20the\x20ship\x20guard\x20reads\x20it),\x20so\x20a\x20dispute\x20has\x20a\x20'+'dispute-ready\x20record\x20of\x20what\x20was\x20shipped\x20and\x20when.'});}{const l=/(lost|loss|damag|theft)/i,m=q=>q['replace'](/permanently lost/gi,''),n=/(transit loss|lost (?:parcel|package|goods|in transit)|in[- ]transit loss|carrier lost|loss (?:is |)remed|loss route|lost shipment)/i,o=d['some'](q=>l['test'](q['name'])||l['test'](q['role']??''))||b['guardSpecs']['some'](q=>q['host']==='machine'&&l['test'](m(q['key']+'\x20'+q['purpose']))),p=b['buildNotes']['some'](q=>n['test'](q));!o&&!p&&c['push']({'code':'LOGISTICS_TRANSIT_LOSS_UNCOVERED','detail':'logistics_mode\x20\x27'+a+'\x27\x20moves\x20a\x20physical\x20good,\x20but\x20the\x20shape\x20has\x20NO\x20in-transit\x20loss\x20rail\x20'+'(no\x20loss/damage\x20node\x20or\x20machine-guard\x20family)\x20and\x20NO\x20build_note\x20disclosing\x20the\x20loss\x20remedy.\x20Goods\x20can\x20'+'be\x20lost\x20or\x20damaged\x20between\x20handover\x20and\x20acceptance\x20in\x20EVERY\x20physical\x20mode\x20—\x20silence\x20means\x20the\x20buyer\x27s\x20'+'funds\x20strand\x20behind\x20an\x20undeliverable\x20order\x20with\x20no\x20taught\x20route.\x20Either\x20express\x20the\x20loss\x20waypoint\x20(a\x20'+'node\x20like\x20the\x20retail\x20lost-parcel\x20record,\x20or\x20a\x20loss-evidence\x20machine\x20guard)\x20or\x20add\x20a\x20build_note\x20'+'disclosing\x20the\x20remedy\x20route\x20(e.g.\x20\x22transit\x20loss\x20is\x20remedied\x20by\x20the\x20buyer\x27s\x20arbitration\x20route\x20into\x20the\x20'+'refund\x20rail\x20—\x20the\x20ruling\x20pays\x20the\x20buyer;\x20the\x20carrier\x20claim\x20is\x20an\x20off-chain\x20recovery,\x20disclosed\x20as\x20such\x22).'});}if(a==='courier'||a==='pickup_point'){const q=/(dispatch|schedul|no.{0,24}oracle|no on-chain.{0,24}(dispatch|scheduler)|off-chain keeper|keeper.{0,40}dispatch|roster|named.?operator|permission.{0,12}221)/i,r=b['buildNotes']['some'](s=>q['test'](s));!r&&c['push']({'code':'LOGISTICS_DISPATCH_UNDISCLOSED','detail':'logistics_mode\x20\x27'+a+'\x27\x20is\x20a\x20dynamically\x20dispatched\x20fulfillment\x20topology,\x20but\x20no\x20build_note\x20'+'discloses\x20the\x20two\x20🔴\x20SOLE-TRUTH\x20boundaries.\x20①\x20The\x20chain\x20has\x20NO\x20dispatch/scheduling\x20primitive\x20—\x20'+'assignment\x20of\x20riders/pickup\x20batches\x20is\x20an\x20OFF-CHAIN\x20keeper\x20duty\x20(K-4);\x20its\x20only\x20chain\x20footprint\x20is\x20the\x20'+'namedOperator\x20roster\x20written\x20via\x20permission\x20index\x20221.\x20②\x20There\x20is\x20NO\x20distance/weight/weather\x20oracle\x20—\x20'+'ETA,\x20route,\x20and\x20dynamic\x20pricing\x20are\x20NOT\x20chain-verifiable.\x20Add\x20a\x20build_note\x20stating\x20WHO\x20dispatches\x20(the\x20'+'keeper),\x20WHAT\x20the\x20keeper\x20writes\x20(the\x20roster,\x20per\x20order/shift),\x20and\x20that\x20ETA/pricing\x20live\x20off-chain.'});}return c;}function emitFormulaGates(a){const b=[];for(const c of a['rows']){if(c['mode']!=='formula')continue;const d='allocator\x20row\x20('+c['track']+'/'+(c['recipient_key']??c['recipient'])+')';c['formula']?.['selector']!==0x2&&b['push']({'code':'FORMULA_SELECTOR_NOT_SUM_BOUND','detail':d+'\x20declares\x20a\x20Formula\x20leg\x20with\x20selector\x20'+JSON['stringify'](c['formula']?.['selector'])+'\x20—\x20only\x202\x20'+'(SUM_BOUND)\x20is\x20allowed.\x20A\x20bare\x20SUM\x20(1)\x20can\x20be\x20inflated\x20by\x20forged\x20rows:\x20any\x20Repository\x20writer\x20who\x20'+'can\x20add\x20a\x20large\x20row\x20inflates\x20the\x20scalar,\x20and\x20the\x20leg\x20pays\x20coefficient\x20×\x20scalar\x20/\x2010000\x20—\x20forged\x20'+'row,\x20forged\x20money\x20(ksc-tn-261024\x20F-01);\x20COUNT\x20(0)\x20is\x20likewise\x20escrow-unbound.\x20SUM_BOUND\x20clamps\x20'+'every\x20candidate\x20row\x20to\x20min(row_value,\x20the\x20amount\x20of\x20the\x20Order\x20its\x20id\x20names),\x20so\x20a\x20dynamic-pricing\x20'+'scalar\x20can\x20never\x20credit\x20a\x20contribution\x20beyond\x20the\x20escrow\x20actually\x20bound\x20to\x20it.\x20TWO\x20clamp\x20'+'guarantees,\x20keep\x20them\x20separate\x20—\x20never\x20blur\x20them\x20into\x20an\x20unconditional\x20\x22three-term\x20clamp\x22:\x20'+'(a)\x20UNCONDITIONAL\x20on\x20every\x20protocol\x20version:\x20min(row_value,\x20that\x20Order\x20amount),\x20with\x20a\x20candidate\x20'+'id\x20that\x20is\x20not\x20a\x20framework\x20Order\x20contributing\x200\x20fail-closed;\x20(b)\x20FLAG-GATED:\x20the\x20third\x20clamp\x20'+'term\x20against\x20the\x20row\x27s\x20LIVE\x20allocation\x20balance\x20ships\x20behind\x20the\x20v140\x20live-cap\x20protocol\x20flag\x20'+'(FLAG_ENABLE_REPOSITORY_ESCROW_LIVE_CAP)\x20—\x20on\x20a\x20protocol\x20version\x20without\x20it,\x20a\x20refunded\x20order\x27s\x20'+'frozen\x20amount\x20still\x20contributes\x20to\x20the\x20scalar.\x20Never\x20promise\x20the\x20live-balance\x20clamp\x20without\x20'+'naming\x20its\x20flag.\x20Declare\x20'+'formula:\x20{\x20selector:\x202,\x20repo,\x20key,\x20ids,\x20...\x20}\x20on\x20the\x20row\x20(the\x20runtime\x20spec\x20is\x20then\x20bound\x20via\x20'+'allocation\x20formula_spec_set).'});const e=c['formula']?.['ids'],f=e!==undefined&&e['length']>0x0?JSON['stringify'](e):'';!f['includes']('order')&&b['push']({'code':'FORMULA_ROW_KEY_NOT_ORDER','detail':d+'\x20declares\x20a\x20Formula\x20leg\x20whose\x20candidate\x20ids\x20'+(e===undefined||e['length']===0x0?'are\x20empty\x20or\x20missing':'('+f+')')+'\x20do\x20not\x20bind\x20an\x20Order\x20id.\x20'+'Under\x20SUM_BOUND\x20every\x20row\x20is\x20clamped\x20to\x20min(row_value,\x20order.amount\x20of\x20the\x20row\x20id);\x20a\x20row\x20keyed\x20by\x20'+'anything\x20that\x20is\x20not\x20a\x20real\x20framework\x20Order\x20contributes\x200\x20—\x20the\x20leg\x20silently\x20prices\x20at\x200\x20(fail-closed\x20'+'native\x20behavior,\x20a\x20silent\x20error\x20source),\x20and\x20an\x20empty\x20list\x20matches\x20NO\x20records.\x20Bind\x20ids\x20to\x20the\x20plan\x27s\x20'+'Order(s)\x20(e.g.\x20[{\x20\x22$ref\x22:\x20\x22<order\x20step\x20id>\x22\x20}])\x20so\x20the\x20clamp\x20reads\x20the\x20real\x20escrow.'});}return b;}function emitCampaignDeadlineGate(a){const b=[],c=a['inputs']['campaign_deadline_ms']??a['feeParams']?.['campaign_deadline_ms'],d=typeof c==='number'?c:Number(c);if(a['buildTimeMs']!==undefined){if(!Number['isFinite'](d)||d<=0x0)b['push']({'code':'CROWDFUNDING_DEADLINE_UNSET','detail':'this\x20build\x20gates\x20release/refund/withdrawal\x20or\x20a\x20group-buy\x20cutoff\x20on\x20the\x20ABSOLUTE\x20shared\x20deadline\x20'+('(campaign_deadline_ms),\x20but\x20it\x20resolved\x20to\x20'+String(c)+'\x20even\x20though\x20this\x20build\x20knows\x20its\x20')+'instant\x20—\x20an\x20unresolved\x20zero\x20opens\x20the\x20deadline\x20gate\x20at\x20genesis\x20(Clock\x20>=\x200\x20is\x20always\x20true)\x20and\x20the\x20'+'paired\x20closing\x20twin\x20(Clock\x20<=\x200)\x20is\x20ALWAYS\x20FALSE:\x20the\x20pre-deadline\x20exit\x20is\x20dead\x20on\x20arrival\x20and\x20the\x20'+'release/cancel\x20polarity\x20is\x20resolvable\x20at\x20block\x20one\x20(ktt5\x20T-20,\x20ddmc-mn\x20F-DDMC-08).\x20Pass\x20a\x20real\x20'+'future\x20epoch-ms\x20timestamp\x20via\x20inputs.campaign_deadline_ms,\x20or\x20a\x20length\x20via\x20'+'inputs.campaign_duration_days\x20for\x20the\x20generation-time\x20conversion.'});else{if(d<=a['buildTimeMs'])b['push']({'code':'CROWDFUNDING_DEADLINE_PAST','detail':'campaign_deadline_ms\x20('+d+')\x20is\x20not\x20after\x20this\x20build\x27s\x20instant\x20('+a['buildTimeMs']+')\x20—\x20'+'the\x20shared\x20deadline\x20is\x20ALREADY\x20EXPIRED\x20at\x20publish:\x20the\x20pre-deadline\x20exit\x20is\x20dead\x20on\x20'+'arrival\x20and\x20the\x20release/refund\x20polarity\x20is\x20resolvable\x20at\x20block\x20one\x20(the\x20live\x20ktt5\x20run\x20set\x20the\x20'+'deadline\x20before\x20the\x20first\x20order\x20and\x20could\x20never\x20test\x20a\x20mid-round\x20withdrawal,\x20T-20).\x20Pass\x20a\x20future\x20'+'epoch-ms\x20timestamp\x20(build\x20instant\x20+\x20campaign_duration_days\x20is\x20the\x20sanctioned\x20conversion).'});else a['buildTimeMs']+0xa*0xea60-d>0x0&&b['push']({'code':'CROWDFUNDING_DEADLINE_IMMINENT','detail':'campaign_deadline_ms\x20('+d+')\x20is\x20less\x20than\x2010\x20minutes\x20after\x20this\x20build\x27s\x20instant\x20'+('('+a['buildTimeMs']+')\x20—\x20the\x20round\x20is\x20effectively\x20expired\x20by\x20the\x20time\x20ANY\x20buyer\x20sees\x20the\x20')+'listing\x20(pdd\x20F-09\x20min-lead).\x20Give\x20the\x20campaign\x20a\x20real\x20lead\x20window:\x20build\x20instant\x20+\x20'+'campaign_duration_days\x20/\x20campaign_duration_hours\x20(hours\x20for\x20short\x20pop-up\x20rounds,\x20minimum\x20'+'sanctioned\x20length\x2010\x20minutes)\x20or\x20a\x20further-out\x20absolute\x20timestamp.'});}}return b;}export function emitModeGates(a,b){const c=emitAfterSalesGates(a['afterSalesMode'],b),d=emitAcceptanceGates(a['acceptanceMode'],b);return{'blockers':[...c,...d['blockers'],...emitInstallmentGates(a['installmentMode'],b),...emitAffiliateGates(a['affiliateMode'],b),...emitCrowdfundingGates(a['crowdfundingMode'],b),...a['crowdfundingMode']==='none'&&(b['inputs']['campaign_deadline_ms']!==undefined||b['feeParams']?.['campaign_deadline_ms']!==undefined)?emitCampaignDeadlineGate(b):[],...emitLogisticsGates(a['logisticsMode'],b),...emitFormulaGates(b)],'disclosures':[...d['disclosures']]};}export function deriveCapabilityModes({template:a,inputs:b}){const c=b['after_sales_mode'],d=c==='return'||c==='exchange'||c==='warranty'||c==='none'?c:undefined,e=d??a['after_sales_mode']??'none',f=b['acceptance_mode'],g=f==='milestone'||f==='contest'||f==='bounty'||f==='agent'||f==='none'?f:undefined,h=g??a['acceptance_mode']??'none',i=b['installment_mode'],j=i==='deposit_balance'||i==='milestone_n'||i==='none'?i:undefined,k=j??a['installment_mode']??'none',l=b['affiliate_mode'],m=l==='commission'||l==='none'?l:undefined,n=m??a['affiliate_mode']??'none',o=b['crowdfunding_mode'],p=o==='threshold'||o==='flexible'||o==='none'?o:undefined,q=p??a['crowdfunding_mode']??'none',r=b['logistics_mode'],s=r==='carrier'||r==='merchant_managed'||r==='courier'||r==='pickup_point'||r==='none'?r:undefined,t=s??a['logistics_mode']??'none';return{'afterSalesMode':e,'acceptanceMode':h,'installmentMode':k,'affiliateMode':n,'crowdfundingMode':q,'logisticsMode':t};}
|
|
1
|
+
import{afterSalesRailRegex as a22a,afterSalesRailNodeMatches}from'../knowledge/template-scanner.js';import{TWO_TX_RENEW_RECIPE,RENEWAL_WITNESS_RECIPE}from'../knowledge/protocol-facts.js';import{findLoopCycles}from'../knowledge/machine-topology.js';import{classifyLoopCycle,isRenewalFundingDesign}from'../knowledge/audit-rules.js';import{isRenewalLoopEdge}from'../participation/radar-core.js';function emitAfterSalesGates(a,b){const c=[];if(a==='none')return c;const d=a22a(a),e=b['shape']['some'](f=>afterSalesRailNodeMatches(a,f['name']));return!e&&c['push']({'code':'AFTER_SALES_RAIL_MISSING','detail':'after_sales_mode\x20\x27'+a+'\x27\x20declares\x20a\x20buyer\x20after-sales\x20remedy,\x20but\x20machine_shape\x20has\x20no\x20'+('backing\x20rail\x20(no\x20node\x20matching\x20'+d+').\x20Add\x20the\x20'+a+'\x20node\x20family\x20')+'(e.g.\x20return_requested\x20->\x20returned\x20for\x20\x27return\x27)\x20as\x20a\x20node-gated\x20fund\x20rail\x20(decision\x2011:\x20NEVER\x20a\x20'+'claimed_by\x20leg\x20—\x20RAIL_CLAIMED_BY_LEG\x20critical)\x20anchored\x20on\x20the\x20delivered\x20ENTRY\x20time\x20'+'(INV-C2,\x20TIME-ANCHOR-01);\x20refund\x20and\x20award\x20are\x20independent\x20tracks\x20and\x20any\x20overlap\x20is\x20disclosed\x20'+'at\x20the\x20dual-payout\x20gate\x20(DUAL-RAIL-01).\x20Or\x20set\x20after_sales_mode\x20\x27none\x27\x20if\x20this\x20shop\x20ships\x20no\x20such\x20remedy.'}),c;}function emitAcceptanceGates(a,b){const c=[],d=[];if(a==='none')return{'blockers':c,'disclosures':d};const e=a==='contest'||a==='bounty'||a==='agent';e&&b['arbitrationMode']!=='third_party'&&c['push']({'code':'ACCEPTANCE_JUDGE_NOT_INDEPENDENT','detail':'acceptance_mode\x20\x27'+a+'\x27\x20is\x20a\x20judge-decided\x20acceptance\x20(a\x20third\x20party\x20rules\x20on\x20'+('release),\x20but\x20arbitration_mode\x20is\x20\x27'+(b['arbitrationMode']??'none')+'\x27,\x20not\x20\x27third_party\x27.\x20')+'The\x20party\x20owing\x20the\x20payout\x20must\x20not\x20also\x20decide\x20whether\x20it\x20is\x20owed\x20(merchant\x20self-adjudication,\x20'+'INV-A3).\x20Set\x20arbitration_mode\x20\x27third_party\x27\x20so\x20an\x20independent\x20venue/judge\x20Permission\x20rules\x20'+'(R2;\x20enforced\x20at\x20publish\x20by\x20controller-disjointness),\x20or\x20use\x20acceptance_mode\x20\x27milestone\x27\x20if\x20the\x20'+'buyer\x20genuinely\x20self-adjudicates.'});const f=b['feeParams']['revision_rounds_max'],g=typeof f==='number'||typeof f==='string'&&f['trim']()!==''&&/^\d+$/['test'](f['trim']());if(g){const h=b['guardSpecs']['some'](i=>i['host']==='repository'||/repository/i['test'](i['template_id']));!h&&c['push']({'code':'ACCEPTANCE_REVISION_UNBOUNDED','detail':'acceptance_mode\x20\x27'+a+'\x27\x20declares\x20a\x20bounded\x20revision\x20loop\x20'+('(fee_params.revision_rounds_max\x20=\x20'+String(f)+'),\x20but\x20no\x20counter-backed\x20Repository\x20')+'guard\x20exists.\x20The\x20chain\x20caps\x20EDGE\x20count\x20(MAX_FORWARD\x20/\x20MAX_NODE_PAIR),\x20never\x20VISIT\x20count,\x20'+'so\x20a\x20finite\x20cap\x20in\x20fee_params\x20alone\x20is\x20a\x20promise\x20the\x20chain\x20cannot\x20keep\x20(INV-A1).\x20Either\x20declare\x20'+'revision_rounds_max\x20\x27unlimited\x27\x20(the\x20honest\x20form\x20—\x20the\x20revision\x20loop\x20is\x20then\x20genuinely\x20'+'unbounded)\x20or\x20mount\x20a\x20counter-backed\x20Repository\x20guard\x20(pattern.repository_data_check\x20reading\x20a\x20'+'per-order\x20revision\x20tally\x20written\x20via\x20pattern.repository_write_authorization)\x20that\x20gates\x20the\x20'+'redelivery\x20forward\x20once\x20the\x20tally\x20reaches\x20the\x20cap.'});}if(a==='contest')d['push']('Winner\x20rule\x20(first-to-node):\x20the\x20winner\x20is\x20the\x20first\x20account\x20whose\x20forward\x20completes\x20entry\x20into\x20'+'the\x20adjudication\x20node\x20—\x20computable\x20from\x20the\x20order\x27s\x20Progress\x20history\x20(first\x20matching\x20entry,\x20earliest\x20'+'time);\x20ties\x20resolve\x20by\x20chain\x20timestamp.\x20This\x20rule\x20is\x20disclosed\x20for\x20judge/merchant\x20reference;\x20the\x20'+'chain\x20stores\x20no\x20winner\x20field\x20(F-RQD2-05).');else a==='bounty'&&d['push']('Winner\x20rule\x20(judge-accepted\x20triage):\x20winners\x20are\x20the\x20submitters\x20whose\x20reports\x20the\x20independent\x20judge\x20'+'accepts\x20(severity-ranked);\x20the\x20Progress\x20history\x20proves\x20who\x20delivered,\x20the\x20judge\x20permission\x20decides\x20'+'which\x20delivery\x20wins.');return{'blockers':c,'disclosures':d};}function emitInstallmentGates(a,b){const c=[];if(a==='none')return c;const d=/(due|owed|owing|unpaid|awaiting|pending)/i,f=/(paid|captured|funded|settled)/i,g=/(deposit|down_?pay|balance_due|balance_owed|awaiting|installment|milestone)/i,h=/(refund|cancel|exit|forfeit|kill|void|abandon|release|expire|lapse)/i,i=[];for(const s of b['shape']){const t=s['name'];for(const u of s['from']??[]){typeof u==='string'?i['push']({'prev':u,'target':t}):i['push']({'prev':u['prev'],'target':t,'guardKey':u['guard_key']});}}const j=i['filter'](w=>d['test'](w['prev'])&&f['test'](w['target'])&&(w['guardKey']===undefined||w['guardKey']['trim']()===''));j['length']>0x0&&c['push']({'code':'INSTALLMENT_FUNDING_UNGATED','detail':'installment_mode\x20\x27'+a+'\x27\x20captures\x20a\x20later\x20payment,\x20but\x20the\x20funding\x20forward(s)\x20'+j['map'](w=>'\x27'+w['prev']+'\x27\x20→\x20\x27'+w['target']+'\x27')['join'](',\x20')+'\x20carry\x20NO\x20guard_key.\x20A\x20bare\x20advance\x20records\x20the\x20balance\x20as\x20paid\x20WITHOUT\x20the\x20capture\x20landing\x20in\x20the\x20'+'Allocation\x20—\x20a\x20zero-value\x20advance\x20(INV-B1,\x20H4).\x20Bind\x20a\x20fund-gate\x20Guard\x20on\x20each\x20capture\x20forward\x20'+'(constant\x20=\x20order\x20address,\x20convert_witness\x20OrderAllocation(109),\x20allocation.balance\x20query\x201051\x20>=\x20the\x20'+'capture\x20amount).\x20PRE-STATE\x20CONSTRAINT\x20(esound-mn-261021\x20B-1,\x20mainnet-verified):\x20guards\x20read\x20the\x20'+'COMMITTED\x20pre-transaction\x20balance\x20—\x20funding\x20that\x20lands\x20in\x20the\x20SAME\x20PTB\x20(the\x20one-PTB\x20order_renew\x20'+'payment\x20half)\x20is\x20INVISIBLE\x20to\x20the\x20forward\x27s\x20guard,\x20so\x20a\x20balance-gated\x20capture\x20advanced\x20by\x20'+('order_renew\x20ALWAYS\x20aborts.\x20'+TWO_TX_RENEW_RECIPE+'\x20Pair\x20the\x20balance\x20gate\x20with\x20the\x20once\x20slot\x20')+'(H5\x20—\x20the\x20fund\x20gate\x20is\x20a\x20STATE\x20READ,\x20not\x20a\x20once)\x20so\x20a\x20replay\x20cannot\x20re-capture.'});const k=new Set(b['rows']['filter'](w=>w['track']==='refund'||w['track']==='settlement')['map'](w=>w['guard_key'])['filter'](w=>typeof w==='string'&&w['trim']()!=='')),l=new Set(b['shape']['map'](w=>w['name'])),m=new Map(b['shape']['map'](w=>[w['name'],w['semantic_role']])),o=new Set();for(const w of b['guardSpecs']){if(w['host']!=='machine'||!/allocator_node_gate|progress_state_check/['test'](w['template_id']))continue;if(!k['has'](w['key']))continue;for(const x of Object['values'](w['params']??{})){if(typeof x==='string'&&l['has'](x))o['add'](x);}}const p=new Map();for(const y of i){const z=p['get'](y['prev'])??[];z['push'](y['target']),p['set'](y['prev'],z);}const q=A=>{const B=new Set([A]),C=[...p['get'](A)??[]];while(C['length']>0x0){const D=C['pop']();if(o['has'](D))return!![];const E=m['get'](D);if(E==='final'||E==='cancelled')return!![];if(B['has'](D))continue;B['add'](D);for(const F of p['get'](D)??[])if(!B['has'](F))C['push'](F);}return![];},r=[];for(const A of b['shape']){if(!g['test'](A['name']))continue;const B=i['filter'](D=>D['prev']===A['name']),C=q(A['name']);if(!C){const D=B['filter'](E=>h['test'](E['target']))['map'](E=>'\x27'+E['target']+'\x27');r['push'](D['length']>0x0?A['name']+'\x20(keyword-named\x20target(s)\x20'+D['join'](',\x20')+'\x20reach\x20no\x20refund/settlement\x20rail\x20and\x20no\x20final/cancelled\x20state\x20—\x20the\x20NAME\x20alone\x20is\x20not\x20an\x20exit)':A['name']);}}return r['length']>0x0&&c['push']({'code':'INSTALLMENT_DEPOSIT_STRANDED','detail':'installment_mode\x20\x27'+a+'\x27\x20holds\x20a\x20buyer\x20payment\x20at\x20state(s)\x20'+r['map'](E=>'\x27'+E+'\x27')['join'](',\x20')+'\x20with\x20NO\x20deposit-exit\x20rail\x20(no\x20outgoing\x20refund\x20/\x20cancel\x20/\x20forfeit\x20/\x20expire\x20edge).\x20There\x20is\x20no\x20on-chain\x20'+'obligation\x20to\x20pay\x20the\x20balance\x20(INV-B2,\x20H1),\x20so\x20a\x20buyer\x20who\x20walks\x20away\x20strands\x20the\x20already-paid\x20portion\x20'+'at\x20that\x20node\x20permanently\x20(Machine\x20+\x20Allocator\x20immutable,\x20IMMUT-001).\x20Add\x20a\x20deposit-exit\x20rail\x20from\x20each\x20'+'held\x20state\x20—\x20a\x20refund/cancel\x20forward\x20into\x20an\x20exit\x20node\x20whose\x20allocator\x20returns\x20the\x20held\x20funds\x20to\x20the\x20'+'order\x20payer\x20(GuardIdentifier(0))\x20or\x20applies\x20the\x20declared\x20deposit_exit_policy\x20(full\x20refund\x20vs\x20a\x20kill\x20fee\x20'+'compensating\x20the\x20merchant\x20for\x20the\x20reserved\x20capacity).'}),c;}function emitAffiliateGates(a,b){const c=[];if(a==='none')return c;const d=/(commission|affiliate|referr|attribut|partner_?payout)/i,e=b['shape']['some'](i=>d['test'](i['name'])),f=b['rows']['some'](i=>d['test'](i['value_from']??'')||d['test'](i['recipient_key']??''));!e&&!f&&c['push']({'code':'AFFILIATE_RAIL_MISSING','detail':'affiliate_mode\x20\x27'+a+'\x27\x20declares\x20a\x20referral/affiliate\x20commission\x20overlay,\x20but\x20machine_shape\x20has\x20no\x20'+'commission-family\x20node\x20and\x20the\x20allocator\x20has\x20no\x20commission\x20row\x20—\x20a\x20declared\x20partner\x20payout\x20with\x20no\x20rail\x20to\x20'+'walk\x20it\x20is\x20a\x20false\x20promise\x20at\x20quote\x20time\x20(INV-D3).\x20Add\x20an\x20INDEPENDENT\x20commission\x20leg:\x20a\x20Rate\x20row\x20off\x20a\x20'+'dedicated\x20commission\x20pool\x20(never\x20a\x20Surplus/Rate\x20drain\x20of\x20the\x20buyer\x27s\x20goods\x20escrow\x20—\x20anti-grab-pool)\x20to\x20an\x20explicit\x20'+'non-empty\x20partner\x20Entity,\x20gated\x20by\x20a\x20window-anchored\x20claim\x20guard\x20(INV-D1\x20rides\x20TIME-ANCHOR-01)\x20so\x20the\x20'+'commission\x20is\x20claimable\x20only\x20after\x20the\x20attribution/refund\x20window\x20closes.'});const g=/(post-?lock|clawback|unrecoverable|irrevocab|no\s*(?:revers|recov|clawback)|cannot be reversed|once released|released commission)/i,h=b['buildNotes']['some'](i=>g['test'](i));return!h&&c['push']({'code':'AFFILIATE_CLAWBACK_UNDISCLOSED','detail':'affiliate_mode\x20\x27'+a+'\x27\x20declares\x20a\x20commission\x20but\x20no\x20build_note\x20discloses\x20the\x20post-lock\x20no-clawback\x20'+'truth\x20(INV-D2).\x20SOLE\x20TRUTH:\x20Allocation\x20distribute\x20is\x20a\x20ONE-WAY\x20outflow\x20(no\x20debit/clawback\x20primitive,\x20§11.0\x20G2),\x20'+'so\x20once\x20a\x20commission\x20is\x20RELEASED\x20it\x20CANNOT\x20be\x20reversed\x20on\x20chain\x20—\x20a\x20refund/chargeback\x20after\x20release\x20leaves\x20the\x20'+'affiliate\x20commission\x20unrecoverable.\x20Add\x20a\x20build_note\x20stating\x20this\x20honestly\x20(e.g.\x20\x22post-lock:\x20a\x20released\x20'+'affiliate\x20commission\x20is\x20unrecoverable\x20—\x20refunds\x20after\x20the\x20attribution\x20window\x20do\x20NOT\x20claw\x20back\x20the\x20'+'partner\x20payout\x22).\x20L-04/D-5:\x20never\x20imply\x20a\x20recovery\x20capability\x20the\x20chain\x20does\x20not\x20have.'}),c;}function emitCrowdfundingGates(a,b){const c=[];if(a==='none')return c;const d=/(releas|settle|funded|disburs|project)/i,e=/(refund|missed|unmet|return|reimburse)/i,f=b['shape']['some'](s=>d['test'](s['name'])),g=b['rows']['some'](s=>s['track']==='settlement'&&(d['test'](s['guard_key']??'')||d['test'](s['recipient_key']??''))),h=b['shape']['some'](s=>e['test'](s['name'])),i=b['rows']['some'](s=>s['track']==='refund'||e['test'](s['guard_key']??''));!f&&!g&&c['push']({'code':'CROWDFUNDING_THRESHOLD_GATE_MISSING','detail':'crowdfunding_mode\x20\x27'+a+'\x27\x20declares\x20a\x20campaign\x20but\x20machine_shape\x20has\x20no\x20release/settlement\x20'+'node\x20and\x20the\x20allocator\x20has\x20no\x20settlement\x20row\x20to\x20the\x20project\x20Entity\x20—\x20the\x20escrowed\x20contributions\x20would\x20'+'strand\x20at\x20the\x20deadline\x20with\x20no\x20exit\x20rail\x20(INV-E1).\x20Add\x20a\x20release\x20leg\x20(Rate\x2010000\x20to\x20a\x20NON-EMPTY\x20project\x20'+'Entity,\x20gated\x20at\x20the\x20campaign-deadline\x20settlement\x20terminal)\x20and,\x20for\x20a\x20threshold\x20campaign,\x20its\x20D-BUG-2\x20'+'refund\x20twin.'});a==='threshold'&&!h&&!i&&c['push']({'code':'CROWDFUNDING_THRESHOLD_GATE_MISSING','detail':'crowdfunding_mode\x20\x27threshold\x27\x20declares\x20an\x20all-or-nothing\x20campaign\x20but\x20there\x20is\x20NO\x20refund-family\x20node/row\x20—\x20'+'a\x20missed\x20goal\x20would\x20strand\x20every\x20contribution\x20instead\x20of\x20returning\x20it\x20(INV-E1\x20/\x20D-BUG-2).\x20Add\x20the\x20refund\x20'+'leg\x20(per-contributor,\x20order-anchored\x20user\x20slot\x200\x20—\x20the\x20submitted\x20Order,\x20never\x20slot\x20254;\x20node-gated\x20at\x20the\x20'+'refund\x20terminal,\x20decision\x2011\x20—\x20never\x20a\x20claimed_by\x20leg)\x20as\x20the\x20mutually-exclusive\x20twin\x20of\x20the\x20'+'release\x20leg:\x20aggregate\x20>=\x20goal\x20→\x20release;\x20aggregate\x20<\x20goal\x20→\x20refund.'});if(a==='threshold'){const s=b['guardSpecs']['filter'](v=>v['host']==='repository'||/repository_write/i['test'](v['template_id'])),t=s['length']>0x0,u=s['some'](v=>{const w=(v['policy']?.['id_from']??'')['toLowerCase']();return w==='signer'||w==='clock';});if(!t)c['push']({'code':'CROWDFUNDING_AGGREGATE_UNBOUND','detail':'crowdfunding_mode\x20\x27threshold\x27\x20gates\x20release\x20on\x20an\x20aggregate\x20funding\x20total,\x20but\x20no\x20host:\x22repository\x22\x20'+'write\x20policy\x20declares\x20the\x20contribution\x20rows\x20—\x20with\x20no\x20write-bound\x20policy\x20the\x20total\x20is\x20forgeable,\x20so\x20'+'anyone\x20could\x20inflate\x20the\x20aggregate\x20and\x20fake\x20a\x20\x27goal\x20met\x27\x20(INV-E2\x20/\x20R-X1-17:\x20existence-is-not-trust).\x20'+'Mount\x20pattern.repository_write_authorization\x20(identity\x20leaf\x20order.owner==Signer\x20/\x20order.agent\x20has\x20Signer)\x20'+'and\x20key\x20the\x20contribution\x20rows\x20by\x20the\x20funder\x27s\x20ORDER\x20(policy\x20id_from\x20unset;\x20row\x20id\x20=\x20the\x20Order\x20address).'});else{if(u){const v=s['filter'](w=>{const x=(w['policy']?.['id_from']??'')['toLowerCase']();return x==='signer'||x==='clock';})['map'](w=>'\x27'+w['key']+'\x27');c['push']({'code':'CROWDFUNDING_SIGNER_KEYED_ROWS','detail':'crowdfunding_mode\x20\x27threshold\x27\x20gates\x20release\x20on\x20an\x20aggregate\x20funding\x20total,\x20but\x20the\x20contribution\x20'+('policy\x20'+v['join'](',\x20')+'\x20keys\x20rows\x20by\x20the\x20WALLET\x20(id_from\x20signer/clock)\x20—\x20the\x20OLD\x20pre-migration\x20')+'shape\x20(ksc-tn-261024\x20F-01/F-05).\x20Wallet-keyed\x20rows\x20feed\x20the\x20escrow-bound\x20sum\x20(query\x201179,\x20per-row\x20'+'min(row,\x20order.amount,\x20LIVE\x20allocation.balance))\x20ZERO\x20—\x20the\x20goal\x20gate\x20silently\x20bricks\x20—\x20and\x20the\x20free-form\x20sum-where\x20(1174)\x20stays\x20'+'self-reported,\x20so\x20a\x20backer\x20can\x20still\x20record\x201.0\x20for\x20a\x200.1\x20pledge.\x20Key\x20the\x20rows\x20by\x20the\x20funder\x27s\x20ORDER\x20'+'instead\x20(policy\x20id_from\x20unset;\x20the\x20backer\x27s\x20tooling\x20submits\x20the\x20row\x20id\x20=\x20their\x20Order\x20address\x20through\x20'+'the\x20passport-bearing\x20data\x20write),\x20pass\x20those\x20ORDER\x20addresses\x20as\x20the\x20aggregate\x27s\x20candidate\x20ids,\x20and\x20pair\x20the\x20gate\x20'+'with\x20the\x20live-escrow\x20leg\x20(allocation.balance\x20query\x201051\x20via\x20convert_witness\x20OrderAllocation\x20109,\x20'+'>=\x20order.amount)\x20so\x20a\x20refunded/never-funded\x20order\x20can\x20neither\x20count\x20toward\x20the\x20goal\x20nor\x20be\x20settled.'});}}}c['push'](...emitCampaignDeadlineGate(b));const j=b['buildNotes'],k=/(attest|keeper|aggregate trust|read-?only sum|not a chain-?verified|independent recomputation)/i,l=/(not investment|non-?investment|no (?:investment )?return|never promise)/i,m=/(kyc|aml|securities|money-?transmission|regulatory|cross-border|compliance)/i,n=/(no-?refund|non-?refundable|keep-?it-?all)/i,o=j['some'](w=>l['test'](w)),p=j['some'](w=>m['test'](w)),q=a==='threshold'?j['some'](w=>k['test'](w)):!![],r=a==='flexible'?j['some'](w=>n['test'](w)):!![];if(!q||!o||!p||!r){const w=[!q?'the\x20aggregate-trust\x20boundary\x20(the\x20funding\x20total\x20is\x20a\x20keeper-attested\x20Repository\x20sum,\x20NOT\x20a\x20chain-verified\x20money\x20oracle)':null,!o?'the\x20L-01\x20non-investment\x20statement\x20(never\x20promise\x20returns\x20/\x20promote\x20coin\x20price;\x20not\x20investment\x20advice\x20or\x20a\x20return\x20promise)':null,!p?'the\x20L-05\x20KYC/AML\x20+\x20cross-border\x20regulatory\x20caution\x20(HIGH\x20intensity)':null,!r?'the\x20flexible\x20keep-it-all\x20NO-REFUND\x20posture\x20(contributions\x20non-refundable\x20once\x20the\x20deadline\x20passes;\x20no\x20refunds)':null]['filter'](Boolean);c['push']({'code':'CROWDFUNDING_DISCLOSURE_MISSING','detail':'crowdfunding_mode\x20\x27'+a+'\x27\x20declares\x20a\x20campaign\x20but\x20no\x20build_note\x20carries:\x20'+w['join'](';\x20')+'\x20'+'(INV-E3\x20/\x20L-04\x20/\x20L-01\x20/\x20L-05).\x20Add\x20these\x20as\x20honest\x20build_notes\x20—\x20never\x20present\x20an\x20attested\x20aggregate\x20as\x20a\x20'+'chain-verified\x20custody\x20proof,\x20never\x20imply\x20investment\x20returns,\x20and\x20flag\x20the\x20compliance\x20surface.'});}return c;}function emitLogisticsGates(a,b){const c=[];if(a==='none')return c;const d=b['shape'],e=d['some'](g=>g['named_operator']!==undefined||(g['from']??[])['some'](h=>h['named_operator']!==undefined));a==='courier'&&!e&&c['push']({'code':'LOGISTICS_COURIER_RAIL_MISSING','detail':'logistics_mode\x20\x27courier\x27\x20declares\x20per-order\x20dispatched\x20riders,\x20but\x20machine_shape\x20carries\x20NO\x20named_operator\x20'+'rail.\x20A\x20dispatched\x20rider\x20is\x20NEITHER\x20a\x20permission\x20entity\x20NOR\x20the\x20buyer\x20—\x20the\x20ONLY\x20forward\x20they\x20can\x20ever\x20'+'pass\x20is\x20a\x20namedOperator\x20roster\x20rail\x20(the\x20rider\x20namespace\x27s\x20per-order\x20roster,\x20written\x20by\x20the\x20dispatch\x20'+'keeper\x20via\x20permission\x20index\x20221;\x20K-1\x20batch\x20B).\x20Bind\x20the\x20handover\x20forwards\x20(merchant→courier\x20pickup,\x20'+'courier→buyer\x20drop-off)\x20with\x20named_operator\x20\x27<namespace>\x27\x20—\x20and\x20disclose\x20the\x20roster\x20duty\x20in\x20a\x20build_note\x20'+'(the\x20NAMED_OPERATOR_ROSTER_UNDISCLOSED\x20gate\x20and\x20the\x20G6\x20dispatch\x20disclosure\x20below\x20enforce\x20the\x20rest).'});const f=/(deliver|courier|shipping|freight|ride|dispatch|logistic)/i;if(a==='courier'){const g=b['rows']['find'](h=>h['mode']==='surplus'&&f['test']((h['value_from']??'')+'\x20'+(h['recipient_key']??'')));g!==undefined&&c['push']({'code':'LOGISTICS_COURIER_FEE_POOLED','detail':'logistics_mode\x20\x27courier\x27\x20has\x20a\x20delivery-fee\x20allocator\x20row\x20in\x20SURPLUS\x20mode\x20'+('(value_from/recipient_key\x20\x27'+(g['value_from']??g['recipient_key']??'')+'\x27)\x20—\x20a\x20surplus\x20leg\x20')+'drains\x20the\x20remainder\x20of\x20the\x20pool\x20it\x20hangs\x20on,\x20which\x20for\x20a\x20courier\x20build\x20IS\x20the\x20buyer\x27s\x20goods\x20escrow\x20'+'(the\x20grab-pool\x20shape\x20the\x20affiliate\x20INV-D3\x20family\x20bans).\x20The\x20delivery\x20fee\x20is\x20KNOWN\x20at\x20order\x20time\x20—\x20the\x20'+'buyer\x20sees\x20and\x20pays\x20it\x20before\x20dispatch\x20—\x20so\x20make\x20it\x20an\x20INDEPENDENT\x20leg:\x20a\x20fixed\x20Amount\x20row\x20(or\x20a\x20Rate\x20'+'row\x20off\x20a\x20dedicated\x20delivery-fee\x20pool\x20funded\x20separately),\x20never\x20a\x20Surplus/Rate\x20drain\x20of\x20the\x20goods\x20pool.'});}if(a==='pickup_point'){const h=b['guardSpecs']['some'](j=>j['template_id']==='pattern.time_lock_absolute'||j['template_id']==='tpl_time_lock_absolute_ms'),i=b['guardSpecs']['some'](j=>j['template_id']==='pattern.time_window_upper_bound'||j['template_id']==='tpl_time_window_upper'||j['template_id']==='tpl_time_window_upper_absolute_ms');(!h||!i)&&c['push']({'code':'LOGISTICS_PICKUP_CUTOFF_MISSING','detail':'logistics_mode\x20\x27pickup_point\x27\x20declares\x20batch\x20consolidation,\x20but\x20the\x20shape\x20is\x20missing\x20'+(''+(!h?'the\x20ABSOLUTE\x20batch-cutoff\x20release\x20gate\x20(pattern.time_lock_absolute\x20—\x20every\x20funder\x27s/leader\x27s\x20release\x20anchors\x20on\x20the\x20SAME\x20shared\x20cutoff\x20clock,\x20not\x20per-order\x20entry+duration)':''))+(''+(!h&&!i?'\x20and\x20':''))+(''+(!i?'the\x20unclaimed-goods\x20exit\x20window\x20(pattern.time_window_upper_bound\x20—\x20goods\x20never\x20picked\x20up\x20must\x20refund/return\x20at\x20a\x20bounded\x20deadline,\x20never\x20hold\x20open-ended)':''))+'.\x20Both\x20are\x20mandatory:\x20without\x20the\x20shared\x20cutoff\x20the\x20batch\x20is\x20not\x20a\x20batch\x20(each\x20order\x20releases\x20on\x20its\x20own\x20clock),\x20and\x20without\x20the\x20exit\x20window\x20an\x20unclaimed\x20parcel\x20strands\x20in\x20the\x20pickup\x20point\x20forever.'});}if(a==='carrier'){const j=/(track|shipping evidence|waybill|airbill|carrier record|parcel evidence)/i,k=b['guardSpecs']['some'](l=>l['host']==='machine'&&j['test'](l['key']+'\x20'+l['purpose']));!k&&c['push']({'code':'LOGISTICS_CARRIER_EVIDENCE_MISSING','detail':'logistics_mode\x20\x27carrier\x27\x20declares\x20third-party\x20carrier\x20shipment,\x20but\x20NO\x20machine\x20guard\x20binds\x20'+'shipping/tracking\x20evidence.\x20Add\x20a\x20repository_data_check\x20guard\x20on\x20the\x20ship\x20forward\x20keyed\x20to\x20a\x20'+'tracking-hash\x20row\x20(the\x20retail\x20idiom:\x20the\x20evidence\x20Repository\x20row\x20is\x20written\x20by\x20an\x20authorized\x20'+'writer\x20—\x20pattern.repository_write_authorization\x20—\x20and\x20the\x20ship\x20guard\x20reads\x20it),\x20so\x20a\x20dispute\x20has\x20a\x20'+'dispute-ready\x20record\x20of\x20what\x20was\x20shipped\x20and\x20when.'});}{const l=/(lost|loss|damag|theft)/i,m=q=>q['replace'](/permanently lost/gi,''),n=/(transit loss|lost (?:parcel|package|goods|in transit)|in[- ]transit loss|carrier lost|loss (?:is |)remed|loss route|lost shipment)/i,o=d['some'](q=>l['test'](q['name'])||l['test'](q['role']??''))||b['guardSpecs']['some'](q=>q['host']==='machine'&&l['test'](m(q['key']+'\x20'+q['purpose']))),p=b['buildNotes']['some'](q=>n['test'](q));!o&&!p&&c['push']({'code':'LOGISTICS_TRANSIT_LOSS_UNCOVERED','detail':'logistics_mode\x20\x27'+a+'\x27\x20moves\x20a\x20physical\x20good,\x20but\x20the\x20shape\x20has\x20NO\x20in-transit\x20loss\x20rail\x20'+'(no\x20loss/damage\x20node\x20or\x20machine-guard\x20family)\x20and\x20NO\x20build_note\x20disclosing\x20the\x20loss\x20remedy.\x20Goods\x20can\x20'+'be\x20lost\x20or\x20damaged\x20between\x20handover\x20and\x20acceptance\x20in\x20EVERY\x20physical\x20mode\x20—\x20silence\x20means\x20the\x20buyer\x27s\x20'+'funds\x20strand\x20behind\x20an\x20undeliverable\x20order\x20with\x20no\x20taught\x20route.\x20Either\x20express\x20the\x20loss\x20waypoint\x20(a\x20'+'node\x20like\x20the\x20retail\x20lost-parcel\x20record,\x20or\x20a\x20loss-evidence\x20machine\x20guard)\x20or\x20add\x20a\x20build_note\x20'+'disclosing\x20the\x20remedy\x20route\x20(e.g.\x20\x22transit\x20loss\x20is\x20remedied\x20by\x20the\x20buyer\x27s\x20arbitration\x20route\x20into\x20the\x20'+'refund\x20rail\x20—\x20the\x20ruling\x20pays\x20the\x20buyer;\x20the\x20carrier\x20claim\x20is\x20an\x20off-chain\x20recovery,\x20disclosed\x20as\x20such\x22).'});}if(a==='courier'||a==='pickup_point'){const q=/(dispatch|schedul|no.{0,24}oracle|no on-chain.{0,24}(dispatch|scheduler)|off-chain keeper|keeper.{0,40}dispatch|roster|named.?operator|permission.{0,12}221)/i,r=b['buildNotes']['some'](s=>q['test'](s));!r&&c['push']({'code':'LOGISTICS_DISPATCH_UNDISCLOSED','detail':'logistics_mode\x20\x27'+a+'\x27\x20is\x20a\x20dynamically\x20dispatched\x20fulfillment\x20topology,\x20but\x20no\x20build_note\x20'+'discloses\x20the\x20two\x20🔴\x20SOLE-TRUTH\x20boundaries.\x20①\x20The\x20chain\x20has\x20NO\x20dispatch/scheduling\x20primitive\x20—\x20'+'assignment\x20of\x20riders/pickup\x20batches\x20is\x20an\x20OFF-CHAIN\x20keeper\x20duty\x20(K-4);\x20its\x20only\x20chain\x20footprint\x20is\x20the\x20'+'namedOperator\x20roster\x20written\x20via\x20permission\x20index\x20221.\x20②\x20There\x20is\x20NO\x20distance/weight/weather\x20oracle\x20—\x20'+'ETA,\x20route,\x20and\x20dynamic\x20pricing\x20are\x20NOT\x20chain-verifiable.\x20Add\x20a\x20build_note\x20stating\x20WHO\x20dispatches\x20(the\x20'+'keeper),\x20WHAT\x20the\x20keeper\x20writes\x20(the\x20roster,\x20per\x20order/shift),\x20and\x20that\x20ETA/pricing\x20live\x20off-chain.'});}return c;}function emitFormulaGates(a){const b=[];for(const c of a['rows']){if(c['mode']!=='formula')continue;const d='allocator\x20row\x20('+c['track']+'/'+(c['recipient_key']??c['recipient'])+')';c['formula']?.['selector']!==0x2&&b['push']({'code':'FORMULA_SELECTOR_NOT_SUM_BOUND','detail':d+'\x20declares\x20a\x20Formula\x20leg\x20with\x20selector\x20'+JSON['stringify'](c['formula']?.['selector'])+'\x20—\x20only\x202\x20'+'(SUM_BOUND)\x20is\x20allowed.\x20A\x20bare\x20SUM\x20(1)\x20can\x20be\x20inflated\x20by\x20forged\x20rows:\x20any\x20Repository\x20writer\x20who\x20'+'can\x20add\x20a\x20large\x20row\x20inflates\x20the\x20scalar,\x20and\x20the\x20leg\x20pays\x20coefficient\x20×\x20scalar\x20/\x2010000\x20—\x20forged\x20'+'row,\x20forged\x20money\x20(ksc-tn-261024\x20F-01);\x20COUNT\x20(0)\x20is\x20likewise\x20escrow-unbound.\x20SUM_BOUND\x20clamps\x20'+'every\x20candidate\x20row\x20to\x20min(row_value,\x20the\x20amount\x20of\x20the\x20Order\x20its\x20id\x20names),\x20so\x20a\x20dynamic-pricing\x20'+'scalar\x20can\x20never\x20credit\x20a\x20contribution\x20beyond\x20the\x20escrow\x20actually\x20bound\x20to\x20it.\x20TWO\x20clamp\x20'+'guarantees,\x20keep\x20them\x20separate\x20—\x20never\x20blur\x20them\x20into\x20an\x20unconditional\x20\x22three-term\x20clamp\x22:\x20'+'(a)\x20UNCONDITIONAL\x20on\x20every\x20protocol\x20version:\x20min(row_value,\x20that\x20Order\x20amount),\x20with\x20a\x20candidate\x20'+'id\x20that\x20is\x20not\x20a\x20framework\x20Order\x20contributing\x200\x20fail-closed;\x20(b)\x20FLAG-GATED:\x20the\x20third\x20clamp\x20'+'term\x20against\x20the\x20row\x27s\x20LIVE\x20allocation\x20balance\x20ships\x20behind\x20the\x20v140\x20live-cap\x20protocol\x20flag\x20'+'(FLAG_ENABLE_REPOSITORY_ESCROW_LIVE_CAP)\x20—\x20on\x20a\x20protocol\x20version\x20without\x20it,\x20a\x20refunded\x20order\x27s\x20'+'frozen\x20amount\x20still\x20contributes\x20to\x20the\x20scalar.\x20Never\x20promise\x20the\x20live-balance\x20clamp\x20without\x20'+'naming\x20its\x20flag.\x20Declare\x20'+'formula:\x20{\x20selector:\x202,\x20repo,\x20key,\x20ids,\x20...\x20}\x20on\x20the\x20row\x20(the\x20runtime\x20spec\x20is\x20then\x20bound\x20via\x20'+'allocation\x20formula_spec_set).'});const e=c['formula']?.['ids'],f=e!==undefined&&e['length']>0x0?JSON['stringify'](e):'';!f['includes']('order')&&b['push']({'code':'FORMULA_ROW_KEY_NOT_ORDER','detail':d+'\x20declares\x20a\x20Formula\x20leg\x20whose\x20candidate\x20ids\x20'+(e===undefined||e['length']===0x0?'are\x20empty\x20or\x20missing':'('+f+')')+'\x20do\x20not\x20bind\x20an\x20Order\x20id.\x20'+'Under\x20SUM_BOUND\x20every\x20row\x20is\x20clamped\x20to\x20min(row_value,\x20order.amount\x20of\x20the\x20row\x20id);\x20a\x20row\x20keyed\x20by\x20'+'anything\x20that\x20is\x20not\x20a\x20real\x20framework\x20Order\x20contributes\x200\x20—\x20the\x20leg\x20silently\x20prices\x20at\x200\x20(fail-closed\x20'+'native\x20behavior,\x20a\x20silent\x20error\x20source),\x20and\x20an\x20empty\x20list\x20matches\x20NO\x20records.\x20Bind\x20ids\x20to\x20the\x20plan\x27s\x20'+'Order(s)\x20(e.g.\x20[{\x20\x22$ref\x22:\x20\x22<order\x20step\x20id>\x22\x20}])\x20so\x20the\x20clamp\x20reads\x20the\x20real\x20escrow.'});}return b;}function emitCampaignDeadlineGate(a){const b=[],c=a['inputs']['campaign_deadline_ms']??a['feeParams']?.['campaign_deadline_ms'],d=typeof c==='number'?c:Number(c);if(a['buildTimeMs']!==undefined){if(!Number['isFinite'](d)||d<=0x0)b['push']({'code':'CROWDFUNDING_DEADLINE_UNSET','detail':'this\x20build\x20gates\x20release/refund/withdrawal\x20or\x20a\x20group-buy\x20cutoff\x20on\x20the\x20ABSOLUTE\x20shared\x20deadline\x20'+('(campaign_deadline_ms),\x20but\x20it\x20resolved\x20to\x20'+String(c)+'\x20even\x20though\x20this\x20build\x20knows\x20its\x20')+'instant\x20—\x20an\x20unresolved\x20zero\x20opens\x20the\x20deadline\x20gate\x20at\x20genesis\x20(Clock\x20>=\x200\x20is\x20always\x20true)\x20and\x20the\x20'+'paired\x20closing\x20twin\x20(Clock\x20<=\x200)\x20is\x20ALWAYS\x20FALSE:\x20the\x20pre-deadline\x20exit\x20is\x20dead\x20on\x20arrival\x20and\x20the\x20'+'release/cancel\x20polarity\x20is\x20resolvable\x20at\x20block\x20one\x20(ktt5\x20T-20,\x20ddmc-mn\x20F-DDMC-08).\x20Pass\x20a\x20real\x20'+'future\x20epoch-ms\x20timestamp\x20via\x20inputs.campaign_deadline_ms,\x20or\x20a\x20length\x20via\x20'+'inputs.campaign_duration_days\x20for\x20the\x20generation-time\x20conversion.'});else{if(d<=a['buildTimeMs'])b['push']({'code':'CROWDFUNDING_DEADLINE_PAST','detail':'campaign_deadline_ms\x20('+d+')\x20is\x20not\x20after\x20this\x20build\x27s\x20instant\x20('+a['buildTimeMs']+')\x20—\x20'+'the\x20shared\x20deadline\x20is\x20ALREADY\x20EXPIRED\x20at\x20publish:\x20the\x20pre-deadline\x20exit\x20is\x20dead\x20on\x20'+'arrival\x20and\x20the\x20release/refund\x20polarity\x20is\x20resolvable\x20at\x20block\x20one\x20(the\x20live\x20ktt5\x20run\x20set\x20the\x20'+'deadline\x20before\x20the\x20first\x20order\x20and\x20could\x20never\x20test\x20a\x20mid-round\x20withdrawal,\x20T-20).\x20Pass\x20a\x20future\x20'+'epoch-ms\x20timestamp\x20(build\x20instant\x20+\x20campaign_duration_days\x20is\x20the\x20sanctioned\x20conversion).'});else a['buildTimeMs']+0xa*0xea60-d>0x0&&b['push']({'code':'CROWDFUNDING_DEADLINE_IMMINENT','detail':'campaign_deadline_ms\x20('+d+')\x20is\x20less\x20than\x2010\x20minutes\x20after\x20this\x20build\x27s\x20instant\x20'+('('+a['buildTimeMs']+')\x20—\x20the\x20round\x20is\x20effectively\x20expired\x20by\x20the\x20time\x20ANY\x20buyer\x20sees\x20the\x20')+'listing\x20(pdd\x20F-09\x20min-lead).\x20Give\x20the\x20campaign\x20a\x20real\x20lead\x20window:\x20build\x20instant\x20+\x20'+'campaign_duration_days\x20/\x20campaign_duration_hours\x20(hours\x20for\x20short\x20pop-up\x20rounds,\x20minimum\x20'+'sanctioned\x20length\x2010\x20minutes)\x20or\x20a\x20further-out\x20absolute\x20timestamp.'});}}return b;}function emitRenewalFundingGates(a){const b=[],c=[],d=new Map();for(const k of a['shape']){const l=k['name'];for(const m of k['from']??[]){const o=typeof m==='string'?m:m['prev'],p=typeof m==='string'?undefined:m['guard_key'];c['push']({'prev':o,'target':l,'guardKey':p});const q=d['get'](o)??[];q['push'](l),d['set'](o,q);}}const f=findLoopCycles(d);if(f['length']===0x0)return b;const g=new Map(a['guardSpecs']['map'](r=>[r['key'],r])),h=r=>{if(r['guardKey']===undefined||r['guardKey']['trim']()==='')return undefined;return g['get'](r['guardKey'])?.['template_id'];},j=new Map();for(const r of f){if(classifyLoopCycle(r['cycle'])!=='renewal')continue;for(let s=0x0;s<r['cycle']['length'];s++){const t=r['cycle'][s],u=r['cycle'][(s+0x1)%r['cycle']['length']];if(!isRenewalLoopEdge(t,u))continue;const v=c['filter'](w=>w['prev']===t&&w['target']===u);for(const w of v){const x=h(w);if(isRenewalFundingDesign(x))continue;j['set']('\x27'+t+'\x27\x20→\x20\x27'+u+'\x27\x20(guard_key:\x20'+(w['guardKey']??'(none)')+')',x===undefined?'bare\x20or\x20identity-only':'design\x20\x27'+x+'\x27\x20verifies\x20identity\x20only,\x20never\x20funding');}}}if(j['size']===0x0)return b;return b['push']({'code':'RENEWAL_FUNDING_UNGATED','detail':'renewal\x20loop\x20forward(s)\x20'+[...j['keys']()]['join'](',\x20')+'\x20carry\x20NO\x20funded\x20guard\x20—\x20'+([...j['values']()]['map'](y=>'['+y+']')['join']('\x20')+'.\x20An\x20identity-only\x20renew\x20design\x20')+'(pattern.identity_check_order_holder)\x20verifies\x20WHO\x20signs\x20but\x20never\x20WHETHER\x20the\x20period\x20was\x20paid:\x20the\x20'+'order\x20holder\x20can\x20drive\x20the\x20renew\x20forward\x20directly\x20and\x20self-renew\x20for\x20FREE\x20(LIVE-01\x20revenue\x20leak,\x20'+'D-N2).\x20Bind\x20tpl_forward_renewal_payment_witness\x20on\x20each\x20renew\x20forward\x20—\x20a\x20per-step\x20Payment\x20receipt\x20'+'(info.for\x20==\x20order\x20+\x20info.index\x20==\x20progress.history\x20count\x20+\x20info.remark\x20==\x20progress.current,\x20no\x20'+'protocol-255\x20slot:\x20the\x20255\x20burn\x20lives\x20in\x20the\x20allocation\x20escrow\x20internals\x20only,\x20unreachable\x20from\x20a\x20machine\x20forward)\x20with\x20the\x20'+('committed-balance\x20leg\x20as\x20the\x20anti-forgery\x20half.\x20Execution\x20rides\x20the\x20two-transaction\x20recipe:\x20'+RENEWAL_WITNESS_RECIPE)}),b;}export function emitModeGates(a,b){const c=emitAfterSalesGates(a['afterSalesMode'],b),d=emitAcceptanceGates(a['acceptanceMode'],b);return{'blockers':[...c,...d['blockers'],...emitInstallmentGates(a['installmentMode'],b),...emitRenewalFundingGates(b),...emitAffiliateGates(a['affiliateMode'],b),...emitCrowdfundingGates(a['crowdfundingMode'],b),...a['crowdfundingMode']==='none'&&(b['inputs']['campaign_deadline_ms']!==undefined||b['feeParams']?.['campaign_deadline_ms']!==undefined)?emitCampaignDeadlineGate(b):[],...emitLogisticsGates(a['logisticsMode'],b),...emitFormulaGates(b)],'disclosures':[...d['disclosures']]};}export function deriveCapabilityModes({template:a,inputs:b}){const c=b['after_sales_mode'],d=c==='return'||c==='exchange'||c==='warranty'||c==='none'?c:undefined,e=d??a['after_sales_mode']??'none',f=b['acceptance_mode'],g=f==='milestone'||f==='contest'||f==='bounty'||f==='agent'||f==='none'?f:undefined,h=g??a['acceptance_mode']??'none',i=b['installment_mode'],j=i==='deposit_balance'||i==='milestone_n'||i==='none'?i:undefined,k=j??a['installment_mode']??'none',l=b['affiliate_mode'],m=l==='commission'||l==='none'?l:undefined,n=m??a['affiliate_mode']??'none',o=b['crowdfunding_mode'],p=o==='threshold'||o==='flexible'||o==='none'?o:undefined,q=p??a['crowdfunding_mode']??'none',r=b['logistics_mode'],s=r==='carrier'||r==='merchant_managed'||r==='courier'||r==='pickup_point'||r==='none'?r:undefined,t=s??a['logistics_mode']??'none';return{'afterSalesMode':e,'acceptanceMode':h,'installmentMode':k,'affiliateMode':n,'crowdfundingMode':q,'logisticsMode':t};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{landPlatformCommission}from'../knowledge/commission-landing.js';import{collectFeeParamLandings}from'../knowledge/template-scanner.js';import{describeFeeParams}from'../knowledge/param-tiers.js';import{paramSchema}from'../knowledge/param-schema.js';import{PLATFORM_TAKE_KEY}from'../knowledge/template-loader.js';import{compileTemplate}from'./compile.js';const DISCLOSURE_BUILD_MS=Date['UTC'](0x7ea,0x0,0x1);function probeValue(a){const b=typeof a==='number'?a:Number(a);if(!Number['isFinite'](b))return undefined;if(b===0x0)return 0x1;if(b===0x1)return 0x2;return Math['max'](0x1,Math['floor'](b/0x2));}function landedEffect(a,b,c){if(!PLATFORM_TAKE_KEY['test'](b))return{'effect':[]};const d=a['fee_params'],e=landPlatformCommission(a,d),f=landPlatformCommission(a,{...d,[b]:c});if(f['error']!==undefined)return{'effect':[],'blocked':f['error']['split']('.\x20')[0x0]};if(f['rows']===undefined||f['landing']?.['fee_key']!==b)return{'effect':[]};const g=e['rows']??(a['allocator']['rows']??[]);if(JSON['stringify'](g)===JSON['stringify'](f['rows']))return{'effect':[]};return{'effect':['allocator_rows:'+b]};}function changedSteps(c,d){if(d['blockers']['length']>c['blockers']['length'])return[];const e=movedSteps(c,d);if(e['length']===0x0&&d['blockers']['length']<c['blockers']['length']){const f=new Set(d['blockers']['map'](g=>g['code']));for(const g of new Set(c['blockers']['filter'](h=>!f['has'](h['code']))['map'](h=>h['code']))){e['push']('unblocks:'+g);}}return e;}function movedSteps(c,d){const e=[],f=Math['max'](c['plan']['steps']['length'],d['plan']['steps']['length']);for(let g=0x0;g<f;g++){const h=JSON['stringify'](c['plan']['steps'][g]??null),j=JSON['stringify'](d['plan']['steps'][g]??null);if(h!==j)e['push'](c['plan']['steps'][g]?.['id']??d['plan']['steps'][g]?.['id']??'#'+g);}return e;}function pairedKeys(a){const b=new Map();for(const d of a['allocator']['rows']??[]){const e=d['value_from'];if(e===undefined)continue;const f=d['guard_key']??'\x00unkeyed',h=b['get'](f)??new Set();h['add'](e),b['set'](f,h);}const c=new Map();for(const i of b['values']()){if(i['size']<0x2)continue;const j=[...i];for(const k of j)c['set'](k,j['find'](l=>l!==k));}return c;}export function discloseParams(a){const b=collectFeeParamLandings(a),c=compileTemplate(a,{},{'buildTimeMs':DISCLOSURE_BUILD_MS}),d=pairedKeys(a);return describeFeeParams(a)['map'](e=>{const f=(b['get'](e['key'])??[])['map'](o=>({'surface':o['surface'],'site':o['site']})),g=e['selector']&&typeof e['value']==='string'?(a['conditional_guards']??[])['filter'](o=>o['param']===e['key'])['flatMap'](o=>o['values']??[])['find'](o=>o!==e['value']):undefined;let h=g??probeValue(e['value']);const i=c['plan']['inputs'][e['key']];typeof h==='number'&&typeof i==='number'&&i>=DISCLOSURE_BUILD_MS&&h<=i&&(h=i+0x5265c00);if(h===undefined)return{...e,'status':'not-flippable','effect':[],'landing':f,'editable':![]};const j=compileTemplate(a,{[e['key']]:h},{'buildTimeMs':DISCLOSURE_BUILD_MS}),k=typeof h==='number'?landedEffect(a,e['key'],h):{'effect':[]};k['effect']['length']>0x0&&!f['some'](o=>o['surface']==='allocator_row')&&f['push']({'surface':'allocator_row','site':e['key']});const l=[...changedSteps(c,j),...k['effect']],m=d['get'](e['key']);let n=l['length']>0x0?'live':'inert';return n==='inert'&&m!==undefined&&movedSteps(c,j)['length']>0x0&&(n='live'),{...e,'status':n,'effect':l['length']>0x0?l:n==='live'?['allocator_rows:'+e['key']]:l,'landing':f,'editable':n==='live'&&e['disclosure']!=='hidden',...m!==undefined&&n==='live'?{'paired_with':m}:{},...k['blocked']!==undefined?{'blocked_by':k['blocked']}:{}};});}export function disclosureSummary(a){const b=discloseParams(a);return{'total':b['length'],'knobs':b['filter'](c=>c['disclosure']==='knob')['length'],'editable':b['filter'](c=>c['editable'])['length'],'inertKnobs':b['filter'](c=>c['disclosure']==='knob'&&c['status']==='inert')['map'](c=>c['key']),'benchmark':b['filter'](c=>c['disclosure']==='card')['length'],'hidden':b['filter'](c=>c['disclosure']==='hidden')['length'],'liveKnobs':b['filter'](c=>c['disclosure']==='knob'&&c['status']==='live')['map'](c=>c['key'])};}const EXTERNAL_CARRIER={'arbitration_fee_usd':'the\x20Service\x27s\x20bound\x20Arbitration\x20object\x20(a\x20case-level\x20fee\x20configured\x20there,\x20never\x20a\x20template\x20parameter)','courier_tip_bps':'the\x20rider\x20payroll\x20settled\x20outside\x20the\x20order\x20escrow\x20(tips\x20are\x20not\x20a\x20claim\x20on\x20this\x20pool)','max_discount_bps':'the\x20Service-side\x20Discount\x20(coupon)\x20object;\x20this\x20value\x20only\x20bounds\x20what\x20that\x20object\x20may\x20charge\x20(build-time\x20scale\x20check)','merchant_service_fee_bps':'the\x20INCUMBENT\x20platform\x27s\x20merchant-side\x20fee\x20(benchmark\x20only);\x20this\x20store\x20is\x20WoWok\x20direct\x20sales\x20and\x20takes\x20no\x20platform\x20commission,\x20so\x20no\x20money\x20rail\x20reads\x20this\x20value','dispute_window_days':'the\x20keeper-enforced\x20OFF-Machine\x20arbitration\x20filing\x20window\x20(the\x20Arb\x20case\x20lives\x20outside\x20this\x20Machine;\x20the\x20rail\x20dispute-freeze\x20is\x20state-based,\x20never\x20time-based)','protection_cap_usd':'the\x20compensation-fund\x20policy\x20cap\x20(the\x20fund\x20pays\x20as\x20an\x20off-escrow\x20Entity\x20transfer\x20—\x20merchant\x20indemnity;\x20no\x20allocator\x20row\x20reads\x20it)','deposit_refund_days':'a\x20keeper\x20deadline\x20computed\x20off\x20the\x20completed-edge\x20progress-history\x20time\x20(R9\x20keeper\x20scheduling,\x20keeper_dependencies\x20carry\x20the\x20query)','inspection_deadline_hours':'a\x20keeper\x20deadline\x20computed\x20off\x20the\x20returned-edge\x20progress-history\x20time\x20(R9\x20keeper\x20scheduling)','objection_window_hours':'a\x20keeper\x20deadline\x20computed\x20off\x20the\x20inspected-edge\x20progress-history\x20time\x20(R9\x20keeper\x20scheduling)','prepay_cap':'the\x20Service\x20buy-gate\x20config\x20recommendation\x20(merchant-configurable\x20at\x20runtime,\x20not\x20a\x20plan\x20parameter)','max_sessions':'the\x20Service\x20buy-gate\x20coverage\x20bound\x20(merchant-configurable\x20at\x20runtime,\x20not\x20a\x20plan\x20parameter)'};export function inertReason(a){if(a['disclosure']==='hidden')return{'code':'hidden','detail':'Plumbing/directive\x20row:\x20not\x20offered\x20and\x20not\x20meant\x20to\x20be\x20set.'};if(a['status']==='live')return undefined;const b=EXTERNAL_CARRIER[a['key']];if(b!==undefined)return{'code':'external_object','detail':'Carried\x20by\x20'+b+'.\x20Setting\x20it\x20on\x20this\x20template\x20changes\x20nothing\x20on\x20chain\x20—\x20configure\x20it\x20on\x20that\x20object\x20instead.'};if(a['blocked_by']!==undefined)return{'code':'external_object','detail':a['blocked_by']+'.\x20This\x20value\x20is\x20carried\x20by\x20a\x20different\x20object\x20or\x20money\x20shape,\x20not\x20by\x20this\x20template\x27s\x20guards.'};if(a['status']==='not-flippable')return{'code':'not_settable','detail':'The\x20value\x20is\x20not\x20a\x20number\x20a\x20control\x20can\x20offer\x20(no\x20sibling\x20value\x20to\x20probe).'};if(a['landing']['length']===0x0)return{'code':'no_consumer','detail':'No\x20guard,\x20allocator\x20row\x20or\x20time\x20anchor\x20names\x20this\x20key\x20—\x20setting\x20it\x20changes\x20nothing\x20on\x20chain.'};if(a['landing']['every'](e=>e['surface']==='directive'))return{'code':'prose_only','detail':'Named\x20only\x20in\x20the\x20template\x27s\x20prose\x20(build\x20notes\x20/\x20user\x20inputs);\x20no\x20machine\x20object\x20reads\x20it.'};const c=[...new Set(a['landing']['map'](e=>e['surface']+'\x20\x27'+e['site']+'\x27'))]['join'](',\x20'),d=a['landing']['some'](e=>e['surface']==='allocator_row')?'\x20—\x20the\x20allocator\x20rows\x20compile\x20with\x20a\x20literal\x20value,\x20not\x20this\x20key':a['landing']['some'](e=>e['surface']==='guard')?'\x20—\x20the\x20guard\x27s\x20constant\x20is\x20frozen\x20into\x20the\x20Guard\x20at\x20publish':a['landing']['some'](e=>e['surface']==='time_anchor')?'\x20—\x20the\x20time\x20anchor\x20compiles\x20its\x20duration\x20as\x20a\x20constant':'';return{'code':'seat_not_built','detail':'A\x20seat\x20is\x20declared\x20('+c+')\x20but\x20overriding\x20the\x20value\x20does\x20not\x20change\x20the\x20compiled\x20plan'+d+'.\x20It\x20is\x20a\x20published\x20price/capacity\x20figure,\x20not\x20an\x20enforced\x20constant:\x20a\x20Machine\x20rebuild\x20is\x20what\x20changes\x20it.'};}const SURFACE_WORDING={'guard':'enforced\x20by\x20guard','allocator_row':'allocator\x20row','time_anchor':'time\x20anchor','kernel':'compile\x20kernel','directive':'prose\x20only\x20(no\x20chain\x20effect)'};export function landingLine(a){if(a['length']===0x0)return'no\x20declared\x20landing';const b=new Set(),c=[];for(const d of a){const e=SURFACE_WORDING[d['surface']]??d['surface'],f=d['surface']==='directive'?e:e+'\x20\x27'+d['site']+'\x27';if(b['has'](f))continue;b['add'](f),c['push'](f);}return c['join'](';\x20');}export function paramPlane(a){const b=new Map(paramSchema(a)['map'](c=>[c['key'],c]));return discloseParams(a)['map'](c=>{const d=b['get'](c['key']);if(d===undefined)throw new Error('paramPlane:\x20\x27'+c['key']+'\x27\x20has\x20no\x20schema\x20row\x20(classification\x20is\x20not\x20total)');const e=inertReason(c);return{...d,'status':c['status'],'effect':c['effect'],'landing':c['landing'],'landing_line':c['status']!=='live'&&EXTERNAL_CARRIER[c['key']]!==undefined?'carried\x20by\x20'+EXTERNAL_CARRIER[c['key']]:landingLine(c['landing']),'editable':c['editable'],...e!==undefined?{'inert_reason':e}:{},...c['blocked_by']!==undefined?{'blocked_by':c['blocked_by']}:{},...c['paired_with']!==undefined?{'pair_note':'Shares\x20ONE\x2010000\x20basis-point\x20split\x20with\x20\x27'+c['paired_with']+'\x27\x20—\x20set\x20both\x20together;\x20moving\x20either\x20alone\x20exceeds\x2010000\x20and\x20the\x20build\x20refuses.'}:{}};});}
|
|
1
|
+
import{landPlatformCommission}from'../knowledge/commission-landing.js';import{collectFeeParamLandings}from'../knowledge/template-scanner.js';import{describeFeeParams}from'../knowledge/param-tiers.js';import{paramSchema}from'../knowledge/param-schema.js';import{PLATFORM_TAKE_KEY}from'../knowledge/template-loader.js';import{compileTemplate}from'./compile.js';const DISCLOSURE_BUILD_MS=Date['UTC'](0x7ea,0x0,0x1);function probeValue(a){const b=typeof a==='number'?a:Number(a);if(!Number['isFinite'](b))return undefined;if(b===0x0)return 0x1;if(b===0x1)return 0x2;return Math['max'](0x1,Math['floor'](b/0x2));}function landedEffect(a,b,c){if(!PLATFORM_TAKE_KEY['test'](b))return{'effect':[]};const d=a['fee_params'],e=landPlatformCommission(a,d),f=landPlatformCommission(a,{...d,[b]:c});if(f['error']!==undefined)return{'effect':[],'blocked':f['error']['split']('.\x20')[0x0]};if(f['rows']===undefined||f['landing']?.['fee_key']!==b)return{'effect':[]};const g=e['rows']??(a['allocator']['rows']??[]);if(JSON['stringify'](g)===JSON['stringify'](f['rows']))return{'effect':[]};return{'effect':['allocator_rows:'+b]};}function changedSteps(c,d){if(d['blockers']['length']>c['blockers']['length'])return[];const e=movedSteps(c,d);if(e['length']===0x0&&d['blockers']['length']<c['blockers']['length']){const f=new Set(d['blockers']['map'](g=>g['code']));for(const g of new Set(c['blockers']['filter'](h=>!f['has'](h['code']))['map'](h=>h['code']))){e['push']('unblocks:'+g);}}return e;}function movedSteps(c,d){const e=[],f=Math['max'](c['plan']['steps']['length'],d['plan']['steps']['length']);for(let g=0x0;g<f;g++){const h=JSON['stringify'](c['plan']['steps'][g]??null),j=JSON['stringify'](d['plan']['steps'][g]??null);if(h!==j)e['push'](c['plan']['steps'][g]?.['id']??d['plan']['steps'][g]?.['id']??'#'+g);}return e;}function pairedKeys(a){const b=new Map();for(const d of a['allocator']['rows']??[]){const e=d['value_from'];if(e===undefined)continue;const f=d['guard_key']??'\x00unkeyed',h=b['get'](f)??new Set();h['add'](e),b['set'](f,h);}const c=new Map();for(const i of b['values']()){if(i['size']<0x2)continue;const j=[...i];for(const k of j)c['set'](k,j['find'](l=>l!==k));}return c;}export function discloseParams(a){const b=collectFeeParamLandings(a),c=compileTemplate(a,{},{'buildTimeMs':DISCLOSURE_BUILD_MS}),d=pairedKeys(a);return describeFeeParams(a)['map'](e=>{const f=(b['get'](e['key'])??[])['map'](o=>({'surface':o['surface'],'site':o['site']})),g=e['selector']&&typeof e['value']==='string'?(a['conditional_guards']??[])['filter'](o=>o['param']===e['key'])['flatMap'](o=>o['values']??[])['find'](o=>o!==e['value']):undefined;let h=g??probeValue(e['value']);const i=c['plan']['inputs'][e['key']];typeof h==='number'&&typeof i==='number'&&i>=DISCLOSURE_BUILD_MS&&h<=i&&(h=i+0x5265c00);if(h===undefined)return{...e,'status':'not-flippable','effect':[],'landing':f,'editable':![]};const j=compileTemplate(a,{[e['key']]:h},{'buildTimeMs':DISCLOSURE_BUILD_MS}),k=typeof h==='number'?landedEffect(a,e['key'],h):{'effect':[]};k['effect']['length']>0x0&&!f['some'](o=>o['surface']==='allocator_row')&&f['push']({'surface':'allocator_row','site':e['key']});const l=[...changedSteps(c,j),...k['effect']],m=d['get'](e['key']);let n=l['length']>0x0?'live':'inert';return n==='inert'&&m!==undefined&&movedSteps(c,j)['length']>0x0&&(n='live'),{...e,'status':n,'effect':l['length']>0x0?l:n==='live'?['allocator_rows:'+e['key']]:l,'landing':f,'editable':n==='live'&&e['disclosure']!=='hidden',...m!==undefined&&n==='live'?{'paired_with':m}:{},...k['blocked']!==undefined?{'blocked_by':k['blocked']}:{}};});}export function disclosureSummary(a){const b=discloseParams(a);return{'total':b['length'],'knobs':b['filter'](c=>c['disclosure']==='knob')['length'],'editable':b['filter'](c=>c['editable'])['length'],'inertKnobs':b['filter'](c=>c['disclosure']==='knob'&&c['status']==='inert')['map'](c=>c['key']),'benchmark':b['filter'](c=>c['disclosure']==='card')['length'],'hidden':b['filter'](c=>c['disclosure']==='hidden')['length'],'liveKnobs':b['filter'](c=>c['disclosure']==='knob'&&c['status']==='live')['map'](c=>c['key'])};}const EXTERNAL_CARRIER={'arbitration_fee_usd':'the\x20Service\x27s\x20bound\x20Arbitration\x20object\x20(a\x20case-level\x20fee\x20configured\x20there,\x20never\x20a\x20template\x20parameter)','courier_tip_bps':'the\x20rider\x20payroll\x20settled\x20outside\x20the\x20order\x20escrow\x20(tips\x20are\x20not\x20a\x20claim\x20on\x20this\x20pool)','max_discount_bps':'the\x20Service-side\x20Discount\x20(coupon)\x20object;\x20this\x20value\x20only\x20bounds\x20what\x20that\x20object\x20may\x20charge\x20(build-time\x20scale\x20check)','merchant_service_fee_bps':'the\x20INCUMBENT\x20platform\x27s\x20merchant-side\x20fee\x20(benchmark\x20only);\x20this\x20store\x20is\x20WoWok\x20direct\x20sales\x20and\x20takes\x20no\x20platform\x20commission,\x20so\x20no\x20money\x20rail\x20reads\x20this\x20value','dispute_window_days':'the\x20keeper-enforced\x20OFF-Machine\x20arbitration\x20filing\x20window\x20(the\x20Arb\x20case\x20lives\x20outside\x20this\x20Machine;\x20the\x20rail\x20dispute-freeze\x20is\x20state-based,\x20never\x20time-based)','protection_cap_usd':'the\x20compensation-fund\x20policy\x20cap\x20(the\x20fund\x20pays\x20as\x20an\x20off-escrow\x20Entity\x20transfer\x20—\x20merchant\x20indemnity;\x20no\x20allocator\x20row\x20reads\x20it)','deposit_refund_days':'a\x20keeper\x20deadline\x20computed\x20off\x20the\x20completed-edge\x20progress-history\x20time\x20(R9\x20keeper\x20scheduling,\x20keeper_dependencies\x20carry\x20the\x20query)','inspection_deadline_hours':'a\x20keeper\x20deadline\x20computed\x20off\x20the\x20returned-edge\x20progress-history\x20time\x20(R9\x20keeper\x20scheduling)','objection_window_hours':'a\x20keeper\x20deadline\x20computed\x20off\x20the\x20inspected-edge\x20progress-history\x20time\x20(R9\x20keeper\x20scheduling)','prepay_cap':'the\x20Service\x20buy-gate\x20config\x20recommendation\x20(merchant-configurable\x20at\x20runtime,\x20not\x20a\x20plan\x20parameter)','max_sessions':'the\x20Service\x20buy-gate\x20coverage\x20bound\x20(merchant-configurable\x20at\x20runtime,\x20not\x20a\x20plan\x20parameter)','max_months':'the\x20authored\x20ceiling\x20(months)\x20on\x20a\x20single\x20term\x27s\x20calendar\x20span\x20for\x20this\x20template\x27s\x20per-session\x20release\x20math\x20(the\x20order\x20must\x20cover\x20session_count\x20x\x20per_session_release;\x20max_months\x20bounds\x20how\x20long\x20one\x20buy\x20may\x20run)','membership_price':'the\x20club\x27s\x20JOIN-fee\x20rail\x20outside\x20the\x20order\x20escrow\x20(collected\x20on\x20any\x20rail\x20—\x20e.g.\x20a\x20voucher\x20Payment\x20to\x20the\x20club\x20wallet\x20—\x20before\x20staff\x20write\x20the\x20buyer\x27s\x20credential\x20row);\x20the\x20buy\x20gate\x20reads\x20the\x20\x27members\x27\x20expiry\x20row,\x20never\x20the\x20fee','membership_duration_days':'the\x20club-written\x20credential\x20expiry\x20(staff\x20upsert\x20the\x20\x27members\x27\x20row\x20to\x20join/renewal\x20time\x20+\x20duration\x20via\x20the\x20members_write\x20guard);\x20repository\x20rows\x20carry\x20no\x20readable\x20timestamp,\x20so\x20nothing\x20on\x20chain\x20reads\x20this\x20knob\x20—\x20the\x20written\x20row\x20IS\x20the\x20validity'};export function inertReason(a){if(a['disclosure']==='hidden')return{'code':'hidden','detail':'Plumbing/directive\x20row:\x20not\x20offered\x20and\x20not\x20meant\x20to\x20be\x20set.'};if(a['status']==='live')return undefined;const b=EXTERNAL_CARRIER[a['key']];if(b!==undefined)return{'code':'external_object','detail':'Carried\x20by\x20'+b+'.\x20Setting\x20it\x20on\x20this\x20template\x20changes\x20nothing\x20on\x20chain\x20—\x20configure\x20it\x20on\x20that\x20object\x20instead.'};if(a['blocked_by']!==undefined)return{'code':'external_object','detail':a['blocked_by']+'.\x20This\x20value\x20is\x20carried\x20by\x20a\x20different\x20object\x20or\x20money\x20shape,\x20not\x20by\x20this\x20template\x27s\x20guards.'};if(a['status']==='not-flippable')return{'code':'not_settable','detail':'The\x20value\x20is\x20not\x20a\x20number\x20a\x20control\x20can\x20offer\x20(no\x20sibling\x20value\x20to\x20probe).'};if(a['landing']['length']===0x0)return{'code':'no_consumer','detail':'No\x20guard,\x20allocator\x20row\x20or\x20time\x20anchor\x20names\x20this\x20key\x20—\x20setting\x20it\x20changes\x20nothing\x20on\x20chain.'};if(a['landing']['every'](e=>e['surface']==='directive'))return{'code':'prose_only','detail':'Named\x20only\x20in\x20the\x20template\x27s\x20prose\x20(build\x20notes\x20/\x20user\x20inputs);\x20no\x20machine\x20object\x20reads\x20it.'};const c=[...new Set(a['landing']['map'](e=>e['surface']+'\x20\x27'+e['site']+'\x27'))]['join'](',\x20'),d=a['landing']['some'](e=>e['surface']==='allocator_row')?'\x20—\x20the\x20allocator\x20rows\x20compile\x20with\x20a\x20literal\x20value,\x20not\x20this\x20key':a['landing']['some'](e=>e['surface']==='guard')?'\x20—\x20the\x20guard\x27s\x20constant\x20is\x20frozen\x20into\x20the\x20Guard\x20at\x20publish':a['landing']['some'](e=>e['surface']==='time_anchor')?'\x20—\x20the\x20time\x20anchor\x20compiles\x20its\x20duration\x20as\x20a\x20constant':'';return{'code':'seat_not_built','detail':'A\x20seat\x20is\x20declared\x20('+c+')\x20but\x20overriding\x20the\x20value\x20does\x20not\x20change\x20the\x20compiled\x20plan'+d+'.\x20It\x20is\x20a\x20published\x20price/capacity\x20figure,\x20not\x20an\x20enforced\x20constant:\x20a\x20Machine\x20rebuild\x20is\x20what\x20changes\x20it.'};}const SURFACE_WORDING={'guard':'enforced\x20by\x20guard','allocator_row':'allocator\x20row','time_anchor':'time\x20anchor','kernel':'compile\x20kernel','directive':'prose\x20only\x20(no\x20chain\x20effect)'};export function landingLine(a){if(a['length']===0x0)return'no\x20declared\x20landing';const b=new Set(),c=[];for(const d of a){const e=SURFACE_WORDING[d['surface']]??d['surface'],f=d['surface']==='directive'?e:e+'\x20\x27'+d['site']+'\x27';if(b['has'](f))continue;b['add'](f),c['push'](f);}return c['join'](';\x20');}export function paramPlane(a){const b=new Map(paramSchema(a)['map'](c=>[c['key'],c]));return discloseParams(a)['map'](c=>{const d=b['get'](c['key']);if(d===undefined)throw new Error('paramPlane:\x20\x27'+c['key']+'\x27\x20has\x20no\x20schema\x20row\x20(classification\x20is\x20not\x20total)');const e=inertReason(c);return{...d,'status':c['status'],'effect':c['effect'],'landing':c['landing'],'landing_line':c['status']!=='live'&&EXTERNAL_CARRIER[c['key']]!==undefined?'carried\x20by\x20'+EXTERNAL_CARRIER[c['key']]:landingLine(c['landing']),'editable':c['editable'],...e!==undefined?{'inert_reason':e}:{},...c['blocked_by']!==undefined?{'blocked_by':c['blocked_by']}:{},...c['paired_with']!==undefined?{'pair_note':'Shares\x20ONE\x2010000\x20basis-point\x20split\x20with\x20\x27'+c['paired_with']+'\x27\x20—\x20set\x20both\x20together;\x20moving\x20either\x20alone\x20exceeds\x2010000\x20and\x20the\x20build\x20refuses.'}:{}};});}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createHash}from'node:crypto';import{existsSync,mkdirSync,readdirSync,readFileSync,renameSync,writeFileSync}from'node:fs';import{homedir}from'node:os';import{join}from'node:path';const RUNS_DIR=join(homedir(),'.wowok','runs');export function planDigest(a){return createHash('sha256')['update'](JSON['stringify'](a))['digest']('hex')['slice'](0x0,0x10);}function runsDir(){try{if(!existsSync(RUNS_DIR))mkdirSync(RUNS_DIR,{'recursive':!![]});return RUNS_DIR;}catch{return RUNS_DIR;}}function runPath(a){if(!/^[a-z0-9-]+$/['test'](a))throw new Error('invalid\x20run_id\x20\x27'+a+'\x27');return join(runsDir(),a+'.json');}function writeCheckpoint(a){try{const b=runPath(a['run_id']),c=b+'.tmp';writeFileSync(c,JSON['stringify'](a),'utf8'),renameSync(c,b);}catch{}}export function beginRun(a,b){const c={'run_id':'run-'+Date['now']()['toString'](0x24)+'-'+Math['random']()['toString'](0x24)['slice'](0x2,0x8),'plan_digest':planDigest(a),'total_steps':b,'status':'running','started_at':Date['now'](),'updated_at':Date['now'](),'steps':{},'outputs':{}};return writeCheckpoint(c),c;}export function checkpointStep(a,b,c,d){a['steps'][b]=c;if(typeof d==='string'&&d['length']>0x0)a['outputs'][b]=d;a['updated_at']=Date['now'](),writeCheckpoint(a);}export function sealRun(a,b){a['status']=b,a['updated_at']=Date['now'](),writeCheckpoint(a);}export function readRun(a){try{const b=runPath(a);if(!existsSync(b))return undefined;return JSON['parse'](readFileSync(b,'utf8'));}catch{return undefined;}}export function findResumableRun(a){const b=planDigest(a);try{const c=runsDir();if(!existsSync(c))return undefined;let d;for(const e of readdirNames(c)){if(!e['endsWith']('.json')||e['endsWith']('.tmp'))continue;const g=readRun(e['slice'](0x0,-'.json'['length']));if(g?.['plan_digest']!==b||g['status']==='completed')continue;if(d===undefined||g['updated_at']>d['updated_at'])d=g;}return d;}catch{return undefined;}}export function listRuns(a=0xa){try{const b=runsDir();if(!existsSync(b))return[];const c=readdirNames(b)['filter'](e=>e['endsWith']('.json')&&!e['endsWith']('.tmp'))['map'](e=>e['slice'](0x0,-'.json'['length'])),d=c['map'](e=>readRun(e))['filter'](e=>e!==undefined)['sort']((e,f)=>f['updated_at']-e['updated_at']);return d['slice'](0x0,Math['max'](0x1,a));}catch{return[];}}function readdirNames(a){try{return readdirSync(a);}catch{return[];}}export function resumeFrom(a){const b=Object['entries'](a['steps'])['filter'](([,c])=>c['status']==='executed')['map'](([c])=>c);return{'completedSteps':b,'outputs':{...a['outputs']}};}export async function reconcileRun(a,b){const c=[],d=[];let e=0x0;for(const [i,j]of Object['entries'](a['steps'])){if(j['status']==='executed'){if(typeof j['digest']==='string'&&j['digest']['length']>0x0){let k;try{k=await b(j['digest']);}catch{k='absent';}if(k==='executed')c['push']({'step_id':i,'proof':'digest_executed','digest':j['digest'],'address':j['address']});else k==='failed'?(e+=0x1,d['push']({'step_id':i,'digest':j['digest'],'address':j['address'],'advice':'ledger\x20says\x20executed\x20but\x20digest\x20'+j['digest']+'\x20read\x20back\x20as\x20a\x20FAILED\x20(reverted)\x20tx\x20—\x20'+'the\x20step\x27s\x20effect\x20never\x20landed.\x20Drop\x20it\x20from\x20the\x20completed\x20set:\x20re-run\x20plan_execute\x20'+'(this\x20step\x20re-executes;\x20do\x20NOT\x20adopt\x20its\x20address\x20without\x20an\x20independent\x20object\x20read).'})):(c['push']({'step_id':i,'proof':'ledger_only','digest':j['digest'],'address':j['address']}),e+=0x1);}else c['push']({'step_id':i,'proof':'ledger_only','address':j['address']}),e+=0x1;}else{if(j['status']==='failed'&&typeof j['digest']==='string'&&j['digest']['length']>0x0){let l;try{l=await b(j['digest']);}catch{l='absent';}l==='executed'&&d['push']({'step_id':i,'digest':j['digest'],'address':j['address'],'advice':'step\x20FAILED\x20in\x20the\x20log\x20but\x20digest\x20'+j['digest']+'\x20read\x20back\x20EXECUTED\x20—\x20the\x20tx\x20committed\x20'+('(transport-unknown\x20face).\x20Its\x20created\x20object(s)\x20EXIST:\x20verify\x20'+(j['address']??'<the\x20created\x20object>')+'\x20')+'on-chain\x20and\x20ADOPT\x20it\x20(add\x20the\x20stepId\x20to\x20completed_steps\x20and\x20the\x20address\x20to\x20previous_outputs)\x20—\x20'+'a\x20blind\x20resume\x20would\x20create\x20a\x20DUPLICATE.'});}}}const f=new Set(c['map'](m=>m['step_id'])),g=[];for(const [m,n]of Object['entries'](a['steps'])){if(n['status']!=='executed'&&!f['has'](m))g['push'](m);}const h=Object['keys'](a['steps'])['length'];return a['total_steps']>h&&g['push']('(+'+(a['total_steps']-h)+'\x20step(s)\x20never\x20dispatched\x20—\x20not\x20in\x20the\x20ledger)'),{'completed':c,'pending':g,'orphans':d,'unverified_count':e};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{auditPlan}from'./audit.js';import{createsOf,stepById}from'./plan.js';export const SEVERITY_WEIGHT={'critical':0x64,'high':0x19,'medium':0x5,'low':0x1,'info':0x0};export function auditScore(a){let b=a['issues']['length']*SEVERITY_WEIGHT['critical'];for(const c of a['findings'])b+=SEVERITY_WEIGHT[c['level']];return b;}function uniqueStepId(a,b){if(stepById(a,b)===undefined)return b;for(let c=0x1;;c++){const d=b+'-reflux-'+c;if(stepById(a,d)===undefined)return d;}}const patchMissingRepository=a=>{const b=a['audit']['facts']['first_repo_query_without_repository'];if(typeof b!=='string')return undefined;if(createsOf(a['plan'],'repository')['length']>0x0)return undefined;const c=createsOf(a['plan'],'permission')[0x0];if(c===undefined)return undefined;const d=uniqueStepId(a['plan'],'repository'),e={'op':'create','id':d,'object':'repository','params':{'name':b+'_evidence','permission':{'$ref':c['id']},'description':'auto-inserted:\x20guard\x20'+b+'\x20queries\x20repository\x20data\x20(HOST-GRAPH-01)'},'notes':'reflux:\x20HOST-GRAPH-01\x20mechanical\x20patch'},f=a['plan']['steps']['findIndex'](h=>h['id']===c['id']),g=[...a['plan']['steps']['slice'](0x0,f+0x1),e,...a['plan']['steps']['slice'](f+0x1)];return{'plan':{...a['plan'],'steps':g},'patch':{'rule_id':'HOST-GRAPH-01','kind':'insert_repository','stepId':d,'detail':'guard\x20'+b+'\x20queries\x20repository\x20data;\x20inserted\x20repository\x20create\x20step\x20bound\x20to\x20'+c['id']}};},PATCH_REGISTRY=[patchMissingRepository];function toBlocks(a){const b=[];for(const c of a['issues']){b['push']({'rule_id':c['code'],'level':'critical','title':'structural\x20issue\x20in\x20step\x20'+(c['step']??'?'),'detail':c['detail']});}for(const d of a['findings']){b['push']({'rule_id':d['rule_id'],'level':d['level'],'title':d['title'],'detail':d['mitigation']??d['description']});}return b;}export function reflux(a,b={}){const c=b['maxIterations']??0x8,d=[];let e=a,f=auditPlan(e),g=0x0;while(g<c){const h=new Set(d['map'](j=>j['rule_id']+':'+j['kind']));let i;for(const j of PATCH_REGISTRY){const k=j({'plan':e,'audit':f});if(k!==undefined&&!h['has'](k['patch']['rule_id']+':'+k['patch']['kind'])){i=k;break;}}if(i===undefined)break;e=i['plan'],d['push'](i['patch']),f=auditPlan(e),g+=0x1;}return{'plan':e,'applied':d,'blocks':toBlocks(f),'iterations':g,'audit':f};}
|
|
1
|
+
import{auditPlan}from'./audit.js';import{createsOf,stepById}from'./plan.js';export const SEVERITY_WEIGHT={'critical':0x64,'high':0x19,'medium':0x5,'low':0x1,'info':0x0};export function auditScore(a){let b=a['issues']['length']*SEVERITY_WEIGHT['critical'];for(const c of a['findings'])b+=SEVERITY_WEIGHT[c['level']];return b;}function uniqueStepId(a,b){if(stepById(a,b)===undefined)return b;for(let c=0x1;;c++){const d=b+'-reflux-'+c;if(stepById(a,d)===undefined)return d;}}const patchMissingRepository=a=>{const b=a['audit']['facts']['first_repo_query_without_repository'];if(typeof b!=='string')return undefined;if(createsOf(a['plan'],'repository')['length']>0x0)return undefined;const c=createsOf(a['plan'],'permission')[0x0];if(c===undefined)return undefined;const d=uniqueStepId(a['plan'],'repository'),e={'op':'create','id':d,'object':'repository','params':{'name':b+'_evidence','permission':{'$ref':c['id']},'description':'auto-inserted:\x20guard\x20'+b+'\x20queries\x20repository\x20data\x20(HOST-GRAPH-01)'},'notes':'reflux:\x20HOST-GRAPH-01\x20mechanical\x20patch'},f=a['plan']['steps']['findIndex'](h=>h['id']===c['id']),g=[...a['plan']['steps']['slice'](0x0,f+0x1),e,...a['plan']['steps']['slice'](f+0x1)];return{'plan':{...a['plan'],'steps':g},'patch':{'rule_id':'HOST-GRAPH-01','kind':'insert_repository','stepId':d,'detail':'guard\x20'+b+'\x20queries\x20repository\x20data;\x20inserted\x20repository\x20create\x20step\x20bound\x20to\x20'+c['id']}};},PATCH_REGISTRY=[patchMissingRepository];function toBlocks(a){const b=[];for(const c of a['issues']){b['push']({'rule_id':c['code'],'level':'critical','title':'structural\x20issue\x20in\x20step\x20'+(c['step']??'?'),'detail':c['detail']});}for(const d of a['findings']){if(d['level']==='info')continue;b['push']({'rule_id':d['rule_id'],'level':d['level'],'title':d['title'],'detail':d['mitigation']??d['description']});}return b;}export function reflux(a,b={}){const c=b['maxIterations']??0x8,d=[];let e=a,f=auditPlan(e),g=0x0;while(g<c){const h=new Set(d['map'](j=>j['rule_id']+':'+j['kind']));let i;for(const j of PATCH_REGISTRY){const k=j({'plan':e,'audit':f});if(k!==undefined&&!h['has'](k['patch']['rule_id']+':'+k['patch']['kind'])){i=k;break;}}if(i===undefined)break;e=i['plan'],d['push'](i['patch']),f=auditPlan(e),g+=0x1;}return{'plan':e,'applied':d,'blocks':toBlocks(f),'iterations':g,'audit':f};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const isEnvSignerEntity=a=>a!==null&&typeof a==='object'&&!Array['isArray'](a)&&a['$late']!==undefined&&a['$late']!==null&&a['$late']['by']==='env_signer';export function ownershipManifestOfPlan(a){const b=[];b['push']({'role':'merchant','required':![],'status':'builder_bound','severity':'ok','detail':'the\x20Service,\x20its\x20admin\x20Permission\x20and\x20every\x20auto-granted\x20rail\x20are\x20created\x20under\x20the\x20deploy\x20signer\x20'+'($late\x20env_signer)\x20—\x20the\x20builder\x20starts\x20as\x20the\x20merchant\x20by\x20design','remedy':'to\x20move\x20operation\x20to\x20another\x20subject\x20post-deploy:\x20transfer\x20the\x20Permission\x20admin,\x20then\x20grant\x20the\x20new\x20'+'merchant\x27s\x20address\x20its\x20indexes\x20(\x27add\x20perm\x20by\x20index\x27,\x20entity\x20=\x20the\x20new\x20address)\x20—\x20a\x20business\x20decision,\x20'+'never\x20a\x20build-time\x20default'});const c=a['find'](h=>h['op']==='create'&&h['object']==='arbitration');if(c!==undefined){const h=c['account'];typeof h==='string'&&h['length']>0x0?b['push']({'role':'arbitrator','required':!![],'status':'independent_account_required','severity':'ok','detail':'the\x20venue\x20and\x20its\x20permission\x20are\x20created\x20under\x20the\x20NAMED\x20per-step\x20account\x20\x27'+h+'\x27\x20—\x20'+('plan_execute\x20FAILS\x20CLOSED\x20unless\x20accounts[\x22'+h+'\x22]\x20is\x20provided\x20(a\x20declared\x20account\x20never\x20')+'falls\x20back\x20to\x20the\x20default\x20signer).\x20Provide\x20the\x20INDEPENDENT\x20arbitrator\x20controller\x27s\x20account;\x20'+'passing\x20the\x20builder\x27s\x20own\x20address\x20ships\x20self-adjudication\x20(the\x20neutrality\x20gates\x20still\x20apply).'}):b['push']({'role':'arbitrator','required':!![],'status':'builder_bound','severity':'advisory','detail':'the\x20arbitration\x20venue\x20is\x20created\x20under\x20the\x20deploy\x20signer\x20—\x20a\x20\x27third-party\x27\x20dispute\x20venue\x20'+'administered\x20by\x20the\x20builder\x27s\x20own\x20address\x20is\x20self-adjudication\x20(the\x20D-A1\x20\x27um=null\x20/\x20venue=builder\x27\x20face)','remedy':'re-generate\x20so\x20the\x20venue\x20rides\x20a\x20named\x20controller\x20account\x20(plan_execute\x20then\x20requires\x20it\x20'+'fail-closed),\x20or\x20transfer\x20the\x20venue\x20admin\x20to\x20the\x20independent\x20party\x20post-deploy\x20BEFORE\x20any\x20real\x20'+'dispute\x20is\x20filed'});}const d=[];let e=!![],f=![];for(const i of a){if(i['op']!=='configure')continue;const j=i['params'];if(j===undefined||j['op']!=='add\x20perm\x20by\x20index')continue;const k=j['entity'];if(!Array['isArray'](k)||k['length']===0x0)continue;f=!![];const l=j['index'];if(typeof l==='number')d['push'](l);if(!k['every'](isEnvSignerEntity))e=![];}f&&(e?b['push']({'role':'collaborator','required':![],'status':'builder_bound','severity':'advisory','detail':'all\x20'+d['length']+'\x20permission-entity\x20grant(s)\x20(indexes\x20'+d['join'](',\x20')+')\x20target\x20'+'the\x20deploy\x20signer\x20—\x20the\x20entity\x20table\x20holds\x20ONE\x20address,\x20so\x20no\x20staff/operator\x20identity\x20exists\x20yet\x20'+'(the\x20D-A1\x20\x22Permission\x20entities:\x20builder-only\x22\x20face)','remedy':'post-deploy,\x20grant\x20each\x20real\x20operator\x20their\x20index\x20via\x20permission\x20\x27add\x20perm\x20by\x20index\x27\x20'+'(entity\x20=\x20the\x20operator\x27s\x20address);\x20keep\x20the\x20deploy-signer\x20rows\x20as\x20the\x20builder\x27s\x20own\x20rail'}):b['push']({'role':'collaborator','required':![],'status':'builder_bound','severity':'ok','detail':'permission-entity\x20grants\x20target\x20addresses\x20beyond\x20the\x20deploy\x20signer'}));b['push']({'role':'customer','required':![],'status':'external','severity':'ok','detail':'buyers\x20are\x20external\x20subjects\x20—\x20order-holder\x20identity\x20legs\x20bind\x20at\x20ORDER\x20time\x20(order.owner),\x20so\x20the\x20'+'build\x20cannot\x20and\x20must\x20not\x20pre-attribute\x20them'});const g=b['every'](m=>m['severity']==='ok');return{'entries':b,'complete':g,'note':'D-A1\x20ownership\x20manifest\x20—\x20derived\x20from\x20the\x20plan\x27s\x20own\x20wiring\x20(template-independent).\x20'+'complete=false\x20means\x20at\x20least\x20one\x20role\x20is\x20builder-bound\x20where\x20an\x20independent\x20subject\x20is\x20required:\x20'+'apply\x20the\x20entry\x27s\x20remedy\x20(transfer/registration\x20steps)\x20or\x20accept\x20the\x20advisory\x20explicitly.\x20'+'Declaration\x20completeness\x20is\x20machine-checked\x20here;\x20declaration\x20CORRECTNESS\x20(the\x20address\x20really\x20is\x20'+'the\x20independent\x20party)\x20stays\x20a\x20human\x20confirmation.'};}
|