)]}'
{
  "commit": "348ac7e4bacd026273e5a67765afa43d0880fdeb",
  "tree": "1fc8648c3f98d11eb31e95c19ac1e9f3bbf07d45",
  "parents": [
    "6df3c8f5cb7c04e3330eea4aefe88ad1b1038763"
  ],
  "author": {
    "name": "Dmitry Grand",
    "email": "dmgr@google.com",
    "time": "Tue May 05 14:54:16 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue May 05 21:54:16 2026 +0000"
  },
  "message": "[Gemini Log Analyzer] Part 1: Backend Foundation (Models, Config, \u0026 Setup) (#5042)\n\nThis is Part 1 of a stacked PR series implementing the Gemini Log Analyzer feature: https://github.com/flutter/flutter/issues/185700\r\n\r\nThis PR establishes the required foundation:\r\n- Adds `APP_DART_GEMINI_LOG_ANALYZER_KEY` secret config property to `Config`.\r\n- Adds `log_analysis` and `build_id` fields to Firestore `PresubmitJob` model.\r\n- Adds `build_id` to `PresubmitJobResponse` RPC model in `cocoon_common`.\r\n\r\n### Stacked PR Series:\r\n- **Part 1: Backend Foundation** (This PR)\r\n- Part 2: Backend Core API\r\n- Part 3: Frontend Dashboard UI",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b5102732dc4221e7e887cdebcf048cb2b8297699",
      "old_mode": 33188,
      "old_path": "app_dart/lib/src/model/common/presubmit_completed_check.dart",
      "new_id": "3251307980424d706649677ce67443ebe9adebd0",
      "new_mode": 33188,
      "new_path": "app_dart/lib/src/model/common/presubmit_completed_check.dart"
    },
    {
      "type": "modify",
      "old_id": "84582c7d9ad86594302dcd6d1360e19d6c171561",
      "old_mode": 33188,
      "old_path": "app_dart/lib/src/model/common/presubmit_job_state.dart",
      "new_id": "b9756b1ab93b19944a891790694785287d73f561",
      "new_mode": 33188,
      "new_path": "app_dart/lib/src/model/common/presubmit_job_state.dart"
    },
    {
      "type": "modify",
      "old_id": "5c285fafe0959f19fbe9185529b43a3f2e6baf1c",
      "old_mode": 33188,
      "old_path": "app_dart/lib/src/model/firestore/presubmit_job.dart",
      "new_id": "80fc5ea0d4a6afb3809f569cc75ce14b39c21f0e",
      "new_mode": 33188,
      "new_path": "app_dart/lib/src/model/firestore/presubmit_job.dart"
    },
    {
      "type": "modify",
      "old_id": "b770dc8a09b19f3c9086d4a9f647cc8722f5d97b",
      "old_mode": 33188,
      "old_path": "app_dart/lib/src/request_handlers/get_presubmit_jobs.dart",
      "new_id": "bb16a8eb131908a837d629c313b38599db394780",
      "new_mode": 33188,
      "new_path": "app_dart/lib/src/request_handlers/get_presubmit_jobs.dart"
    },
    {
      "type": "modify",
      "old_id": "bf76c4d136a0a1f5ea619b829096ad7e30dcfa37",
      "old_mode": 33188,
      "old_path": "app_dart/lib/src/service/config.dart",
      "new_id": "24e8396f7bb2d5a5cdfc3eca3d5e85dd13817dc7",
      "new_mode": 33188,
      "new_path": "app_dart/lib/src/service/config.dart"
    },
    {
      "type": "modify",
      "old_id": "05454aa0ef8f127308e29aba25686b7f4f9d0df3",
      "old_mode": 33188,
      "old_path": "app_dart/lib/src/service/firestore/unified_check_run.dart",
      "new_id": "fea62cc5936d04be5611cc5a4e4294ffe3c7fc1d",
      "new_mode": 33188,
      "new_path": "app_dart/lib/src/service/firestore/unified_check_run.dart"
    },
    {
      "type": "modify",
      "old_id": "9285c07255de01d2039516e10dfe121871364ee0",
      "old_mode": 33188,
      "old_path": "app_dart/test/model/common/presubmit_check_state_test.dart",
      "new_id": "ea337af9e02e38812335c6f626a5381ceeaf8425",
      "new_mode": 33188,
      "new_path": "app_dart/test/model/common/presubmit_check_state_test.dart"
    },
    {
      "type": "modify",
      "old_id": "ad9a33a31d2001c5a4bf15c50b2968516a5bf148",
      "old_mode": 33188,
      "old_path": "app_dart/test/model/common/presubmit_completed_check_test.dart",
      "new_id": "f5d53a2dba50901231c37d47ee15216a3ca851b9",
      "new_mode": 33188,
      "new_path": "app_dart/test/model/common/presubmit_completed_check_test.dart"
    },
    {
      "type": "modify",
      "old_id": "94317643cd92c0d52e89bb3d6f3f132b6558d03e",
      "old_mode": 33188,
      "old_path": "app_dart/test/model/firestore/presubmit_check_test.dart",
      "new_id": "0515161260205e3d2963ba1bcd83f687963224b6",
      "new_mode": 33188,
      "new_path": "app_dart/test/model/firestore/presubmit_check_test.dart"
    },
    {
      "type": "modify",
      "old_id": "420609091148f277665e1f4d632ac21360ed7647",
      "old_mode": 33188,
      "old_path": "app_dart/test/request_handlers/get_presubmit_checks_test.dart",
      "new_id": "b9712c0394ff60d72ebdbb9959513c04c690965f",
      "new_mode": 33188,
      "new_path": "app_dart/test/request_handlers/get_presubmit_checks_test.dart"
    },
    {
      "type": "modify",
      "old_id": "8fe7f3f0d03fde706338707c4e15a3331bba0230",
      "old_mode": 33188,
      "old_path": "app_dart/test/service/config_test.dart",
      "new_id": "6763c834dce5838d4d49d90679fc25bb918a6a09",
      "new_mode": 33188,
      "new_path": "app_dart/test/service/config_test.dart"
    },
    {
      "type": "modify",
      "old_id": "d47b48436490de1270fc976c3add6419f05a06dd",
      "old_mode": 33188,
      "old_path": "app_dart/test/service/firestore/unified_check_run_test.dart",
      "new_id": "38bc618e70e3ab77ce3b1739e462355591585906",
      "new_mode": 33188,
      "new_path": "app_dart/test/service/firestore/unified_check_run_test.dart"
    },
    {
      "type": "modify",
      "old_id": "a9543c285647a7885a9b125e75741984ee310483",
      "old_mode": 33188,
      "old_path": "packages/cocoon_common/lib/src/rpc_model/presubmit_job_response.dart",
      "new_id": "7f62882f62ea04bddda1cbc217c51be4ecdec46d",
      "new_mode": 33188,
      "new_path": "packages/cocoon_common/lib/src/rpc_model/presubmit_job_response.dart"
    },
    {
      "type": "modify",
      "old_id": "c26621f0ec7ca83035026f836fabe730d07d4c44",
      "old_mode": 33188,
      "old_path": "packages/cocoon_common/lib/src/rpc_model/presubmit_job_response.g.dart",
      "new_id": "a904a923ce8a5e5e536b9c63570e5c945c746607",
      "new_mode": 33188,
      "new_path": "packages/cocoon_common/lib/src/rpc_model/presubmit_job_response.g.dart"
    },
    {
      "type": "modify",
      "old_id": "8213e3965818c70294857491e51559503a704059",
      "old_mode": 33188,
      "old_path": "packages/cocoon_integration_test/lib/src/fakes/fake_config.dart",
      "new_id": "a68e53196702151e9e67179f7e0784951b0a36cb",
      "new_mode": 33188,
      "new_path": "packages/cocoon_integration_test/lib/src/fakes/fake_config.dart"
    }
  ]
}
