···
## 🎯 Major Progress Update
**✅ ALL E2E TESTS COMPLETE!** (Completed 2025-11-16)
10
+
**✅ BIDIRECTIONAL DID VERIFICATION COMPLETE!** (Completed 2025-11-16)
All 6 critical E2E test suites have been implemented and are passing:
- ✅ Full User Journey (signup → community → post → comment → vote)
···
**Time Saved**: ~7-12 hours through parallel agent implementation
**Test Quality**: Enhanced with comprehensive database record verification to catch race conditions
23
+
### Production Deployment Requirements
26
+
- **AppView Domain**: coves.social (instance identity, API, frontend)
27
+
- **PDS Domain**: coves.me (separate domain required - cannot be same as AppView)
28
+
- **Community Handles**: Use @coves.social (AppView domain)
29
+
- **Jetstream**: Connects to Bluesky's production firehose (wss://jetstream2.us-east.bsky.network)
31
+
**Required: .well-known/did.json at coves.social**:
34
+
"id": "did:web:coves.social",
35
+
"alsoKnownAs": ["at://coves.social"],
36
+
"verificationMethod": [
38
+
"id": "did:web:coves.social#atproto",
40
+
"controller": "did:web:coves.social",
41
+
"publicKeyMultibase": "z..."
46
+
"id": "#atproto_pds",
47
+
"type": "AtprotoPersonalDataServer",
48
+
"serviceEndpoint": "https://coves.me"
54
+
**Environment Variables**:
56
+
- `INSTANCE_DID=did:web:coves.social`
57
+
- `INSTANCE_DOMAIN=coves.social`
58
+
- `PDS_URL=https://coves.me` (separate domain)
59
+
- `SKIP_DID_WEB_VERIFICATION=false` (production)
60
+
- `JETSTREAM_URL=wss://jetstream2.us-east.bsky.network/subscribe`
63
+
- `curl https://coves.social/.well-known/did.json` (should return DID document)
64
+
- `curl https://coves.me/xrpc/_health` (PDS health check)
This document tracks the remaining work required to launch Coves alpha with real users. Focus is on critical functionality, security, and operational readiness.
···
### 1. Authentication & Security
76
+
#### Production PDS Deployment
77
+
**CRITICAL**: PDS must be on separate domain from AppView (coves.me, not coves.social)
79
+
- [ ] Deploy PDS to coves.me domain
80
+
- [ ] Set up DNS: A record for coves.me → server IP
81
+
- [ ] Configure SSL certificate for coves.me
82
+
- [ ] Deploy PDS container/service on port 2583
83
+
- [ ] Configure nginx/Caddy reverse proxy for coves.me → localhost:2583
84
+
- [ ] Set PDS_HOSTNAME=coves.me in PDS environment
85
+
- [ ] Mount persistent volume for PDS data (/pds/data)
86
+
- [ ] Verify PDS connectivity
87
+
- [ ] Test: `curl https://coves.me/xrpc/_health`
88
+
- [ ] Create test community account on PDS
89
+
- [ ] Verify JWKS endpoint: `curl https://coves.me/.well-known/jwks.json`
90
+
- [ ] Test community account token provisioning
91
+
- [ ] Configure AppView to use production PDS
92
+
- [ ] Set `PDS_URL=https://coves.me` in AppView .env
93
+
- [ ] Test community creation flow (provisions account on coves.me)
94
+
- [ ] Verify account provisioning works end-to-end
96
+
**Important**: Jetstream connects to Bluesky's production firehose, which automatically includes events from all production PDS instances (including coves.me once it's live)
98
+
**Estimated Effort**: 4-6 hours
99
+
**Risk**: Medium (infrastructure setup, DNS propagation)
#### JWT Signature Verification (Production Mode)
33
-
- [ ] Test with production PDS at `pds.bretton.dev`
34
-
- [ ] Create test account on production PDS
35
-
- [ ] Verify JWKS endpoint is accessible
102
+
- [ ] Test with production PDS at coves.me
103
+
- [ ] Verify JWKS endpoint is accessible: `https://coves.me/.well-known/jwks.json`
- [ ] Run `TestJWTSignatureVerification` against production PDS
- [ ] Confirm signature verification succeeds
38
-
- [ ] Test token refresh flow
106
+
- [ ] Test token refresh flow for community accounts
- [ ] Set `AUTH_SKIP_VERIFY=false` in production environment
- [ ] Verify all auth middleware tests pass with verification enabled
41
-
- [ ] Document production PDS requirements for communities
**Estimated Effort**: 2-3 hours
44
-
**Risk**: Medium (code implemented, needs validation)
111
+
**Risk**: Low (depends on PDS deployment)
46
-
#### did:web Verification
47
-
- [ ] Complete did:web domain verification implementation
48
-
- [ ] Test with real did:web identities
49
-
- [ ] Add security logging for verification failures
50
-
- [ ] Set `SKIP_DID_WEB_VERIFICATION=false` for production
113
+
#### did:web Verification ✅ COMPLETE
114
+
- [x] Complete did:web domain verification implementation (2025-11-16)
115
+
- [x] Implement Bluesky-compatible bidirectional verification
116
+
- [x] Add alsoKnownAs field verification in DID documents
117
+
- [x] Add security logging for verification failures
118
+
- [x] Update cache TTL to 24h (matches Bluesky recommendations)
119
+
- [x] Comprehensive test coverage with mock HTTP servers
120
+
- [ ] Set `SKIP_DID_WEB_VERIFICATION=false` for production (dev default: true)
121
+
- [ ] Deploy `.well-known/did.json` to production domain
52
-
**Estimated Effort**: 2-3 hours
123
+
**Implementation Details**:
124
+
- **Location**: [internal/atproto/jetstream/community_consumer.go](../internal/atproto/jetstream/community_consumer.go)
125
+
- **Verification Flow**: Domain matching + DID document fetch + alsoKnownAs validation
126
+
- **Security Model**: Matches Bluesky (DNS/HTTPS authority + bidirectional binding)
127
+
- **Performance**: Bounded LRU cache (1000 entries), rate limiting (10 req/s), 24h TTL
128
+
- **Impact**: AppView indexing and federation trust (not community creation API)
129
+
- **Tests**: `tests/integration/community_hostedby_security_test.go`
131
+
**Actual Effort**: 3 hours (implementation + testing)
132
+
**Risk**: ✅ Low (complete and tested)
### 2. DPoP Token Architecture Fix
···
- [ ] Common issues and fixes
- [ ] Emergency procedures (PDS down, database down, etc.)
- [ ] Create production environment checklist
175
-
- [ ] All environment variables set
176
-
- [ ] `AUTH_SKIP_VERIFY=false`
177
-
- [ ] `SKIP_DID_WEB_VERIFICATION=false`
178
-
- [ ] Database migrations applied
179
-
- [ ] PDS connectivity verified
180
-
- [ ] JWKS caching working
181
-
- [ ] Jetstream consumers running
254
+
- [ ] **Domain Setup**
255
+
- [ ] AppView domain (coves.social) DNS configured
256
+
- [ ] PDS domain (coves.me) DNS configured - MUST be separate domain
257
+
- [ ] SSL certificates for both domains
258
+
- [ ] Nginx/Caddy reverse proxy configured for both domains
259
+
- [ ] **AppView Environment Variables**
260
+
- [ ] `INSTANCE_DID=did:web:coves.social`
261
+
- [ ] `INSTANCE_DOMAIN=coves.social`
262
+
- [ ] `PDS_URL=https://coves.me` (separate domain)
263
+
- [ ] `AUTH_SKIP_VERIFY=false`
264
+
- [ ] `SKIP_DID_WEB_VERIFICATION=false`
265
+
- [ ] `JETSTREAM_URL=wss://jetstream2.us-east.bsky.network/subscribe`
266
+
- [ ] **PDS Environment Variables**
267
+
- [ ] `PDS_HOSTNAME=coves.me`
268
+
- [ ] `PDS_PORT=2583`
269
+
- [ ] Persistent storage mounted
270
+
- [ ] **Deployment Verification**
271
+
- [ ] Deploy `.well-known/did.json` to coves.social with `serviceEndpoint: https://coves.me`
272
+
- [ ] Verify: `curl https://coves.social/.well-known/did.json`
273
+
- [ ] Verify: `curl https://coves.me/xrpc/_health`
274
+
- [ ] Database migrations applied
275
+
- [ ] PDS connectivity verified from AppView
276
+
- [ ] JWKS caching working
277
+
- [ ] Jetstream consumer connected to Bluesky production firehose
278
+
- [ ] Test community creation end-to-end
- [ ] Monitoring and alerting active
**Estimated Effort**: 6-8 hours
···
### Week 1: Critical Blockers (P0)
345
-
- **Days 1-2**: Authentication (JWT + did:web verification)
442
+
- ~~**Days 1-2**: Authentication (JWT + did:web verification)~~ ✅ **did:web COMPLETED**
443
+
- **Day 1**: Production PDS deployment (coves.me domain setup)
444
+
- **Day 2**: JWT signature verification with production PDS
- **Day 3**: DPoP token architecture fix
- ~~**Day 4**: Handle resolution + comment count reconciliation~~ ✅ **COMPLETED**
- **Day 4-5**: Testing and bug fixes
350
-
**Total**: 15-20 hours (reduced from 20-25 due to completed items)
449
+
**Total**: 16-23 hours (added 4-6 hours for PDS deployment, reduced from original due to did:web completion)
### Week 2: Production Infrastructure (P1)
- **Days 6-7**: Monitoring + structured logging
···
**Total**: ~~20-25 hours~~ → **13 hours actual** (E2E tests) + 7-12 hours remaining (load testing, polish)
366
-
**Grand Total: ~~65-80 hours~~ → 50-65 hours remaining (approximately 1.5-2 weeks full-time)**
367
-
*(Originally 70-85 hours. Reduced by completed items: handle resolution, comment count reconciliation, and ALL E2E tests)*
465
+
**Grand Total: ~~65-80 hours~~ → 51-68 hours remaining (approximately 1.5-2 weeks full-time)**
466
+
*(Originally 70-85 hours. Adjusted for: +4-6 hours PDS deployment, -3 hours did:web completion, -13 hours E2E tests completion, -4 hours handle resolution and comment reconciliation)*
**✅ Progress Update**: E2E testing section COMPLETE ahead of schedule - saved ~7-12 hours through parallel agent implementation
···
- [ ] All P0 blockers resolved
- ✅ Handle resolution (COMPLETE)
- ✅ Comment count reconciliation (COMPLETE)
479
+
- ✅ did:web verification (COMPLETE - needs production deployment)
480
+
- [ ] Production PDS deployed to coves.me (separate domain)
- [ ] JWT signature verification working with production PDS
- [ ] DPoP architecture fix implemented
382
-
- [ ] did:web verification complete
- [ ] Subscriptions/blocking work via client-write pattern
- [x] **All integration tests passing** ✅
- [x] **E2E user journey test passing** ✅
···
11. [ ] Go/no-go decision
464
-
**🎉 Major Milestone**: All E2E tests complete! Test coverage now includes full user journey, blob uploads, concurrent operations, rate limiting, and error recovery.
564
+
**🎉 Major Milestones**:
565
+
- All E2E tests complete! Test coverage now includes full user journey, blob uploads, concurrent operations, rate limiting, and error recovery.
566
+
- Bidirectional DID verification complete! Bluesky-compatible security model with alsoKnownAs validation, 24h cache TTL, and comprehensive test coverage.