Create canonical consolidation plan and Telegram-Nostr bridge spec under docs/nostr-migration/. - CONSOLIDATION.md: establishes #819 as canonical parent epic, maps scope boundaries, documents current implementation state (Python stack + browser stack + infrastructure), lists action items - TELEGRAM-NOSTR-BRIDGE-SPEC.md: highest-priority child issue spec with requirements, architecture, implementation phases, and acceptance criteria Refs #862, #819, #138
99 lines
3.4 KiB
Markdown
99 lines
3.4 KiB
Markdown
# Nostr Migration Consolidation Plan
|
|
|
|
> Issue #862 | Canonical Epic: the-nexus #819
|
|
> Consolidated From: the-nexus #819 + timmy-config #138
|
|
|
|
---
|
|
|
|
## Problem
|
|
|
|
Two epics tracked the same Telegram -> Nostr migration with overlapping scope:
|
|
|
|
| Epic | Repo | Focus | Status |
|
|
|------|------|-------|--------|
|
|
| #819 | the-nexus | Client fork (Nostur), UI/UX, agent presence | **CANONICAL** |
|
|
| #138 | timmy-config | Relay/infrastructure, deployment, ops | Tracked child |
|
|
|
|
Neither was the parent. Work risked duplication and drift.
|
|
|
|
---
|
|
|
|
## Resolution
|
|
|
|
**#819 is the canonical parent epic.** All Nostr migration work rolls up here.
|
|
|
|
### Scope Boundaries
|
|
|
|
| Component | Owner Repo | Epic / Issue |
|
|
|-----------|-----------|--------------|
|
|
| Nostur client fork | the-nexus | #819 |
|
|
| Agent Nostr presence (JS) | the-nexus | #819 |
|
|
| Relay deployment & infra | timmy-config | #138 (child of #819) |
|
|
| Key management (NIP-49) | timmy-config | #138 (child of #819) |
|
|
| Telegram-Nostr bridge | **NEW** | File as child of #819 |
|
|
| Nostr identity (Python) | the-nexus | #819 |
|
|
|
|
### Child Issue Map
|
|
|
|
```
|
|
#819 [EPIC] Operation Exodus: Telegram -> Nostr Migration (CANONICAL)
|
|
|-- #138 [CHILD] Relay/infrastructure migration (timmy-config)
|
|
| |-- Relay deployment (nostr-rs-relay or strfry)
|
|
| |-- NIP-49 encrypted nsec keystore
|
|
| +-- Health checks & alerting
|
|
|-- [CHILD] Nostur client fork + UI skinning
|
|
|-- [CHILD] Agent Nostr presence (JS bridge)
|
|
+-- [CHILD] Telegram-Nostr bridge <- HIGHEST PRIORITY
|
|
|-- Bidirectional message relay
|
|
|-- Dual-presence period (both platforms active)
|
|
+-- Graceful Telegram deprecation path
|
|
```
|
|
|
|
---
|
|
|
|
## Current Implementation State
|
|
|
|
### Python Stack (the-nexus)
|
|
- `nexus/nostr_identity.py` - Pure-Python BIP340 Schnorr signatures
|
|
- WARNING **Timing side-channel vulnerabilities** (see FINDINGS-issue-801.md)
|
|
- Suitable for prototyping; production needs `coincurve` or constant-time rewrite
|
|
- `nexus/nostr_publisher.py` - Async WebSocket publisher to public relays
|
|
|
|
### Browser Stack (the-nexus)
|
|
- `app.js:NostrAgent` - Browser-side agent presence
|
|
- WARNING Uses **mock signatures** (`mock_id`, `mock_sig`)
|
|
- Needs real crypto integration or delegation to Python backend
|
|
|
|
### Infrastructure (timmy-config)
|
|
- `nostr-bridge.service` - Running but source file deleted, only `.pyc` remains
|
|
- `/root/nostr-relay/keystore.json` - NIP-49 encrypted nsec storage
|
|
|
|
---
|
|
|
|
## Highest Priority: Telegram-Nostr Bridge
|
|
|
|
The bridge is the critical path. Without it, migration strands users on Telegram.
|
|
|
|
**Requirements:**
|
|
1. Bidirectional message relay (Telegram <-> Nostr)
|
|
2. Dual-presence period: both platforms active during transition
|
|
3. Graceful deprecation: Telegram bot stays online until 90% of active users have Nostr handles
|
|
4. Channel/topic mapping: preserve conversation structure
|
|
|
|
**File this as a new child issue under #819.**
|
|
|
|
---
|
|
|
|
## Action Items
|
|
|
|
- [ ] Close #138 in timmy-config with comment: "Consolidated into the-nexus #819. Relay/infrastructure work tracked as child of canonical epic."
|
|
- [ ] Update #819 title/body to reference this consolidation plan
|
|
- [ ] File child issue: Telegram-Nostr bridge (bidirectional, dual-presence)
|
|
- [ ] File child issue: Fix timing side-channel in `nostr_identity.py` (or replace with `coincurve`)
|
|
- [ ] File child issue: Replace mock signatures in `app.js:NostrAgent` with real crypto
|
|
- [ ] Assign owners to each child issue
|
|
|
|
---
|
|
|
|
*Sovereignty and service always.*
|