<feed xmlns='http://www.w3.org/2005/Atom'>
<title>npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/docs/explanation/grasp-02-proactive-sync.md, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/atom?h=master</id>
<link rel='self' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/'/>
<updated>2026-02-23T14:49:30+00:00</updated>
<entry>
<title>docs: update purgatory docs to reflect announcements purgatory implementation</title>
<updated>2026-02-23T14:49:30+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-02-23T14:49:30+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/commit/?id=4848c4029fc58f6f310a2babeae1ee82a7e41656'/>
<id>urn:sha1:4848c4029fc58f6f310a2babeae1ee82a7e41656</id>
<content type='text'>
Remove the pre-implementation planning docs (announcements-purgatory-design.md
and announcements-purgatory-implementation.md) now that the feature is built.

Update the three living docs to reflect what was actually implemented:

- purgatory-design.md: expanded to cover all three purgatory stores
  (announcement, state, PR), including AnnouncementPurgatoryEntry structure,
  two-phase soft expiry lifecycle, expiry extension triggers, promotion flow,
  and updated integration points and file structure

- grasp-02-proactive-sync.md: added SyncLevel enum (Full/StateOnly) to
  RepoSyncNeeds, documented the purgatory announcement sync timer as the
  registration path for purgatory announcements, updated filter building
  to describe build_sync_level_aware_filters() and StateOnly behaviour

- grasp-02-proactive-sync-purgatory-git-data.md: expanded to cover
  announcement purgatory as a third entry type, added Timeline E showing
  soft-expiry and revival, replaced the single expiry section with separate
  hard-expiry (state/PR) and two-phase soft-expiry (announcements) sections
  with full justification for the 24-hour extended retention window
</content>
</entry>
<entry>
<title>docs: integrate rejected events index into architecture documentation</title>
<updated>2026-01-09T21:12:51+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-01-09T21:12:51+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/commit/?id=5fed2e2f32cfb15fff042a39f3ac82abe8948ca0'/>
<id>urn:sha1:5fed2e2f32cfb15fff042a39f3ac82abe8948ca0</id>
<content type='text'>
- Add rejected events index to architecture.md with two-tier system explanation
- Document NGIT_REJECTED_HOT_CACHE_DURATION_SECS and NGIT_REJECTED_COLD_INDEX_EXPIRY_SECS in configuration.md
- Add comprehensive rejected events metrics section to monitoring.md with Grafana queries and alerts
- Explain negentropy integration with rejected index in grasp-02-proactive-sync.md
- Document state event authorization defense-in-depth and rejection tracking in inline-authorization.md

This integrates information from work/rejected-events-index-summary.md into the main documentation,
ensuring architecture docs accurately reflect the implemented rejected events index system.
</content>
</entry>
<entry>
<title>refactor(sync): rename ConnectedDegraded to ConnectedHistoricSyncFailures</title>
<updated>2026-01-09T14:23:44+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-01-09T14:23:44+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/commit/?id=208ea60836cfc98857cf3359a73d8874ed5d935a'/>
<id>urn:sha1:208ea60836cfc98857cf3359a73d8874ed5d935a</id>
<content type='text'>
Resolves naming conflict with RelayHealthState::Degraded by using a more
explicit name that clearly indicates the connection status relates to
historic sync failures, not connection health degradation.

Changes:
- ConnectionStatus::ConnectedDegraded → ConnectedHistoricSyncFailures
- Updated all documentation and comments
- Updated Prometheus metric descriptions
- Metric value remains 4 for backward compatibility

This makes it clear that:
- ConnectedHistoricSyncFailures = connection lifecycle (missing historic data)
- RelayHealthState::Degraded = connection health (reliability issues)

These are orthogonal concerns - a relay can be ConnectedHistoricSyncFailures
but Healthy, or Connected but Degraded.
</content>
</entry>
<entry>
<title>feat(sync): add ConnectedDegraded status for failed historic sync</title>
<updated>2026-01-09T14:12:24+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-01-09T14:12:24+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/commit/?id=93a1684f068603b354ba3c05957a25459c73de05'/>
<id>urn:sha1:93a1684f068603b354ba3c05957a25459c73de05</id>
<content type='text'>
- Add ConnectionStatus::ConnectedDegraded (status=4 in metrics)
- Track batch failures via PendingBatch.failed field
- Track relay-level failures via RelayState.historic_sync_had_failures
- Transition to ConnectedDegraded when any batch fails during historic sync
- Add is_live_sync_active() helper for cleaner match patterns
- Update state machine diagram with ConnectedDegraded transitions
- Update metrics docs with status=4 and example queries

Fixes issue where relays with failed negentropy retries would
incorrectly transition to Connected status despite missing data.
Now operators can distinguish 'fully synced' vs 'degraded (partial data)'.
</content>
</entry>
<entry>
<title>feat(sync): add Syncing connection status to track historic sync progress</title>
<updated>2026-01-09T13:28:11+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-01-09T13:28:11+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/commit/?id=c34492069abacae67482af4c8356241958a524f7'/>
<id>urn:sha1:c34492069abacae67482af4c8356241958a524f7</id>
<content type='text'>
- Add ConnectionStatus::Syncing state between Connecting and Connected
- Track historic_sync_completed and historic_sync_completed_at in RelayState
- Auto-detect sync completion via check_and_complete_historic_sync()
- Update metrics: ngit_sync_relay_connected now shows 0-3 (disconnected/connecting/syncing/connected)
- Update Prometheus metric documentation with new status values
- Add state machine diagram showing Syncing transition
- Operators can now distinguish 'connected but catching up' vs 'fully synced'
</content>
</entry>
<entry>
<title>docs: update docs with sync and purgatory and git data sync</title>
<updated>2026-01-08T00:26:51+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2026-01-08T00:26:51+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/commit/?id=543d9e66dd44b70ed467c61635e6c8056fef8555'/>
<id>urn:sha1:543d9e66dd44b70ed467c61635e6c8056fef8555</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs: proactive sync hand written overview rewrite and AI update of rest</title>
<updated>2025-12-22T15:59:36+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2025-12-22T15:38:54+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/commit/?id=777509bb03f5233b3ef470329d23cec371baf53c'/>
<id>urn:sha1:777509bb03f5233b3ef470329d23cec371baf53c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs: sync updates to reflect changes</title>
<updated>2025-12-19T20:03:23+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2025-12-19T20:03:23+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/commit/?id=b10a6cc91dab4c3d83d62fe8cb357c78f2cd4d1e'/>
<id>urn:sha1:b10a6cc91dab4c3d83d62fe8cb357c78f2cd4d1e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs: sync add pagination updates</title>
<updated>2025-12-19T17:18:50+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2025-12-19T17:18:50+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/commit/?id=d3c5cf71620d7a767506889239fe3747be4d3876'/>
<id>urn:sha1:d3c5cf71620d7a767506889239fe3747be4d3876</id>
<content type='text'>
</content>
</entry>
<entry>
<title>sync: new connection logic</title>
<updated>2025-12-18T12:06:57+00:00</updated>
<author>
<name>DanConwayDev</name>
<email>DanConwayDev@protonmail.com</email>
</author>
<published>2025-12-18T12:06:57+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub1tkq8unhsd5jqx6ueex5lcpsgknrpquxuk44ftpjlpm3ulaake7xs76txrw/ngit-grasp-mirror/commit/?id=e98a3850b6dcd3bbd5d251896ef56199cd49dc33'/>
<id>urn:sha1:e98a3850b6dcd3bbd5d251896ef56199cd49dc33</id>
<content type='text'>
</content>
</entry>
</feed>
