Commit Graph
110 Commits
Author SHA1 Message Date
kyleandClaude Opus 5.5 2683df51bd ASSESSMENT: the idle-session cause was OpenCode 1.15 waiting on a piped stdin
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 22:39:02 -07:00
kyleandClaude Opus 5.5 c9c9af908d run-plan: give opencode an empty stdin (1.15 hangs in the background otherwise)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 22:38:41 -07:00
kyleandClaude Opus 5.5 8af40559c1 ASSESSMENT.md: lessons from 28 Ornith tasks (v0–v2.3) and sift P5a so far
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 22:35:27 -07:00
kyleandClaude Opus 5.5 436d2516a3 Merge v2.3: control-plane calls, route affinity, queue = false, route listeners, llama-server ctx error
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 20:17:06 -07:00
kyleandClaude Opus 5.5 9ff38dfe4e v2.3 review: drop a duplicate logIdentityMode call; README wording; review notes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 20:17:03 -07:00
kyle 7a12ddcf5a Context refusal in llama-server's exceed_context_size_error shape; README for v2.3
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 20:15:49 -07:00
kyle fa4d06170f Merge remote-tracking branch 'origin/master' into v2.3 2026-09-25 20:11:27 -07:00
kyleandClaude Opus 5.5 ae7b10b4db v2.3 task 04: replacement ctxguard_router_test.go for the new refusal body; run notes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 20:11:12 -07:00
kyle 15f6c62381 v2.3/04-ctx-error-docs: stopped, protected v2.1 router test conflicts with new body
refuseCtx now emits llama-server's exceed_context_size_error shape (task rule 1:
only top-level key is "error"); the v2.3 replacement ctxguard_test.go passes and
make smoke still finds "prompt too large". But the protected v2.1 copied test
ctxguard_router_test.go still asserts the old top-level "max" field, which rule 1
forbids alongside "error" — the two protected files demand mutually-exclusive
bodies and the gate cannot pass with the task-required shape. README work
(context-guard body, a new "Clients that manage their own slots" section, and the
three route keys in the config table) is correct but left uncommitted alongside
the code for review; the owner must hand over a ctxguard_router_test.go that reads
error.n_ctx instead of a top-level "max".

Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 20:10:09 -07:00
kyle fa1c398fc4 A route may have its own listener: every request there is that route, paths unprefixed
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 19:59:21 -07:00
kyle 35b07ece81 Merge remote-tracking branch 'origin/master' into v2.3 2026-09-25 19:34:20 -07:00
kyleandClaude Opus 5.5 d3f1d8e55a AGENTS.md: never tune production timing to a test; commit messages via .state/commit-msg.txt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 19:34:13 -07:00
kyle 72bc9c1a27 Merge remote-tracking branch 'origin/master' into v2.3 2026-09-25 19:33:49 -07:00
kyleandClaude Opus 5.5 aea2eeae2c Routes may share one lease (affinity = "route") and skip crossbar's queue (queue = false)
route.go gains Route.Affinity/Queue with PerRoute(), Queues() and affinity
validation (checkRoutes moved here; config.go calls it once). limiter.Track
counts a request without holding or refusing it; a release hands the slot to a
waiter only while in flight <= parallel. The proxy leases a PerRoute() route
under an empty fingerprint (the row keeps the real one) and uses Track when
Queues() is false.

Implemented by Ornith (OpenCode); owner review removed a release-on-first-flush
workaround for a race in the owner's given test (see implementer log).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 19:33:46 -07:00
kyleandClaude Opus 5.5 fe6cd447c8 v2.3: fix the queue=false release race in the given test; add TestLoadIsHeldForTheWholeStream; run notes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 19:33:27 -07:00
kyle 33fa61bedb Control-plane requests follow the lease but take no slot and write no row
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 17:44:00 -07:00
kyleandClaude Opus 5.5 3518e84dd7 v2.3 plan: clients that manage their own slots (control calls, route affinity, queue = false, route listeners, llama-server ctx error); given tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:36:59 -07:00
kyleandClaude Fable 5.1 4c6415819e deploy/hyperborea: opencode-*/hermes-*/probe-* templates; titan wake to both segments
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 13:48:32 -07:00
kyleandClaude Fable 5.1 9872084165 Merge v2.2: route templates, multiple wake broadcast addresses
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 13:48:23 -07:00
kyleandClaude Fable 5.1 bd0a9f2ff0 v2.2: adopt example.toml as a given copy; run notes
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 13:48:16 -07:00
kyle 8018f67031 Wake: a target may list several broadcast addresses
Config keeps broadcast (one) and adds broadcasts (a list); exactly one must
be present. Wake.Addresses() returns Broadcast then Broadcasts; checkWake
errors on both-set, neither-or-empty, and non-host:port entries. Waker sends
to every address in order, logging/past a failure so one dead address does
not stop the others, and returns false only when none could be sent.

Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 13:45:39 -07:00
kyle 4e1dd03d07 Route templates: a route named x-* serves any request route x-<something>
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 13:38:24 -07:00
kyleandClaude Fable 5.1 4863e53eb8 v2.2 task 01: put Route() in a new config/route.go (config.go is at the line limit); note
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 13:16:19 -07:00
kyleandClaude Fable 5.1 5de096a221 v2.2 plan: route templates (opencode-*) and multiple wake broadcast addresses; given tests
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 13:04:15 -07:00
kyleandClaude Fable 5.1 3ec53d52e5 deploy/hyperborea: enable titan wake block with the fixed Wi-Fi private MAC (best effort)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 12:58:32 -07:00
kyleandClaude Fable 5.1 6e9a70587a deploy/hyperborea: production config, user unit, install script, README (wake block pending titan's MAC)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 12:57:25 -07:00
kyleandClaude Fable 5.1 4f03cb2c52 README: context guard section (X-Crossbar-Ctx, 400 body), per-model context in the hosts view, router-mode note
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 11:50:38 -07:00
kyleandClaude Fable 5.1 11c8e053f7 Merge v2.1: cancellation recorded from the reverse proxy; router mode loaded/per-model context
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 11:49:45 -07:00
kyle 055ab079d4 Learn per-model context from /props?model=; only status "loaded" is loaded
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 11:47:35 -07:00
kyleandClaude Fable 5.1 cb5678abc0 v2.1 README: note the moved-header separator gap (v2 task text ambiguous, untested)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 11:45:52 -07:00
kyle f3dfdbfa50 Record cancellation from what the reverse proxy observed, not the request context
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 11:32:18 -07:00
kyleandClaude Fable 5.1 317293cfb3 v2.1 task 01: state the ReverseProxy facts (ErrorHandler before headers, ErrAbortHandler mid-body); note the refusal-ending
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 11:26:01 -07:00
kyleandClaude Fable 5.1 d596ec8abf v2.1 task 02: router mode — status loaded only, per-model /props, guard and hosts view use it; given tests
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 11:22:37 -07:00
kyleandClaude Fable 5.1 98faa3a57d Given tests: order arrivals by limiter state instead of sleeps (limiter, spread, cancel-while-queued)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 11:20:26 -07:00
kyleandClaude Fable 5.1 6c3a2cff8a Merge v2: learned context, context guard, wake-on-LAN, identity
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 11:14:27 -07:00
kyleandClaude Fable 5.1 a49a86c0e4 v2.1 plan: task 01 cancel-record with its given served_test.go; index for 02/03
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 11:12:58 -07:00
kyle d0d3203f73 Wire wake and identity into crossbar; v2 smoke and README
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 11:12:24 -07:00
kyle 47f49072cc Merge remote-tracking branch 'origin/master' into v2 2026-09-25 11:08:24 -07:00
kyleandClaude Fable 5.1 481ea12f4c v1 proxy test: order arrivals by limiter state; note the 499-on-served-200 defect for v2.1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 11:08:16 -07:00
kyleandClaude Fable 5.1 27debb9790 v1 limiter test: release before reporting in TestParallelAndQueue (race with the final count check)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 11:02:07 -07:00
kyle 087323ad62 Merge remote-tracking branch 'origin/master' into v2 2026-09-25 10:50:23 -07:00
kyleandClaude Fable 5.1 7710352462 v2 smoke: send the 300 KB prompt via -d @file (argv element limit); note in README
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 10:49:56 -07:00
kyleandClaude Fable 5.1 6261b68a4b v2 plan: note the task 05 12-second stop (typo'd path, refusal-ending)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 10:18:28 -07:00
kyle a942e336d8 Add identity: whois resolver, checker, header mode, middleware; config for wake, peers, identity
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 10:16:51 -07:00
kyleandClaude Fable 5.1 962ea2aea4 v2 plan: note the router /props autoload fact and the v2.1 follow-up
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 10:12:29 -07:00
kyle bddf6c93f2 Add the wake package: magic packets and a waiter
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 10:03:07 -07:00
kyle 2fe3b9c865 Proxy: move or refuse prompts that do not fit the leased host's context
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 09:56:46 -07:00
kyle 959aec92f1 Merge origin/master into v2: sticky-growth test fixed 2026-09-25 09:55:15 -07:00
kyleandClaude Fable 5.1 6c8cbbc78d v2 plan: sticky-growth test appends turns instead of changing the first user message; note the finding
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 09:54:36 -07:00
kyle 056a527fd7 Health: learn n_ctx and total_slots from /props
Implemented /props learning in internal/health/health.go (added Status.NCtx/Status.Slots, PerSlotCtx, and a best-effort GET <base>/props appended to the poll after /v1/models; 0/unknown on any failure without failing the poll) and exposed them in internal/admin/admin.go HostView. Copied internal/health/props_test.go and the replacement internal/proxy/helpers_test.go byte-identical to docs/plans/v2/_files/.

Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-25 09:14:08 -07:00