)]}'
{
  "commit": "a832b2d175db979c0fdc84b20eb1cbbe6b5431c0",
  "tree": "80c1cb450f61d2461a19a1a8e48857d60b264298",
  "parents": [
    "4adca25a0558aa3f6f00784625eeddb3c5d272b7"
  ],
  "author": {
    "name": "Richard Levasseur",
    "email": "richardlev@gmail.com",
    "time": "Fri Nov 06 23:17:44 2026 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Nov 06 23:17:44 2026 -0800"
  },
  "message": "agents: add pipeline reuse, type uniformity, and WORKSPACE parity rules (#4421)\n\nAgent implementations of WORKSPACE features (such as #4374 vs. #4416)\npreviously invented parallel repository rules, format converters, and\nruntime union-type branches instead of reusing existing pipelines and\ncanonical data types. This duplicated Bzlmod logic, broke host\nportability for vendored `requirements.bzl` files, and modified\nunrelated code.\n\nCodify the design and Starlark rules from #4416 so agents:\n* Trace existing call graphs and extend existing `WORKSPACE` rules and\n  pipelines (`parse_requirements` -\u003e `requirements.bzl.tmpl.workspace`\n  -\u003e `whl_library`) at the narrowest seam rather than adding parallel\n  rules or format converters.\n* Extract pure helpers needed by both Bzlmod and `WORKSPACE` into\n  standalone Bzlmod-agnostic `.bzl` files.\n* Preserve host portability in vendored `requirements.bzl` by emitting\n  direct downloader attributes only when a package resolves to a single\n  cross-platform distribution, falling back to `--hash` flags for\n  platform-specific wheels.\n* Enforce uniform parameter, return, and collection types across callers\n  and test fixtures without runtime union-type branches.\n* Leave working code untouched unless required and decompose multi-stage\n  functions into focused helpers.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2028a4da6f47c58fcab22b329396adfcd12acba9",
      "old_mode": 33188,
      "old_path": ".agents/rules/code-style.md",
      "new_id": "e2c0aa8f06d6e40d2f7cf54c22134a27245e6c0d",
      "new_mode": 33188,
      "new_path": ".agents/rules/code-style.md"
    },
    {
      "type": "modify",
      "old_id": "701a9c38c7d5f40154de1c6a86d2eee4dc7abd72",
      "old_mode": 33188,
      "old_path": ".agents/rules/rules_python.md",
      "new_id": "eb58f7016cfaa18d0cc588f09aa5a980e152282d",
      "new_mode": 33188,
      "new_path": ".agents/rules/rules_python.md"
    },
    {
      "type": "modify",
      "old_id": "f9bdcda759ea2ae96c5088dca92a0dd3bb158449",
      "old_mode": 33188,
      "old_path": ".agents/rules/starlark.md",
      "new_id": "4b2239e8c4235fbad8d748d27de67b2a147169a6",
      "new_mode": 33188,
      "new_path": ".agents/rules/starlark.md"
    }
  ]
}
