Files
rose-ash/shared/static/wasm/sx/harness-web.sxbc.json
giles b274e428eb WASM kernel fixes: parse, env sync, iterative CEK, click delegation
Browser kernel:
- Add `parse` native fn (matches server: unwrap single, list for multiple)
- Restore env==global_env guard on _env_bind_hook (let bindings must not
  leak to _vm_globals — caused JIT CSSX "Not callable: nil" errors)
- Add _env_bind_hook call in env_set_id so set! mutations sync to VM globals
- Fire _vm_global_set_hook from OP_DEFINE so VM defines sync back to CEK env

CEK evaluator:
- Replace recursive cek_run with iterative while loop using sx_truthy
  (previous attempt used strict Bool true matching, broke in wasm_of_ocaml)
- Remove dead cek_run_iterative function

Web modules:
- Remove find-matching-route and parse-route-pattern stubs from
  boot-helpers.sx that shadowed real implementations from router.sx
- Sync boot-helpers.sx to dist/static dirs for bytecode compilation

Platform (sx-platform.js):
- Set data-sx-ready attribute after boot completes (was only in boot-init
  which sx-platform.js doesn't call — it steps through boot manually)
- Add document-level click delegation for a[sx-get] links as workaround
  for bytecoded bind-event not attaching per-element listeners (VM closure
  issue under investigation — bind-event runs but dom-add-listener calls
  don't result in addEventListener)

Tests:
- New test_kernel.js: 24 tests covering env sync, parse, route matching,
  host FFI/preventDefault, deep recursion
- New navigation test: "sx-get link fetches SX not HTML and preserves layout"
  (currently catches layout breakage after SPA swap — known issue)

Known remaining issues:
- JIT CSSX failures: closure-captured variables resolve to nil in VM bytecode
- SPA content swap via execute-request breaks page layout
- Bytecoded bind-event doesn't attach per-element addEventListener (root
  cause unknown — when listen-target guard appears to block despite element
  being valid)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 13:33:13 +00:00

1 line
14 KiB
JSON

{"magic":"SXBC","version":1,"hash":"b94a32e5b86d6f76","module":{"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,51,33,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,5,51,47,0,128,46,0,5,51,49,0,128,48,0,5,51,51,0,128,50,0,5,51,53,0,128,52,0,50],"constants":[{"t":"s","v":"mock-element"},{"t":"code","v":{"bytecode":[1,0,0,52,1,0,0,1,2,0,65,0,0,1,3,0,52,1,0,0,1,4,0,16,0,1,5,0,1,6,0,1,7,0,65,0,0,16,1,33,11,0,1,9,0,16,1,65,1,0,32,3,0,65,0,0,16,2,33,11,0,1,10,0,16,2,65,1,0,32,3,0,65,0,0,52,8,0,3,65,6,0,50],"constants":[{"t":"s","v":"children"},{"t":"s","v":"list"},{"t":"s","v":"listeners"},{"t":"s","v":"event-log"},{"t":"s","v":"tag"},{"t":"s","v":"text"},{"t":"s","v":""},{"t":"s","v":"attrs"},{"t":"s","v":"merge"},{"t":"s","v":"class"},{"t":"s","v":"id"}],"arity":3}},{"t":"s","v":"mock-set-text!"},{"t":"code","v":{"bytecode":[16,0,1,1,0,16,1,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"text"}],"arity":2}},{"t":"s","v":"mock-append-child!"},{"t":"code","v":{"bytecode":[20,0,0,16,0,1,2,0,52,1,0,2,16,1,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"get"},{"t":"s","v":"children"}],"arity":2}},{"t":"s","v":"mock-set-attr!"},{"t":"code","v":{"bytecode":[16,0,1,2,0,52,1,0,2,16,1,16,2,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"get"},{"t":"s","v":"attrs"}],"arity":3}},{"t":"s","v":"mock-get-attr"},{"t":"code","v":{"bytecode":[16,0,1,1,0,52,0,0,2,16,1,52,0,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"attrs"}],"arity":2}},{"t":"s","v":"mock-add-listener!"},{"t":"code","v":{"bytecode":[16,0,1,1,0,52,0,0,2,17,3,16,3,16,1,52,3,0,2,52,2,0,1,33,15,0,16,3,16,1,52,5,0,0,52,4,0,3,32,1,0,2,5,20,6,0,16,3,16,1,52,0,0,2,16,2,49,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"listeners"},{"t":"s","v":"not"},{"t":"s","v":"has-key?"},{"t":"s","v":"dict-set!"},{"t":"s","v":"list"},{"t":"s","v":"append!"}],"arity":3}},{"t":"s","v":"simulate-click"},{"t":"code","v":{"bytecode":[16,0,1,1,0,52,0,0,2,1,2,0,52,0,0,2,17,1,16,1,33,14,0,51,4,0,1,0,16,1,52,3,0,2,32,1,0,2,5,20,5,0,16,0,1,6,0,52,0,0,2,1,7,0,1,2,0,65,1,0,49,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"listeners"},{"t":"s","v":"click"},{"t":"s","v":"for-each"},{"t":"code","v":{"bytecode":[20,0,0,16,0,1,2,0,18,0,1,3,0,1,4,0,65,2,0,52,1,0,1,49,2,50],"constants":[{"t":"s","v":"cek-call"},{"t":"s","v":"list"},{"t":"s","v":"target"},{"t":"s","v":"type"},{"t":"s","v":"click"}],"arity":1,"upvalue-count":1}},{"t":"s","v":"append!"},{"t":"s","v":"event-log"},{"t":"s","v":"type"}],"arity":1}},{"t":"s","v":"simulate-input"},{"t":"code","v":{"bytecode":[20,0,0,16,0,1,1,0,16,1,48,3,5,16,0,1,3,0,52,2,0,2,1,4,0,52,2,0,2,17,2,16,2,33,14,0,51,6,0,1,0,16,2,52,5,0,2,32,1,0,2,5,20,7,0,16,0,1,8,0,52,2,0,2,1,1,0,16,1,1,9,0,1,4,0,65,2,0,49,2,50],"constants":[{"t":"s","v":"mock-set-attr!"},{"t":"s","v":"value"},{"t":"s","v":"get"},{"t":"s","v":"listeners"},{"t":"s","v":"input"},{"t":"s","v":"for-each"},{"t":"code","v":{"bytecode":[20,0,0,16,0,1,2,0,18,0,1,3,0,1,4,0,65,2,0,52,1,0,1,49,2,50],"constants":[{"t":"s","v":"cek-call"},{"t":"s","v":"list"},{"t":"s","v":"target"},{"t":"s","v":"type"},{"t":"s","v":"input"}],"arity":1,"upvalue-count":1}},{"t":"s","v":"append!"},{"t":"s","v":"event-log"},{"t":"s","v":"type"}],"arity":2}},{"t":"s","v":"simulate-event"},{"t":"code","v":{"bytecode":[16,0,1,1,0,52,0,0,2,16,1,52,0,0,2,17,3,16,3,33,18,0,51,3,0,1,0,1,2,1,1,16,3,52,2,0,2,32,1,0,2,5,20,4,0,16,0,1,5,0,52,0,0,2,1,6,0,16,2,1,7,0,16,1,65,2,0,49,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"listeners"},{"t":"s","v":"for-each"},{"t":"code","v":{"bytecode":[20,0,0,16,0,1,2,0,18,0,1,3,0,18,1,1,4,0,18,2,65,3,0,52,1,0,1,49,2,50],"constants":[{"t":"s","v":"cek-call"},{"t":"s","v":"list"},{"t":"s","v":"target"},{"t":"s","v":"detail"},{"t":"s","v":"type"}],"arity":1,"upvalue-count":3}},{"t":"s","v":"append!"},{"t":"s","v":"event-log"},{"t":"s","v":"detail"},{"t":"s","v":"type"}],"arity":3}},{"t":"s","v":"assert-text"},{"t":"code","v":{"bytecode":[16,0,1,1,0,52,0,0,2,17,2,20,2,0,16,2,16,1,1,4,0,16,1,1,5,0,16,2,1,6,0,52,3,0,5,49,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"text"},{"t":"s","v":"assert="},{"t":"s","v":"str"},{"t":"s","v":"Expected text \""},{"t":"s","v":"\", got \""},{"t":"s","v":"\""}],"arity":2}},{"t":"s","v":"assert-attr"},{"t":"code","v":{"bytecode":[20,0,0,16,0,16,1,48,2,17,3,20,1,0,16,3,16,2,1,3,0,16,1,1,4,0,16,2,1,5,0,16,3,1,6,0,52,2,0,7,49,3,50],"constants":[{"t":"s","v":"mock-get-attr"},{"t":"s","v":"assert="},{"t":"s","v":"str"},{"t":"s","v":"Expected attr "},{"t":"s","v":"=\""},{"t":"s","v":"\", got \""},{"t":"s","v":"\""}],"arity":3}},{"t":"s","v":"assert-class"},{"t":"code","v":{"bytecode":[20,0,0,16,0,1,1,0,48,2,6,34,4,0,5,1,2,0,17,2,20,3,0,16,2,1,6,0,52,5,0,2,16,1,52,4,0,2,1,8,0,16,1,1,9,0,16,2,1,10,0,52,7,0,5,49,2,50],"constants":[{"t":"s","v":"mock-get-attr"},{"t":"s","v":"class"},{"t":"s","v":""},{"t":"s","v":"assert"},{"t":"s","v":"contains?"},{"t":"s","v":"split"},{"t":"s","v":" "},{"t":"s","v":"str"},{"t":"s","v":"Expected class \""},{"t":"s","v":"\" in \""},{"t":"s","v":"\""}],"arity":2}},{"t":"s","v":"assert-no-class"},{"t":"code","v":{"bytecode":[20,0,0,16,0,1,1,0,48,2,6,34,4,0,5,1,2,0,17,2,20,3,0,16,2,1,7,0,52,6,0,2,16,1,52,5,0,2,52,4,0,1,1,9,0,16,1,1,10,0,16,2,1,11,0,52,8,0,5,49,2,50],"constants":[{"t":"s","v":"mock-get-attr"},{"t":"s","v":"class"},{"t":"s","v":""},{"t":"s","v":"assert"},{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"split"},{"t":"s","v":" "},{"t":"s","v":"str"},{"t":"s","v":"Expected no class \""},{"t":"s","v":"\" but found in \""},{"t":"s","v":"\""}],"arity":2}},{"t":"s","v":"assert-child-count"},{"t":"code","v":{"bytecode":[16,0,1,2,0,52,1,0,2,52,0,0,1,17,2,20,3,0,16,2,16,1,1,5,0,16,1,1,6,0,16,2,52,4,0,4,49,3,50],"constants":[{"t":"s","v":"len"},{"t":"s","v":"get"},{"t":"s","v":"children"},{"t":"s","v":"assert="},{"t":"s","v":"str"},{"t":"s","v":"Expected "},{"t":"s","v":" children, got "}],"arity":2}},{"t":"s","v":"assert-event-fired"},{"t":"code","v":{"bytecode":[20,0,0,51,2,0,1,1,16,0,1,4,0,52,3,0,2,52,1,0,2,1,6,0,16,1,1,7,0,52,5,0,3,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":"some"},{"t":"code","v":{"bytecode":[16,0,1,2,0,52,1,0,2,18,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"type"}],"arity":1,"upvalue-count":1}},{"t":"s","v":"get"},{"t":"s","v":"event-log"},{"t":"s","v":"str"},{"t":"s","v":"Expected event \""},{"t":"s","v":"\" to have been fired"}],"arity":2}},{"t":"s","v":"assert-no-event"},{"t":"code","v":{"bytecode":[20,0,0,51,3,0,1,1,16,0,1,5,0,52,4,0,2,52,2,0,2,52,1,0,1,1,7,0,16,1,1,8,0,52,6,0,3,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":"not"},{"t":"s","v":"some"},{"t":"code","v":{"bytecode":[16,0,1,2,0,52,1,0,2,18,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"type"}],"arity":1,"upvalue-count":1}},{"t":"s","v":"get"},{"t":"s","v":"event-log"},{"t":"s","v":"str"},{"t":"s","v":"Expected event \""},{"t":"s","v":"\" to NOT have been fired"}],"arity":2}},{"t":"s","v":"event-fire-count"},{"t":"code","v":{"bytecode":[51,2,0,1,1,16,0,1,4,0,52,3,0,2,52,1,0,2,52,0,0,1,50],"constants":[{"t":"s","v":"len"},{"t":"s","v":"filter"},{"t":"code","v":{"bytecode":[16,0,1,2,0,52,1,0,2,18,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"type"}],"arity":1,"upvalue-count":1}},{"t":"s","v":"get"},{"t":"s","v":"event-log"}],"arity":2}},{"t":"s","v":"make-web-harness"},{"t":"code","v":{"bytecode":[20,0,0,1,1,0,16,0,48,2,17,1,20,2,0,16,1,1,3,0,1,4,0,65,0,0,1,5,0,20,6,0,1,7,0,1,8,0,1,5,0,48,3,65,2,0,48,3,5,16,1,50],"constants":[{"t":"s","v":"make-harness"},{"t":"s","v":"platform"},{"t":"s","v":"harness-set!"},{"t":"s","v":"dom"},{"t":"s","v":"elements"},{"t":"s","v":"root"},{"t":"s","v":"mock-element"},{"t":"s","v":"div"},{"t":"s","v":"id"}],"arity":1}},{"t":"s","v":"is-renderable?"},{"t":"code","v":{"bytecode":[16,0,52,0,0,1,33,4,0,3,32,118,0,16,0,52,1,0,1,33,4,0,3,32,105,0,16,0,52,2,0,1,33,4,0,3,32,92,0,16,0,52,3,0,1,33,4,0,3,32,79,0,16,0,52,4,0,1,33,4,0,4,32,66,0,16,0,52,6,0,1,52,5,0,1,33,4,0,4,32,49,0,16,0,52,7,0,1,33,4,0,3,32,36,0,16,0,52,8,0,1,17,1,16,1,52,10,0,1,1,11,0,52,9,0,2,6,33,11,0,5,16,1,52,4,0,1,52,5,0,1,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"string?"},{"t":"s","v":"number?"},{"t":"s","v":"boolean?"},{"t":"s","v":"dict?"},{"t":"s","v":"not"},{"t":"s","v":"list?"},{"t":"s","v":"empty?"},{"t":"s","v":"first"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"symbol"}],"arity":1}},{"t":"s","v":"is-render-leak?"},{"t":"code","v":{"bytecode":[16,0,52,1,0,1,52,0,0,1,6,33,12,0,5,20,2,0,16,0,48,1,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"is-renderable?"}],"arity":1}},{"t":"s","v":"assert-renderable"},{"t":"code","v":{"bytecode":[20,0,0,20,1,0,16,0,48,1,1,3,0,16,1,1,4,0,16,0,52,5,0,1,16,0,52,6,0,1,33,6,0,1,7,0,32,48,0,16,0,52,8,0,1,6,33,26,0,5,16,0,52,10,0,1,52,9,0,1,6,33,11,0,5,16,0,52,11,0,1,52,6,0,1,33,6,0,1,12,0,32,3,0,1,13,0,52,2,0,5,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":"is-renderable?"},{"t":"s","v":"str"},{"t":"s","v":"Render leak in "},{"t":"s","v":": "},{"t":"s","v":"type-of"},{"t":"s","v":"dict?"},{"t":"s","v":" — dict would appear as {:key val} text in output"},{"t":"s","v":"list?"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"first"},{"t":"s","v":" — list of dicts would appear as raw data in output"},{"t":"s","v":" — non-renderable value would appear as text"}],"arity":2}},{"t":"s","v":"render-body-audit"},{"t":"code","v":{"bytecode":[52,0,0,0,17,1,51,2,0,1,1,16,0,52,1,0,2,5,16,1,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"bytecode":[20,0,0,16,0,48,1,33,88,0,20,1,0,18,0,1,2,0,16,0,52,3,0,1,33,6,0,1,4,0,32,48,0,16,0,52,5,0,1,6,33,26,0,5,16,0,52,7,0,1,52,6,0,1,6,33,11,0,5,16,0,52,8,0,1,52,3,0,1,33,6,0,1,9,0,32,3,0,1,10,0,1,11,0,16,0,52,12,0,1,65,2,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"is-render-leak?"},{"t":"s","v":"append!"},{"t":"s","v":"leak-kind"},{"t":"s","v":"dict?"},{"t":"s","v":"dict"},{"t":"s","v":"list?"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"first"},{"t":"s","v":"list-of-dicts"},{"t":"s","v":"other"},{"t":"s","v":"value-type"},{"t":"s","v":"type-of"}],"arity":1,"upvalue-count":1}}],"arity":1}},{"t":"s","v":"assert-render-body-clean"},{"t":"code","v":{"bytecode":[20,0,0,16,0,48,1,17,2,20,1,0,16,2,52,2,0,1,1,4,0,16,2,52,5,0,1,1,6,0,16,1,1,7,0,1,8,0,1,9,0,52,3,0,7,49,2,50],"constants":[{"t":"s","v":"render-body-audit"},{"t":"s","v":"assert"},{"t":"s","v":"empty?"},{"t":"s","v":"str"},{"t":"s","v":"Render body has "},{"t":"s","v":"len"},{"t":"s","v":" leak(s) in "},{"t":"s","v":". "},{"t":"s","v":"render-to-html/render-to-dom render ALL body expressions — "},{"t":"s","v":"put side effects in let bindings, not body expressions."}],"arity":2}},{"t":"s","v":"mock-render"},{"t":"code","v":{"bytecode":[16,0,52,0,0,1,33,4,0,2,32,173,0,16,0,52,1,0,1,33,25,0,20,2,0,1,3,0,48,1,17,1,20,4,0,16,1,16,0,48,2,5,16,1,32,139,0,16,0,52,5,0,1,33,29,0,20,2,0,1,3,0,48,1,17,1,20,4,0,16,1,16,0,52,6,0,1,48,2,5,16,1,32,101,0,16,0,52,8,0,1,52,7,0,1,33,4,0,2,32,84,0,16,0,52,9,0,1,33,4,0,2,32,71,0,16,0,52,10,0,1,17,1,16,1,52,12,0,1,1,13,0,52,11,0,2,52,7,0,1,33,4,0,2,32,39,0,20,2,0,20,14,0,16,1,48,1,48,1,17,2,2,17,3,51,15,0,1,2,1,3,17,3,16,3,16,0,52,16,0,1,48,1,5,16,2,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"string?"},{"t":"s","v":"mock-element"},{"t":"s","v":"TEXT"},{"t":"s","v":"mock-set-text!"},{"t":"s","v":"number?"},{"t":"s","v":"str"},{"t":"s","v":"not"},{"t":"s","v":"list?"},{"t":"s","v":"empty?"},{"t":"s","v":"first"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"code","v":{"bytecode":[16,0,52,1,0,1,52,0,0,1,33,127,0,16,0,52,2,0,1,17,1,16,1,52,4,0,1,1,5,0,52,3,0,2,33,62,0,16,0,52,6,0,1,52,1,0,1,52,0,0,1,33,41,0,20,7,0,18,0,20,8,0,16,1,48,1,16,0,1,10,0,52,9,0,2,48,3,5,18,1,16,0,52,6,0,1,52,6,0,1,49,1,32,1,0,2,32,38,0,20,11,0,16,1,48,1,17,2,16,2,33,12,0,20,12,0,18,0,16,2,48,2,32,1,0,2,5,18,1,16,0,52,6,0,1,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"first"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"keyword"},{"t":"s","v":"rest"},{"t":"s","v":"mock-set-attr!"},{"t":"s","v":"keyword-name"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"mock-render"},{"t":"s","v":"mock-append-child!"}],"arity":1,"upvalue-count":2}},{"t":"s","v":"rest"}],"arity":1}},{"t":"s","v":"mock-render-fragment"},{"t":"code","v":{"bytecode":[51,1,0,20,3,0,16,0,52,2,0,2,52,0,0,2,50],"constants":[{"t":"s","v":"filter"},{"t":"code","v":{"bytecode":[16,0,52,1,0,1,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"nil?"}],"arity":1}},{"t":"s","v":"map"},{"t":"s","v":"mock-render"}],"arity":1}},{"t":"s","v":"assert-single-render-root"},{"t":"code","v":{"bytecode":[20,0,0,16,0,48,1,17,2,20,1,0,16,2,52,3,0,1,1,4,0,52,2,0,2,1,6,0,16,1,1,7,0,16,2,52,3,0,1,1,8,0,1,9,0,1,10,0,52,5,0,7,49,2,50],"constants":[{"t":"s","v":"mock-render-fragment"},{"t":"s","v":"assert"},{"t":"s","v":"="},{"t":"s","v":"len"},{"t":"n","v":1},{"t":"s","v":"str"},{"t":"s","v":"Expected single render root in "},{"t":"s","v":" but got "},{"t":"s","v":" element(s). "},{"t":"s","v":"Multi-body let/begin in render-to-html/render-to-dom renders "},{"t":"s","v":"ALL expressions — put side effects in let bindings."}],"arity":2}},{"t":"s","v":"assert-tag"},{"t":"code","v":{"bytecode":[20,0,0,16,0,1,3,0,52,2,0,2,16,1,52,1,0,2,1,5,0,16,1,1,6,0,16,0,1,3,0,52,2,0,2,1,7,0,52,4,0,5,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"tag"},{"t":"s","v":"str"},{"t":"s","v":"Expected <"},{"t":"s","v":"> but got <"},{"t":"s","v":">"}],"arity":2}}]}}