Skip to content

2026.10.48

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Oct 05:37
· 40 commits to main since this release
73e3b43

Breaking

  • Performance hardening — UUIDv7 keys, partitioned history, bounded jobs, connections and streams, external PostgreSQL, load test (#236) (73e3b437)

    • docs(openspec): design and tasks for 19-performance-hardening

    • docs(openspec): external PostgreSQL support in 19-performance-hardening

    • perf(ui): scan a table's rows for column widths once per page of data

    Sizing a table's columns read every row of the page for its longest values on each
    change of columns. The longest values are now kept per page of data and per column,
    so a change of density or of shown columns no longer costs more as the list grows.

    • feat(ui): find in large tables

    The browser's find cannot see the rows a large table has not drawn. Ctrl+F (Cmd+F on a
    Mac) in a table now opens its own find, which searches every row, says how many
    matches there are, and moves between them with Enter and Shift+Enter, scrolling to and
    marking the row. Escape closes it and returns focus to the matched row.

    • perf(ui): list a user's sessions in the table

    An account's sessions are not limited and were drawn as a plain list, so a very long
    list drew every row. They are now a table that draws only the rows in view.

    • perf(db): bound database connections in count and time

    The connection pool now has 16 connections per replica (ARTEMIS_STUDIO_DB_POOL_SIZE) and a request
    that waits more than 5 s for one fails instead of queueing. Every connection starts with a 30 s
    statement timeout, a 5 s lock timeout and a 60 s idle-in-transaction timeout, and the driver sets a
    5 s connect timeout, a 15 min socket timeout and TCP keep-alive, so a stuck query or a partitioned
    network no longer holds a thread without end. The limits are set per connection, not on the server,
    so they hold on any PostgreSQL and through a session-mode pooler. Plugin pools take the same limits.
    The plugin connection budget counts Studio's 16 connections instead of 10.

    The unused spring.task.scheduling setting is removed.

    • perf(db): raise the statement timeout for long work inside its own transaction

    The audit export, the lifecycle preview and the partition maintenance of the metric and message
    index tables run with a statement timeout of up to ten minutes (SET LOCAL), in a transaction of their
    own, so the 30 s limit on every other connection stays. The message index purge now detaches and
    drops a partition in one transaction.

    • perf(db)!: ship one PostgreSQL configuration for the bundled database

    The production, HA and development compose files mount deploy/postgres/postgresql.conf read-only
    instead of each carrying its own list of server flags. It adds statement statistics
    (pg_stat_statements with compute_query_id, created on first start), lock-wait logging, an explicit
    io_method=worker, autovacuum logging, max_connections=150 and a five-minute idle-in-transaction
    backstop to the earlier tuning. deploy/postgres/postgresql.tuning.conf is removed.

Changed

  • Performance hardening — UUIDv7 keys, partitioned history, bounded jobs, connections and streams, external PostgreSQL, load test (#236) (73e3b437)

    • docs(openspec): design and tasks for 19-performance-hardening

    • docs(openspec): external PostgreSQL support in 19-performance-hardening

    • perf(ui): scan a table's rows for column widths once per page of data

    Sizing a table's columns read every row of the page for its longest values on each
    change of columns. The longest values are now kept per page of data and per column,
    so a change of density or of shown columns no longer costs more as the list grows.

    • feat(ui): find in large tables

    The browser's find cannot see the rows a large table has not drawn. Ctrl+F (Cmd+F on a
    Mac) in a table now opens its own find, which searches every row, says how many
    matches there are, and moves between them with Enter and Shift+Enter, scrolling to and
    marking the row. Escape closes it and returns focus to the matched row.

    • perf(ui): list a user's sessions in the table

    An account's sessions are not limited and were drawn as a plain list, so a very long
    list drew every row. They are now a table that draws only the rows in view.

    • perf(db): bound database connections in count and time

    The connection pool now has 16 connections per replica (ARTEMIS_STUDIO_DB_POOL_SIZE) and a request
    that waits more than 5 s for one fails instead of queueing. Every connection starts with a 30 s
    statement timeout, a 5 s lock timeout and a 60 s idle-in-transaction timeout, and the driver sets a
    5 s connect timeout, a 15 min socket timeout and TCP keep-alive, so a stuck query or a partitioned
    network no longer holds a thread without end. The limits are set per connection, not on the server,
    so they hold on any PostgreSQL and through a session-mode pooler. Plugin pools take the same limits.
    The plugin connection budget counts Studio's 16 connections instead of 10.

    The unused spring.task.scheduling setting is removed.

    • perf(db): raise the statement timeout for long work inside its own transaction

    The audit export, the lifecycle preview and the partition maintenance of the metric and message
    index tables run with a statement timeout of up to ten minutes (SET LOCAL), in a transaction of their
    own, so the 30 s limit on every other connection stays. The message index purge now detaches and
    drops a partition in one transaction.

    • perf(db)!: ship one PostgreSQL configuration for the bundled database

    The production, HA and development compose files mount deploy/postgres/postgresql.conf read-only
    instead of each carrying its own list of server flags. It adds statement statistics
    (pg_stat_statements with compute_query_id, created on first start), lock-wait logging, an explicit
    io_method=worker, autovacuum logging, max_connections=150 and a five-minute idle-in-transaction
    backstop to the earlier tuning. deploy/postgres/postgresql.tuning.conf is removed.