)]}'
{
  "log": [
    {
      "commit": "b5701a8f2a7a3455b03a7d9082d4954f86e8b334",
      "tree": "fe20223e2dcb952987603c9b1886711887e873da",
      "parents": [
        "fe3b0be59576ce846130b90431cdd1615b17616d"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Fri Jun 12 05:53:50 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jun 12 05:54:30 2026 -0700"
      },
      "message": "Fix 1 IncludeCleaner finding:\n* Used header \"production/borg_mgmt/node_proxy/safepower/safepower_agent/proto/system_state.proto.h\" is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just grant approval!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 931106797\nChange-Id: I5dcc2d0d4fdb28e5e3d09487e8a93e1456f33a72\n"
    },
    {
      "commit": "fe3b0be59576ce846130b90431cdd1615b17616d",
      "tree": "18996221e462493dc91915bc3526a86572e885ae",
      "parents": [
        "16d8ba9b731ab1486780e881211f2b8e0f35bba1"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Mon Jun 08 09:39:56 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jun 08 09:40:13 2026 -0700"
      },
      "message": "Reimplement CallbackManager to use shared_ptr/weak_ptr for handle\n\nAll functionality is identical, but the following race condition picked up\nby msan has been fixed:\n\nPreviously, there was a race condition that led to a use-after free.\nA handle owner called `TryCancel` in it\u0027s destructor after the callback\nhad been copied out but before it got executed in `RunCallbacks`. The\ndestructor finished, and then the callback executed and referenced\nthe destructed object.\n\nPiperOrigin-RevId: 928612448\nChange-Id: Ibf5353464590ef07c64162dac736b2cf51d3c379\n"
    },
    {
      "commit": "16d8ba9b731ab1486780e881211f2b8e0f35bba1",
      "tree": "6724a5235149eac72a2a6b20b0c684a28d833b87",
      "parents": [
        "a66f0471254feb725fac981dd33ff5a03c86e68b"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Fri Jun 05 19:45:22 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jun 05 19:45:48 2026 -0700"
      },
      "message": "Fix 2 ClangInliner findings:\n* The use of this symbol has been deprecated and marked for inlining. The function being deprecated is absl::MutexLock::MutexLock. (2 times)\n\nSee go/inliner-lsc for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just grant approval!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/inliner-bug for category ClangInliner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #third_party-absl-synchronization-mutex.h\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 927592598\nChange-Id: I6acd38f6d595f4031115f44a08472739ce5e02cb\n"
    },
    {
      "commit": "a66f0471254feb725fac981dd33ff5a03c86e68b",
      "tree": "3f92346d13076656b32dd6c02ae96f81e18e401f",
      "parents": [
        "3a59d9b9eb8aff087ce1062a6ffde17c9010adca"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Thu Jun 04 11:07:07 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 04 11:07:28 2026 -0700"
      },
      "message": "#gpowerd - Version reporting: Yocto/Copybara build time automation\n\nImplement build-time version and Piper CL injection for gpowerd.\nInstead of manual bump tools, Copybara dynamically writes the Piper CL\nto `piper_cl.txt` during export, and Meson reads it using `fs` at build time.\n\nThis requires https://gbmc-review.git.corp.google.com/c/meta-gbmc-staging/+/89858 to report the version correctly.\n\nTested:\nhttps://fusion2.corp.google.com/85636490-2e49-3659-b6e2-74727cd7d8f5\nPiperOrigin-RevId: 926782906\nChange-Id: I6b4e6342d570972c7a3f73e8d055de712a717d72\n"
    },
    {
      "commit": "3a59d9b9eb8aff087ce1062a6ffde17c9010adca",
      "tree": "47ec8531b875c735e9b09948a5666c9c118671e3",
      "parents": [
        "e4b7e5ddffbf5dcc1c0c588169dbdeae21c25a20"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Wed Jun 03 05:01:57 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 03 05:02:18 2026 -0700"
      },
      "message": "Fix 4 IncludeCleaner findings:\n* Used header \"production/borg_mgmt/node_proxy/safepower/safepower_agent/proto/system_state.proto.h\" is not included directly (3 times)\n* Used header \"production/borg_mgmt/node_proxy/safepower/safepower_agent/proto/action.proto.h\" is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just grant approval!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 925947960\nChange-Id: Ic4f6dc026c32b7cb7f9ce89106cb2a06719546e2\n"
    },
    {
      "commit": "e4b7e5ddffbf5dcc1c0c588169dbdeae21c25a20",
      "tree": "17c45e1c5ca732b3dc1a492d3963b7b8596a39c3",
      "parents": [
        "9dbc1640bb4182532902b41cd5f42680484ab171"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Tue Jun 02 13:22:06 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 02 13:22:26 2026 -0700"
      },
      "message": "#gpowerd - Version reporting: Implement GetFeatures RPC\n\nImplement the C++ handlers for the GetFeatures RPC (both gRPC and scaffolding).\nThe RPC retrieves and returns the supported actions, build CL/version, and the actual typed agent config.\nMap the new RPC in the central security policy bundle and add unit tests in safepower_agent_test, safepower_scaffolding_service_test, and safepower_agent_service_test.\n\nPiperOrigin-RevId: 925542857\nChange-Id: I1e16ff66d153c5a0c984e5f3c16b4e10493612a7\n"
    },
    {
      "commit": "9dbc1640bb4182532902b41cd5f42680484ab171",
      "tree": "c42a1399f9d8877c234432217ba9e634c74fb63a",
      "parents": [
        "a69288dd3cb29c01eb6bddb7fd9ddb1148161ef7"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Tue Jun 02 05:12:52 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 02 05:13:58 2026 -0700"
      },
      "message": "Add missing include for absl/flags/parse.h.\nThe `absl/flags/parse.h` header is needed for flag parsing in the gpowerd binary.\n\nPiperOrigin-RevId: 925287058\nChange-Id: Ibf4c30da7ee47650e926104017dad1c8d4a196d1\n"
    },
    {
      "commit": "a69288dd3cb29c01eb6bddb7fd9ddb1148161ef7",
      "tree": "dfb356d2dec8cc3d01b333a845522fdaed97e8d1",
      "parents": [
        "1beeb2eb2ad27353949391f44b66f961c25d775d"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Sat May 30 08:49:08 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat May 30 08:49:27 2026 -0700"
      },
      "message": "Fix 2 IncludeCleaner findings:\n* Included header \"third_party/absl/flags/parse.h\" is not used directly\n* Used header \"production/borg_mgmt/node_proxy/safepower/safepower_agent/proto/safepower_agent.proto.h\" is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just grant approval!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude #UnusedInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 923940958\nChange-Id: I30905ed8b6fe6d430afe02023e8b062a84cc309b\n"
    },
    {
      "commit": "1beeb2eb2ad27353949391f44b66f961c25d775d",
      "tree": "6f0cbf80ad7fee311ac606efcf65dd2613933cf2",
      "parents": [
        "caf51f51ecaeebdb4c70c94c0229d7d34420a46c"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Thu May 28 16:49:26 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 28 16:49:49 2026 -0700"
      },
      "message": "#gpowerd - Version reporting: Proto definition\n\ngo/gpowerd-version-reporting\n\nDefine the BuildInfo message in system_state.proto and add the GetFeatures RPC to SafepowerLocalAgent in safepower_agent.proto.\nAdd build_info field to SafePowerAgentConfig.\nThis exposes features and version reporting for the Safepower agent.\n\nPiperOrigin-RevId: 923048480\nChange-Id: I17b4bc21b744df6ece50bf45ceb1dbabd105cf22\n"
    },
    {
      "commit": "caf51f51ecaeebdb4c70c94c0229d7d34420a46c",
      "tree": "dec3ab66ddc8fab998ae688b7a373f1cd2097124",
      "parents": [
        "bf2eb355879cae2ef26a7f4f493465fa826fc913"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Thu May 28 12:52:54 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 28 12:53:16 2026 -0700"
      },
      "message": "#gpowerd - Split safepower_agent proto to resolve circular dependency\n\nSplit the monolithic safepower_agent.proto into:\n- system_state.proto (leaf)\n- action.proto (depends on system_state.proto)\n- safepower_agent.proto (depends on action.proto and system_state.proto)\n\nThis prevents circular dependencies between safepower_agent.proto and safepower_agent_config.proto.\n\nPiperOrigin-RevId: 922925421\nChange-Id: I4c32db1ceb3e9c75cba0c9a8a9c2706c2ac0d7e3\n"
    },
    {
      "commit": "bf2eb355879cae2ef26a7f4f493465fa826fc913",
      "tree": "fb4c210c957062e73f43c192e7815db5f5fae078",
      "parents": [
        "270bb22b7c0a9aede7b74a4744902d96a4885f04"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Thu May 28 11:01:19 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 28 11:01:41 2026 -0700"
      },
      "message": "#gpowerd Clean up `AddListener` variables\n\nPiperOrigin-RevId: 922867344\nChange-Id: I2b47b19683df202546b5eaac415e353013ac0e56\n"
    },
    {
      "commit": "270bb22b7c0a9aede7b74a4744902d96a4885f04",
      "tree": "3b2f4f15d5eb31f139ee1b4868696570e9cebcff",
      "parents": [
        "06d18d8e1c52e9895b0b29999491ddc2c7f379b0"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Wed May 27 06:49:08 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed May 27 06:49:56 2026 -0700"
      },
      "message": "Used header \u003cutility\u003e is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just grant approval!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 922100701\nChange-Id: I31dda44a9c03a3892ee798c44ca77849c7a31742\n"
    },
    {
      "commit": "06d18d8e1c52e9895b0b29999491ddc2c7f379b0",
      "tree": "6e3098e8de78d01290bdb6d31e329f2709730421",
      "parents": [
        "634fd5f9c2426b55dd5d4107c5d987387c8db243"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Fri May 22 14:58:02 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri May 22 14:58:25 2026 -0700"
      },
      "message": "Reorder state persistence in FinishAction.\n\nThis fixes a race condition bug that happens during the action state change process; what was happening, in order:\n1. we notify all listeners of the state change.\n2. we persist the change\n\nAfter notifying the listeners, but before the change is persisted, we start another action. The intent is, when our limit for the number of actions persisted is reached, is to evict the oldest completed actions first, then the oldest pending actions. However, because of this race, we started an action before the change was persisted, so we evicted the second oldest, not the oldest action.\n\nThe solution in this change is to persist the change before updating the state and notifying the listeners. And in the case where the action-context is completing, persist the state also before the action is re-enabled\n\nPiperOrigin-RevId: 919874464\nChange-Id: I2392e1e19cbacb859678a44672fa8b8cfca71334\n"
    },
    {
      "commit": "634fd5f9c2426b55dd5d4107c5d987387c8db243",
      "tree": "2e1cfd604df2dffbc2e03457d940d3ffb9e49177",
      "parents": [
        "dece052e2a22f67828f0b5548c3c6f839b56dd43"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Fri May 22 13:42:22 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri May 22 13:42:46 2026 -0700"
      },
      "message": "Add listener to state updater atomically\n\n* We start Inserting a listener\n* We add the listener to the state updater, which triggers callbacks\n* The callbacks note that we\u0027re done, so they tell the listener to call Done\n* But the listener can\u0027t find the state updater (hasn\u0027t been added yet)\n\nPiperOrigin-RevId: 919839795\nChange-Id: Id12f90fbc37c72e829070dd92a47a9db9f4ce227\n"
    },
    {
      "commit": "dece052e2a22f67828f0b5548c3c6f839b56dd43",
      "tree": "f595c1f20f0dadf96f378de19a024c496bd99deb",
      "parents": [
        "94963e5f9556b128312066236ce9918fdaa1b39a"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Fri May 22 11:43:41 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri May 22 11:44:01 2026 -0700"
      },
      "message": "Change locking order in AddListener.\n\nThis fixes a time-of-check to time-of-use bug:\n1) Monitor listener thinks it is not final\n2) State gets updated to final, all listeners except the monitor listener that is not yet added are notified\n3) Monitor listener never realizes that a final update happened\n\nPiperOrigin-RevId: 919782727\nChange-Id: I1ce1347e9b7795569a05a0f0de113220efea0ecd\n"
    },
    {
      "commit": "94963e5f9556b128312066236ce9918fdaa1b39a",
      "tree": "cb11b6f9366711cda13752a8e2591bb535d7a83a",
      "parents": [
        "418f5a1aef197efd7de2ee111bec73457571ab07"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Thu May 21 12:23:21 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 21 12:23:43 2026 -0700"
      },
      "message": "#gpowerd - Propagate active state to local state updater in ActionContextManager\n\nThis CL fixes a bug where gnic_monitor (or other polling monitors in safepower_agent) stop polling when a gracepower cycle action starts, causing the power cycle to hang.\n\n- Cause: ActionContext registers its preconditions on the global state updater. But ActionContextManager\u0027s Forwarder (which forwards updates from local updater to global updater) is registered as a passive listener. Thus, when global updater becomes active due to the action precondition listener, this active status is never propagated to the local updater, causing GnicMonitor to think there are no active listeners and pause.\n- Fix: Implement active state propagation in ActionContextManager by dynamically managing a DummyActiveListener on the local state updater when the global state updater becomes active, and removing it when the global updater becomes idle.\n- Added state machine to ActionContextManager to handle multiple active/idle transitions correctly since state updater callbacks are one-shot.\n- Explicitly stop listening to precondition and validation conditions in ActionContext once they are satisfied or failed to avoid listener leaks.\n- Added unit test ActivePreconditionKeepsLocalStateUpdaterActive in action_context_test.cc to verify this behavior.\n\nPiperOrigin-RevId: 919191825\nChange-Id: Idcecebedddf7869488f914f0bb1b692ee15e629d\n"
    },
    {
      "commit": "418f5a1aef197efd7de2ee111bec73457571ab07",
      "tree": "86e7cd9d034a228a740f68a9109df6a6b6882a35",
      "parents": [
        "904d766f84db9f3bb7ae1074bbc497c12cc2029a"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Tue May 19 12:04:30 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue May 19 12:04:52 2026 -0700"
      },
      "message": "Safepower agent to follow totw/181\n\nPiperOrigin-RevId: 917955097\nChange-Id: Ie1e8c374eb0c132341868afd4b65bedcf0aa79e9\n"
    },
    {
      "commit": "904d766f84db9f3bb7ae1074bbc497c12cc2029a",
      "tree": "f9e609cc442f98614fd484d55f60fd7915e8251d",
      "parents": [
        "b477808042c285cc39e1d18ded9934d7c3230a3c"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Sun May 17 11:45:05 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun May 17 11:45:22 2026 -0700"
      },
      "message": "Fix 2 IncludeCleaner findings:\n* Included header \"third_party/absl/functional/bind_front.h\" is not used directly (2 times)\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just grant approval!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #UnusedInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 916858551\nChange-Id: I1056c256e5ef85c7e0ec25e4d8b65959809c2353\n"
    },
    {
      "commit": "b477808042c285cc39e1d18ded9934d7c3230a3c",
      "tree": "463c991607028f089b5de9bf6fb80a5202e9f12e",
      "parents": [
        "93be6a24fc009b747500af54a6411e42ceb1a94a"
      ],
      "author": {
        "name": "Sruthi Ganti",
        "email": "sruthiganti@google.com",
        "time": "Wed May 13 10:19:37 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed May 13 10:20:01 2026 -0700"
      },
      "message": "Add workflow_id field to FlightRecordRequest proto\n\nAdded a new field workflow_id to FlightRecordRequest in utils.proto.\nThis field is used by the client for their workflow and passed to Safepower for logging purposes.\n\nPiperOrigin-RevId: 914931901\nChange-Id: I888dd5987fc4804bf35645300cb45ad1fdcd3058\n"
    },
    {
      "commit": "93be6a24fc009b747500af54a6411e42ceb1a94a",
      "tree": "604cef74f433e20f38cae35996d814c748adb1a1",
      "parents": [
        "1818e44cad50d5e3bd951ac6745cdbb3439c7f72"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Tue May 12 11:54:50 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue May 12 11:55:11 2026 -0700"
      },
      "message": "Prevent race when async processing results with remote state monitor\n\nBefore this change, the child classes of remote state monitor, ping state monitors in particular, could process states out of order. In the ping state monitor case, the remote state monitor will call `Check` at regular intervals. Then, the ping state monitor launches a `boost::async_system` to call `ping`, and then the result of that gets processed in `ProcessPingResult` which calls `UpdateReachableState`.\n\nThe race: We could have two results (e.g. can ping, cannot ping) in flight at the same time, and then we process them out of order, then broadcasting the states out of order.\n\nWith this change: If a check is in flight, no other check will be launched. Instead, ping states monitor will just rely on the next call `Check`.\n\nAn alternative design would be to have the remote state ping monitor only launch a check after the last `UpdateReachableState` is called. I attempted to implement this solution, but noticed a race condition in the pausing logic and decided not to pursue it further.\n\nTested:\n  ran `remote_state_ping_test` 1k times ([link](http://sponge2/b61554b0-6f7b-4792-a796-425f40f2bd46)) as well as `state_monitor_bmc_test` ([link](http://sponge2/2a177bf9-bf7f-4eca-a401-ef7eda53110f)).\nPiperOrigin-RevId: 914403148\nChange-Id: I597027cd0b0692b3c4ffe1acae1014d60203da50\n"
    },
    {
      "commit": "1818e44cad50d5e3bd951ac6745cdbb3439c7f72",
      "tree": "b9288d7212d06c4fc9cdc56cbeb5618e59cccfe9",
      "parents": [
        "c7e7dd3cf5c8b9f5065110cef3bdb5a843c18fe6"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Fri May 08 11:48:40 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri May 08 11:48:58 2026 -0700"
      },
      "message": "#gpowerd - Add safe to shutdown valid bit\n\nAdd a new field `safe_to_shutdown_valid` in the `BootState` proto and extract it from telemetry.\nTo support system states where the `safe_to_shutdown` bit is set to 0, but the daemon that sets it to 1 is missing, we export this extra bit that tells us if this bit is valid.\n\nTested:\n- Built and installed gBMC image with this change\n- Installed gsys that reports the valid bit\n- Verified valid is false without imc_safetoshutdown package\n- Verified valid changes to true when the package is installed\n- Verified that changes to false with old gsys\nPiperOrigin-RevId: 912622795\nChange-Id: If5c2ae701c4bf481de40a1b13a76504ca871e6ba\n"
    },
    {
      "commit": "c7e7dd3cf5c8b9f5065110cef3bdb5a843c18fe6",
      "tree": "c4dc8bd3fc0973d8b3f6f22644abfc7c85903517",
      "parents": [
        "5149130c1898e00ae9460615900301e4516135c5"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Thu May 07 06:14:21 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 07 06:14:42 2026 -0700"
      },
      "message": "Fix 1 IncludeCleaner finding:\n* Used header \"third_party/absl/base/thread_annotations.h\" is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just grant approval!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 911924804\nChange-Id: Ie5a6dfea4387b0afb653bdbf53546e610a4e68ac\n"
    },
    {
      "commit": "5149130c1898e00ae9460615900301e4516135c5",
      "tree": "f2525f9da1402f7821e51325cf783e4382adad42",
      "parents": [
        "48a6382070f3fdfebc73e484cd5eb8ce17ab0f6a"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Wed May 06 11:47:59 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed May 06 11:48:18 2026 -0700"
      },
      "message": "#gpowerd - Implement `WithState` in StateUpdater to improve thread safety.\n\nReplace most usages of StateUpdater::state() with a new template method\n`WithState(Func f)` that executes the given function `f` with the state lock held.\nThis ensures that state access is performed safely under the lock, preventing\npotential data races when returning references to the state.\n\nPiperOrigin-RevId: 911460138\nChange-Id: Id60418ac3157dc6ea1441b1d6cb22659c573c69e\n"
    },
    {
      "commit": "48a6382070f3fdfebc73e484cd5eb8ce17ab0f6a",
      "tree": "26833d60d228324bb18fbe7d44a5ab7480162c72",
      "parents": [
        "e6424c17591e4bf8ee0806b45cb6158eb1f2fb8c"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Mon May 04 11:49:49 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 04 11:50:05 2026 -0700"
      },
      "message": "Safepower Agent: Preserve ABORTED state across restarts\n\nThis change ensures that actions in the ACTION_STATE_ABORTED state are not interpreted as malformed persistent state, which would cause loading a new and empty persistent state.\n\nPiperOrigin-RevId: 910154977\nChange-Id: I88203c562935a360eb528d6fae5de6611c47fb33\n"
    },
    {
      "commit": "e6424c17591e4bf8ee0806b45cb6158eb1f2fb8c",
      "tree": "ca77331e42916dc9ad79b747ce9ffe7660d336d6",
      "parents": [
        "314513a25f741c2e1671d3c4f8cca9830d7f75af"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Wed Apr 29 14:37:03 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 29 14:37:23 2026 -0700"
      },
      "message": "Improve logging for boot ID changes in safepower_agent.\n\nPiperOrigin-RevId: 907783853\nChange-Id: Ibc00b256ddcabab657af32ab4f691596fe453f31\n"
    },
    {
      "commit": "314513a25f741c2e1671d3c4f8cca9830d7f75af",
      "tree": "16df4ae6ae3a51e6d72ad4f38a4b7f54387263e2",
      "parents": [
        "ca0a4fdf2aa6b07a6bed2ec99a8345120ca66ff3"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Wed Apr 29 11:59:10 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 29 11:59:29 2026 -0700"
      },
      "message": "Prevent use-after-free in StateUpdater listeners during destruction.\n\nThe previous fix cl/903325378 made it so that we don\u0027t crash when this occurs; this fix prevents the tsan and undefined error.\n\nIntroduces a StopListening() method in StateUpdater::Listener and moves the listener unregistration logic into it. Derived classes now call StopListening() at the beginning of their destructors. This ensures that no more UpdateState callbacks are received after the derived class\u0027s members start being destroyed, preventing potential use-after-free issues. Updates Condition, StreamAdapter, and StateChangeWriteReactor to call StopListening() in their destructors.\n\nPiperOrigin-RevId: 907707936\nChange-Id: Id0ea6926e905c2d42bec1e470259386fb8200942\n"
    },
    {
      "commit": "ca0a4fdf2aa6b07a6bed2ec99a8345120ca66ff3",
      "tree": "cb7c43531d0d226b1bd59196b24f0d729e7e5c6a",
      "parents": [
        "8e0f54252c2976fc663ac6d87e3c086f3e70bf1d"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Tue Apr 28 17:03:53 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Apr 28 17:04:12 2026 -0700"
      },
      "message": "#gpowerd - Add SystemdTargetMonitor\n\nImplement monitor for tracking Systemd target states.\n\nWe will use this to detect when IMCs have reached `unmount.target`. It also provides general monitoring to help analyze shutdown progress and timing.\n\nPiperOrigin-RevId: 907252658\nChange-Id: I2ad2faf5083f55d9e7ebe2b3a279fa9a7043e7af\n"
    },
    {
      "commit": "8e0f54252c2976fc663ac6d87e3c086f3e70bf1d",
      "tree": "19c17a941daa3971186b997664cc48b66354d9e3",
      "parents": [
        "f5c7fa3012a4faf66aa391dd01b0a64cac924bad"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Tue Apr 28 16:09:02 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Apr 28 16:11:14 2026 -0700"
      },
      "message": "#s4v2 - Allow sending system state updates during a disruption\n\nNode agents (including #gpowerd) will now allow stream requests while a disruption is pending (e.g. the node is about to shut down). This is needed to report q-state, and is also useful to report daemon states during shutdown for monitoring.\n\nNote that we will _still_ drop the stream when a disruption starts. This allows future retries to connect to the correct instance of the service when we are shutting down.\n\nPiperOrigin-RevId: 907229009\nChange-Id: I74ae9c44670ce47a8b622e41b156d7ce3e8af676\n"
    },
    {
      "commit": "f5c7fa3012a4faf66aa391dd01b0a64cac924bad",
      "tree": "277fdecb161ccd4bc26ef7bf3e7627049b2aafd2",
      "parents": [
        "d9d2fb7130b49981774ebc879da1e5f475ad96c7"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Tue Apr 28 16:03:54 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Apr 28 16:04:11 2026 -0700"
      },
      "message": "#gpowerd - Throttle log spam on EEPROM read errors in GnicMonitor\n\nUse LOG_EVERY_N_SEC(ERROR, 60) to prevent logging on every polling interval if there is an EEPROM read error, reducing log spamming.\n\nPiperOrigin-RevId: 907226743\nChange-Id: I351754dd99d400bbc9506a7cc20b3603b638abda\n"
    },
    {
      "commit": "d9d2fb7130b49981774ebc879da1e5f475ad96c7",
      "tree": "0cdff7645571daa1f5d9211ddfa9ca87d50f0539",
      "parents": [
        "6c5839ddeee183790aafdd41f2c0663ab6dfa7d0"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Tue Apr 28 13:01:08 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Apr 28 13:01:25 2026 -0700"
      },
      "message": "Stop #gpowerd polling when idle\n\nThe change to make the local state and global state in series made it so that we _always_ have a listener. This means monitors are never idle.\n\nIntroduce IsIdleListener() to StateUpdater so that we can specify listeners that do not prevent the updater from being considered idle.\nOverride it in ActionContextManager::Forwarder to allow gPowerD to be considered idle when there are no active actions or clients monitoring the state.\n\nPiperOrigin-RevId: 907135819\nChange-Id: Ifec12cd410905c377a726d20222f3ec7039db58e\n"
    },
    {
      "commit": "6c5839ddeee183790aafdd41f2c0663ab6dfa7d0",
      "tree": "4cdb531e89710698b0c3d22cd65d2d5b417e594b",
      "parents": [
        "20dc70333b75f4be87727afac4ad536a1e6ef7d5"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Mon Apr 27 23:41:10 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Apr 27 23:41:31 2026 -0700"
      },
      "message": "Fix 1 ClangTidyBuild finding:\n* #includes not formatted according to style guide. For more info, see go/clang_tidy/checks/google3-build-include-order\n\nThis CL looks good? Just grant approval!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/clang-tidy-bug for category ClangTidyBuild if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/production/borg_mgmt/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #google3-build-include-order\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 906764551\nChange-Id: I3f4468c5dd0d5ebfb6a893f97d1c0dc5e2fe6252\n"
    },
    {
      "commit": "20dc70333b75f4be87727afac4ad536a1e6ef7d5",
      "tree": "3b7c8e8c33a45d765bf53c32512cd2cd01cdc86b",
      "parents": [
        "989d03e562b3d7cd7adc8493b6a2a13b5e4f8a89"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Thu Apr 23 17:10:15 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Apr 23 17:10:37 2026 -0700"
      },
      "message": "#s4v2 - Make sure we don\u0027t write to persistent storage during shutdown\n\nWith this change we will:\n- Return an error in case of _any_ write attempt in shutdown mode\n- Not activate any loaded actions\n- Start up with a disruption pending. This also ensures that we don\u0027t allow new actions to be started.\n\nPiperOrigin-RevId: 904709710\nChange-Id: Id6975ce375c815846cd3d6ea2cbf1c51cd903370\n"
    },
    {
      "commit": "989d03e562b3d7cd7adc8493b6a2a13b5e4f8a89",
      "tree": "de97245ffc7fbf526df0ed73e89898fd359df8ef",
      "parents": [
        "7227143e74d6f0fd9089e01a13996bd63c04697a"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Wed Apr 22 21:08:29 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 22 21:09:06 2026 -0700"
      },
      "message": "#gpowerd - Add system state for systemd target monitoring\n\nAdd SystemdUnitState to NodeState to track target states.\n\nPiperOrigin-RevId: 904203691\nChange-Id: I3382375f12c957fe5a4cb04c306d292340ad6dc3\n"
    },
    {
      "commit": "7227143e74d6f0fd9089e01a13996bd63c04697a",
      "tree": "cbd220abee111533e87c4925b69140473417346b",
      "parents": [
        "62aa23a4665781476805cd9786cc97851c870a04"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Wed Apr 22 21:02:29 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 22 21:02:47 2026 -0700"
      },
      "message": "Fix 3 IncludeCleaner findings:\n* Used header \"production/borg_mgmt/node_proxy/safepower/safepower_agent/proto/safepower_agent_config.proto.h\" is not included directly (2 times)\n* Used header \"platforms/uhm/node_entities/proto/offline_node_entities.proto.h\" is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just grant approval!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 904201461\nChange-Id: I22de70c63b4e285cf7ca76c1594e8d03bf33289f\n"
    },
    {
      "commit": "62aa23a4665781476805cd9786cc97851c870a04",
      "tree": "0bef14862371972e3d1f44ae0e91fa1b6c8a8403",
      "parents": [
        "ff37cc4fc79751983f625453facfabff2e3d324e"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Wed Apr 22 17:42:08 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 22 17:42:27 2026 -0700"
      },
      "message": "#gpowerd - Move PollingStateMonitor\n\nMove PollingStateMonitor from bmc/ to parent directory to allow use by non-BMC components.\n\nPiperOrigin-RevId: 904140417\nChange-Id: Ic9513ba6fa0fb4db71ae2d9e948c36d2b1920e95\n"
    },
    {
      "commit": "ff37cc4fc79751983f625453facfabff2e3d324e",
      "tree": "927ee750562d4a5a2f4b6d61bcc6b5d8173ce295",
      "parents": [
        "84d6a9c6dc1eb58feab5a86b1ae174a7f98a7e8f"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Wed Apr 22 09:48:15 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 22 09:48:34 2026 -0700"
      },
      "message": "Add mutex to persistent storage\n\nPiperOrigin-RevId: 903898081\nChange-Id: I1d5904265d621f4870deb00a237d9069c83a640b\n"
    },
    {
      "commit": "84d6a9c6dc1eb58feab5a86b1ae174a7f98a7e8f",
      "tree": "cc7818932cb5cc2a9f36ed86547459b41e0ed162",
      "parents": [
        "a285b044ebe68e76701167814c08300b95e9ac77"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Tue Apr 21 11:08:00 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Apr 21 11:09:33 2026 -0700"
      },
      "message": "Gpowerd: Fix Listener child class destruction\n\nThis change prevents Gpowerd from crashing during the sequence where a listener child class object is being destructed. It was possible that after the child class\u0027s destructor is called, but before the base class\u0027s destructor runs, another thread would call a child method, causing a panic.\n\nTested:\n  (Failed before, passes after)\n  blaze test //production/borg_mgmt/node_proxy/safepower/safepower_agent:state_change_reactor_destruction_test --runs_per_test\u003d1000\nPiperOrigin-RevId: 903325378\nChange-Id: I8a8633d6003578552d6596da46d09896808e9e94\n"
    },
    {
      "commit": "a285b044ebe68e76701167814c08300b95e9ac77",
      "tree": "414cfaffe96612abadd97b5006384806b305f2fa",
      "parents": [
        "76c94db1e30533df74c9a735b8f2e80de6a646b4"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Sun Apr 19 21:01:11 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Apr 19 21:01:28 2026 -0700"
      },
      "message": "Fix 16 ViewTypeMigrations findings:\n* This is a change required to migrate proto string accessors to return absl::string_view instead of const std::string\u0026.  See ​go/proto-string-view-accessors-cpp-lsc for more details. (12 times)\n* This is a change required to migrate function parameters to absl::Span from const std::vector (3 times)\n* This is a change required to migrate function parameters to absl::string_view from const std::string\u0026\n\nSee go/view-types-migrations for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just grant approval!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/string-view-params-bug for category ViewTypeMigrations if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #string-view-params #string-view-accessors #span-params\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 902389854\nChange-Id: Ic79fe78d5fad430ddcbab364a2965f44ac5e2f06\n"
    },
    {
      "commit": "76c94db1e30533df74c9a735b8f2e80de6a646b4",
      "tree": "893e2a729ff8a6ddb0d70ddfcdd761636f6ea41a",
      "parents": [
        "cfbfe269950cc78c4cf155c5b9acdb1ad9cb28ea"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Mon Apr 13 22:39:23 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Apr 13 22:39:47 2026 -0700"
      },
      "message": "#gpowerd - Report IMC boot state using the EEPROM\n\nThis change adds a dependency on gbmc HAL.\n\nIt also refactors `RemoteStateMonitor` to separate polling from reachability updates. The new `GnicMonitor` class _is_ polling, but it isn\u0027t reachability check. We may consider moving the redfish based polling to use this class as well, since it will inherit the ability to pause when unused.\n\nPiperOrigin-RevId: 899364514\nChange-Id: I2996a29b7eeaf1f4bc5c89f735091c756bd1875a\n"
    },
    {
      "commit": "cfbfe269950cc78c4cf155c5b9acdb1ad9cb28ea",
      "tree": "d09264d62b0bacddbb27ebbf07892205b2fc2b65",
      "parents": [
        "b11f9883b496870ac23db1f1974bbc7e57b00d45"
      ],
      "author": {
        "name": "Peter Foley",
        "email": "pefoley@google.com",
        "time": "Fri Apr 10 13:24:10 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Apr 10 13:24:34 2026 -0700"
      },
      "message": "Update references to production/msv/node_entities/proto\n\nAll these protos have moved to platforms/uhm/node_entities/proto.\nUpdate references to the legacy forwarding headers.\n\n#codehealth(pefoley)\n\nTested:\n    TAP --sample ran all affected tests and none failed\n    http://test/OCL:897739192:BASE:897696097:1775839706256:a3d03efa\nPiperOrigin-RevId: 897857259\nChange-Id: I94c8b205191dbc4b47bbf56799e8a6f64f88ca57\n"
    },
    {
      "commit": "b11f9883b496870ac23db1f1974bbc7e57b00d45",
      "tree": "53cc944b4d7998b4b119f71f7ae7ecdec0974cda",
      "parents": [
        "e830b6cbbd9d070e3696c9d913f2a6dd57a6aa16"
      ],
      "author": {
        "name": "Rishabh Jain",
        "email": "jainrish@google.com",
        "time": "Wed Apr 08 13:58:23 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 08 13:58:47 2026 -0700"
      },
      "message": "Introduce and handle ACTION_STATE_ABORTED in Safepower Agent.\n\nThis change adds a new `ACTION_STATE_ABORTED` to the safepower agent\u0027s action states. This state is used when precondition or validation checks fail with an aborted status, distinguishing it from general errors. The gPowerD and proxyv2 components are updated to recognize and handle this new terminal state.\n\nPiperOrigin-RevId: 896685132\nChange-Id: I5c471da29140da5f43ecac3fa0636dcea772dfbc\n"
    },
    {
      "commit": "e830b6cbbd9d070e3696c9d913f2a6dd57a6aa16",
      "tree": "ef61c3f6098ffa30a9472a3d2264f0d857407740",
      "parents": [
        "f77a0f9d54c82dcbc2c0e40699b779cebdd36578"
      ],
      "author": {
        "name": "Rishabh Jain",
        "email": "jainrish@google.com",
        "time": "Mon Apr 06 17:48:29 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Apr 06 17:48:47 2026 -0700"
      },
      "message": "Remove initial validation check in ActionContext::EnterStateRunningAction\n\nRemoving the check in `ActionContext::EnterStateRunningAction` that skips running the action if the validation condition is met at the start. This logic was left over from a time when we used to retry actions after a restart, and it was causing false successes on some machines.\n\nAlso added a unit test in `action_context_test.cc` to verify that the action is run even if the validation condition is met initially.\n\nPiperOrigin-RevId: 895584876\nChange-Id: Id49542a30b452d5ca363adec9500ac031280c13c\n"
    },
    {
      "commit": "f77a0f9d54c82dcbc2c0e40699b779cebdd36578",
      "tree": "725aa2cd21322f60969b1c9a0bc72ba769644df9",
      "parents": [
        "854d482d6bf5ddfd2353693f350443e6d60395da"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Thu Apr 02 13:09:02 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Apr 02 13:09:20 2026 -0700"
      },
      "message": "Resolve \"@self\" entity tag in Redfish state monitors.\n\nThe Redfish state monitor creation now resolves the \"@self\" node entity tag to the actual entity tag from OfflineNodeEntityInformation. If the OfflineNodeEntityInformation\u0027s entity tag is empty, \"@self\" is kept and a warning is logged.\n\nPiperOrigin-RevId: 893659704\nChange-Id: I5111654432a2430d42d61f4f0684e6a1cecf9f6b\n"
    },
    {
      "commit": "854d482d6bf5ddfd2353693f350443e6d60395da",
      "tree": "c6a22817c390a1e6788767be1ab7d2d51eb89831",
      "parents": [
        "382dbf818356cac17c4a5a36f45352c4475f99c4"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Thu Apr 02 08:50:21 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Apr 02 08:50:39 2026 -0700"
      },
      "message": "Update Copybara ownership and contact for safepower_agent.\n\nThe owner_prod_group and contact_email in the copy.bara.sky configuration for safepower_agent are updated to \"safepower-dev-team\" and \"safepower-dev+copybara@google.com\" respectively.\n\nThis will make it so that when safepower-dev-team modifies the copybara config, the copybara will be updated.\n\nPiperOrigin-RevId: 893533589\nChange-Id: Ibd16ce2325d5eed3af3caba05836a85be6b4bdff\n"
    },
    {
      "commit": "382dbf818356cac17c4a5a36f45352c4475f99c4",
      "tree": "16fb574b09d12d5afaf8bc3f11e494a44c3630ad",
      "parents": [
        "e037afd9535b7cf06f846a7e9a19956709b9da29"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Wed Apr 01 20:25:01 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 01 20:25:29 2026 -0700"
      },
      "message": "Add proto matchers to test_util.h and simplify register_actions_bmc_test.\n\nThis change introduces `EqualsProto` and `IgnoringRepeatedFieldOrderingEqualsProto` to `test_util.h` for use in open-source builds. The `register_actions_bmc_test.cc` is updated to use these new matchers, making the assertions on `GetSupportedActionsResponse` more concise and readable. `#ifndef` guards are also added to existing macros in `test_util.h`.\n\nPiperOrigin-RevId: 893249103\nChange-Id: I61cabf6fd5bd6f673d0810c926d138b2c35e2a43\n"
    },
    {
      "commit": "e037afd9535b7cf06f846a7e9a19956709b9da29",
      "tree": "7974bfb5e74c88ffeb39804f3b36a506b13112ca",
      "parents": [
        "9381d32e75daceb727233404998b8a37b076cfd8"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Wed Apr 01 18:23:26 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 01 18:23:48 2026 -0700"
      },
      "message": "Use error_code overloads for std::filesystem functions.\n\nThis change modifies the usage of std::filesystem functions like exists, is_directory, remove, and directory_iterator to use their overloads that accept an std::error_code. This prevents exceptions from being thrown on errors and allows for explicit error handling.\n\nPiperOrigin-RevId: 893209819\nChange-Id: I4e4d704624f1cea817ffa66ae79aa3aac6caefb1\n"
    },
    {
      "commit": "9381d32e75daceb727233404998b8a37b076cfd8",
      "tree": "c40d38214ae9ebf80a70d17362e415c0e482af5e",
      "parents": [
        "c14399b42c639fc3d6a9e4192a313b7cc75f5e1e"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Wed Apr 01 15:23:06 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 01 15:23:30 2026 -0700"
      },
      "message": "gpowerd: Remove upstream_flags from copy.bara.sky\n\nPiperOrigin-RevId: 893140545\nChange-Id: Ided269cef443049c2358d8bceea72d162f8fa392\n"
    },
    {
      "commit": "c14399b42c639fc3d6a9e4192a313b7cc75f5e1e",
      "tree": "28660455adbb8403179bbc35e90676ca373b8c81",
      "parents": [
        "f39d8c0e79beb1bdc465528bcc22af2f682d0794"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Wed Apr 01 10:23:55 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 01 10:24:39 2026 -0700"
      },
      "message": "Add Copybara service config to watch utils proto and datapol scrubbing\n\n* Add a Copybara service config. The deprecated service config fields on piper_sot_to_gerrit are moved into the get_service_config\n* Added datapol scrubbing for utils.proto\n* Added watcher for utils.proto to the service config\n\nAfter this change goes through, I will manually verify that we are indeed watching utils.proto\n\nPiperOrigin-RevId: 892998184\nChange-Id: Iaf4420763a30c007a3c7dffec10f4155cb33f3d1\n"
    },
    {
      "commit": "f39d8c0e79beb1bdc465528bcc22af2f682d0794",
      "tree": "83205537ad866631af818cfa41fa55aad9c35b39",
      "parents": [
        "59b40fef6fd4b39aed51c7da1aa98fe41df2fa19"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Tue Mar 31 13:49:56 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 01 10:24:22 2026 -0700"
      },
      "message": "#S4Mendel Add safepower_logging.proto to Logs ProtoDB and add Datapol annotations\n\nPiperOrigin-RevId: 892522328\nChange-Id: Id5cdaa82e08c4fbd600210291f82b9fde0cf45c8\n"
    },
    {
      "commit": "59b40fef6fd4b39aed51c7da1aa98fe41df2fa19",
      "tree": "04b25ceec5299968088e8b36aacd152a478a20a2",
      "parents": [
        "90f6fc9c06a10bca4148d1d07bdf706d3c816a35"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Mon Mar 30 11:39:34 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Mar 30 11:39:51 2026 -0700"
      },
      "message": "#gpowerd Track actions that are still validating during startup\n\n* In MonitorAction, when an action is still validating,\n  return an unavailable error instead of a not found error\n* Adds a validating_actions_ set to the ActionContextManager\n  and updates loading actions into the context manager accordingly\n\nPiperOrigin-RevId: 891824774\nChange-Id: I4ab2e1ca492cfcc04052c1fb79484058f120454b\n"
    },
    {
      "commit": "90f6fc9c06a10bca4148d1d07bdf706d3c816a35",
      "tree": "f2825a621712830e052e427986f4ceadc205c9b4",
      "parents": [
        "1500eda773295b1c349396d331a2523a38dcf813"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Mon Mar 30 11:36:40 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Mar 30 11:36:59 2026 -0700"
      },
      "message": "Resolve \"@self\" node entity tag in SafePowerAgentConfig.\n\nThis change modifies the BMC action registration process to support using \"SELF\" as a node entity tag in the SafePowerAgentConfig. When an action config specifies \"SELF\", the system will look up the actual entity tag from the OfflineNodeEntityInformation and replace \"SELF\" with it. This allows for more portable configurations.\n\nPiperOrigin-RevId: 891823124\nChange-Id: I12f446a04490b26a38f4d53fcac9c862820d6ffa\n"
    },
    {
      "commit": "1500eda773295b1c349396d331a2523a38dcf813",
      "tree": "04db289648b9c4ac8442a57e3191fb4f8bd0358b",
      "parents": [
        "36ea7890904fb37eb7dd4ffbe57aba62062b957d"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Thu Mar 19 18:27:08 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 19 18:27:26 2026 -0700"
      },
      "message": "Improve gPowerD graceful shutdown on SIGTERM\n\nThis change shuts down the gRPC server before canceling the io context.\n\nTested:\n```\n  blaze test //production/borg_mgmt/node_proxy/safepower/safepower_agent/testing:blaze_gpowerd_instance_test \\\n    --test_filter\u003dBlazeGpowerdInstanceTest.GetSupportedActions \\\n    --runs_per_test\u003d100 \\\n    --test_timeout\u003d100\n```\nPiperOrigin-RevId: 886482055\nChange-Id: Ia42f48d0dd2179de9bda2da73d1a431cd5742627\n"
    },
    {
      "commit": "36ea7890904fb37eb7dd4ffbe57aba62062b957d",
      "tree": "ce1aa520d39ec1c00de0b4238830c63f806665eb",
      "parents": [
        "0c647d41f34d21dd35bf4cb8907dad8475815a17"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Thu Mar 19 15:51:50 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 19 15:52:03 2026 -0700"
      },
      "message": "Make gPowerD remain running while system goes down.\n\nThis change makes it so that gPowerD stays running along HMA and link-mgmt\nafter the root FS has been unmounted.\n\nWe respin safepower_agent right before issuing reboot-cli command. The new\ndaemon will bind to the same port. This is OK as google3 binaries seem to\ncreate sockets with SO_REUSEPORT.\n\nTested: Manually verifed on a IMC node. Console logs:\n\n```\n[ 3041.992272] systemd[1]: Stopped target network-pre.target.\n[ 3042.049022] systemd[1]: mountfsck-post.service: Deactivated successfully.\n[  OK  ] Stopped mountfsck-post.service.\n[ 3042.051340] systemd[1]: Stopped mountfsck-post.service.\n         Stopping udev.service...\n[ 3042.080463] systemd[1]: Stopping udev.service...\n[ 3042.536289] systemd[1]: udev.service: Deactivated successfully.\n[  OK  ] Stopped udev.service.\n[ 3042.540697] systemd[1]: Stopped udev.service.\n[ 3043.616551] sendsigs[25202]: Asking all remaining processes to terminate...\n[ 3043.685383] sendsigs[25186]: done.\nloasd[8840]: LOAS2 credential ID usages:own_credential_id:\u00274179340458098055277:campus-hen,3098491936816949705:campus-hen,3026434342779021769:campus-hen\u0027 check_count:\u0027115,115,115\u0027 number_of_dropped_serials:\u00270\u0027 dropped_serials_usage:\u00270\u0027 in_hwops:\u0027false\u0027\n[ 3055.270278] sendsigs[25186]: Currently running processes (pstree):\n[ 3055.396622] sendsigs[25247]: systemd-+-highlanderd---61*[{highlanderd}]\n[ 3055.397367] sendsigs[25247]:         |-hmad---43*[{hmad}]\n[ 3055.398387] sendsigs[25247]:         |-link_mgmt---42*[{link_mgmt}]\n[ 3055.398973] sendsigs[25247]:         |-sendsigs---pstree\n[ 3055.399277] sendsigs[25247]:         `-systemd-journal\n[ 3055.434988] sendsigs[25248]: Killing all remaining processes...\n[ 3055.435498] sendsigs[25186]: failed.\n[  OK  ] Stopped sendsigs.service.\n[ 3055.439650] systemd[1]: sendsigs.service: Deactivated successfully.\n[ 3055.440547] systemd[1]: Stopped sendsigs.service.\n         Stopping systemd-journald.service...\n[  OK  ] Stopped systemd-journald.service.\n[  OK  ] Reached target shutdown.target.\n         Starting umountnfs.service...\n[  OK  ] Finished umountnfs.service.\n         Starting before-umountfs.service...\n[  OK  ] Finished before-umountfs.service.\n         Starting dioreboot-reboot-wait.service...\n         Starting record-shutdown-end-time.service...\n[  OK  ] Finished dioreboot-reboot-wait.service.\n[  OK  ] Finished record-shutdown-end-time.service.\n         Starting umountroot.service...\n[  OK  ] Finished umountroot.service.\n[  OK  ] Reached target umount.target.\n[  OK  ] Reached target final.target.\n         Starting systemd-reboot.service...\nWill now restart.\nChecking /var/google/session/initscripts/power_cycle to see if we should power-cycle or reboot.\nAttempting power_cycle\nShutdown IMC NVMe controller, wait for tray powercycle\nIMC tray powercycle wait 300 seconds to provide networking to BMC\n[3303.436644] N: imc_2nd_fw_update_perst_counter:159 2ND FW: PERST detected, counter \u003d 7, time since last PERST \u003d 0 us\nPERST# is asserted\n[3303.449022] N: PERST# interrupt took 12322 us. Bandaid: -1, -1. OpMode: 2\n\u003c\u003c\u003c--- Power cycle here ---\u003e\u003e\u003e\n```\n\nPiperOrigin-RevId: 886417126\nChange-Id: I62b1e0796da4288f638e2292dde3d7ed279152be\n"
    },
    {
      "commit": "0c647d41f34d21dd35bf4cb8907dad8475815a17",
      "tree": "c3b6589bf7f9a373aab2258ae5b6d39477e8d245",
      "parents": [
        "e03b22ac99210c954c794150f8ad308a9116f13c"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Tue Mar 17 13:40:39 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 17 13:41:04 2026 -0700"
      },
      "message": "Add an insecure gRPC port to gpowerd.\n\nThis change removes the INSECURE_MODE build flag and instead makes gpowerd listen on both a secure port (using the auth manager) and insecure port, if configured.\n\nThe insecure port will normally be disabled, and blocked by the firewall rules\n\nPiperOrigin-RevId: 885187763\nChange-Id: Ic1f430352a30d21b0ee55d92afad618461650ae4\n"
    },
    {
      "commit": "e03b22ac99210c954c794150f8ad308a9116f13c",
      "tree": "d740e982b74d8de46b7db2b44eb63c011d7adaef",
      "parents": [
        "c282b86be709dcee2c70d8e14f870e5721c6ef6d"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Sat Mar 14 08:21:53 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Mar 14 08:22:15 2026 -0700"
      },
      "message": "Fix 2 IncludeCleaner findings:\n* Used header \"platforms/uhm/node_entities/proto/offline_node_entities.proto.h\" is not included directly (2 times)\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just LGTM and Approve it!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 883658645\nChange-Id: I7c2c3c856fb481cf3b7fbe0bca0ff8de9dc6c092\n"
    },
    {
      "commit": "c282b86be709dcee2c70d8e14f870e5721c6ef6d",
      "tree": "dbc5526df7787b2887759a93adab5c48ebb84e30",
      "parents": [
        "e3a195402a08eaa8379252f1a8d28cf6bbd99a33"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Sat Mar 14 02:57:28 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Mar 14 02:57:44 2026 -0700"
      },
      "message": "Fix 1 IncludeCleaner finding:\n* Used header \"platforms/uhm/node_entities/proto/offline_node_entities.proto.h\" is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just LGTM and Approve it!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 883574469\nChange-Id: I3ddcb0018683d4395e553770c38cc6d2e5498e1e\n"
    },
    {
      "commit": "e3a195402a08eaa8379252f1a8d28cf6bbd99a33",
      "tree": "a1f61af645d38ef2b18e90176cb9cddaa7b7827a",
      "parents": [
        "4d4776bdf13d962a78ad18926b695e91a2f29f33"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Fri Mar 13 21:17:37 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Mar 13 21:17:54 2026 -0700"
      },
      "message": "#gpowerd - Fix compare behavior when some state is missing\n\nWith this change, compare will return Unavailable when any abort condition\u0027s state is missing while we test the condition. Note that if _any_ abort does match, the result will still be an immediate abort.\n\nWhen checking conditions, we will continue waiting when an unavailable state is reported.\n\nThis change also serializes local -\u003e global state updaters: Previously, we had some listeners listening to state changes on both global and local, but now each listener listens to one or the other, and the global state accumulates all local state as well. This prevents unavailable state when the global state doesn\u0027t have the entire local state in it. This isn\u0027t expected during nominal s4v2 actuations, but may happen when we insert events etc. and during tests. The result of this is that we may end up with duplicate events on the global state updater, but this should not cause problems.\n\nThis fix doesn\u0027t correctly address handling situations where the pre-run validation check is unavailable.\n\nPiperOrigin-RevId: 883480038\nChange-Id: Ie7ae92a0c67ea4fc645ae574d9e878f28da02681\n"
    },
    {
      "commit": "4d4776bdf13d962a78ad18926b695e91a2f29f33",
      "tree": "3c8d49d6ec73bc30a63545f873b20832c08323ab",
      "parents": [
        "62f8f64acb4d289048af8c26a4aa15e35a34970e"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Fri Mar 13 10:43:59 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Mar 13 10:44:20 2026 -0700"
      },
      "message": "Flush the output stream before fsync() in persistent storage.\n\nThis ensures that all buffered data is written to the underlying file descriptor before calling fsync() to guarantee persistence.\n\nPiperOrigin-RevId: 883236264\nChange-Id: Ic664ba841165e7de5310f223095fbbdb373e8738\n"
    },
    {
      "commit": "62f8f64acb4d289048af8c26a4aa15e35a34970e",
      "tree": "990150328f8d6f2c7932aadc995814e5b47c737d",
      "parents": [
        "6b4cdb59a06bbeae0901fb8c69c9701f27055734"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Thu Mar 12 16:06:54 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 12 16:07:12 2026 -0700"
      },
      "message": "Refactor Boost.Asio usage in safepower_agent/bmc.\n\nThis CL updates several Boost.Asio calls to use more modern or standard APIs, including `boost::asio::post`, `boost::asio::ip::make_address`, and `boost::asio::basic_waitable_timer::expires_after`.\n\nPiperOrigin-RevId: 882826842\nChange-Id: I7afe29ecd1e87a1b2b26431b42e35b9fdd84d746\n"
    },
    {
      "commit": "6b4cdb59a06bbeae0901fb8c69c9701f27055734",
      "tree": "221972c04f05854e82fc21c626d28dc2b1670bbe",
      "parents": [
        "72c353d43ab8815c7af22e9d3f13dff70dcb2bc5"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Thu Mar 12 13:07:08 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 12 13:07:25 2026 -0700"
      },
      "message": "Remove redundant boost/asio/io_service.hpp includes.\n\nThese files already include boost/asio/io_context.hpp, which is the modern equivalent of io_service.hpp. The io_service.hpp header is no longer necessary.\n\nPiperOrigin-RevId: 882740071\nChange-Id: Ifcafb8c0b61a430c7578157ade50bde045f1630c\n"
    },
    {
      "commit": "72c353d43ab8815c7af22e9d3f13dff70dcb2bc5",
      "tree": "63c4a997a4ad691ae8bfb926183d330d4c6a11bf",
      "parents": [
        "a7cbc5788159fdcd11c4617ae571602b38775e25"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Wed Mar 11 00:12:21 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Mar 11 00:14:06 2026 -0700"
      },
      "message": "Fix 1 IncludeCleaner finding:\n* Used header \"platforms/uhm/node_entities/proto/offline_node_entities.proto.h\" is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just LGTM and Approve it!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 881835657\nChange-Id: I1bd4e0e63139a6aceaf7d27605e01181d98656cb\n"
    },
    {
      "commit": "a7cbc5788159fdcd11c4617ae571602b38775e25",
      "tree": "ef97cff6515fdb3904fffe3d373da4585e3d138c",
      "parents": [
        "bf974681d67e96ecae6bc15e2994044951735a69"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Tue Mar 10 20:36:41 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 10 20:36:59 2026 -0700"
      },
      "message": "Fix 3 IncludeCleaner findings:\n* Used header \"platforms/uhm/node_entities/proto/offline_node_entities.proto.h\" is not included directly (2 times)\n* Used header \"platforms/uhm/node_entities/proto/resolved_entities.proto.h\" is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just LGTM and Approve it!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 881759308\nChange-Id: I5425f3d433bcf143a790e4ae17085de46bab6355\n"
    },
    {
      "commit": "bf974681d67e96ecae6bc15e2994044951735a69",
      "tree": "fcc0f4ffe90dc362038b272e24b82e1461b531de",
      "parents": [
        "eedb6db01a4af2e6b325cc5b94716b440e76ba42"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Tue Mar 10 14:46:26 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 10 14:46:42 2026 -0700"
      },
      "message": "Lightweight testing: Add gRPC client creation\n\nThis change introduces a method to create a gRPC client stub for the gpowerd instance launched in tests. A new test case is added to verify the gRPC connection by calling the GetSupportedActions RPC. The main function of gpowerd is also updated to use InitGoogle for google3 builds.\n\nPiperOrigin-RevId: 881632597\nChange-Id: Iee756fe057c3aa76e1d695c135d93059ff12a183\n"
    },
    {
      "commit": "eedb6db01a4af2e6b325cc5b94716b440e76ba42",
      "tree": "a5aaaf0fe42bb7a211c97721de46ded3547d34a4",
      "parents": [
        "97ad49f85f7415dc443051f058a158ebcfb0c761"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Thu Mar 05 20:24:17 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 05 20:24:37 2026 -0800"
      },
      "message": "Reduce log spam in safepower_agent BMC modules.\n\nChange frequent error logs to VLOG(1) or LOG_EVERY_N_SEC to avoid excessive logging, especially for transient or expected errors during BMC interactions.\n\nPiperOrigin-RevId: 879390866\nChange-Id: I46f9dc7e44b75e4eba712c0362244a5f7aa1c6ca\n"
    },
    {
      "commit": "97ad49f85f7415dc443051f058a158ebcfb0c761",
      "tree": "7612b9daa830e06ffa6442aa9cb8a0ca329c5398",
      "parents": [
        "4b20e95e3a9344684a57ef8a4987bf37eac405aa"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Thu Mar 05 19:41:00 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 05 19:41:17 2026 -0800"
      },
      "message": "Stop printing all task when cancel fails\n\nWhen I wrote this, I was expecting callers to only cancel task that exist. However, there is a now we use this to cancel a potential task every second. So printing the list of task does not have any value.\n\nPiperOrigin-RevId: 879375713\nChange-Id: Ib6093b50af55b2c29e5f7f9ad2a1fa9d304fd549\n"
    },
    {
      "commit": "4b20e95e3a9344684a57ef8a4987bf37eac405aa",
      "tree": "23c6d992ccbdd1dea6837c8f4f5808ec9d1c2b62",
      "parents": [
        "c72638c9e24b54293349ff2349662922247af7d0"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Thu Mar 05 19:19:29 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 05 19:19:46 2026 -0800"
      },
      "message": "Strip whitespace from BMC health check responses.\n\nThe BMC health check now strips ASCII whitespace from the received response before comparing it to the expected value. Additionally, all successful health check responses are logged periodically for debugging purposes.\n\nPiperOrigin-RevId: 879367415\nChange-Id: I2c44a918a34b8a556aef899a396a174946d6355f\n"
    },
    {
      "commit": "c72638c9e24b54293349ff2349662922247af7d0",
      "tree": "70b429dba0a28cad3274f5063babfd03c98d5d40",
      "parents": [
        "a11c801e08d58c551cb0e2d7342928ad0103bcdc"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Thu Mar 05 19:01:01 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 05 19:01:19 2026 -0800"
      },
      "message": "prevent name collision: Use prefix at construction time\n\nThis change introduces a new member variable in `RemoteStateMonitor`, and the both sub classes populate it differently when they constructed the base class\n\nPiperOrigin-RevId: 879362207\nChange-Id: If454c0b25dab69b3ede1b563762b5ee6278c7685\n"
    },
    {
      "commit": "a11c801e08d58c551cb0e2d7342928ad0103bcdc",
      "tree": "f5020fa5afbf23392ac16e8a8380995a30362df3",
      "parents": [
        "4f3a34f1a19435359bf9c212011e2056aa4ffb0b"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Tue Feb 24 10:39:48 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Feb 24 10:40:05 2026 -0800"
      },
      "message": "#gpowerd BMC address lookup to separate explicit and prefix-based resolution\n\nPiperOrigin-RevId: 874687420\nChange-Id: Ib1175c2d148fa01b00dfec3d5a631817ad5ae67e\n"
    },
    {
      "commit": "4f3a34f1a19435359bf9c212011e2056aa4ffb0b",
      "tree": "487f00b3bcc6dc7d9a83a1baf80397a06d6537ab",
      "parents": [
        "a328331e7d0db5da6da2eb84eb212ef1515b8991"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Mon Feb 23 10:54:17 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Feb 23 10:54:39 2026 -0800"
      },
      "message": "Make gRPC port configurable in gpowerd\n\nPiperOrigin-RevId: 874156510\nChange-Id: I690621580b80a6f086710b57f34da0a7a3867c36\n"
    },
    {
      "commit": "a328331e7d0db5da6da2eb84eb212ef1515b8991",
      "tree": "197ef639a33e39cef34482a7849beac5f66d7e17",
      "parents": [
        "885d5ce77b78f340a1959721f880a27b02bee7dd"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Thu Feb 19 11:25:17 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Feb 19 11:25:38 2026 -0800"
      },
      "message": "Prioritize explicit IPv6 addresses from network interfaces in AddressLookup.\n\nThe AddressLookup::Resolve method now checks the network_interfaces field in the ResolvedNodeEntity. If an IPv6 address is explicitly provided in any network interface, that address is used. Otherwise, it falls back to deriving the address from the machine\u0027s IPv6 prefix and the node\u0027s ip_low64.\n\nPiperOrigin-RevId: 872486982\nChange-Id: I7996cd2a0eeabe289f17b84bdf36f5b416de24c6\n"
    },
    {
      "commit": "885d5ce77b78f340a1959721f880a27b02bee7dd",
      "tree": "7c6e076ad2d5f7915131c308f27f0a8b3aae1708",
      "parents": [
        "b7d2a74b19a0fa4bb007e43e8c4e63460d952c9e"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Wed Feb 18 12:11:15 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Feb 18 12:11:45 2026 -0800"
      },
      "message": "Allow configurable offline node entities path in safepower agent\n\nPiperOrigin-RevId: 871984315\nChange-Id: Ifc7419590e1a93744e9ecf70e43e21435d4d37b7\n"
    },
    {
      "commit": "b7d2a74b19a0fa4bb007e43e8c4e63460d952c9e",
      "tree": "df71df4574c44039567dbe65b2b66c13e04cc1a5",
      "parents": [
        "450b079d214f16a1d14dbfe7c62c1f5ff9665e48"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Sun Feb 08 05:29:45 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Feb 08 05:30:02 2026 -0800"
      },
      "message": "Fix 1 ViewTypeMigrations finding:\n* This is a change required to migrate function parameters to absl::string_view from const std::string\u0026\n\nSee go/view-types-migrations for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just LGTM and Approve it!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/string-view-params-bug for category ViewTypeMigrations if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #string-view-params\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 867184749\nChange-Id: Id4753d2a2bd52e31bc07f399f262367e2c1dcef3\n"
    },
    {
      "commit": "450b079d214f16a1d14dbfe7c62c1f5ff9665e48",
      "tree": "c602f9285c06e7bb0155ac8eb2af330d17d1b537",
      "parents": [
        "adec5197c37589dc3e13b9f81a34ec5a6f67505b"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Thu Feb 05 10:46:48 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Feb 05 10:47:14 2026 -0800"
      },
      "message": "Make RemoteStateMonitor and children non-movable\n\nThis turns the runtime error of moving while a monitor has started into a build time error instead.\n\nAs a side effect, this fixes tsan errors on the move-ping-state-monitor tests that are no longer neeeded.\n\nTested 100 runs: http://sponge2/a4c5b2c0-9bb0-416f-80b3-0920813c0246\n\nPiperOrigin-RevId: 866018932\nChange-Id: I526b0884a3fe5e6ff8925f8d78e45eb9e3f1681e\n"
    },
    {
      "commit": "adec5197c37589dc3e13b9f81a34ec5a6f67505b",
      "tree": "ad2e78bd08f0c1536a0c1295bd8ac7092ef248d0",
      "parents": [
        "b42bfd80520db367376588648e762596c5925cba"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Wed Feb 04 23:48:19 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Feb 04 23:48:43 2026 -0800"
      },
      "message": "Fix 1 ViewTypeMigrations finding:\n* This is a change required to migrate function parameters to absl::string_view from const std::string\u0026\n\nSee go/view-types-migrations for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just LGTM and Approve it!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/string-view-params-bug for category ViewTypeMigrations if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #string-view-params\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 865777659\nChange-Id: Ia71be327fc7ce32b2c1b6b2cfe62a88d3ffeb3c4\n"
    },
    {
      "commit": "b42bfd80520db367376588648e762596c5925cba",
      "tree": "548626279cdce53c3d8d53e6e40a40607ca435a1",
      "parents": [
        "f003e9781c47a16ce7e477ce4d8dbac464a5d7f5"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Wed Feb 04 13:08:36 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Feb 04 13:09:27 2026 -0800"
      },
      "message": "Add support for gpowerd-based boot count in safepower agent BMC.\n\nThis change introduces a new configuration option to allow the safepower agent on BMC to use an internal boot counter managed by gpowerd, instead of querying Redfish. The boot count source is now configurable via a oneof in the agent config proto.\n\nPiperOrigin-RevId: 865545321\nChange-Id: I9bb33ef4798e789a5bb7d44f93152e42683e060c\n"
    },
    {
      "commit": "f003e9781c47a16ce7e477ce4d8dbac464a5d7f5",
      "tree": "93bbf2516491f2eb1dadffb5ec16946e27494885",
      "parents": [
        "d437b682839ba7c012d4d12906992919c06b5d0a"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Tue Feb 03 12:31:23 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Feb 03 12:31:55 2026 -0800"
      },
      "message": "Return correct error status in persistent storage recovery\n\n* explicitly use `original_failing_status`\n* also add colon before status in error message\n\nThis was suggested from the AI review in the previous cl.\nI modified the comment for clarity once I understood the issue.\n\nPiperOrigin-RevId: 864995835\nChange-Id: Ia1ae5645e5f8ab7995103e120e075d9d50d1b63a\n"
    },
    {
      "commit": "d437b682839ba7c012d4d12906992919c06b5d0a",
      "tree": "764fc7cf318192586964fd62697acbc205f36f5d",
      "parents": [
        "713c15cc8b1f84ab7cf134d20488528137f73af5"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Thu Jan 29 20:03:07 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jan 30 11:29:33 2026 -0800"
      },
      "message": "#S4Router Add the redirect logic to redirect traffic to the new blade target.\n\nRedirection logic:\n1. Client first sends the req (use_new_target\u003dfalse) to S4\n2. S4 checks the use_new_target field and mendel flag\n  If use_new_target\u003d\u003dfalse and flag\u003d\u003dtrue, S4 returns a resp (should_redirect\u003dtrue)\n3. Client checks the should_redirect field\n  If true, client sends another req (use_new_target\u003dtrue) to S4\n4. S4 gets the second request and calls the router\n\nPiperOrigin-RevId: 863022690\nChange-Id: I35e3d7e533a8b48788542f96ef45348cd62ebfb8\n"
    },
    {
      "commit": "713c15cc8b1f84ab7cf134d20488528137f73af5",
      "tree": "aa19fc8b930c90a55dada0295f6f513b9c331586",
      "parents": [
        "abcba22b0cff39cd9d88cd289c5391e4ea14ab45"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Thu Jan 29 15:34:41 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 29 15:35:01 2026 -0800"
      },
      "message": "Improve error logging for persistent storage read failures.\n\nThe error message now distinguishes between failures to read the SavedActions proto and failures to compress it, logging the specific status for each case.\n\nPiperOrigin-RevId: 862929393\nChange-Id: I97edd44d3526bb5b870d2969e475fa8f5e7131f2\n"
    },
    {
      "commit": "abcba22b0cff39cd9d88cd289c5391e4ea14ab45",
      "tree": "70460a01e3348ddf71351612c862ae67b3f1bc6b",
      "parents": [
        "ccc1d0f5eb50392a0b126a9093956f2c016bfb23"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Thu Jan 29 14:20:04 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 29 14:20:39 2026 -0800"
      },
      "message": "Create parent directories before replacing symlink in AuthFileHelper.\n\nThe ReplaceSymlink function now ensures that the parent directories of the symlink path exist before attempting to create or update the symlink.\n\nPiperOrigin-RevId: 862898474\nChange-Id: I16b0d3bc26a0e1dd2b87a3a987c37c7781db729a\n"
    },
    {
      "commit": "ccc1d0f5eb50392a0b126a9093956f2c016bfb23",
      "tree": "c122bf3341da435ce6c0cd08a0f60b2bc8e1c2bb",
      "parents": [
        "eec154f8f1dddedbfe0ec063b3e2090572cfec92"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Thu Jan 29 12:17:12 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 29 12:17:38 2026 -0800"
      },
      "message": "Fix: Use a constant name for the LOAS3 cert watcher.\n\nThe periodic call for watching the LOAS3 certificate now uses the dedicated constant `kWatcherForLoas3Cert` as its identifier in the scheduler, rather than the certificate path. This improves clarity and consistency.\n\nAlso remove unused const `kUnprovisionedBMC`\n\nPiperOrigin-RevId: 862845107\nChange-Id: I8759cde45e2a1e7d682f0f3013d66ffc2790ef38\n"
    },
    {
      "commit": "eec154f8f1dddedbfe0ec063b3e2090572cfec92",
      "tree": "669039202a9652a89d0d709c3058df0763e9a5e2",
      "parents": [
        "157b542f5712b592d23a914b2652eabbad6357a5"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Wed Jan 28 08:04:20 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jan 28 08:04:41 2026 -0800"
      },
      "message": "Log only condensed version of offline node entities in gpowerd.\n\nThis is to help reduce log spam.\n\n* Only log key fields from node entities proto\n* The full proto is still logged when VLOG(1) is enabled\n\nAlso, put SetupChannelParams in an anonymous namespace\n\nPiperOrigin-RevId: 862239089\nChange-Id: Ieb0e760c090a2c3146b8e30cfe5b1eaf81a86535\n"
    },
    {
      "commit": "157b542f5712b592d23a914b2652eabbad6357a5",
      "tree": "6f4fda3acb8bc484a04007626bdff0b7def6cab2",
      "parents": [
        "0a6ee13c942cb1e7db46933c53d22c1d48c2769d"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Thu Jan 22 17:53:22 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 22 17:53:58 2026 -0800"
      },
      "message": "Add retry logic for BMC state monitor initialization.\n\nThis change wraps the initialization of the ICMP ping monitor and the bootnum loader in a retry mechanism using the DaemonContext scheduler. This ensures that if these components fail to initialize on the first attempt, they will be retried periodically until successful.\n\nPiperOrigin-RevId: 859849388\nChange-Id: If77601a3725bcc72244b8c834f0f6c7b45ccab70\n"
    },
    {
      "commit": "0a6ee13c942cb1e7db46933c53d22c1d48c2769d",
      "tree": "8c0887cf26c7b2cb0cb7e3bb5b7c58f154e62cd2",
      "parents": [
        "3289a48ed00dc25f02beee7217e6714b97d28626"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Thu Jan 15 10:31:52 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 15 10:32:10 2026 -0800"
      },
      "message": "Add debug dumping to safepower_agent.\n\nThis change introduces methods to dump the state of running actions and system states. A SIGUSR1 signal handler is added to gpowerd to trigger a debug dump to `/tmp/gpowerd_dbg`, including details from ActionContextManager and the system state updaters.\n\nexample usage:\nkill -10 $(pidof gpowerd)\nhttps://paste.googleplex.com/5914979863756800?raw\n\nPiperOrigin-RevId: 856718698\nChange-Id: I9f8b70fac45a4160b8404f951ff7ff0536541b9f\n"
    },
    {
      "commit": "3289a48ed00dc25f02beee7217e6714b97d28626",
      "tree": "2afa801179941805842d544dbc8be56830334242",
      "parents": [
        "f366c2582b5f278be077ade3143cd79dc7aa2de6"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Wed Jan 14 12:27:06 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jan 14 12:27:33 2026 -0800"
      },
      "message": "#gpowerd Remove callback in address lookup\n\n* The address lookup logic is refactored from a single asynchronous function to a class\n* The state monitor does not call `getifaddrs` multiple times\n* put address lookup helper methods in an anonymous namespace\n\nPiperOrigin-RevId: 856318888\nChange-Id: Ib034dbac9368a984d3d511d5764a0465553fe282\n"
    },
    {
      "commit": "f366c2582b5f278be077ade3143cd79dc7aa2de6",
      "tree": "61d9be7674ace17acc7653102c78aaa9e585eb04",
      "parents": [
        "6ea9fe522b155b293faf128d2e4d5adceda11ae3"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Wed Jan 14 11:04:58 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jan 14 11:05:29 2026 -0800"
      },
      "message": "Move copy.bara.sky to the root directory.\n\n* This cleans up the Gerrit repo by not having google3/.../\n* We still trigger CI when copy.bara.sky is updated\n\nPiperOrigin-RevId: 856284652\nChange-Id: I0f0692091d9134c2aec73e220408239f786f7a6a\n"
    },
    {
      "commit": "6ea9fe522b155b293faf128d2e4d5adceda11ae3",
      "tree": "9025cbb72852ae86819fdb88010f9cb8aa2c9bd4",
      "parents": [
        "a5fd73eee137b8e85079193aa5da79357330773b"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Mon Jan 12 22:34:31 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jan 12 22:35:00 2026 -0800"
      },
      "message": "Fix 1 IncludeCleaner finding:\n* Used header \"production/borg_mgmt/node_proxy/safepower/safepower_agent/proto/safepower_agent.proto.h\" is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just LGTM and Approve it!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 855535101\nChange-Id: I4546d8f0f4433ae43ece9f2432559f83ea4ca9ca\n"
    },
    {
      "commit": "a5fd73eee137b8e85079193aa5da79357330773b",
      "tree": "9d8511753e3b43efec764994b299fb9aa3dc5cff",
      "parents": [
        "de1631771373e12a3804dfcbd2c632912d2c1b11"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Mon Jan 12 15:30:59 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jan 12 15:31:30 2026 -0800"
      },
      "message": "Add a local testing workflow to safepower_agent\u0027s copybara config.\n\nThis new `test_local` workflow allows verifying the copybara transformations by running them on local files and outputting to a temporary directory.\n\nPiperOrigin-RevId: 855409651\nChange-Id: I40de0fd2ae06873b917724d8fe05eb90a6847e47\n"
    },
    {
      "commit": "de1631771373e12a3804dfcbd2c632912d2c1b11",
      "tree": "a5701bd679d67c9411f02ac5f87835a51393ff24",
      "parents": [
        "4204d912560dbd1f10a8c769c123f2b3f92fe0ac"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Fri Jan 09 13:00:40 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jan 09 13:01:25 2026 -0800"
      },
      "message": "#s4v2 - Use RPC security policy in safepower agent\n\nAlso removes the simple authz scheme added previously from both the scaffolding and regular grpc implementations.\n\nNote that `MonitorAction` was previously considered privileged, but this was incorrect, and it is now accessible by all users.\n\nThis is a part 3 of a 3 part change to use RPCSp in the highlanderd node agent:\n\n1. ~~Refactor to move functional code~~\n2. ~~Use a scaffolding instead of a bare gRPC service, but continue to use the existing authz system.~~\n3. **Switch to RpcSp in the scaffolding service, and remove the old authz.**\n\nPiperOrigin-RevId: 854313861\nChange-Id: Ida023b112090ace4f4b4a7a19a6470827d355d41\n"
    },
    {
      "commit": "4204d912560dbd1f10a8c769c123f2b3f92fe0ac",
      "tree": "490af4dda69b6d31ae0de9060e4b425aa495b728",
      "parents": [
        "ddf71f581843cdc643e98c55d29755020a754005"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Thu Jan 08 18:33:16 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 08 18:33:47 2026 -0800"
      },
      "message": "Refactor address lookup on BMC to use getifaddrs().\n\nThis change replaces the reliance on parsing the output of the `ip` command via boost::process with a direct call to `getifaddrs`. This simplifies the implementation, removes the dependency on Boost, and improves robustness by using a structured API rather than text parsing. Tests have been updated to use a mockable AddressResolver interface.\n\nPiperOrigin-RevId: 853961849\nChange-Id: I3bb4b1493b99220ecccb6212418cc11826cdcd60\n"
    },
    {
      "commit": "ddf71f581843cdc643e98c55d29755020a754005",
      "tree": "9817b5c9f7ac9abc6ba4089698e32073b5b6e584",
      "parents": [
        "45f1bff70da64254cd1d8852662dff6196a4b594"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Thu Jan 08 15:33:02 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 08 15:33:33 2026 -0800"
      },
      "message": "#s4v2 - Refactor SafepowerLocalAgentImpl to separate functional code from service\n\nThis is a part 1 of a 3 part change to use RPCSp in the highlanderd node agent:\n1. **Refactor to move functional code**\n2. Use a scaffolding instead of a bare gRPC service, but continue to use the existing authz system.\n3. Switch to RpcSp in the scaffolding service, and remove the old authz.\n\nPiperOrigin-RevId: 853908380\nChange-Id: I413583e83cce680ddabe90f8889790af2f41033b\n"
    },
    {
      "commit": "45f1bff70da64254cd1d8852662dff6196a4b594",
      "tree": "8c6ffed139ed1c7ff3b737a9d671d461b5729925",
      "parents": [
        "a87bd0e4bca388d643fd287d1f5720b1cdd8cc0a"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Thu Jan 08 14:35:50 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 08 14:36:12 2026 -0800"
      },
      "message": "#s4v2 - Implement internal boot counter\n\nThis implementation will save the current boot id from the kernel and the current boot count in persistent storage. If the id has changed, it will increment the boot counter and update persistent storage. If it has not changed, it will just use the counter it read.\n\nTested:\nVerified that this works on an machine that doesn\u0027t have a boot counter file.\nPiperOrigin-RevId: 853888290\nChange-Id: I3933d617886021fa784af24a73fae2a5beb21837\n"
    },
    {
      "commit": "a87bd0e4bca388d643fd287d1f5720b1cdd8cc0a",
      "tree": "472356b5adf156854901ac322a26d8077519979b",
      "parents": [
        "3107f419c11f0671dd7a434ff56f7159b064d034"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Thu Jan 08 11:44:13 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jan 08 11:44:44 2026 -0800"
      },
      "message": "#gpowerd - Only return daemon unhealthy if healthz checks fail for some time\n\nThe original implementation will immediately set `healthy\u003dfalse` if healthz is not ok, but to actually use this state to trigger power operations, we need to wait for 10s before triggering the actuation. With this change, the health check needs to fail repeatedly for 10s (configurable) before the state is updated.\n\nPiperOrigin-RevId: 853827136\nChange-Id: Idb1fdef7e591d6bdecea82608cb104e600d2b6b0\n"
    },
    {
      "commit": "3107f419c11f0671dd7a434ff56f7159b064d034",
      "tree": "727888586eab32820527431ddab7120f8fc5597d",
      "parents": [
        "d99db74a960789d743dc53f4313103944fa54de9"
      ],
      "author": {
        "name": "John Broadbent",
        "email": "jebr@google.com",
        "time": "Wed Jan 07 15:14:47 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jan 07 15:15:19 2026 -0800"
      },
      "message": "Implement dynamic certificate loading for gpowerd.\n\nThis change introduces a mechanism to dynamically load LOAS3 or self-signed certificates for gpowerd. A symlink is used to point to either a self-signed certificate (initially) or the LOAS3 certificate once it\u0027s available. A periodic timer checks for the LOAS3 certificate and updates the symlink accordingly.\n\nPiperOrigin-RevId: 853431821\nChange-Id: I6b7fb9dc2d2e23809265e75765e4a43a9f303553\n"
    },
    {
      "commit": "d99db74a960789d743dc53f4313103944fa54de9",
      "tree": "585ee057966d06b27217b913548a41a521cc851f",
      "parents": [
        "27632feef4d6855d38261cccc6b77a724acbf202"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Tue Jan 06 16:42:56 2026 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jan 06 16:43:22 2026 -0800"
      },
      "message": "Scrub WANT_LGTM and READABILITY_MENTOR_ASSIGNEE from commit messages.\n\nAdd scrubbers to remove internal tags like WANT_LGTM and READABILITY_MENTOR_ASSIGNEE from commit messages when exporting to Gerrit.\n\nThis should help with C++ readability reviews. See post-submit comments to cl/846910000\n\nTested with `copybara validate` and `copybara production/borg_mgmt/node_proxy/safepower/safepower_agent/copy.bara.sky gpowerd_presubmit_piper_to_gerrit 852972239 --dry-run --ignore-noop`\n\nPiperOrigin-RevId: 852985641\nChange-Id: I07739a331ac737e8c97c89fda1fd5b3814dee555\n"
    },
    {
      "commit": "27632feef4d6855d38261cccc6b77a724acbf202",
      "tree": "c517f72a5c039a26e4d81720e4e7b082a04396c1",
      "parents": [
        "3f5f06a7b550d5cd45b80b27c9938062353bdb76"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Sat Dec 27 14:42:44 2025 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Dec 27 14:43:13 2025 -0800"
      },
      "message": "Fix 1 ViewTypeMigrations finding:\n* This is a change required to migrate proto string accessors to return absl::string_view instead of const std::string\u0026.  See ​go/proto-string-view-accessors-cpp-lsc for more details.\n\nSee go/view-types-migrations for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just LGTM and Approve it!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/string-view-params-bug for category ViewTypeMigrations if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #string-view-accessors\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 849551435\nChange-Id: I6abfa086854eeaf590542bc49ecd17a3dcc041a5\n"
    },
    {
      "commit": "3f5f06a7b550d5cd45b80b27c9938062353bdb76",
      "tree": "f6bcb34768f9bc938c2461503fbaa0e7ffdc08b4",
      "parents": [
        "efe0f413ec38f46eedeb021a2bd1f86a0298809d"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Thu Dec 25 22:03:06 2025 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Dec 25 22:03:43 2025 -0800"
      },
      "message": "Fix 1 IncludeCleaner finding:\n* Used header \"production/borg_mgmt/node_proxy/safepower/safepower_agent/proto/safepower_agent_config.proto.h\" is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just LGTM and Approve it!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 849038689\nChange-Id: I61c3ce722596e49de6352348faf14ca285b9cb0b\n"
    },
    {
      "commit": "efe0f413ec38f46eedeb021a2bd1f86a0298809d",
      "tree": "7e7d278c7212f7d954410cd565221339300f7b4b",
      "parents": [
        "de95480e9270bc3e47feeaae1c54a531d68a2d3c"
      ],
      "author": {
        "name": "gBMC Team",
        "email": "gbmc-core@google.com",
        "time": "Thu Dec 25 00:08:08 2025 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Dec 25 00:09:23 2025 -0800"
      },
      "message": "Fix 3 IncludeCleaner findings:\n* Used header \"platforms/uhm/node_entities/proto/offline_node_entities.proto.h\" is not included directly\n* Used header \"production/borg_mgmt/node_proxy/safepower/safepower_agent/flight_record.h\" is not included directly\n* Used header \"third_party/absl/strings/string_view.h\" is not included directly\n\n ⚠️ Did submitting this CL break you?\n Click the \"Roll back\" button above, write a description of the problem (ideally with supporting logs/dashboards/screenshots) and a human global approver will be assigned to review the generated rollback CL.\n* See go/include-cleaner for more information about the tool that generated this change.\n* The global approvers for this change category are currently piloting the go/reviewbot tool so you may see global-review-bot-composite as the approver. Please contact code-health-team@google.com if you have any questions/concerns about the approval process.\n\nSee go/include-cleaner-lsc-approval for more information on why you\u0027ve received this change and why it is important.\n\nThis CL looks good? Just LGTM and Approve it!\nThis CL doesn’t look good? This is what you can do:\n* Revert this CL, by replying \"REVERT: \u003cprovide reason\u003e\"\n* File a bug under go/include-cleaner-bug for category IncludeCleaner if there\u0027s an issue with the CL content.\n* File a bug under go/rosie-bug if there\u0027s an issue with how the CL was managed.\n* For all other issues such as the formatting of the CL, please file a bug under\ngo/clrobot-bug.\n* Revert this CL and not get a CL that cleans up these paths in the future by\nreplying \"BLOCKLIST: \u003cprovide reason\u003e\". This is not reversible! We recommend to\nopt out the respective paths in your CL Robot configuration instead:\ngo/clrobot-opt-out.\n\nThis CL was generated by CL Robot - a tool that cleans up code findings\n(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/METADATA by\nfollowing go/clrobot#how-to-opt-in. Anything wrong with the signup? File a bug\nat go/clrobot-bug.\n\n#clrobot #MissingInclude\n\nTested:\n    Local presubmit tests passed.\nPiperOrigin-RevId: 848764968\nChange-Id: I8c425933020dcc85e95da4ff44ca172d128ec78f\n"
    },
    {
      "commit": "de95480e9270bc3e47feeaae1c54a531d68a2d3c",
      "tree": "6e1b7d39efddbab53193d09cdd961ecb2891c329",
      "parents": [
        "d5e6b46be3463deaa5953bb5e28f7ed81056ef56"
      ],
      "author": {
        "name": "Daniel Bourgeois",
        "email": "dcbourgeois@google.com",
        "time": "Fri Dec 19 16:41:43 2025 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Dec 19 16:42:08 2025 -0800"
      },
      "message": "Add FlightRecordWrapper for Safepower Agent\n\nThis change introduces a flight record wrapper class around a flight record request proto message.\n\nThe benefits are (1) it is clear what fields the flight record request is used, (2) the hashing and equality code is stored in the same spot (this change removes duplicate hashing logic) and (3) we can control how this is printed out--it is nicer to have flight records show on one line in logs.\n\nPiperOrigin-RevId: 846910000\nChange-Id: I50bac67d51492b8259f14a096880b7a41904b6e4\n"
    },
    {
      "commit": "d5e6b46be3463deaa5953bb5e28f7ed81056ef56",
      "tree": "2e0aee4e7ce141c77a9b6529d9cdb1b29a30ede1",
      "parents": [
        "62c0e482ba36ac28a53a0fe7d6084bdcae4949bb"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Tue Dec 16 17:36:34 2025 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Dec 16 17:37:01 2025 -0800"
      },
      "message": "#gpowerd - Add health state monitor for services on IMCs based on the config\n\nPiperOrigin-RevId: 845501009\nChange-Id: Id7e676107ba6d18a443359de15ffa32c30cd677e\n"
    },
    {
      "commit": "62c0e482ba36ac28a53a0fe7d6084bdcae4949bb",
      "tree": "9bec6e157071646c65bbd222276c189fc07f616b",
      "parents": [
        "0413994e3e0be4a2eaac723a9aad4f239af93c12"
      ],
      "author": {
        "name": "Shounak Mitra",
        "email": "shounak@google.com",
        "time": "Tue Dec 16 16:11:31 2025 -0800"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Dec 16 16:12:03 2025 -0800"
      },
      "message": "#gpowerd - Add a ping implementation that polls healthz\n\nThis can be enabled in addition to the ICMP ping, and exports the health using `DeamonState` for the target node.\n\nPiperOrigin-RevId: 845472905\nChange-Id: Ib34e0a39c60e28ffae8309fb52cc8ec70d916bef\n"
    }
  ],
  "next": "0413994e3e0be4a2eaac723a9aad4f239af93c12"
}
