From 84a474ab57fcb96e8b9cf40db6bfa47c96cc8386 Mon Sep 17 00:00:00 2001 From: PathGao Date: Wed, 16 Sep 2026 22:31:22 +0800 Subject: [PATCH] chore(repo): adopt Markpad labels and retire unused defaults --- .github/GOVERNANCE.md | 22 +++++++------ .github/labels.json | 74 ++++++++++++++++--------------------------- Tools/sync-labels.sh | 4 ++- 3 files changed, 43 insertions(+), 57 deletions(-) diff --git a/.github/GOVERNANCE.md b/.github/GOVERNANCE.md index 380c4f9..95d11c4 100644 --- a/.github/GOVERNANCE.md +++ b/.github/GOVERNANCE.md @@ -1,7 +1,7 @@ # Repository governance -Adopted baseline: **2026-09-16** from [PathGao/governance](https://github.com/PathGao/PathGao/tree/main/governance). -Adopted [source snapshot](https://github.com/PathGao/PathGao/tree/efab3e421c6606c1ce0a1c5836e98ba0ff64addb/governance). +Adopted baseline: **2026-09-16, Markpad labels** from [PathGao/governance](https://github.com/PathGao/PathGao/tree/main/governance). +Adopted [source snapshot](https://github.com/PathGao/PathGao/tree/46466b51863fdab52d9b1d4d16f1d7d145ebcfb9/governance). Updates are reviewed and copied manually; there is no automatic inheritance. ## Workflow @@ -10,9 +10,12 @@ Use the short PR template. `Closes #123` or `Fixes #123` closes a completed issu on merge. For partial work, use `Related to #123` and state what remains. There is no release-confirmation or inactivity-close automation. -`question` is a usage question. `needs info` waits for reporter details, -`awaiting decision` waits for a maintainer decision, and `planned` means accepted. -Type and resolution labels are defined in [labels.json](labels.json). +The ten shared labels use Markpad's names, colors and descriptions. +`question` is a usage question; `needs info` waits for reporter input; +`awaiting decision` waits for a maintainer decision; `planned` means accepted. +`Final_Check_Request` is a manual marker for confirmation or incomplete work. +Keep those issues open with normal references until complete; no bot acts on it. +The full set, including project extensions, is defined in [labels.json](labels.json). ## Maintenance @@ -29,10 +32,11 @@ Preview label changes from the repository root: ``` Add `--apply` to create/update the declared labels. Labels outside the manifest -are preserved, including historical labels attached to closed issues. +are preserved. Adoption explicitly removes the unused defaults `wontfix`, +`good first issue`, `help wanted`, `invalid` and `duplicate` after checking usage. +A zero-change preview alone does not verify that cleanup. ## Project differences -Nifro retains site submission and other project labels, existing issue forms, -and its five required CI jobs. `Final_Check_Request` remains only as a legacy -GitHub label for historical issues; it is outside the managed manifest. +Nifro retains `accessibility`, `site submission`, `swift` and `upstream`, +existing issue forms and its five required CI jobs. diff --git a/.github/labels.json b/.github/labels.json index 05b38db..122733c 100644 --- a/.github/labels.json +++ b/.github/labels.json @@ -1,79 +1,59 @@ [ + { + "name": "awaiting decision", + "color": "c129c4", + "description": "Needs a product-direction call from the maintainer before work can start" + }, { "name": "bug", "color": "d73a4a", "description": "Something isn't working" }, { - "name": "enhancement", - "color": "a2eeef", - "description": "New feature or improvement" + "name": "dependencies", + "color": "b9d130", + "description": "Pull requests that update a dependency file" }, { "name": "documentation", - "color": "bfd4f2", + "color": "BFD4F2", "description": "Docs, README or contributor-facing text" }, { - "name": "question", - "color": "fbca04", - "description": "A usage question, not a request for missing information" - }, - { - "name": "needs info", - "color": "f9d0c4", - "description": "Waiting on the reporter to supply missing information" - }, - { - "name": "awaiting decision", - "color": "c129c4", - "description": "Needs a maintainer decision before work can start" + "name": "enhancement", + "color": "a2eeef", + "description": "New feature or request" }, { - "name": "planned", - "color": "0453ab", - "description": "Accepted and queued for work" + "name": "Final_Check_Request", + "color": "5ade98", + "description": "Looks fixed, but do not close yet: needs confirmation, or part of it is still open" }, { - "name": "duplicate", - "color": "cfd3d7", - "description": "Same issue or pull request; link to the original" + "name": "github_actions", + "color": "000000", + "description": "Pull requests that update GitHub Actions code" }, { - "name": "wontfix", - "color": "6e7781", - "description": "Decided against, with a reason" + "name": "needs info", + "color": "F9D0C4", + "description": "Waiting on the reporter to confirm or supply detail" }, { - "name": "dependencies", - "color": "b9d130", - "description": "Dependency update" + "name": "planned", + "color": "0453ab", + "description": "Accepted and queued for the next round of work" }, { - "name": "github_actions", - "color": "000000", - "description": "GitHub Actions update" + "name": "question", + "color": "FBCA04", + "description": "A usage question, not a defect" }, { "name": "accessibility", "color": "f143ab", "description": "Barrier affecting people with disabilities" }, - { - "name": "good first issue", - "color": "7057ff", - "description": "Good for newcomers" - }, - { - "name": "help wanted", - "color": "008672", - "description": "Extra attention is needed" - }, - { - "name": "invalid", - "color": "e4e669", - "description": "This doesn't seem right" - }, { "name": "site submission", "color": "1D76DB", diff --git a/Tools/sync-labels.sh b/Tools/sync-labels.sh index 7fafad8..e8e125f 100755 --- a/Tools/sync-labels.sh +++ b/Tools/sync-labels.sh @@ -12,10 +12,12 @@ import subprocess parser = argparse.ArgumentParser(description="Preview or apply .github/labels.json") parser.add_argument("repository", help="Explicit OWNER/REPO target") parser.add_argument("--apply", action="store_true") +parser.add_argument("--labels", type=Path, default=Path(".github/labels.json"), + help="Manifest path; use an absolute path outside the script root") args = parser.parse_args() if not re.fullmatch(r"[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+", args.repository): parser.error("repository must be OWNER/REPO") -labels = json.loads(Path(".github/labels.json").read_text()) +labels = json.loads(args.labels.read_text()) if not isinstance(labels, list): parser.error("labels.json must contain an array") seen = set()