60 Commits
Author SHA1 Message Date
ciregenzandClaude Fable 5.1 51bd1f990a [eric] ci: a test process never spawns a router (OSW_NEVER_SPAWN_ROUTER), the boot hook's sync npm install hung the suite on every router-less runner; the slot-size test locates its source on Windows (ENG-486)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-06 20:58:03 -07:00
ciregenzandClaude Fable 5.1 e188b704f8 [eric] oauth: the refresh loop POSTs the router's test route (a GET was 405 and read as unknown, so it renewed nothing), reads the router's live rows instead of a stale db.json, and logs any answer it cannot read
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-06 20:58:03 -07:00
ciregenzandClaude Fable 5.1 a6ab863724 [eric] health: a dead-login verdict owns its second look; the lane answering again closes the pill and resumes its chats, capped at two resumes per chat so a flapping login cannot loop
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-06 20:58:03 -07:00
ciregenzandClaude Fable 5.1 da56b2cd1a [eric] auth: a dead login heals itself: renewed before expiry, a turn's 401 advances the verdict, the retry pushes the pill, a reconnect resumes the chats; preflight never restarts the router
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-06 15:55:26 -07:00
ciregenzandClaude Fable 5.1 05e8310691 [eric] health: a mid-refresh 401 that outlives the token rotation window is a dead login; recheck at 240s and push the pill
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-05 09:28:59 -07:00
ciregenzandClaude Fable 5.1 3054024285 [eric] settings: the agent and the Help agent read connected subscriptions from the router; three dead token fields told a subscribed user nothing was connected
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-04 13:22:26 -07:00
ciregenzandClaude Fable 5.1 e6f84c3412 [eric] lint: drop the unused imports and leading-underscore names the batch left in tests and two modules
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012G8kyALnPjsA7aJFmMBq3R
2026-09-02 08:30:13 -07:00
ciregenzandClaude Fable 5.1 81811d3c3e [eric] router: the history pruner announces itself at boot and the backend warns when it is missing, so it can never disable itself in silence
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PNA9xhjw5SkfuB2tJ5KwCj
2026-09-01 15:19:21 -07:00
ciregenz fb34f7f37b [eric] router: a deliberate stop() clears the is_running positive cache, so a bounce cannot claim success over a dead router 2026-08-31 11:03:06 -07:00
ciregenz 54ab6863ab [eric] tls: the Node children get the OS roots, so a proxy or endpoint-tool root no longer kills every model call (ENG-408) 2026-08-27 14:01:30 -07:00
ciregenz 16f87d8bc9 [eric] router: a stale-router kill is scoped to our own port and never fires under test (ENG-393) 2026-08-26 13:25:48 -07:00
ciregenz 3def185bf1 [eric] lint: tonight's new tests go clean under p-private and ruff; the bounce module's router alias goes public since tests reach it 2026-08-16 08:57:25 -07:00
ciregenz b9afcae6ac [eric] router: a completed subscription connect bounces 9Router so its dispatch state rebuilds; new subs no longer dead until app restart (ENG-315) 2026-08-16 08:11:09 -07:00
ciregenz c6a0c1f34b [eric] telemetry: silent-recovery rows carry journey context, and packaged builds stop shipping test files 2026-08-07 06:35:20 -07:00
ciregenz dbea61b109 [eric] telemetry: the last two envelope-less diagnostics (pressure valve, router start) now carry context too 2026-08-07 01:08:00 -07:00
ciregenz 565009f0c5 [eric] telemetry: auth and overflow errors carry flight envelopes, router revives hit the near-miss ledger 2026-08-06 22:42:48 -07:00
ciregenz d1d6e0e0e5 [eric] health: one banner line per provider, a 401 naming its own reset window is mid-refresh not dead 2026-08-06 20:58:42 -07:00
ciregenz 9eef9d6a1d [eric] agents: a context overflow now compacts and retries once instead of dying, and never fakes a completed 2026-08-03 15:24:11 -07:00
ciregenz 50d6010862 [eric] merge eric/browser-merged: browser hangs, wrong-surface sends, and measured latency 2026-08-03 12:22:10 -07:00
ciregenz 4ae7f81cc7 [eric] cloud runs: two overlapping passes could pull one credential twice, racing the router file 2026-08-03 00:11:22 -07:00
ciregenz ce5a458999 [eric] cloud runs: keep this device's token alive while the cloud holds custody of it 2026-08-02 17:55:27 -07:00
ciregenz fb3ec15105 [eric] merge: bring eric/dev onto the browser v3 branch (7 conflicts resolved, gates green) 2026-08-02 16:14:53 -07:00
ciregenz 345000e8dc [eric] credentials: hand custody to the cloud strip-first, so two rotators is unrepresentable 2026-07-31 13:12:11 -07:00
ciregenz c0a0993ca2 [eric] credentials: move a rotating token out of 9router's db.json without racing the router for the file 2026-07-31 13:00:11 -07:00
ciregenz 3d8c6101b6 [eric] security: make the 9router state dir owner-only, its db.json held live tokens at 0644 2026-07-31 11:44:24 -07:00
ciregenz b5e205160d [eric] settings: disconnect a subscription provider from the UI, verified against 9router not assumed 2026-07-31 00:00:43 -07:00
ciregenz 3d5c287139 [eric] merge: bring eric/browser onto eric/dev (30 conflicts resolved, gates green) 2026-07-30 13:18:11 -07:00
ciregenz 83bb052c0b [eric] onboarding: identity/scan/prep endpoints, settings fields, disk-row reader 2026-07-15 00:29:11 -07:00
ciregenz 8ed9149c7e [eric] providers: boot-time login-health pill (dead sub token -> reconnect toast, no more silent codex deaths) 2026-07-08 20:34:37 -07:00
ciregenz e6c781a380 [eric] 9router: never orphan-sweep custom nodes off an empty provider list (corrupt-settings boot mass-reap guard) 2026-07-08 17:33:15 -07:00
ciregenz a459177d39 [eric] lint: drop p_ prefix from healer/pool names the tests access (p-private boundary rule) 2026-07-05 16:24:13 -07:00
ciregenz b827fc565c [eric] 9router: watchdog probes from a thread (sync HTTP confirm could stall the event loop 2s mid-stream) 2026-07-03 15:24:00 -07:00
ciregenz cbe062e002 [eric] 9router: event-driven death-watcher heals in ~0.2s + two-strike watchdog (busy-probe false negatives) 2026-07-03 15:19:36 -07:00
ciregenz b138fcc054 [eric] 9router: watchdog + detection-revive so the router self-heals; down only when the user quits 2026-07-03 15:10:22 -07:00
ciregenz 56efd73979 [eric] 9router: stop custom-provider reconcile reaping the cp-openai node (broke every gpt-*-api request) 2026-07-03 04:26:24 -07:00
abccodes b2ceb4b466 [aidan] fix/model-fallback: reconcile free trial and provider states 2026-06-26 03:39:48 -07:00
abccodes d420624fe1 [aidan] merge: bring branch up to date with eric/dev
# Conflicts:
#	backend/apps/agents/agents.py
#	backend/apps/agents/core/openai_passthrough.py
#	backend/apps/nine_router/oauth.py
#	backend/main.py
2026-06-25 22:33:30 -07:00
abccodes 5f9ae71ff4 [aidan] fix/codex-auth: fall back to port 1457 when 1455 is held, surface connect errors 2026-06-25 18:05:00 -07:00
ciregenz 0d093cc5f8 [eric] backend: one-line every comment + collapse 3+ blank runs across apps/ (AST-verified identical, -lines); CLAUDE.md one-line-comment rule 2026-06-25 02:29:04 -07:00
ciregenz 7701bcdeff [eric] backend: convert all relative imports to absolute backend.* paths (convention sweep) 2026-06-24 01:41:22 -07:00
ciregenz c5fd4f6b86 [eric] apps: leading-_ -> p_ for import aliases (import x as _y) across apps modules (file-local bindings, p-private 0) 2026-06-23 21:15:43 -07:00
ciregenz 798448acca [eric] apps: leading-_ -> p_ for function-local vars/args/nested-fns across 53 apps modules (scope-aware AST rename, module symbols untouched, p-private 0) 2026-06-23 21:11:44 -07:00
ciregenz 10aef1ff18 [eric] swarm+nine_router: leading-_ -> p_/public across swarm entities/closure/redact/ziputil + nine_router process/sync/oauth; promote cross-file public, fix monkeypatch refs 2026-06-23 20:35:06 -07:00
ciregenz f703b8aa02 [eric] agents: leading-_ -> p_/P_/public in proxy+providers/openrouter+ws_manager+mcp-servers+oauth_state; promote cross-file API public, fix monkeypatch+attr test refs 2026-06-23 20:00:06 -07:00
ciregenz b7450f885a [eric] merge winv2: win startup speedups + skill-registry seed, release 1.3.87 2026-06-19 00:57:57 -07:00
Eric ec0f9600bc [eric] backend: remove cold-start diagnostics, keep the fix + slim lifespan timer
- the is_running() fast-fail fix (v1.3.91) verified cold backend-http-ready
  23.5s -> 3.86s and warm 5.0s -> 3.32s on the signed build, no 9Router regression
- strip the [perf] bg entry logs from mcp/skill/settings/service/9router now that
  the stall is diagnosed; keep Apps.py per-lifespan timing but only print a
  lifespan over 50ms plus the total (cheap regression tripwire)
- document the root cause + fix + before/after in docs/perf/winv2/README.md
2026-06-17 19:28:23 -07:00
Eric 24df3e8fac [eric] backend: fast-fail is_running() to kill the ~18s cold-start event-loop freeze
- faulthandler on the signed cold build caught the asyncio loop frozen in
  socket.create_connection inside is_running() (process.py): a synchronous
  httpx.get to "localhost:20128" called ~5x on the boot path before 9Router is up
- on Windows a dead-port connect to "localhost" stalls ~7s each (tries ::1 first,
  loopback refusal is slow), freezing the loop ~18s so uvicorn could not answer
  the health probe -> cold backend-http-ready was ~23s
- fix: probe 127.0.0.1 with a 0.3s TCP timeout first (measured 306ms vs ~7s), only
  HTTP-confirm when the port is open; 9Router binds 0.0.0.0 so reachability is
  unchanged. drop the faulthandler diagnostic from main.py
2026-06-17 19:06:10 -07:00
Eric 90aa66f6ce [eric] backend: timestamp each startup background task to pin the cold-start loop stall
- instrumented cold v1.3.88 proved the lifespans are 141ms even cold; the ~18s
  cold gap is a backgrounded create_task blocking the event loop AFTER lifespan
  startup but BEFORE uvicorn reports ready (what the health probe waits on)
- add [perf] entry/segment logs to the post-startup background tasks: mcp refresh,
  skill refresh, 9router ensure (+ prelude bisection), and svc._post/_post_or_spool
- logging only, no behavior change; next cold log names the exact blocking call
2026-06-17 18:11:46 -07:00
ciregenz 6b8750efaf [eric] 9router: rotate the unbounded request-details log + cap node heap, fixes the idle OOM crash 2026-06-17 16:20:59 -07:00
Eric bca0050dcb [eric] perf: start 9router in background instead of blocking the http bind
- service lifespan was awaiting ensure_9router (~7.4s, up to ~18s cold) on the boot path

- dispatch already ensures it lazily; serialize ensure_running so no double-spawn

- cuts warm backend-ready ~9-10s toward ~2-3s
2026-06-16 21:59:16 -07:00