docs(rfcs): RFC-AI-0008 — the coordinator role (multi-hop relay of security reports) - #1135
Conversation
Names the coordinator persona of coordinated vulnerability disclosure and defines its profile by function and termination authority, never by chain position: a pairwise relay contract, provenance fields carried across hops, the handling-identifier exchange, bidirectional forwarder adapters, and the coordinator-mode skills generalized from the ASF Security team's out-of-tree pipeline. Assisted-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018SKtoF3YBbXye9jmnZp1Pt
Fallout from the RFC-AI-0008 review: - tools/forwarder-relay/README.md presented '@raboof' as the shipping contact_handle default, contradicting the newer org-level security@apache.org declared in organizations/ASF/organization.md (apache#622). The shared inbox is now the documented default; an individual liaison's handle stays as the local override example. - docs/security/forwarder-routing-policy.md worked example updated to cite the same default. - CONTRIBUTING.md directory-tree comment no longer enumerates RFC numbers (was stuck at 0002-0004), so it cannot go stale. Assisted-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018SKtoF3YBbXye9jmnZp1Pt
potiuk
left a comment
There was a problem hiding this comment.
Reviewed as a design read rather than a code review, since this is a Draft that implements nothing.
Checks that came back clean:
- Numbering is correct — 0002 through 0007 exist, 0008 is free.
- Conforms to the sibling RFC shape (Abstract / Status / Motivation / Proposal / Drawbacks / Alternatives considered / Out of scope / References, per RFC-AI-0007), and adds a Security model section, which is right for this subject.
- Confidentiality: no real CVE IDs, no other ASF project named in a vulnerability context, no personal handles beyond the liaison discussion. The one address hit is CNCERT/CC's public intake, which is correct in a forwarder-adapter context.
- HITL is preserved — "drafts only; a human sends", and
verdictis structurally excluded from coordinator functions rather than merely discouraged. - No
PRINCIPLES.mdedit, so no amendment vote is triggered. - There is no RFC index that needs a new row; the existing 0006/0007 references elsewhere are contextual rather than enumerative.
On the review-fallout half: moving contact_handle to the shared security@apache.org inbox and demoting the individual handle to an override example is the right direction — it takes a single person out of shipped config while keeping the liaison pattern documented.
The Drawbacks section naming the single-reference-adopter overfitting risk is good practice; that is the failure mode most likely to bite here.
One substantive point inline, about §15 and the Security model section. I believe the RFC already complies via the per-hop dedup scoping — the issue is that the compliance is implicit where §0's is explicit. Left open for you rather than resolved, since it is a design question rather than a nit.
🤖 This review was drafted by an AI-assisted tool and may contain mistakes. It has been reviewed and confirmed by an Apache Magpie maintainer before submission. See CONTRIBUTING.md for what this project considers a maintainer review.
The Security model section addressed §0 head-on but left §15 unmentioned, even though §15 is the principle the coordinator persona most directly reinterprets: a coordinator is by construction a node that holds many projects' reports and correlates across parties. The RFC already complied — "Deduplication composes per hop" bounds each hop's scope to its own inbox and archive, and forbids treating an upstream "already deduplicated" claim as a reason to skip the local check. But that compliance was implicit, so a reader checking the Draft against the principles could not tell whether it was designed or incidental. PRINCIPLES.md says the stricter reading wins where a principle admits more than one, which makes the intended reading worth stating rather than inferring. Adds a Security-model bullet naming §15 and separating its two clauses: "other projects' vulnerabilities never appear at all" is read as public-surface-scoped (§15 governs what leaves the archive, not what it stores), while "cross-project correlations stay on the channel they arrived on" is the binding clause that per-hop dedup scoping satisfies. Also adds the matching References entry alongside the existing §0 row. No normative change — this states the position the Proposal already takes. Generated-by: Claude Code (Opus 5)
The marker sat at a1cff44, 17 commits behind main. Bumping it alone would claim those commits are described by the specs, so the drift is closed first. Specs updated for what actually shipped: - meta-and-quality-tooling: skill-evals errors, rather than passing, when a case's CLI produced no gradeable output (#1161). - security-reporting: the tracker dashboard projects the current partial bucket to its end-of-bucket value, splitting RATE series (accumulate from zero) from LEVEL series (carry over), and deliberately not projecting mean-based signals (#1158). - project-agnosticism: <PROJECT> and <project> are two placeholders holding different values, and the lint carries both spellings plus spaced variants (#1154). - adapters: the forwarder relay's contact_handle defaults to an org-level shared inbox rather than a named individual (#1135). The multi-hop coordinator case is designed in RFC-AI-0008 and unimplemented. - issue-management-family: the family's eval suites, and the note that --cli runs belong outside a credential-denying sandbox (#1145). Commits needing no spec change: #1152, #1143 and #1156 updated their own specs in-commit; #1149, #1147, #1151 are behaviour-preserving bug fixes; #1155 and #1141 are CI and dependency chores; #1159's spec edits landed with it; #1144 removes hardcoded literals that no spec asserted. One genuine gap recorded rather than papered over: no spec covers marketplace distribution or the dev-version stamping rule from #1160, which is load-bearing because `claude plugin update` compares version strings, not commit SHAs. Logged in adoption-and-setup as wanting its own spec. Generated-by: Claude Code (Opus 5)
What
Adds RFC-AI-0008 (status: Draft): names the coordinator persona of coordinated vulnerability disclosure — the party that receives, triages on behalf of others, and forwards to the owning vendor — and defines:
security-coordinator-import/-assess) generalized from the ASF Security team's out-of-tree pipeline, which becomes the reference adopter.Review fallout (second commit)
Cross-reference verification of the RFC against the tree surfaced two pre-existing inconsistencies, fixed here:
tools/forwarder-relay/README.mdstill documentedcontact_handle: '@raboof'as the shipping default, contradicting the newer org-levelsecurity@apache.orginorganizations/ASF/organization.md(feat(organizations): introduce Organization-adapter entity + document adapters #622). The shared inbox is now the documented default; an individual liaison's handle remains the override example. The one stale worked example indocs/security/forwarder-routing-policy.mdis updated to match.CONTRIBUTING.md's directory-tree comment enumerated "RFC-AI-0002, 0003, 0004" (stale since 0005); it now says "RFC-AI-0002 onward".Modified paragraphs are reflowed to semantic line breaks per #1108.
🤖 Generated with Claude Code
https://claude.ai/code/session_018SKtoF3YBbXye9jmnZp1Pt