Feb 12, 8-9 AM (22)
Feb 12, 9-10 AM (22)
Feb 12, 10-11 AM (46)
Feb 12, 11-12 PM (28)
Feb 12, 12-1 PM (40)
Feb 12, 1-2 PM (63)
Feb 12, 2-3 PM (80)
Feb 12, 3-4 PM (39)
Feb 12, 4-5 PM (49)
Feb 12, 5-6 PM (82)
Feb 12, 6-7 PM (32)
Feb 12, 7-8 PM (30)
Feb 12, 8-9 PM (20)
Feb 12, 9-10 PM (31)
Feb 12, 10-11 PM (50)
Feb 12, 11-12 AM (29)
Feb 13, 12-1 AM (9)
Feb 13, 1-2 AM (9)
Feb 13, 2-3 AM (15)
Feb 13, 3-4 AM (6)
Feb 13, 4-5 AM (5)
Feb 13, 5-6 AM (29)
Feb 13, 6-7 AM (34)
Feb 13, 7-8 AM (31)
Feb 13, 8-9 AM (39)
Feb 13, 9-10 AM (73)
Feb 13, 10-11 AM (73)
Feb 13, 11-12 PM (43)
Feb 13, 12-1 PM (52)
Feb 13, 1-2 PM (59)
Feb 13, 2-3 PM (49)
Feb 13, 3-4 PM (27)
Feb 13, 4-5 PM (27)
Feb 13, 5-6 PM (27)
Feb 13, 6-7 PM (28)
Feb 13, 7-8 PM (24)
Feb 13, 8-9 PM (18)
Feb 13, 9-10 PM (16)
Feb 13, 10-11 PM (28)
Feb 13, 11-12 AM (21)
Feb 14, 12-1 AM (33)
Feb 14, 1-2 AM (9)
Feb 14, 2-3 AM (12)
Feb 14, 3-4 AM (15)
Feb 14, 4-5 AM (30)
Feb 14, 5-6 AM (3)
Feb 14, 6-7 AM (0)
Feb 14, 7-8 AM (5)
Feb 14, 8-9 AM (3)
Feb 14, 9-10 AM (16)
Feb 14, 10-11 AM (17)
Feb 14, 11-12 PM (5)
Feb 14, 12-1 PM (18)
Feb 14, 1-2 PM (14)
Feb 14, 2-3 PM (11)
Feb 14, 3-4 PM (6)
Feb 14, 4-5 PM (18)
Feb 14, 5-6 PM (28)
Feb 14, 6-7 PM (16)
Feb 14, 7-8 PM (5)
Feb 14, 8-9 PM (5)
Feb 14, 9-10 PM (7)
Feb 14, 10-11 PM (23)
Feb 14, 11-12 AM (26)
Feb 15, 12-1 AM (7)
Feb 15, 1-2 AM (4)
Feb 15, 2-3 AM (7)
Feb 15, 3-4 AM (1)
Feb 15, 4-5 AM (1)
Feb 15, 5-6 AM (0)
Feb 15, 6-7 AM (2)
Feb 15, 7-8 AM (1)
Feb 15, 8-9 AM (5)
Feb 15, 9-10 AM (3)
Feb 15, 10-11 AM (2)
Feb 15, 11-12 PM (12)
Feb 15, 12-1 PM (27)
Feb 15, 1-2 PM (6)
Feb 15, 2-3 PM (9)
Feb 15, 3-4 PM (15)
Feb 15, 4-5 PM (6)
Feb 15, 5-6 PM (8)
Feb 15, 6-7 PM (3)
Feb 15, 7-8 PM (20)
Feb 15, 8-9 PM (6)
Feb 15, 9-10 PM (10)
Feb 15, 10-11 PM (21)
Feb 15, 11-12 AM (23)
Feb 16, 12-1 AM (2)
Feb 16, 1-2 AM (8)
Feb 16, 2-3 AM (15)
Feb 16, 3-4 AM (6)
Feb 16, 4-5 AM (1)
Feb 16, 5-6 AM (6)
Feb 16, 6-7 AM (2)
Feb 16, 7-8 AM (14)
Feb 16, 8-9 AM (33)
Feb 16, 9-10 AM (70)
Feb 16, 10-11 AM (52)
Feb 16, 11-12 PM (50)
Feb 16, 12-1 PM (71)
Feb 16, 1-2 PM (91)
Feb 16, 2-3 PM (64)
Feb 16, 3-4 PM (34)
Feb 16, 4-5 PM (30)
Feb 16, 5-6 PM (29)
Feb 16, 6-7 PM (24)
Feb 16, 7-8 PM (22)
Feb 16, 8-9 PM (8)
Feb 16, 9-10 PM (21)
Feb 16, 10-11 PM (31)
Feb 16, 11-12 AM (32)
Feb 17, 12-1 AM (22)
Feb 17, 1-2 AM (3)
Feb 17, 2-3 AM (8)
Feb 17, 3-4 AM (2)
Feb 17, 4-5 AM (4)
Feb 17, 5-6 AM (8)
Feb 17, 6-7 AM (7)
Feb 17, 7-8 AM (17)
Feb 17, 8-9 AM (38)
Feb 17, 9-10 AM (87)
Feb 17, 10-11 AM (36)
Feb 17, 11-12 PM (38)
Feb 17, 12-1 PM (79)
Feb 17, 1-2 PM (39)
Feb 17, 2-3 PM (50)
Feb 17, 3-4 PM (60)
Feb 17, 4-5 PM (42)
Feb 17, 5-6 PM (30)
Feb 17, 6-7 PM (19)
Feb 17, 7-8 PM (13)
Feb 17, 8-9 PM (23)
Feb 17, 9-10 PM (11)
Feb 17, 10-11 PM (59)
Feb 17, 11-12 AM (44)
Feb 18, 12-1 AM (21)
Feb 18, 1-2 AM (13)
Feb 18, 2-3 AM (16)
Feb 18, 3-4 AM (18)
Feb 18, 4-5 AM (16)
Feb 18, 5-6 AM (15)
Feb 18, 6-7 AM (19)
Feb 18, 7-8 AM (53)
Feb 18, 8-9 AM (93)
Feb 18, 9-10 AM (35)
Feb 18, 10-11 AM (36)
Feb 18, 11-12 PM (62)
Feb 18, 12-1 PM (41)
Feb 18, 1-2 PM (113)
Feb 18, 2-3 PM (61)
Feb 18, 3-4 PM (36)
Feb 18, 4-5 PM (16)
Feb 18, 5-6 PM (40)
Feb 18, 6-7 PM (30)
Feb 18, 7-8 PM (35)
Feb 18, 8-9 PM (47)
Feb 18, 9-10 PM (31)
Feb 18, 10-11 PM (44)
Feb 18, 11-12 AM (23)
Feb 19, 12-1 AM (14)
Feb 19, 1-2 AM (6)
Feb 19, 2-3 AM (6)
Feb 19, 3-4 AM (3)
Feb 19, 4-5 AM (3)
Feb 19, 5-6 AM (3)
Feb 19, 6-7 AM (14)
Feb 19, 7-8 AM (79)
Feb 19, 8-9 AM (23)
4,434 commits this week Feb 12, 2026 - Feb 19, 2026
Fix postgresql-musl: merge dev into out to eliminate dev↔lib cycle
The postgresql musl cross-build fails with:
  error: cycle detected in build of '...-postgresql-musl-17.7.drv'
  in the references of output 'dev' from output 'lib'

The lib output (shared libraries) contains baked-in references to
the dev output path, while dev naturally references lib. The
remove-references-to approach didn't resolve it (references may be
in ELF sections or .rodata that survive stripping).

Instead, merge dev into out by removing "dev" from outputs. When
"dev" is absent from outputs, $dev defaults to $out, so headers and
pkgconfig files end up in $out. Downstream packages using
postgresql.dev get postgresql.out (default output for missing output
names). This eliminates the cycle entirely.
Leios prototype: Separate tx storage from EB bodies (#1874)
### Why

The `LeiosDemoDb` previously conflated two concerns: an **EB store** and
a **tx cache**. Transaction bytes were stored denormalized — once in
`ebTxs` (per EB reference) and again in `txCache`. This required:

- A **background copy thread** (`doCacheCopy`) running every 50ms to
copy bytes from `txCache` into `ebTxs`
- Tracking state for the copy pipeline (`toCopy`, `toCopyBytesSize`,
`toCopyCount`, `cachedTxs`) in `LeiosOutstanding`
- Race handling between peer-delivered txs and the copy thread
(`beatToCopy`)
- Duplicate byte storage in the DB

We likely will re-introduce a `TxCache` component later, but the
responsibility of that component will be to expand the scope of "known
txs" and be also fed by the mempool. See also the tentative architecture
diagram in the l[eios-design
document](https://github.com/input-output-hk/ouroboros-leios/blob/main/docs/leios-design/README.md#architecture):


https://raw.githubusercontent.com/input-output-hk/ouroboros-leios/refs/heads/main/docs/leios-design/relay-leios-component-diagram.svg

### What

Normalize the schema into a clean relational model. Transaction bytes
are stored **once** in a `txs` table and JOINed at retrieval time. All
copy machinery is deleted (net **-195 lines**).

Key changes:
- **New relational schema** with `ebPoints`, `ebTxs`, and `txs` as
normalized tables
- **Removed** `txCache` table, `doCacheCopy` background thread, and all
`toCopy`/`cachedTxs` tracking from `LeiosOutstanding`
- **New `leiosDbInsertTxs`** operation that inserts txs and detects EB
completeness in one transaction, emitting `LeiosOfferBlockTxs`
notifications directly

### New Schema

```mermaid
erDiagram
    ebPoints {
        INTEGER ebSlot PK
        BLOB ebHashBytes PK
    }

    ebTxs {
        BLOB ebHashBytes PK "FK ebPoints.ebHashBytes"
        INTEGER txOffset PK
        BLOB txHashBytes "FK txs.txHashBytes"
        INTEGER txBytesSize
    }

    txs {
        BLOB txHashBytes PK
        BLOB txBytes
        INTEGER txBytesSize
    }

    ebPoints ||--o{ ebTxs : "1 EB has N tx refs"
    txs ||--o{ ebTxs : "1 tx referenced by N EBs"
```

The `ebTxs` table is resolution table representing the N:M relationship
between EBs and transactions. Transaction bytes live only in `txs` and
are retrieved via LEFT JOIN when serving peers.