)]}'
{
  "commit": "739771bd2f0c9cca5c9cad6801c96ba6c3c86975",
  "tree": "86aaa81b5275a8c662ee5255969df9ab89535a57",
  "parents": [
    "7e90d3628305a3ad4a711621be4fdfe17584e8b1"
  ],
  "author": {
    "name": "vbhanuchander-lang",
    "email": "v.bhanuchander@gmail.com",
    "time": "Wed Aug 12 09:53:01 2026 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Aug 12 21:53:01 2026 +0800"
  },
  "message": "feat(github): collect GitHub issue fields and map them onto domain issues (#9038)\n\n* feat(github): collect GitHub issue fields and map them onto domain issues\n\nGitHub issue fields are organization-level structured issue metadata that\nwent generally available on 2026-07-02. They are typed, mutually exclusive\nwithin a field, and shared across every repository in the organization —\nwhich is what teams currently approximate with `type:`-style labels.\n\nCollects issue field values and lets a scope config map a field onto an\nissue column, where it takes precedence over the existing label regexes.\n\n- New table `_tool_github_issue_field_values`, one row per issue per field,\n  carrying a queryable text form of the value alongside the original JSON.\n- New subtasks Collect/Extract Issue Field Values, both disabled by default\n  so existing pipelines are unaffected until a mapping is configured.\n- New scope config keys issueFieldPriority, issueFieldSeverity,\n  issueFieldComponent, issueFieldStoryPoint and issueFieldDueDate, each\n  holding a field *name*.\n\nThe mapping is applied in the issue convertor rather than written back into\n`_tool_github_issues`: the collector iterates that table to build its request\nURLs, so a subtask that both read and wrote it was a cycle in the subtask\ngraph. Converting instead also keeps the tool layer as raw GitHub truth and\navoids adding columns there.\n\nA 404 from the field-values endpoint is treated as \"no field values\" so an\norganization that has never configured issue fields, or a token that cannot\nsee them, does not fail the whole task.\n\n* test(github): add an e2e dataflow test for issue field values\n\nCovers extraction and the scope config mapping end to end against a real\ndatabase, which the unit tests could not reach.\n\nExtraction asserts the value normalisation per data type: a single_select\nresolving to its option name and colour, an integral number rendering as\n\"5\" rather than \"5.0\", a fractional number keeping its precision, a\nmulti_select joining option names while keeping the raw JSON array, and a\nnull value producing an empty value.\n\nConversion asserts the mapping reaches the domain issue -- priority,\ncomponent, story point and due date -- and, for the case that matters,\nthat an unparseable value is skipped with a warning rather than failing\nthe task or writing a wrong value: issue #7 carries \"soon\" in a date\nfield and a null priority, and comes out with neither set while the other\nissues are untouched.\n\n* fix(github): register the issue field values table in GetTablesInfo\n\nTest_GetPluginTablesInfo compares the plugin\u0027s declared tables against the\nones its migrations create, and the new table was missing from the list:\n\n  table_info_test.go:121: The following tables are not returned by the\n  TablesInfo method\n      _tool_github_issue_field_values\n\nAdds GithubIssueFieldValue to Github.GetTablesInfo(). Verified inside the\nmericodev/lake-builder image the unit-test job uses, since the plugins\npackage needs libgit2 to build.",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "63b987255211c79795cf9d6159217935bef2c0e6",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/e2e/issue_field_value_test.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "76588f56484f5c409e089c29f1cabb66e7288aae",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/e2e/raw_tables/_raw_github_api_issue_field_values.csv"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e4f3dd4ee4dcb5895051cd32edebd6200d3ef9e9",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/e2e/snapshot_tables/_tool_github_issue_field_values.csv"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f06f110f8133ff8d4bfa8085461507ede3c660de",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/e2e/snapshot_tables/issues_with_field_values.csv"
    },
    {
      "type": "modify",
      "old_id": "ada24da0da860ac6e4c2011cd046dbe3aac4f28f",
      "old_mode": 33188,
      "old_path": "backend/plugins/github/impl/impl.go",
      "new_id": "f012077d25db364ed7e7df9fa1dd81890186c9af",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/impl/impl.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2679532f70214cda5912faf851f0b009828c2fcc",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/models/issue_field_value.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f6480900f4547ffaf72cd002c28f222ed16740bc",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/models/migrationscripts/20260809_add_github_issue_fields.go"
    },
    {
      "type": "modify",
      "old_id": "65f538f31c1c65a2ecbc6b0cc5cd806fee478f10",
      "old_mode": 33188,
      "old_path": "backend/plugins/github/models/migrationscripts/register.go",
      "new_id": "0a35123ed37a06071a193f7ac96722d952cae1a3",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/models/migrationscripts/register.go"
    },
    {
      "type": "modify",
      "old_id": "a19f33db6f39aa2d58a1c79b6f4193d0389b71ea",
      "old_mode": 33188,
      "old_path": "backend/plugins/github/models/scope_config.go",
      "new_id": "ae3fdf75c60fe3c759e2255c6a915269f1fbcf78",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/models/scope_config.go"
    },
    {
      "type": "modify",
      "old_id": "13e79529aec339cd6f08252655d92a6fc83fe63d",
      "old_mode": 33188,
      "old_path": "backend/plugins/github/tasks/issue_convertor.go",
      "new_id": "2cb60d1ff66c6d4e65628eb692d660b6d6a11389",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/tasks/issue_convertor.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "aee0901a268d20780e0478b761318351681d65b2",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/tasks/issue_field_mapping.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6c159bf245f4c3a03dc3981ddd8a0bafbc5bdced",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/tasks/issue_field_mapping_test.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "17211911a85196a16c006f03fd779ac66dd6254b",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/tasks/issue_field_value_collector.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4ec955df8bddd3a9df2961aee51073a1ecefd42c",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/tasks/issue_field_value_extractor.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "38efc3676f7b2c801011c34bf65fc4410b0af94f",
      "new_mode": 33188,
      "new_path": "backend/plugins/github/tasks/issue_field_value_extractor_test.go"
    }
  ]
}
