Skip to content

chore: update kura stack to latest and build on OTP 28 - #33

Merged
Taure merged 9 commits into
mainfrom
chore/latest-deps
Sep 11, 2026
Merged

Taure merged 9 commits into
mainfrom
chore/latest-deps

Conversation

@Taure

@Taure Taure commented Sep 11, 2026 •

Copy link
Copy Markdown
Contributor

Same dependency rot as widgrensit/ldf#13: the unpinned rebar3_kura plugin bundles kura 2.20 and shadows the project's kura 2.0.8 dialect at compile time. Moves chatli to the latest deps and fixes what the upgrade surfaced.

  • kura v2.0.8 -> v2.20.12, kura_postgres v0.4.2 -> v1.1.3 (minato driver, pgo gone), rebar3_kura pinned to v0.16.4, nova 0.10.2 -> 0.16.1 via relock (ranch 1.8 -> 2.2, cowboy 2.12 -> 2.18)
  • pgo dropped from app.src; suite uses chatli_uuid instead of the uuid_erl that left with pgo
  • Dockerfile base -> erlang:28.3.1.0-alpine (minato needs OTP 28)
  • chatli_multipart_plugin ported to the nova 0.16 four-argument plugin callbacks; the old shape crashed every request with undef
  • message.timestamp widened to bigint with a generated migration. Epoch milliseconds overflow int4: pgo truncated them silently, minato rejects them. The migration opts out of the unsafe-lint via safe/0 because widening is compatible with deployed code.

Verified on OTP 28.3.1: compile, xref, dialyzer, lint, fmt green; all 12 CT tests pass against Docker Postgres 17 with the demo seed applied; docker build succeeds on the new base.

🤖 Generated with Claude Code

https://claude.ai/code/session_011ePHyY6bgheH2WuHz7PUsR

Taure and others added 9 commits September 11, 2026 08:59
kura v2.0.8 -> v2.20.12, kura_postgres v0.4.2 -> v1.1.3 (minato driver),
rebar3_kura pinned to v0.16.4, nova 0.14.3 -> 0.16.1 via relock. The
unpinned rebar3_kura plugin had started bundling kura 2.20, whose
kura_dialect behaviour shadowed the project's kura 2.0.8 at compile
time. uuid_erl left with pgo; the suite uses chatli_uuid instead.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ePHyY6bgheH2WuHz7PUsR
minato requires OTP 28; the image was still built on 27.0.1.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ePHyY6bgheH2WuHz7PUsR
pre_request and post_request take Env and PluginState and return the
state; the old two-argument callbacks crashed every request with undef.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ePHyY6bgheH2WuHz7PUsR
Epoch milliseconds overflow int4. pgo truncated the value silently;
minato rejects it, which surfaced the bug. Widening is safe for the
deployed code, so the migration opts out of the lint via safe/0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ePHyY6bgheH2WuHz7PUsR
Narrowing back to integer fails on stored millisecond values and, on an
empty table, would silently reintroduce the overflow. down/0 is now a
no-op. Drops the unused kura.hrl include.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ePHyY6bgheH2WuHz7PUsR
The behaviour attribute would have caught the callback arity change at
compile time. plugin_info/0 moves to the nova 0.16 map form with real
values, the template edoc blocks go, and the pass-through clauses get
eunit coverage. Drops parse_bindings from the local config; nova 0.16
ignores it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ePHyY6bgheH2WuHz7PUsR
src/migrations was outside the erlfmt file globs, so generated
migrations were never checked.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ePHyY6bgheH2WuHz7PUsR
The builder was pinned to erlang:28.3.1.0-alpine (Alpine 3.23) while
the runtime stage floated on alpine:latest. CI now runs OTP 28.3.1 to
match .tool-versions and the image.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ePHyY6bgheH2WuHz7PUsR
Explicit exports instead of export_all so helpers no longer read as
unreachable tests, chained map matches split to avoid the mutable
variable bug, and the dead add_participant case removed - it was never
in all() and matched the chat id with an atom key.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ePHyY6bgheH2WuHz7PUsR
@Taure
Taure merged commit 0d368d5 into main Sep 11, 2026
2 checks passed
@Taure
Taure deleted the chore/latest-deps branch September 11, 2026 08:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant