maintainer-defense-kit 1.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. maintainer_defense_kit-1.1.0/LICENSE +21 -0
  2. maintainer_defense_kit-1.1.0/MANIFEST.in +12 -0
  3. maintainer_defense_kit-1.1.0/PKG-INFO +190 -0
  4. maintainer_defense_kit-1.1.0/README.md +163 -0
  5. maintainer_defense_kit-1.1.0/auditor-rules.json +191 -0
  6. maintainer_defense_kit-1.1.0/build_backend.py +65 -0
  7. maintainer_defense_kit-1.1.0/docs/AUDITOR.md +69 -0
  8. maintainer_defense_kit-1.1.0/docs/AUDITOR_EVALUATION.md +43 -0
  9. maintainer_defense_kit-1.1.0/docs/AUDITOR_PILOT.md +53 -0
  10. maintainer_defense_kit-1.1.0/docs/AUDITOR_PILOT_PROGRAM.md +42 -0
  11. maintainer_defense_kit-1.1.0/docs/AUDITOR_RULES.md +184 -0
  12. maintainer_defense_kit-1.1.0/docs/AUDIT_LOG.md +34 -0
  13. maintainer_defense_kit-1.1.0/docs/EVALUATION.md +86 -0
  14. maintainer_defense_kit-1.1.0/docs/KIT_ASSURANCE.md +60 -0
  15. maintainer_defense_kit-1.1.0/docs/MATURITY_MODEL.md +22 -0
  16. maintainer_defense_kit-1.1.0/docs/NATIVE_CONTROLS.md +27 -0
  17. maintainer_defense_kit-1.1.0/docs/PLAYBOOK.md +79 -0
  18. maintainer_defense_kit-1.1.0/docs/PROFILE_SIGNALS.md +40 -0
  19. maintainer_defense_kit-1.1.0/docs/README.md +58 -0
  20. maintainer_defense_kit-1.1.0/docs/RESOURCE_AUDIT.md +325 -0
  21. maintainer_defense_kit-1.1.0/docs/SUBMISSION.md +80 -0
  22. maintainer_defense_kit-1.1.0/docs/THREAT_MODEL.md +66 -0
  23. maintainer_defense_kit-1.1.0/docs/VISUAL_STYLE.md +18 -0
  24. maintainer_defense_kit-1.1.0/docs/ja/KIT_ASSURANCE.md +38 -0
  25. maintainer_defense_kit-1.1.0/docs/ja/PLAYBOOK.md +54 -0
  26. maintainer_defense_kit-1.1.0/docs/releases/v1.1.0-pr.md +24 -0
  27. maintainer_defense_kit-1.1.0/docs/superpowers/plans/2026-08-23-flagship-v1.1.md +762 -0
  28. maintainer_defense_kit-1.1.0/docs/superpowers/specs/2026-08-23-flagship-v1.1-design.md +108 -0
  29. maintainer_defense_kit-1.1.0/docs/vi/KIT_ASSURANCE.md +38 -0
  30. maintainer_defense_kit-1.1.0/docs/vi/PLAYBOOK.md +54 -0
  31. maintainer_defense_kit-1.1.0/generated/maintainer_defense_kit.egg-info/PKG-INFO +190 -0
  32. maintainer_defense_kit-1.1.0/generated/maintainer_defense_kit.egg-info/SOURCES.txt +69 -0
  33. maintainer_defense_kit-1.1.0/generated/maintainer_defense_kit.egg-info/dependency_links.txt +1 -0
  34. maintainer_defense_kit-1.1.0/generated/maintainer_defense_kit.egg-info/entry_points.txt +3 -0
  35. maintainer_defense_kit-1.1.0/generated/maintainer_defense_kit.egg-info/top_level.txt +1 -0
  36. maintainer_defense_kit-1.1.0/generated/maintainer_defense_kit.py +1658 -0
  37. maintainer_defense_kit-1.1.0/kits/balanced/.github/ISSUE_TEMPLATE/bug.yml +50 -0
  38. maintainer_defense_kit-1.1.0/kits/balanced/.github/ISSUE_TEMPLATE/config.yml +5 -0
  39. maintainer_defense_kit-1.1.0/kits/balanced/.github/PULL_REQUEST_TEMPLATE.md +19 -0
  40. maintainer_defense_kit-1.1.0/kits/balanced/.github/workflows/pr-quality.yml +68 -0
  41. maintainer_defense_kit-1.1.0/kits/balanced/README.md +23 -0
  42. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/README.ja.md +56 -0
  43. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/README.md +60 -0
  44. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/README.vi.md +56 -0
  45. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/en/adoption-record.md +19 -0
  46. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/en/bug.yml +50 -0
  47. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/en/config.yml.tmpl +5 -0
  48. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/en/pull_request_template.md +21 -0
  49. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/ja/adoption-record.md +19 -0
  50. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/ja/bug.yml +50 -0
  51. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/ja/config.yml.tmpl +5 -0
  52. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/ja/pull_request_template.md +21 -0
  53. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/vi/adoption-record.md +19 -0
  54. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/vi/bug.yml +50 -0
  55. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/vi/config.yml.tmpl +5 -0
  56. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/locales/vi/pull_request_template.md +21 -0
  57. maintainer_defense_kit-1.1.0/kits/maintainer-defense-kit/profiles/observe/.github/workflows/pr-quality.yml +61 -0
  58. maintainer_defense_kit-1.1.0/kits/workflow-hardening/.github/workflows/dependency-review.yml +16 -0
  59. maintainer_defense_kit-1.1.0/kits/workflow-hardening/.github/workflows/zizmor.yml +31 -0
  60. maintainer_defense_kit-1.1.0/kits/workflow-hardening/README.md +14 -0
  61. maintainer_defense_kit-1.1.0/maintainer-defense-config.schema.json +35 -0
  62. maintainer_defense_kit-1.1.0/policies/AI_CONTRIBUTIONS.ja.md +32 -0
  63. maintainer_defense_kit-1.1.0/policies/AI_CONTRIBUTIONS.md +32 -0
  64. maintainer_defense_kit-1.1.0/policies/AI_CONTRIBUTIONS.vi.md +32 -0
  65. maintainer_defense_kit-1.1.0/policies/UNSOLICITED_PULL_REQUESTS.ja.md +24 -0
  66. maintainer_defense_kit-1.1.0/policies/UNSOLICITED_PULL_REQUESTS.md +24 -0
  67. maintainer_defense_kit-1.1.0/policies/UNSOLICITED_PULL_REQUESTS.vi.md +24 -0
  68. maintainer_defense_kit-1.1.0/pyproject.toml +42 -0
  69. maintainer_defense_kit-1.1.0/scripts/build_standalone.py +85 -0
  70. maintainer_defense_kit-1.1.0/scripts/install_kit.py +1630 -0
  71. maintainer_defense_kit-1.1.0/setup.cfg +4 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Awesome Maintainer Defense contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,12 @@
1
+ include LICENSE
2
+ include README.md
3
+ include pyproject.toml
4
+ include build_backend.py
5
+ include auditor-rules.json
6
+ include maintainer-defense-config.schema.json
7
+ include generated/maintainer_defense_kit.py
8
+ include scripts/build_standalone.py
9
+ include scripts/install_kit.py
10
+ recursive-include docs *.md
11
+ recursive-include kits *.md *.yml *.tmpl
12
+ recursive-include policies *.md
@@ -0,0 +1,190 @@
1
+ Metadata-Version: 2.4
2
+ Name: maintainer-defense-kit
3
+ Version: 1.1.0
4
+ Summary: Offline auditor and reversible defense kit for repository governance and GitHub Actions risk
5
+ Author: Thang Le
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/thangldw/awesome-maintainer-defense
8
+ Project-URL: Documentation, https://github.com/thangldw/awesome-maintainer-defense/blob/v1.1.0/docs/AUDITOR.md
9
+ Project-URL: Issues, https://github.com/thangldw/awesome-maintainer-defense/issues
10
+ Project-URL: Source, https://github.com/thangldw/awesome-maintainer-defense
11
+ Keywords: github-actions,governance,maintainer,security,sarif
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Topic :: Software Development :: Quality Assurance
22
+ Classifier: Topic :: Security
23
+ Requires-Python: >=3.10
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Dynamic: license-file
27
+
28
+ # Awesome Maintainer Defense
29
+
30
+ [English](#english) · [Tiếng Việt](#tiếng-việt) · [日本語](#日本語)
31
+
32
+ Offline repository-governance and GitHub Actions risk auditor with reversible defense profiles and an evidence-reviewed resource catalog.
33
+
34
+ ```mermaid
35
+ %%{init: {"theme":"base","themeVariables":{"background":"#FFFFFF","fontFamily":"Arial, sans-serif","lineColor":"#667085","primaryTextColor":"#172B4D"}}}%%
36
+ flowchart LR
37
+ R["Repository<br/>Repo / リポジトリ"]:::yellow
38
+ A["Read-only audit<br/>Chỉ đọc / 読取監査"]:::blue
39
+ F["Evidence findings<br/>Phát hiện / 所見"]:::pink
40
+ P["Reviewable patch<br/>Patch / パッチ"]:::purple
41
+ H["Human decision<br/>Con người / 人の判断"]:::green
42
+ R --> A --> F --> P --> H
43
+ classDef yellow fill:#FFF4A3,stroke:#C9A227,stroke-width:2px,color:#172B4D
44
+ classDef blue fill:#D9EAFD,stroke:#4C78A8,stroke-width:2px,color:#172B4D
45
+ classDef pink fill:#FFE1E6,stroke:#C96A7B,stroke-width:2px,color:#172B4D
46
+ classDef purple fill:#E9DDF7,stroke:#8064A2,stroke-width:2px,color:#172B4D
47
+ classDef green fill:#DDF5E3,stroke:#4F9D69,stroke-width:2px,color:#172B4D
48
+ ```
49
+
50
+ ## English
51
+
52
+ The dependency-free Python CLI audits repository policy and workflow trust boundaries without a network connection or GitHub token. `fix` emits a unified diff; it never edits a repository, changes settings, commits or pushes. Findings are review inputs, not proof of authorship, intent or safety.
53
+
54
+ <!-- auditor-output:start -->
55
+ ```text
56
+ 3 findings · 1 critical · 1 high · 1 medium
57
+
58
+ CRITICAL MD-WF-005 Untrusted pull-request input can reach a privileged workflow with secrets or write authority.
59
+ HIGH MD-WF-004 Privileged event pull_request_target checks out an attacker-influenced revision.
60
+ MEDIUM MD-WF-006 Checkout may persist a write-capable token in the workspace.
61
+ ```
62
+ <!-- auditor-output:end -->
63
+
64
+ ```bash
65
+ python3 scripts/build_standalone.py
66
+ python3 dist/maintainer-defense-kit.py audit .
67
+ python3 dist/maintainer-defense-kit.py fix . --output recommended.patch
68
+ python3 scripts/validate.py
69
+ python3 scripts/test_auditor.py
70
+ ```
71
+
72
+ ## Verified v1.1.0 installs
73
+
74
+ PyPI:
75
+
76
+ ```bash
77
+ pipx install maintainer-defense-kit==1.1.0
78
+ maintainer-defense audit .
79
+ ```
80
+
81
+ Checksummed standalone on macOS/Linux:
82
+
83
+ ```bash
84
+ curl -fLO https://github.com/thangldw/awesome-maintainer-defense/releases/download/v1.1.0/maintainer-defense-kit.py
85
+ curl -fLO https://github.com/thangldw/awesome-maintainer-defense/releases/download/v1.1.0/maintainer-defense-kit.py.sha256
86
+ shasum -a 256 -c maintainer-defense-kit.py.sha256
87
+ python3 maintainer-defense-kit.py audit .
88
+ ```
89
+
90
+ Checksummed standalone on PowerShell:
91
+
92
+ ```powershell
93
+ Invoke-WebRequest https://github.com/thangldw/awesome-maintainer-defense/releases/download/v1.1.0/maintainer-defense-kit.py -OutFile maintainer-defense-kit.py
94
+ Invoke-WebRequest https://github.com/thangldw/awesome-maintainer-defense/releases/download/v1.1.0/maintainer-defense-kit.py.sha256 -OutFile maintainer-defense-kit.py.sha256
95
+ $Expected = ((Get-Content maintainer-defense-kit.py.sha256 -Raw).Trim() -split '\s+')[0].ToLowerInvariant()
96
+ $Actual = (Get-FileHash maintainer-defense-kit.py -Algorithm SHA256).Hash.ToLowerInvariant()
97
+ if ($Actual -ne $Expected) { Write-Error "SHA-256 mismatch"; exit 1 }
98
+ python maintainer-defense-kit.py audit .
99
+ ```
100
+
101
+ `dist/awesome-maintainer-defense-openai-skills-v1.1.0.zip` is the deterministic skills-only upload bundle for the existing ChatGPT/Codex plugin listing. `dist/SHA256SUMS.txt` covers every public release asset.
102
+
103
+ ## Tiếng Việt
104
+
105
+ CLI Python không dependency kiểm tra policy và ranh giới tin cậy của workflow mà không cần mạng hoặc GitHub token. Lệnh `fix` chỉ tạo unified diff; không sửa repo, đổi setting, commit hoặc push. Mỗi finding chỉ là bằng chứng cần con người xem xét, không phải kết luận về tác giả, ý định hay mức độ an toàn.
106
+
107
+ ## 日本語
108
+
109
+ 依存関係のない Python CLI は、ネットワークや GitHub トークンなしでリポジトリ方針とワークフローの信頼境界を監査します。`fix` は unified diff を出力するだけで、ファイル編集、設定変更、commit、push は行いません。所見は人が確認するための根拠であり、作者、意図、安全性の証明ではありません。
110
+
111
+ The deployable kit keeps example `.github` directories because those files are product assets; they do not execute in this repository.
112
+
113
+ The repository is also a local, skills-only plugin for ChatGPT, Codex, Claude Code and Cowork. It does not require a hosted connector. See the [published ChatGPT/Codex listing](https://chatgpt.com/plugins/plugins_6a6edab2886c81918be9c9772e4ca904), [directory submission package](docs/SUBMISSION.md), [privacy policy](PRIVACY.md), [terms](TERMS.md), and [support guidance](SUPPORT.md).
114
+
115
+ ## Evidence-reviewed catalog
116
+
117
+ <!-- catalog:start -->
118
+
119
+ ### Abuse Detection & Moderation
120
+
121
+ Detect, label, quarantine, or respond to spam, harassment, and low-quality automated contributions.
122
+
123
+ | Resource | Type | License | Why it matters |
124
+ | --- | --- | --- | --- |
125
+ | [Niubi Guard](https://github.com/Albert-Weasker/niubi_guard) ⭐ | tool | Apache-2.0 | Repository abuse detection and response system for spam, harassment, and coordinated attacks. |
126
+ | [Anti Slop](https://github.com/peakoss/anti-slop) ⭐ | github-action | AGPL-3.0 | Configurable GitHub Action that detects and can close low-quality or AI-slop pull requests. |
127
+ | [GitHub AI Moderator](https://github.com/github/ai-moderator) | github-action | MIT | Model-powered Action that labels spam, link spam, and content it infers to be AI-generated. |
128
+ | [AI Community Moderator](https://github.com/benbalter/ai-community-moderator) | github-action | MIT | Moderates community interactions against a project's contributing guide and code of conduct. |
129
+ | [AI Assessment Comment Labeler](https://github.com/github/ai-assessment-comment-labeler) | github-action | MIT | Issue-intake Action that retrieves an AI assessment and applies configurable labels. |
130
+
131
+ ### Contributor Trust & Admission
132
+
133
+ Use explicit vouches or contribution history to control access without closing a project to everyone.
134
+
135
+ | Resource | Type | License | Why it matters |
136
+ | --- | --- | --- | --- |
137
+ | [Fossier](https://github.com/PThorpe92/fossier) | tool | MIT | Vouch-compatible workflow and CLI for reducing unsolicited pull-request spam. |
138
+ | [Vouch](https://github.com/mitchellh/vouch) ⭐ | tool | MIT | Community trust management based on explicit vouches before a participant can contribute. |
139
+ | [Good Egg](https://github.com/2ndSetAI/good-egg) | github-action | MIT | Scores pull-request authors using their contribution history across GitHub. |
140
+
141
+ ### Intake & Triage
142
+
143
+ Reduce review load with structured intake, labels, lifecycle automation, and emergency lockdowns.
144
+
145
+ | Resource | Type | License | Why it matters |
146
+ | --- | --- | --- | --- |
147
+ | [Labeler](https://github.com/actions/labeler) | github-action | MIT | Official Action for labeling pull requests from changed files and branch patterns. |
148
+ | [Stale](https://github.com/actions/stale) | github-action | MIT | Official Action for marking and optionally closing inactive issues and pull requests. |
149
+ | [Lock Threads](https://github.com/dessant/lock-threads) | github-action | MIT | Locks closed issues, pull requests, and discussions after a configurable period. |
150
+ | [Repo Lockdown](https://github.com/dessant/repo-lockdown) ⭐ | github-action | MIT | Emergency Action that immediately closes and locks new issues or pull requests. |
151
+ | [Issue Metrics](https://github.com/github-community-projects/issue-metrics) | github-action | MIT | Measures issue, pull-request, and discussion response times and generates a Markdown report. |
152
+
153
+ ### Repository Governance & Access
154
+
155
+ Keep security policies, branch protections, and repository settings consistent across projects.
156
+
157
+ | Resource | Type | License | Why it matters |
158
+ | --- | --- | --- | --- |
159
+ | [OpenSSF Allstar](https://github.com/ossf/allstar) ⭐ | github-app | Apache-2.0 | Continuously checks and enforces security policies across GitHub organizations. |
160
+ | [Safe Settings](https://github.com/github-community-projects/safe-settings) ⭐ | github-app | ISC | Centrally manages repository settings, branch protections, and teams with pull-request dry runs. |
161
+ | [Repository Settings App](https://github.com/repository-settings/app) | github-app | ISC | Synchronizes repository settings from a version-controlled `.github/settings.yml` file. |
162
+
163
+ ### Workflow & Supply-Chain Defense
164
+
165
+ Protect CI, dependencies, secrets, and merge paths from hostile or compromised contributions.
166
+
167
+ | Resource | Type | License | Why it matters |
168
+ | --- | --- | --- | --- |
169
+ | [Harden-Runner](https://github.com/step-security/harden-runner) ⭐ | github-action | Apache-2.0 | Monitors network egress, file integrity, and processes on GitHub-hosted runners. |
170
+ | [OpenSSF Scorecard](https://github.com/ossf/scorecard) ⭐ | tool | Apache-2.0 | Automated security-health checks for open-source projects and their dependencies. |
171
+ | [zizmor](https://github.com/zizmorcore/zizmor) ⭐ | tool | MIT | Static analysis for security and correctness problems in GitHub Actions workflows. |
172
+ | [pinact](https://github.com/suzuki-shunsuke/pinact) | tool | MIT | Pins GitHub Actions and reusable workflows to immutable commit hashes. |
173
+ | [Dependency Review Action](https://github.com/actions/dependency-review-action) ⭐ | github-action | MIT | Blocks pull requests that introduce vulnerable dependencies or disallowed licenses. |
174
+ | [TruffleHog](https://github.com/trufflesecurity/trufflehog) | tool | AGPL-3.0 | Finds and verifies leaked credentials before they become a maintainer incident. |
175
+ | [PRevent](https://github.com/apiiro/PRevent) | github-app | MIT | Detects suspicious pull-request changes that may indicate malicious code. |
176
+ | [OSV-Scanner](https://github.com/google/osv-scanner) ⭐ | tool | Apache-2.0 | Scans lockfiles, SBOMs, and source artifacts against the OSV vulnerability database. |
177
+ | [Gitleaks](https://github.com/gitleaks/gitleaks) ⭐ | tool | MIT | Detects secrets in Git history, directories, files, and standard input. |
178
+
179
+ ### Policies & Playbooks
180
+
181
+ Set expectations before problems arrive and respond consistently when they do.
182
+
183
+ | Resource | Type | License | Why it matters |
184
+ | --- | --- | --- | --- |
185
+ | [Open Source AI Contribution Policies](https://github.com/melissawm/open-source-ai-contribution-policies) ⭐ | awesome-list | CC0-1.0 | Comparative catalog of how open-source projects govern AI-generated contributions. |
186
+ | [OpenSSF AI-Slop Best-Practices Work Item](https://github.com/ossf/wg-vulnerability-disclosures/issues/178) | working-group | N/A | Open work item developing practices for low-quality AI security reports and contributions; not a finalized standard. |
187
+
188
+ <!-- catalog:end -->
189
+
190
+ Released under the [MIT License](LICENSE). Separate Vietnamese and Japanese catalog views remain in [README.vi.md](README.vi.md) and [README.ja.md](README.ja.md).
@@ -0,0 +1,163 @@
1
+ # Awesome Maintainer Defense
2
+
3
+ [English](#english) · [Tiếng Việt](#tiếng-việt) · [日本語](#日本語)
4
+
5
+ Offline repository-governance and GitHub Actions risk auditor with reversible defense profiles and an evidence-reviewed resource catalog.
6
+
7
+ ```mermaid
8
+ %%{init: {"theme":"base","themeVariables":{"background":"#FFFFFF","fontFamily":"Arial, sans-serif","lineColor":"#667085","primaryTextColor":"#172B4D"}}}%%
9
+ flowchart LR
10
+ R["Repository<br/>Repo / リポジトリ"]:::yellow
11
+ A["Read-only audit<br/>Chỉ đọc / 読取監査"]:::blue
12
+ F["Evidence findings<br/>Phát hiện / 所見"]:::pink
13
+ P["Reviewable patch<br/>Patch / パッチ"]:::purple
14
+ H["Human decision<br/>Con người / 人の判断"]:::green
15
+ R --> A --> F --> P --> H
16
+ classDef yellow fill:#FFF4A3,stroke:#C9A227,stroke-width:2px,color:#172B4D
17
+ classDef blue fill:#D9EAFD,stroke:#4C78A8,stroke-width:2px,color:#172B4D
18
+ classDef pink fill:#FFE1E6,stroke:#C96A7B,stroke-width:2px,color:#172B4D
19
+ classDef purple fill:#E9DDF7,stroke:#8064A2,stroke-width:2px,color:#172B4D
20
+ classDef green fill:#DDF5E3,stroke:#4F9D69,stroke-width:2px,color:#172B4D
21
+ ```
22
+
23
+ ## English
24
+
25
+ The dependency-free Python CLI audits repository policy and workflow trust boundaries without a network connection or GitHub token. `fix` emits a unified diff; it never edits a repository, changes settings, commits or pushes. Findings are review inputs, not proof of authorship, intent or safety.
26
+
27
+ <!-- auditor-output:start -->
28
+ ```text
29
+ 3 findings · 1 critical · 1 high · 1 medium
30
+
31
+ CRITICAL MD-WF-005 Untrusted pull-request input can reach a privileged workflow with secrets or write authority.
32
+ HIGH MD-WF-004 Privileged event pull_request_target checks out an attacker-influenced revision.
33
+ MEDIUM MD-WF-006 Checkout may persist a write-capable token in the workspace.
34
+ ```
35
+ <!-- auditor-output:end -->
36
+
37
+ ```bash
38
+ python3 scripts/build_standalone.py
39
+ python3 dist/maintainer-defense-kit.py audit .
40
+ python3 dist/maintainer-defense-kit.py fix . --output recommended.patch
41
+ python3 scripts/validate.py
42
+ python3 scripts/test_auditor.py
43
+ ```
44
+
45
+ ## Verified v1.1.0 installs
46
+
47
+ PyPI:
48
+
49
+ ```bash
50
+ pipx install maintainer-defense-kit==1.1.0
51
+ maintainer-defense audit .
52
+ ```
53
+
54
+ Checksummed standalone on macOS/Linux:
55
+
56
+ ```bash
57
+ curl -fLO https://github.com/thangldw/awesome-maintainer-defense/releases/download/v1.1.0/maintainer-defense-kit.py
58
+ curl -fLO https://github.com/thangldw/awesome-maintainer-defense/releases/download/v1.1.0/maintainer-defense-kit.py.sha256
59
+ shasum -a 256 -c maintainer-defense-kit.py.sha256
60
+ python3 maintainer-defense-kit.py audit .
61
+ ```
62
+
63
+ Checksummed standalone on PowerShell:
64
+
65
+ ```powershell
66
+ Invoke-WebRequest https://github.com/thangldw/awesome-maintainer-defense/releases/download/v1.1.0/maintainer-defense-kit.py -OutFile maintainer-defense-kit.py
67
+ Invoke-WebRequest https://github.com/thangldw/awesome-maintainer-defense/releases/download/v1.1.0/maintainer-defense-kit.py.sha256 -OutFile maintainer-defense-kit.py.sha256
68
+ $Expected = ((Get-Content maintainer-defense-kit.py.sha256 -Raw).Trim() -split '\s+')[0].ToLowerInvariant()
69
+ $Actual = (Get-FileHash maintainer-defense-kit.py -Algorithm SHA256).Hash.ToLowerInvariant()
70
+ if ($Actual -ne $Expected) { Write-Error "SHA-256 mismatch"; exit 1 }
71
+ python maintainer-defense-kit.py audit .
72
+ ```
73
+
74
+ `dist/awesome-maintainer-defense-openai-skills-v1.1.0.zip` is the deterministic skills-only upload bundle for the existing ChatGPT/Codex plugin listing. `dist/SHA256SUMS.txt` covers every public release asset.
75
+
76
+ ## Tiếng Việt
77
+
78
+ CLI Python không dependency kiểm tra policy và ranh giới tin cậy của workflow mà không cần mạng hoặc GitHub token. Lệnh `fix` chỉ tạo unified diff; không sửa repo, đổi setting, commit hoặc push. Mỗi finding chỉ là bằng chứng cần con người xem xét, không phải kết luận về tác giả, ý định hay mức độ an toàn.
79
+
80
+ ## 日本語
81
+
82
+ 依存関係のない Python CLI は、ネットワークや GitHub トークンなしでリポジトリ方針とワークフローの信頼境界を監査します。`fix` は unified diff を出力するだけで、ファイル編集、設定変更、commit、push は行いません。所見は人が確認するための根拠であり、作者、意図、安全性の証明ではありません。
83
+
84
+ The deployable kit keeps example `.github` directories because those files are product assets; they do not execute in this repository.
85
+
86
+ The repository is also a local, skills-only plugin for ChatGPT, Codex, Claude Code and Cowork. It does not require a hosted connector. See the [published ChatGPT/Codex listing](https://chatgpt.com/plugins/plugins_6a6edab2886c81918be9c9772e4ca904), [directory submission package](docs/SUBMISSION.md), [privacy policy](PRIVACY.md), [terms](TERMS.md), and [support guidance](SUPPORT.md).
87
+
88
+ ## Evidence-reviewed catalog
89
+
90
+ <!-- catalog:start -->
91
+
92
+ ### Abuse Detection & Moderation
93
+
94
+ Detect, label, quarantine, or respond to spam, harassment, and low-quality automated contributions.
95
+
96
+ | Resource | Type | License | Why it matters |
97
+ | --- | --- | --- | --- |
98
+ | [Niubi Guard](https://github.com/Albert-Weasker/niubi_guard) ⭐ | tool | Apache-2.0 | Repository abuse detection and response system for spam, harassment, and coordinated attacks. |
99
+ | [Anti Slop](https://github.com/peakoss/anti-slop) ⭐ | github-action | AGPL-3.0 | Configurable GitHub Action that detects and can close low-quality or AI-slop pull requests. |
100
+ | [GitHub AI Moderator](https://github.com/github/ai-moderator) | github-action | MIT | Model-powered Action that labels spam, link spam, and content it infers to be AI-generated. |
101
+ | [AI Community Moderator](https://github.com/benbalter/ai-community-moderator) | github-action | MIT | Moderates community interactions against a project's contributing guide and code of conduct. |
102
+ | [AI Assessment Comment Labeler](https://github.com/github/ai-assessment-comment-labeler) | github-action | MIT | Issue-intake Action that retrieves an AI assessment and applies configurable labels. |
103
+
104
+ ### Contributor Trust & Admission
105
+
106
+ Use explicit vouches or contribution history to control access without closing a project to everyone.
107
+
108
+ | Resource | Type | License | Why it matters |
109
+ | --- | --- | --- | --- |
110
+ | [Fossier](https://github.com/PThorpe92/fossier) | tool | MIT | Vouch-compatible workflow and CLI for reducing unsolicited pull-request spam. |
111
+ | [Vouch](https://github.com/mitchellh/vouch) ⭐ | tool | MIT | Community trust management based on explicit vouches before a participant can contribute. |
112
+ | [Good Egg](https://github.com/2ndSetAI/good-egg) | github-action | MIT | Scores pull-request authors using their contribution history across GitHub. |
113
+
114
+ ### Intake & Triage
115
+
116
+ Reduce review load with structured intake, labels, lifecycle automation, and emergency lockdowns.
117
+
118
+ | Resource | Type | License | Why it matters |
119
+ | --- | --- | --- | --- |
120
+ | [Labeler](https://github.com/actions/labeler) | github-action | MIT | Official Action for labeling pull requests from changed files and branch patterns. |
121
+ | [Stale](https://github.com/actions/stale) | github-action | MIT | Official Action for marking and optionally closing inactive issues and pull requests. |
122
+ | [Lock Threads](https://github.com/dessant/lock-threads) | github-action | MIT | Locks closed issues, pull requests, and discussions after a configurable period. |
123
+ | [Repo Lockdown](https://github.com/dessant/repo-lockdown) ⭐ | github-action | MIT | Emergency Action that immediately closes and locks new issues or pull requests. |
124
+ | [Issue Metrics](https://github.com/github-community-projects/issue-metrics) | github-action | MIT | Measures issue, pull-request, and discussion response times and generates a Markdown report. |
125
+
126
+ ### Repository Governance & Access
127
+
128
+ Keep security policies, branch protections, and repository settings consistent across projects.
129
+
130
+ | Resource | Type | License | Why it matters |
131
+ | --- | --- | --- | --- |
132
+ | [OpenSSF Allstar](https://github.com/ossf/allstar) ⭐ | github-app | Apache-2.0 | Continuously checks and enforces security policies across GitHub organizations. |
133
+ | [Safe Settings](https://github.com/github-community-projects/safe-settings) ⭐ | github-app | ISC | Centrally manages repository settings, branch protections, and teams with pull-request dry runs. |
134
+ | [Repository Settings App](https://github.com/repository-settings/app) | github-app | ISC | Synchronizes repository settings from a version-controlled `.github/settings.yml` file. |
135
+
136
+ ### Workflow & Supply-Chain Defense
137
+
138
+ Protect CI, dependencies, secrets, and merge paths from hostile or compromised contributions.
139
+
140
+ | Resource | Type | License | Why it matters |
141
+ | --- | --- | --- | --- |
142
+ | [Harden-Runner](https://github.com/step-security/harden-runner) ⭐ | github-action | Apache-2.0 | Monitors network egress, file integrity, and processes on GitHub-hosted runners. |
143
+ | [OpenSSF Scorecard](https://github.com/ossf/scorecard) ⭐ | tool | Apache-2.0 | Automated security-health checks for open-source projects and their dependencies. |
144
+ | [zizmor](https://github.com/zizmorcore/zizmor) ⭐ | tool | MIT | Static analysis for security and correctness problems in GitHub Actions workflows. |
145
+ | [pinact](https://github.com/suzuki-shunsuke/pinact) | tool | MIT | Pins GitHub Actions and reusable workflows to immutable commit hashes. |
146
+ | [Dependency Review Action](https://github.com/actions/dependency-review-action) ⭐ | github-action | MIT | Blocks pull requests that introduce vulnerable dependencies or disallowed licenses. |
147
+ | [TruffleHog](https://github.com/trufflesecurity/trufflehog) | tool | AGPL-3.0 | Finds and verifies leaked credentials before they become a maintainer incident. |
148
+ | [PRevent](https://github.com/apiiro/PRevent) | github-app | MIT | Detects suspicious pull-request changes that may indicate malicious code. |
149
+ | [OSV-Scanner](https://github.com/google/osv-scanner) ⭐ | tool | Apache-2.0 | Scans lockfiles, SBOMs, and source artifacts against the OSV vulnerability database. |
150
+ | [Gitleaks](https://github.com/gitleaks/gitleaks) ⭐ | tool | MIT | Detects secrets in Git history, directories, files, and standard input. |
151
+
152
+ ### Policies & Playbooks
153
+
154
+ Set expectations before problems arrive and respond consistently when they do.
155
+
156
+ | Resource | Type | License | Why it matters |
157
+ | --- | --- | --- | --- |
158
+ | [Open Source AI Contribution Policies](https://github.com/melissawm/open-source-ai-contribution-policies) ⭐ | awesome-list | CC0-1.0 | Comparative catalog of how open-source projects govern AI-generated contributions. |
159
+ | [OpenSSF AI-Slop Best-Practices Work Item](https://github.com/ossf/wg-vulnerability-disclosures/issues/178) | working-group | N/A | Open work item developing practices for low-quality AI security reports and contributions; not a finalized standard. |
160
+
161
+ <!-- catalog:end -->
162
+
163
+ Released under the [MIT License](LICENSE). Separate Vietnamese and Japanese catalog views remain in [README.vi.md](README.vi.md) and [README.ja.md](README.ja.md).
@@ -0,0 +1,191 @@
1
+ {
2
+ "schema_version": 1,
3
+ "rules": [
4
+ {
5
+ "id": "MD-GOV-001",
6
+ "title": "Repository security policy is missing",
7
+ "default_severity": "medium",
8
+ "description": "Reporters may disclose vulnerabilities publicly or abandon reports when no supported private route is documented.",
9
+ "safe_remediation": "Add SECURITY.md with supported versions, a private reporting route, response expectations, and a warning not to disclose secrets publicly.",
10
+ "help_anchor": "md-gov-001",
11
+ "mappings": [
12
+ {"framework": "OpenSSF Scorecard", "id": "Security-Policy", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#security-policy"}
13
+ ]
14
+ },
15
+ {
16
+ "id": "MD-GOV-002",
17
+ "title": "CODEOWNERS boundary is missing",
18
+ "default_severity": "medium",
19
+ "description": "Repository control-plane files can be changed without an explicit ownership boundary.",
20
+ "safe_remediation": "Add real owners for workflows, issue templates, the security policy, and CODEOWNERS itself, then enforce owner review separately where appropriate.",
21
+ "help_anchor": "md-gov-002",
22
+ "mappings": [
23
+ {"framework": "OpenSSF Scorecard", "id": "Code-Review", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#code-review"},
24
+ {"framework": "OpenSSF Scorecard", "id": "Branch-Protection", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection"}
25
+ ]
26
+ },
27
+ {
28
+ "id": "MD-GOV-003",
29
+ "title": "CODEOWNERS does not explicitly cover .github",
30
+ "default_severity": "medium",
31
+ "description": "A broad ownership rule can be weakened without an explicit review boundary for workflows and repository automation.",
32
+ "safe_remediation": "Add a specific /.github/ ownership rule naming an eligible, active owner and verify that repository rules enforce the intended review.",
33
+ "help_anchor": "md-gov-003",
34
+ "mappings": [
35
+ {"framework": "OpenSSF Scorecard", "id": "Code-Review", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#code-review"}
36
+ ]
37
+ },
38
+ {
39
+ "id": "MD-GOV-004",
40
+ "title": "Structured issue form is missing",
41
+ "default_severity": "low",
42
+ "description": "Unstructured reports can omit reproduction evidence and increase maintainer triage cost.",
43
+ "safe_remediation": "Add a non-destructive YAML issue form requesting reproduction steps, expected behavior, and relevant versions, and route vulnerabilities privately.",
44
+ "help_anchor": "md-gov-004",
45
+ "mappings": []
46
+ },
47
+ {
48
+ "id": "MD-GOV-005",
49
+ "title": "Machine-readable dependency update policy is missing",
50
+ "default_severity": "low",
51
+ "description": "Pinned Actions and packages can remain on vulnerable versions when no update mechanism or review cadence is configured.",
52
+ "safe_remediation": "Configure Dependabot or Renovate for the repository's real ecosystems and review update pull requests before merging.",
53
+ "help_anchor": "md-gov-005",
54
+ "mappings": [
55
+ {"framework": "OpenSSF Scorecard", "id": "Dependency-Update-Tool", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#dependency-update-tool"}
56
+ ]
57
+ },
58
+ {
59
+ "id": "MD-GOV-006",
60
+ "title": "Branch-protection expectations are not documented locally",
61
+ "default_severity": "note",
62
+ "description": "Maintainers cannot compare the intended review and merge boundary with the external repository configuration.",
63
+ "safe_remediation": "Document expected reviews, checks, force-push restrictions, bypass owners, and emergency procedure, then verify actual settings with read-only API access.",
64
+ "help_anchor": "md-gov-006",
65
+ "mappings": [
66
+ {"framework": "OpenSSF Scorecard", "id": "Branch-Protection", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection"}
67
+ ]
68
+ },
69
+ {
70
+ "id": "MD-WF-001",
71
+ "title": "Workflow has no top-level token boundary",
72
+ "default_severity": "medium",
73
+ "description": "A future job can inherit broader repository-default GITHUB_TOKEN permissions than intended.",
74
+ "safe_remediation": "Add permissions: {} at workflow level and grant only required permissions per job, then test the workflow before merging.",
75
+ "help_anchor": "md-wf-001",
76
+ "mappings": [
77
+ {"framework": "OpenSSF Scorecard", "id": "Token-Permissions", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions"},
78
+ {"framework": "CWE", "id": "CWE-269", "url": "https://cwe.mitre.org/data/definitions/269.html"}
79
+ ]
80
+ },
81
+ {
82
+ "id": "MD-WF-002",
83
+ "title": "Workflow grants write-all token permissions",
84
+ "default_severity": "high",
85
+ "description": "A compromised Action or command can use unnecessary write authority to modify sensitive repository resources.",
86
+ "safe_remediation": "Replace write-all with an empty default and enumerate only the exact job-level write permissions required.",
87
+ "help_anchor": "md-wf-002",
88
+ "mappings": [
89
+ {"framework": "OpenSSF Scorecard", "id": "Token-Permissions", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions"},
90
+ {"framework": "CWE", "id": "CWE-269", "url": "https://cwe.mitre.org/data/definitions/269.html"}
91
+ ]
92
+ },
93
+ {
94
+ "id": "MD-WF-003",
95
+ "title": "GitHub Action is not pinned to a full commit SHA",
96
+ "default_severity": "medium",
97
+ "description": "A mutable tag or branch can move to compromised code without a reviewed workflow change.",
98
+ "safe_remediation": "Resolve the reviewed release to a full commit SHA, retain the release tag in a comment, verify provenance, and automate reviewed updates.",
99
+ "help_anchor": "md-wf-003",
100
+ "mappings": [
101
+ {"framework": "OpenSSF Scorecard", "id": "Pinned-Dependencies", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#pinned-dependencies"},
102
+ {"framework": "CWE", "id": "CWE-829", "url": "https://cwe.mitre.org/data/definitions/829.html"}
103
+ ]
104
+ },
105
+ {
106
+ "id": "MD-WF-004",
107
+ "title": "Privileged event checks out attacker-influenced code",
108
+ "default_severity": "high",
109
+ "description": "A fork or attacker-controlled event can influence code executed in a context with base-repository authority.",
110
+ "safe_remediation": "Separate metadata handling from code execution and run contributor code only under pull_request with read-only permissions and no secrets.",
111
+ "help_anchor": "md-wf-004",
112
+ "mappings": [
113
+ {"framework": "OpenSSF Scorecard", "id": "Dangerous-Workflow", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#dangerous-workflow"},
114
+ {"framework": "CWE", "id": "CWE-829", "url": "https://cwe.mitre.org/data/definitions/829.html"}
115
+ ]
116
+ },
117
+ {
118
+ "id": "MD-WF-005",
119
+ "title": "Untrusted input can reach secrets or write authority",
120
+ "default_severity": "critical",
121
+ "description": "Attacker-controlled pull-request content can plausibly reach credentials or repository-changing authority.",
122
+ "safe_remediation": "Remove secrets and writes from the untrusted path, isolate contributor-code execution, and pass only validated artifacts or metadata to privileged stages.",
123
+ "help_anchor": "md-wf-005",
124
+ "mappings": [
125
+ {"framework": "OpenSSF Scorecard", "id": "Dangerous-Workflow", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#dangerous-workflow"},
126
+ {"framework": "CWE", "id": "CWE-829", "url": "https://cwe.mitre.org/data/definitions/829.html"}
127
+ ]
128
+ },
129
+ {
130
+ "id": "MD-WF-006",
131
+ "title": "Checkout may persist a write-capable token",
132
+ "default_severity": "medium",
133
+ "description": "A later command or compromised build step can recover a persisted credential and use its repository authority.",
134
+ "safe_remediation": "Set persist-credentials: false unless authenticated Git is required, then isolate that operation in a narrow least-privilege job.",
135
+ "help_anchor": "md-wf-006",
136
+ "mappings": [
137
+ {"framework": "OpenSSF Scorecard", "id": "Token-Permissions", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions"}
138
+ ]
139
+ },
140
+ {
141
+ "id": "MD-WF-007",
142
+ "title": "Untrusted event data is interpolated into a shell command",
143
+ "default_severity": "high",
144
+ "description": "Attacker-controlled event text can alter the generated shell program and execute unintended commands in the job.",
145
+ "safe_remediation": "Assign the expression to an environment variable or pass it as a reviewed action input, then quote the shell variable for the selected shell.",
146
+ "help_anchor": "md-wf-007",
147
+ "mappings": [
148
+ {"framework": "CWE", "id": "CWE-78", "url": "https://cwe.mitre.org/data/definitions/78.html"}
149
+ ]
150
+ },
151
+ {
152
+ "id": "MD-WF-008",
153
+ "title": "Privileged workflow executes a pull-request artifact",
154
+ "default_severity": "critical",
155
+ "description": "A workflow_run consumer can execute content produced by untrusted pull-request code while holding secrets or write authority.",
156
+ "safe_remediation": "Verify and parse the artifact as untrusted data, or rebuild it from trusted source inside the privileged workflow; never execute the downloaded artifact.",
157
+ "help_anchor": "md-wf-008",
158
+ "mappings": [
159
+ {"framework": "OpenSSF Scorecard", "id": "Dangerous-Workflow", "url": "https://github.com/ossf/scorecard/blob/main/docs/checks.md#dangerous-workflow"},
160
+ {"framework": "CWE", "id": "CWE-829", "url": "https://cwe.mitre.org/data/definitions/829.html"}
161
+ ]
162
+ },
163
+ {
164
+ "id": "MD-MOD-001",
165
+ "title": "Destructive moderation is enabled",
166
+ "default_severity": "high",
167
+ "description": "A false positive or configuration mistake can close, lock, or delete legitimate contributor work without human review.",
168
+ "safe_remediation": "Switch to report-only mode, require human review, measure false positives, and publish an appeal path before enabling enforcement.",
169
+ "help_anchor": "md-mod-001",
170
+ "mappings": []
171
+ },
172
+ {
173
+ "id": "MD-MOD-002",
174
+ "title": "Identity or history proxy is used for contributor risk",
175
+ "default_severity": "medium",
176
+ "description": "A legitimate newcomer can be penalized for identity or history characteristics unrelated to the submitted change.",
177
+ "safe_remediation": "Disable the proxy and evaluate reproducibility, scope, tests, policy compliance, and contributor responsiveness instead.",
178
+ "help_anchor": "md-mod-002",
179
+ "mappings": []
180
+ },
181
+ {
182
+ "id": "MD-MOD-003",
183
+ "title": "Destructive moderation has no discoverable appeal path",
184
+ "default_severity": "medium",
185
+ "description": "A moderation false positive can become permanent when contributors have no documented route to human reconsideration.",
186
+ "safe_remediation": "Document the appeal channel, human owner, response expectation, reopening process, and emergency disable path.",
187
+ "help_anchor": "md-mod-003",
188
+ "mappings": []
189
+ }
190
+ ]
191
+ }
@@ -0,0 +1,65 @@
1
+ """PEP 517 backend that generates the embedded CLI module before packaging."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import subprocess
6
+ import sys
7
+ from pathlib import Path
8
+
9
+ from setuptools import build_meta as _setuptools
10
+
11
+ ROOT = Path(__file__).resolve().parent
12
+
13
+
14
+ def _prepare() -> None:
15
+ module = ROOT / "generated/maintainer_defense_kit.py"
16
+ builder = ROOT / "scripts/build_standalone.py"
17
+ if builder.is_file():
18
+ subprocess.run([sys.executable, str(builder)], cwd=ROOT, check=True)
19
+ elif not module.is_file():
20
+ raise RuntimeError("source distribution is missing the generated CLI module")
21
+
22
+
23
+ def build_wheel(wheel_directory, config_settings=None, metadata_directory=None):
24
+ _prepare()
25
+ return _setuptools.build_wheel(wheel_directory, config_settings, metadata_directory)
26
+
27
+
28
+ def build_sdist(sdist_directory, config_settings=None):
29
+ _prepare()
30
+ return _setuptools.build_sdist(sdist_directory, config_settings)
31
+
32
+
33
+ def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None):
34
+ _prepare()
35
+ return _setuptools.prepare_metadata_for_build_wheel(metadata_directory, config_settings)
36
+
37
+
38
+ def get_requires_for_build_wheel(config_settings=None):
39
+ _prepare()
40
+ return _setuptools.get_requires_for_build_wheel(config_settings)
41
+
42
+
43
+ def get_requires_for_build_sdist(config_settings=None):
44
+ _prepare()
45
+ return _setuptools.get_requires_for_build_sdist(config_settings)
46
+
47
+
48
+ if hasattr(_setuptools, "build_editable"):
49
+ def build_editable(wheel_directory, config_settings=None, metadata_directory=None):
50
+ _prepare()
51
+ return _setuptools.build_editable(
52
+ wheel_directory, config_settings, metadata_directory
53
+ )
54
+
55
+
56
+ def get_requires_for_build_editable(config_settings=None):
57
+ _prepare()
58
+ return _setuptools.get_requires_for_build_editable(config_settings)
59
+
60
+
61
+ def prepare_metadata_for_build_editable(metadata_directory, config_settings=None):
62
+ _prepare()
63
+ return _setuptools.prepare_metadata_for_build_editable(
64
+ metadata_directory, config_settings
65
+ )