)]}'
{
  "log": [
    {
      "commit": "8c4ea242050b617dfd80d5e3d35f56df7f9ea98b",
      "tree": "5737ba19cf7a252fde29efa8793171b46bd894e9",
      "parents": [
        "2f81c6def8d6e147e0c373996c5db951e0078441"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Aug 04 13:11:29 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Aug 04 14:45:41 2025 +0000"
      },
      "message": "Canvas: Require authentication\n\nChange-Id: Ia1328cbcfd1b977bae8f0707a8fef4695bccad64\n"
    },
    {
      "commit": "deaf326f5d9858f9d53dc60f899443bb9e35f9ba",
      "tree": "b56fe88ec8d7ac30a63c4da033f32f699bc53105",
      "parents": [
        "8323a0509934ad06880ecbc34800b071f35fb647"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Aug 04 11:12:41 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Aug 04 11:41:49 2025 +0000"
      },
      "message": "Canvas: Implement ingress auth\n\nChange-Id: Id884940feb0ac96559874f698fb213acd60f76f4\n"
    },
    {
      "commit": "8323a0509934ad06880ecbc34800b071f35fb647",
      "tree": "63c2210e14881d2b17743e26c38271493ec92b21",
      "parents": [
        "3322247c26ee3fac4310baa16acf4727b32e9826"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Aug 04 06:12:26 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Aug 04 11:41:49 2025 +0000"
      },
      "message": "Canvas: Show env var values in deploy mode\n\nChange-Id: Icfa8e33f1441e7bab1bb139286b38a223583919d\n"
    },
    {
      "commit": "456167909ed79b2c580b2e1f59a0c7c40585c3ed",
      "tree": "5885b38e9113f899515b46cf999699cea72b4e45",
      "parents": [
        "a4bf471a88b603c3d57728bb81774bfef36c3982"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Aug 03 11:44:02 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Aug 03 11:44:02 2025 +0000"
      },
      "message": "Canvas: Fix webhook handler\n\nChange-Id: I4515c0e9f0c00ee7fff69d3551e22d112e132633\n"
    },
    {
      "commit": "a4bf471a88b603c3d57728bb81774bfef36c3982",
      "tree": "ffafa63ace8b7d08651fb6ca7e3cf9ec9e4f2ae3",
      "parents": [
        "6439d448800083c5726f86240621cf2b2120e650"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Aug 03 02:21:28 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Aug 03 02:37:52 2025 +0000"
      },
      "message": "Canvas: Filter out proxy and old nodes\n\nChange-Id: Ibe04f36f1dd24ea87a0d41d60006a154ec5720b0\n"
    },
    {
      "commit": "43e0aadc734358431b604c4ebf62269ef266c415",
      "tree": "f2a3219bbf171789c68f454acd07ad8b2040961a",
      "parents": [
        "e10ba16719d9b55295e9b950cfd647b536e3b735"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Aug 01 16:17:27 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Aug 02 08:46:26 2025 +0000"
      },
      "message": "Canvas: Add VM/PROXY dev modes support\n\n- Update ServiceSchema to discriminate between VM and PROXY dev modes\n- Add DevDisabled, DevVM, DevProxy TypeScript types\n- Update ServiceData type in graph.ts for new dev structure\n- Update generateDodoConfig to handle both VM and PROXY modes\n- Update configToGraph to properly convert dev configurations\n- Maintain backward compatibility with existing dev configurations\n- Update UI and introduce two new DevVM and DevProxy components\n- Fetch user machine list from headscale API\n\nChange-Id: I8f9df4ab9bd34c049fffadb748115335e8260a54\n"
    },
    {
      "commit": "e10ba16719d9b55295e9b950cfd647b536e3b735",
      "tree": "6e45d4d55a1ba0105bd23fe153e2097b285f0687",
      "parents": [
        "2835615e4cd72a46289f2e14c9afb0ccc43e0ceb"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 31 19:52:29 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Aug 01 14:50:16 2025 +0400"
      },
      "message": "DodoApp: Implement dev proxy mode\n\nWith dev proxy user can substitute any service with their own local\nmachine. In which case dodo will run proxy server on the platform\nwhich will forward all requests to the configured address.\n\nWhen VPN is enabled, dodo will run tailscale sidecar in the proxy pod.\n\nChange-Id: I12592ae77d2e88e0582c8fe1e0f82e5fd24e02cb\n"
    },
    {
      "commit": "0e1a97d95423a4fb693ecced2007b7e0b0f4db1e",
      "tree": "bc9ab2e1b09736453541ac15fa20c871dc877ae0",
      "parents": [
        "212f8005eccaab752054eb65ef74fc01d37a31fd"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 08 10:42:23 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 08 10:44:59 2025 +0000"
      },
      "message": "Canvas: Actually use env vars\n\nChange-Id: Ia0662b36679bbf1c7cd42256bcffd591b30733c3\n"
    },
    {
      "commit": "e085d5baf2a4c404e47820b1061417f62671ad42",
      "tree": "e91dbde6df15c5df0b1f1395dd82478df56ac577",
      "parents": [
        "007c85773b71d3a38cefda2d3e23b46700384907"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 08 07:51:36 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 08 07:51:36 2025 +0000"
      },
      "message": "Canvas: App wide env vars\n\nChange-Id: Ia4101ba7c646e33591a1ddd642622e2712865b71\n"
    },
    {
      "commit": "007c85773b71d3a38cefda2d3e23b46700384907",
      "tree": "3e4a8350b750485fa0d904d70ef5d1b382481be2",
      "parents": [
        "166d9925c67149410a414b5b412b32d8322ca759"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 08 04:27:35 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 08 04:27:35 2025 +0000"
      },
      "message": "Canvas: Configure deploy keys on repo owner\n\nExpose Agent compact prop\nImplement GitHub repo pagination\n\nChange-Id: Ib444c53f2c7f83d7461e6f1a8e9d86698d320e92\n"
    },
    {
      "commit": "166d9925c67149410a414b5b412b32d8322ca759",
      "tree": "abbc7d4e8f3721931855f886fc0852c88953ff4d",
      "parents": [
        "785c98873f248641a1c4385eb2b4d60af3e30ad5"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 17:30:21 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 17:30:21 2025 +0000"
      },
      "message": "Canvas: Auto cleanup old workers\n\nChange-Id: I046ce8dcbadd14b53e465fe0ffb60fae642c6951\n"
    },
    {
      "commit": "785c98873f248641a1c4385eb2b4d60af3e30ad5",
      "tree": "08b7049ce80585075721a72c6635f57d403d7ed8",
      "parents": [
        "31f16a1d520126779e9c05a08257982ad932648d"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 16:40:25 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 16:40:28 2025 +0000"
      },
      "message": "Canvas: Check agent health\n\nChange-Id: I429eecebde1d661513dfd94e27cdaa820bd49493\n"
    },
    {
      "commit": "31f16a1d520126779e9c05a08257982ad932648d",
      "tree": "3bfe3312048e3172c48f52f10cdec545d29ab5f6",
      "parents": [
        "f9892a564b78ef812b0d0f1efedd453ea5425c3d"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 19:23:43 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 19:23:43 2025 +0400"
      },
      "message": "AppRunner: Install bash in Sketch runner\n\nChange-Id: I3e6ba41c7f3a1f53cd8fdddfad7a6b023c28e6eb\n"
    },
    {
      "commit": "f9892a564b78ef812b0d0f1efedd453ea5425c3d",
      "tree": "89528cb1ba7e8f3f6affbef8bf9c794515c730b9",
      "parents": [
        "5be6f78135341869b3b395429a25ebeeea4c0710"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 19:23:28 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 19:23:28 2025 +0400"
      },
      "message": "Canvas: Add nodeId field to dodo-app.jsonschema\n\nChange-Id: I2761a6f91f98c610b5436c6e6586d1ceecafcf70\n"
    },
    {
      "commit": "5be6f78135341869b3b395429a25ebeeea4c0710",
      "tree": "b1b3c90a9f25fc28fc002c93b098ba02254edfba",
      "parents": [
        "b0dc2d17ad60e6e306c29daefed479a5de1cf59f"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 17:42:00 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 19:21:20 2025 +0400"
      },
      "message": "AppRunner: Reload app on configuration change\n\nChange-Id: I2c5ea0eaf3453815c8c89c9290edba250ca4fbaa\n"
    },
    {
      "commit": "b0dc2d17ad60e6e306c29daefed479a5de1cf59f",
      "tree": "7d4ca6c7607cca931f766b6ce50135e985adc11d",
      "parents": [
        "a5fde99dee7b7f10cdc986302c380b7b3658a10b"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 08:28:48 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 08:28:48 2025 +0000"
      },
      "message": "Canvas: Project -\u003e Logs cascade delete\n\nChange-Id: I268751c8a568240dc7a2976549a46d227d35f968\n"
    },
    {
      "commit": "a5fde99dee7b7f10cdc986302c380b7b3658a10b",
      "tree": "145be75f4356c32cbcafe3a971f3f0668ff687dc",
      "parents": [
        "56e9f471ee3ab18ea51317b023d3b0c96f8553ce"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 08:18:19 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 08:18:19 2025 +0000"
      },
      "message": "Canvas: Preview tab\n\nChange-Id: I8a66cd977db5864828ad7ba9025270d624143091\n"
    },
    {
      "commit": "56e9f471ee3ab18ea51317b023d3b0c96f8553ce",
      "tree": "92a714d575f2663b38df905400d03b98c289ee0b",
      "parents": [
        "52441604dd0cc8296a354ba55d8033848cfbf4ad"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 03:33:38 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 03:33:38 2025 +0000"
      },
      "message": "Canvas: Add option to deploy latest draft\n\nChange-Id: Ia74c64354e1f80ec794140ce406fb21c16feb0da\n"
    },
    {
      "commit": "52441604dd0cc8296a354ba55d8033848cfbf4ad",
      "tree": "2e2241b810473114e8e4a39ee36c58358ec7b41f",
      "parents": [
        "efc9a4a8fb4b648249c836cc14bba9dfe235f154"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Jul 06 18:22:56 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Jul 06 18:22:56 2025 +0000"
      },
      "message": "Canvas: Auto-assign position to nodes if missing\n\nChange-Id: Ica80878e0cb280c9a44f58637c11b53d78e07892\n"
    },
    {
      "commit": "efc9a4a8fb4b648249c836cc14bba9dfe235f154",
      "tree": "492d2d05696be9c228a3f568047b14d6efab08dd",
      "parents": [
        "678746bd0efe365620a5172cfd432b6986651ba3"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Jul 06 16:22:10 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Jul 06 16:22:10 2025 +0000"
      },
      "message": "Canvas: Use regular font size for node details label\n\nChange-Id: Ib9cef6d7b4293e8623321919bb9a89c9c30b7453\n"
    },
    {
      "commit": "678746bd0efe365620a5172cfd432b6986651ba3",
      "tree": "016b5b04d09341a51f1c10cbf23527127f3959f9",
      "parents": [
        "10ff134f60a350c2d2aa8742a941f48af0baa77c"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Jul 06 14:45:27 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Jul 06 15:49:51 2025 +0000"
      },
      "message": "Canvas: Update layout\n\nCombine separate Overview and Canvas tabs into one Build tab\nAdd Overview \u003c-\u003e Canvas switcher to Actions\n\nChange-Id: I40f7742be587b475ae6e88af2bcf9cae34f93168\n"
    },
    {
      "commit": "10ff134f60a350c2d2aa8742a941f48af0baa77c",
      "tree": "00e217692c5bf20d0e97ee6c3e51048b6dd75417",
      "parents": [
        "8edf6c7753525fb9680c90ef09a6fdd16bfb818b"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Jul 05 10:22:15 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Jul 06 05:21:45 2025 +0000"
      },
      "message": "Canvas: Use GraphSchema to validate state\n\nChange-Id: I342c8959c97f3486c4a7cb2aff92fb930a2b3146\n"
    },
    {
      "commit": "8a5f12fc0a4a44ba221305eb6a58fcb3a7f40db7",
      "tree": "6b0b27dfe37d253c457dbc6fbab4c71dd4c3dab3",
      "parents": [
        "74c6f75a5fc197356660339149b7a84990f85ea8"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Jul 05 07:02:31 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Jul 05 08:38:05 2025 +0000"
      },
      "message": "Canvas: Implement streaming state updates\n\nChange-Id: I2bc5a51b5792839bde93f927f5ffea22b3250fe2\n"
    },
    {
      "commit": "74c6f75a5fc197356660339149b7a84990f85ea8",
      "tree": "ecc337e1e5de656cb2ed6035abfd88c20fbd6682",
      "parents": [
        "2e7d217e445377789bf8c57de57a314e1c736f4e"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Jul 05 04:10:58 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Jul 05 04:18:34 2025 +0000"
      },
      "message": "Canvas: Implement agent sidebar on the overview tab\n\nChange-Id: I1f2fb874cb98247c73bebf364f4669ad5170c4a0\n"
    },
    {
      "commit": "2e7d217e445377789bf8c57de57a314e1c736f4e",
      "tree": "b29ea2e9cd8c142149cca3f3c9e207ea69981513",
      "parents": [
        "9f3d4f5563099c27c2aef5257f50e669c2e15345"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jul 04 09:24:53 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jul 04 09:37:05 2025 +0000"
      },
      "message": "Canvas: Port expose form\n\nChange-Id: I421c67230075778fad3359e11a5c573cd83882c9\n"
    },
    {
      "commit": "9f3d4f5563099c27c2aef5257f50e669c2e15345",
      "tree": "49593b3a4453fe66895324606c19a4eaba80ebc3",
      "parents": [
        "1dacf1ca5feef1a9965d41ce3018429dd02aee44"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jul 04 08:42:34 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jul 04 08:42:34 2025 +0000"
      },
      "message": "Cavnas: Service node details renders associated ingress\n\nChange-Id: I5aa4e146fedacadd48af095e8df2f3fe35a8342a\n"
    },
    {
      "commit": "1dacf1ca5feef1a9965d41ce3018429dd02aee44",
      "tree": "8d46b9847f0ec0181026592b96fafab4a170be46",
      "parents": [
        "641799b4b4dff496dc5b07a10a61f84abe8f790f"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 16:39:04 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jul 04 08:03:07 2025 +0000"
      },
      "message": "Canvas: Let user define name/value env var\n\nChange-Id: I9beffcc6f0dcbb674ef82b37b93b5f5ef7d189bc\n"
    },
    {
      "commit": "641799b4b4dff496dc5b07a10a61f84abe8f790f",
      "tree": "adc6c5c1a382c7c495dc6f82bc9b1aacb75f7289",
      "parents": [
        "73ac16c907d32cd1606d314e15c09e12c861961f"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 16:11:36 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 16:11:40 2025 +0000"
      },
      "message": "Canvas: .env.dev\n\nChange-Id: Id167f5bad6b760d47bce635ba11547b868ea3f0d\n"
    },
    {
      "commit": "73ac16c907d32cd1606d314e15c09e12c861961f",
      "tree": "6ef6bde35335e74c00407e2db3609bc4f1387a2c",
      "parents": [
        "790c87fbfff0d78e67b79587781ff2bb420d7af3"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 14:38:04 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 16:11:40 2025 +0000"
      },
      "message": "Canvas: Auto create port named env var alias\n\nChange-Id: I1bf725fbb41d1cbda9cfbde0479399c58cef7df6\n"
    },
    {
      "commit": "790c87fbfff0d78e67b79587781ff2bb420d7af3",
      "tree": "610829a52dc99d58b0eaa06947fa4272907ce05d",
      "parents": [
        "ff9b552850e9afabeba14b2436e9e0b560eecf40"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 18:37:13 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 18:37:31 2025 +0400"
      },
      "message": "AppRunner: Ping manager once a second\n\nChange-Id: I8c0da7fe77df4b400bf04570fc3c219fc0c00039\n"
    },
    {
      "commit": "ff9b552850e9afabeba14b2436e9e0b560eecf40",
      "tree": "20a8cf92fd3a8fa6dd6c9633ff3702d39b44bb15",
      "parents": [
        "577d23428911fc6abec626b1a0c0d1f3d84e8a00"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 13:50:30 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 13:50:30 2025 +0000"
      },
      "message": "Canvas: No env alias editing when disabled\n\nChange-Id: I15eff626a7b4b84dafa0f56e2a3890e04e18df3f\n"
    },
    {
      "commit": "577d23428911fc6abec626b1a0c0d1f3d84e8a00",
      "tree": "9606d1568a0e80ac72affce0dfa25ad0730e3ca7",
      "parents": [
        "37fba252cb61ffff23c8c1d31a55b1ac25944e02"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 12:50:18 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 13:08:10 2025 +0000"
      },
      "message": "Canvas: Add worker kill action to monitoring tab\n\nChange-Id: I8387dcf2320f9eccdb2e443fd4039e91ff35ed31\n"
    },
    {
      "commit": "37fba252cb61ffff23c8c1d31a55b1ac25944e02",
      "tree": "d4eafe50b9445bd0f95d2f4ed5fe6451f9e56443",
      "parents": [
        "69ff759f4e5bafc74f80cb2b72e4e417ec2edbbb"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 14:02:04 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 16:48:18 2025 +0400"
      },
      "message": "AppRunner: Shutdown on SIGTERM and SIGINT signals\n\nImplement /quitquitquit handler\n\nChange-Id: I0d11791bf3b2831b71548e2ca573e34ad854c561\n"
    },
    {
      "commit": "69ff759f4e5bafc74f80cb2b72e4e417ec2edbbb",
      "tree": "9d40d639f30a9b053513b7082e4a52bf0d9c0730",
      "parents": [
        "4745b3fec208c81e4e694a11cb41d827239b8872"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 06:27:21 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 08:15:36 2025 +0000"
      },
      "message": "Canvas: Support Anthropic Claude based AI agents\n\nChange-Id: Ib74c9672da9a80a4f20d63741a471c728a435b8e\n"
    },
    {
      "commit": "34193053a2bfdd685fd3844d0a5c484669ee5a26",
      "tree": "49499670c48e8084432fbb7af2f47e7bdfce2436",
      "parents": [
        "a70535a1e77cb10c7e83c8129f7b150a3b522c1f"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 03:55:11 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 03:55:11 2025 +0000"
      },
      "message": "Canvas: Gemini API key validator\n\nChange-Id: If185b7600c3fdd153345ab6f80c1b89f6504ddeb\n"
    },
    {
      "commit": "a70535a1e77cb10c7e83c8129f7b150a3b522c1f",
      "tree": "2d74005cac054b4ae58876cb2f55bf735ed3fbd0",
      "parents": [
        "67d6d5ffdaf277c2ce4696a4c3a978280e914488"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 15:50:25 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 15:51:42 2025 +0000"
      },
      "message": "Canvas: Fix worker registration request schema\n\nMake commit information optional and nullable\n\nChange-Id: I181a7ac53f6b1618c11443b168af27e356922ace\n"
    },
    {
      "commit": "67d6d5ffdaf277c2ce4696a4c3a978280e914488",
      "tree": "3574e31c8d5ff5d079e9d83cac00a5842436e42c",
      "parents": [
        "3aba30926494639c5617e5a25822f8802d1b6876"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 15:49:54 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 15:51:42 2025 +0000"
      },
      "message": "Canvas: Use lowercased port names when generating dodo-app config\n\nChange-Id: Ic33584b94955848e0510f6a8acc755036748604e\n"
    },
    {
      "commit": "40c0c999eb85dbbb0f5c470a51bfdb647bde5f37",
      "tree": "9745e94a18e2f399167e7a1f4df3cfdf5245cc65",
      "parents": [
        "78a2288b18665a2dc2094ffdbccf635b0259049d"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 13:18:05 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 13:18:05 2025 +0000"
      },
      "message": "Canvas: Persistent log storage\n\nChange-Id: I3eac705329e6d68d8e4b9a371c6e9b9807f357ec\n"
    },
    {
      "commit": "78a2288b18665a2dc2094ffdbccf635b0259049d",
      "tree": "3c3bbf3507ab12fdb889d6013b194209854a2088",
      "parents": [
        "89c5b5e630fa43caace1657cedc97c8e07d40f3b"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 01 18:56:01 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 08:28:51 2025 +0000"
      },
      "message": "Canvas: Render logs using XTerm\n\nUse Server Sent Events to stream logs.\n\nChange-Id: I3790a22a39b71409636a81dbe2a2cc8bf4977cb4\n"
    },
    {
      "commit": "89c5b5e630fa43caace1657cedc97c8e07d40f3b",
      "tree": "ef7e40d1464137cc2829a606d465ee0f04089db3",
      "parents": [
        "aa6e27a7dd90f9e39b09391d5e29cb2be40c32fd"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 12:15:04 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 12:15:04 2025 +0400"
      },
      "message": "AppRunner: Include commit hash in the ping request\n\nIncrease ping frequencey to twice a second.\n\nChange-Id: I43a064d17a22525e276140c689bea23df6c31655\n"
    },
    {
      "commit": "aa6e27a7dd90f9e39b09391d5e29cb2be40c32fd",
      "tree": "45618e5bdb96098f599cadc2aa07a9a86df08003",
      "parents": [
        "2f393c12fe97a6794a8bd6a5969320bbf184fe3f"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Jun 29 23:17:54 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 11:31:53 2025 +0400"
      },
      "message": "AppRunner: Automatically annotate logs\n\nChange-Id: I5e614fc1e841e183ac649758972428ae55162a67\n"
    },
    {
      "commit": "2f393c12fe97a6794a8bd6a5969320bbf184fe3f",
      "tree": "f2e7fc7fdf27af6132afcf80a7eda637805d499c",
      "parents": [
        "8f8b086c368c7c2c7fe24c3c11fb1393f6f1b83f"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 01 08:02:48 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 01 12:58:51 2025 +0000"
      },
      "message": "Canvas: Makefile\n\nChange-Id: I448a36bf60ee33fb4691d5312ac69b32ec38ec14\n"
    },
    {
      "commit": "8f8b086c368c7c2c7fe24c3c11fb1393f6f1b83f",
      "tree": "4223685146764a2e561d420c6f650495bcb8530c",
      "parents": [
        "dbf4a85c936183a0e01d0fe45afc1d7531ad0ee7"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 01 13:31:42 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 01 16:48:45 2025 +0400"
      },
      "message": "DodoApp: Pass lowercased port names to app-runner\n\nUse Debian based Deno container image\n\nChange-Id: I90300af78fe55ac6504c352c62e0f1d48adf89da\n"
    },
    {
      "commit": "1037ee2f7f2f64f007e0480009297cad78b5c456",
      "tree": "4393818fe02020accee026494ab77f3ab0e19e89",
      "parents": [
        "90a265bcb8fb65bb7e77ef2abb1395837b21ecbf"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 26 09:25:43 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 26 09:33:36 2025 +0000"
      },
      "message": "Canvas: Add modal resources dialog to Overview tab\n\n- Add Add button to Actions component visible only in Overview tab and edit mode\n- Create modal dialog with Resources component for adding new resources\n- Modal automatically closes when resource is added\n- Resources component accepts optional onResourceAdded callback\n- Maintain backward compatibility with existing Resources usage\n\nChange-Id: Ib01fe1417ba2bbb7c91f6e1d0551fe9c52ade8c3\n"
    },
    {
      "commit": "90a265bcb8fb65bb7e77ef2abb1395837b21ecbf",
      "tree": "14659a4913d355568fd039f4a925c3d4aea6a524",
      "parents": [
        "cc5ce58b57b3faa66cc784cb3f248420602befcb"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 26 09:16:58 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 26 09:33:28 2025 +0000"
      },
      "message": "Canvas: Add search functionality to resources component\n\n- Add search input field at the top of resources panel\n- Filter categories and items based on search value in real time\n- Hide empty categories when no matching items found\n- Use memoized filtering for performance optimization\n\nChange-Id: I3c4d46e54a1100ad14be0b73f015042f2bdef434\n"
    },
    {
      "commit": "cc5ce58b57b3faa66cc784cb3f248420602befcb",
      "tree": "a3012ae4df037604f79beeb94852d3703947d57c",
      "parents": [
        "85ddcdf7453f8f222654136116e856a64b4eae7c"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jun 25 07:45:21 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 26 07:02:46 2025 +0000"
      },
      "message": "Canvas: Render AI agents in tabs\n\nImplements AI Agent chat bubble, but is disabled for now.\n\nChange-Id: If915691a22f376f347b76a5d24333dbe76492ca9\n"
    },
    {
      "commit": "cefb3b500ad84268b0f999023c4d37e4fbb328c3",
      "tree": "9d1f1386080492d060c0c1b3c2d7beee566f8a2a",
      "parents": [
        "e8402359dfa65dbe72fee68ba3961a43f892aacc"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jun 24 21:55:52 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jun 24 18:00:44 2025 +0000"
      },
      "message": "Canvas: dear_llm.md\n\nChange-Id: Ib3b12395c8ce21ac3326dd638f00002627dfdb5c\n"
    },
    {
      "commit": "e8402359dfa65dbe72fee68ba3961a43f892aacc",
      "tree": "73838c0f7c9aae1d2fecda1c68073e3141c98dcb",
      "parents": [
        "24d6e9a2b8fd4a3c4f67a4d95b08e8f538e92d53"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jun 24 21:28:25 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jun 24 21:28:25 2025 +0400"
      },
      "message": "AppRunner: Create .git directory when cloning repository\n\nChange-Id: Ibd3fe3285bb230bb3cc4be70575742806aa7fd18\n"
    },
    {
      "commit": "24d6e9a2b8fd4a3c4f67a4d95b08e8f538e92d53",
      "tree": "d603354a9b029cf5155c9334b5ad88048014616e",
      "parents": [
        "379ff06c5691795c2a65032e9cc28e25c8b27d5d"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jun 24 15:02:29 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jun 24 15:03:14 2025 +0400"
      },
      "message": "AppRunner: Create .git directory when cloning repository\n\nChange-Id: I733fd2aad5d7ec67c38cb773097b12b86ed69755\n"
    },
    {
      "commit": "691483264b84abdbee3d889fd3c0ae2754b99fa5",
      "tree": "6d44a701921ae9e140ce85f299f7359ce96cdf81",
      "parents": [
        "b33b2a93a0a2e51d94ebc844b81686e8ab2e3c64"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 19 23:16:12 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jun 24 08:32:04 2025 +0000"
      },
      "message": "Canvas: Implement Agent Sketch node, update dodo-app.jsonschema\n\n- Add Gemini API key to the project\n- Update dodo schema to support Gemini API key\n- Update dodo schema to support Agent Sketch node\n\nChange-Id: I6a96186f86ad169152ca0021b38130e485ebbf14\n"
    },
    {
      "commit": "b33b2a93a0a2e51d94ebc844b81686e8ab2e3c64",
      "tree": "f7e3a9e47a8ece4356502a1775b6ec1e922fe36b",
      "parents": [
        "7f293f399a6b0e4310b3a0cd229cfaaa355bc3d1"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jun 13 18:42:45 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jun 24 12:10:27 2025 +0400"
      },
      "message": "AppRunner: Include ssh client and keygen tools\n\nChange-Id: I4ef99076df3dbf7bfeb62b60c1980c308f925e11\n"
    },
    {
      "commit": "e65d9a934c8d6bab4d16358132f73f8396041e97",
      "tree": "3e220983f618fd40162f0b6ec7db964951b065ee",
      "parents": [
        "9b7421ac7ad75ad949e32d1606afcd685443ef8c"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 19 09:02:32 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jun 20 07:21:12 2025 +0400"
      },
      "message": "dodo: Support Sketch agent\n\nChange-Id: I4dcd6aab7d7a2c2e86aaf1ad8d36d30a649ab31d\n"
    },
    {
      "commit": "9b7421ac7ad75ad949e32d1606afcd685443ef8c",
      "tree": "97464a6c474781bd521c96e034733cec0c7b6ab5",
      "parents": [
        "dbabb10be6f6211d630e526d45aa54eae59756c9"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jun 18 12:31:13 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jun 18 15:19:21 2025 +0000"
      },
      "message": "Canvas: Generate Github nodes out of the dodo-app config\n\nChange-Id: Ifc5b09deb39352a3025f7ea66ce39b421daac94d\n"
    },
    {
      "commit": "c31bf14971e228b03f738dde4cbfc8ae34f88f9d",
      "tree": "13345409e55a4628c1228e7606c20158eef2239f",
      "parents": [
        "4b08eb7dd536c9c66263b3eea08bfeb43f035f74"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jun 16 07:48:20 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jun 18 09:13:19 2025 +0000"
      },
      "message": "Canvas: Generate graph state out of dodo-app config\n\nRestructure code, create shared config lib.\n\nChange-Id: I2cf06d35c486d4557484daf8618a2c215316fa7e\n"
    },
    {
      "commit": "4b08eb7dd536c9c66263b3eea08bfeb43f035f74",
      "tree": "721713118e035fcb9d43dfa9ba2ff0abc3d7c5c5",
      "parents": [
        "8e74dc031c5490b736c96cec4dce7cf04725b9e2"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jun 16 03:44:58 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jun 17 07:56:02 2025 +0000"
      },
      "message": "Canvas: Add JSON schema for dodo-app configuration\n\nChange-Id: I7c562c41a05e370016e3d73b975d3cc8b0b5a5e2\n"
    },
    {
      "commit": "8e74dc031c5490b736c96cec4dce7cf04725b9e2",
      "tree": "eb236deefadf80968376e38f6b7cb9562a826678",
      "parents": [
        "e7734b234a6a4e3fd83fe32cbab250a5c1b1ef13"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jun 13 10:19:26 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jun 13 14:33:42 2025 +0000"
      },
      "message": "Canvas: Import modal\n\nChange-Id: I22928007c5b81d93be2eed2d133fed4d73e1703f\n"
    },
    {
      "commit": "e7734b234a6a4e3fd83fe32cbab250a5c1b1ef13",
      "tree": "e445dab82fb9a3d610793ffefed9028bf3b1c175",
      "parents": [
        "5fa669611b128b5365c3f92d6c330ecd06e897b9"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jun 13 10:12:04 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jun 13 10:12:04 2025 +0000"
      },
      "message": "Canvas: Show app tab titles in overview mode\n\nChange-Id: Iafbcfba04c53f033c091152392e724590b2f4e3f\n"
    },
    {
      "commit": "5fa669611b128b5365c3f92d6c330ecd06e897b9",
      "tree": "1908b7332df5cce12ce8a7f2661111ea8259598a",
      "parents": [
        "3fb133dff3380d8278bacd6b0a3e5cdb98f1edea"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jun 13 09:30:40 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jun 13 09:39:56 2025 +0000"
      },
      "message": "Canvas: Improve overview tab styling\n\nChange-Id: I1bb656e5d277c0e8c46da5d6be0748f964551049\n"
    },
    {
      "commit": "3fb133dff3380d8278bacd6b0a3e5cdb98f1edea",
      "tree": "bbbf363464fd20b57838fb5d0b5e91d793195fa2",
      "parents": [
        "08acd3ac799f73e9af2508d6532348f8b6af5aca"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jun 13 07:20:24 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jun 13 09:10:59 2025 +0000"
      },
      "message": "Canvas: Reuse Name component in node details\n\nChange-Id: Ide8094b50f9ac019e7bada9a000100f9233133da\n"
    },
    {
      "commit": "08acd3ac799f73e9af2508d6532348f8b6af5aca",
      "tree": "70e9ddb8ae6e6a2e7577ba684d16ae23ae157a05",
      "parents": [
        "3d0bf03a6396a7148b5e962aa65bac7958257337"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 12 12:15:30 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 12 12:15:30 2025 +0000"
      },
      "message": "Canvas: Refactor NodeDetails signature\n\nChange-Id: I78a07b130089e50df9524de0895210528b3e09b3\n"
    },
    {
      "commit": "3d0bf03a6396a7148b5e962aa65bac7958257337",
      "tree": "ae5a4454cf774626c5da1e40dfbba7dc8125dfa5",
      "parents": [
        "da12043e344890345c795ef90da783a3d51c620f"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 05 06:57:26 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 12 10:47:22 2025 +0000"
      },
      "message": "Canvas: Reuse node details component in overview\n\nMake app details tabular.\n\nChange-Id: I78a641e8e513eec44573bb8c8a391ef81a66e7fe\n"
    },
    {
      "commit": "da12043e344890345c795ef90da783a3d51c620f",
      "tree": "6e105d39ce3b941949e67600bc657b1ce903459e",
      "parents": [
        "a71316da2998b2972ace8a155d04333a00b330a9"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jun 02 09:42:26 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jun 02 17:44:25 2025 +0000"
      },
      "message": "Canvas: Overview tab\n\nChange-Id: Ie40ed4e26991b7915ec005681b92eb39fdc354c9\n"
    },
    {
      "commit": "a71316da2998b2972ace8a155d04333a00b330a9",
      "tree": "f4f036585ce8547ce0b3d23f4542f3b5ba543f53",
      "parents": [
        "842db3f5be99c6b700072911c49c7c03f48daca6"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat May 24 09:41:36 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jun 02 09:27:31 2025 +0000"
      },
      "message": "Cavnas: Implement basic service discovery logic\n\nChange-Id: I71b25076dba94d6491ad4db748b259870991c526\n"
    },
    {
      "commit": "8fad76ab737dff9fc24d17b3b88ae491ed9af8b7",
      "tree": "387c24eab8357e5dc7418a2695ac0ec465b2e8b7",
      "parents": [
        "ea6d912dbfd4fbee839cc0d869347e707f19b132"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 22 14:01:23 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 23 07:50:58 2025 +0000"
      },
      "message": "Canvas: Use node full labels when monitoring\n\nChange-Id: I7b3bce3519c2a7b7780f43cf1c092fcca9e6ecd9\n"
    },
    {
      "commit": "4bfed00a3f4078c8d85eab8fe9d956cef6a58503",
      "tree": "49aa035fa615bc5c53c1d168bd3829480c8d9777",
      "parents": [
        "918780d890086f65cf6a2c6bded71a26ce76cf96"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 22 13:23:22 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 22 13:23:41 2025 +0400"
      },
      "message": "AppRunner: Log actions\n\nChange-Id: I085f760bc81e610ac0d94d6764403e27a21ada00\n"
    },
    {
      "commit": "918780d890086f65cf6a2c6bded71a26ce76cf96",
      "tree": "5bdba6814ee19d29ac5308e02295d7c672fea940",
      "parents": [
        "2539d9e43e842acb11a9f48ed9a72d829df28e6f"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 22 08:24:41 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 22 09:11:35 2025 +0000"
      },
      "message": "Canvas: Add Reload button on Monitoring page\n\nChange-Id: I593d9068870bcd5f0d43680af4a08d814a18a2a9\n"
    },
    {
      "commit": "0afbaee7098e4f014424d866897fbefc8c504484",
      "tree": "7077720891489144a48b0b34cb705ef3bf41a19b",
      "parents": [
        "9635ccbce34ce2e5a83168e8e0e0e77e4d79089a"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 22 04:34:33 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 22 04:48:03 2025 +0000"
      },
      "message": "Canvas: Display commit message\n\nChange-Id: Ifa2907c3377bd6174fa2c22a862dbae0eb8901fc\n"
    },
    {
      "commit": "9635ccbce34ce2e5a83168e8e0e0e77e4d79089a",
      "tree": "99ab8a17bad61956b76ec2a042a5003205517011",
      "parents": [
        "16bb63869b3221add2afcc9a124b16170b82a837"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 22 08:33:38 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 22 08:33:38 2025 +0400"
      },
      "message": "AppRunner: Include commit message in the status\n\nChange-Id: I1c9101df71e004888b0fc38cbc351d77fbcc70bd\n"
    },
    {
      "commit": "c717e36a85298254f8de710245906b0ac9c9e171",
      "tree": "be1ebb523d8fb773214e4d4a803d07062822d046",
      "parents": [
        "5155c1a018373a76319f1a15f5fb18232b6c9ca6"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 21 16:02:03 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 21 16:02:03 2025 +0400"
      },
      "message": "Canvas: Restore .env file\n\nChange-Id: I570c5fec718e7e462cb2f719271041c6f97a5e55\n"
    },
    {
      "commit": "5155c1a018373a76319f1a15f5fb18232b6c9ca6",
      "tree": "a0b68d445bbdc9054361e3a557d17592f348f108",
      "parents": [
        "a1efbadf3c50d5d1e6615cf018e57d48c0e01d2b"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 21 15:36:21 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 21 15:36:21 2025 +0400"
      },
      "message": "AppRunner: Reports detailed status\n\nStatus includes: commit hash, running commands and logs\n\nChange-Id: I5f28f69710b30508bb3296a22fc97b9ad7553844\n"
    },
    {
      "commit": "a1efbadf3c50d5d1e6615cf018e57d48c0e01d2b",
      "tree": "6aa811cb15af356d825689528171d5c468422371",
      "parents": [
        "48679461d25e1e81cd2f226cc215c4e5360d8988"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 21 07:16:45 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 21 09:08:21 2025 +0000"
      },
      "message": "Canvas: Rework monitoring page\n\nDisplay worker statuses with list of commands\nCommit hash\n\nChange-Id: I7054ecc5ce81f35cad3fe26fc20677b6f50d3147\n"
    },
    {
      "commit": "48679461d25e1e81cd2f226cc215c4e5360d8988",
      "tree": "fe77c80549048fbe07954c0a88fa242a8c1b4310",
      "parents": [
        "b1c5c454ffb0cda2b8458268d41d925b0c9e3ab6"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 21 04:27:27 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 21 08:52:18 2025 +0000"
      },
      "message": "Canvas: Consistent icons\n\nChange-Id: Ib33a4bb8c0dbafefae7a600b86900b60f6118340\n"
    },
    {
      "commit": "b1c5c454ffb0cda2b8458268d41d925b0c9e3ab6",
      "tree": "faa9d742aae329fd284f67bc4baa020ae127c1ed",
      "parents": [
        "6481c9095aef7c7d2a0554b1d1af8a55171a89c3"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 21 04:16:54 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 21 05:13:19 2025 +0000"
      },
      "message": "Canvas: Refresh env on remove deployment\n\nChange-Id: I1e09b50668a41ed11426fa0b8b0a600089e16c19\n"
    },
    {
      "commit": "b45b1866d422a31135a5d9af73ebc79381d0a0cb",
      "tree": "8d001086da42a8bb5e1e6fab5279c5f66678e287",
      "parents": [
        "bceb0853af62c5f23d62e4d51d7e097223527d12"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 11:42:20 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 11:42:20 2025 +0000"
      },
      "message": "Canvas: Fix project selection\n\nChange-Id: I34d68d06cc125acd1336fbd180bfdb6bfdfb2553\n"
    },
    {
      "commit": "bceb0853af62c5f23d62e4d51d7e097223527d12",
      "tree": "b3503e16d0b21b8cefe772fad3a8f72787cb70a3",
      "parents": [
        "6a49afc86b5d9626874146cb91225e4f941ae37b"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 13:15:18 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 13:15:18 2025 +0400"
      },
      "message": "Canvas: Expose nodejs 24.0.2\n\nChange-Id: Ie75960b47d067c24031741edc892ae8f30475ac9\n"
    },
    {
      "commit": "6a49afc86b5d9626874146cb91225e4f941ae37b",
      "tree": "489a36b4cb95860110c7f1e294af1db49e959a68",
      "parents": [
        "ec744fab02aea72142ad3f17b38c68957039e437"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 12:48:45 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 13:06:52 2025 +0400"
      },
      "message": "Canvas: Fix INTERNAL_API_ADDR\n\nChange-Id: I1079a5db68b1d850ab36314018b6c5a96dee1bc2\n"
    },
    {
      "commit": "ec744fab02aea72142ad3f17b38c68957039e437",
      "tree": "532df83dcbb820050067488a71c58f17e5a3a9c6",
      "parents": [
        "a3cc4bf0cf6547328774cda51a81dfb5e23d13ce"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 12:47:03 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 12:47:27 2025 +0400"
      },
      "message": "AppRunner: Support Nodejs 24.0.2\n\nChange-Id: I37659d91d8211d5cfb4240a885da5a51ef43774a\n"
    },
    {
      "commit": "376a81d467d707eb2bd98a35c16c0b784e5c2eb3",
      "tree": "478f885a744e24867b987ddd5871886d9cf18ca1",
      "parents": [
        "eb148c8066d00c73a012727d63c30e8c2b207eac"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 06:42:01 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue May 20 06:50:43 2025 +0000"
      },
      "message": "Canvas: Use volume to persist data\n\nChange-Id: Ia93299590885c91d6e44c1e8842ba2c259bfc8a0\n"
    },
    {
      "commit": "eb148c8066d00c73a012727d63c30e8c2b207eac",
      "tree": "13738767beb4ef48e3bd7bfc4fe71688511adc3e",
      "parents": [
        "76d8ae649ccecc0c24f90971cbd250cfd45b99c1"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 16:17:22 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 16:17:22 2025 +0000"
      },
      "message": "Canvas: Add info about webhooks\n\nChange-Id: Icbe3625f444349f394672d963185fcc7d10b6c19\n"
    },
    {
      "commit": "76d8ae649ccecc0c24f90971cbd250cfd45b99c1",
      "tree": "639016de4bb7b7c75bdcee356d5983f9e1b9c255",
      "parents": [
        "82afef1887f8ee11e84e27bdc7e435a98ef35ecf"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 15:21:54 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 15:50:38 2025 +0000"
      },
      "message": "Canvas: Auto register github webhook upon deploy\n\nChange-Id: I0321a032014d58016926189869b0fc24ad7ee2b1\n"
    },
    {
      "commit": "6d8b71c93b719eafeae28ad6fadc9165fe66a419",
      "tree": "dce23b09ab7d2151963e8b67e1d272516be45830",
      "parents": [
        "05a993c181ec17ac8004219360188291785e088d"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 12:57:35 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 13:29:46 2025 +0000"
      },
      "message": "Canvas: Check if network supports auto\n\nChange-Id: I19e06b70e3e1a59f6549fcf01b565bad8a7f5695\n"
    },
    {
      "commit": "05a993c181ec17ac8004219360188291785e088d",
      "tree": "032ef46d683bc6e174dc7e1265b21fcd2fa0077b",
      "parents": [
        "4037078c897d124b7e5209504e0e49493f534113"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 11:51:33 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 12:34:36 2025 +0000"
      },
      "message": "Canvas: Show count badge on Gateways tab\n\nChange-Id: If93a4425c0c7f3395ad6712a4658711668e03b92\n"
    },
    {
      "commit": "4037078c897d124b7e5209504e0e49493f534113",
      "tree": "225aad787f8fd35dbcc24a6c489d3e87a9bccf50",
      "parents": [
        "6223714336ad69a661483a2cdf0acd1585ea5fcf"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 11:04:52 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 11:11:04 2025 +0000"
      },
      "message": "Canvas: Do not render input on config tab\n\nChange-Id: I5ebe939457610546ae59894958dbac153fcefcdf\n"
    },
    {
      "commit": "6223714336ad69a661483a2cdf0acd1585ea5fcf",
      "tree": "a32c4ffb766a3e49995431015e460c57f6a9dcd6",
      "parents": [
        "97efd7256d5d4d12654be30c24500edbf4cf7556"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 10:39:40 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 10:39:40 2025 +0000"
      },
      "message": "Canvas: Refresh env on successful deployment\n\nChange-Id: I7e27b21dd4409eb76fb02ab3feaf35fb56d0b989\n"
    },
    {
      "commit": "97efd7256d5d4d12654be30c24500edbf4cf7556",
      "tree": "d2c257b3a1075e5fd7c7b84d6d3ff9936c513d75",
      "parents": [
        "b77cb93401adc282f70ad3e8e0481af67518f3f5"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 10:36:12 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 10:36:12 2025 +0000"
      },
      "message": "Canvas: Fix TCP gateway exposing DB\n\nChange-Id: I0aef6a4754b0b674820d479b85fc770987164b02\n"
    },
    {
      "commit": "b77cb93401adc282f70ad3e8e0481af67518f3f5",
      "tree": "de49d8f6d70f5e77ecf65a10c335a7fe19509c85",
      "parents": [
        "6ce4481b19e87a2b010ca9dd7247f894eea32448"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 09:37:14 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon May 19 10:13:30 2025 +0000"
      },
      "message": "Canvas: Rework Deployment/Gateways tab\n\nChange-Id: I938262b9a6ba2af060531e7dcdf91ddd66721385\n"
    },
    {
      "commit": "3304672099846c2323de7bdb26d8df9e14b5eaff",
      "tree": "a4f4aa86214615f42215e3e3154e00d5e3c8e95e",
      "parents": [
        "3ec9424fa7f67122f10540878b210a00b63e1ef7"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 14:49:55 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 14:50:01 2025 +0000"
      },
      "message": "Canvas: Get ready for trial\n\nChange-Id: I16088fa041dd0fb35ac801ddbbedf3c1c6e8563d\n"
    },
    {
      "commit": "3ec9424fa7f67122f10540878b210a00b63e1ef7",
      "tree": "3c7653d5742cd8f7deb0afcc74ff8ae6e1601d10",
      "parents": [
        "f8fa0f8785b498c88d0e168b65f30f593cd1501a"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 12:46:57 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 12:46:57 2025 +0000"
      },
      "message": "Canvas: Disable all inputs during non-edit mode\n\nChange-Id: Ifca28e7cb78cb38175d5463311ff3d5006d412f8\n"
    },
    {
      "commit": "f8fa0f8785b498c88d0e168b65f30f593cd1501a",
      "tree": "8fcf4b9075e09d90b9f095ac963d168044ae1261",
      "parents": [
        "9fc37c7c69a4a26cb38e597c643213d1d63c91dc"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 12:34:26 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 12:34:26 2025 +0000"
      },
      "message": "Canvas: Improve spacing on details component\n\nChange-Id: Id18e89c9413e5f6d988b68d1f6582cdbee980a9d\n"
    },
    {
      "commit": "9fc37c7c69a4a26cb38e597c643213d1d63c91dc",
      "tree": "ca1f514f36d187125e22cc2b468f238e31088dc6",
      "parents": [
        "dc2dfcfeeb08e15e6d3807f499af1f3667ab46f2"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 12:17:18 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 12:17:18 2025 +0000"
      },
      "message": "Canvas: Message type icons\n\nChange-Id: I54f9f79869e593d95cb7dcadc6085951629600a9\n"
    },
    {
      "commit": "dc2dfcfeeb08e15e6d3807f499af1f3667ab46f2",
      "tree": "087cd0325bc8d2cee1a9285c99e63cef86a573c6",
      "parents": [
        "8cadbc764ad65ea0ed6e691cfa6fa2e23541e8a9"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 09:41:04 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 10:06:10 2025 +0000"
      },
      "message": "Canvas: Improve diagram styling\n\nChange-Id: If1c3d48cd94b63de86c8d7ecdb40974af951367f\n"
    },
    {
      "commit": "8cadbc764ad65ea0ed6e691cfa6fa2e23541e8a9",
      "tree": "c1964a70a1a56e1662c5ccbc2dfcc7332bb5dce6",
      "parents": [
        "29050d6e9998c2c3aa3954684e66d4c07c8a8a03"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 07:51:02 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 09:28:06 2025 +0000"
      },
      "message": "Canvas: Fix messages and details scrolling issues\n\nChange-Id: Id7831f65b7e692c611228d5937412500c3beae21\n"
    },
    {
      "commit": "29050d6e9998c2c3aa3954684e66d4c07c8a8a03",
      "tree": "4751db572e67c530fa9b9937d5c15e7d1e3b8324",
      "parents": [
        "e2b955a7b215e78324ff0b57d859d99ad4c3e9da"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 04:49:26 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 04:49:26 2025 +0000"
      },
      "message": "Canvas: Use subdomain only as gateway labels\n\nChange-Id: I2ff225fe4c9ae42ef3999fc51760cf29ccb58bae\n"
    },
    {
      "commit": "e2b955a7b215e78324ff0b57d859d99ad4c3e9da",
      "tree": "d8208aa5d43da2aeaf7c0d895481b5616424627e",
      "parents": [
        "838bcb82ed8d7358aa35a7fb26cb98c82ba4b6c8"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 15 15:41:05 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri May 16 04:43:52 2025 +0000"
      },
      "message": "Canvas: Wait during deploy and reload\n\nChange-Id: I8f39a46e263c99dd342b640474de421043ff0d38\n"
    },
    {
      "commit": "451d40de49ab60f492e797d835934541f6fcba86",
      "tree": "2b44dad25461114f6849067cd64257641d89008a",
      "parents": [
        "bd37a2ba4b803524f80e07394666c046f86a8cd4"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 15 13:13:41 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 15 13:28:11 2025 +0400"
      },
      "message": "DodoApp: Merge dev enabled/disabled images and charts\n\nChange-Id: Idf5b10640e32848fa31ce726dd8e0cf7bed033be\n"
    },
    {
      "commit": "bd37a2ba4b803524f80e07394666c046f86a8cd4",
      "tree": "d689881cc23eeccf4dce570f0c29ff9a83d0ce06",
      "parents": [
        "b1d3bd7a965316f19df79af9abc6f09c0a5cf682"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 15 04:28:42 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 15 06:38:02 2025 +0000"
      },
      "message": "Canvas: Remove deployment action\n\nChange-Id: I5887f130f5d11880271c943f58284d62f7d07a23\n"
    },
    {
      "commit": "b1d3bd7a965316f19df79af9abc6f09c0a5cf682",
      "tree": "2533c13270c441bd6e6f018db58fdd5f75e38ff4",
      "parents": [
        "3ed59599dde16dd593805dd41192efb7e9591d36"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 15 07:20:06 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 15 09:20:19 2025 +0400"
      },
      "message": "DodoApp: VM optionally takes ssh key as an input\n\nChange-Id: I1557dff32a622762c42fa7947723caa5d810d1ed\n"
    },
    {
      "commit": "3ed59599dde16dd593805dd41192efb7e9591d36",
      "tree": "abae56df3d1defebb8ce3c87dbb64f230227babe",
      "parents": [
        "a1f29474e3457e969c798f86402ea27e7f390334"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 14 16:51:09 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu May 15 03:07:41 2025 +0000"
      },
      "message": "Canvas: Handle repo diff\n\nRefactor github and appmanager clients.\nRemove dev mode ports/ingress definitions.\n\nChange-Id: I0ca15cec897d5a8cfa1c89b8ec9c09c408686c64\n"
    },
    {
      "commit": "48fde051ffe863cb452d770e915bc314e43150f2",
      "tree": "baa701b66f18c91b7fb2f5229bba3b7e137de72e",
      "parents": [
        "359a685c71da766e76673c80e6c82bfd6ff0574b"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 14 09:48:08 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 14 15:19:10 2025 +0000"
      },
      "message": "Canvas: Service dev UI\n\nChange-Id: I11968dbf5ec51c5fd234ad927d40b0b3983e71dd\n"
    },
    {
      "commit": "359a685c71da766e76673c80e6c82bfd6ff0574b",
      "tree": "ea91c76924db8c5c8ac429c8534a8c0f66ac1627",
      "parents": [
        "af8db83af791cb5abfca73735936c9a78be2f7e0"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 14 03:38:24 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed May 14 03:51:57 2025 +0000"
      },
      "message": "Canvas: Restore viewport on project select\n\nChange-Id: I3dd60983ca0abe5fd3b84011bad384d50fa90dc1\n"
    }
  ],
  "next": "af8db83af791cb5abfca73735936c9a78be2f7e0"
}
