| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 2025-12-10 | feat: connect REGISTRY to SyncManager (Phase 3) | DanConwayDev | |
| 2025-12-10 | feat: add metrics field to SyncManager (Phase 2) | DanConwayDev | |
| 2025-12-10 | feat: create sync metrics module (Phase 1) | DanConwayDev | |
| 2025-12-10 | fix: enable Layer 3 sync by adding root events to pending queue | DanConwayDev | |
| When root events (issues/patches) are received via self-subscription, handle_root_event() was only updating the repo_sync_index directly. This caused process_batch() to early-return when pending.is_empty(), so Layer 3 filters for comments/replies were never created. The fix adds root events to both: 1. repo_sync_index (for immediate availability) 2. pending queue (to trigger Layer 3 filter creation in next batch) Critical: The pending entry must include relays from repo_sync_index so derive_relay_targets() knows where to send Layer 3 subscriptions. The Layer 3 test now verifies that events sent BEFORE the subscription is established are still synced - proving subscriptions without 'since' correctly fetch historical events. Enabled 4 previously ignored Layer 3 tests: - test_live_sync_layer3_events - test_layer3_sync_with_lowercase_e_tag - test_layer3_sync_with_uppercase_e_tag - test_layer3_sync_with_q_tag | |||
| 2025-12-10 | feat(sync): broadcast synced events to WebSocket subscribers | DanConwayDev | |
| Enable recursive relay discovery by broadcasting synced events to WebSocket subscribers via LocalRelay.notify_event(). This allows the SelfSubscriber to receive 30617 announcements synced from external relays and discover additional relay URLs to connect to. Changes: - Pass LocalRelay to SyncManager::new() from main.rs - Add local_relay field to SyncManager struct - Call notify_event() after saving synced events to database - Enable test_recursive_relay_discovery_syncs_announcement test The test verifies that when relay_a syncs announcement_x from bootstrap relay_b (which lists relay_c), relay_a discovers and connects to relay_c to sync announcement_y. Fixes recursive relay discovery from bootstrap sync. | |||
| 2025-12-10 | test(sync): add wait_for_sync_connection helper for improved reliability | DanConwayDev | |
| 2025-12-10 | test(sync): add 3-relay recursive discovery test | DanConwayDev | |
| 2025-12-10 | test(sync): add rejection test for announcements without clone tags | DanConwayDev | |
| 2025-12-10 | refactor(tests): extract shared create_repo_announcement helper | DanConwayDev | |
| 2025-12-10 | Phase 10: Remove obsolete proactive_sync_basic.rs test file | DanConwayDev | |
| All tests from this file have been migrated to the new modular structure: - tests/sync/bootstrap.rs (Tests 1, 4) - tests/sync/discovery.rs (Tests 2, 3) - tests/sync/live_sync.rs (Tests 5, 6, 7) - tests/sync/tag_variations.rs (Tests 8a-c, 9a-c) - tests/sync/catchup.rs (Test 0) Verified: cargo test --test sync shows 19 passed, 5 ignored | |||
| 2025-12-10 | Phase 8: Create catchup sync stub test | DanConwayDev | |
| 2025-12-10 | Phase 7: Implement tag variation tests | DanConwayDev | |
| Add comprehensive tests for different Layer 2 and Layer 3 tag variations: Layer 2 tests (Tests 8a-c) - all pass: - test_layer2_sync_with_lowercase_a_tag (standard NIP-01) - test_layer2_sync_with_uppercase_a_tag (NIP-33) - test_layer2_sync_with_q_tag (NIP-18 quotes) Layer 3 tests (Tests 9a-c) - marked #[ignore]: - test_layer3_sync_with_lowercase_e_tag (NIP-01) - test_layer3_sync_with_uppercase_e_tag (NIP-22) - test_layer3_sync_with_q_tag (NIP-18) Layer 3 tests have full implementation but are ignored until Layer 3 sync is enabled in the relay. | |||
| 2025-12-10 | Phase 6: Implement live sync tests | DanConwayDev | |
| 2025-12-10 | Phase 5: Migrate bootstrap and discovery tests | DanConwayDev | |
| Create organized test structure for proactive sync: tests/common/sync_helpers.rs (from Phase 4): - TestClient with retry logic for connect/send - Event builders: build_layer2_issue_event, build_layer3_comment_event - Tag variants (a/A/q for Layer 2, e/E/q for Layer 3) - wait_for_event_on_relay() assertion helper - repo_coord() utility function - Unit tests for all builders tests/sync/mod.rs: - Module organization for sync tests - Documentation of test categories tests/sync.rs: - Main test harness including common and sync modules tests/sync/bootstrap.rs: - test_bootstrap_syncs_existing_layer2_events (Test 1) - test_relay_replays_events_after_restart (Test 4) tests/sync/discovery.rs: - test_discovers_layer3_via_layer2 (Test 2) - test_layer2_discovery_with_chain (Test 3 - simplified) All 14 tests pass: cargo test --test sync | |||
| 2025-12-10 | sync: fix connection registration issue | DanConwayDev | |
| 2025-12-10 | improve: count all active subscriptions in get_filter_count (IMPROVE-1) | DanConwayDev | |
| 2025-12-10 | refactor: remove insert-remove pattern in spawn_relay_connection (SIMPLIFY-3) | DanConwayDev | |
| 2025-12-10 | refactor: deduplicate SelfSubscriber select branches (SIMPLIFY-2) | DanConwayDev | |
| 2025-12-10 | refactor: remove redundant RelayAction enum (SIMPLIFY-1) | DanConwayDev | |
| 2025-12-10 | feat: add automatic reconnection with exponential backoff (IMPROVE-2) | DanConwayDev | |
| 2025-12-10 | fix: don't add 30617 announcement IDs to root_events (BUG-2) | DanConwayDev | |
| 2025-12-10 | fix: add Layer 1 re-subscription on quick reconnect (BUG-1) | DanConwayDev | |
| 2025-12-10 | docs: update sync docs post implementation | DanConwayDev | |
| 2025-12-10 | sync: implement graceful shutdown for all tasks and connections | DanConwayDev | |
| 2025-12-10 | sync: enhance SelfSubscriber with reconnect and root event tracking | DanConwayDev | |
| 2025-12-10 | sync: implement relay removal for empty non-bootstrap relays | DanConwayDev | |
| 2025-12-10 | sync: implement daily timer for periodic fresh sync | DanConwayDev | |
| 2025-12-10 | sync: implement filter consolidation system | DanConwayDev | |
| 2025-12-10 | sync: complete AddFilters handler with auto-spawning | DanConwayDev | |
| 2025-12-10 | sync: implement unified connect/reconnect with since filters | DanConwayDev | |
| 2025-12-10 | sync: implement PendingBatch EOSE confirmation flow | DanConwayDev | |
| 2025-12-10 | sync: implement disconnect handler with state cleanup | DanConwayDev | |
| 2025-12-10 | sync: integrate health tracking and connection storage | DanConwayDev | |
| 2025-12-10 | sync v4 mvp | DanConwayDev | |
| 2025-12-10 | stub of sync v4 | DanConwayDev | |
| 2025-12-10 | improve sync design | DanConwayDev | |
| 2025-12-09 | sync initalize from db | DanConwayDev | |
| 2025-12-09 | basic sync stub | DanConwayDev | |
| 2025-12-08 | delete old bad AI genreated tests | DanConwayDev | |
| 2025-12-08 | redsign sync - architecture tweaks | DanConwayDev | |
| 2025-12-08 | redesign sync - document only | DanConwayDev | |
| 2025-12-08 | proposed sync change to use self subscribe to trigger everything | DanConwayDev | |
| 2025-12-08 | tests: discover and sync from relay in annocunement published directly | DanConwayDev | |
| 2025-12-05 | remove stupid tests and methods | DanConwayDev | |
| 2025-12-05 | test: fix proactive sync basic tests | DanConwayDev | |
| 2025-12-05 | rename sunc_bootstrap_relay_url | DanConwayDev | |
| 2025-12-05 | fix basic sync tests | DanConwayDev | |
| 2025-12-05 | sync fixes | DanConwayDev | |
| 2025-12-04 | feat(sync): Phase 6 - observability and production readiness | DanConwayDev | |
| - Add SyncMetrics with full Prometheus integration - Track sync gaps via catchup events - Update Grafana dashboard with sync panels - Document all sync configuration options - Update design doc with implementation notes | |||
| 2025-12-04 | feat(sync): Phase 5 - negentropy catchup (NIP-77) | DanConwayDev | |
| - Add NegentropyService for set reconciliation - Implement startup catchup with warm-up delay - Implement reconnect catchup (last 3 days) - Add daily catchup schedule with stagger | |||
| 2025-12-04 | feat(sync): Phase 4 - dynamic subscriptions | DanConwayDev | |
| - Add SubscriptionManager for per-connection tracking - Trigger subscription updates on new repo/PR events - Implement consolidation when filter count > 150 | |||
| 2025-12-04 | feat(sync): Phase 3 - resilience and health tracking | DanConwayDev | |
| - Add RelayHealthTracker with DashMap - Implement exponential backoff (5s -> 1h max) - Handle dead relays (24h failures -> daily retry) - Add startup jitter to prevent thundering herd - Add NGIT_SYNC_MAX_BACKOFF_SECS config | |||
| 2025-12-04 | feat(sync): Phase 2 - multi-relay and complete filters | DanConwayDev | |
| - Add relay discovery from stored announcements - Implement FilterService with three-layer strategy - Support multiple simultaneous relay connections - Filter batching for large tag sets | |||
| 2025-12-04 | feat(sync): Phase 1 MVP - single relay proactive sync | DanConwayDev | |
| - Add src/sync/ module with SyncManager - Add NGIT_SYNC_RELAY_URL config option - Subscribe to kind 30617 on configured relay - Validate synced events through Nip34WritePolicy - Integration test with two TestRelay instances | |||
| 2025-12-04 | docs: update GRASP-02 proactive sync event sync approach | DanConwayDev | |
| 2025-12-04 | docs: add guidance to keep architecture docs updated | DanConwayDev | |
| - Added CRITICAL warning section to AGENTS.md about treating architecture docs as living documents - Mark 'Keep Architecture Docs Updated' item as fixed in grasp-01 learnings - Mark 'Document actual architecture' technical debt item as fixed This addresses a key learning from GRASP-01 where docs described plans rather than implementation, causing confusion. | |||
| 2025-12-04 | refactor: split Nip34WritePolicy into focused sub-policies | DanConwayDev | |
| Split the ~900 line Nip34WritePolicy into focused sub-policies for improved testability and maintainability: - AnnouncementPolicy - Repository announcement validation - StatePolicy - State event validation + ref alignment - PrEventPolicy - PR/PR Update validation - RelatedEventPolicy - Forward/backward reference checking The main Nip34WritePolicy now delegates to these sub-policies via a shared PolicyContext that provides domain, database, and git_data_path. Also updates: - README.md: Accurate project structure reflecting actual implementation - docs/learnings: Marks this technical debt item as complete | |||
| 2025-12-04 | add prometheus metrics | DanConwayDev | |
| 2025-12-04 | docs: add monitoring-strategy | DanConwayDev | |
| 2025-12-04 | docs: update based on current implementation | DanConwayDev | |
| 2025-12-04 | docs: add llm review of implemenation vs plan | DanConwayDev | |
| 2025-12-04 | docs: update grasp-audit docs | DanConwayDev | |
| 2025-12-04 | docs: planed GRASP-2 proactive sync of just events | DanConwayDev | |
| 2025-12-04 | add roadmap to readme | DanConwayDev | |
| 2025-12-03 | feat: accept maintainer announcements without service listing | DanConwayDev | |
| 2025-12-03 | landing page: display relay inforamtion document | DanConwayDev | |
| 2025-12-03 | landing page: pull supported nips and grasps from nip11 document | DanConwayDev | |
| 2025-12-03 | flag NIP-77 negentropy support | DanConwayDev | |
| 2025-12-03 | remove depricated audit mode label ci / production ~> isolated / shared | DanConwayDev | |
| 2025-12-03 | remove docs archive | DanConwayDev | |
| 2025-12-03 | improved settings cli flags > env vars > defaults | DanConwayDev | |
| 2025-12-03 | feat: implement LMDB database backend | DanConwayDev | |
| - Add nostr-lmdb dependency (v0.44) for persistent storage - Create SharedDatabase type alias for database abstraction - Update all database-related functions to use trait object - Support runtime selection via NGIT_DATABASE_BACKEND env var Database backends: - memory: In-memory (default, fastest, no persistence) - lmdb: LMDB backend (persistent, general purpose) All 34 tests pass with the new implementation. | |||
| 2025-12-02 | audit: fix shared test_reject_repo_announcement_missing_relays_tag test | DanConwayDev | |
| 2025-12-02 | fix: tests using gpg signer | DanConwayDev | |
| 2025-12-02 | refactor: rename AuditMode variants and change CLI default to shared | DanConwayDev | |
| Breaking change: Renamed AuditMode enum variants for clarity: - AuditMode::CI -> AuditMode::Isolated (fresh fixtures per test) - AuditMode::Production -> AuditMode::Shared (reuse fixtures across tests) Config constructors renamed (with deprecated aliases): - AuditConfig::ci() -> AuditConfig::isolated() - AuditConfig::production() -> AuditConfig::shared() CLI default changed from 'ci' to 'shared' mode, which enables fixture caching across tests. This fixes the issue where fixtures were being re-created for every test in CLI mode. Fixture caching behavior: - Shared mode (CLI default): Uses client's cache, fixtures reused - Isolated mode (for cargo test): Local cache per TestContext | |||
| 2025-12-02 | grasp-audit: show tests under GRASP-01 line | DanConwayDev | |
| 2025-12-02 | nip11 add icon | DanConwayDev | |
| 2025-12-02 | landing added light mode | DanConwayDev | |
| 2025-12-02 | landing page add commit hash to version and add curation | DanConwayDev | |
| 2025-12-02 | repo landing page - simplify | DanConwayDev | |
| 2025-12-02 | repo landing page - include powered by | DanConwayDev | |
| 2025-12-02 | refactor: fix fmt and clippy | DanConwayDev | |
| 2025-12-02 | improve repository landing page | DanConwayDev | |
| 2025-12-02 | landing page - use correct gitworkshop link | DanConwayDev | |
| 2025-12-02 | improve landing page | DanConwayDev | |
| 2025-12-02 | improve landing page copy and styles | DanConwayDev | |
| 2025-12-01 | add repo land page and 404 page per GRASP-01 | DanConwayDev | |
| 2025-12-01 | better fixtures: update readme | DanConwayDev | |
| 2025-12-01 | better fixtures: clean up | DanConwayDev | |
| 2025-12-01 | test: test_head_set_after_git_push_with_required_oids | DanConwayDev | |
| 2025-12-01 | better fixtures: test_head_set_after_state_event_with_existing_commit | DanConwayDev | |
| 2025-12-01 | better fixtures: refs/nostr tests | DanConwayDev | |
| 2025-12-01 | better fixtures: RecursiveMaintainerStateDataPushed and ↵ | DanConwayDev | |
| test_non_maintainer_state_rejected | |||
| 2025-12-01 | better fixtures: MaintainerStateDataPushed | DanConwayDev | |
| 2025-12-01 | fixtures dependancy overhaul | DanConwayDev | |
| 2025-12-01 | better fixtures: MaintainerStateDataPushed | DanConwayDev | |
| 2025-12-01 | begin implementing better fixtures | DanConwayDev | |
| 2025-12-01 | test placeholder: test_head_set_after_git_push_with_required_oids | DanConwayDev | |
| 2025-12-01 | try and add / update / delete refs on state update | DanConwayDev | |
| if we have the OIDs | |||
| 2025-12-01 | test: test_head_set_after_state_event_with_existing_commit | DanConwayDev | |
| currently failing as branch isn't pushed (we should auto create this branch as we have the ref) | |||