Repository navigation
Conversation
Not every ASF project has a dedicated security@<project>.apache.org list (Apache Mahout, for one), yet Step 4b defaulted security_list to it, so adopt could commit a project.md that routes reports to a list that does not exist. Adopt now looks for the list in the repo's docs and on https://www.apache.org/security/projects.html, then asks where security reports go: security@ is recommended only when found, private@ otherwise. Generated-by: Claude Code (Opus 5.5)
Generated-by: Claude Code (Opus 5.5)
potiuk
left a comment
There was a problem hiding this comment.
Good catch. Detecting the list instead of inventing security@<project>.apache.org is clearly right. But recommending private@ as security_list has a privacy side effect that needs handling before this lands.
private@ as security_list skips the private-list LLM gate (adopt.md:343)
security-issue-import treats <security-list> as its inbox. It runs privacy-llm-check without --reads-private-list, because the security list holds only reports, under the third-party-PII redaction contract (plugins/magpie-security/skills/issue-import/SKILL.md, Step 0 item 4). AGENTS.md keeps PMC-private content under a stricter rule:
<private-list>content never reaches a non-approved LLM.
With security_list = private@<project>.apache.org, the import sweep reads the entire PMC list (votes, nominations, conduct threads) as candidate reports, under the weaker gate. Either the option needs to carry the private-list gate with it, for example by having the security skills pass --reads-private-list whenever security_list == private_list, or the recommendation for a project without a dedicated list should be to ask Infra for one, with private@ offered only as an explicitly flagged fallback. Details inline.
Smaller observations
- The "evidence is unclear" branch has no eval case. A fixture where
SECURITY.mdnamessecurity@foo.apache.orgbut the ASF page shows the project undersecurity@apache.orgwould pin which source wins (inline). install.md:1292(Step 9) still listssecurity_listamong the values "auto-sourced in Step 4b". It no longer is, so on that path it falls through to the generic "ask for absent values" prompt rather than the detect-and-recommend rule. Dropping it from that list and pointing at theadopt.mdrule there too would close the gap.
CI is still running.
This review was drafted by an AI-assisted tool and
confirmed by an Apache Magpie maintainer. The findings
below are observations, not blockers; an Apache Magpie
maintainer — a real person — will take the next look at the
PR. If you think a finding is mis-applied, please reply on
the PR and a maintainer will weigh in.More on how Apache Magpie handles maintainer review:
Contributing guide.
| Then one structured question, with these options: | ||
|
|
||
| - `security@<project>.apache.org` — recommend it only when step 1 or 2 found it, and say where. | ||
| - `private@<project>.apache.org` — the PMC list; recommend it when the dedicated list was not found or the evidence is unclear. |
There was a problem hiding this comment.
Choosing private@ here makes it the import skill's inbox, and security-issue-import runs privacy-llm-check without --reads-private-list. Every PMC-private thread would then be read as a candidate report under the security-list contract. Either make the security skills run the private-list gate when security_list == private_list, or recommend requesting a dedicated security@ list from Infra and keep private@ as an explicitly flagged fallback that names this consequence.
| 1. **The repo's own docs** — grep `SECURITY*`, `CONTRIBUTING*`, `README*` and `docs/` for `security@<project>.apache.org`. | ||
| 2. **The ASF's public list** — fetch <https://www.apache.org/security/projects.html>. | ||
| A project with a dedicated list appears there with `security@<project>.apache.org`; | ||
| one without appears with `security@apache.org`, or not at all. |
There was a problem hiding this comment.
What wins when the two sources disagree? For example, SECURITY.md names security@foo.apache.org but the ASF page lists Foo under security@apache.org. The prose says recommend private@ when the evidence is unclear, but none of the three fixtures exercises that branch. A fourth case would pin it.
Summary
setup adopt(viainstall.mdStep 4b) filled insecurity_listassecurity@<project>.apache.orgfor every ASF project. Not every project has that list. Apache Mahout doesn't, so adopting Magpie there wrote aproject.mdthat sends security reports to an address that doesn't exist.SECURITY*,CONTRIBUTING*,README*,docs/) and on https://www.apache.org/security/projects.html.security@<project>is the recommended option only when the check found it. Otherwiseprivate@<project>is recommended. The maintainer can also enter a custom address.Type of change
.claude/skills/<name>/) — eval fixtures updated belowtools/<system>/*.md)tools/*/withpyproject.toml)docs/,README.md,CONTRIBUTING.md)projects/_template/)prek, workflows, validators)Test plan
prek runpasses on every changed file (not--all-files)uv run pytest/ruff check/mypypassesskill-eval --cli "claude -p" --exact tools/skill-evals/evals/setup/adopt-security-list/fixtures/.setup/adopt-security-listhas three cases: a dedicated list is found (recommendsecurity@), no dedicated list (recommendprivate@), and a non-ASF project (adopt doesn't ask).RFC-AI-0004 compliance
organization: ASF.Linked issues
Found while adopting Magpie in apache/mahout#1519.
Notes for reviewers (optional)
adopt.mdStep 4b.install.mdStep 4b no longer has a default and points to it.security@apache.org, so a project shown that way counts as having no dedicated list. I leftsecurity@apache.orgout of the options: the template treats it as the org-level forwarding address, not a per-project list. A maintainer who wants it can still enter it as the custom address.🤖 Generated with Claude Code