From bd0a9f2ff0dd01e0deb1a0b6ffff1c430bdf94fe Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Fri, 25 Sep 2026 13:48:16 -0700 Subject: [PATCH] v2.2: adopt example.toml as a given copy; run notes Co-Authored-By: Claude Fable 5.1 --- docs/plans/v2.2/README.md | 6 ++++++ docs/plans/v2.2/_files/example.toml | 33 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 docs/plans/v2.2/_files/example.toml diff --git a/docs/plans/v2.2/README.md b/docs/plans/v2.2/README.md index e2e6ae5..46fc664 100644 --- a/docs/plans/v2.2/README.md +++ b/docs/plans/v2.2/README.md @@ -31,3 +31,9 @@ intended reasons. already at 401 lines and the task named no new file for the package. Owner fault: the task now creates `internal/config/route.go` (and allows `internal/proxy/route.go`). Session stopped and restarted on a clean tree. +- 2026-09-25, task 02: the task told the implementer to modify `example.toml`, which is a v2 + given file (protected). Owner fault — a replacement should have been given. The one-line change + (the commented `broadcasts` list) is adopted as the v2.2 given copy of `example.toml`. +- Both tasks first-gate: 01 in 21 min after the restart, 02 in 8 min. Task 02 edited + `internal/config/identity.go` rather than `config.go` because that is where `Wake` lives + (logged deviation, correct call — owner named the wrong file). diff --git a/docs/plans/v2.2/_files/example.toml b/docs/plans/v2.2/_files/example.toml new file mode 100644 index 0000000..4c3a1ff --- /dev/null +++ b/docs/plans/v2.2/_files/example.toml @@ -0,0 +1,33 @@ +# crossbar example configuration (v1). Replace and the addresses with your own. +listen = "127.0.0.1:17777" # never 0.0.0.0 — bind the tailnet address in production +db = "crossbar.db" # SQLite: leases + accounting (WAL). /var/lib/crossbar/crossbar.db under systemd +poll_interval = "1s" # 60s in production; 1s makes the smoke run quick +lease_idle = "30m" # a conversation idle this long loses its host +retention = "180d" # per-request rows older than this are rolled up daily +queue_max = 1 # waiting places per (host, model) beyond `parallel`; 503 past that +identity = "off" # "tailscale" gates routes with `peers` by `tailscale whois`; "header" trusts X-Crossbar-Peer (TEST ONLY) + +[hosts.alpha] +base_url = "http://127.0.0.1:18081" # e.g. http://straylight.:11434 +weight = 1.0 +models = { "ornith-1.5-35b-a3b" = { parallel = 1 }, "small-9b" = { parallel = 6 } } + +[hosts.beta] +base_url = "http://127.0.0.1:18082" # e.g. http://titan.:8081 +weight = 2.0 +models = { "ornith-1.5-35b-a3b" = { parallel = 2 } } +[hosts.beta.wake] # v2: wake a sleeping host when nothing else can take a new lease +mac = "aa:bb:cc:dd:ee:02" +broadcast = "127.0.0.1:19082" # the LAN broadcast address, port 9, in production +# broadcasts = ["127.0.0.1:19082", "127.0.0.1:19083"] # v2.2: a roaming host on several networks; this or broadcast, not both, and at least one +wait = "20s" + +# v1: a route is a set of candidate hosts; each conversation gets a sticky lease on the host with +# the most free slots × weight at the time it starts. Pins and drains come from the admin API. +[routes.opencode-a] +hosts = ["alpha", "beta"] +default_model = "ornith-1.5-35b-a3b" + +[routes.hermes-x] +hosts = ["beta", "alpha"] +# peers = ["talos"] # v2: with identity = "tailscale", only these tailnet nodes may use the route