)]}'
{
  "commit": "43f3834e3ffd903370c504e357461e407b3d3983",
  "tree": "3262c304a2d3bcbef2626d6361734bb3dc09b21a",
  "parents": [
    "5f1f240f10a19a61929b5c573974900cb62e9dac"
  ],
  "author": {
    "name": "Jordan Bayles",
    "email": "bayles.jordan@gmail.com",
    "time": "Tue Jun 16 14:40:21 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Jun 16 14:40:21 2026 -0700"
  },
  "message": "fix: make array operator[] dense when assigning past the end (#1611) (#1693)\n\n* fix: make array operator[] dense when assigning past the end (#1611)\n\nValue::operator[](ArrayIndex) only inserted the requested index, so\n`arr[5] \u003d x` on an empty array stored a single element while size()\nreported 6 (highest index + 1) and serialization emitted six elements\n(missing indices written as null). Range-for iteration walked the\nunderlying sparse map and therefore visited only the one populated\nelement -- inconsistent with both size() and the serialized output.\n\nJSON arrays are dense, so materialize the intervening indices as null\nwhen assigning beyond the current end, exactly as resize() already does\nwhen growing. Iteration, size(), equality, and serialization now agree.\n\nNote: this is a behavior change (arrays are now dense in memory after a\nsparse-looking assignment), so it targets the 1.10.0 minor release rather\nthan a 1.9.x patch. It is ABI-compatible (no signature or layout change),\nso SOVERSION is unchanged.\n\n* chore: bump version to 1.10.0\n\nmaster becomes the 1.10 line. The #1611 array fix changes runtime\nbehavior (dense arrays) for existing valid code, so the next release is\na minor bump, not a 1.9.x patch. SOVERSION stays at 27 (ABI unchanged).",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b2335b5805f16feb30c2248de3b15bb10a6c14b0",
      "old_mode": 33188,
      "old_path": "CMakeLists.txt",
      "new_id": "d8e6d4cfab94ac68373c1a404e40c49c8f4fdf14",
      "new_mode": 33188,
      "new_path": "CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "ad09c20f79e51f39006f7e767618a2568a8b3d81",
      "old_mode": 33188,
      "old_path": "MODULE.bazel",
      "new_id": "09607241baa814181342e6f5e5c42e6e1babbb49",
      "new_mode": 33188,
      "new_path": "MODULE.bazel"
    },
    {
      "type": "modify",
      "old_id": "ff435d58d7bb1c9ce409e18562f3d108f3212e0c",
      "old_mode": 33188,
      "old_path": "include/json/version.h",
      "new_id": "2068ba011a9bb5c457ff535bdca3d97eec490404",
      "new_mode": 33188,
      "new_path": "include/json/version.h"
    },
    {
      "type": "modify",
      "old_id": "2cd0b5d332f6520d6d822fbce3671c5bf643b3db",
      "old_mode": 33188,
      "old_path": "meson.build",
      "new_id": "380b7e2bd7e00931f8163c43df3c5d0c05308579",
      "new_mode": 33188,
      "new_path": "meson.build"
    },
    {
      "type": "modify",
      "old_id": "ac881094e59c369c4a7f7f364d1ffb697e7f51bb",
      "old_mode": 33188,
      "old_path": "src/lib_json/json_value.cpp",
      "new_id": "5823bd1d95006396d2d9c5282fff6d8bfbf3c006",
      "new_mode": 33188,
      "new_path": "src/lib_json/json_value.cpp"
    },
    {
      "type": "modify",
      "old_id": "9d13fdbe453a1fb615c71b7cfcc2c4a3957fd60a",
      "old_mode": 33188,
      "old_path": "src/test_lib_json/main.cpp",
      "new_id": "6673867dcd48316db6c9deae3c9b1a97741fe7b9",
      "new_mode": 33188,
      "new_path": "src/test_lib_json/main.cpp"
    }
  ]
}
