A Binance Ping racing local socket closure makes trio-websocket's reader send a Pong while wsproto is LOCAL_CLOSING. That reader nursery error escapes proxy_msgs(), then tears down brokerd and pikerd instead of restoring quote delivery. Classify NoBsWs.recon_errors around the entire websocket context, with collapse_eg() outside it so a singleton reader exit group reaches the reconnect handler. Invalidate the stale connected event and socket reference before retrying. Keep retry sleep unshielded so parent cancellation stops recovery promptly. Deats, - Add real loopback websocket coverage: TCP, handshake, Ping, reader dispatch and wsproto's actual Pong validation. - Control only the first client Ping's protocol-state ordering, withholding its Close frame to prevent a peer response racing the deterministic LOCAL_CLOSING reproducer. - Require fresh data on a replacement connection, plus exactly one connection when cancelling at the reader or retry boundary. - Use RuntimeError for the unexpected-failure control: LocalProtocolError is now a recoverable connection failure. - Preserve the original unexpected exception with bare raise, and assert its identity in the test. Log recoverable errors with the websocket URL and the underlying traceback. This is a local follow-up, not another downstream cherry-pick. The earlier wrapper suppressed escaped communication failures; |
||
|---|---|---|
| .. | ||
| claude-code | ||
| prompt-io | ||
| README.md | ||
| ib-recovery-candidate.md | ||
README.md
AI Tooling Integrations
Documentation and usage guides for AI-assisted development tools integrated with this repo.
Each subdirectory corresponds to a specific AI tool or frontend and contains usage docs for the custom skills/prompts/workflows configured for it.
Originally introduced in PR #69; track new integration ideas and proposals in issue #79.
Integrations
| Tool | Directory | Status |
|---|---|---|
| Claude Code | claude-code/ |
active |
Adding a New Integration
Create a subdirectory named after the tool (use lowercase + hyphens), then add:
- A
README.mdcovering setup, available skills/commands, and usage examples - Any tool-specific config or prompt files
ai/
├── README.md # <- you are here
├── claude-code/
│ └── README.md
├── opencode/ # future
│ └── README.md
└── <your-tool>/
└── README.md
Conventions
- Skill/command names use hyphen-case (
commit-msg, notcommit_msg) - Each integration doc should describe what the skill does, how to invoke it, and any output artifacts it produces
- Keep docs concise; link to the actual skill source files (under
.claude/skills/, etc.) rather than duplicating content