)]}'
{
  "commit": "93d8161dacd3031f49b676d3192c038f3870e33d",
  "tree": "2d143b0d694450ddb4b6971247b3bca24b4af452",
  "parents": [
    "0aadd4c65084a38dbeae3bd05814ead3f743ed77"
  ],
  "author": {
    "name": "luigi-rosso",
    "email": "hello@rive.app",
    "time": "Thu Oct 01 20:17:37 2026 +0000"
  },
  "committer": {
    "name": "luigi-rosso",
    "email": "hello@rive.app",
    "time": "Thu Oct 01 20:17:37 2026 +0000"
  },
  "message": "feat(rasc): document the AnimaScript std and close its gaps with the Luau API (#14524) b80a7fc662\n* fix(rasc): one static closure per plain function so references compare equal, and reject a second operator per symbol\n\n* feat(runtime): wasm host ops for transitions, path effect nodes, pointer stamps, artboard paths and gamepads, and test blobs\n\n* feat(rasc): document std/rive with /// and close its gaps with the Luau API\n\n* fix(scripting): Luau docs and declarations match the runtime, translator color setters and path effect nodes\n\n* feat(scripting_workspace): /// docs in AnimaScript hovers and the API docs generator\n\n* docs(cli): regenerate the Luau API bundle from the corrected builtins\n\n* fix(runtime): bound gamepad payload counts one at a time so they cannot wrap\n\n* docs(rasc): fence AnimaScript examples as as, with the grammar registered under that alias\n\n* docs(cli): animascript protocols guide and generated std api reference\n\n* feat(scripting_workspace): translate Transition, Mat4 and every string.format specifier to AnimaScript\n\n* docs(cli): regenerate the AnimaScript API bundle with as fences\n\n* feat(lsp): completion items carry kind, signature and docs for Luau and AnimaScript\n\n* fix(rasc): print floats with schubfach shortest digits and drop formatNumber\u0027s exact search\n\n* feat(rasc): infer type arguments from a callback\u0027s return and parameter types\n\n* docs(cli): regenerate the AnimaScript API bundle for the promise docs\n\n* fix(rasc): class errors reach the real sink from peeks and callback annotations, duplicate operators report once in source spelling\n\n* fix(rasc): a callback\u0027s own type never binds a type parameter positionally, and the hint names parameter annotations when only they would bind it\n\n* refactor(rasc): static closures share one empty closure class\n\n* perf(rasc): call umul128 instead of inlining it eight times into schubfach\n\n* fix(wasm): scope path effect nodes to their update and wire the shim\u0027s artboard ops\n\n* refactor(rasc): drop Pattern.match and captures, gsub copies text in runs\n\n* fix(rasc): unwatched properties leave their owner so listen cycles stop growing\n\n* fix(rasc): saturate buffer and date integer conversions like Luau, trim buffer allocations\n\n* fix(rasc): keep host composed geometry when a path is released\n\n* perf(rasc): skip bounds checks on fixed Mat4 entries\n\n* fix(rasc): raise Luau\u0027s GPU constructor argument errors instead of a silent null handle\n\n* fix(rasc): match Luau\u0027s Vector lerp and normalized bit for bit\n\n* test(cli): GPUBuffer data length guard on both lanes\n\n* refactor(cli): share the api bundle writer between the Luau and AnimaScript generators\n\n* fix(cli): keep operator[]\u003d and generic defaults in the AnimaScript api bundle\n\n* docs(cli): note AnimaScript gamepad indices are 0 based\n\n* ci: test the AnimaScript bundle generator and run rive-cli checks on std changes\n\n* fix(scripting): document a Luau completion or hover only from the --- block directly above it\n\n* perf(scripting): fill Luau completion details only for the entries the filter keeps\n\n* fix(lsp): badge types as structs, enum values as enum members and overloads as methods\n\n* fix(scripting): keep a one line enum\u0027s values from inheriting the enum\u0027s /// comment\n\n* docs(scripting): AnimaScript API overview, module Functions pages, member anchors and no unsafe in signatures\n\n* ci: check the AnimaScript bundle publishes what the site reference does\n\n* docs(cli): regenerate both api bundles after the review fixes\n\n* refactor(rasc): spell our std and fixture nullable types T?, with ?. and ?? where clearer\n\n* fix(scripting_workspace): emit and document nullable types as T?\n\n* test(lsp): completion after ?. carries the member\u0027s docs\n\n* docs(cli): regenerate the AnimaScript api bundle for T?\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9a22341d19ac791cb83e80d6d5b6057809f0dd15",
      "old_mode": 33188,
      "old_path": ".rive_head",
      "new_id": "35d7f6153c1605729cabe4bdef23d8443310bb8f",
      "new_mode": 33188,
      "new_path": ".rive_head"
    },
    {
      "type": "modify",
      "old_id": "d204d9a252b9ccfb17163ee654658c00628a4722",
      "old_mode": 33188,
      "old_path": "include/rive/data_bind/data_values/data_value_color.hpp",
      "new_id": "5acc49231241e16302ae4f6ce67ebe388f50cb78",
      "new_mode": 33188,
      "new_path": "include/rive/data_bind/data_values/data_value_color.hpp"
    },
    {
      "type": "modify",
      "old_id": "9bbb9f8a62d227849c5890fa9e37a45f56360bdc",
      "old_mode": 33188,
      "old_path": "include/rive/scripted/script_backend.hpp",
      "new_id": "bac64ae86cd7b11701fa56d89d3c16d87f6a100d",
      "new_mode": 33188,
      "new_path": "include/rive/scripted/script_backend.hpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3264cb6b10e8fc08216bbd832d95d9513bb8a34a",
      "new_mode": 33188,
      "new_path": "include/rive/scripted/transition_child_ref.hpp"
    },
    {
      "type": "modify",
      "old_id": "644636fdb311e47aa1a7cac267f062dfad975d74",
      "old_mode": 33188,
      "old_path": "include/rive/wasm/gamepad_wire.hpp",
      "new_id": "4d7e32e2a9442d5852c7c4193ded9f3f4b77857f",
      "new_mode": 33188,
      "new_path": "include/rive/wasm/gamepad_wire.hpp"
    },
    {
      "type": "modify",
      "old_id": "e065559fd9371ed2db44996aceb832f4189f9e9a",
      "old_mode": 33188,
      "old_path": "include/rive/wasm/rive_bindings_v1.h",
      "new_id": "69f0022247be5f797d7d19820d3712dd1e631da3",
      "new_mode": 33188,
      "new_path": "include/rive/wasm/rive_bindings_v1.h"
    },
    {
      "type": "modify",
      "old_id": "8557a26433e68a903184d794b2ec0f9737600fd5",
      "old_mode": 33188,
      "old_path": "include/rive/wasm/wasm_scripting_vm.hpp",
      "new_id": "0c1d6d2c6c13296701b58af3cebaffdb68393d66",
      "new_mode": 33188,
      "new_path": "include/rive/wasm/wasm_scripting_vm.hpp"
    },
    {
      "type": "modify",
      "old_id": "835830b5e6f54522102c19cd7d84a414fc858785",
      "old_mode": 33188,
      "old_path": "src/lua/lua_transition.cpp",
      "new_id": "b848263282f31dccdb3214588f6eec32d6f4e4a5",
      "new_mode": 33188,
      "new_path": "src/lua/lua_transition.cpp"
    },
    {
      "type": "modify",
      "old_id": "76b4506a30f977f481b50352ddb6b17efca14223",
      "old_mode": 33188,
      "old_path": "src/viewmodel/runtime/viewmodel_instance_color_runtime.cpp",
      "new_id": "98c864ebd590e61d92f679c06c867a46a7493f75",
      "new_mode": 33188,
      "new_path": "src/viewmodel/runtime/viewmodel_instance_color_runtime.cpp"
    },
    {
      "type": "modify",
      "old_id": "9d7f45c01fc5c71c586788a7331f1f908d01499c",
      "old_mode": 33188,
      "old_path": "src/wasm/idl/bindings.py",
      "new_id": "8a5be1a906989ee9f4904dea4c198028e591966c",
      "new_mode": 33188,
      "new_path": "src/wasm/idl/bindings.py"
    },
    {
      "type": "modify",
      "old_id": "08d3b4ecf4f6e22c252f9911cc12a0bb024ba48a",
      "old_mode": 33188,
      "old_path": "src/wasm/wasm_natives_gen.hpp",
      "new_id": "1b729f7f010dfd33447e1e3c0ad3180984242685",
      "new_mode": 33188,
      "new_path": "src/wasm/wasm_natives_gen.hpp"
    },
    {
      "type": "modify",
      "old_id": "5b27c5eed40dc43ea19ad373b590da0c7dfad9fc",
      "old_mode": 33188,
      "old_path": "src/wasm/wasm_natives_web_gen.hpp",
      "new_id": "9c824247c76aa31e009cf2b40830b13c3c9f81e0",
      "new_mode": 33188,
      "new_path": "src/wasm/wasm_natives_web_gen.hpp"
    },
    {
      "type": "modify",
      "old_id": "d6d67311b056e281770a39ded6643e34d9ee03fe",
      "old_mode": 33188,
      "old_path": "src/wasm/wasm_scripting_vm.cpp",
      "new_id": "2330689cc37d73bc9dc191e89c469e45d2cbf3f1",
      "new_mode": 33188,
      "new_path": "src/wasm/wasm_scripting_vm.cpp"
    },
    {
      "type": "modify",
      "old_id": "3bd33e948d81508b707f9edf36a15ddd1628c040",
      "old_mode": 33188,
      "old_path": "src/wasm/web/rive_module_imports.mjs",
      "new_id": "a45f6eeb44e1547eb1446570677a9f1d727df0ca",
      "new_mode": 33188,
      "new_path": "src/wasm/web/rive_module_imports.mjs"
    },
    {
      "type": "modify",
      "old_id": "3105ec85fb213700da88e19f48d82a3f69f01dca",
      "old_mode": 33188,
      "old_path": "tests/unit_tests/runtime/color_test.cpp",
      "new_id": "2ba829d6622f76d711f67416d926462998e4d8a0",
      "new_mode": 33188,
      "new_path": "tests/unit_tests/runtime/color_test.cpp"
    }
  ]
}
