)]}'
{
  "commit": "c94bc9e9881190bf9831c82bf964f59ad8b6a783",
  "tree": "ad10e6a28d3d481ce07ddfc8109d0426b5e5b99d",
  "parents": [
    "f78167ef7faa6f9e15c312ca6c48eead815a0746"
  ],
  "author": {
    "name": "Tomas Aschan",
    "email": "1550920+tomasaschan@users.noreply.github.com",
    "time": "Fri Jun 26 13:51:38 2026 +0200"
  },
  "committer": {
    "name": "Tomas Aschan",
    "email": "1550920+tomasaschan@users.noreply.github.com",
    "time": "Fri Jun 26 13:51:38 2026 +0200"
  },
  "message": "v2/conformance: add POSIX/GNU suite + divergence oracle\n\nAdd the second conformance promise (POSIX/GNU argument syntax) alongside\nthe vendored stdlib flag suite, plus the machinery to reconcile the two\nwhen they conflict.\n\n- gnuposix_test.go: hand-written suite keyed to the POSIX Utility Syntax\n  Guidelines (1-14) and the GNU long-option extensions. No reusable\n  Go-native POSIX corpus exists to vendor, so each case cites the rule it\n  checks.\n\n- divergences.json: single source of truth cataloguing the intentional\n  differences between pflag and the stdlib flag package. POSIX wins, so\n  the listed stdlib tests are *expected* to fail; each entry names them\n  and the rule that overrides them. Categories: posix-overrides-stdlib,\n  pflag-design-differs, pflag-omits-gnu-feature, not-implemented-yet.\n\n- hack/oracle: reads `go test -json` and gates CI on the catalogue rather\n  than raw pass/fail: green iff failures match the documented set exactly\n  (catches regressions and silently-resolved divergences). The top-level\n  \"status\" field tolerates a build failure while \"bootstrapping\" so CI is\n  green during v2 build-out; \"not-implemented-yet\" entries are lenient\n  (tolerated when failing, retirable when they start passing).\n\n- internal/divergence: catalogue types + parsing, shared by the manifest\n  test and the oracle (no build tag, no v2 dependency).\n\nCI conformance-v2 job now pipes the suite through the oracle and drops\ncontinue-on-error; it is green now (bootstrapping) and tightens to\nenforcing once v2 compiles.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d8b2518cb09148905cadcfcd331ed3b634c6d57a",
      "old_mode": 33188,
      "old_path": ".github/workflows/ci.yaml",
      "new_id": "d449197c8cae09e542fff2b582ffc145b667fda0",
      "new_mode": 33188,
      "new_path": ".github/workflows/ci.yaml"
    },
    {
      "type": "modify",
      "old_id": "ab58f5274c48683fa5754b913fd123546a009f48",
      "old_mode": 33188,
      "old_path": "v2/conformance/README.md",
      "new_id": "f4f3c27675394db32f9aedba35240016219ce848",
      "new_mode": 33188,
      "new_path": "v2/conformance/README.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d414e1c4f7579ab35bf08122fb5d11e59b2b17c3",
      "new_mode": 33188,
      "new_path": "v2/conformance/divergences.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "460e2d5cc3716d60f7dd1ceebcdb8d023d1f886f",
      "new_mode": 33188,
      "new_path": "v2/conformance/divergences.json"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f5b0bdc245c089b62287790338d5c4e4d3f66587",
      "new_mode": 33188,
      "new_path": "v2/conformance/divergences_test.go"
    },
    {
      "type": "modify",
      "old_id": "b52c1ea89b859b27b1d3b6804410e83623a6d167",
      "old_mode": 33188,
      "old_path": "v2/conformance/doc.go",
      "new_id": "ee14016a61c6f62cb0cc73f71c8a5862aaa5220b",
      "new_mode": 33188,
      "new_path": "v2/conformance/doc.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "74deba78a41a01a1a8980faace882489800237a0",
      "new_mode": 33188,
      "new_path": "v2/conformance/gnuposix_test.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3a0a80b019f01c29bf36e8af6868b7b8bc0f6842",
      "new_mode": 33188,
      "new_path": "v2/conformance/hack/oracle/main.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "894de3b55d4ecbbe5b26db649a25f58a104e098d",
      "new_mode": 33188,
      "new_path": "v2/conformance/hack/oracle/main_test.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "23ea2e3b3fb764134356b351b7d9ae9d46e5fc22",
      "new_mode": 33188,
      "new_path": "v2/conformance/internal/divergence/divergence.go"
    }
  ]
}
