diff --git a/KNOWN_ISSUES.md b/KNOWN_ISSUES.md index ab9bc20..36e5921 100644 --- a/KNOWN_ISSUES.md +++ b/KNOWN_ISSUES.md @@ -65,6 +65,17 @@ Track only **active, reproducible, unresolved** issues. - **Related notes:** `docs/agent-handoffs/learnings/2026-02-15-relay-health-preflight-job.md` - **Last verified:** 2026-02-15 +### Claude Code: outbound WebSocket blocked — scheduler cannot run from this environment +- **Status:** Active (no code-level workaround) +- **Area:** Runtime / Tooling +- **Symptom:** `torch-lock` commands (`lock:check`, `lock:lock`, `lock:complete`) fail to connect to any Nostr relay. The underlying error is a WebSocket handshake rejection at the proxy layer. In Node.js the symptom is `getaddrinfo ENOTFOUND` (empty `/etc/resolv.conf`) or a connection hang/timeout for `wss://` URLs. +- **Trigger/Conditions:** Any `torch-lock` or scheduler command run from inside the Claude Code remote sandbox. The proxy intercepts all egress traffic; it supports HTTP/HTTPS `CONNECT` tunneling but strips the `Upgrade: websocket` header at L7, so the WebSocket handshake never completes. This affects all outbound WebSocket connections, not just Nostr relays (confirmed by multiple open GitHub issues: anthropics/claude-code #490, #2059, #17333). +- **Workaround (attempted and rejected):** A local relay on `ws://127.0.0.1:PORT` is reachable (bypasses both DNS and the proxy), but **breaks cross-agent coordination**: other agents (Jules/Google Cloud) publish locks to the public Nostr relays (`wss://relay.damus.io`, `wss://nos.lol`, `wss://relay.primal.net`). A local relay is invisible to those agents, causing double-claiming of scheduled agent slots. +- **Correct workaround:** Run the scheduler and all `torch-lock` commands exclusively from **Jules** (Google Cloud environment) or any other agent environment with unrestricted outbound WebSocket access. Do not attempt to run `lock:lock` / `lock:complete` from Claude Code sessions. +- **Impact:** Critical for Claude Code sessions — 100% blocks scheduler runs, lock acquisition, and lock release. No impact on Jules-initiated runs. +- **Related notes:** Investigation session 2026-02-19; WebSearch confirmed the general proxy restriction is a known Anthropic platform-level policy, not a TORCH bug. +- **Last verified:** 2026-02-19 + ### content-audit-agent targets missing /content directory - **Status:** Resolved - **Area:** Docs diff --git a/task-logs/weekly/2026-02-19T00-58-49Z__perf-optimization-agent__failed.md b/task-logs/weekly/2026-02-19T00-58-49Z__perf-optimization-agent__failed.md new file mode 100644 index 0000000..855cf33 --- /dev/null +++ b/task-logs/weekly/2026-02-19T00-58-49Z__perf-optimization-agent__failed.md @@ -0,0 +1,59 @@ +--- +agent: perf-optimization-agent +cadence: weekly +platform: claude +status: failed +timestamp: "2026-02-19T00:58:49Z" +failure_class: backend_unavailable +failure_category: lock_backend_error +--- + +# Task Log — Failed + +## Reason + +Lock backend error + +## Detail + +Lock acquisition for `perf-optimization-agent` (weekly cadence) failed with exit code 2. +All Nostr relays returned `permanent_validation_error`: "Received network error or non-101 status code." +WebSocket connectivity to the relay pool is unavailable in this execution environment. + +No prompt was executed. `lock:complete` was NOT published. + +## Scheduler State + +- **Selected agent:** perf-optimization-agent +- **Selection algorithm:** + - Roster source: `src/prompts/roster.json` (weekly key) + - Latest log file: `2026-02-18T19-54-03Z__perf-deepdive-agent__completed.md` + - Previous agent: `perf-deepdive-agent` (from filename convention, index 6) + - start_index: `(6 + 1) mod 21 = 7` + - Candidate at index 7: `perf-optimization-agent` — not in excluded set → selected +- **Excluded set (from lock:check:weekly):** bug-reproducer-agent, changelog-agent, dead-code-agent, feature-proposer-agent, frontend-console-debug-agent, fuzz-agent, perf-deepdive-agent, test-coverage-agent, ui-ux-agent, weekly-synthesis-agent + +## Lock Failure Metadata + +- **lock_command:** `AGENT_PLATFORM=claude npm run lock:lock -- --agent perf-optimization-agent --cadence weekly` +- **backend_category:** relay_publish_non_retryable +- **lock_correlation_id:** c5e5d9fc-85f5-41ca-b4d2-3671f815d157 +- **lock_attempt_id:** 5403bebc-a9f5-4a30-a3dd-6df7af4ec213 +- **successCount:** 0 / 3 +- **requiredSuccesses:** 1 +- **relay_list:** + - wss://nos.lol (publish:primary, reason=permanent_validation_error) + - wss://relay.damus.io (publish:primary, reason=permanent_validation_error) + - wss://relay.primal.net (publish:primary, reason=permanent_validation_error) +- **lock_stderr_excerpt:** "Failed relay publish quorum in publish phase: 0/3 successful (required=1, timeout=15000ms, attempts=4)" + +## Retry Guidance + +1. Verify relay connectivity: `npm run lock:health -- --cadence weekly` +2. Retry lock acquisition: `AGENT_PLATFORM=claude npm run lock:lock -- --agent perf-optimization-agent --cadence weekly` +3. If all relays remain unhealthy, consult `docs/agent-handoffs/incidents/` for relay remediation guidance. +4. See incident runbook: `docs/agent-handoffs/learnings/2026-02-15-relay-health-preflight-job.md` + +## Prompt Not Executed + +The selected prompt `src/prompts/weekly/perf-optimization-agent.md` was NOT executed.