<feed xmlns='http://www.w3.org/2005/Atom'>
<title>axon.git/cmd, branch main</title>
<subtitle>[no description]</subtitle>
<id>https://code.northwest.io/axon.git/atom?h=main</id>
<link rel='self' href='https://code.northwest.io/axon.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://code.northwest.io/axon.git/'/>
<updated>2026-03-10T00:50:44+00:00</updated>
<entry>
<title>refactor: rename modules to code.northwest.io/axon</title>
<updated>2026-03-10T00:50:44+00:00</updated>
<author>
<name>bndw</name>
<email>ben@bdw.to</email>
</author>
<published>2026-03-10T00:50:44+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/axon.git/commit/?id=170bdf9c14899e436e7aae4411bcb5cd166e7217'/>
<id>urn:sha1:170bdf9c14899e436e7aae4411bcb5cd166e7217</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore: add .gitignore, untrack compiled binary</title>
<updated>2026-03-10T00:28:26+00:00</updated>
<author>
<name>bndw</name>
<email>ben@bdw.to</email>
</author>
<published>2026-03-10T00:28:26+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/axon.git/commit/?id=9886a5c9054f3308482fdcca0fa545c8befbcf5b'/>
<id>urn:sha1:9886a5c9054f3308482fdcca0fa545c8befbcf5b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: phase 3 CLI + phase 4 JS client library</title>
<updated>2026-03-10T00:26:53+00:00</updated>
<author>
<name>bndw</name>
<email>ben@bdw.to</email>
</author>
<published>2026-03-10T00:26:53+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/axon.git/commit/?id=4ee6da5fd54a2e40b537ed4126e907342c06d54d'/>
<id>urn:sha1:4ee6da5fd54a2e40b537ed4126e907342c06d54d</id>
<content type='text'>
CLI (cmd/axon):
- Add explicit Unsubscribe on req exit (after EOSE and on Ctrl-C)
- Add reconnect with exponential backoff (1s→30s) for req --stream

JS library (js/axon.js):
- Canonical tag encoding and payload construction matching Go byte-for-byte
- Ed25519 sign/verify, keypair generation, challenge signing
- AxonClient: WebSocket connect with auth handshake, publish, subscribe,
  unsubscribe, reconnect-ready callback API
- encryptDM/decryptDM: X25519 ECDH (Ed25519 key conversion) + ChaCha20-Poly1305
- runVectors: validates all 6 Phase 1 test vectors against Go ground truth
</content>
</entry>
<entry>
<title>feat: add axon CLI for pub/sub; fix relay hijack context bug</title>
<updated>2026-03-09T19:48:39+00:00</updated>
<author>
<name>bndw</name>
<email>ben@bdw.to</email>
</author>
<published>2026-03-09T19:48:39+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/axon.git/commit/?id=0bd392e076e36c80a152abe00cbcd0bc9efedd9c'/>
<id>urn:sha1:0bd392e076e36c80a152abe00cbcd0bc9efedd9c</id>
<content type='text'>
- cmd/axon: new CLI module with keygen, pub, and req subcommands
  - keygen: generate Ed25519 keypair, print hex seed and pubkey
  - pub: sign and publish an event; accepts --kind, --content, --tag
  - req: query/stream events as JSON lines; accepts --kind, --author,
    --tag, --since, --until, --limit, --stream
  - key loaded from --key flag or AXON_KEY env var

- relay/websocket: add Dial() for client-side WebSocket handshake
  (ws:// and wss://, RFC 6455 masking via client:true)

- relay/server: fix broken-pipe on auth by switching hijacked conn
  goroutine from r.Context() to context.Background(); r.Context() is
  cancelled by net/http immediately after Hijack is called
</content>
</entry>
</feed>
