Skip to content

Commit b1d59c0

Browse files
Release 0.1.0: the tinkering-era restart
Version line resets to 0.x across the family while rivet itself is pre-1.0; releases accumulate from here instead of replacing each other.
1 parent fc29d4a commit b1d59c0

14 files changed

Lines changed: 225 additions & 22 deletions

File tree

‎.github/workflows/release.yml‎

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,14 @@ jobs:
6161
mv sbom.cdx.json "taskly-${VERSION}-macos-${ARCH}.sbom.cdx.json"
6262
mv THIRD_PARTY_NOTICES.txt "taskly-${VERSION}-macos-${ARCH}-THIRD_PARTY_NOTICES.txt"
6363
for f in taskly-*; do
64-
case "$f" in *.sha256) ;; *) [ -f "$f" ] || continue; [ -f "$f.sha256" ] || shasum -a 256 "$f" > "$f.sha256";; esac
64+
case "$f" in
65+
*.sha256) ;;
66+
# The sbom/notices/wixpdb bodies stay in the CI artifact only;
67+
# a sidecar without its body on the release is a dangling
68+
# reference (the 1.4.0 leftover). Checksum what we upload.
69+
*.sbom.cdx.json | *-THIRD_PARTY_NOTICES.txt | *.wixpdb) ;;
70+
*) [ -f "$f" ] || continue; [ -f "$f.sha256" ] || shasum -a 256 "$f" > "$f.sha256";;
71+
esac
6572
done
6673
- uses: actions/upload-artifact@v4
6774
with:
@@ -108,7 +115,14 @@ jobs:
108115
mv sbom.cdx.json "taskly-${VERSION}-windows-x64.sbom.cdx.json"
109116
mv THIRD_PARTY_NOTICES.txt "taskly-${VERSION}-windows-x64-THIRD_PARTY_NOTICES.txt"
110117
for f in taskly-*; do
111-
case "$f" in *.sha256) ;; *) [ -f "$f" ] || continue; [ -f "$f.sha256" ] || sha256sum "$f" > "$f.sha256";; esac
118+
case "$f" in
119+
*.sha256) ;;
120+
# The sbom/notices/wixpdb bodies stay in the CI artifact only;
121+
# a sidecar without its body on the release is a dangling
122+
# reference (the 1.4.0 leftover). Checksum what we upload.
123+
*.sbom.cdx.json | *-THIRD_PARTY_NOTICES.txt | *.wixpdb) ;;
124+
*) [ -f "$f" ] || continue; [ -f "$f.sha256" ] || sha256sum "$f" > "$f.sha256";;
125+
esac
112126
done
113127
- uses: actions/upload-artifact@v4
114128
with:
@@ -164,7 +178,13 @@ jobs:
164178
mv sbom.cdx.json "taskly-${VERSION}-linux-${ARCH}.sbom.cdx.json"
165179
mv THIRD_PARTY_NOTICES.txt "taskly-${VERSION}-linux-${ARCH}-THIRD_PARTY_NOTICES.txt"
166180
for f in taskly-*; do
167-
case "$f" in *.sha256) ;; *) [ -f "$f" ] || continue; [ -f "$f.sha256" ] || sha256sum "$f" > "$f.sha256" ;;
181+
case "$f" in
182+
*.sha256) ;;
183+
# The sbom/notices/wixpdb bodies stay in the CI artifact only;
184+
# a sidecar without its body on the release is a dangling
185+
# reference (the 1.4.0 leftover). Checksum what we upload.
186+
*.sbom.cdx.json | *-THIRD_PARTY_NOTICES.txt | *.wixpdb) ;;
187+
*) [ -f "$f" ] || continue; [ -f "$f.sha256" ] || sha256sum "$f" > "$f.sha256" ;;
168188
esac
169189
done
170190
- uses: actions/upload-artifact@v4

‎CHANGELOG.md‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,29 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.4.1] - 2026-10-10
9+
10+
### Fixed
11+
- **The installed app has no icon.** `rivet.rktd` never declared
12+
`windows-icon`/`macos-icon`, so the packaged exe carried no icon
13+
resource and the macOS bundle fell back to the generic one. The
14+
launcher icons are now generated from `assets/icon_512.png`
15+
(`assets/taskly.ico`, 7 sizes; `assets/taskly.icns`, full iconset)
16+
and declared in the project file.
17+
- **The Windows sidebar kept twitching.** Every backend snapshot — the
18+
periodic poll and each `changed` event — rebuilt the list rows even
19+
when nothing had changed, so "My lists" visibly jumped on every
20+
pass. Snapshots are now fingerprinted (stable serialization of
21+
counts + lists + tasks) and an unchanged snapshot leaves the UI
22+
untouched.
23+
- **The Windows quick-add text sat high in its box.** The 40px input's
24+
text rode the template's top-aligned content area instead of
25+
centering next to the 22px "+" button. The box now carries
26+
symmetric vertical padding (the WinUI 3 TextBox template routes
27+
both the placeholder and the typed text through the same padding)
28+
plus `VerticalContentAlignment="Center"` for templates that honor
29+
it.
30+
831
## [1.4.0] - 2026-10-10
932

1033
### Added

‎VERSION‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.4.0
1+
0.1.0

‎assets/taskly.icns‎

105 KB
Binary file not shown.

‎assets/taskly.ico‎

11.8 KB
Binary file not shown.

‎linux/GeneratedBackend.hpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace rivet_app {
1818
inline constexpr char kModuleName[] = "backend";
1919
inline constexpr char kEntryName[] = "start";
2020
inline constexpr char kDisplayName[] = "taskly";
21-
inline constexpr char kVersion[] = "1.4.0";
21+
inline constexpr char kVersion[] = "1.4.1";
2222
inline constexpr std::int64_t kBuild = 1;
2323
inline constexpr char kIdentifier[] = "app.taskly.Taskly";
2424
inline constexpr char kReleaseChannel[] = "stable";

‎macos-host/Sources/RivetHost/GeneratedBackend.swift‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public enum RivetGeneratedConfig {
77
public static let moduleName = "backend"
88
public static let entryName = "start"
99
public static let displayName = "taskly"
10-
public static let version = "1.4.0"
10+
public static let version = "1.4.1"
1111
public static let build: Int64 = 1
1212
public static let identifier = "app.taskly.Taskly"
1313
public static let releaseChannel = "stable"

‎racket/taskly/backend.rkt‎

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#lang racket/base
22

33
(require rivet/backend
4+
json
5+
racket/date
6+
racket/file
7+
racket/format
48
racket/string
59
"config.rkt"
610
"date-parser.rkt"
@@ -14,6 +18,56 @@
1418
(provide start
1519
start-stdio)
1620

21+
;; Rivet's diagnostic sink defaults to current-error-port. A Windows
22+
;; GUI-subsystem process has no console, and the embedded Chez runtime
23+
;; lazily allocates one on the first stderr write — the black console
24+
;; window users saw open before the app window, streaming RVT1 protocol
25+
;; records (on mac/Linux stderr lands in a terminal or /dev/null, so it
26+
;; never showed there). Diagnostics keep their value as JSONL appended to
27+
;; ~/.taskly/diagnostics.log instead; stderr is never touched, so no
28+
;; console is ever allocated. Rivet already swallows sink exceptions, so
29+
;; an unwritable path drops records rather than failing the backend.
30+
(define diagnostics-port (box #f))
31+
(define diagnostics-lock (make-semaphore 1))
32+
33+
(define (diagnostics-log-path)
34+
(build-path (taskly-directory) "diagnostics.log"))
35+
36+
(define (diagnostic-timestamp)
37+
;; Local ISO-8601 (no zone suffix): machine-sortable, human-readable.
38+
(define d (seconds->date (current-seconds) #f))
39+
(format "~a-~a-~aT~a:~a:~a"
40+
(date-year d)
41+
(~r (date-month d) #:min-width 2 #:pad-string "0")
42+
(~r (date-day d) #:min-width 2 #:pad-string "0")
43+
(~r (date-hour d) #:min-width 2 #:pad-string "0")
44+
(~r (date-minute d) #:min-width 2 #:pad-string "0")
45+
(~r (date-second d) #:min-width 2 #:pad-string "0")))
46+
47+
(define (taskly-diagnostic-sink record)
48+
(call-with-semaphore
49+
diagnostics-lock
50+
(lambda ()
51+
(define out
52+
(or (unbox diagnostics-port)
53+
(let ([port
54+
(begin
55+
;; The directory may not exist yet during the very first
56+
;; handshake (open_database creates it right after).
57+
(with-handlers ([exn:fail? void])
58+
(make-directory* (taskly-directory)))
59+
(open-output-file (diagnostics-log-path)
60+
#:exists 'append))])
61+
(set-box! diagnostics-port port)
62+
port)))
63+
(write-json (hash-set record 'ts (diagnostic-timestamp)) out)
64+
(newline out)
65+
(flush-output out))))
66+
67+
;; Module top level: runs on the boot thread that later invokes `start`,
68+
;; so serve-fds picks this sink up as its default.
69+
(current-rivet-diagnostic-sink taskly-diagnostic-sink)
70+
1771
(define current-service (box #f))
1872
(define-event changed)
1973

@@ -235,7 +289,10 @@
235289
;; stdin/stdout. This is deliberately only a transport alternative: the
236290
;; Taskly service and RPC surface remain identical to the embedded host.
237291
(define (start-stdio)
238-
(serve (current-input-port) (current-output-port)))
292+
(serve (current-input-port) (current-output-port)
293+
;; serve's own default sink is `void`; pass the file sink so the
294+
;; managed dev host records diagnostics like the packaged one.
295+
#:diagnostic-sink (current-rivet-diagnostic-sink)))
239296

240297
(module+ main
241298
(start-stdio))

‎racket/taskly/updater.rkt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
;; Release identity duplicated from rivet.rktd. The packaged app cannot
5555
;; read the project file at runtime, so the updater embeds these constants.
5656
;; scripts/check-release-version.sh re-checks app-version against VERSION.
57-
(define app-version "1.4.0")
57+
(define app-version "1.4.1")
5858
(define app-build 1)
5959
(define app-identifier "app.taskly.Taskly")
6060
(define app-channel 'stable)

‎rivet.rktd‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
#hasheq((name . "taskly") (display-name . "taskly") (version . "1.4.0") (build . 1) (identifier . "app.taskly.Taskly") (macos-min-version . "14.0") (windows-min-version . "10.0.19041.0") (backend . "racket/taskly/backend.rkt") (module . "backend") (entry . "start") (protocol . 1) (linux-icon . "assets/icon_512.png") (linux-formats . ("deb" "rpm" "appimage")) (resources . ("shared/i18n" "shared/emoji.json")))
1+
#hasheq((name . "taskly") (display-name . "taskly") (version . "1.4.1") (build . 1) (identifier . "app.taskly.Taskly") (macos-min-version . "14.0") (windows-min-version . "10.0.19041.0") (backend . "racket/taskly/backend.rkt") (module . "backend") (entry . "start") (protocol . 1) (windows-icon . "assets/taskly.ico") (macos-icon . "assets/taskly.icns") (linux-icon . "assets/icon_512.png") (linux-formats . ("deb" "rpm" "appimage")) (resources . ("shared/i18n" "shared/emoji.json")))

0 commit comments

Comments
 (0)