Quality

RFC Compliance Gate Report

Source: scripts/dev/rfc_requirements.py, rfc/short/*.md, docs/features/rfc-status.md, rfc/audit/*.json, and .claude/hooks/pretool-writeedit.py.

Gate verdictOK

0 open gate issues

Gated MUSTs2,720

166 enrolled RFCs, 2,575 resolved test tags

Declared gaps535

Across 84 RFCs, all forced into the public ledger

AI test guardON

2 verify stage mentions, approval token required

Semantic verdicts52

0 stale, 2,668 missing and therefore not claimed

Current gate output:

rfc-requirements OK: 2720 gated MUST-level requirement(s) across 166 enrolled RFC(s); 2575 test tag(s) resolved.

Requirement buckets

BucketCountShareSource condition
Positive and negative tests97435.8%positive tag + negative tag
One polarity plus reason37013.6%{single-polarity} annotation + required tag
Not applicable84130.9%{not-applicable} annotation
Declared gap53519.7%{gap} annotation + public ledger disclosure

Gap disclosure

Public status for RFCs with gapsRFCs
Partial61
Experimental16
Supported5
Not supported1
Unsupported1

Supported rows that still disclose a gap

  • RFC 1350: RFC1350-2-3 unmet (Sorcerer's Apprentice fix): sendAndWaitACK retransmits DATA on any non-matching ACK (handler.go:407) instead of silently ignoring a duplicate or stale ACK.
  • RFC 4301: One MUST gap (RFC4301-4.4.1.1-1): SPD selectors are limited to IP-prefix + next-layer-protocol; TCP/UDP/SCTP port and ICMP type/code selectors are not modeled or projected (internal/component/ike/dataplane/dataplane.go:110-130; engine/initiator.go:325 tsToIPNet drops ports).
  • RFC 6396: One MUST gap gated in rfc/short/rfc6396.md [RFC6396-4.4.3-1]: the live BGP4MP writer always emits the BGP4MP_MESSAGE_AS4 subtype and records the on-wire message verbatim without checking the session's negotiated 4-byte-AS capability, so a message from an OLD (2-byte) peer carries a 2-byte AS_PATH mislabeled as AS4. RIB-path AS_PATH is unaffected (canonicalized to 4-byte).
  • RFC 7313: Four MUST-level receive-side gaps annotated in `rfc/short/rfc7313.md`: RFC7313-4-4/4-5 -- a received BoRR/EoRR is log-only (internal/component/bgp/plugins/rib/rib.go:751-756), so ze marks no Adj-RIB-In routes stale and purges none; and RFC7313-4-6/4-7 -- neither the send nor receive path applies a Graceful-Restart End-of-RIB gate to BoRR emission or acceptance.
  • RFC 7911: One MUST gap, gated in `rfc/short/rfc7911.md`: on re-advertisement ze preserves the ingress Path Identifier (internal/component/bgp/reactor/forward_body.go copies the received path-id and the egress RIB key rib_structured.go carries it) rather than minting its own per RFC7911-2-2, so a re-advertised path is not assigned a fresh Path Identifier.

Top gap clusters

RFCDeclared gapsPublic status
RFC 901251Partial
DRAFT-IETF-BESS-MUP-SAFI37Partial
RFC 166125Partial
RFC 427121Partial
RFC 983020Partial
RFC 213118Partial
RFC 716617Unsupported
RFC 457716Not supported
RFC 743215Partial
RFC 588014Partial
RFC 866514Partial
RFC 951413Partial

AI guard and gate inputs

InputProducerObserved value
Requirement sourcerfc/short/*.md2,720 gated MUST-level requirements
Enrollmentrfc/enrolled.txt166 enrolled RFCs
Test tagsinternal/, pkg/, test/2,575 resolved tags
Public ledgerdocs/features/rfc-status.md84 RFCs with gaps, 5 Supported with Remaining
Semantic auditsrfc/audit/*.json52 fresh, 0 stale, 2,668 missing
AI write/edit guard.claude/hooks/pretool-writeedit.pyON
Verify integrationMakefile + scripts/status/verify_run.go2 verify stages, make target present

Check results

Generated artifacts: data/rfc-compliance.json, quality/rfc-compliance/index.html, and quality/rfc-compliance/index.md.

CheckOpen issues
Enrolment ratchet0
New summary ratchet0
Retired requirement ratchet0
Coverage polarity ratchet0
Summary parse0
Requirement ID allocation0
Requirement coverage0
Public claim agreement0
Semantic audit freshness0
Generated ledger freshness0