Skip to content

docs(rfcs): RFC-AI-0008 — the coordinator role (multi-hop relay of security reports) - #1135

Merged
potiuk merged 3 commits into
apache:mainfrom
ppkarwasz:rfc/ai-0008-coordinator
Sep 7, 2026
Merged

docs(rfcs): RFC-AI-0008 — the coordinator role (multi-hop relay of security reports)#1135
potiuk merged 3 commits into
apache:mainfrom
ppkarwasz:rfc/ai-0008-coordinator

Conversation

@ppkarwasz

Copy link
Copy Markdown
Member

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:

  • CVD role vocabulary (finder / reporter / coordinator / vendor), with a strictly pairwise relay contract instead of named chain levels;
  • the coordinator profile (functions + termination authority + upstreams + downstream directory);
  • provenance fields carried verbatim across hops (finder credits, append-only reporter chain, origin references, embargo terms);
  • the handling-identifier exchange between hops;
  • bidirectional forwarder adapters (emit templates + detect signatures in one directory, closing the current two-repo drift gap);
  • coordinator-mode skills (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.md still documented contact_handle: '@raboof' as the shipping default, contradicting the newer org-level security@apache.org in organizations/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 in docs/security/forwarder-routing-policy.md is 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

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 potiuk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 verdict is structurally excluded from coordinator functions rather than merely discouraged.
  • No PRINCIPLES.md edit, 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.

Comment thread docs/rfcs/RFC-AI-0008.md
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)
@potiuk
potiuk merged commit 40b8ba3 into apache:main Sep 7, 2026
9 checks passed
potiuk added a commit that referenced this pull request Sep 8, 2026
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)
@ppkarwasz
ppkarwasz deleted the rfc/ai-0008-coordinator branch September 8, 2026 04:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants