Add 6 new analysis pages and 5 CLI reports

New web UI pages with Plotly charts:
- /sources: cross-source comparison (ratings, categories by standards body)
- /false-positives: profiling of 73 false positives (box plots, terms)
- /trends: temporal evolution (submissions, ratings, safety ratio over time)
- /complexity: draft complexity matrix (correlations, scatter plots)
- /idea-analysis: idea novelty deep dive (sunburst, distribution, shared ideas)
- /citations: enhanced with influence analysis and BCP dependency tabs

New CLI reports (ietf report <name>):
- sources, false-positives, citations, complexity, idea-analysis

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-08 20:35:32 +01:00
parent 8515e46d5d
commit dec8667193
8 changed files with 1517 additions and 63 deletions

211
data/reports/citations.md Normal file
View File

@@ -0,0 +1,211 @@
# Citation Influence & BCP Dependency Analysis
*Generated 2026-03-08 19:32 UTC — 360 of 761 drafts analyzed, 4231 total references (2443 RFC, 698 draft, 1090 BCP)*
## Top 20 Most-Cited RFCs
| # | RFC | Name | Cited By |
|--:|-----|------|--------:|
| 1 | RFC 2119 | Key words (MUST/SHALL/MAY) | 285 drafts |
| 2 | RFC 8174 | Key words update | 237 drafts |
| 3 | RFC 8446 | TLS 1.3 | 42 drafts |
| 4 | RFC 6749 | OAuth 2.0 | 36 drafts |
| 5 | RFC 9110 | HTTP Semantics | 34 drafts |
| 6 | RFC 8126 | | 26 drafts |
| 7 | RFC 8259 | JSON | 26 drafts |
| 8 | RFC 5280 | | 22 drafts |
| 9 | RFC 7519 | JWT | 22 drafts |
| 10 | RFC 9052 | COSE | 20 drafts |
| 11 | RFC 8949 | | 19 drafts |
| 12 | RFC 9528 | | 19 drafts |
| 13 | RFC 8392 | CWT | 18 drafts |
| 14 | RFC 7515 | JWS | 16 drafts |
| 15 | RFC 9000 | | 16 drafts |
| 16 | RFC 4648 | | 14 drafts |
| 17 | RFC 5234 | | 14 drafts |
| 18 | RFC 9334 | | 14 drafts |
| 19 | RFC 3986 | URIs | 13 drafts |
| 20 | RFC 6241 | | 13 drafts |
## Top 20 Most-Citing Drafts
Drafts with the highest outgoing reference count.
| # | Draft | Category | RFCs | Drafts | BCPs | Total |
|--:|-------|----------|-----:|-------:|-----:|------:|
| 1 | draft-templin-6man-aero3 | A2A protocols | 68 | 9 | 5 | 82 |
| 2 | draft-templin-intarea-aero2 | A2A protocols | 68 | 10 | 5 | 83 |
| 3 | draft-templin-intarea-aero | Autonomous netops | 59 | 10 | 4 | 73 |
| 4 | draft-ietf-anima-constrained-voucher | Agent identity/auth | 44 | 14 | 4 | 62 |
| 5 | draft-eggert-mailmaint-uaautoconf | Other | 41 | 2 | 5 | 48 |
| 6 | draft-ietf-anima-brski-prm | Other | 40 | 13 | 5 | 58 |
| 7 | draft-ietf-mailmaint-pacc | Other | 39 | 2 | 5 | 46 |
| 8 | draft-mozleywilliams-dnsop-bandaid | Agent discovery/reg | 37 | 4 | 4 | 45 |
| 9 | draft-ietf-ace-edhoc-oscore-profile | Agent identity/auth | 33 | 14 | 5 | 52 |
| 10 | draft-ietf-lamps-e2e-mail-guidance | Other | 26 | 11 | 4 | 41 |
| 11 | draft-ietf-tls-deprecate-obsolete-kex | Policy/governance | 25 | 1 | 4 | 30 |
| 12 | draft-ietf-ace-coap-est-oscore | Agent identity/auth | 24 | 4 | 3 | 31 |
| 13 | draft-ietf-lake-app-profiles | Data formats/interop | 24 | 6 | 6 | 36 |
| 14 | draft-ietf-emu-eap-edhoc | Other | 20 | 5 | 3 | 28 |
| 15 | draft-sipos-dtn-bp-safe | Other | 20 | 5 | 6 | 31 |
| 16 | draft-ietf-lake-authz | Agent identity/auth | 19 | 4 | 4 | 27 |
| 17 | draft-howe-sipcore-mcp-extension | A2A protocols | 18 | 0 | 4 | 22 |
| 18 | draft-ietf-httpbis-rfc6265bis | Other | 18 | 0 | 4 | 22 |
| 19 | draft-ietf-lamps-rfc5274bis | Other | 18 | 3 | 3 | 24 |
| 20 | draft-ietf-lamps-rfc7030-csrattrs | Data formats/interop | 18 | 0 | 3 | 21 |
## Influence Score (PageRank-style)
Drafts ranked by weighted sum of how often their cited RFCs are themselves cited.
| # | Draft | Category | Out-Degree | Influence Score |
|--:|-------|----------|----------:|---------:|
| 1 | draft-ietf-ace-edhoc-oscore-profile | Agent identity/auth | 52 | 930 |
| 2 | draft-ietf-anima-brski-prm | Other | 58 | 853 |
| 3 | draft-eggert-mailmaint-uaautoconf | Other | 48 | 844 |
| 4 | draft-ietf-mailmaint-pacc | Other | 46 | 842 |
| 5 | draft-ietf-anima-constrained-voucher | Agent identity/auth | 62 | 836 |
| 6 | draft-templin-intarea-aero2 | A2A protocols | 83 | 818 |
| 7 | draft-templin-6man-aero3 | A2A protocols | 82 | 809 |
| 8 | draft-templin-intarea-aero | Autonomous netops | 73 | 796 |
| 9 | draft-ietf-ace-coap-est-oscore | Agent identity/auth | 31 | 772 |
| 10 | draft-birkholz-verifiable-agent-conversations | AI safety/alignment | 24 | 759 |
| 11 | draft-gaikwad-woa | Agent discovery/reg | 22 | 731 |
| 12 | draft-sipos-dtn-bp-safe | Other | 31 | 728 |
| 13 | draft-ietf-lake-authz | Agent identity/auth | 27 | 722 |
| 14 | draft-ietf-lake-app-profiles | Data formats/interop | 36 | 718 |
| 15 | draft-ietf-emu-eap-edhoc | Other | 28 | 715 |
| 16 | draft-meunier-webbotauth-registry | Agent identity/auth | 25 | 693 |
| 17 | draft-ietf-httpbis-rfc6265bis | Other | 22 | 690 |
| 18 | draft-mishra-oauth-agent-grants | Agent identity/auth | 21 | 685 |
| 19 | draft-ravikiran-clawdentity-protocol | Agent identity/auth | 16 | 681 |
| 20 | draft-gaikwad-south-authorization | Agent identity/auth | 11 | 678 |
## Citation Density by Category
| Category | Drafts | Total Refs | Avg Refs/Draft |
|:---------|-------:|-----------:|---------------:|
| Data formats/interop | 16 | 266 | 16.6 |
| Other AI/agent | 1 | 15 | 15.0 |
| Agent identity/auth | 58 | 867 | 14.9 |
| Agent discovery/reg | 15 | 218 | 14.5 |
| Other | 116 | 1351 | 11.6 |
| AI safety/alignment | 11 | 118 | 10.7 |
| A2A protocols | 52 | 553 | 10.6 |
| Policy/governance | 16 | 170 | 10.6 |
| Autonomous netops | 36 | 348 | 9.7 |
| Model serving/inference | 12 | 106 | 8.8 |
| ML traffic mgmt | 24 | 201 | 8.4 |
| Human-agent interaction | 3 | 18 | 6.0 |
## Most-Referenced Drafts (Draft-to-Draft)
| # | Draft | Cited By |
|--:|-------|--------:|
| 1 | draft-ietf | 44 drafts |
| 2 | draft-rosenberg-ai-protocols | 14 drafts |
| 3 | draft-ietf-cose | 8 drafts |
| 4 | draft-ietf-moq-transport | 7 drafts |
| 5 | draft-ietf-oauth | 7 drafts |
| 6 | draft-ietf-pquip | 7 drafts |
| 7 | draft-ietf-tls | 7 drafts |
| 8 | draft-ietf-core | 6 drafts |
| 9 | draft-ietf-tls-hybrid-design | 5 drafts |
| 10 | draft-irtf-nmrg-ai-challenges | 5 drafts |
| 11 | draft-ietf-ace | 4 drafts |
| 12 | draft-ietf-aipref | 4 drafts |
| 13 | draft-ietf-lake | 4 drafts |
| 14 | draft-ietf-lake-authz | 4 drafts |
| 15 | draft-ietf-lamps-kyber-certificates | 4 drafts |
| 16 | draft-ietf-moq | 4 drafts |
| 17 | draft-ietf-pquip-pqt-hybrid-terminology | 4 drafts |
| 18 | draft-irtf | 4 drafts |
| 19 | draft-irtf-nmrg | 4 drafts |
| 20 | draft-irtf-nmrg-network-digital | 4 drafts |
---
## BCP Dependency Analysis
- **36** unique BCPs cited across the corpus
- **1090** total BCP citations
- **360** of 761 drafts (47.3%) cite at least one BCP
### All BCPs by Citation Count
| # | BCP | Cited By | Example Drafts |
|--:|-----|--------:|:---------------|
| 1 | BCP 78 | 360 | draft-zhang-agent-gap-network, draft-cui-ai-agent-task, draft-liu-agent-context-protocol +357 more |
| 2 | BCP 79 | 360 | draft-zhang-agent-gap-network, draft-cui-ai-agent-task, draft-liu-agent-context-protocol +357 more |
| 3 | BCP 14 | 278 | draft-zhang-agent-gap-network, draft-cui-ai-agent-task, draft-liu-agent-context-protocol +275 more |
| 4 | BCP 26 | 23 | draft-ietf-sshm-ssh-agent, draft-mzsg-rtgwg-agent-cross-device-comm-framework, draft-mao-rtgwg-agent-comm-protocol-gap-analysis +20 more |
| 5 | BCP 13 | 8 | draft-narvaneni-agent-uri, draft-birkholz-verifiable-agent-conversations, draft-gaikwad-woa +5 more |
| 6 | BCP 205 | 8 | draft-ietf-sshm-ssh-agent, draft-jurkovikj-httpapi-agentic-state, draft-sipos-dtn-bp-safe +5 more |
| 7 | BCP 106 | 7 | draft-ietf-anima-brski-prm, draft-aylward-daap-v2, draft-ra-emu-pqc-eapaka +4 more |
| 8 | BCP 222 | 4 | draft-mozleywilliams-dnsop-dnsaid, draft-eggert-mailmaint-uaautoconf, draft-mozleywilliams-dnsop-bandaid +1 more |
| 9 | BCP 35 | 4 | draft-narvaneni-agent-uri, draft-aylward-aiga-1, draft-aylward-aiga-2 +1 more |
| 10 | BCP 5 | 4 | draft-gaikwad-woa, draft-templin-intarea-aero2, draft-templin-intarea-aero +1 more |
| 11 | BCP 72 | 4 | draft-steele-agent-considerations, draft-sipos-dtn-bp-safe, draft-narajala-ans +1 more |
| 12 | BCP 100 | 2 | draft-ietf-lake-app-profiles, draft-ietf-ace-edhoc-oscore-profile |
| 13 | BCP 153 | 2 | draft-templin-intarea-aero2, draft-templin-6man-aero3 |
| 14 | BCP 195 | 2 | draft-ietf-anima-brski-prm, draft-ietf-tls-deprecate-obsolete-kex |
| 15 | BCP 56 | 2 | draft-gupta-httpapi-events-query, draft-chen-nmrg-semantic-inference-routing |
| 16 | BCP 81 | 2 | draft-ietf-netconf-configuration-tracing, draft-williams-netmod-lm-hierarchy-topology |
| 17 | BCP 126 | 1 | draft-pbs-sidrops-roaanycast |
| 18 | BCP 147 | 1 | draft-khatri-sipcore-call-transfer-fail-response |
| 19 | BCP 152 | 1 | draft-liang-agentdns |
| 20 | BCP 169 | 1 | draft-pbs-sidrops-roaanycast |
| 21 | BCP 185 | 1 | draft-pbs-sidrops-roaanycast |
| 22 | BCP 199 | 1 | draft-gont-dhcwg-dhcpv6-iids |
| 23 | BCP 215 | 1 | draft-ietf-netconf-configuration-tracing |
| 24 | BCP 219 | 1 | draft-tjw-dbound2-problem-statement |
| 25 | BCP 225 | 1 | draft-mishra-oauth-agent-grants |
| 26 | BCP 232 | 1 | draft-liang-agentdns |
| 27 | BCP 237 | 1 | draft-ietf-dnsop-ds-automation |
| 28 | BCP 240 | 1 | draft-meyerzuselha-oauth-web-message-response-mode |
| 29 | BCP 242 | 1 | draft-templin-6man-mla |
| 30 | BCP 38 | 1 | draft-li-spring-rdma-multicast-over-srv6 |
| 31 | BCP 40 | 1 | draft-liang-agentdns |
| 32 | BCP 51 | 1 | draft-ietf-pim-zeroconf-mcast-addr-alloc-ps |
| 33 | BCP 52 | 1 | draft-ietf-lake-authz |
| 34 | BCP 67 | 1 | draft-howe-sipcore-mcp-extension |
| 35 | BCP 74 | 1 | draft-yang-nmrg-mcp-nm |
| 36 | BCP 95 | 1 | draft-gupta-httpapi-events-query |
### BCP Usage by Category
| Category | BCP Refs | Unique BCPs | Top BCPs |
|:---------|--------:|-----------:|:---------|
| Other | 351 | 18 | BCP78(116), BCP79(116), BCP14(94) |
| Agent identity/auth | 177 | 10 | BCP78(58), BCP79(58), BCP14(49) |
| A2A protocols | 157 | 9 | BCP78(52), BCP79(52), BCP14(44) |
| Autonomous netops | 96 | 7 | BCP78(36), BCP79(36), BCP14(20) |
| ML traffic mgmt | 67 | 5 | BCP78(24), BCP79(24), BCP14(17) |
| Data formats/interop | 61 | 11 | BCP78(16), BCP79(16), BCP14(14) |
| Agent discovery/reg | 54 | 12 | BCP78(15), BCP79(15), BCP14(13) |
| Policy/governance | 48 | 8 | BCP78(16), BCP79(16), BCP14(11) |
| Model serving/inference | 38 | 7 | BCP78(12), BCP79(12), BCP14(9) |
| AI safety/alignment | 32 | 7 | BCP78(11), BCP79(11), BCP14(6) |
| Human-agent interaction | 6 | 2 | BCP78(3), BCP79(3) |
| Other AI/agent | 3 | 3 | BCP14(1), BCP78(1), BCP79(1) |
### Top BCP Co-Citations
BCP pairs most frequently cited together in the same draft.
| BCP A | BCP B | Co-cited in |
|:------|:------|----------:|
| BCP 78 | BCP 79 | 360 drafts |
| BCP 14 | BCP 78 | 278 drafts |
| BCP 14 | BCP 79 | 278 drafts |
| BCP 26 | BCP 78 | 23 drafts |
| BCP 26 | BCP 79 | 23 drafts |
| BCP 14 | BCP 26 | 22 drafts |
| BCP 13 | BCP 14 | 8 drafts |
| BCP 13 | BCP 78 | 8 drafts |
| BCP 13 | BCP 79 | 8 drafts |
| BCP 14 | BCP 205 | 8 drafts |
| BCP 205 | BCP 78 | 8 drafts |
| BCP 205 | BCP 79 | 8 drafts |
| BCP 106 | BCP 14 | 7 drafts |
| BCP 106 | BCP 78 | 7 drafts |
| BCP 106 | BCP 79 | 7 drafts |

View File

@@ -1,5 +1,5 @@
# Draft Complexity Matrix # Draft Complexity Matrix
*Generated 2026-03-08 18:05 UTC — 688 rated drafts (57.6% have page data)* *Generated 2026-03-08 19:32 UTC — 688 rated drafts (57.6% have page data)*
## Correlation Matrix ## Correlation Matrix

View File

@@ -1,5 +1,5 @@
# False Positive Profile Report # False Positive Profile Report
*Generated 2026-03-08 18:04 UTC* *Generated 2026-03-08 19:32 UTC*
## Overview ## Overview

View File

@@ -0,0 +1,146 @@
# Idea Novelty Deep Dive
*Generated 2026-03-08 19:32 UTC — 742 ideas, 365 scored, avg novelty 3.02*
**Embedding coverage**: 419/742 (56.5%)
## Novelty Score Distribution
| Score | Count | Bar |
|------:|------:|-----|
| 1 | 0 | |
| 2 | 95 | ▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃ |
| 3 | 167 | ▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ |
| 4 | 102 | ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ |
| 5 | 1 | █ |
## Ideas by Type
| Type | Count | Avg Novelty |
|------|------:|------------:|
| architecture | 199 | 3.01 |
| protocol | 175 | 3.16 |
| requirement | 102 | 2.73 |
| mechanism | 90 | 3.22 |
| pattern | 81 | 2.81 |
| extension | 73 | 2.98 |
| framework | 18 | 3.33 |
| format | 1 | 2.00 |
| process | 1 | 0.00 |
| guidance | 1 | 0.00 |
| methodology | 1 | 0.00 |
## Top 20 Most Novel Ideas
| # | Score | Idea | Type | Draft |
|--:|------:|------|------|-------|
| 1 | 5 | Real-Virtual Agent Protocol (RVP) | protocol | [zhang-rvp-problem-statement](https://datatracker.ietf.org/doc/draft-zhang-rvp-problem-statement/) |
| 2 | 4 | AI-Disclosure HTTP Response Header | mechanism | [abaris-aicdh](https://datatracker.ietf.org/doc/draft-abaris-aicdh/) |
| 3 | 4 | Federated AI Service Operations Model | pattern | [aft-ai-traffic](https://datatracker.ietf.org/doc/draft-aft-ai-traffic/) |
| 4 | 4 | Federated AI Service Operations Model | pattern | [ai-traffic](https://datatracker.ietf.org/doc/draft-ai-traffic/) |
| 5 | 4 | AI-Native Network Protocol (AINP) | protocol | [ainp-protocol](https://datatracker.ietf.org/doc/draft-ainp-protocol/) |
| 6 | 4 | Early Retransmit Mechanism | mechanism | [allman-tcp-early-rexmt](https://datatracker.ietf.org/doc/draft-allman-tcp-early-rexmt/) |
| 7 | 4 | Bitcoin-Anchored AGI Identity Protocol | protocol | [architect-cittamarket](https://datatracker.ietf.org/doc/draft-architect-cittamarket/) |
| 8 | 4 | Tiered Risk-Based Governance for Autonomous AI Age | architecture | [aylward-aiga-1](https://datatracker.ietf.org/doc/draft-aylward-aiga-1/) |
| 9 | 4 | Tiered Risk-Based Governance for Autonomous AI Age | architecture | [aylward-aiga-2](https://datatracker.ietf.org/doc/draft-aylward-aiga-2/) |
| 10 | 4 | Distributed AI Accountability Protocol | protocol | [aylward-daap-v2](https://datatracker.ietf.org/doc/draft-aylward-daap-v2/) |
| 11 | 4 | Post-Discovery Authorization Handshake | protocol | [barney-caam](https://datatracker.ietf.org/doc/draft-barney-caam/) |
| 12 | 4 | Zero Trust Runtime Agent Architecture | architecture | [berlinai-vera](https://datatracker.ietf.org/doc/draft-berlinai-vera/) |
| 13 | 4 | Evidence-based Autonomy Maturity Model | mechanism | [berlinai-vera](https://datatracker.ietf.org/doc/draft-berlinai-vera/) |
| 14 | 4 | Asynchronous Remote Key Generation Algorithm | protocol | [bradleylundberg-cfrg-arkg](https://datatracker.ietf.org/doc/draft-bradleylundberg-cfrg-arkg/) |
| 15 | 4 | AI Inference Fabric Benchmarking Methodology | mechanism | [calabria-bmwg-ai-fabric-inference-b](https://datatracker.ietf.org/doc/draft-calabria-bmwg-ai-fabric-inference-bench/) |
| 16 | 4 | Agentic Hypercall Protocol | pattern | [campbell-agentic-http](https://datatracker.ietf.org/doc/draft-campbell-agentic-http/) |
| 17 | 4 | Intent-Based Just-in-Time Authorization | architecture | [chen-agent-decoupled-authorization-](https://datatracker.ietf.org/doc/draft-chen-agent-decoupled-authorization-model/) |
| 18 | 4 | Semantic Inference Routing Protocol | protocol | [chen-nmrg-semantic-inference-routin](https://datatracker.ietf.org/doc/draft-chen-nmrg-semantic-inference-routing/) |
| 19 | 4 | Structured OAuth Scope Syntax for Agent Permission | extension | [chen-oauth-scope-agent-extensions](https://datatracker.ietf.org/doc/draft-chen-oauth-scope-agent-extensions/) |
| 20 | 4 | Cosmos Protocol: Trust-Native Identity and Communi | protocol | [cosmos-protocol-specification](https://datatracker.ietf.org/doc/draft-cosmos-protocol-specification/) |
## Ideas per Draft
| Ideas/Draft | Drafts |
|------------:|-------:|
| 1 | 563 |
| 2 | 82 |
| 3 | 5 |
### Most Prolific Drafts
| Draft | Ideas | Score |
|-------|------:|------:|
| cui-ai-agent-discovery-invocation | 3 | 3.85 |
| duda-dnsop-dns-did | 3 | -- |
| kartha-internet20-ainative | 3 | 3.45 |
| melnikov-sasl2 | 3 | 3.70 |
| iso-iec-pwi-26200 | 3 | 3.20 |
| aft-ai-traffic | 2 | 3.05 |
| ahn-nmrg-5g-security-i2nsf-framework | 2 | 3.50 |
| ahn-opsawg-5g-security-i2nsf-framework | 2 | 3.25 |
| ai-traffic | 2 | -- |
| an-nmrg-i2icf-cits | 2 | 3.70 |
## Shared Ideas (86 ideas in 2+ drafts)
| Idea | Appearances | Drafts |
|------|------------:|--------|
| MCP Extensions for Network Equipment Management | 5 | draft-zeng-mcp-network-mgmt, draft-zeng-mcp-troubleshooting, draft-zw-nmrg-mcp-network-mgmt, draft-zw-opsawg-mcp-network-mgmt, draft-zw-rtgwg-mcp-network-mgmt |
| IT Trustworthiness Ontology Framework | 5 | iso-iec-awi-31310-1, iso-iec-pwi-9991, iso-iec-ts-30149-2024, iso-iec-ts-5723-2022, nist-ai-100-6 |
| Compliance Check Communication Protocol for Fee Collection | 4 | iso-12813-2015, iso-12813-2019, iso-12813-2024, iso-ts-12813-2009 |
| Hybrid Post-Quantum Cryptography for EAP-AKA' | 3 | draft-ar-emu-hybrid-pqc-eapaka, draft-ar-emu-pqc-eapaka, draft-ietf-emu-hybrid-pqc-eapaka |
| AC/TE YANG Models for Edge AI Placement | 3 | draft-dunbar-neotec-ac-te-applicability, draft-dunbar-onions-ac-te-applicability, draft-dunbar-onsen-ac-te-applicability |
| Multi-Agent Communication Framework for AIOps | 3 | draft-fu-nmop-agent-communication-framework, draft-liu-agent-protocol-over-moq, draft-rosenberg-ai-protocols |
| Distributed AI Inference Architecture | 3 | draft-hong-nmrg-ai-deploy, draft-irtf-nmrg-ai-deploy, draft-song-rtgwg-din-usecases-requirements |
| AI Agent Protocol Framework | 3 | draft-hw-protocol-agent, draft-rosenberg-aiproto-framework, draft-zyyhl-agent-networks-framework |
| PSK authentication method for EDHOC | 3 | draft-ietf-lake-edhoc-psk, draft-lake-pocero-authkem-edhoc, draft-pocero-authkem-edhoc |
| LLM-Assisted Network Management Framework | 3 | draft-irtf-nmrg-llm-nm, draft-zeng-mcp-network-measurement, draft-zm-rtgwg-mcp-network-measurement |
| Model Context Protocol over MOQT | 3 | draft-jennings-ai-mcp-over-moq, draft-jennings-mcp-over-moqt, draft-mcp-over-moqt |
| Micro Agent Communication Protocol (µACP) | 3 | draft-mallick-muacp, draft-stephan-ai-agent-6g, draft-zhang-rtgwg-ai-agents-measurement |
| Agent Gateway-Based Networking Architecture | 3 | draft-men-rtgwg-agent-networking-digibank-scenario, draft-zl-agents-networking-architecture, iso-iec-pwi-5096 |
| Automatic Extended Route Optimization over OMNI Interfaces | 3 | draft-templin-6man-aero3, draft-templin-intarea-aero, draft-templin-intarea-aero2 |
| Localization Augmentation Communication Protocol | 3 | iso-13141-2015, iso-13141-2024, iso-ts-13141-2010 |
| Supply Chain Trustworthiness Framework | 3 | iso-22373-2025, iso-iec-cd-11034.2, iso-iec-tr-24028-2020 |
| Trustworthy electronically stored information system | 3 | iso-fdis-15801, iso-np-15801, iso-tr-15801-2017 |
| A2A Protocol Transport over MOQT | 2 | draft-a2a-moqt-transport, draft-nandakumar-a2a-moqt-transport |
| Agent Authorization Profile for OAuth 2.0 | 2 | draft-aap-oauth-profile, draft-patwhite-aauth |
| AI Traffic Characterization Framework | 2 | draft-aft-ai-traffic, draft-ai-traffic |
| Federated AI Service Operations Model | 2 | draft-aft-ai-traffic, draft-ai-traffic |
| Intent-Based Security Policy Translation for 5G | 2 | draft-ahn-nmrg-5g-security-i2nsf-framework, draft-ahn-opsawg-5g-security-i2nsf-framework |
| Distributed Policy Enforcement via NEF and IBN Controllers | 2 | draft-ahn-nmrg-5g-security-i2nsf-framework, draft-ahn-opsawg-5g-security-i2nsf-framework |
| Tiered Risk-Based Governance for Autonomous AI Agents | 2 | draft-aylward-aiga-1, draft-aylward-aiga-2 |
| Integrated Sensing and Communications for CATS | 2 | draft-bernardos-cats-isac-uc, draft-bernardos-green-isac-uc |
| AI Inference Fabric Benchmarking Methodology | 2 | draft-calabria-bmwg-ai-fabric-inference-bench, draft-gaikwad-llm-benchmarking-methodology |
| Agentic Hypercall Protocol | 2 | draft-campbell-agentic-http, draft-kotecha-agentic-dispute-protocol |
| Intent-Based Network Management Architecture | 2 | draft-chen-nmrg-ibn-management, itu-t-y-3179 |
| Cross-Domain Agent Interoperability Framework | 2 | draft-cui-dmsc-agent-cdi, draft-liu-saag-zt-problem-statement |
| AI Agent Communication Network Requirements | 2 | draft-du-ai-agent-communication-6g-aspect, draft-jiang-cats-reference-acn |
## Ideas by Type x Source
| Type | etsi | ietf | iso | itu | nist | w3c |
|------|-----:|-----:|-----:|-----:|-----:|-----:|
| architecture | 3 | 141 | 39 | 11 | 4 | 1 |
| protocol | 1 | 129 | 40 | 2 | 3 | 0 |
| requirement | 4 | 68 | 26 | 2 | 0 | 2 |
| mechanism | 1 | 69 | 18 | 0 | 2 | 0 |
| pattern | 1 | 52 | 23 | 2 | 3 | 0 |
| extension | 0 | 71 | 2 | 0 | 0 | 0 |
| framework | 0 | 5 | 12 | 1 | 0 | 0 |
| format | 0 | 1 | 0 | 0 | 0 | 0 |
| process | 0 | 0 | 1 | 0 | 0 | 0 |
| guidance | 0 | 1 | 0 | 0 | 0 | 0 |
| methodology | 0 | 0 | 1 | 0 | 0 | 0 |
## Correlation: Idea Novelty vs Draft Relevance
Pearson r = **0.099** (n=267 drafts with both scores)
Positive correlation — weak or no linear relationship between idea novelty and draft relevance.
## Embedding Status
419 of 742 ideas (56.5%) have embeddings.
To complete the remaining 323 embeddings, run:
```
ietf embed-ideas
```
This requires Ollama running locally with the configured embedding model.

View File

@@ -1,5 +1,5 @@
# Cross-Source Comparison Report # Cross-Source Comparison Report
*Generated 2026-03-08 18:04 UTC — 761 drafts across 6 sources* *Generated 2026-03-08 19:32 UTC — 761 drafts across 6 sources*
## Summary ## Summary

View File

@@ -951,39 +951,124 @@ class Reporter:
return str(path) return str(path)
def trends_report(self) -> str: def trends_report(self) -> str:
"""Generate category trend analysis report with monthly breakdown and growth rates.""" """Generate full temporal evolution report with monthly stats, ratings, safety ratio, and growth."""
now = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M UTC") now = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M UTC")
conn = self.db.conn
pairs = self.db.drafts_with_ratings(limit=500) pairs = self.db.drafts_with_ratings(limit=500)
all_drafts = self.db.list_drafts(limit=500, order_by="time ASC") all_drafts = self.db.list_drafts(limit=500, order_by="time ASC")
total = len(all_drafts) total = len(all_drafts)
rating_map = {draft.name: rating for draft, rating in pairs} rating_map = {draft.name: rating for draft, rating in pairs}
# Monthly counts per category # Monthly submission counts by source
monthly: dict[str, dict[str, int]] = defaultdict(lambda: defaultdict(int)) source_monthly: dict[str, dict[str, int]] = defaultdict(lambda: defaultdict(int))
for d in all_drafts:
month = d.time[:7] if d.time else "unknown"
if month != "unknown":
src = getattr(d, "source", "ietf") or "ietf"
source_monthly[month][src] += 1
# Monthly category counts
cat_monthly: dict[str, dict[str, int]] = defaultdict(lambda: defaultdict(int))
all_cats: set[str] = set() all_cats: set[str] = set()
for d in all_drafts: for d in all_drafts:
month = d.time[:7] if d.time else "unknown" month = d.time[:7] if d.time else "unknown"
r = rating_map.get(d.name) r = rating_map.get(d.name)
if r: if r and month != "unknown":
for c in r.categories: for c in r.categories:
monthly[month][c] += 1 cat_monthly[month][c] += 1
all_cats.add(c) all_cats.add(c)
months = sorted(m for m in monthly.keys() if m != "unknown") months = sorted(m for m in set(list(source_monthly.keys()) + list(cat_monthly.keys())) if m != "unknown")
cats = sorted(all_cats) cats = sorted(all_cats)
# Monthly average ratings
rating_monthly: dict[str, dict[str, list[int]]] = defaultdict(lambda: defaultdict(list))
for d in all_drafts:
month = d.time[:7] if d.time else "unknown"
r = rating_map.get(d.name)
if r and month != "unknown":
for dim in ("novelty", "maturity", "overlap", "momentum", "relevance"):
rating_monthly[month][dim].append(getattr(r, dim))
# Safety vs capability categories
safety_cats = {"Security", "Privacy", "Trust & Identity", "Safety", "Governance & Policy", "Ethics"}
capability_cats = {"Agent Communication", "Agent Framework", "AI Infrastructure",
"Model Serving", "MCP", "Orchestration", "Tool Use",
"Prompt Engineering", "Inference", "LLM Integration"}
# Monthly new authors
author_rows = conn.execute("""
SELECT da.person_id, MIN(substr(d.time, 1, 7)) AS first_month
FROM draft_authors da
JOIN drafts d ON da.draft_name = d.name
WHERE d.time IS NOT NULL AND d.time != ''
GROUP BY da.person_id
""").fetchall()
new_author_monthly: dict[str, int] = defaultdict(int)
for r in author_rows:
if r["first_month"]:
new_author_monthly[r["first_month"]] += 1
# Cumulative idea counts
idea_rows = conn.execute("""
SELECT substr(d.time, 1, 7) AS month, COUNT(i.id) AS cnt
FROM ideas i
JOIN drafts d ON i.draft_name = d.name
WHERE d.time IS NOT NULL AND d.time != ''
GROUP BY month ORDER BY month
""").fetchall()
idea_cumulative = {}
running = 0
for r in idea_rows:
running += r["cnt"]
idea_cumulative[r["month"]] = running
def _trend(val, prev_val):
if prev_val is None:
return ""
if val > prev_val:
return " \u2191"
elif val < prev_val:
return " \u2193"
return " \u2192"
lines = [ lines = [
"# Category Trend Analysis", "# Temporal Evolution Report",
f"*Generated {now} {total} drafts, {len(months)} months, {len(cats)} categories*\n", f"*Generated {now} \u2014 {total} drafts, {len(months)} months*\n",
] ]
# Growth summary # Monthly stats table
lines.extend([
"## Monthly Overview\n",
"| Month | Submissions | New Authors | Cum. Ideas | Avg Novelty | Avg Maturity | Avg Relevance | Safety Ratio |",
"|-------|------------:|------------:|-----------:|------------:|-------------:|--------------:|-------------:|",
])
prev_total = None
for month in months:
total_sub = sum(source_monthly[month].values())
new_auth = new_author_monthly.get(month, 0)
cum_ideas = idea_cumulative.get(month, 0)
dims = rating_monthly.get(month, {})
avg_n = sum(dims.get("novelty", [0])) / max(len(dims.get("novelty", [1])), 1)
avg_m = sum(dims.get("maturity", [0])) / max(len(dims.get("maturity", [1])), 1)
avg_r = sum(dims.get("relevance", [0])) / max(len(dims.get("relevance", [1])), 1)
safety = sum(cat_monthly[month].get(c, 0) for c in safety_cats)
capability = sum(cat_monthly[month].get(c, 0) for c in capability_cats)
ratio = f"{safety / capability:.2f}" if capability > 0 else "-"
trend = _trend(total_sub, prev_total)
prev_total = total_sub
lines.append(
f"| {month} | {total_sub}{trend} | {new_auth} | {cum_ideas} | "
f"{avg_n:.1f} | {avg_m:.1f} | {avg_r:.1f} | {ratio} |"
)
# Category growth summary
recent_months = months[-3:] if len(months) >= 3 else months recent_months = months[-3:] if len(months) >= 3 else months
prev_months = months[-6:-3] if len(months) >= 6 else [] prev_months = months[-6:-3] if len(months) >= 6 else []
lines.extend([ lines.extend([
"## Growth Summary\n", "\n## Category Growth Summary\n",
"| Category | Total | Last 3mo | Prev 3mo | Growth |", "| Category | Total | Last 3mo | Prev 3mo | Growth |",
"|----------|------:|---------:|---------:|-------:|", "|----------|------:|---------:|---------:|-------:|",
]) ])
@@ -991,12 +1076,12 @@ class Reporter:
cumulative: dict[str, int] = defaultdict(int) cumulative: dict[str, int] = defaultdict(int)
for month in months: for month in months:
for cat in cats: for cat in cats:
cumulative[cat] += monthly[month].get(cat, 0) cumulative[cat] += cat_monthly[month].get(cat, 0)
for cat in cats: for cat in cats:
total_cat = cumulative[cat] total_cat = cumulative[cat]
recent = sum(monthly[m].get(cat, 0) for m in recent_months) recent = sum(cat_monthly[m].get(cat, 0) for m in recent_months)
prev = sum(monthly[m].get(cat, 0) for m in prev_months) if prev_months else 0 prev = sum(cat_monthly[m].get(cat, 0) for m in prev_months) if prev_months else 0
if prev > 0: if prev > 0:
growth_str = f"{((recent - prev) / prev) * 100:+.0f}%" growth_str = f"{((recent - prev) / prev) * 100:+.0f}%"
elif recent > 0: elif recent > 0:
@@ -1005,44 +1090,41 @@ class Reporter:
growth_str = "-" growth_str = "-"
lines.append(f"| {cat} | {total_cat} | {recent} | {prev if prev_months else '-'} | {growth_str} |") lines.append(f"| {cat} | {total_cat} | {recent} | {prev if prev_months else '-'} | {growth_str} |")
# Monthly detail table # Fastest growing categories (early vs late half)
lines.extend(["\n## Monthly Breakdown\n"])
header = "| Month |" + " | ".join(f" {c[:15]}" for c in cats) + " | Total |"
sep = "|-------|" + " | ".join("---:" for _ in cats) + " | -----:|"
lines.append(header)
lines.append(sep)
for month in months:
counts = [str(monthly[month].get(c, 0)) for c in cats]
month_total = sum(monthly[month].values())
lines.append(f"| {month} | " + " | ".join(counts) + f" | {month_total} |")
# Half-over-half comparison
if len(months) >= 4: if len(months) >= 4:
mid = len(months) // 2 mid = len(months) // 2
early = months[:mid] early = months[:mid]
late = months[mid:] late = months[mid:]
lines.extend(["\n## Fastest Growing Categories (early vs late half)\n"])
lines.extend([
"\n## Fastest Growing Categories (early vs late half)\n",
])
growth_data = [] growth_data = []
for cat in cats: for cat in cats:
e = sum(monthly[m].get(cat, 0) for m in early) e = sum(cat_monthly[m].get(cat, 0) for m in early)
l = sum(monthly[m].get(cat, 0) for m in late) l_val = sum(cat_monthly[m].get(cat, 0) for m in late)
if e > 0: if e > 0:
pct = ((l - e) / e) * 100 pct = ((l_val - e) / e) * 100
growth_data.append((cat, pct, e, l)) growth_data.append((cat, pct, e, l_val))
elif l > 0: elif l_val > 0:
growth_data.append((cat, float("inf"), e, l)) growth_data.append((cat, float("inf"), e, l_val))
growth_data.sort(key=lambda x: x[1], reverse=True) growth_data.sort(key=lambda x: x[1], reverse=True)
for cat, pct, e, l in growth_data: for cat, pct, e, l_val in growth_data:
if pct == float("inf"): if pct == float("inf"):
lines.append(f"- **{cat}**: new (0 -> {l} drafts)") lines.append(f"- **{cat}**: new (0 \u2192 {l_val} drafts)")
else: else:
lines.append(f"- **{cat}**: {pct:+.0f}% ({e} -> {l} drafts)") lines.append(f"- **{cat}**: {pct:+.0f}% ({e} \u2192 {l_val} drafts)")
# Rating trends
lines.extend(["\n## Rating Dimension Trends\n"])
if len(months) >= 2:
first_half = months[:len(months) // 2]
second_half = months[len(months) // 2:]
for dim in ("novelty", "maturity", "overlap", "momentum", "relevance"):
early_vals = [v for m in first_half for v in rating_monthly.get(m, {}).get(dim, [])]
late_vals = [v for m in second_half for v in rating_monthly.get(m, {}).get(dim, [])]
early_avg = sum(early_vals) / len(early_vals) if early_vals else 0
late_avg = sum(late_vals) / len(late_vals) if late_vals else 0
diff = late_avg - early_avg
arrow = "\u2191" if diff > 0.1 else ("\u2193" if diff < -0.1 else "\u2192")
lines.append(f"- **{dim.capitalize()}**: {early_avg:.2f} \u2192 {late_avg:.2f} ({diff:+.2f}) {arrow}")
report = "\n".join(lines) report = "\n".join(lines)
path = self.output_dir / "trends.md" path = self.output_dir / "trends.md"

View File

@@ -735,6 +735,21 @@ def api_bcp_analysis():
return jsonify(get_bcp_analysis(db())) return jsonify(get_bcp_analysis(db()))
# ── Idea Analysis ────────────────────────────────────────────────────────
@app.route("/idea-analysis")
def idea_analysis():
data = get_idea_analysis(db())
return render_template("idea_analysis.html", data=data)
@app.route("/api/idea-analysis")
def api_idea_analysis():
data = get_idea_analysis(db())
return jsonify(data)
# ── Trends & Complexity ────────────────────────────────────────────────── # ── Trends & Complexity ──────────────────────────────────────────────────
@@ -752,29 +767,12 @@ def complexity():
@app.route("/api/trends") @app.route("/api/trends")
def api_trends(): def api_trends():
data = get_trends_data(db()) return jsonify(get_trends_data(db()))
return jsonify(data)
@app.route("/api/complexity") @app.route("/api/complexity")
def api_complexity(): def api_complexity():
data = get_complexity_data(db()) return jsonify(get_complexity_data(db()))
return jsonify(data)
# ── Idea Analysis ────────────────────────────────────────────────────────
@app.route("/idea-analysis")
def idea_analysis():
data = get_idea_analysis(db())
return render_template("idea_analysis.html", data=data)
@app.route("/api/idea-analysis")
def api_idea_analysis():
data = get_idea_analysis(db())
return jsonify(data)
if __name__ == "__main__": if __name__ == "__main__":

File diff suppressed because it is too large Load Diff