Jan 14, 3-4 PM (47)
Jan 14, 4-5 PM (25)
Jan 14, 5-6 PM (47)
Jan 14, 6-7 PM (15)
Jan 14, 7-8 PM (19)
Jan 14, 8-9 PM (19)
Jan 14, 9-10 PM (12)
Jan 14, 10-11 PM (26)
Jan 14, 11-12 AM (19)
Jan 15, 12-1 AM (2)
Jan 15, 1-2 AM (4)
Jan 15, 2-3 AM (10)
Jan 15, 3-4 AM (14)
Jan 15, 4-5 AM (112)
Jan 15, 5-6 AM (5)
Jan 15, 6-7 AM (21)
Jan 15, 7-8 AM (23)
Jan 15, 8-9 AM (48)
Jan 15, 9-10 AM (27)
Jan 15, 10-11 AM (32)
Jan 15, 11-12 PM (47)
Jan 15, 12-1 PM (26)
Jan 15, 1-2 PM (29)
Jan 15, 2-3 PM (66)
Jan 15, 3-4 PM (28)
Jan 15, 4-5 PM (19)
Jan 15, 5-6 PM (12)
Jan 15, 6-7 PM (9)
Jan 15, 7-8 PM (16)
Jan 15, 8-9 PM (48)
Jan 15, 9-10 PM (7)
Jan 15, 10-11 PM (27)
Jan 15, 11-12 AM (29)
Jan 16, 12-1 AM (9)
Jan 16, 1-2 AM (1)
Jan 16, 2-3 AM (1)
Jan 16, 3-4 AM (5)
Jan 16, 4-5 AM (5)
Jan 16, 5-6 AM (3)
Jan 16, 6-7 AM (2)
Jan 16, 7-8 AM (28)
Jan 16, 8-9 AM (41)
Jan 16, 9-10 AM (25)
Jan 16, 10-11 AM (25)
Jan 16, 11-12 PM (32)
Jan 16, 12-1 PM (25)
Jan 16, 1-2 PM (51)
Jan 16, 2-3 PM (52)
Jan 16, 3-4 PM (26)
Jan 16, 4-5 PM (25)
Jan 16, 5-6 PM (20)
Jan 16, 6-7 PM (11)
Jan 16, 7-8 PM (7)
Jan 16, 8-9 PM (13)
Jan 16, 9-10 PM (8)
Jan 16, 10-11 PM (36)
Jan 16, 11-12 AM (20)
Jan 17, 12-1 AM (10)
Jan 17, 1-2 AM (3)
Jan 17, 2-3 AM (0)
Jan 17, 3-4 AM (0)
Jan 17, 4-5 AM (0)
Jan 17, 5-6 AM (0)
Jan 17, 6-7 AM (1)
Jan 17, 7-8 AM (0)
Jan 17, 8-9 AM (1)
Jan 17, 9-10 AM (0)
Jan 17, 10-11 AM (0)
Jan 17, 11-12 PM (3)
Jan 17, 12-1 PM (6)
Jan 17, 1-2 PM (2)
Jan 17, 2-3 PM (3)
Jan 17, 3-4 PM (7)
Jan 17, 4-5 PM (5)
Jan 17, 5-6 PM (1)
Jan 17, 6-7 PM (0)
Jan 17, 7-8 PM (5)
Jan 17, 8-9 PM (3)
Jan 17, 9-10 PM (6)
Jan 17, 10-11 PM (21)
Jan 17, 11-12 AM (36)
Jan 18, 12-1 AM (5)
Jan 18, 1-2 AM (2)
Jan 18, 2-3 AM (2)
Jan 18, 3-4 AM (8)
Jan 18, 4-5 AM (0)
Jan 18, 5-6 AM (1)
Jan 18, 6-7 AM (1)
Jan 18, 7-8 AM (2)
Jan 18, 8-9 AM (3)
Jan 18, 9-10 AM (1)
Jan 18, 10-11 AM (1)
Jan 18, 11-12 PM (3)
Jan 18, 12-1 PM (3)
Jan 18, 1-2 PM (3)
Jan 18, 2-3 PM (1)
Jan 18, 3-4 PM (5)
Jan 18, 4-5 PM (9)
Jan 18, 5-6 PM (4)
Jan 18, 6-7 PM (5)
Jan 18, 7-8 PM (13)
Jan 18, 8-9 PM (16)
Jan 18, 9-10 PM (12)
Jan 18, 10-11 PM (22)
Jan 18, 11-12 AM (27)
Jan 19, 12-1 AM (2)
Jan 19, 1-2 AM (10)
Jan 19, 2-3 AM (17)
Jan 19, 3-4 AM (16)
Jan 19, 4-5 AM (1)
Jan 19, 5-6 AM (4)
Jan 19, 6-7 AM (1)
Jan 19, 7-8 AM (44)
Jan 19, 8-9 AM (48)
Jan 19, 9-10 AM (27)
Jan 19, 10-11 AM (14)
Jan 19, 11-12 PM (28)
Jan 19, 12-1 PM (43)
Jan 19, 1-2 PM (38)
Jan 19, 2-3 PM (22)
Jan 19, 3-4 PM (28)
Jan 19, 4-5 PM (26)
Jan 19, 5-6 PM (13)
Jan 19, 6-7 PM (29)
Jan 19, 7-8 PM (10)
Jan 19, 8-9 PM (12)
Jan 19, 9-10 PM (10)
Jan 19, 10-11 PM (28)
Jan 19, 11-12 AM (32)
Jan 20, 12-1 AM (8)
Jan 20, 1-2 AM (11)
Jan 20, 2-3 AM (27)
Jan 20, 3-4 AM (5)
Jan 20, 4-5 AM (5)
Jan 20, 5-6 AM (0)
Jan 20, 6-7 AM (6)
Jan 20, 7-8 AM (22)
Jan 20, 8-9 AM (44)
Jan 20, 9-10 AM (37)
Jan 20, 10-11 AM (76)
Jan 20, 11-12 PM (34)
Jan 20, 12-1 PM (81)
Jan 20, 1-2 PM (71)
Jan 20, 2-3 PM (31)
Jan 20, 3-4 PM (32)
Jan 20, 4-5 PM (40)
Jan 20, 5-6 PM (36)
Jan 20, 6-7 PM (11)
Jan 20, 7-8 PM (20)
Jan 20, 8-9 PM (17)
Jan 20, 9-10 PM (16)
Jan 20, 10-11 PM (31)
Jan 20, 11-12 AM (19)
Jan 21, 12-1 AM (4)
Jan 21, 1-2 AM (5)
Jan 21, 2-3 AM (2)
Jan 21, 3-4 AM (4)
Jan 21, 4-5 AM (8)
Jan 21, 5-6 AM (3)
Jan 21, 6-7 AM (6)
Jan 21, 7-8 AM (16)
Jan 21, 8-9 AM (36)
Jan 21, 9-10 AM (58)
Jan 21, 10-11 AM (51)
Jan 21, 11-12 PM (50)
Jan 21, 12-1 PM (39)
Jan 21, 1-2 PM (32)
Jan 21, 2-3 PM (34)
Jan 21, 3-4 PM (3)
3,111 commits this week Jan 14, 2026 - Jan 21, 2026
Improve error messages for stuck Unroll type family
The previous error messages like "No instance: HasBlueprintDefinition x"
mimicked standard GHC instance resolution errors, which was misleading.
Users would search for missing instances when the actual problem was
that type families cannot be evaluated with abstract type variables.

This change:
- Replaces "No instance" wording with clearer "Cannot unroll type" message
- Lists all possible causes (abstract type, missing instance, missing Generic)
- Adds specific guidance about DefinitionsFor with polymorphic constraints
- Improves RepIsStuckError with actionable suggestions

Closes #6956
refactor: remove optional index migrations for deferred application
Removes Flyway migration files containing optional database indices that
were previously commented out. These indices will now be applied by an
external watchdog service after the node reaches the blockchain tip,
rather than during the initial sync process.

Removed migration files:
- V1.0_2500_0__search_indices.sql (6 search optimization indices)
- V1.0_500_0__rosetta_app_transaction.sql (2 transaction indices)
- V1.0_600_0__rosetta_app_withdrawal.sql (2 withdrawal indices)
- V1.0_900_0__rosetta_app_address_utxo.sql (1 address_utxo index)

Rationale:
These indices improve query performance but significantly slow down the
initial blockchain sync when applied early. By deferring their creation
until after sync completion, we achieve faster time-to-tip while still
maintaining optimal query performance once the system is operational.

The PostgreSQLIndexCreationMonitor tracks index creation progress via
pg_stat_progress_create_index, ensuring the sync status accurately
reflects the APPLYING_INDEXES stage when the watchdog applies these
indices post-sync.

Related to sync status monitoring implementation that reports three stages:
- SYNCING: Initial blockchain sync
- APPLYING_INDEXES: Tip reached, indices being created
- LIVE: Fully operational with all indices applied
feat: add database-aware sync status monitoring with index creation tracking
Introduces enhanced sync status reporting that monitors both blockchain
synchronization and database index creation progress. This ensures accurate
operational readiness reporting for load balancers and external clients.

Key changes:
- Add IndexCreationMonitor interface with PostgreSQL and H2 implementations
- PostgreSQL monitor queries pg_stat_progress_create_index system view
- H2 monitor provides NOOP implementation for development/testing
- Extract sync status logic into dedicated SyncStatusService
- Add SyncStage enum with three stages: SYNCING, APPLYING_INDEXES, LIVE
- Update NetworkServiceImpl to use new SyncStatusService

Sync status behavior:
- SYNCING: Node has not reached blockchain tip yet (synced=false)
- APPLYING_INDEXES: Node at tip but indexes being created (synced=false)
- LIVE: Fully synced with all indexes applied (synced=true)

The service reports synced=true only when both conditions are met:
1. Node reached blockchain tip (within allowed slot delta)
2. No database indexes are currently being created

This allows external watchdog services to monitor currentIndex vs targetIndex
to trigger index creation, while load balancers use the synced field to
determine when the service is ready for production traffic.
fix(core): connection name should be profile scoped (#1530)
* feat: add alias support to connection pair records and related services

* feat: enforce alias as a required field in connection pair records and related services

* test: add validation for missing identifier alias when fetching connection by id

* feat: update connection migration scripts to use alias directly and define IdentifierMetadataRecordProps type

* feat: update IdentifierMetadataRecordProps to use CreationStatus enum

* chore: update type