From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from djc.id.au (honeycomb.djc.id.au [IPv6:2403:5818:89c3::35]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by bl2.djc.id.au (Postfix) with ESMTPS id A0EDB1C2C4D for ; Tue, 21 Apr 2026 22:02:34 +1000 (AEST) Received: from out-4.smtp.github.com (out-4.smtp.github.com [192.30.252.195]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by djc.id.au (Postfix) with ESMTPS id 50F05357A74D for ; Tue, 21 Apr 2026 18:57:07 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2023; t=1776761822; bh=7WiOJ+cTrbKDXoQBmrs2kwACrz98u2gh8xscHQeZQoM=; h=Date:From:To:Subject:List-Unsubscribe:From; b=YPP5LnaNDZoQInrm96oJ1LgY0bFvHTTDzniAX2Uq9s8Rychfbdsw+LTRoFLPrr6l+ ybo+auDEgJs8+RiV0nV8mlmMEYc/I+ecuKyXFbC3svEtqIf8MuwVWegCYhBInidm2b 5Br7KXlvWUWAsIcaEIj58RLp3BvDzN6LZ9rewZwI= Received: from github.com (hubbernetes-node-14c492b.va3-iad.github.net [10.48.204.89]) by smtp.github.com (Postfix) with ESMTPA id B3AA73410CF; Tue, 21 Apr 2026 01:57:02 -0700 (PDT) Date: Tue, 21 Apr 2026 01:57:02 -0700 From: Dan Callaghan To: djc@djc.id.au, sup-commits@supmua.dev Message-ID: Subject: [sup-heliotrope/sup] efdca8: prepare for next release Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable List-Unsubscribe: X-GitHub-Recipient-Address: djc@djc.id.au,sup-commits@supmua.dev X-Auto-Response-Suppress: All X-Rspamd-Queue-Id: A0EDB1C2C4D List-Id: Branch: refs/heads/master Home: https://github.com/sup-heliotrope/sup Commit: efdca8c7195228698ccd6a4dc21debd478014e61 https://github.com/sup-heliotrope/sup/commit/efdca8c7195228698ccd6a= 4dc21debd478014e61 Author: Dan Callaghan Date: 2025-04-21 (Mon, 21 Apr 2025) Changed paths: M lib/sup/version.rb Log Message: ----------- prepare for next release Commit: aeefd695c6ebeb8c486590a49e38db466f43c3bc https://github.com/sup-heliotrope/sup/commit/aeefd695c6ebeb8c486590= a49e38db466f43c3bc Author: Dan Callaghan Date: 2025-05-03 (Sat, 03 May 2025) Changed paths: M Manifest.txt M lib/sup/draft.rb A test/integration/test_draft.rb Log Message: ----------- tests: add rudimentary coverage for drafts Commit: a2bd945dc883e8f65222e84c61a72bd3541fac70 https://github.com/sup-heliotrope/sup/commit/a2bd945dc883e8f65222e8= 4c61a72bd3541fac70 Author: Dan Callaghan Date: 2025-05-03 (Sat, 03 May 2025) Changed paths: M lib/sup/draft.rb M test/integration/test_draft.rb Log Message: ----------- fix typo in DraftManager#discard handling already deleted draft Commit: a0a496fa0fd6cbda3c9768bf0b8ad18b8f9013ce https://github.com/sup-heliotrope/sup/commit/a0a496fa0fd6cbda3c9768= bf0b8ad18b8f9013ce Author: Dan Callaghan Date: 2025-05-03 (Sat, 03 May 2025) Changed paths: M lib/sup/draft.rb M lib/sup/source.rb M test/integration/test_draft.rb Log Message: ----------- handle drafts with missing Date header Commit: ccfaadf2740009b6adeb8d70ee472c225ffe72bf https://github.com/sup-heliotrope/sup/commit/ccfaadf2740009b6adeb8d= 70ee472c225ffe72bf Author: Dan Callaghan Date: 2025-05-03 (Sat, 03 May 2025) Changed paths: M lib/sup/draft.rb M test/integration/test_draft.rb Log Message: ----------- parse drafts as individual messages, not mboxes As far as I can see they were always being written with one message per file and no From envelope (maildir style) so there is no reason to try iterating the draft as if it were an mbox. Fixes the pathological case of trying to load an empty file as a draft. Commit: 39289820a7a9573d0ca830ce0cb2881deba87aa8 https://github.com/sup-heliotrope/sup/commit/39289820a7a9573d0ca830= ce0cb2881deba87aa8 Author: Dan Callaghan Date: 2025-05-04 (Sun, 04 May 2025) Changed paths: M contrib/nix/Gemfile.lock M contrib/nix/gemset.nix M contrib/nix/ruby2.4-Gemfile.lock M contrib/nix/ruby2.4-gemset.nix M contrib/nix/ruby2.5-Gemfile.lock M contrib/nix/ruby2.5-gemset.nix M contrib/nix/ruby2.6-Gemfile.lock M contrib/nix/ruby2.6-gemset.nix M contrib/nix/ruby2.7-Gemfile.lock M contrib/nix/ruby2.7-gemset.nix M contrib/nix/ruby3.0-Gemfile.lock M contrib/nix/ruby3.0-gemset.nix M contrib/nix/ruby3.1-shell.nix M contrib/nix/ruby3.2-shell.nix M contrib/nix/ruby3.3-shell.nix M contrib/nix/ruby3.4-shell.nix Log Message: ----------- ncursesw: 1.4.11 =E2=86=92 1.4.12 Commit: beeae7c6e260d3ea5b262fac2d1096c2c8858514 https://github.com/sup-heliotrope/sup/commit/beeae7c6e260d3ea5b262f= ac2d1096c2c8858514 Author: Dan Callaghan Date: 2025-05-11 (Sun, 11 May 2025) Changed paths: M lib/sup/draft.rb Log Message: ----------- use $encoding for drafts instead of forcing UTF-8 If the user's locale charset is not UTF-8 (unlikely) let's respect that, instead of forcing drafts to always be treated as UTF-8. Commit: a927293263d4c7c48bfa925d23a648ebca0d12db https://github.com/sup-heliotrope/sup/commit/a927293263d4c7c48bfa92= 5d23a648ebca0d12db Author: Dan Callaghan Date: 2025-05-11 (Sun, 11 May 2025) Changed paths: M lib/sup/draft.rb M test/integration/test_draft.rb Log Message: ----------- assume draft charset is $encoding instead of ASCII when indexing Sup writes drafts without any Content-Type header. It assumes when sending the mail that it is text/plain with charset=3D$encoding. Assume the same when indexing the draft. Fixes #343. Commit: 0e1d70ece10efc171e5b91d101d253b1cc4db2a6 https://github.com/sup-heliotrope/sup/commit/0e1d70ece10efc171e5b91= d101d253b1cc4db2a6 Author: Dan Callaghan Date: 2025-05-18 (Sun, 18 May 2025) Changed paths: M contrib/nix/Gemfile.lock M contrib/nix/gemset.nix M contrib/nix/ruby2.4-Gemfile.lock M contrib/nix/ruby2.4-gemset.nix M contrib/nix/ruby2.5-Gemfile.lock M contrib/nix/ruby2.5-gemset.nix M contrib/nix/ruby2.6-Gemfile.lock M contrib/nix/ruby2.6-gemset.nix M contrib/nix/ruby2.7-Gemfile.lock M contrib/nix/ruby2.7-gemset.nix M contrib/nix/ruby3.0-Gemfile.lock M contrib/nix/ruby3.0-gemset.nix Log Message: ----------- ncursesw: 1.4.12 =E2=86=92 1.4.13 Commit: 861becad89df65d55ed3cbd001ab36b909154ca0 https://github.com/sup-heliotrope/sup/commit/861becad89df65d55ed3cb= d001ab36b909154ca0 Author: Dan Callaghan Date: 2025-05-18 (Sun, 18 May 2025) Changed paths: M lib/sup/modes/edit_message_mode.rb Log Message: ----------- rescue TypeError when sending mails If the user has not set the "sendmail" key in their account config, we will try to invoke Popen on nil, which is a TypeError. Showing this TypeError to the user in a flash message is not very nice, but it's still better than crashing and losing their draft. Relates to #524. Commit: 67e38b99c44d8d882d3f178095a5968a2ea54dd9 https://github.com/sup-heliotrope/sup/commit/67e38b99c44d8d882d3f17= 8095a5968a2ea54dd9 Author: Dan Callaghan Date: 2025-05-18 (Sun, 18 May 2025) Changed paths: M lib/sup/account.rb M test/test_crypto.rb M test/unit/test_edit_message_mode.rb Log Message: ----------- refuse to start if sendmail command is not configured Fixes #524. Commit: 4ab9d747ae5f52485a5393cac9435e1ac9202a83 https://github.com/sup-heliotrope/sup/commit/4ab9d747ae5f52485a5393= cac9435e1ac9202a83 Author: Dan Callaghan Date: 2025-05-18 (Sun, 18 May 2025) Changed paths: M lib/sup/account.rb Log Message: ----------- refuse to start if default account is missing from config Fixes #533. Commit: c39852484ff5dc9680edab8e9b10b9ec568b3252 https://github.com/sup-heliotrope/sup/commit/c39852484ff5dc9680edab= 8e9b10b9ec568b3252 Author: Dan Callaghan Date: 2025-10-12 (Sun, 12 Oct 2025) Changed paths: M README.md M sup.gemspec Log Message: ----------- update links to point at the new supmua.dev domain Commit: e80ea65987671aeedc0e493ba42f7c832e96870b https://github.com/sup-heliotrope/sup/commit/e80ea65987671aeedc0e49= 3ba42f7c832e96870b Author: Dan Callaghan Date: 2026-03-21 (Sat, 21 Mar 2026) Changed paths: M Manifest.txt R shell.nix Log Message: ----------- delete top-level shell.nix symlink I keep forgetting that it doesn't actually work, because nowadays nix tries to resolve the reference to gemset.nix relative to the symlink not its real path. Commit: 7580318c9d58be5a24b320c0d69a87a319292d2d https://github.com/sup-heliotrope/sup/commit/7580318c9d58be5a24b320= c0d69a87a319292d2d Author: Dan Callaghan Date: 2026-03-28 (Sat, 28 Mar 2026) Changed paths: M lib/sup.rb M test/integration/test_sup-add.rb Log Message: ----------- adjust regex for fixing old YAML tag URIs to handle SentLoader Apparently some old sources.yaml files would have a source like this: - !supmua.org,2006-10-01/Redwood/SentLoader {} The regex previously added in commit 1aac9d4388 would fail to fix up an invalid tag URI like this because of the trailing empty map. Fixes #516. Commit: beff97f84382cbcf3494ab1fd87b7b076ee0a2ca https://github.com/sup-heliotrope/sup/commit/beff97f84382cbcf3494ab= 1fd87b7b076ee0a2ca Author: Dan Callaghan Date: 2026-03-28 (Sat, 28 Mar 2026) Changed paths: M doc/wiki Log Message: ----------- update wiki submodule Deletes the obsolete sup-psych-ify-config-files(1) man page. Commit: d0b8f05c221e4005a61602481395fba1d424525e https://github.com/sup-heliotrope/sup/commit/d0b8f05c221e4005a61602= 481395fba1d424525e Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M Manifest.txt A test/dummy_buffer.rb A test/unit/test_line_cursor_mode.rb Log Message: ----------- tests: add coverage for lazy loading behaviour in LineCursorMode Commit: 55c9afceac1eda9f2a66023983ec05a55cd073a4 https://github.com/sup-heliotrope/sup/commit/55c9afceac1eda9f2a6602= 3983ec05a55cd073a4 Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M lib/sup/modes/line_cursor_mode.rb M test/unit/test_line_cursor_mode.rb Log Message: ----------- configurable hysteresis delay for loading more threads Mainly this is for the tests, to avoid needing to sprinkle a bunch of sleep 0.5 throughout them. Commit: a3d6ea4087e8493d71b2e5154a04b1fc5a85827d https://github.com/sup-heliotrope/sup/commit/a3d6ea4087e8493d71b2e5= 154a04b1fc5a85827d Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M bin/sup M lib/sup/buffer.rb M lib/sup/mode.rb M lib/sup/modes/contact_list_mode.rb M lib/sup/modes/label_search_results_mode.rb M lib/sup/modes/line_cursor_mode.rb M lib/sup/modes/search_results_mode.rb M lib/sup/modes/thread_view_mode.rb M test/unit/test_line_cursor_mode.rb Log Message: ----------- refactor LineCursorMode to handle initial load Rather than having every calling site explicitly load the initial set of threads whenever one of the subclasses of LineCursorMode is spawned, make LineCursorMode itself handle the initial load. This way, the logic for deciding how many threads to load at what time is consolidated into LineCursorMode. Commit: 4dc5f0c1fa330375b2287c1d64667a539f27b625 https://github.com/sup-heliotrope/sup/commit/4dc5f0c1fa330375b2287c= 1d64667a539f27b625 Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M lib/sup/modes/line_cursor_mode.rb M test/unit/test_line_cursor_mode.rb Log Message: ----------- simplify and fix thread loading behaviour for page-down The expected behaviour for page-down is that it scrolls the complete buffer content height, with no overlapping lines. But this would not behave correctly if you pressed page-down after spawning a thread listing, because it was initially populated with exactly the buffer content height. It meant there would never be a next page to scroll to. Change the initial load size to be the buffer content height plus 1, so that if there is more than one page of threads, pressing page-down can always scroll to the next page. Delete the different special cases trying to guess whether there are more pages of threads to load. There are many edge cases where this logic would fall over (different combinations of scroll-down and page-down) and the logic is not necessary. ThreadIndexMode already has logic to return early from its load_more callback when all threads have been loaded. Always invoke load_more callbacks when the bottom is visible. Commit: dc62829249629046dee28d2df521894346be1130 https://github.com/sup-heliotrope/sup/commit/dc62829249629046dee28d= 2df521894346be1130 Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M lib/sup/modes/line_cursor_mode.rb M test/unit/test_line_cursor_mode.rb Log Message: ----------- load more threads when jumping to the end Commit: 8044d63cdefd47b1b900c0be54038ea1e06f9665 https://github.com/sup-heliotrope/sup/commit/8044d63cdefd47b1b900c0= be54038ea1e06f9665 Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M lib/sup/modes/line_cursor_mode.rb M test/unit/test_line_cursor_mode.rb Log Message: ----------- fix cursor position handling for half-page-{up,down} Commit: e95a132c6adc9dcf2220c2e09920b0830ba789b7 https://github.com/sup-heliotrope/sup/commit/e95a132c6adc9dcf2220c2= e09920b0830ba789b7 Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M lib/sup/modes/line_cursor_mode.rb M test/unit/test_line_cursor_mode.rb Log Message: ----------- load more threads on half-page-down Similar to the page-down behaviour, if it is nearing the bottom it should try to load more threads. Commit: b49dcfe7dd25100feb88ed8aefe629fd91423a26 https://github.com/sup-heliotrope/sup/commit/b49dcfe7dd25100feb88ed= 8aefe629fd91423a26 Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M Manifest.txt A test/unit/test_index.rb Log Message: ----------- tests: add coverage for date query parsing Commit: 6bced04a5d2f68bec16d72b0ac6e5720ceb072cf https://github.com/sup-heliotrope/sup/commit/6bced04a5d2f68bec16d72= b0ac6e5720ceb072cf Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M lib/sup/index.rb Log Message: ----------- use Xapian::NumberRangeProcessor when available It was added in Xapian 1.3. Xapian::NumberValueRangeProcessor is deprecated and removed in Xapian 2.0. Relates to #627. Commit: 41afb3f131171fd680b6249d9f33313dce59a27e https://github.com/sup-heliotrope/sup/commit/41afb3f131171fd680b624= 9d9f33313dce59a27e Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M test/integration/test_draft.rb M test/integration/test_maildir.rb M test/integration/test_mbox.rb Log Message: ----------- tests: try to avoid index writing race on teardown In one run through the tests, TestMbox#teardown failed with ENOTEMPTY from rmdir. It didn't reproduce. My best guess is that Xapian was not finished writing its index updates to disk when the teardown ran. Call Index.save_index in all tests that write an index to disk, to try and avoid the race. This also requires removing the $stderr logging sink in these tests to avoid having the info message from Index.save_index mingled in with the test output. Commit: 09f987e08b028d47a15f3a18700bb497063ec49f https://github.com/sup-heliotrope/sup/commit/09f987e08b028d47a15f3a= 18700bb497063ec49f Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M lib/sup/index.rb Log Message: ----------- use Xapian commit method instead of flush It was added in Xapian 1.1. Xapian::WritableDatabase::flush is deprecated and removed in Xapian 2.0. Relates to #627. Commit: 4ac006085b555420262ca60a0b0565508727690b https://github.com/sup-heliotrope/sup/commit/4ac006085b555420262ca6= 0a0b0565508727690b Author: Dan Callaghan Date: 2026-04-05 (Sun, 05 Apr 2026) Changed paths: M .github/workflows/checks.yml Log Message: ----------- Github Actions: update actions to latest versions Commit: e5b96de0f61042ffdc73467b27baf0423e5b58a9 https://github.com/sup-heliotrope/sup/commit/e5b96de0f61042ffdc7346= 7b27baf0423e5b58a9 Author: Dan Callaghan Date: 2026-04-06 (Mon, 06 Apr 2026) Changed paths: M Manifest.txt M contrib/nix/Gemfile.lock M contrib/nix/gemset.nix A contrib/nix/ruby3.1-Gemfile.lock A contrib/nix/ruby3.1-gemset.nix M contrib/nix/ruby3.1-shell.nix A contrib/nix/ruby3.2-Gemfile.lock A contrib/nix/ruby3.2-gemset.nix M contrib/nix/ruby3.2-shell.nix M contrib/nix/ruby3.3-shell.nix M contrib/nix/ruby3.4-shell.nix Log Message: ----------- contrib/nix: bump nixpkgs This is to get ruby_4_0. ruby_3_1 and ruby_3_2 have been dropped, so pin these to their current nixpkgs commit. This also brings in gpgme 2.0.0, which broke ruby-gpgme. Bump ruby-gpgme to 2.0.26 to get the fixes: https://github.com/ueno/ruby-gpgme/pull/203 Commit: d5b5955a344fab493f4dad1798ccdcbdbfb4e1f2 https://github.com/sup-heliotrope/sup/commit/d5b5955a344fab493f4dad= 1798ccdcbdbfb4e1f2 Author: Dan Callaghan Date: 2026-04-06 (Mon, 06 Apr 2026) Changed paths: M .github/workflows/checks.yml M Manifest.txt A contrib/nix/ruby4.0-shell.nix Log Message: ----------- test against Ruby 4.0 Commit: 099412d0b5d622c320e4bca8e3c1fb0bb57cacaa https://github.com/sup-heliotrope/sup/commit/099412d0b5d622c320e4bc= a8e3c1fb0bb57cacaa Author: Dan Callaghan Date: 2026-04-06 (Mon, 06 Apr 2026) Changed paths: M .rubocop.yml M Rakefile M contrib/nix/Gemfile.lock M contrib/nix/gemset.nix Log Message: ----------- rubocop: 1.63.2 =E2=86=92 1.86.0 Skip rubocop checks on Ruby < 3.3 since these cannot get the newer rubocop and so they will not understand the .rubocop.yml changes. Commit: 2837f0614381052c77e213cf6ab23729ba84777b https://github.com/sup-heliotrope/sup/commit/2837f0614381052c77e213= cf6ab23729ba84777b Author: Dan Callaghan Date: 2026-04-06 (Mon, 06 Apr 2026) Changed paths: M contrib/nix/Gemfile.lock M contrib/nix/gemset.nix Log Message: ----------- contrib/nix: bump all gem dependencies to their latest versions Commit: 6a5717ce15cb23dbe7ddfe3db74b6f63d22034db https://github.com/sup-heliotrope/sup/commit/6a5717ce15cb23dbe7ddfe= 3db74b6f63d22034db Author: Dan Callaghan Date: 2026-04-06 (Mon, 06 Apr 2026) Changed paths: M test/unit/test_index.rb Log Message: ----------- tests: avoid leaking index writes from TestIndex Fixes a randomly occurring test failure: Finished in 5.187590s, 16.9636 runs/s, 74.4083 assertions/s. 1) Failure: TestSupSyncBackMaildir#test_it_syncs_seen_unread_flags [/home/runner/= work/sup/sup/test/integration/test_sup-sync-back-maildir.rb:36]: Expected true to not be truthy. 88 runs, 386 assertions, 1 failures, 0 errors, 0 skips Reproducible using: nix-shell contrib/nix/ruby2.6-shell.nix --run 'rake test TESTOPTS=3D-= -seed=3D29609' Bisected to commit b49dcfe7dd25100feb88ed8aefe629fd91423a26. It seems Dir.mktmpdir is aggressively reusing temp directory names(!) which in itself would be fine, since each test cleans up its temp directory in teardown. But it seems that the newly added TestIndex was leaving the Xapian database open and Xapian may write to it even after the test teardown has finished... apparently re-creating the cleaned-up temp directory in the process(!). Since we have no way to explicitly close or destroy the index, the best we can do is to explicitly flush it before removing the temp directory so that it will not try to write again later. Commit: ad657e383d6914c053b7cceff082c05c096d0245 https://github.com/sup-heliotrope/sup/commit/ad657e383d6914c053b7cc= eff082c05c096d0245 Author: Dan Callaghan Date: 2026-04-06 (Mon, 06 Apr 2026) Changed paths: M lib/sup/message_chunks.rb Log Message: ----------- delete unused Tempfile monkey-patch for Ruby < 1.8.7 Ruby 2.0+ has been required since commit cce594e35 so this is dead code. Commit: 4e23e13e705c02f9a341a04338b5b46994c01d24 https://github.com/sup-heliotrope/sup/commit/4e23e13e705c02f9a341a0= 4338b5b46994c01d24 Author: Dan Callaghan Date: 2026-04-11 (Sat, 11 Apr 2026) Changed paths: M lib/sup/contact.rb M test/fixtures/contacts.txt M test/unit/test_contact.rb Log Message: ----------- fix handling of contacts with no alias This avoids showing empty parentheses (displaying an alias which is empty string) after contacts' email addresses in ThreadViewMode. Commit: b570d0cd16c9176cebf70739fd02ddf7f84a8c06 https://github.com/sup-heliotrope/sup/commit/b570d0cd16c9176cebf707= 39fd02ddf7f84a8c06 Author: Dan Callaghan Date: 2026-04-12 (Sun, 12 Apr 2026) Changed paths: M lib/sup/rfc2047.rb M test/fixtures/rfc2047-header-encoding.eml M test/test_message.rb Log Message: ----------- fix handling of RFC2047 words containing invalid bytes after decoding Yet another bad case somehow not covered by all the tests. If the encoding is recognised, and the word is successfully decoded, but the resulting string contains an invalid byte sequence for its declared encoding, Sup would crash with ArgumentError. Only use the decoded word if the end result has a valid encoding. Commit: 3a51f318eac474952d23df057d9ae6c2dde19d50 https://github.com/sup-heliotrope/sup/commit/3a51f318eac474952d23df= 057d9ae6c2dde19d50 Author: Dan Callaghan Date: 2026-04-21 (Tue, 21 Apr 2026) Changed paths: M History.txt M lib/sup/version.rb Log Message: ----------- release 1.4 Compare: https://github.com/sup-heliotrope/sup/compare/8173db9f7bd3...3a5= 1f318eac4 To unsubscribe from these emails, change your notification settings at ht= tps://github.com/sup-heliotrope/sup/settings/notifications