Commit 3f16953
authored
feat!: fanout tree protocol + large-network sims + interactive sandbox (#582)
* refactor(stream): extract seek routing helpers
* pubsub: add large-network sims and protocol sandbox
* ci: fix site build and bootstrap test
* docs: gate remote bootstrap example in CI
* docs: rewrite fanout visualizer article with references
* site: fix sandbox canvas overflow on wide layouts
* pubsub: add formation metrics + score to fanout-tree-sim
* site/docs: clarify subscribe gossip vs data plane
* peerbit-server: allow API bootstrap address override
* test: reduce flakiness (bootstrap, e2e, stream dial)
* peerbit-server: fix lint in bootstrap handler
* docs: align fanout visualizer defaults with article
* peerbit-server: tidy bootstrap handler formatting
* fix(shared-log): de-flake isLeader reachableOnly test
* feat(shared-log)!: enforce fanout data path for target-all
Remove legacy rpc fallback for target:"all" append path and make fanout failures explicit.\nForward fanout options through Documents->SharedLog and update tests/spec notes for root-only fanout publish/control-plane behavior.
* feat(pubsub)!: add routed unicast control-plane
Bound route-token cache with TTL+eviction, add route announce/query/reply control messages, expose fanout helpers on Peerbit instead of DirectSub wiring, and add route/cache metrics in sims + protocol docs.
* test(document): de-flake slow redundancy/update cases
Increase timing tolerance for known flaky scenarios and bound late-drop wait to avoid callback timing hangs in CI.
* test(document): reduce redundancy test flakiness further
Scale scenario size and widen convergence window for min-replica search test to avoid CI variance while preserving intent.
* feat(shared-log): use fanout membership for subscriber discovery
* feat!: scalable fanout delivery + interactive protocol sandbox
\nBREAKING CHANGE: FanoutTree no longer uses periodic route announcements; root route resolution is now demand-driven via subtree route queries.
* feat(log,shared-log): inject provider hints for remote entry fetch
* feat(blocks)!: bound remote get via provider hints
* feat(log,shared-log): resolve remote.from candidates for joins
* feat(shared-log): hint block providers from prune acks
* feat(pubsub)!: fanout-tree v0.5 cache hardening
- Bump fanout protocol multicodec to /peerbit/fanout-tree/0.5.0\n- Make route cache + peer hints bounded and prune in O(expired)\n- Reduce TopicControlPlane subscription tracking retention (store timestamps only)\n- Update integration helpers/tests/docs accordingly
* test(pubsub): add churn maintenance objective metrics
* feat(pubsub): add join candidate scoring modes
* feat(stream): bound route cache memory growth
* feat(pubsub): harden fanout-tree sims and tests
* fix(shared-log,program): stabilize close/resume and readiness
* fix(peerbit-react): prevent lockstorage timer leak
* test(document,sqlite3): reduce flakiness
* feat(pubsub,blocks,peerbit,shared-log): use fanout provider directory for block fetch
* test(stream,sqlite3,server,docs): reduce CI flakiness
* style(shared-log): fix accidental indentation
* test(pubsub): deflake fully-connected routing
* test(pubsub): remove fixed waits in fully-connected routing
* feat(peerbit-org): add fanout formation sandbox
Adds an interactive join/capacity visualizer (FanoutTree over in-memory libp2p) and embeds it in the fanout blog post.
* fix(peerbit-org): render formation nodes reliably
Make the canvas draw loop read latest state from refs to avoid stale closures (previously could draw only the root node during joins).
* feat(peerbit-org): simulate churn in formation sandbox
Allow clicking nodes to drop them (offline), then visualize FanoutTree auto-reparenting via join loop. Adds InMemoryNetwork.unregisterPeer and updates the blog instructions.
* feat(peerbit-org): improve formation churn recovery demo
* fix(peerbit-org): harden formation layout for disconnected components
* fix(pubsub): avoid cold-cache no-op publish on rejoin
* feat(pubsub): harden fanout tree join and routing
* docs(peerbit-org): add interactive fanout demos
* fix(peerbit-org): make fanout formation demo typecheck
* fix(shared-log): harden sync convergence in CI
* fix(pubsub): emit peer disconnect events in in-memory shim
* ci: avoid playwright install-deps in node-only CI
* fix(stream): make waitFor result order deterministic
* feat!(transport): rename/bump control-plane and blocks multicodecs
* fix(peerbit-org): close connections on unregister
* docs(peerbit-org): fix inline code rendering + update fanout article
* feat(network): add fanout metadata + shared-log fanout envelope
* fanout: add unicast ACK + shared-log directed delivery via fanout
* docs: clarify demos and expand comparisons (Iroh/Netflix/Tor)
* pubsub: opt-in fanout topics without subscriber gossip
* network v2: shared routes + abuse guards + fanout topic bench
* pubsub/shared-log: fanout sharding + checked-prune resiliency
Deflake integration tests and refresh docs/examples
* document: deflake outOfOrder queue late-results test
* time: deflake debounceAccumulator leading timing test
* shared-log: prevent duplicate replicator leave on unsubscribe races
* shared-log: bound explicit prune timeout + fix fanout sandbox
* trusted-network: deflake replicator wait in CI
* shared-log: announce offline on drop (fix restart sync)
* trusted-network: deflake trusted by chain test
* pubsub: shard-only control plane + bounded teardown
* test(shared-log): harden restart replication wait timeout
* test(shared-log): stabilize restart replication in CI
* test(shared-log): stabilize restart sync source in ci
* test(shared-log): stabilize restart and rateless sync assertions
* test(shared-log): stabilize restart and sharding ci flakes
* Fix shared-log sharding flake on peer leave and convergence
* chore: retrigger CI for PR 582
* refactor(sim): dedupe in-memory shims and benchmark helpers
* refactor(sim): move in-memory shim to libp2p-test-utils
* refactor(sim): remove legacy benchmark and dedupe fanout scaffolding
* docs(blog): clarify fanout claims, assumptions, and tradeoffs
* docs(fanout): migrate network todo items to issues and remove handoff file
* docs(fanout): reference parent tracker issue instead of child issue list
* docs(fanout): convert scalable-fanout into spec-only contract
* refactor(sim): remove benchmark in-memory libp2p re-export shims
* docs(sqlite3): annotate write barrier perf follow-ups
* chore(github): remove scalable fanout issue template
* Improve fanout visualizer runtime links and setup reliability
* Improve fanout join liveness and benchmark scale controls
* test(pubsub): stabilize mild-churn sim threshold in CI
* stream: harden keepalive under churn and add delivery regressions
* stream test: stabilize re-seek assertion after disconnect
* fix(stream): restore ack-based keepalive probing
* Stabilize fanout ci-loss benchmark and stream ACK cleanup
* Fix ci lint rule in fanout peerbit sim cleanup1 parent 07ba572 commit 3f16953
File tree
165 files changed
+33127
-6117
lines changed- .github/workflows
- apps/peerbit-org
- src
- sim
- ui
- supabase
- vitest
- docs
- blog
- examples
- modules
- client
- encryption
- program
- composition
- document-store
- rpc
- packages
- clients
- peerbit-react
- src
- vitest
- peerbit-server/node
- src
- test
- peerbit
- src
- test
- test-utils
- benchmark
- src
- test
- vite/test
- log
- src
- test
- programs
- acl
- identity-access-controller/src
- trusted-network
- src
- test
- data
- document
- document
- benchmark
- src
- test
- proxy/e2e/tests
- react
- e2e/party
- browser-node/src
- tests
- src
- vitest
- program/program
- src
- test
- rpc/src
- transport
- blocks-interface/src
- blocks
- src
- test
- libp2p-test-utils
- src
- pubsub-interface/src
- pubsub
- benchmark
- sim
- src
- test
- stream-interface/src
- stream
- benchmark
- e2e/browser/tests
- src
- core
- test
- utils
- cache/test
- crypto/src
- indexer
- interface
- src
- test
- sqlite3
- src
- test
- tests/src
- time
- src
- test
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
165 files changed
+33127
-6117
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
43 | | - | |
| 43 | + | |
| 44 | + | |
44 | 45 | | |
45 | 46 | | |
46 | 47 | | |
| |||
86 | 87 | | |
87 | 88 | | |
88 | 89 | | |
89 | | - | |
| 90 | + | |
| 91 | + | |
90 | 92 | | |
91 | 93 | | |
92 | 94 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
57 | | - | |
| 57 | + | |
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
| 11 | + | |
11 | 12 | | |
12 | 13 | | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
13 | 19 | | |
14 | 20 | | |
| 21 | + | |
15 | 22 | | |
16 | 23 | | |
17 | 24 | | |
| |||
27 | 34 | | |
28 | 35 | | |
29 | 36 | | |
| 37 | + | |
30 | 38 | | |
31 | 39 | | |
32 | 40 | | |
0 commit comments