Skip to content

History / building

Revisions

  • docs(wiki): sync the wiki with 5054225..e101797 (1049 commits) The wiki's .source-commit had not moved since 5054225. This sync covers the delta to e101797, and the two largest themes in it are a CLI that answers with structured data and a development toolchain that is no longer make. The pipe layer. Every command now answers structured data, and a chain of 17 operators renders or filters it, a record at a time. cli.md and show-commands.md carry the full catalog, replacing a 10-row table that also described match as a regex that drops non-matching entries; it takes text and keeps them. Pipe aliases, the ze help command --json machine surface, and the newly piped config, schema, yang and data groups are documented. Commands that changed name or shape. show bgp summary is deleted and show bgp answers what it used to. ze --plugins is removed with no alias and now answers unknown command; show plugins replaces it, with seven declared columns and a setup outcome. Eight pages still told a reader to run the removed flag. announce is three commands and withdraw three forms, each also reachable peer-scoped with the selector first. ze format does not exist; the command is ze pipe, and three pages named the wrong one. Rendering flags. --json is gone from fifteen commands and the pipe layer replaces it. It survives on doctor, explain, support, skills, interface show/routes/neighbors, bgp decode and plugin test, so the sweep was scoped to the commands that lost it rather than to the flag. Protocol. The RFC 4456 Section 9 CLUSTER_LIST tie-break is documented as best-path step 8. MED removal is del { med; }, not set { med-remove true; }. IPsec gains PAD sub-tree matching and the policy-priority leaf. peers.md records the two RFC 9687 Send Hold Timer obligations, including that a peer proposing a zero hold time now holds its session. memlock and anomaly-observe get catalogue rows. Not included. command-catalog.md carries a third session's uncommitted work and is generated, so it is left out and left unlinked from _Sidebar.md; linking it would pull 296KB of another session's in-flight content into llms-full.txt. ze config ls and ze data ls keep their spelling: the ls to list rename covered the show forms only, and the offline roots are still ls at e101797. llms.txt and llms-full.txt are regenerated (181 pages). .source-commit is bumped last.

    @thomas-mangin thomas-mangin committed Aug 31, 2026
  • docs: update canonical Make target names

    @thomas-mangin thomas-mangin committed Aug 17, 2026
  • docs: update Make target names

    @thomas-mangin thomas-mangin committed Aug 16, 2026
  • docs(wiki): sync wiki with acbef856e..505422597 (795 commits) New pages: dns.md, the shared authoritative DNS harness behind as112 and geodns, plus the caching resolver. Updated 94 existing pages. Feature areas covered: IKE/IPsec RFC 7296 conformance, EAP-TLS 1.3 and kernel dataplane read-back; BGP communities (RFC 1997 egress suppression, RFC 7999 blackhole agreement, RFC 7454 scrub); dynamic peer groups; RFC 9234 roles and OTC; RFC 4271 Section 5 egress attribute rules; RFC 7606 typed-family discard; RFC 7911 path-identifier regeneration; protocol event capture and replay; RPKI sync reporting and blackhole exemption; RIB-to-FIB forwarding actions; IS-IS LSDB operations; OSPF RFC 3101 NSSA defaults; BMP delivery bounds; MRT damage reporting; PPPoE subscriber authentication; L2TP accounting attributes; DNS answer policy; DDoS mitigation lifetime; IPv6 Router Advertisements; VPP and firewall reconcile deadlines; the templ and htmx 4 rendering cutover for the web UI and Looking Glass; MCP protocol revision 2026-07-28; startup config validation; the management listener exposure guard; PKI-backed TLS; the verb-first CLI migration; appliance kernel and build gates; and the RFC requirement ledger. Corrections to claims the code no longer supports: MOBIKE is not implemented, the BGP hold-timer grace period was deleted, the IPsec virtual IP pool is not wired, the Looking Glass defaults to TLS on, MCP tool names were wrong, and about twenty-five removed bare command spellings were replaced with their registered verb-first forms. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FwRCPDR1JhZFg5aynjDQoo

    @thomas-mangin thomas-mangin committed Aug 16, 2026
  • docs: add the netlab page and correct the container image claims Ze runs as a netlab daemon node. netlab builds a lab from a YAML topology and runs each node under containerlab, so a reader who wants Ze beside FRR or BIRD in one topology now has a page that says how. The new page states what is proven and what is not. The templates render, the committed configuration passes the Ze parser, and a daemon started from that render answers the show command netlab validation parses. `netlab up` and `netlab validate` were never run, because the machine that wrote the integration has no containerlab, so no declared module is validated by netlab's own suite. Five pages carried container image claims that stopped being true: - There are two images now. `ze:latest` is the deployment image, a static binary on a scratch base. `netlab/ze:latest` is the lab image, alpine with tini and iproute2, because containerlab and netlab exec sh and ip inside a node. - The sizes were measured, not copied: 119 MB and 137 MB. - `ZE_TAGS` adds tags to the set derived from feature-gates.txt. It used to replace the whole list. docker.md also documented `docker run ... ze:latest /etc/ze/ze.conf`, which exits 1 with "unknown command". The config path goes behind `start`.

    @thomas-mangin thomas-mangin committed Aug 14, 2026
  • docs(wiki): sync wiki with 44673dfea..15f9b98ae (211 commits) Updated 29 existing pages. No new pages. Breaking CLI change: a bare `ze <config-file>` no longer starts the daemon. Position 1 accepted a command OR a free-form path, so a config named like a command was dispatched as that command and never loaded. Launch is now `ze start <config-file>`, with `-` kept as the stdin sentinel. Corrected in quick-start, starting-and-stopping (including its systemd unit), command-reference, debugging, scenarios, chaos-tested-peering and exabgp-migration-walkthrough. command-reference also gains a `ze start` section with its own flags. Also flipped: `ze config set`, `activate` and `deactivate` no longer notify a running daemon by default. `--reload` opts in and `--no-reload` is gone. Feature gates grew from 12 to 36 and now include the BGP engine itself, the BNG, IPsec, VPP and every routing protocol. building.md gets the full grouped list, the generated `go install` line, and the dependency rules that make it usable: ze_bmp needs ze_bgp, and bfd/api stays always-on so a BFD-less build still runs BGP and OSPF unchanged. status, feature-inventory, comparison and glossary all carried the stale twelve-tag list. RFC gate: 138 enrolled RFCs over 1466 gated requirements became 166 documents over 2720, none outstanding. Documented the four regression ratchets and the extraction-completeness pass, including why deleting a requirement is blocked: it would otherwise be the cheapest route from red to green, cheaper than declaring a gap, which would pressure contributors to hide obligations. Protocol correctness, documented where an operator would look for it: - route-injection: an operator-supplied as-path gets the local AS prepended for a plain eBGP peer (RFC 4271 5.1.2). Verbatim transparency is scoped to RS clients, so the two never share a built UPDATE. - peers: RFC 6286 identifier validation on both receive rails, AS-wide uniqueness, and the allow-shared-router-id opt-out for anycast speakers. - graceful-restart: RFC 9494 4.6 depreference on stale readvertisement is driven by stale level rather than restart state, so mark-stale routes are covered too. - bgp-nlri-ls: an unknown NLRI type is skipped, not fatal to every NLRI after it, per RFC 9552 5.1. - bgp-nlri-evpn: Ze is a control-plane relay and not a PE; malformed IP Address Length is rejected. - bgp-rib: multipath ECMP group installation and the ecmp-paths field. Security and robustness: authorization fails closed on an unresolved profile, with the reserved-namespace break-glass path and the AAA ingress filtering that stops an untrusted RADIUS or TACACS+ server naming it. EAP-TLS refuses a responder that has no trust anchor to validate against. static isolates one unprogrammable route instead of failing the whole section, withdraws the orphaned old route on a skipped replacement, and surfaces both through skip-reason and a doctor check. Operator traps now named: the pinned appliance kernel ships no L2TP and Ze's fail-closed probe crash-loops the daemon on it with nothing useful on serial; policy routing needs a filter chain because nftables rejects a route chain on prerouting, which took the plugin down at startup; nft set-element timeouts silently never expired until the set-level flag was set. ci.md claimed the CI configuration was not in the repository. It is: validation moved off Codeberg's shared Woodpecker runners onto GitHub Actions, six workflows, with the stage list single-sourced in stagesForMode so a gate absent from that function runs nowhere. testing.md gains the test-health dashboard (is our testing correct, not is it large), the two sensitivity ratchets, the accept-only .ci lint and its shrink-only baseline, and the needs-linux and netns-link directives. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    @thomas-mangin thomas-mangin committed Jul 25, 2026
  • docs(wiki): sync wiki with cc71d46e2..075d46b4b (440 commits) New pages: as112, radius, ddos, anomaly. Updated existing pages covering: IPsec IKEv2 responder and real make-before-break rekeying; OSPF extension family (Segment Routing, TE, TI-LFA, graceful restart, virtual links, NBMA, point-to- multipoint, multi-instance, OSPFv3 IPsec); VPP tunnels, SPAN, WireGuard, LCP pairs, DSCP policing, and static routes; L2TP LAC initiator and PPPoE-to-L2TP relay; appliance pure-Go initrd and startup resilience; build-time feature gates; web RBAC, AAA-chain login, config transfer, and i18n; verb-first CLI and new show, announce, anomaly, and ddos verbs; DDoS mitigation; behavioral anomaly detection; encrypted and validated DNS (DoT, DoH, DNSSEC); RADIUS operator auth; GTSM and CoPP control-plane protection. Refreshed feature-inventory, status, plugins, comparison, glossary, and _Sidebar; regenerated llms.txt and llms-full.txt. Corrected stale show ip ospf to show ospf and show ipsec to show vpn ipsec commands. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ny5i2V6UuvNF8TQG4WN1zv

    @thomas-mangin thomas-mangin committed Jul 13, 2026
  • docs(wiki): sync wiki with 260623af4..57bc2720b (296 commits) No new pages. Updated 15 existing pages covering: MRT daemon recording and expanded analysis tool, verb-first CLI grammar, command surface ownership, pipe operators (first N, last N), ze help command, internal ICMP engine, iPXE chainloading, appliance ISO builds, kernel profiles, unified binary with build tags, attrpool sharding, mutation testing, QEMU test suite, authorization sidebar link. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    @thomas-mangin thomas-mangin committed Jun 9, 2026
  • docs(wiki): sync wiki with 952308c..0318cf8 (192 commits) New pages: ipsec, docker, health-checks, production-diagnostics, self-update, ze-install. Updated 25 existing pages covering: IPsec/IKEv2, diagnostics suite, self-update with fleet rollout, ze doctor, health registry, crash capture, XFRM interfaces, interface rate tracking, FlowSpec-to-firewall bridge, ASPA policy enforcement, RS dynamic peers, AIGP support, DHCP named ranges, Docker support, zero-touch provisioning, ZeFS integrity, config schema stamp, graceful listener migration, chaos v2 actions, monitor ping/traceroute/netlink, live packet capture, DNS cache management, conntrack nfs/sqlnet helpers, archive pruning, performance optimization campaign, Go 1.26, and glossary additions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    @thomas-mangin thomas-mangin committed May 24, 2026
  • Update building and loop pages for proto toolchain and filter type building.md: add a Protocol buffer toolchain section covering make ze-setup (installs protoc-gen-go and protoc-gen-go-grpc) and the need for protoc from the system package manager. Add a Gokrazy VM appliance section pointing at the new appliance page. loop.md: clarify loop detection is now configured via the loop-detection filter type under bgp/policy (allow-own-as, cluster-id), with auto-population into every peer's import chain. Link to the route filters page. Note the session/cluster-id and loop-detection/cluster-id sync behaviour. Source commit: 7fcc8083 (main repo). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    @thomas-mangin thomas-mangin committed Apr 11, 2026
  • Flatten wiki to root directory for GitHub wiki compatibility GitHub wiki resolves pages by filename in the root directory only. Moved all 123 .md files from subdirectories to root. Renamed configuration/interfaces.md to configuration-interfaces.md to avoid collision with interfaces/interfaces.md. Fixed 8 image paths. Subdirectories are now empty (images/ retained for assets). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    @thomas-mangin thomas-mangin committed Apr 8, 2026