Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
cd969d7
Wave 1 relaunch: .company/ workspace, all Day One docs, TTFM measured…
Mar 22, 2026
213845e
Wave 1 complete: Day One docs, TTFM 1.2s, CF token blocker escalated
Mar 22, 2026
f33ab56
Wave 1 research: distribution channels, competitive landscape, echo b…
Mar 22, 2026
8403450
Wave 1 final state: 2 blockers escalated, research complete
Mar 22, 2026
59dd17e
fix: replace relay polling with websocket replay
Mar 22, 2026
dc1e0b3
Fix AIM relay status handling
Mar 22, 2026
9449751
Fix AIM UI CSP headers
Mar 22, 2026
910a894
Route AIM notices into footer status bar
Mar 22, 2026
a39467c
Wave 2: Fix relay poll — migrate reads from KV list() to DO SQLite
Mar 22, 2026
87b7578
Wave 2: Quick-start snippet, outbound messages, truth register
Mar 22, 2026
9819f0a
Wave 2 complete: relay fixed, 465 tests green, distribution content r…
Mar 22, 2026
67d2926
Wave 3: Echo bot LIVE, first active conversation, PyPI organic pull c…
Mar 22, 2026
5d49e0a
Wave 4: Echo bot persistent (launchd), PyPI README rewrite, Show HN d…
Mar 22, 2026
3033df3
Add qntm OpenClaw plugin package
Mar 22, 2026
d2e5e4f
Document qntm compatibility matrix
Mar 22, 2026
eab7dc5
Add TypeScript library to compatibility matrix
Mar 22, 2026
efd3735
Merge remote-tracking branch 'origin/fix/disable-relay-polling'
Mar 22, 2026
bd9c26a
Fix qntm OpenClaw plugin loading
Mar 22, 2026
d712652
Wave 6: First external engagement (A2A #1575), echo bot recovered fro…
Mar 22, 2026
d615d8c
Fix qntm OpenClaw identityDir runtime support
Mar 22, 2026
011115f
Fix OpenClaw qntm state dir default
Mar 22, 2026
d7078b8
Wave 7: Fix test regression (287 pass, 0 failures), second A2A engage…
Mar 22, 2026
3c3b2db
Wave 8: Instrument primary metric (/v1/stats endpoint), deploy relay …
Mar 22, 2026
e7933cd
Wave 9: Third A2A engagement (#1606 data handling), KPI dashboard script
Mar 22, 2026
be6d7c6
Wave 10: Campaign 2 final — first integration proposal (aeoess#5), Ca…
Mar 22, 2026
95a3e77
Wave 11: Second integration proposal (ADHP#12), Show HN draft v2, 5 t…
Mar 22, 2026
ec3c499
Wave 12: Third integration proposal (AIM#92), Campaign 3 target hit (…
Mar 22, 2026
bdb9987
Fix install path: pip install from git (v0.4.2) instead of broken uvx…
Mar 22, 2026
5fdd13f
Wave 13: Critical conversion funnel fix — dead URLs in all 3 proposal…
Mar 22, 2026
f768024
Fix broken install instructions in docs and PyPI README
Mar 22, 2026
3390ccb
Wave 14: Docs install fix + traffic intelligence + competitive scan
Mar 22, 2026
011f369
Fix OpenClaw qntm gateway lifecycle
Mar 22, 2026
856c137
fix: auto-migrate v0.3 conversations.json format to v0.4.2
Mar 22, 2026
bee2d04
wave 15: campaign 3 final + v0.3 migration fix
Mar 22, 2026
64cbbae
feat: add qntm MCP server for AI agent messaging
Mar 22, 2026
dd8c3df
docs: add MCP server section to READMEs
Mar 22, 2026
25adba9
wave 16: MCP server shipped + competitive intel + state update
Mar 22, 2026
6668983
Fix qntm routing to honor OpenClaw session keys
Mar 22, 2026
f051e66
Release v0.4.20
Mar 22, 2026
9c6fb68
Fix OpenClaw qntm self-echo suppression
Mar 22, 2026
eed1f60
docs: switch all install instructions to PyPI (v0.4.20 live)
Mar 22, 2026
cc1af17
docs: add NanoClaw qntm integration plan
Mar 22, 2026
418a92f
feat: add nanoclaw qntm scaffold
Mar 22, 2026
af2ee31
wave 17: PyPI P0 resolved, MCP marketplace materials, NanoClaw integr…
Mar 22, 2026
36daa93
wave 18: 3 new integration proposals (nono, clawdstrike, mcp-gateway)…
Mar 22, 2026
4d711cf
Add Ed25519→X25519 interop test vectors + subscribe auth decision memo
Mar 22, 2026
c0104a0
Add optional Ed25519 challenge-response auth for /v1/subscribe
Mar 22, 2026
c290bf9
Wave 19: First external replies, subscribe auth, interop vectors
Mar 22, 2026
a674174
Wave 20: Vector exchange activated, aeoess engagement deepens, APS so…
Mar 22, 2026
1c031b2
Add TypeScript interop vector runner — all 5 vectors pass with @noble…
Mar 22, 2026
cd284ec
Wave 20 log update: TypeScript vector interop proven
Mar 22, 2026
8e181df
Truth register: W20 — cross-implementation interop proven, aeoess as …
Mar 22, 2026
fc6dff9
Wave 21: Expanded engagement (#1672), competitive intelligence (leyli…
Mar 23, 2026
e8a1ba0
Wave 22: Campaign 4 closed (3.5/5), 3rd responder (haroldmalikfrimpon…
Mar 23, 2026
3635152
Wave 23: Vector exchange COMPLETE (aeoess 5/5, 3 implementations), XC…
Mar 23, 2026
ff43091
Update last-check timestamp
Mar 23, 2026
aa59548
Wave 24: The Conversion Reply — relay API docs shared with aeoess, ha…
Mar 23, 2026
cdfe9a4
Truth register: W24 — relay test greenlit, three-way alignment, API d…
Mar 23, 2026
e07c5c0
Wave 25: Three-Way Convergence — first external code (haroldmalikfrim…
Mar 23, 2026
749a97d
Truth register: W25 — first external code, QSP-1 spec published, thre…
Mar 23, 2026
266825c
Update last-check timestamp
Mar 23, 2026
d99f9eb
Add AgentID integration example — Python bridge to qntm relay
haroldmalikfrimpong-ops Mar 23, 2026
4e6a4e0
Echo bot: bridge envelope compatibility for APS/AgentID messages
Mar 23, 2026
350bbba
Wave 26: The Bridge Works — first cross-project E2E encrypted message…
Mar 23, 2026
fbb48ca
Update last-check timestamp
Mar 23, 2026
ca9f1c6
Fix CBOR envelope to use native qntm field names
haroldmalikfrimpong-ops Mar 23, 2026
8bd68e7
Merge pull request #3 from haroldmalikfrimpong-ops/feat/agentid-integ…
vessenes Mar 23, 2026
b0922dc
Wave 27: DID Convergence — first external PR merged, DID interop, QSP…
Mar 23, 2026
9663b31
Wave 28: Ship optional DID field in QSP-1 envelopes
Mar 23, 2026
52a7ce5
Wave 28: state update — WG endorsed, DID shipped, Campaign 5 closed (…
Mar 23, 2026
f4f2f87
Wave 29: WG specs directory + entity verification module
Mar 23, 2026
5c96457
Wave 29: state update — WG specs published, entity module shipped, Ca…
Mar 23, 2026
b0839b4
Wave 30: cross-implementation entity verification tests + AIP WG outr…
Mar 23, 2026
2e8af4a
Wave 30: state update — entity integration proven, AIP invited to WG,…
Mar 23, 2026
414105e
Add AIP ↔ qntm interop test vectors (3/3 pass, PyNaCl)
Mar 23, 2026
f575228
Wave 31: AIP interop test vectors, PyPI surge analysis, first fork
Mar 23, 2026
e9fdeb4
Wave 31: chairman briefing sent
Mar 23, 2026
69589b6
Add DID resolution module (did:web + did:key) — 13 tests, 261 total
Mar 23, 2026
9d36673
Wave 32: DID resolution module + pipeline expansion (4th person, 3 WG…
Mar 23, 2026
d9a8d16
Wave 33: Ecosystem convergence — FransDevelopment spec PR reviewed, a…
Mar 23, 2026
f1e09d7
Update WG specs README: add 3 candidates (AIP, Agora, OATR) and expan…
Mar 23, 2026
eeebcd3
Wave 34: WG consolidation — specs README updated, 2 follow-ups, 31 en…
Mar 23, 2026
e3855c2
Wave 35: Ecosystem gravity — 6th person (desiorac/ArkForge), FransDev…
Mar 23, 2026
d28b44e
Wave 36: Ecosystem integration — desiorac DID resolver proposed, arch…
Mar 23, 2026
848a08f
feat(wg): add Execution Attestation Interface spec v0.1
Mar 25, 2026
ec02173
fix(wg): rename Execution Attestation → A2A Interaction Receipt
Mar 25, 2026
4dddd87
docs(spec): add §3.1 cross-reference to §1 producer scope
desiorac Mar 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .beads/.beads-credential-key
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
…çŒ@<¾p Àá¹È;Ïœ(´’,bTçcã±Ðí
1 change: 1 addition & 0 deletions .beads/dolt.corrupt-20260321T145000/.bd-dolt-ok
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ok
96 changes: 96 additions & 0 deletions .beads/dolt.corrupt-20260321T145000/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Dolt SQL server configuration
#
# Uncomment and edit lines as necessary to modify your configuration.
# Full documentation: https://docs.dolthub.com/sql-reference/server/configuration
#

# log_level: info

# log_format: text

# max_logged_query_len: 0

# encode_logged_query: false

# behavior:
# read_only: false
# autocommit: true
# disable_client_multi_statements: false
# dolt_transaction_commit: false
# event_scheduler: "OFF"
# auto_gc_behavior:
# enable: true
# archive_level: 1

listener:
host: 127.0.0.1
port: 64848
# max_connections: 1000
# back_log: 50
# max_connections_timeout_millis: 60000
# read_timeout_millis: 28800000
# write_timeout_millis: 28800000
# tls_key: key.pem
# tls_cert: cert.pem
# require_secure_transport: false
# allow_cleartext_passwords: false
# socket: /tmp/mysql.sock

# data_dir: .

# cfg_dir: .doltcfg

# remotesapi:
# port: 8000
# read_only: false

# mcp_server:
# port: 7007
# user: root
# password: ""
# database: ""

# privilege_file: .doltcfg/privileges.db

# branch_control_file: .doltcfg/branch_control.db

# user_session_vars:
# - name: root
# vars:
# dolt_log_level: warn
# dolt_show_system_tables: 1

# system_variables:
# dolt_log_level: info
# dolt_transaction_commit: 1

# jwks: []

# metrics:
# labels: {}
# host: localhost
# port: 9091
# tls_cert: ""
# tls_key: ""
# tls_ca: ""

# cluster:
# standby_remotes:
# - name: standby_replica_one
# remote_url_template: https://standby_replica_one.svc.cluster.local:50051/{database}
# - name: standby_replica_two
# remote_url_template: https://standby_replica_two.svc.cluster.local:50051/{database}
# bootstrap_role: primary
# bootstrap_epoch: 1
# remotesapi:
# address: 127.0.0.1
# port: 50051
# tls_key: remotesapi_key.pem
# tls_cert: remotesapi_chain.pem
# tls_ca: standby_cas.pem
# server_name_urls:
# - https://standby_replica_one.svc.cluster.local
# - https://standby_replica_two.svc.cluster.local
# server_name_dns:
# - standby_replica_one.svc.cluster.local
# - standby_replica_two.svc.cluster.local
38 changes: 38 additions & 0 deletions .company/customers/aeoess.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Design Partner: aeoess (Agent Passport System)
First contact: Wave 10 (integration proposal on APS#5)
First reply: Wave 19
Status: ACTIVE DESIGN PARTNER — code shipped

## Profile
- Project: [agent-passport-system](https://github.com/aeoess/agent-passport-system)
- Stack: TypeScript, Ed25519, XChaCha20-Poly1305, DID
- Scale: 1122+ tests, 72 MCP tools, v1.19.4
- Activity: Very high. Ships features daily. Responds within hours.

## What They Built
- `deriveEncryptionKeypair()` — Ed25519→X25519, 5/5 vectors (wave 23)
- `qntm-bridge.ts` — 369 lines, 18/18 tests, HKDF+CBOR+XChaCha20+relay transport (wave 26)
- `entityBinding` + `identityBoundary` — legal entity anchoring (wave 24)
- DID cross-verification proposal with AgentID (wave 27)

## What They Use qntm For
- Encrypted transport layer beneath APS signed execution envelopes
- Relay store-and-forward for offline agent delivery
- Not using qntm CLI directly — using as protocol/relay infrastructure

## Key Quotes
- "qntm fills exactly that gap" (wave 19)
- "Let's do the relay test" (wave 24)
- Proposed layered envelope design: APS wraps qntm inner (wave 24)

## Threads
- APS#5 (primary): https://github.com/aeoess/agent-passport-system/issues/5
- A2A#1575: entity binding
- A2A#1606: data handling
- A2A#1667: relay patterns

## Lessons
- Very technically rigorous — provides test vectors, expects them back
- Self-driving once unblocked — doesn't need hand-holding
- Treats qntm as infrastructure, not product — this is how technical adoption works
- Response cadence: hours, not days
35 changes: 35 additions & 0 deletions .company/customers/haroldmalikfrimpong-ops.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Design Partner: haroldmalikfrimpong-ops (AgentID / getagentid.dev)
First contact: Wave 22 (reply on A2A#1672)
Status: ACTIVE DESIGN PARTNER — PR merged, relay proven

## Profile
- Project: [getagentid](https://github.com/haroldmalikfrimpong-ops/getagentid)
- Platform: getagentid.dev
- Stack: Python, Ed25519, X3DH, Double Ratchet, NaCl
- Activity: Extremely high. Ships code within hours of discussion.

## What They Built
- 809-line AgentID→qntm encrypted chat demo (wave 25)
- Relay test script: HKDF 3/3, HTTP 201, live message exchange (wave 26)
- DID cross-verification: `did:agentid` ↔ `did:aps`, 10/10 checks, 82 tests (wave 27)
- PR #3 on corpollc/qntm — AgentID bridge example (wave 27, MERGED)

## What They Use qntm For
- Encrypted relay transport for AgentID-verified agents
- Interop proof: AgentID identity → qntm encrypted channel
- Not using qntm CLI — using relay as infrastructure

## Key Quotes
- "Complementary pieces, not competing ones" (wave 22)
- "Three identity systems, one encrypted channel" (wave 26)

## Threads
- A2A#1672 (primary): https://github.com/a2aproject/A2A/issues/1672
- APS#5 (cross-pollination): https://github.com/aeoess/agent-passport-system/issues/5

## Lessons
- Fastest contributor cycle: concept → shipped code → PR in 2 waves
- Self-directed — built DID interop without being asked
- Network node — connects to crewAI, AgentID, A2A, APS simultaneously
- Prefers Python, minimal dependencies (NaCl + cryptography only)
- Updated his CBOR to native qntm field names voluntarily
29 changes: 29 additions & 0 deletions .company/decision-rights-map.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Decision Rights Map — qntm
Created: 2026-03-22

## Levels
- **DECIDE**: Full authority, log it
- **RECOMMEND**: Propose with evidence, Founder approves
- **INFORM**: Gets notified after decision
- **ESCALATE**: Goes to Chairman via Pepper

## Map

| Decision | DECIDE | RECOMMEND | INFORM | ESCALATE |
|----------|--------|-----------|--------|----------|
| Wave priorities (Top 5) | Founder | — | All | — |
| Code merge to main | CTO/Founder | — | — | — |
| Worker deploy | COO/Founder | — | — | — |
| Test standards | CTO | — | Founder | — |
| API/protocol changes | CTO | — | — | If crypto |
| Positioning/messaging | CMO | — | Founder | — |
| Product roadmap | CPO | — | Founder | Strategy pivot |
| Distribution experiments | CMO | — | Founder | Paid spend |
| Infrastructure changes | COO | — | Founder | — |
| Pricing | — | CPO | CMO | Chairman |
| Partnerships | — | Founder | — | Chairman |
| Public statements | — | — | — | Chairman |
| Package publishing | — | CTO | — | Chairman |
| Spend > $50/mo | — | — | — | Chairman |
| Crypto protocol changes | — | CTO | — | Chairman |
| Strategy pivot | — | Founder | — | Chairman |
50 changes: 50 additions & 0 deletions .company/decisions/2026-03-22-echo-bot-persistence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Decision: Echo Bot Persistence Strategy
Date: 2026-03-22 (Wave 4)
DRI: Founder

## Problem
The echo bot (our only activation path) runs as a nohup process on the founder's MacBook. It died between waves, returning the primary metric to 0. Every new `uvx qntm` user who follows the README hits a dead bot.

## Target Customer
New agent developers who run `uvx qntm` and need immediate proof of value.

## Evidence
- Echo bot died between wave 3 and wave 4 (predicted but not prevented)
- 862 weekly PyPI downloads → 0 new echo bot participants (bot was dead during this window)
- Primary metric dropped from 1 → 0 active conversations
- The only activation path requires a responsive echo bot

## Options Considered

### Option A: launchd plist (macOS) — IMPLEMENTED
- **Pros:** Immediate fix, auto-restart on crash, survives reboots
- **Cons:** Depends on founder's MacBook being on, no global availability, uses DO polling (17K req/day)
- **Cost:** Zero
- **Time to implement:** 15 minutes

### Option B: Cloudflare Worker echo bot
- **Pros:** Global, always-on, zero-maintenance, uses Cron Triggers (not polling), no DO quota impact
- **Cons:** Must handle crypto in Worker context (TypeScript), needs separate deploy, complexity
- **Cost:** Free tier (Workers + Cron Triggers)
- **Time to implement:** 2-4 hours

### Option C: Cloudflare Worker with WebSocket subscription
- **Pros:** Best of B + real-time response (no poll delay), prepares for WebSocket migration (bead qntm-szex)
- **Cons:** Most complex, WebSocket support may need DO for the subscriber
- **Cost:** Free tier
- **Time to implement:** 4-8 hours

## Decision
**Phase 1 (now): Option A** — launchd plist installed and verified. Bot survives reboots.
**Phase 2 (next wave): Option B** — CF Worker echo bot with Cron Trigger (poll every 60s from Worker instead of 5s from MacBook). This eliminates host dependency AND reduces DO load.
**Phase 3 (later): Option C** — When WebSocket migration happens (bead qntm-szex), upgrade echo bot to subscribe.

## Expected Metric Effect
- Primary metric stabilizes at ≥1 (echo bot conversation always active)
- Activation path reliability: 100% uptime for new users
- DO request load: reduces from 17K/day (5s polling) to ~1.5K/day (60s Cron Trigger)

## Reversible? Yes — can switch between any option
## Confidence: 0.9
## Escalation: No (CF Workers deploy is ALLOWED per AUTONOMY)
## Review: Wave 6
32 changes: 32 additions & 0 deletions .company/decisions/2026-03-22-mcp-server.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Decision Memo: Build qntm MCP Server

## DECISION MEMO
- **Problem:** Distribution is the existential bottleneck. 16 waves, 0 customer contact. GitHub issue-based outreach has 0% response rate after 24+ hours. Need a new distribution channel.
- **Target customer:** AI agent developers using MCP-compatible tools (Claude Desktop, Cursor, OpenClaw, etc.)
- **Evidence:**
- DeadDrop (yksanjo/deaddrop-v2) launched an encrypted agent messaging MCP server and got listed on LobeHub marketplace with 2 installs from zero marketing
- MCP is the de facto standard for AI tool integration (Google, GitHub, Microsoft all ship MCP servers)
- LobeHub and Smithery are active marketplaces where agent developers discover tools
- 6 GitHub outreach efforts = 0 responses; MCP marketplace is a different, unblocked channel
- Agent developers browsing MCP marketplaces ARE our exact target segment
- **Options considered:**
1. Build MCP server (new distribution channel, within ALLOWED) ← CHOSEN
2. More GitHub issues (proven low conversion, diminishing returns)
3. Wait for PyPI approval (blocked for 11 waves)
4. Build framework-specific integrations (LangChain/CrewAI — higher effort, narrower reach)
- **Recommended option:** Build qntm MCP server
- **Expected effect on primary metric:** Opens a new funnel: MCP marketplace → install → identity → conversation. If even 1% of MCP marketplace browsers try qntm, that's more activation than all GitHub outreach combined.
- **Cost/impact:** ~1 wave of development time. Optional dependency (mcp[cli]). No infrastructure changes.
- **Reversible or irreversible:** Reversible. It's a module that can be removed without affecting core functionality.
- **Confidence:** 0.7 — DeadDrop proves the pattern works. Unclear how much traffic MCP marketplaces drive.
- **DRI:** CEO (Founder)
- **Review date:** Wave 18 (check if MCP server generates installs/conversations)
- **Escalation needed?** Yes — marketplace listing may need approval if it counts as "public posting" under AUTONOMY.md

## Outcome
- Built and shipped in wave 16
- 9 tools, 2 resources, 1 prompt
- 14 tests, all 221 tests pass
- Committed dd8c3df, pushed to main
- Both READMEs updated with MCP section
- Full docs at docs/mcp-server.md
23 changes: 23 additions & 0 deletions .company/decisions/2026-03-22-relaunch-priorities.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Decision: Relaunch Priorities
Date: 2026-03-22
DRI: Founder

## Problem
Waves 0-6 were tech-focused — fixed bugs, stabilized tests, but built zero customer evidence. The kernel demands business fundamentals before more engineering.

## Options Considered
1. **Keep shipping features** (echo bot, more gateway recipes) — wrong: no customers to test with
2. **Full business relaunch** — create all Day One documents, set up goal hierarchy, then execute customer-facing work
3. **Split: fix tests + customer outreach simultaneously** — best of both worlds

## Decision
Option 3. Fix the test regression (vitest compat) as an ops task while prioritizing customer-facing work: measure TTFM, create target customer list, start distribution research.

## Expected Metric Effect
- Tests back to green (O1 health metric)
- Begin measuring L3 (TTFM) within this wave
- Target customer list created → enables outbound experiments

## Reversible? Yes
## Confidence: 0.8
## Escalation: No
70 changes: 70 additions & 0 deletions .company/decisions/2026-03-22-subscribe-auth.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# DECISION MEMO — Authenticated Subscribe

## Problem
`/v1/subscribe` currently routes by `conv_id` alone with no identity verification. Any client that knows a conversation ID can connect and receive ciphertext. While E2E encryption means they can't read the content, they can observe traffic patterns (timing, frequency, message sizes).

## Target Customer/Segment
Agent developers integrating encrypted messaging into multi-agent systems. Specifically: aeoess (APS) and The-Nexus-Guard (AIP) — our first two external technical contacts.

## Evidence
- The-Nexus-Guard explicitly asked on A2A #1667: "does qntm support any form of identity for subscribers? ... is there agent-level authentication on subscribe?"
- aeoess's integration proposal on #5 implies identity-bound transport — their system binds everything to Ed25519 passport keys.
- Both represent potential design partners. Addressing their feedback directly demonstrates responsiveness and engineering quality.

## Options Considered

### Option A: Ed25519 Challenge-Response on WebSocket Handshake
```
1. Client: GET /v1/subscribe?conv_id=X&pub_key=Y
2. Server: sends {"challenge": "<32-byte-hex>"}
3. Client: sends {"signature": "<ed25519-sig-of-challenge>"}
4. Server: verifies sig against conversation participant list
5. If valid → stream messages. If not → close(4003).
```

**Pros:** Strong identity verification. Same Ed25519 primitives already in the relay (verifyAnnounceSig). Compatible with APS key derivation path.
**Cons:** Adds 1 round-trip latency to subscribe. Requires participant list to be stored on relay. Breaking change for existing clients.

### Option B: Bearer Token (Signed Subscribe Token)
```
Client pre-signs a subscribe token: sign(conv_id + timestamp + nonce, private_key)
GET /v1/subscribe?conv_id=X&token=Y&pub_key=Z
Server verifies signature in the HTTP upgrade, streams immediately.
```

**Pros:** No extra round-trip (verification happens during WebSocket upgrade). Stateless verification.
**Cons:** Token could be replayed within its TTL. Need to define TTL/nonce policy.

### Option C: Status Quo (No Auth)
**Pros:** Simplest. E2E encryption provides content confidentiality regardless.
**Cons:** Traffic analysis exposure. Doesn't meet expectations of identity-focused developers (APS, AIP). Perception of engineering incompleteness.

## Recommended Option
**Option A (Challenge-Response)** — it's the strongest identity guarantee, uses existing relay primitives, and directly addresses what both external developers asked for. The 1 round-trip cost is negligible for WebSocket connections that last minutes/hours.

Implement as OPTIONAL: if `pub_key` param is present, require challenge-response. If absent, fall through to unauthenticated subscribe (backwards compatible).

## Expected Effect on Primary Metric
- Direct: enables APS integration (identity key → subscribe auth → encrypted relay). Unblocks potential first design partner conversation.
- Indirect: demonstrates engineering quality to external evaluators. Both responders are evaluating us partly on code quality.

## Cost / Impact
- ~100 lines in worker/src/index.ts (challenge generation, signature verification, participant check)
- ~50 lines in python-dist client (send pub_key + sign challenge)
- Tests: 5-10 new integration tests
- No infrastructure cost.

## Reversible or Irreversible?
Reversible — optional parameter, backwards compatible.

## Confidence
0.85 — high confidence this is the right feature. The only risk is over-engineering for two developers who may not convert to users.

## DRI
CEO (Founder)

## Review Date
Wave 21 (after implementation + feedback from aeoess/The-Nexus-Guard)

## Escalation Needed?
No — this is a protocol enhancement within existing architectural patterns. Not a cryptographic protocol change (uses same Ed25519 primitives). Not a strategy pivot.
Loading
Loading