<feed xmlns='http://www.w3.org/2005/Atom'>
<title>npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/src, branch master</title>
<subtitle>[no description]</subtitle>
<id>https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/atom?h=master</id>
<link rel='self' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/'/>
<updated>2026-05-27T12:04:00+00:00</updated>
<entry>
<title>Fix discovery: use separate client with only index relays</title>
<updated>2026-05-27T12:04:00+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-27T12:04:00+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/commit/?id=c21100ad4868cbe03124b61c411394a7ae2d078c'/>
<id>urn:sha1:c21100ad4868cbe03124b61c411394a7ae2d078c</id>
<content type='text'>
fetch_events_from requires relays in pool; use dedicated client
with only working relays and fetch_events for reliable queries.
</content>
</entry>
<entry>
<title>Fix discovery: use fetch_events_from with index_relays only</title>
<updated>2026-05-27T11:59:28+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-27T11:59:28+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/commit/?id=f5b83c28c63fa1e9a5ff5e82782967e6bb9cfa96'/>
<id>urn:sha1:f5b83c28c63fa1e9a5ff5e82782967e6bb9cfa96</id>
<content type='text'>
The nostr-sdk pool fetch_events returns empty when most relays are dead.
Target only the known-working index relays for discovery queries.
</content>
</entry>
<entry>
<title>Fix discovery: wait for relay connections, add per-npub logging, suppress relay pool spam</title>
<updated>2026-05-27T11:54:19+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-27T11:54:19+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/commit/?id=319f44139bc668a4fa59d4c4361f442b3f87b95c'/>
<id>urn:sha1:319f44139bc668a4fa59d4c4361f442b3f87b95c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix borrow checker: clone npub before move, capture secret before dropping guard</title>
<updated>2026-05-27T11:35:56+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-27T11:35:56+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/commit/?id=9869113e1eb4ba76b6b85e09c72d6ec83620d8ae'/>
<id>urn:sha1:9869113e1eb4ba76b6b85e09c72d6ec83620d8ae</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix remaining compile errors: to_secret_hex, double-Result unwrap, unused imports</title>
<updated>2026-05-27T11:34:08+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-27T11:34:08+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/commit/?id=ed07956521a0edc25cc44b73fbd267fc2763fdac'/>
<id>urn:sha1:ed07956521a0edc25cc44b73fbd267fc2763fdac</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix compile errors: enable nip04/nip46 features, fix API mismatches</title>
<updated>2026-05-27T11:29:08+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-27T11:29:08+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/commit/?id=cd7d6dd7975eff18b49665f6ebcabee78b204f76'/>
<id>urn:sha1:cd7d6dd7975eff18b49665f6ebcabee78b204f76</id>
<content type='text'>
- Cargo.toml: enable nip04 + nip46 features on nostr crate
- nip46.rs: secret_key() returns &amp;SecretKey not Result, remove ? operator
- nip46.rs: EventBuilder::new takes 2 args, use .tags() for tags
- nip46.rs: fix async block in timeout map_err
- git_mirror.rs: relay_url is a field not a method
</content>
</entry>
<entry>
<title>Fix compile issues for NIP-46 build</title>
<updated>2026-05-27T10:02:38+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-27T10:02:38+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/commit/?id=d889b890f9e63815c178853ed98a1e31f6cec7f8'/>
<id>urn:sha1:d889b890f9e63815c178853ed98a1e31f6cec7f8</id>
<content type='text'>
- nip46.rs: match on owned RelayPoolNotification (not .as_ref())
- git_mirror.rs: accept shared nostr_sdk::Client for state event publishing
- main.rs: pass nostr_client to mirror_repo_to_servers
- NIP46-PLAN.md: full implementation checklist and roadmap
- PLAN.md: updated
</content>
</entry>
<entry>
<title>Add NIP-46 remote signing for kind:30618 state events</title>
<updated>2026-05-26T16:37:55+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-26T16:37:55+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/commit/?id=d60fa03de6edae0667a93ac36be4206e76255a2c'/>
<id>urn:sha1:d60fa03de6edae0667a93ac36be4206e76255a2c</id>
<content type='text'>
- nip46.rs: full NIP-46 client with session management, NIP-04 encrypted
  relay-based communication, oneshot response awaiting
- db.rs: nip46_sessions table, upsert/get methods
- config.rs: Nip46Config with relays + signing_timeout_secs
- git_mirror.rs: builds unsigned kind:30618 state event from bare repo refs,
  signs via NIP-46 before push, publishes to target server relay
- http_health.rs: exposes NIP-46 session status in health endpoint
- main.rs: wires NIP-46 client into daemon startup, passes to mirror_cycle
</content>
</entry>
<entry>
<title>Fix push_target remote reuse and non-fatal per-repo errors</title>
<updated>2026-05-26T15:08:49+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-26T15:08:49+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/commit/?id=7b1b36b8c7e448d1d170c8c6e1f88bb766163fbb'/>
<id>urn:sha1:7b1b36b8c7e448d1d170c8c6e1f88bb766163fbb</id>
<content type='text'>
- git_mirror: reuse existing push_target remote via remote_set_url
  instead of failing on 'remote already exists' on subsequent cycles
- mirror_cycle: catch per-repo errors instead of propagating with ?
  so one failed clone doesn't abort the remaining 87 repos
- Add PLAN.md with bug tracking checklist
</content>
</entry>
<entry>
<title>Add HTTP health endpoint on /health and /api/mirror-health</title>
<updated>2026-05-26T12:31:30+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-26T12:31:30+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/grasp-mirror/commit/?id=e435f7d7b4ad4e4b1d3c21c35df5f41ffd642376'/>
<id>urn:sha1:e435f7d7b4ad4e4b1d3c21c35df5f41ffd642376</id>
<content type='text'>
- New axum-based health server on port 7335 (configurable via health_port)
- Reports status, uptime, cycle_count, last_cycle_ok as JSON
- Status is 'ok' on startup and after successful cycles, 'degraded' after failures
- Config: storage.health_port defaults to 7335
- Spawned alongside daemon loop, independent of mirror cycles
</content>
</entry>
</feed>
