)]}'
{
  "commit": "8041874e494c2811b138971e542c74d1883beb6a",
  "tree": "1af9eb03b84c2e500361d957f7a05f1180226957",
  "parents": [
    "c96ea2dd61ee21e10c489b3a6a4d58bc8056cb81"
  ],
  "author": {
    "name": "David Fang",
    "email": "fangism@google.com",
    "time": "Thu Oct 22 13:41:32 2026 -0700"
  },
  "committer": {
    "name": "fuchsia-internal-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "fuchsia-internal-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu Oct 22 13:41:32 2026 -0700"
  },
  "message": "[buildminder] Add unsuccessful actions reporting and log middle-truncation\n\nSupport gathering, partitioning, and exporting detailed failure reports\nacross multi-invocation builds in both headless and interactive modes:\n\n* buildstate: Enrich ActionMetadata with InvocationId and ToolName,\n  propagating parent invocation identity and backfilling actions\n  declared prior to invocation declaration attributes.\n* report: Implement TruncateMiddle to middle-truncate action\n  stdout/stderr using a Head (24KB) + Tail (40KB) policy with\n  line-boundary snapping, UTF-8 rune safety, ANSI code reset, inflation\n  prevention, and a clear truncation sentinel.\n* report: Implement GenerateUnsuccessfulActionsReport, partitioning\n  unsuccessful actions into failed_actions, cancelled_actions, and\n  interrupted_actions. Add JSON export, shell-quoted command formatting,\n  and reverse-scanned terminal summary formatting.\n* buildminder: Add --unsuccessful_actions_report\u003d\u003cpath\u003e and\n  --print_unsuccessful_actions flags and wire automatic report\n  generation/printing upon process teardown.\n* buildminder-wrap: Support --unsuccessful-actions-report and propagate\n  via BUILDMINDER_UNSUCCESSFUL_ACTIONS_REPORT.\n* tests: Add unit tests for report generation, line-snapped truncation,\n  flag parsing, and headless execution.\n* tests: Add ninja_clang_syntax_error_failure_report_test and\n  bazel_fail_failure_report_test end-to-end integration tests verifying\n  report schema, failed status, and log capture.\n\nBug: 573624782\nChange-Id: Ib95da7bbadf5c53bfddd0cfd20ca3f6393decca8\nReviewed-on: https://fuchsia-review.googlesource.com/c/rsclient/+/1906465\nReviewed-by: Jay Zhuang \u003cjayzhuang@google.com\u003e\nPresubmit-Verified: fuchsia-internal-scoped@luci-project-accounts.iam.gserviceaccount.com \u003cfuchsia-internal-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nCommit-Queue: David Fang \u003cfangism@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dffe14cbf1238dbf9453f043500668c63eb0ab2f",
      "old_mode": 33261,
      "old_path": "cmd/buildminder/buildminder-wrap.sh",
      "new_id": "5fc907ecc6e87e3088127d8f08df97def1e7e31f",
      "new_mode": 33261,
      "new_path": "cmd/buildminder/buildminder-wrap.sh"
    },
    {
      "type": "modify",
      "old_id": "c773fef35ef7a826d439ff4da0dc2e81b2b2335a",
      "old_mode": 33188,
      "old_path": "cmd/buildminder/config.go",
      "new_id": "90ce179257a8f7c1f2b95e7cace54d761f9a476c",
      "new_mode": 33188,
      "new_path": "cmd/buildminder/config.go"
    },
    {
      "type": "modify",
      "old_id": "69a0f573eb1b6296f51220b5532c7c5530c7c983",
      "old_mode": 33188,
      "old_path": "cmd/buildminder/config_test.go",
      "new_id": "b5e809c27df2994c809d8a59317b08f3f97611a6",
      "new_mode": 33188,
      "new_path": "cmd/buildminder/config_test.go"
    },
    {
      "type": "modify",
      "old_id": "7324aebefef0ebada1e6a16bf49c4f3d631667e4",
      "old_mode": 33188,
      "old_path": "cmd/buildminder/main_test.go",
      "new_id": "ddd9969344fff7df92f330e834a2e5f36370367e",
      "new_mode": 33188,
      "new_path": "cmd/buildminder/main_test.go"
    },
    {
      "type": "modify",
      "old_id": "4fa0f4cdb631810405002354dad5ebf5cce92b9a",
      "old_mode": 33188,
      "old_path": "internal/pkg/buildminder/app.go",
      "new_id": "826438ae1c5fca54f8d7b45afb8d0843f6c0c2b6",
      "new_mode": 33188,
      "new_path": "internal/pkg/buildminder/app.go"
    },
    {
      "type": "modify",
      "old_id": "afc41c0234d652ae2eff7289e28e56f915e1d017",
      "old_mode": 33188,
      "old_path": "internal/pkg/buildminder/service/service_test.go",
      "new_id": "a6fd2bad14b92206afbe2651df9cf0ddf3632d8c",
      "new_mode": 33188,
      "new_path": "internal/pkg/buildminder/service/service_test.go"
    },
    {
      "type": "modify",
      "old_id": "062ad0a754c5c74091b928a6351e93803e36da7c",
      "old_mode": 33188,
      "old_path": "internal/pkg/buildstate/BUILD.bazel",
      "new_id": "619e0f62a57a22555177594e6c5b48c0d5a10720",
      "new_mode": 33188,
      "new_path": "internal/pkg/buildstate/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "051cd389aad1d144b3f521d23adea59066f3bf2a",
      "old_mode": 33188,
      "old_path": "internal/pkg/buildstate/buildstate.go",
      "new_id": "1aedfebbf2d2fadac2abdb8de67ecd71f1301759",
      "new_mode": 33188,
      "new_path": "internal/pkg/buildstate/buildstate.go"
    },
    {
      "type": "modify",
      "old_id": "a9f52d43b5debb87e9b2aac978b1ea769ff62bc9",
      "old_mode": 33188,
      "old_path": "internal/pkg/buildstate/buildstate_test.go",
      "new_id": "7bcd56fe4f582b148d63869e67ecebe9ecff3108",
      "new_mode": 33188,
      "new_path": "internal/pkg/buildstate/buildstate_test.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2166315d34bc60bb6f1fb68de44c9a367e9cd257",
      "new_mode": 33188,
      "new_path": "internal/pkg/buildstate/report.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fd11b2a0750fbbab9c3bbf62cb317bb335732693",
      "new_mode": 33188,
      "new_path": "internal/pkg/buildstate/report_test.go"
    },
    {
      "type": "modify",
      "old_id": "621da8883f313ea9e56a058f1ec5c50cfc1a3b30",
      "old_mode": 33188,
      "old_path": "internal/pkg/text/ansi.go",
      "new_id": "460bee8952fee9f29253cb264217d819b882405d",
      "new_mode": 33188,
      "new_path": "internal/pkg/text/ansi.go"
    },
    {
      "type": "modify",
      "old_id": "696f758eae671406444eb95f4e4eb905a60541f2",
      "old_mode": 33188,
      "old_path": "internal/pkg/text/ansi_test.go",
      "new_id": "14c9faaa2ace232b2890a426744d02f24c39ffe4",
      "new_mode": 33188,
      "new_path": "internal/pkg/text/ansi_test.go"
    },
    {
      "type": "modify",
      "old_id": "b7a85e397b195c3f6c0115e5c70176dd11c8e2d2",
      "old_mode": 33188,
      "old_path": "internal/pkg/text/truncate.go",
      "new_id": "1e2bd337ff533c5fcdd148fc55c6edb2e4ff467d",
      "new_mode": 33188,
      "new_path": "internal/pkg/text/truncate.go"
    },
    {
      "type": "modify",
      "old_id": "90cbdfbdb6226db4ec899f1aeb52754ecf9983dd",
      "old_mode": 33188,
      "old_path": "internal/pkg/text/truncate_test.go",
      "new_id": "d914e61bc270713282fe2a3398dd2510d33ce1e8",
      "new_mode": 33188,
      "new_path": "internal/pkg/text/truncate_test.go"
    },
    {
      "type": "modify",
      "old_id": "c88178d8b673389aa0143fd7eda1487433be024c",
      "old_mode": 33188,
      "old_path": "scripts/bazel_tests/BUILD.bazel",
      "new_id": "f684497ac8e67e0cfe9c2ca62ecdebeb08e5873d",
      "new_mode": 33188,
      "new_path": "scripts/bazel_tests/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "833d5cf8e1ad3d9bc4c7ef99d823a473f381c1b9",
      "new_mode": 33261,
      "new_path": "scripts/bazel_tests/testdata/verify_buildminder_unsuccessful_actions.sh"
    },
    {
      "type": "modify",
      "old_id": "d7f24afc2468a9ba94c525b272adf2a73e66c824",
      "old_mode": 33188,
      "old_path": "scripts/ninja_tests/BUILD.bazel",
      "new_id": "24a74864f8f5a22e08157b4f4a2950d66291bbdd",
      "new_mode": 33188,
      "new_path": "scripts/ninja_tests/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "177380eb213797d891ef8d0b17127f0ba5f79898",
      "new_mode": 33261,
      "new_path": "scripts/ninja_tests/testdata/verify_buildminder_unsuccessful_actions.sh"
    }
  ]
}
