NPS-Release

English 中文版

NPS RFC Process

This directory holds Requests for Comments (RFCs) — the formal record of how a non-trivial change to the NPS suite was proposed, debated, and decided. An RFC is a thinking document, not an implementation plan: it exists so the argument survives the decision.


When an RFC is required

An RFC MUST be opened before any PR that:

An RFC SHOULD be opened (but may be skipped with shepherd consent) for:

An RFC is NOT required for:

Rule of thumb: if landing the PR would force every SDK to either adopt or explicitly reject the change, it needs an RFC.


Lifecycle

  Draft ─────► Accepted ─────► Active ─────► Superseded
   │              │
   │              └──► Withdrawn   (author pulls it)
   └──► Rejected
State Meaning How to change
Draft Author is writing / revising; PR open against dev Author pushes commits
Accepted Merged to dev; implementation may begin across SDKs Shepherd merges PR after approval threshold met
Active Implementation landed in ≥1 reference SDK; frame/spec changes integrated Follow-up PR flips header; requires ≥1 SDK + green CI
Superseded A later RFC replaces this one The replacing RFC sets Supersedes: and this one is edited to set Superseded-By:
Withdrawn Author no longer pursues it; preserved as history Author edits header
Rejected Discussion reached “no” consensus; preserved as history Shepherd edits header with summary of why

Rejected and Withdrawn RFCs are never deleted — the argument is the deliverable.


Approval threshold

Acceptance requires, at minimum:

Extended windows:

Change type Minimum discussion window
New frame / new Reserved bit assignment 14 days
Breaking wire-format change 21 days
Raising min_agent_version 21 days + one month deprecation notice

Numbering & filenames

NNNN is a zero-padded four-digit number assigned on PR open, monotonically increasing. Never reuse a number, even for Withdrawn / Rejected RFCs.


How to open an RFC

  1. Copy template.mdNPS-RFC-{next}-{slug}.md
  2. Copy template.cn.mdNPS-RFC-{next}-{slug}.cn.md and translate
  3. Fill in the front matter (Status: Draft)
  4. Open PR against dev, title format: rfc: NPS-RFC-{NNNN} — {one-line summary}
  5. Tag at least one shepherd for review
  6. Iterate on the PR; squash-merge is fine, commit history inside the RFC itself is what matters

Once merged to dev with Status: Accepted, implementation work can start in any SDK. The RFC’s Status: is updated to Active in a follow-up PR once at least one reference SDK ships the change.


Index

Number Title Status Accepted Supersedes
0001 Add NCP connection preamble for native-mode traffic identification Draft
0002 Adopt X.509 + ACME for NID certificates Accepted 2026-05-27
0003 Three-tier Agent identity assurance levels for anti-scraping / trust gating Draft
0004 Append-only NID reputation log (Certificate Transparency for Agents) Draft
0005 Reputation Policy Enforcement Accepted 2026-05-27

References