This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow-steward.git
The following commit(s) were added to refs/heads/main by this push:
new b21be7a4 docs(spec-loop): sync specs with contributed functionality
(#539)
b21be7a4 is described below
commit b21be7a4e4bbb92e0a2f402d6011e0231e0f9804
Author: Justin Mclean <[email protected]>
AuthorDate: Sat Jun 27 12:42:55 2026 +1000
docs(spec-loop): sync specs with contributed functionality (#539)
* docs(spec-loop): sync specs with contributed functionality
- triage-mode: add issue-stale-sweep (now shipped), security-issue-triage,
security-issue-import-from-scan, security-issue-import-via-forwarder,
contributor-activity-sweep, committer-onboarding to Where it lives;
update Known gaps to remove resolved stale-issue gap and fix
contributor-growth cross-reference
- mentoring-mode: add mentoring-welcome (3rd Mentoring skill) to Where
it lives and Validation; update acceptance criteria and Known gaps to
reflect it shipped; remove first-contact welcome from unbuilt list
- release-management-lifecycle: reflect release-announce-draft shipped
(experimental, Step 11); update Known gaps and Validation accordingly
- overview: update Mentoring to "3 skills"; add release-announce-draft
to Drafting experimental row
- meta-and-quality-tooling: update skill-and-tool-validator description
to include eval-coverage soft check and Python license-header check;
update spec-validator description to include SPDX header, Known gaps,
Validation code block, and path-existence checks
Generated-by: Claude (Opus 4.7)
* docs(spec-loop): sync specs with skills shipped since the last sync point
Fold-on to #539's sync: main shipped 7 skills after this branch's sync
point (296b72f), so several specs misstated reality. Refresh them and
advance .last-sync to the current main tip.
- repo-health-family.md: family is now three skills deep —
workflow-security-audit
and dependency-audit shipped alongside ci-runner-audit.
- triage-mode.md: add issue-deduplicate + issue-backlog-stats to the
inventory;
retire the "no general-issue dedup / backlog dashboard" gap and the
"repo-health one-off" gap.
- release-management-lifecycle.md: 4 of 10 skills shipped
(release-announce-draft,
release-verify-rc, release-vote-tally, release-promote); status proposed
-> experimental.
- overview.md: release-management line now experimental (4/10 shipped).
- .last-sync: 296b72f -> current main.
Generated-by: Claude Code (Opus 4.8)
---------
Co-authored-by: Jarek Potiuk <[email protected]>
---
tools/spec-loop/.last-sync | 2 +-
tools/spec-loop/specs/mentoring-mode.md | 42 ++++++++-----
tools/spec-loop/specs/meta-and-quality-tooling.md | 10 +++-
tools/spec-loop/specs/overview.md | 6 +-
.../specs/release-management-lifecycle.md | 55 ++++++++++-------
tools/spec-loop/specs/repo-health-family.md | 33 ++++++-----
tools/spec-loop/specs/triage-mode.md | 68 +++++++++++++---------
7 files changed, 131 insertions(+), 85 deletions(-)
diff --git a/tools/spec-loop/.last-sync b/tools/spec-loop/.last-sync
index a65a14fc..eed91d31 100644
--- a/tools/spec-loop/.last-sync
+++ b/tools/spec-loop/.last-sync
@@ -1 +1 @@
-e4f79fc8d2470f2120ee5b6df1215d0f8159874f
+764cdb89fda0bcd62b039bbb96543aab017ba704
diff --git a/tools/spec-loop/specs/mentoring-mode.md
b/tools/spec-loop/specs/mentoring-mode.md
index 98e768d4..282b7b0f 100644
--- a/tools/spec-loop/specs/mentoring-mode.md
+++ b/tools/spec-loop/specs/mentoring-mode.md
@@ -9,7 +9,7 @@ mode: Mentoring
source: >
MISSION.md § Technical scope (Mentoring) — "the highest-value
project-side mode and the one off-the-shelf agent tooling skips".
- docs/modes.md § Mentoring (experimental, 1 skill). Spec exists at
+ docs/modes.md § Mentoring (experimental, 3 skills). Spec exists at
docs/mentoring/spec.md ahead of any skill code. MISSION.md names
onboarding latency as one of the two loudest ecosystem complaints;
authoring newcomer-ready good first issues targets it directly.
@@ -22,6 +22,9 @@ acceptance:
- The good-first-issue authoring skill drafts net-new, newcomer-ready
issues (scope, code pointers, contributing-doc links, effort estimate)
and never files them without maintainer confirmation.
+ - The first-contact welcome skill greets first-time contributors with
+ project-convention pointers, never posts without confirmation, and
+ skips repeat contributors.
---
# Mentoring mode
@@ -60,6 +63,14 @@ a project can offer a first-time contributor.
confirmation before any issue is filed via `gh`. Ships `mode: Mentoring`
+ `experimental`, with an eval suite under
`tools/skill-evals/evals/good-first-issue-author/`.
+- Skill: `mentoring-welcome` — drafts a first-contact orientation comment
+ for a first-time contributor on a newly opened issue or PR. Detects
+ first-time authorship via the GitHub `author_association` field and
+ drafts a welcome with contributing-guide link, community-norm pointers,
+ and expected next steps. Does not post for repeat contributors; waits
+ for explicit maintainer confirmation before posting. Ships `mode:
+ Mentoring` + `experimental`, with an eval suite under
+ `tools/skill-evals/evals/mentoring-welcome/`.
## Behaviour & contract
@@ -101,28 +112,29 @@ a project can offer a first-time contributor.
```bash
test -f docs/mentoring/spec.md
test -f .claude/skills/magpie-good-first-issue-author/SKILL.md
+test -f .claude/skills/magpie-mentoring-welcome/SKILL.md
uv run --project tools/skill-and-tool-validator --group dev
skill-and-tool-validate
uv run --project tools/skill-evals skill-eval
tools/skill-evals/evals/good-first-issue-author/
+uv run --project tools/skill-evals skill-eval
tools/skill-evals/evals/mentoring-welcome/
```
## Known gaps
-- **`experimental` — no adopter pilot has run.** The first skill
- (`pr-management-mentor`) shipped; shape may change as adopter pilots
- and contributor-sentiment evaluations land.
+- **`experimental` — no adopter pilot has run.** All three shipped skills
+ (`pr-management-mentor`, `good-first-issue-author`, `mentoring-welcome`)
+ may change shape as adopter pilots and contributor-sentiment evaluations
+ land.
- **`good-first-issue-author` shipped `experimental`; no adopter pilot
has authored a live good first issue through it yet.** The suitability
and readiness thresholds may shift once real backlog candidates run
through it. The curation counterpart (relabeling the *existing* backlog
as good-first-issue candidates) is still unspecced.
-- **The family is one shipped skill deep against a core MISSION stream.**
- Mentoring is named as one of the four day-to-day work streams, but only
- `pr-management-mentor` ships (plus the Mentoring-flagged
- `good-first-issue-author`). Two newcomer-facing capabilities are
- designed nowhere yet: a *first-contribution welcome / orientation* skill
- that greets a contributor's first issue or PR with project-convention
- pointers and a clean hand-off, and a *contributor-to-committer path*
- tracker that reads the nomination-evidence signals
- `contributor-nomination` already gathers and surfaces when a contributor
- is approaching readiness. Both are candidate work items for the plan
- pass.
+- **`mentoring-welcome` shipped `experimental`; no adopter pilot run.**
+ The welcome tone, detecting first-timer vs. repeat contributor, and
+ the content of the orientation template may shift once live threads run
+ through it.
+- **One newcomer-facing capability is still unbuilt.** A
+ *contributor-to-committer path* tracker that reads the
+ nomination-evidence signals `contributor-nomination` already gathers
+ and surfaces when a contributor is approaching readiness remains a
+ candidate work item for the plan pass.
diff --git a/tools/spec-loop/specs/meta-and-quality-tooling.md
b/tools/spec-loop/specs/meta-and-quality-tooling.md
index fd15bd79..5d1fb604 100644
--- a/tools/spec-loop/specs/meta-and-quality-tooling.md
+++ b/tools/spec-loop/specs/meta-and-quality-tooling.md
@@ -32,8 +32,9 @@ trustworthy as it grows.
## Where it lives
- `tools/skill-and-tool-validator/` — validates `SKILL.md` frontmatter
(required
- `name`, `description`, `license`) and tool definitions, internal link
integrity, and
- placeholder conventions. CLI: `skill-and-tool-validate`.
+ `name`, `description`, `license`) and tool definitions, internal link
integrity,
+ placeholder conventions, license headers on tool Python files, and
eval-coverage
+ (soft check: warns when a skill has no eval suite). CLI:
`skill-and-tool-validate`.
- `tools/skill-evals/` — harness for measuring skill behaviour.
- `tools/sandbox-lint/` — lints the sandbox/permissions configuration.
- `tools/dashboard-generator/` — read-only HTML dashboards over campaign
@@ -44,7 +45,10 @@ trustworthy as it grows.
build iterations to mechanically select the next work item.
- `tools/spec-validator/` — validates spec-loop spec frontmatter
(required keys, valid `status`/`kind`/`mode` values, body-section
- presence); the spec-side counterpart to `skill-and-tool-validator`.
+ presence, `Known gaps` section required in functional specs,
+ SPDX-License-Identifier header, Validation code block present,
+ filesystem paths in Validation blocks must exist under repo root);
+ the spec-side counterpart to `skill-and-tool-validator`.
- Skills: `write-skill` (author/update a skill), `optimize-skill`
(restructure an existing skill or sweep a set: split oversized
`SKILL.md`, lift project-specific values into placeholders, harden
diff --git a/tools/spec-loop/specs/overview.md
b/tools/spec-loop/specs/overview.md
index aebc581f..9f875ca5 100644
--- a/tools/spec-loop/specs/overview.md
+++ b/tools/spec-loop/specs/overview.md
@@ -31,8 +31,8 @@ Each mode is an independently toggleable set of skills.
Maturity mirrors
| Mode | Spec | Maturity |
|---|---|---|
| Triage | [triage-mode.md](triage-mode.md) | stable (security) / experimental
(PR, issue, contributor-nomination) |
-| Mentoring | [mentoring-mode.md](mentoring-mode.md) | experimental (2 skills)
|
-| Drafting | [drafting-mode.md](drafting-mode.md) | stable (security) /
experimental (issue, audit-finding-fix) |
+| Mentoring | [mentoring-mode.md](mentoring-mode.md) | experimental (3 skills)
|
+| Drafting | [drafting-mode.md](drafting-mode.md) | stable (security) /
experimental (issue, audit-finding-fix, release-announce-draft) |
| Pairing | [pairing-mode.md](pairing-mode.md) | experimental (2 skills) |
> **Auto-merge** is the fifth MISSION mode but is deliberately **off** by
@@ -45,7 +45,7 @@ Each mode is an independently toggleable set of skills.
Maturity mirrors
| Area | Spec |
|---|---|
| Security-issue lifecycle (the load-bearing use case) |
[security-issue-lifecycle.md](security-issue-lifecycle.md) |
-| Release-management lifecycle (proposed, spec-first) |
[release-management-lifecycle.md](release-management-lifecycle.md) |
+| Release-management lifecycle (experimental — 4 of 10 skills shipped) |
[release-management-lifecycle.md](release-management-lifecycle.md) |
| Privacy-LLM gate + PII redaction |
[privacy-llm-gate.md](privacy-llm-gate.md) |
| Agent isolation / layered sandbox |
[agent-isolation-sandbox.md](agent-isolation-sandbox.md) |
| CVE tooling | [cve-tooling.md](cve-tooling.md) |
diff --git a/tools/spec-loop/specs/release-management-lifecycle.md
b/tools/spec-loop/specs/release-management-lifecycle.md
index 0edbb84b..85f696ae 100644
--- a/tools/spec-loop/specs/release-management-lifecycle.md
+++ b/tools/spec-loop/specs/release-management-lifecycle.md
@@ -3,7 +3,7 @@
---
title: Release-management lifecycle (end-to-end)
-status: proposed
+status: experimental
kind: feature
mode: Drafting
source: >
@@ -11,8 +11,9 @@ source: >
standard process within 3 months of resolution adoption"). README.md
§ Skill families (release-management, proposed). Designed spec-first in
docs/release-management/ (README.md, process.md, spec.md) plus the
- adopter scaffold projects/_template/release-management-config.md. No
- release-* skill code exists yet.
+ adopter scaffold projects/_template/release-management-config.md.
+ Four of the ten skills have since shipped (release-announce-draft,
+ release-verify-rc, release-vote-tally, release-promote).
acceptance:
- The family's design (14-step process, per-skill state-change
boundaries, adopter contract) is reviewable independently of any
@@ -55,11 +56,20 @@ code lands.
`projects/_template/release-build.md`, `projects/_template/pmc-roster.md`,
`projects/_template/site-repo.md`, and the shared
`projects/_template/release-trains.md`.
-- Skills (all `proposed`, none implemented yet): `release-prepare`,
- `release-keys-sync`, `release-rc-cut`, `release-verify-rc`,
- `release-vote-draft`, `release-vote-tally`, `release-promote`,
- `release-announce-draft`, `release-archive-sweep`,
- `release-audit-report`.
+- Skills (four shipped, all `experimental`): `release-announce-draft`
+ (`mode: Drafting`) drafts the `[ANNOUNCE]` body and proposes the
+ site-bump PR for a promoted release (Step 11), enforcing the one-hour
+ promote-wait gate, `@apache.org` address reminder, Download Page link
+ constraint, and no-send / no-auto-merge boundaries; `release-verify-rc`
+ (`mode: Triage`) runs read-only RC pre-flight (signatures, checksums,
+ RAT headers, NOTICE/LICENSE, prohibited binaries, version consistency,
+ Step 6); `release-vote-tally` (`mode: Triage`) classifies +1/0/-1
+ binding vs non-binding once the window closes and drafts the `[RESULT]`
+ (Step 9); `release-promote` (`mode: Drafting`) emits the backend-shaped
+ staging→release promotion command set for a vote-passed release
+ (Step 10). The remaining six skills (`release-prepare`,
+ `release-keys-sync`, `release-rc-cut`, `release-vote-draft`,
+ `release-archive-sweep`, `release-audit-report`) are still `proposed`.
- Adapters it will read/draft through: `tools/github`, `tools/ponymail`
(vote threads), `tools/gmail` (announce/vote drafts), plus the project's
`svn` dist tree as a distribution backend.
@@ -117,23 +127,24 @@ code lands.
test -f docs/release-management/spec.md
test -f docs/release-management/process.md
test -f projects/_template/release-management-config.md
+test -f .claude/skills/magpie-release-announce-draft/SKILL.md
+test -f .claude/skills/magpie-release-verify-rc/SKILL.md
+test -f .claude/skills/magpie-release-vote-tally/SKILL.md
+test -f .claude/skills/magpie-release-promote/SKILL.md
uv run --project tools/skill-and-tool-validator --group dev
skill-and-tool-validate
+uv run --project tools/skill-evals skill-eval
tools/skill-evals/evals/release-announce-draft/
```
## Known gaps
-- **`release-verify-rc` shipped** — read-only RC pre-flight skill
- (Step 6) landed with eval suite (13 cases across 6 steps); status
- updated to `experimental`.
-- **Nine `release-*` skills remain unimplemented** (`release-prepare`,
- `release-keys-sync`, `release-rc-cut`, `release-vote-draft`,
- `release-vote-tally`, `release-promote`, `release-announce-draft`,
- `release-archive-sweep`, `release-audit-report`; `release-announce-draft`
- landed earlier, `release-vote-draft` and `release-vote-tally` are
- in-flight on local branches). The plan pass turns each
- un-implemented skill in the `docs/release-management/` table into a
- work item.
+- **Four of ten skills have shipped** (`release-announce-draft`,
+ `release-verify-rc`, `release-vote-tally`, `release-promote`), all
+ `experimental` with eval suites. **Six remain `proposed`**
+ (`release-prepare`, `release-keys-sync`, `release-rc-cut`,
+ `release-vote-draft`, `release-archive-sweep`, `release-audit-report`).
+ The plan pass turns each un-implemented skill in the
+ `docs/release-management/` table into a work item.
- **Health-evidence promotion criteria are unmeasured.** No adopter has
- cut a release through the family yet, so the RM/binding-voter evidence
- window that would justify default-on or a state-changing lane has no
- data behind it.
+ cut a full release through the family yet, so the RM/binding-voter
+ evidence window that would justify default-on or a state-changing lane
+ has no data behind it.
diff --git a/tools/spec-loop/specs/repo-health-family.md
b/tools/spec-loop/specs/repo-health-family.md
index da8c9046..b23eb29d 100644
--- a/tools/spec-loop/specs/repo-health-family.md
+++ b/tools/spec-loop/specs/repo-health-family.md
@@ -38,14 +38,17 @@ grouped, prioritised report → wait for confirmation before
any write.
## Where it lives
-- Skill: `ci-runner-audit` — first shipped member. Reads GitHub Actions
- workflow files across one repo, an explicit set, one Apache project's
- repos, or the full Apache GitHub org and surfaces obsolete
- GitHub-hosted runner labels and macOS architecture mismatches. Read-only;
- no workflow files are modified. Ships `mode: Triage` + `experimental`.
-- Design docs: `docs/repo-health/README.md` — family overview, candidate
- skills (workflow-security-audit, dependency-audit, license-compliance-audit,
- flaky-test-triage), and the planned adopter-config scaffold.
+- Skills (three shipped): `ci-runner-audit` (obsolete GitHub-hosted runner
+ labels and macOS architecture mismatches), `workflow-security-audit`
+ (zizmor-backed Actions security findings — injection, excessive
+ permissions, unpinned external actions, fork-secret leaks), and
+ `dependency-audit` (known-vulnerable / outdated dependencies). Each reads
+ across one repo, an explicit set, one Apache project's repos, or the full
+ Apache GitHub org, is read-only (no workflow file, manifest, or lock file
+ is modified), and ships `mode: Triage` + `experimental` with an eval suite.
+- Design docs: `docs/repo-health/README.md` — family overview, remaining
+ candidate skills (license-compliance-audit, flaky-test-triage), and the
+ planned adopter-config scaffold.
- Planned adopter config: `projects/_template/repo-health-config.md` —
per-skill switches (deprecated-runner families, zizmor rule classes,
dependency-manager selection, SPDX expression, flaky-test window).
@@ -97,17 +100,19 @@ grouped, prioritised report → wait for confirmation before
any write.
```bash
test -f .claude/skills/magpie-ci-runner-audit/SKILL.md
+test -f .claude/skills/magpie-workflow-security-audit/SKILL.md
+test -f .claude/skills/magpie-dependency-audit/SKILL.md
uv run --project tools/skill-and-tool-validator --group dev
skill-and-tool-validate
```
## Known gaps
-- **Family is one skill deep.** `ci-runner-audit` is the sole shipped
- member. Four candidates are designed in `docs/repo-health/README.md`:
- `workflow-security-audit` (zizmor-backed, highest priority — the tool
- is already in pre-commit), `dependency-audit`, `license-compliance-audit`,
- and `flaky-test-triage`. Each is a separate build item, sequenced after
- `ci-runner-audit`'s pilot evaluation confirms the family shape.
+- **Family is three skills deep.** `ci-runner-audit`,
+ `workflow-security-audit`, and `dependency-audit` have shipped (read-only,
+ `experimental`, each with an eval suite). Two candidates remain designed
+ in `docs/repo-health/README.md`: `license-compliance-audit` and
+ `flaky-test-triage`. Each is a separate build item, sequenced after the
+ shipped members' pilot evaluation confirms the family shape.
- **No adopter-config scaffold yet.**
`projects/_template/repo-health-config.md`
is planned alongside the first candidate skill; the keys are sketched in
`docs/repo-health/README.md § Adopter contract`.
diff --git a/tools/spec-loop/specs/triage-mode.md
b/tools/spec-loop/specs/triage-mode.md
index 41f1027a..cbc0e64e 100644
--- a/tools/spec-loop/specs/triage-mode.md
+++ b/tools/spec-loop/specs/triage-mode.md
@@ -34,14 +34,30 @@ suggestion the human signs off on.
`pr-management-quick-merge` (read-only express-lane surfacing of
trivial, low-risk PRs a maintainer can review in seconds).
Reference implementation: `tools/pr-management-stats/`.
-- General issues: `issue-triage`, `issue-reassess`, `issue-reproducer`.
- Companion reporting skill: `issue-reassess-stats` (read-only dashboard
- over `verdict.json` files produced by `issue-reassess` campaigns).
+- General issues: `issue-triage`, `issue-reassess`, `issue-reproducer`,
+ `issue-stale-sweep` (configurable inactivity sweep: nudge or
+ propose-close after a warning window; waits for confirmation before
+ posting), `issue-deduplicate` (merge two open issues describing the same
+ root cause — proposes a close + cross-reference, waits for confirmation).
+ Companion reporting skills: `issue-reassess-stats` (read-only dashboard
+ over `verdict.json` files produced by `issue-reassess` campaigns) and
+ `issue-backlog-stats` (read-only maintainer dashboard over the open
+ general-issue backlog — health rating, age/staleness, area pressure,
+ triage funnel).
- Contributor readiness: `contributor-nomination` (read-only brief for a
named contributor — activity breadth, consistency, and nomination-
- evidence prose for a committer or PMC thread).
+ evidence prose for a committer or PMC thread);
+ `contributor-activity-sweep` (read-only GitHub activity card for a
+ named contributor over a configurable window);
+ `committer-onboarding` (post-vote ICLA/account/permissions/welcome
+ checklist for committer and PMC promotions).
- Security inbound: `security-issue-import`, `-import-from-pr`,
- `-import-from-md`, `security-issue-deduplicate`,
+ `-import-from-md`, `-import-from-scan` (triage-first scanner-output
+ import via pluggable scan-format adapters),
+ `-import-via-forwarder` (relay-broker variant: reports relayed by an
+ upstream broker such as the ASF security team),
+ `security-issue-triage` (batch-triage open tracker issues carrying
+ `needs triage`), `security-issue-deduplicate`,
`security-issue-invalidate`, `security-issue-sync`,
`security-cve-allocate`.
- Adapters it reads through: `tools/github`, `tools/jira`,
@@ -80,25 +96,23 @@ uv run --project tools/skill-and-tool-validator --group dev
skill-and-tool-valid
- PR and general-issue triage are `experimental` — no adopter-pilot eval
has run; behaviour may change.
-- **General-issue triage lacks the dedupe, stale-handling, and
- backlog-dashboard coverage the security side already has.** There is
- no general-issue deduplication skill (only `security-issue-deduplicate`
- exists), no stale-issue management (nudge, then propose-close after a
- warning window), and no general open-issue backlog dashboard
- (`pr-management-stats` covers PRs; `issue-reassess-stats` only covers
- reassess-campaign `verdict.json` output). Each is a candidate work item.
-- **The contributor-growth skills are not yet a formalised family.**
- `contributor-nomination`, `contributor-activity-sweep`,
- `committer-onboarding`, and `good-first-issue-author` (Mentoring) span
- the contributor-to-committer path but are catalogued ad hoc;
- `contributor-activity-sweep` and `committer-onboarding` are not yet
- referenced by any spec. Missing members of that path: PMC-member
- nomination (distinct from committer), emeritus / inactive-committer
- handling, and contributor offboarding. Worth deciding whether this
- becomes a named family.
-- **Repo-health audits are a one-off with no family around them.**
- `ci-runner-audit` is a standalone read-only audit (obsolete runner
- labels, macOS arch mismatches) with no sibling skills. A repo-health
- family is a candidate: GitHub Actions workflow security audit (the repo
- already runs `zizmor` in pre-commit), dependency-update triage,
- license / NOTICE compliance, and flaky-test detection.
+- **General-issue triage gained its deduplication skill and backlog
+ dashboard.** `issue-deduplicate` (general-issue dedup, parallel to
+ `security-issue-deduplicate`) and `issue-backlog-stats` (open-issue
+ backlog dashboard, parallel to `pr-management-stats`) have now shipped
+ (`experimental`); `issue-stale-sweep` provides stale-handling /
+ close-proposal. No adopter-pilot eval has run on the general-issue
+ family yet, so behaviour may change.
+- **The contributor-growth skills span the path but are not yet a named
+ family.** `contributor-nomination`, `contributor-activity-sweep`,
+ `committer-onboarding`, and `good-first-issue-author` (Mentoring) are
+ now all catalogued in the specs. Missing members of the
+ contributor-to-committer path: PMC-member nomination (distinct from
+ committer), emeritus / inactive-committer handling, and contributor
+ offboarding. Worth deciding whether this becomes a named family with
+ its own spec.
+- **Repo-health audits are now a three-skill family.** `ci-runner-audit`,
+ `workflow-security-audit` (zizmor-backed), and `dependency-audit` have
+ shipped (read-only, `experimental`); see
+ [repo-health-family.md](repo-health-family.md). Remaining candidates:
+ license / NOTICE compliance and flaky-test detection.