0.7.0 - 2026-07-27
- Add test setup helpers to Lab builder (#44) - (9f0d703)
- [breaking] Realistic link emulation (congestion-buffer and bursty-loss knobs) (#43) - (7014aaa)
- [breaking] Rework NAT taxonomy with behavior-only variants + ADF filtering (#37) - (8415da5)
0.6.0 - 2026-06-15
0.5.2 - 2026-05-07
0.5.1 - 2026-05-04
0.5.0 - 2026-04-14
- [breaking] LabDropGuard with FlushRegistry for guaranteed clean shutdown (#29) - (4973d10)
- [breaking] Replace LabOpts with Lab::builder() pattern (#31) - (09a33de)
- Prevent mount namespace leaks and enforce user namespace isolation (#30) - (275ac1d)
- Use AbortOnDropHandle for DNS server task lifecycle (#28) - (e001d5c)
- Remove stale files (#23) - (859adc6)
- Replace iroh-integration with self-contained fixture (#24) - (f1ef699)
- Prepare 0.5.0 release (#32) - (b3c9cf3)
0.4.0 - 2026-04-10
- [breaking] Replace DNS overlay with in-process DNS server (#13) - (699170f)
- [breaking] Unified interface API with IfaceConfig, Iface handle, and isolated interfaces (#21) - (ccc77d9)
- Two safeguard issues from crate review (#15) - (5c3cab9)
- [breaking] Remove unused direction parameter from Lab::set_link_condition (#18) - (4c2c0a2)
- Split core.rs and handles.rs into focused modules (#14) - (765e38b)
- Use rtnetlink for region link break/restore (#16) - (8983acd)
0.3.0 - 2026-03-31
- Prepare patchbay v0.3.0 release - (6ad9f77)
0.2.0 - 2026-03-30
- Add patchbay-serve binary with push API, ACME TLS, and retention - (aedf9c0)
- Add systemd unit file, restructure testing docs - (94f77b0)
- Add deep linking with react-router HashRouter - (f92295b)
- Flat run dirs, sims tab in invocation view, fix deep linking - (c3d79aa)
- Split bind into --http-bind and --https-bind - (bc821ac)
- Add TestGuard for per-test pass/fail status in state.json - (d75987a)
- Emit TestCompleted event, sort _lab first in timeline - (38f2226)
- Move pushed-runs listing to React UI, add workflow template - (866aa8f)
- Add [matrix] expansion for sim TOML files - (729bc67)
- Rewrite variable refs during counted device expansion - (7544b19)
- Add Apple container backend for patchbay-vm (#7) - (674b80b)
- Unified CLI, compare mode, metrics collection (#9) - (3e92f5f)
- Improve run discovery and group pages (#10) - (4fb9f73)
- Deduplicate timeline events, fix jump-to-log precision, style span rendering - (2920b8c)
- Correct view URL in CI snippet and runs index page - (1cfe67a)
- Install rustls crypto provider at startup - (6424cbb)
- Bind ACME listeners on 0.0.0.0 instead of [::] - (8f28d1f)
- Validate ACME port requirements at startup - (ff8f0b6)
- Replace SSE with REST for initial load, SSE only for live runs - (e69d513)
- Block on writer completion in drop, create state.json if missing - (88f2344)
- Apply proper fullcone NAT rules for CGNAT (EIM+EIF) - (78540fb)
- Run prepare builds before binary assembly - (c3139af)
- Extract AxisParams type alias to satisfy clippy type_complexity - (5ed18dc)
- Bind-mount /proc/thread-self/net over /proc/net in namespaces (#5) - (9bdd7fc)
- Reduce default capture timeout from 300s to 30s - (887f9ff)
- Rewrite results capture keys during counted device expansion (#6) - (94876c4)
- Share tracing dispatch between async and sync namespace workers - (9f41d41)
- Sync final state.json write via shared LabState mutex - (e905ff6)
- Merge runs index, unify /api/runs with manifest data - (8efa131)
- Put patchbay-server integration behind
servefeature - (57641d4)
- Add patchbay-server README with deploy and CI docs - (705c0d4)
- Add matrix expansion and when field to TOML reference - (3a60cd9)
- Add e2e test for push API and deep linking - (b31372d)
- Add tests for counted device ref rewriting - (8fca4d0)
- Fmt - (10e39e6)
- Fmt - (11685cc)
- Run CI on all pull requests - (1637f14)
- Fixup CI - (52890e1)
- Prepare patchbay v0.2.0 release - (03ab97d)
- (patchbay-vm) Add Apple Silicon (aarch64) support - (763de72)
- (sim) Surface last out.log error in manifests and UI - (58a2dff)
- (sim) Split stdio logs and add verbose live streaming - (e8cae16)
- (sim) Additive infrastructure for generic capture-based results (Steps 1-6) - (7c32262)
- (sims) Port all iroh/iperf sims to new template/group/captures model (Step 7) - (69fad18)
- (tracing) Add structured span hierarchy with lab/router/device context - (58be1cb)
- (ui) Stabilize timeline selection and log navigation - (2f0bd4c)
- (ui-server) Use fixed shared default port for run/serve - (1573732)
- Phase 1 — multi-interface Device, unified add_router, DeviceBuilder - (7d5a505)
- Consolidate netns execution, docs, and vm tooling - (5325073)
- Add iroh integration runner with vm workflow - (0ba5574)
- Switch dynamic ops to rtnetlink - (b6bf73e)
- Add iperf parser-backed sim reporting - (171812a)
- Port legacy iroh sims and add chuck-compatible reports - (194356c)
- Add standalone netsim-vm runner - (a35a2d8)
- Refactor sim run layout and transfer args - (92e2122)
- Add run manifest and per-sim summaries - (3404897)
- Add browser UI for sim results, logs, timeline and qlog - (65a2990)
- Unify serve/progress UX and remove netsim VM runtime code - (a9ae322)
- Refactor UI to manifest/progress-driven sim workspace - (29255e2)
- Use shared URL cache for binaries and reduce cleanup log noise - (66e73e9)
- Add run overview UI and drop chuck compat outputs - (9338cfc)
- Add ranged log loading and metadata-first log viewer - (90643ce)
- Add inspect and run-in interactive debug workflow - (ac82689)
- Complete rootless mode and remove setup-caps - (a018d37)
- Refactor sim steps and utilities - (3aa5215)
- Build ui in build script - (8b1a3b4)
- Add prepare workflow and no-build sim runs - (f51789c)
- Batch prepare builds and refresh README usage - (8ba2bb1)
- Implement IPv6 dual-stack and v6-only support - (565286c)
- Implement fullcone NAT for UDP hole punching - (0bd63bb)
- Allow configuring downstream subnet on RouterBuilder - (7dc8473)
- Per-device DNS entries via /etc/hosts bind-mount overlay - (b0667fb)
- Mount-once write-through DNS overlay with resolv.conf support - (b204d0f)
- NAT presets, API renames, Home NAT holepunching - (08844fb)
- NatConfig builder API, rewrite NAT rule generation from config - (772b352)
- Enhanced impairment presets, Nat::Custom, parallelized tests - (ae842e8)
- MTU control, ICMP frag blocking, node removal, IP management - (0008731)
- Implement first-class region routing with veths and netem - (1ea6723)
- Add firewall presets (Corporate, CaptivePortal, Custom) - (f949cba)
- Add Device::add_iface and Device::remove_iface for runtime interface management - (389be19)
- IPv6 stateful firewall, public GUA pool, NAT64 plan - (df12349)
- RouterPreset, unified FirewallConfig with PortPolicy - (3dbc3ff)
- NAT64 userspace SIIT translator for IPv6-only mobile networks - (07050a3)
- Unified devtools UI, per-namespace tracing, multi-run server - (f5e3944)
- Add ipv6 link-local plumbing and router iface API - (be820f1)
- Improve RA-driven IPv6 scoped default-route handling - (ee3fea7)
- Add router RA controls and worker gating - (e729af5)
- Emit RA advertisement events with lifetime metadata - (2053d34)
- Handle RA lifetime zero for radriven default routes - (7752a12)
- Emit rs tracing events in radriven control path - (6d96fa2)
- Persist radriven router solicitation events to node logs - (1af73cd)
- Add runtime router RA controls for radriven route refresh - (22e8b4c)
- Reconcile radriven v6 default routes on runtime RA changes - (988d3d0)
- Make ra worker react to runtime config updates - (878350b)
- Add ipv6 deployment profiles for lab provisioning - (d354e13)
- Map router presets to recommended ipv6 profiles - (e712356)
- Allow per-device ipv6 provisioning overrides - (ac132e8)
- Add --testdir flag to serve commands - (19358e6)
- Improve patchbay-vm test command and fix virtiofs permissions - (2a35cca)
- Support full directive syntax in PATCHBAY_LOG / RUST_LOG file filter - (9c8dde1)
- Add .tracing.log ANSI output per namespace - (2668e1f)
- Add invocation grouping and combined results view to UI - (66b7fc5)
- Add --project-root, --timeout flags and fix capture/interpolation edge cases - (efb0f73)
- Flat stdout/stderr log files, command lifecycle events, and UI improvements - (f21a94f)
- Detect tracing-jsonl logs by content in server - (bd53b9a)
- Add patchbay.toml config and recursive sim directory scanning - (af3801e)
- (net) Repair NAT/routing wiring after refactor - (e82ba83)
- (sim) Improve failure output and repair nat-switch sim - (390c54a)
- (sim) Load binaries from extends files; fix assert syntax in sims - (6541057)
- (ui) Enforce wall-time ordering in timeline - (e035886)
- Improve vm run/test ergonomics - (b41bdd2)
- Align inspect with run backend and keep session interactive - (397cd91)
- Honor host build env and simplify transfer perf table - (4ac34c3)
- Use cargo metadata target dir for local sim builds - (d3ac4f5)
- Resolve 5 failing tests in netsim-core test suite - (d306082)
- Apply region latency rules when routers are built via builder API - (1333936)
- Complete IPv6 dual-stack test fixes and cleanup - (bf50efa)
- Prevent EDEADLK panic in worker Drop, fix switch_uplink veth teardown - (f457914)
- Address allocator overflow, doc inaccuracies, error propagation - (7b02bcd)
- Make loss_udp_moderate less flaky - (7e76174)
- V6 inter-region routing and test corrections - (7be1c91)
- Enable unprivileged user namespaces in CI - (330f51a)
- Make udp_send_recv_count robust against buffer overflow and reflector races - (fa8f15d)
- NPTv6 prefix translation and v6 routing bugs - (74a2ed0)
- Address code review findings (symlink safety, server lifecycle, event reducer) - (9eb24ed)
- Preserve tracing span chains and verify in devtools e2e - (31b63df)
- Improve log kind detection and qlog rendering - (ba5962b)
- Resolve ipv6 link-local review findings - (28ab0ca)
- Resolve clippy unnecessary_unwrap warnings - (21f00ba)
- Retry tc commands on transient EAGAIN - (d9b40ed)
- Reduce CI test parallelism to prevent EAGAIN flakes - (30bbd4b)
- Add error context to bare socket/command spawns for EAGAIN diagnosis - (97ebb5e)
- Add loss tests to serial-heavy group and increase warmup deadline - (2e19425)
- Relax tight timeouts and RTT bounds, enable CI cache on failure - (e05f007)
- Make spawn_reflector async with readiness signalling - (49846a2)
- Tighten ipv6 default-route handling and align ipv6 ll docs - (9906e8f)
- Make spawn_reflector async with readiness signalling - (1ee7570)
- Make spawn_reflector async with readiness signalling - (1fdf0ff)
- Split e2e into parallel CI job, fix stale netsim references - (7edde73)
- Remove stale iroh e2e test - (8c8f3d6)
- Apply netem loss after ARP warmup to prevent flaky loss tests - (ddc5f79)
- Deduplicate v6 route dispatch, RA guard, and RS emit logic - (9134fac)
- Json tree toggle, timeline detail cleanup, and lab stop status - (aeec33e)
- Write stopped status on channel close instead of LabStopping event - (8c2c333)
- Close SSE connections on page unload and fix JsonTree key click - (9310b1d)
- Fix e2e test failures in CI - (203c6e9)
- (sim) Remove iroh-specific code and legacy step fields (Commit C) - (03eb9c2)
- Add Qdisc abstraction for impairments - (c1c2371)
- Simplify UI run views and transfer summaries - (c1a239d)
- Remove ported sims for now - (a04386f)
- Update sim files - (cb3dad7)
- DRY, docs, simplifications + REVIEW.md - (f05bed9)
- Apply REVIEW.md items 1–5, 7, 9–10; close 3, 6, 8 - (d4be5a3)
- Split monolith into netsim-core, netsim-utils, netsim, netsim-vm - (d3d8112)
- Report layer to steps model, MB/s throughput, human-readable UI - (ec4055e)
- Netsim-core cleanup — split lib.rs, internalize naming, remove aliases - (88ac0c4)
- Async namespace worker redesign + deterministic resource cleanup - (a4d51b3)
- Persistent Netlink per namespace, RouterBuilder, async lab ops - (52a0568)
- New Lab API with Device/Router handles and instant construction - (4149a73)
- API cleanup — rename, deduplicate, remove debug cruft - (77fd3f2)
- Migrate tests to Device/Router handle API, internalize core - (1e10faf)
- Remove ResourceList cleanup, simplify Netlink, add task spans - (cd05f88)
- Some cleanups - (4b19672)
- Remove globals, add Ix handle, ns-free test helpers - (69b7c66)
- Merge LabInner into NetworkCore, async reflector, remove TaskHandle - (a44a97f)
- Remove Lab::ix_gw, use ix().gw() instead - (517d892)
- Remove own_netns tracking, tighten visibility to pub(crate) - (70af3c8)
- Merge ns creation + async worker thread, clean up netns module - (3b77b81)
- API cleanup — rename Impair, remove deprecated, fix races - (40adab7)
- Consolidate test helpers, remove duplicates, fix loss_udp_moderate - (005f125)
- Split lab.rs into nat, firewall, and handles modules - (c055eaf)
- Overhaul mutex/lock architecture for async soundness - (edf30a7)
- Eliminate panics from Device/Router handles on removed nodes - (fe56fa8)
- Make Lab::new() fallible instead of panicking - (bc89f35)
- Split monolithic tests.rs into 16 focused submodules - (aa0a5a0)
- Migrate String → Arc, extract lock bodies into NetworkCore - (56bd22b)
- Rename spawn_command default to async, _sync suffix for sync - (4810393)
- Remove sync server API, add devtools docs - (6f808da)
- Drop patchbay dep from patchbay-server, remove live mode - (47049d4)
- Replace events tab with lab_events file kind and DRY JSON rendering - (e87a72e)
- Introduce OutDir enum and recursive server scan - (b0dd032)
- Consolidate router presets and improve documentation - (49d2696)
- Move simple example from patchbay-runner to patchbay - (c7fb67a)
- Improve lib.rs docs, remove ObservedAddr, tighten visibility - (2770ff4)
- Add rootless user-namespace implementation plan - (bf9df20)
- Add maintainability review plan - (b8b523c)
- Add iroh-isolation implementation plan - (ecb9cbd)
- Add sim TOML reference and rewrite README - (43be619)
- Readme and example - (eb0f54c)
- Add real-world network patterns guide - (b1b5649)
- Expand public API rustdoc across patchbay crate - (625993b)
- Review all prose and doc comments for accuracy and wording - (5e39711)
- Fix README API inaccuracies, add multi-region routing section - (ff830a3)
- Fix stale API references, add RouterPreset/firewall sections - (b3c06d1)
- Add NAT64/MobileV6 to docs, move holepunching to docs/ - (4416b87)
- Add mdbook with guide section and reorganize reference docs - (9709bc5)
- Rewrite guide for better prose, add motivation chapter - (084a1d4)
- Ctor test pattern, VM guide, reorder NAT64, rework holepunching - (57c1925)
- Replace README include with concise book introduction - (36dd6eb)
- Add devtools & UI implementation plan - (c9cd0a2)
- Document ipv6 link-local behavior and stabilize udp loss tests - (65dbcbd)
- Finalize ipv6 link-local plan completion status - (3053fc4)
- Clarify ipv6 fidelity and add limitations reference - (cba194c)
- Refine prose style and normalize reference wording - (d9ff2a4)
- Improve prose and writing style - (72a8235)
- Update REVIEW.md and add Ipv6Profile divergence comment - (79e5ae2)
- Add fmt-log command to testing guide - (b882445)
- (ui) Add playwright e2e for iroh-1to1-nat run - (82c4455)
- Capture net_report QAD timeout with dev relay - (0293521)
- Strengthen ui e2e assertions - (3c1ee4b)
- Add 8 new coverage tests across feature areas - (f45440f)
- Add coverage for BlockInbound, RouterPreset, and public v6 pool - (c476e03)
- Cover local v6 routing without default router in radriven mode - (48ae37c)
- Cover ra worker shutdown on router removal - (ae33db3)
- Verify ra reconcile skips static override devices - (f73fed1)
- Cover static override route switching with runtime iface changes - (8a9b8bf)
- Assert static ipv6 mode skips ra and rs tasks - (018d9db)
- Add runner sim e2e test - (917e5af)
- (logging) Normalize cleanup logs - (b5c70a3)
- (sim) Finalize relay/dev-env runtime updates - (fd93dbb)
- (sim) Align verbose log prefixes - (753da3a)
- Update .gitignore - (35a66f3)
- Remove outdated workflow file - (172cfee)
- Remove obsolete qemu-vm.sh based instructions, use netsim-vm instead - (9973d15)
- Remove #[serial] from all tests; drop serial_test dependency - (2716ece)
- Add missing types and fmt ui - (5400adb)
- Move tests to file - (d5eb87c)
- Fmt - (f4a3bc1)
- Remove duplicate test definitions - (8d535dc)
- Fmt - (afc7572)
- Add license - (f8aecf8)
- Cargo.toml file cleanup - (e181ecc)
- Mark no-globals-better-spawn plan as complete - (28d52e6)
- Name all threads, configure nextest parallelism - (5dbf808)
- Review fixes — remove dead code, dup docstring, stabilize flaky test - (339f355)
- RouterBuilder::error helper, remove parse().unwrap(), dead code - (235aa1d)
- Remove dead code and fix clippy warnings - (6130feb)
- Remove deprecated API, replace stale tests, add lint gates - (5212853)
- Fmt - (2210e90)
- Add GitHub CI workflow and update format instructions - (3bfc41c)
- Add GitHub Pages workflow for mdbook - (0365a50)
- Add rolling release CI workflow - (a870303)
- Fixup CI - (f47f582)
- Update gitignore - (9355fc4)
- Fmt - (1c1cd13)
- Fmt patchbay-runner - (c300b99)
- Bump GitHub Actions to v5 to fix Node.js 20 deprecation - (8b53233)
- Update .gitignore - (e0c48e0)
- Cleanup and bump all deps - (67fe8f0)
- Add exhaustive ipv6 link-local implementation roadmap - (9a8989c)
- Initial commit - (8f0a55d)
- Add workspace-reorg.md for 4-crate split proposal - (61f2ea4)
- Add dns,ipv6,testing plans - (e5abc74)
- Restructure plan management system - (d6f9279)
- Update dns plan - (82f3e28)
- Add new-api plan - (af9858d)
- Mark new-api complete, update ipv6 plan for new API - (0dc7bc8)
- Mark ipv6 plan complete - (b89f3f4)
- Rewrite DNS plan focused on Rust API hosts-file overlay - (966d38e)
- Mark DNS phase 1 as complete - (7e230c9)
- Add real-world-conditions, virtual-time, update PLAN.md - (8d29f0f)
- Mark region routing complete, update real-world-conditions checklist - (092397f)
- Mark all real-world-conditions phases complete - (197c9fa)
- Netsim → patchbay across entire workspace - (c7d9e44)