)]}'
{
  "commit": "c4ef98f587cfbf8564f73cbe68caa16d6b516f28",
  "tree": "b047e03bf623b0bc5be26eb16023c417dab8b819",
  "parents": [
    "e0d88353ad49aa2ec76243c8e1ce39b0ac42761b"
  ],
  "author": {
    "name": "Ben Konyi",
    "email": "bkonyi@google.com",
    "time": "Thu May 21 21:07:23 2026 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri May 22 01:07:23 2026 +0000"
  },
  "message": "[ Tool ] Stop generating widget preview scaffold under $TMP (#186476)\n\nPreviously, the `widget_preview_scaffold` project was generated under\nthe system temporary directory (`$TMP`) to work around issues with\n`flutter clean`. However, generating the scaffold in `$TMP` meant that\nthe project was recreated on every run or could be lost, leading to\nunnecessary regeneration overhead and tracking issues.\n\nMove the generated `widget_preview_scaffold` project from `$TMP` to a\n`.widget_preview` directory located directly under the project root. To\nsupport this change, `WidgetPreviewGitignoreMigration` is introduced to\nautomatically add `.widget_preview/` to the host project\u0027s `.gitignore`.\nIn addition, `kProjectRootPath` is passed via DTD connection info to\nensure `WidgetInspectorService` correctly adds the project root to pub\nroot directories. Finally, file watchers (`LspPreviewDetector` and\n`PreviewDetector`) are updated to ignore the new `.widget_preview`\ndirectory.\n\nFixes https://github.com/flutter/flutter/issues/179036",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "def881bd73a031159536dea39945a5dfd8453562",
      "old_mode": 33188,
      "old_path": "dev/integration_tests/widget_preview_scaffold/lib/src/dtd/dtd_connection_info.dart",
      "new_id": "1d8cacc43d3ee51388027107ca6ab15e74d76a68",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/widget_preview_scaffold/lib/src/dtd/dtd_connection_info.dart"
    },
    {
      "type": "modify",
      "old_id": "d91e39e752138d8846dc78153d0baa842cb3e56b",
      "old_mode": 33188,
      "old_path": "dev/integration_tests/widget_preview_scaffold/lib/src/widget_preview_inspector_service.dart",
      "new_id": "224fb37570e5450c22617c75248d7c40f8521ec4",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/widget_preview_scaffold/lib/src/widget_preview_inspector_service.dart"
    },
    {
      "type": "modify",
      "old_id": "ccc79c68f0991911c0ad4ada0ddf2219d4680f3c",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/commands/widget_preview.dart",
      "new_id": "113923544c1cc84cd30c34a14ccc534a675ce693",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/commands/widget_preview.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ce664328c080922a38b9390ee0c24b900c34ef11",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/migrations/widget_preview_gitignore_migration.dart"
    },
    {
      "type": "modify",
      "old_id": "bc02734da00e0c8d00bbab2b1455806acc38c6b0",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/project.dart",
      "new_id": "ef92e6a3453e35877e5266e7aabeae68eb603851",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/project.dart"
    },
    {
      "type": "modify",
      "old_id": "4b75c144d0ceaf706ed16371b200c47e2bc9e082",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/widget_preview/lsp_preview_detector.dart",
      "new_id": "ab0d7f6e74d12b2d3a962907ecc3bc15fe1b0028",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/widget_preview/lsp_preview_detector.dart"
    },
    {
      "type": "modify",
      "old_id": "23f7308c2de7f9e57871e762325217bf2012f1e3",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/widget_preview/preview_code_generator.dart",
      "new_id": "d37eec27b13d2184abfdd29994aa729b6337fb49",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/widget_preview/preview_code_generator.dart"
    },
    {
      "type": "modify",
      "old_id": "eb0ff03eda499ace120e48e0ee1a2b6bc7b10e7b",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/widget_preview/preview_detector.dart",
      "new_id": "72d6df081962e18fe6f2dfe05504f49dd1741dc5",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/widget_preview/preview_detector.dart"
    },
    {
      "type": "modify",
      "old_id": "60fe3398b4795d1ef2da8908667b4685fc2a5179",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/widget_preview/utils.dart",
      "new_id": "a1374e84cbe71ff62251edc6183b60a74d3ff8e2",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/widget_preview/utils.dart"
    },
    {
      "type": "modify",
      "old_id": "3820a95c65c3e5983cc66d481e2e68706a750090",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/templates/app/.gitignore.tmpl",
      "new_id": "79f7ecabd5c79ed432e463c2304a605523961083",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/templates/app/.gitignore.tmpl"
    },
    {
      "type": "modify",
      "old_id": "def881bd73a031159536dea39945a5dfd8453562",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/templates/widget_preview_scaffold/lib/src/dtd/dtd_connection_info.dart.tmpl",
      "new_id": "1d8cacc43d3ee51388027107ca6ab15e74d76a68",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/templates/widget_preview_scaffold/lib/src/dtd/dtd_connection_info.dart.tmpl"
    },
    {
      "type": "modify",
      "old_id": "d91e39e752138d8846dc78153d0baa842cb3e56b",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/templates/widget_preview_scaffold/lib/src/widget_preview_inspector_service.dart.tmpl",
      "new_id": "224fb37570e5450c22617c75248d7c40f8521ec4",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/templates/widget_preview_scaffold/lib/src/widget_preview_inspector_service.dart.tmpl"
    },
    {
      "type": "modify",
      "old_id": "d8f5fc422e64f86623c88dc8ceeec1503bc954ae",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/commands.shard/hermetic/widget_preview/preview_code_generator_test.dart",
      "new_id": "b5b3f64dd19f90e81fc1cea705747b6125e57574",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/commands.shard/hermetic/widget_preview/preview_code_generator_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7fd065c3e99d29363a8f01e4b138317823b89511",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/migrations/widget_preview_gitignore_migration_test.dart"
    },
    {
      "type": "modify",
      "old_id": "fd0afb93792cd37c408f7b34b4b205a722b49058",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/integration.shard/test_data/basic_project.dart",
      "new_id": "8bb8583c01ff274e1d6f217e8d128e57b59c2afc",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/integration.shard/test_data/basic_project.dart"
    },
    {
      "type": "modify",
      "old_id": "44d2743f332e0be015fd5ff00808afe2b0f89a0b",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/integration.shard/test_data/project.dart",
      "new_id": "993558604dbbebe16241f2a67d98f678e229b6f1",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/integration.shard/test_data/project.dart"
    },
    {
      "type": "modify",
      "old_id": "0f3f57fa90ea2d44a76fa11431d10eb70243d176",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/integration.shard/widget_preview_detection_test.dart",
      "new_id": "cef80d3cd0732bc47edc1c3004265d29ab120d65",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/integration.shard/widget_preview_detection_test.dart"
    },
    {
      "type": "modify",
      "old_id": "2717cf9944d9d4c225019a35d396ff018cc9c5de",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/integration.shard/widget_preview_pubspec_test.dart",
      "new_id": "50b51ab240fe202a1b168547a9537ee0db5597c7",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/integration.shard/widget_preview_pubspec_test.dart"
    },
    {
      "type": "modify",
      "old_id": "ea16c7fd33e377fb8fe9b298b8e83cda85e8599d",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/integration.shard/widget_preview_smoke_test.dart",
      "new_id": "76af3eacd9a9f262f9245b847c7543aafbdee8a3",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/integration.shard/widget_preview_smoke_test.dart"
    },
    {
      "type": "modify",
      "old_id": "9f505a7660c5a9b426f5725024febb138114a596",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/integration.shard/widget_preview_test_helpers.dart",
      "new_id": "4b9747f13bf3328421c991bf044e307cc40f39a4",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/integration.shard/widget_preview_test_helpers.dart"
    }
  ]
}
