diff --git a/content/p2p/ift/2026q4-anoncomms-consulting.md b/content/p2p/ift/2026q4-anoncomms-consulting.md new file mode 100644 index 0000000000..695d753f32 --- /dev/null +++ b/content/p2p/ift/2026q4-anoncomms-consulting.md @@ -0,0 +1,35 @@ +--- + +title: Anoncomms Consulting +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: TBD + +--- + +`ift-ts:p2p:ift:2026q4-anoncomms-consulting` + +## Description + +TBD + +## Task List + +### Consulting + +* fully qualified name: `ift-ts:p2p:ift:2026q4-anoncomms-consulting:consulting` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +TBD + +#### Deliverables + +TBD diff --git a/content/p2p/ift/2026q4-dst-automated-workflow.md b/content/p2p/ift/2026q4-dst-automated-workflow.md new file mode 100644 index 0000000000..ec5bae42bc --- /dev/null +++ b/content/p2p/ift/2026q4-dst-automated-workflow.md @@ -0,0 +1,61 @@ +--- + +title: DST Automated Workflow +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Deploy nim-libp2p master to the Lab and report regression failures automatically + +--- + +`ift-ts:p2p:ift:2026q4-dst-automated-workflow` + +## Description + +Automate deployments of the latest nim-libp2p master to the Lab and execute +basic regression tests. When results deviate from expected behavior, open an +issue automatically in the nim-libp2p repository for triage. + +## Task List + +### Lab Deployment And Regression Runs + +* fully qualified name: `ift-ts:p2p:ift:2026q4-dst-automated-workflow:deployment-tests` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Deploy the latest master revision to the Lab and trigger basic regression +tests. Define expected outcomes and retain the tested revision, configuration, +and results so failures can be reproduced. + +#### Deliverables + +- Automated Lab deployment and basic regression workflow +- Documented expected results and retained run artifacts + + +### Automatic Regression Issues + +* fully qualified name: `ift-ts:p2p:ift:2026q4-dst-automated-workflow:issue-reporting` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Compare regression results with expected outcomes and automatically create +nim-libp2p issues for deviations. Include the tested revision, failing checks, +and links to logs, and avoid repeatedly filing the same unresolved failure. + +#### Deliverables + +- Automatic issue creation for regression deviations +- Reproducible triage details and duplicate-issue handling +- Workflow checks demonstrating expected-result and regression-result paths diff --git a/content/p2p/ift/2026q4-gossipsub-interop.md b/content/p2p/ift/2026q4-gossipsub-interop.md new file mode 100644 index 0000000000..84d162fd38 --- /dev/null +++ b/content/p2p/ift/2026q4-gossipsub-interop.md @@ -0,0 +1,87 @@ +--- + +title: GossipSub Interoperability Framework +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Expand continuous GossipSub interoperability testing across implementations + +--- + +`ift-ts:p2p:ift:2026q4-gossipsub-interop` + +## Description + +Evolve the existing GossipSub test plan into a reusable unified-testing +framework, using [libp2p/test-plans#850](https://github.com/libp2p/test-plans/pull/850) +as a starting point. Cover Go, Rust, JS, Python, Nim, Zig, and future +implementations in mixed-language topologies across TCP, WebSocket, and native +QUIC. Use unified-testing for protocol and transport debugging. + +Note that large-scale Shadow simulation seems to not work correctly with QUIC + +## Task List + +### Implementation And Transport Matrix + +* fully qualified name: `ift-ts:p2p:ift:2026q4-gossipsub-interop:matrix` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Build an extensible test matrix that runs mixed-language topologies and +automatically exercises transport combinations. Ensure the framework can be +used continuously by maintainers across implementations. + +#### Deliverables + +- Mixed-language GossipSub scenarios across the listed implementations +- Automated TCP, WebSocket, and native QUIC combinations where supported +- Documented workflow for adding implementations and running tests + + +### Protocol Stability And Fault Injection + +* fully qualified name: `ift-ts:p2p:ift:2026q4-gossipsub-interop:stability` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Validate scoring, mesh maintenance, IHAVE/IWANT behavior, duplicate suppression, +and consistent propagation. Run long-lived scenarios with joins, leaves, +disconnects, reconnects, and churn, plus delayed peers, partitions, intermittent +connectivity, and reconnect storms. + +#### Deliverables + +- Protocol behavior assertions across implementations +- Long-running mesh stability and fault-injection scenarios +- Reproducible failure reports for interoperability regressions + + +### Metrics And Dashboard + +* fully qualified name: `ift-ts:p2p:ift:2026q4-gossipsub-interop:reporting` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Collect propagation latency, throughput, duplicate rate, and bandwidth use. +Present standardized results so maintainers can compare releases and identify +interoperability regressions. + +#### Deliverables + +- Comparable performance metrics from framework runs +- Standardized dashboard with release comparisons and regression visibility diff --git a/content/p2p/ift/2026q4-logos-core-consulting.md b/content/p2p/ift/2026q4-logos-core-consulting.md new file mode 100644 index 0000000000..54e20de3da --- /dev/null +++ b/content/p2p/ift/2026q4-logos-core-consulting.md @@ -0,0 +1,35 @@ +--- + +title: Logos Core Consulting +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: TBD + +--- + +`ift-ts:p2p:ift:2026q4-logos-core-consulting` + +## Description + +TBD + +## Task List + +### Consulting + +* fully qualified name: `ift-ts:p2p:ift:2026q4-logos-core-consulting:consulting` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +TBD + +#### Deliverables + +TBD diff --git a/content/p2p/ift/2026q4-logos-delivery-consulting.md b/content/p2p/ift/2026q4-logos-delivery-consulting.md new file mode 100644 index 0000000000..ef82fc981b --- /dev/null +++ b/content/p2p/ift/2026q4-logos-delivery-consulting.md @@ -0,0 +1,51 @@ +--- + +title: Logos Delivery Consulting +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Support Logos Delivery with pluggable libp2p, nim-ffi, and module API integration + +--- + +`ift-ts:p2p:ift:2026q4-logos-delivery-consulting` + +## Description + +Provide consulting to Logos Delivery as they make libp2p pluggable, tracked in +[logos-delivery#4341](https://github.com/logos-messaging/logos-delivery/issues/4341). +Coordinate the integration with the Logos libp2p module, support nim-ffi design +and code reviews, and help the team understand the API the module offers. + +This as an ongoing consulting commitment, adding specific follow-up tasks +as requirements and priorities become clearer during Q4. + +## Task List + +### Consulting + +* fully qualified name: `ift-ts:p2p:ift:2026q4-logos-delivery-consulting:consulting` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Work with the Logos Delivery team on the interfaces and integration needs for +pluggable libp2p. Explain the Logos libp2p module API, identify missing capabilities, +and review opportunities to modify or simplify it based on Delivery's needs. + +Review nim-ffi pull requests and discuss or propose changes where needed, +including the proposed use of polling instead of callbacks. Coordinate resulting +API and integration decisions with Delivery and capture concrete follow-up work +as it is agreed. + +#### Deliverables + +- Consulting and review support for the pluggable libp2p work in logos-delivery#4341 +- nim-ffi PR reviews and design feedback, including evaluation of polling instead of callbacks +- Module API guidance and agreed changes or simplifications for Delivery integration +- Links to reviews, decisions, and follow-up issues or PRs as work is completed diff --git a/content/p2p/ift/2026q4-nimlibp2p-dht-publication-outcomes.md b/content/p2p/ift/2026q4-nimlibp2p-dht-publication-outcomes.md new file mode 100644 index 0000000000..ba1744ee67 --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-dht-publication-outcomes.md @@ -0,0 +1,62 @@ +--- + +title: Explicit DHT Publication Outcomes +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Expose local storage and remote publication results from putValue + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-dht-publication-outcomes` + +## Description + +Make putValue results distinguish local storage from remote publication. +Aggregate remote write acknowledgements so callers can identify successful +peers, quorum failures, and partial or complete success. A mismatching +acknowledgement must be reflected in the result rather than only logged. + +## Task List + +### Publication Result Model + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-dht-publication-outcomes:result-model` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Define results that expose whether local storage succeeded, whether publication +was attempted, which peers acknowledged the record, and whether the requested +quorum was met. Specify partial success and complete failure semantics. + +#### Deliverables + +- Documented publication result types and quorum semantics +- Caller-visible local storage, publication, and successful-peer information + + +### Acknowledgement Aggregation And Tests + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-dht-publication-outcomes:aggregation` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Aggregate remote write outcomes into the final putValue result. Treat mismatching +acknowledgements as unsuccessful writes and cover local failures, no publication, +partial acknowledgements, quorum failure, and complete success. + +#### Deliverables + +- putValue implementation reporting aggregate publication outcomes +- Tests for mismatching acknowledgements and each result category +- Usage examples showing how callers interpret results diff --git a/content/p2p/ift/2026q4-nimlibp2p-early-muxer-negotiation.md b/content/p2p/ift/2026q4-nimlibp2p-early-muxer-negotiation.md new file mode 100644 index 0000000000..931f1f174d --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-early-muxer-negotiation.md @@ -0,0 +1,62 @@ +--- + +title: Early Multiplexer Negotiation +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Negotiate the multiplexer during the security handshake + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-early-muxer-negotiation` + +## Description + +Reduce TCP/WebSocket connection establishment by one network round trip by +selecting the multiplexer during the security handshake. Extend the Noise +handshake payload and connection upgrader so compatible peers can avoid the +separate multistream-select exchange that follows the security handshake. + +## Task List + +### Handshake Negotiation And Upgrade + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-early-muxer-negotiation:implementation` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Add multiplexer negotiation to the Noise handshake and pass the selection to +the muxed upgrader. Preserve the separate negotiation path when peers do not +support early negotiation or no early selection is available. + +#### Deliverables + +- Noise payload extension and upgrader integration +- Fallback behavior for existing peers +- Tests for compatible peers and negotiation fallback + + +### Connection Setup Validation + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-early-muxer-negotiation:validation` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Exercise TCP and WebSocket connections with early negotiation enabled and with +legacy peers. Verify that successful early selection removes the separate +multiplexer negotiation round trip and establishes usable streams. + +#### Deliverables + +- Interop coverage for early and legacy negotiation paths +- Connection traces or measurements confirming the saved round trip diff --git a/content/p2p/ift/2026q4-nimlibp2p-gossipsub-byte-queues.md b/content/p2p/ift/2026q4-nimlibp2p-gossipsub-byte-queues.md new file mode 100644 index 0000000000..6df2b85a9e --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-gossipsub-byte-queues.md @@ -0,0 +1,60 @@ +--- + +title: Byte-Aware GossipSub Queues +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Bound GossipSub queued bytes as well as message counts + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-byte-queues` + +## Description + +Queue-length limits already exist, but equal message counts can retain very +different amounts of memory. Add byte limits alongside count limits to bound +queued GossipSub data when message sizes vary. + +## Task List + +### Byte Accounting And Limits + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-byte-queues:byte-limits` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Track retained bytes through enqueue, dequeue, drop, and cleanup. Enforce byte +budgets alongside existing count limits while preserving the intended overflow +behavior of each queue priority. + +#### Deliverables + +- Byte accounting and configurable byte limits for GossipSub queues +- Defined overflow behavior when either count or byte limits are reached + + +### Queue Pressure Validation + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-byte-queues:validation` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Exercise mixed message sizes, large bursts, and slow peers. Verify that queue +cleanup releases accounted bytes and existing priority behavior remains correct. + +#### Deliverables + +- Tests for mixed-size traffic and count/byte boundary conditions +- Resource-use measurements under queue pressure +- Real life network tests ensuring no regressions are introduced \ No newline at end of file diff --git a/content/p2p/ift/2026q4-nimlibp2p-gossipsub-duplicate-suppression.md b/content/p2p/ift/2026q4-nimlibp2p-gossipsub-duplicate-suppression.md new file mode 100644 index 0000000000..33e7279683 --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-gossipsub-duplicate-suppression.md @@ -0,0 +1,65 @@ +--- + +title: GossipSub Duplicate Suppression Validation +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Validate GossipSub duplicate suppression on Nimbus mainnet nodes + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-duplicate-suppression` + +## Description + +Test [nim-libp2p#3043](https://github.com/vacp2p/nim-libp2p/pull/3043), +[nim-libp2p#3016](https://github.com/vacp2p/nim-libp2p/pull/3016) and +[nim-libp2p#3165](https://github.com/vacp2p/nim-libp2p/pull/3165) against their +original requirements. Use Nimbus libp2p nodes on mainnet to establish that the +behavior is desirable and stable over time. Local testnets alone are insufficient +to assess Internet conditions, memory leaks, or isolated mesh islands. + +## Task List + +### Requirements And Regression Coverage + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-duplicate-suppression:regression-coverage` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Translate the requirements behind both changes into checks for duplicate +suppression and message delivery. Establish a baseline for comparison during +mainnet monitoring. + +#### Deliverables + +- Requirement-to-test mapping for both PRs +- Regression coverage and baseline measurements + + +### Sustained Mainnet Validation + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-duplicate-suppression:mainnet-validation` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Run the changes on Nimbus fleet and/or home nodes on mainnet and monitor them +over an extended period. Compare resource use, message delivery, and mesh +connectivity against the baseline, checking for leaks, isolated islands, and +other unexpected peer-to-peer behavior. + +#### Deliverables + +- Mainnet monitoring results covering stability and resource use over time +- Evidence that duplicate suppression meets its requirements without delivery or mesh regressions +- Documented findings and fixes for regressions discovered during monitoring diff --git a/content/p2p/ift/2026q4-nimlibp2p-gossipsub-topic-streams.md b/content/p2p/ift/2026q4-nimlibp2p-gossipsub-topic-streams.md new file mode 100644 index 0000000000..4ddfa43ae7 --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-gossipsub-topic-streams.md @@ -0,0 +1,65 @@ +--- + +title: Experimental GossipSub Topic Streams +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Implement experimental per-topic GossipSub data streams + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-topic-streams` + +## Description + +Implement the topic-stream proposal referenced in +[libp2p/specs#729](https://github.com/libp2p/specs/pull/729), separating application +data by topic and direction while retaining the ordinary GossipSub stream for +control messages. Treat this draft proposal as experimental and keep support +behind an explicit opt-in or compile flag. + +## Task List + +### Negotiation And Stream Lifecycle + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-topic-streams:stream-lifecycle` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Implement capability negotiation and fallback for peers without topic-stream +support. Create, replace, and clean up streams for each topic and direction, +including subscription changes and peer disconnects. + +#### Deliverables + +- Experimental feature gate and legacy-peer fallback +- Topic stream creation, replacement, and cleanup +- Tests for mixed-capability peers and lifecycle transitions + + +### Delivery And Resource Budgets + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-topic-streams:delivery-budgets` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Implement full-message and partial-message delivery with per-peer stream counts +and byte budgets. Verify delivery behavior and bounded resource use while +control messages continue to use the ordinary GossipSub stream. + +#### Deliverables + +- Full-message and partial-message delivery +- Per-peer stream and byte limits +- Tests for delivery, resource exhaustion, and control-stream behavior +- Ensure no regressions are introduced in a real life network deployment diff --git a/content/p2p/ift/2026q4-nimlibp2p-gossipsub-validation.md b/content/p2p/ift/2026q4-nimlibp2p-gossipsub-validation.md new file mode 100644 index 0000000000..f3ae811efa --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-gossipsub-validation.md @@ -0,0 +1,62 @@ +--- + +title: Bounded GossipSub Validation +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Bound GossipSub validation concurrency and queued work + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-validation` + +## Description + +Application validation can be expensive, for example when using RLN. Add global +and per-topic budgets, bounded admission queues, and validator deadlines so +validation work remains bounded under load. Keep invalid-message outcomes +separate from local overload. + +## Task List + +### Validation Budgets And Admission + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-validation:budgets` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Implement global and per-topic concurrency limits, bounded admission queues, +and deadlines for validation work. Release capacity when work completes, expires, +or is cancelled. + +#### Deliverables + +- Configurable validation concurrency and queue limits +- Deadline handling and tests proving that capacity is released + + +### Topic Fairness And Outcomes + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-gossipsub-validation:fairness-outcomes` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Schedule validation fairly across topics so a busy topic cannot monopolize +validation capacity. Distinguish invalid messages from work rejected or expired +because of local overload, without treating overload as evidence of invalid data. + +#### Deliverables + +- Fair scheduling across topics +- Separate invalid-message and local-overload outcomes +- Tests with expensive validators, saturated queues, and competing topics diff --git a/content/p2p/ift/2026q4-nimlibp2p-kademlia-auto-mode.md b/content/p2p/ift/2026q4-nimlibp2p-kademlia-auto-mode.md new file mode 100644 index 0000000000..4cd9fec966 --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-kademlia-auto-mode.md @@ -0,0 +1,94 @@ +--- + +title: Kademlia Auto-Mode Stability And Lifecycle Validation +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Validate Kademlia auto-mode stability and lifecycle behavior + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-kademlia-auto-mode` + +## Description + +Automatic reachability-driven role selection and explicit client/server modes +were implemented in Q3 by +[nim-libp2p#2910](https://github.com/iftech/nim-libp2p/pull/2910). Auto mode starts +as a client, follows reachable/unreachable verdicts, and preserves its current +mode when reachability is unknown. + +The current Kademlia handler immediately follows reachable/unreachable verdicts +and has no minimum observation window or cooldown. AutoNAT v1 aggregates a +bounded history of non-unknown answers (defaults: 10 answers, threshold 0.3), +with reachable taking priority when both outcomes meet the threshold. This is +sample-based aggregation, not a minimum stable duration. AutoNAT v2 uses +per-address verification: one selected peer supplies each address verdict, and +any confirmed candidate makes the node reachable. Its verification interval +controls probe cadence, not a Kademlia role-transition cooldown. + +Add explicit transition timing safeguards and validate their interaction with +both reachability sources. Preserve fixed client/server modes and verify role +state and pending transitions across stop/restart. + +Implementation baseline: nim-libp2p master at `5309dc87cb4b4385a4a37e4339cdeefca02c8667`: + +- [Kademlia reachability handler](https://github.com/iftech/nim-libp2p/blob/5309dc87cb4b4385a4a37e4339cdeefca02c8667/libp2p/builders.nim#L585) +- [AutoNAT v1 answer aggregation](https://github.com/iftech/nim-libp2p/blob/5309dc87cb4b4385a4a37e4339cdeefca02c8667/libp2p/protocols/connectivity/autonat/service.nim#L93) +- [AutoNAT v2 address verification and reachability summary](https://github.com/iftech/nim-libp2p/blob/5309dc87cb4b4385a4a37e4339cdeefca02c8667/libp2p/address_manager.nim#L257) + +## Task List + +### Role-Transition Timing And Stability + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-kademlia-auto-mode:stability` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Define and implement minimum observation windows and cooldowns for automatic +role changes, accounting for AutoNAT v1 answer aggregation and AutoNAT v2 +per-address verdicts. Specify promotion and demotion timing so transient changes +do not cause repeated switching while sustained changes still take effect. + +Define how opposite or unknown verdicts affect pending transitions. Include +inconclusive probes, which can retain prior reachability state rather than emit +an unknown verdict. Validate the policy through both AutoNAT integrations, +including loss of the last confirmed address in v2. + +#### Deliverables + +- Documented promotion/demotion windows, cooldowns, and pending-transition semantics +- Implemented timing safeguards for Kademlia auto mode +- Deterministic tests for transient and sustained verdict changes through AutoNAT v1 and v2 +- Tests for unknown verdicts, inconclusive probes, and loss of the last confirmed address +- Checks that sustained reachability changes take effect within the documented timing bounds + + +### Fixed Modes And Service Lifecycle + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-kademlia-auto-mode:lifecycle` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Verify that explicitly configured client and server modes remain fixed when +reachability changes. Exercise auto mode across service stop/restart, including +stopping while a role transition is pending. Ensure pending transitions cannot +fire after shutdown, restart uses the documented initial-state policy, and +subsequent reachability updates drive the expected role without duplicate +subscriptions. Fix defects identified by these tests. + +#### Deliverables + +- Tests for fixed client/server modes under changing reachability +- Auto-mode stop/restart tests covering pending-transition cancellation, subscriptions, and role state +- Fixes and regression coverage for lifecycle defects found during validation diff --git a/content/p2p/ift/2026q4-nimlibp2p-kademlia-provider-storage.md b/content/p2p/ift/2026q4-nimlibp2p-kademlia-provider-storage.md new file mode 100644 index 0000000000..ca34810cfa --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-kademlia-provider-storage.md @@ -0,0 +1,62 @@ +--- + +title: Kademlia Provider Storage +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Allow applications to replace Kademlia record storage + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-kademlia-provider-storage` + +## Description + +Value records, provider records, and locally provided keys use concrete +in-memory structures. Introduce a replaceable storage interface so downstream +applications can supply their own storage mechanism, including key/value +operations, expiration, and iteration. + +## Task List + +### Storage Interface + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-kademlia-provider-storage:interface` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Define the operations required by value records, provider records, and locally +provided keys. Specify key/value access, deletion, expiration/TTL, and iteration +semantics, adding other operations only where existing DHT behavior requires them. + +#### Deliverables + +- Storage interface covering all three record categories +- Documented expiration and iteration semantics + + +### Integration And Backend Validation + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-kademlia-provider-storage:integration` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Route Kademlia storage access through the interface and preserve an in-memory +backend. Demonstrate application-supplied storage and verify record lookup, +expiration, and locally provided key iteration across backends. + +#### Deliverables + +- Replaceable storage integrated into Kademlia +- In-memory backend preserving existing behavior +- Example custom backend and storage contract tests diff --git a/content/p2p/ift/2026q4-nimlibp2p-maintenance.md b/content/p2p/ift/2026q4-nimlibp2p-maintenance.md new file mode 100644 index 0000000000..6fd5960e63 --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-maintenance.md @@ -0,0 +1,45 @@ +--- + +title: Nim-libp2p Maintenance +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Maintain nim-libp2p and evaluate open code review tooling + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-maintenance` + +Maintain nim-libp2p through improvements, bug fixes, and user support + +## Description + +Continue supporting and maintaining the nim-libp2p repository through ongoing improvements, refactoring, and bug fixes. +This includes a range of ad-hoc tasks critical to sustaining code quality, overall stability, correct functionality, +and performance of the project. +Additionally, it provides a platform for addressing small developer requests, +ensuring that nim-libp2p remains functional and usable for its primary users — Nimbus and Waku — helping to meet their evolving needs." + + +## Task List + +### General Maintenance + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-maintenance:maintenance` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Maintain nim-libp2p through ongoing bug fixes, improvements, and user support +as issues arise during the quarter. + +#### Deliverables + +- Maintenance fixes and associated regression coverage +- Links to completed maintenance issues and pull requests + diff --git a/content/p2p/ift/2026q4-nimlibp2p-mdns.md b/content/p2p/ift/2026q4-nimlibp2p-mdns.md new file mode 100644 index 0000000000..eb81339801 --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-mdns.md @@ -0,0 +1,81 @@ +--- + +title: mDNS Peer Discovery +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Discover local-network libp2p peers through mDNS + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-mdns` + +## Description + +Implement mDNS discovery so libp2p peers on the same local network can find one +another without manually exchanging addresses or relying on Internet bootstrap +services. Cover discovery lifecycle, interface changes, record and address +handling, expiration, peerstore integration, and application-controlled dialing. + +## Task List + +### Discovery Lifecycle And Records + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-mdns:discovery` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Implement discovery startup and shutdown, interface handling including network +changes, and record processing. Validate discovered addresses and expire stale +records so discovery follows the current local network. + +#### Deliverables + +- mDNS discovery with interface-change handling +- Record validation, address processing, and expiration +- Tests for shutdown, network changes, and stale records + + +### Peerstore And Connection Policy + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-mdns:peerstore-policy` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Integrate discovered peers and addresses into the peerstore, following the +existing Kademlia integration pattern where applicable. Expose an overridable +connection policy so applications decide whether to dial discovered peers. + +#### Deliverables + +- Peerstore integration for discovered peers +- Application-controlled dialing policy and usage example + + +### Cross-Implementation Interoperability + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-mdns:interop` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Verify local-network discovery and connection establishment with other libp2p +implementations, including address updates and record expiration. + +#### Deliverables + +- Reproducible cross-implementation mDNS tests +- Interoperability results for discovery, address updates, and expiration diff --git a/content/p2p/ift/2026q4-nimlibp2p-quic-datagrams.md b/content/p2p/ift/2026q4-nimlibp2p-quic-datagrams.md new file mode 100644 index 0000000000..6abc13bd44 --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-quic-datagrams.md @@ -0,0 +1,61 @@ +--- + +title: Experimental QUIC Datagrams +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Add negotiated application datagrams over QUIC + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-quic-datagrams` + +## Description + +Implement negotiated application datagrams using QUIC unreliable delivery, +following the draft proposal referenced in +[libp2p/specs#680](https://github.com/libp2p/specs/pull/680). This supports transient +presence, live state, or telemetry where retransmitting obsolete data is +undesirable. Keep the feature experimental behind an opt-in or compile flag. + +## Task List + +### Negotiation And Datagram API + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-quic-datagrams:implementation` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Implement capability negotiation and application send/receive support through +nim-lsquic and nim-libp2p. Define unsupported-peer behavior and expose the +unreliable delivery semantics to callers. + +#### Deliverables + +- Experimental negotiated QUIC datagram support +- Documented application API and unsupported-peer behavior + + +### Datagram Validation + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-quic-datagrams:validation` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Verify datagram exchange, negotiated size limits, loss behavior, and connection +cleanup. Check that datagram use can coexist with reliable streams. + +#### Deliverables + +- Tests for negotiation, datagram delivery, limits, and cleanup +- Example demonstrating transient application data alongside reliable streams diff --git a/content/p2p/ift/2026q4-nimlibp2p-quic-ech.md b/content/p2p/ift/2026q4-nimlibp2p-quic-ech.md new file mode 100644 index 0000000000..b5bc2334d7 --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-quic-ech.md @@ -0,0 +1,66 @@ +--- + +title: Experimental QUIC Encrypted ClientHello +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Investigate backend support and implement experimental ECH for QUIC + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-quic-ech` + +## Description + +Investigate and implement Encrypted ClientHello for QUIC using the proposal +referenced in [libp2p/specs#730](https://github.com/libp2p/specs/pull/730). +ECH can hide the libp2p ALPN signal in the TLS handshake. Assess lsquic backend +support, configuration rotation, and retry behavior, then implement the spec +behind an experimental opt-in or compile flag. + +Working on this commitment requires the spec to have been reviewed and observations +fixed as it is still on an early stage. + +## Task List + +### Backend Feasibility + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-quic-ech:feasibility` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Evaluate ECH support in lsquic and its TLS backend. Identify binding or backend +changes needed for the proposal, including configuration distribution, rotation, +and retry handling. + +#### Deliverables + +- Documented backend support and implementation requirements +- Feasibility results for configuration rotation and retries + + +### Experimental Implementation And Validation + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-quic-ech:implementation` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Implement the ECH handshake integration and required backend bindings. Validate +configuration rotation and retry behavior, and verify that an accepted ECH +handshake hides the libp2p ALPN signal in the outer ClientHello. + +#### Deliverables + +- Experimental ECH implementation and configuration documentation +- Handshake tests covering accepted ECH, rotation, and retry behavior +- Recorded interoperability results and any remaining backend limitations diff --git a/content/p2p/ift/2026q4-nimlibp2p-reachability-relay-lifecycle.md b/content/p2p/ift/2026q4-nimlibp2p-reachability-relay-lifecycle.md new file mode 100644 index 0000000000..83a4467452 --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-reachability-relay-lifecycle.md @@ -0,0 +1,61 @@ +--- + +title: Reachability And Relay Lifecycle Integration +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Integrate AutoNAT v2 with hole punching and correct relay lifecycle behavior + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-reachability-relay-lifecycle` + +## Description + +Complete reachability integration so hole punching can use AutoNAT v2 instead +of remaining coupled to AutoNAT v1. Address relay reservation tasks surviving +stop/restart, stale relay addresses, and service advertisements retaining old +addresses. + +## Task List + +### AutoNAT v2 Hole-Punching Integration + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-reachability-relay-lifecycle:autonat-v2` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Connect hole-punching decisions to AutoNAT v2 reachability information and +validate behavior as reachability changes. + +#### Deliverables + +- Hole-punching integration with AutoNAT v2 +- Tests for reachable, unreachable, and changing reachability states + + +### Relay And Advertisement Cleanup + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-reachability-relay-lifecycle:lifecycle` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Ensure relay reservation tasks stop with their service and do not survive or +duplicate across restarts. Remove stale relay addresses and refresh service +advertisements when advertised addresses change. + +#### Deliverables + +- Correct reservation task cancellation and restart behavior +- Relay addresses and service advertisements reflecting current addresses +- Regression tests for stop/restart, reservation loss, and address changes diff --git a/content/p2p/ift/2026q4-nimlibp2p-webtransport.md b/content/p2p/ift/2026q4-nimlibp2p-webtransport.md new file mode 100644 index 0000000000..d543d49dff --- /dev/null +++ b/content/p2p/ift/2026q4-nimlibp2p-webtransport.md @@ -0,0 +1,79 @@ +--- + +title: nim-libp2p WebTransport +tags: + - "2026q4" + - "p2p" + - "ift" +draft: false +description: Accept browser libp2p connections through a native Nim WebTransport endpoint + +--- + +`ift-ts:p2p:ift:2026q4-nimlibp2p-webtransport` + +## Description + +Build a native Nim WebTransport endpoint using nim-lsquic so browser libp2p +clients can connect to nim-libp2p. Expand the HTTP/3 and session integration +needed for this server endpoint and verify browser interoperability. + +## Task List + +### nim-lsquic Endpoint Support + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-webtransport:endpoint` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Extend the nim-lsquic bindings and HTTP/3 integration needed to accept +WebTransport sessions. Implement session establishment, stream events, and +cleanup for rejected or closed sessions. + +#### Deliverables + +- Native WebTransport session acceptance through nim-lsquic +- Tests for session establishment, rejection, and cleanup + + +### libp2p Transport Integration + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-webtransport:transport` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Expose accepted WebTransport sessions through nim-libp2p connection and stream +abstractions. Handle endpoint addressing, peer authentication, and connection +shutdown so browser clients can use libp2p protocols over the transport. + +#### Deliverables + +- WebTransport endpoint integrated with nim-libp2p +- Documented endpoint and browser connection configuration + + +### Browser Interoperability + +* fully qualified name: `ift-ts:p2p:ift:2026q4-nimlibp2p-webtransport:interop` +* owner: not assigned yet +* status: not started +* start-date: 2026/10/01 +* end-date: 2026/12/31 + +#### Description + +Connect browser libp2p clients to the native Nim endpoint and exercise +bidirectional protocol traffic, disconnects, and reconnects. + +#### Deliverables + +- Reproducible browser-to-Nim interoperability tests +- Example browser connection and results covering stream and session lifecycle diff --git a/content/p2p/index.md b/content/p2p/index.md index d450054dc5..6549228d07 100644 --- a/content/p2p/index.md +++ b/content/p2p/index.md @@ -14,6 +14,30 @@ Major future work items on nim-libp2p (also beyond this reporting period are cap [[p2p/preview|Roadmap Preview]] +## 2026q4 `ift-ts:p2p:` + +### `ift:` + +* [[p2p/ift/2026q4-anoncomms-consulting|anoncomms-consulting]] +* [[p2p/ift/2026q4-dst-automated-workflow|dst-automated-workflow]] +* [[p2p/ift/2026q4-gossipsub-interop|gossipsub-interop]] +* [[p2p/ift/2026q4-logos-core-consulting|logos-core-consulting]] +* [[p2p/ift/2026q4-logos-delivery-consulting|logos-delivery-consulting]] +* [[p2p/ift/2026q4-nimlibp2p-dht-publication-outcomes|nimlibp2p-dht-publication-outcomes]] +* [[p2p/ift/2026q4-nimlibp2p-early-muxer-negotiation|nimlibp2p-early-muxer-negotiation]] +* [[p2p/ift/2026q4-nimlibp2p-gossipsub-byte-queues|nimlibp2p-gossipsub-byte-queues]] +* [[p2p/ift/2026q4-nimlibp2p-gossipsub-duplicate-suppression|nimlibp2p-gossipsub-duplicate-suppression]] +* [[p2p/ift/2026q4-nimlibp2p-gossipsub-topic-streams|nimlibp2p-gossipsub-topic-streams]] +* [[p2p/ift/2026q4-nimlibp2p-gossipsub-validation|nimlibp2p-gossipsub-validation]] +* [[p2p/ift/2026q4-nimlibp2p-kademlia-auto-mode|nimlibp2p-kademlia-auto-mode]] +* [[p2p/ift/2026q4-nimlibp2p-kademlia-provider-storage|nimlibp2p-kademlia-provider-storage]] +* [[p2p/ift/2026q4-nimlibp2p-maintenance|nimlibp2p-maintenance]] +* [[p2p/ift/2026q4-nimlibp2p-mdns|nimlibp2p-mdns]] +* [[p2p/ift/2026q4-nimlibp2p-quic-datagrams|nimlibp2p-quic-datagrams]] +* [[p2p/ift/2026q4-nimlibp2p-quic-ech|nimlibp2p-quic-ech]] +* [[p2p/ift/2026q4-nimlibp2p-reachability-relay-lifecycle|nimlibp2p-reachability-relay-lifecycle]] +* [[p2p/ift/2026q4-nimlibp2p-webtransport|nimlibp2p-webtransport]] + ## 2026q3 `ift-ts:p2p:` ### `ift:`