Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions .github/workflows/fdroid.yml
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,12 @@ jobs:
run: uv run --directory fdroid python3 scan_apks.py repo/

- name: Seed repo icon
run: |
mkdir -p fdroid/repo/icons
cp fdroid/icons/icon.png fdroid/repo/icons/icon.png
# `fdroid update` runs with cwd=fdroid/ (via --directory) and resolves the
# default repo_icon config value ("icon.png") relative to that cwd, then
# copies it into repo/icons/ itself. It must exist at fdroid/icon.png, not
# fdroid/repo/icons/icon.png — a mismatch here silently falls back to a
# generated QR-code placeholder instead of erroring.
run: cp fdroid/icons/icon.png fdroid/icon.png

- name: Generate fdroid index
run: uv run --directory fdroid fdroid update --create-metadata --verbose
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.73.0"
".": "0.74.0"
}
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# Changelog

## [0.74.0](https://github.com/tstapler/stelekit/compare/v0.73.0...v0.74.0) (2026-08-23)


### Features

* fix paranoid-mode DB sync gap, add git commit to settings version ([b8dcae6](https://github.com/tstapler/stelekit/commit/b8dcae6069ff8377ef44c173e42f16dff061fc92))
* **sync:** shared event-driven rescan scheduler for Android and web ([8e8eff4](https://github.com/tstapler/stelekit/commit/8e8eff489070949393fa293cc0d6163d254fce11))


### Bug Fixes

* **android:** heal today-journal duplicate from warm-start Phase-1 race ([d38dd92](https://github.com/tstapler/stelekit/commit/d38dd92a68bd5e9ea8f59cd38dcf7db0e720f686))
* **db:** emit write-actor invalidation after op() completes, not before ([74afc62](https://github.com/tstapler/stelekit/commit/74afc62fd5e37357cfe73880fe1ac8b2c2ac2a0e))
* **parser:** sanitize restricted control chars instead of aborting page load ([#274](https://github.com/tstapler/stelekit/issues/274)) ([1528d06](https://github.com/tstapler/stelekit/commit/1528d06500fe52842787c367b2398000640f6fb2))
* **test:** make DiskConflictResolutionTest rename assertion deterministic ([#277](https://github.com/tstapler/stelekit/issues/277)) ([4be9651](https://github.com/tstapler/stelekit/commit/4be9651462bb38e778e509112712f7b3280dc64b))
* **test:** synchronize on coordinator events, not flow completion ([#276](https://github.com/tstapler/stelekit/issues/276)) ([c4bf074](https://github.com/tstapler/stelekit/commit/c4bf074d52b7242cf658386307a247ac54794981))

## [0.73.0](https://github.com/tstapler/stelekit/compare/v0.72.1...v0.73.0) (2026-08-18)


Expand Down
4 changes: 2 additions & 2 deletions Casks/stelekit.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Cask managed by the release workflow — do not edit sha256/version manually.
cask "stelekit" do
version "0.73.0"
sha256 "a4f120315b1c23b74829e37f69a9d9695e12655e40c9615e31ba1faf6b64ecc8"
version "0.74.0"
sha256 "dd61538232f0ed229df3bece041672503e82040c8d2d98ccf52eb8791cc0bf97"

url "https://github.com/tstapler/stelekit/releases/download/v#{version}/SteleKit-v#{version}-macos.dmg"
name "SteleKit"
Expand Down
6 changes: 3 additions & 3 deletions Formula/stelekit.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
class Stelekit < Formula
desc "Markdown-based outliner and note-taking app (Kotlin Multiplatform)"
homepage "https://github.com/tstapler/stelekit"
version "0.73.0"
version "0.74.0"

on_linux do
url "https://github.com/tstapler/stelekit/releases/download/v#{version}/SteleKit-v#{version}-linux.AppImage"
sha256 "260889f68eb6409743d8480f77ba26c3806feca355e28617da78bc4e8091c6d4"
sha256 "c23dc9df35869f5c3031a7806d4c2bea388a93fa21afeda2f9ad3f30ca0b6360"
end

on_macos do
url "https://github.com/tstapler/stelekit/releases/download/v#{version}/SteleKit-v#{version}-macos.dmg"
sha256 "a4f120315b1c23b74829e37f69a9d9695e12655e40c9615e31ba1faf6b64ecc8"
sha256 "dd61538232f0ed229df3bece041672503e82040c8d2d98ccf52eb8791cc0bf97"
end

def install
Expand Down
17 changes: 17 additions & 0 deletions benchmarks/android-history/2026-08-24_07h39m07s_c7f35a1d.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"timestamp": "2026-08-24 07:39:07 UTC",
"gitSha": "c7f35a1d",
"branch": "main",
"phase1Ms": 50,
"phase3Ms": 4218,
"pageCount": 530,
"baselineP95Ms": 9,
"phase3P95Ms": 15,
"jankFactor": 1.67,
"writes": 21,
"safDirectMs": 0,
"safProviderMs": 6,
"safPerFileMs": 0.2,
"safDirectPerFileMs": 0.0,
"safOverhead": 6.0
}
17 changes: 17 additions & 0 deletions benchmarks/android-history/2026-08-24_07h45m22s_55827713.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"timestamp": "2026-08-24 07:45:22 UTC",
"gitSha": "55827713",
"branch": "main",
"phase1Ms": 33,
"phase3Ms": 3898,
"pageCount": 530,
"baselineP95Ms": 12,
"phase3P95Ms": 12,
"jankFactor": 1.0,
"writes": 20,
"safDirectMs": 0,
"safProviderMs": 7,
"safPerFileMs": 0.23,
"safDirectPerFileMs": 0.0,
"safOverhead": 7.0
}
17 changes: 17 additions & 0 deletions benchmarks/android-history/2026-08-25_04h39m25s_1bd4d2ca.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"timestamp": "2026-08-25 04:39:25 UTC",
"gitSha": "1bd4d2ca",
"branch": "main",
"phase1Ms": 40,
"phase3Ms": 3833,
"pageCount": 530,
"baselineP95Ms": 8,
"phase3P95Ms": 15,
"jankFactor": 1.88,
"writes": 19,
"safDirectMs": 1,
"safProviderMs": 5,
"safPerFileMs": 0.17,
"safDirectPerFileMs": 0.03,
"safOverhead": 5.0
}
17 changes: 17 additions & 0 deletions benchmarks/android-history/2026-08-26_20h34m34s_1efdd771.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"timestamp": "2026-08-26 20:34:34 UTC",
"gitSha": "1efdd771",
"branch": "main",
"phase1Ms": 34,
"phase3Ms": 3784,
"pageCount": 530,
"baselineP95Ms": 9,
"phase3P95Ms": 21,
"jankFactor": 2.33,
"writes": 18,
"safDirectMs": 0,
"safProviderMs": 7,
"safPerFileMs": 0.23,
"safDirectPerFileMs": 0.0,
"safOverhead": 7.0
}
17 changes: 17 additions & 0 deletions benchmarks/android-history/2026-08-26_20h41m59s_5dbf0150.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"timestamp": "2026-08-26 20:41:59 UTC",
"gitSha": "5dbf0150",
"branch": "main",
"phase1Ms": 33,
"phase3Ms": 4048,
"pageCount": 530,
"baselineP95Ms": 8,
"phase3P95Ms": 13,
"jankFactor": 1.63,
"writes": 20,
"safDirectMs": 0,
"safProviderMs": 9,
"safPerFileMs": 0.3,
"safDirectPerFileMs": 0.0,
"safOverhead": 9.0
}
17 changes: 17 additions & 0 deletions benchmarks/android-history/2026-08-27_00h26m51s_7becc238.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"timestamp": "2026-08-27 00:26:51 UTC",
"gitSha": "7becc238",
"branch": "main",
"phase1Ms": 36,
"phase3Ms": 3674,
"pageCount": 530,
"baselineP95Ms": 7,
"phase3P95Ms": 12,
"jankFactor": 1.71,
"writes": 18,
"safDirectMs": 0,
"safProviderMs": 4,
"safPerFileMs": 0.13,
"safDirectPerFileMs": 0.0,
"safOverhead": 4.0
}
122 changes: 122 additions & 0 deletions benchmarks/history/2026-08-24_07h35m31s_c7f35a1d.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{
"timestamp": "2026-08-24 07:35:31 UTC",
"gitSha": "c7f35a1d",
"branch": "main",
"graphConfig": "xlarge",
"pageCount": 230,
"journalCount": 30,
"phase1TtiMs": 1,
"phase2Ms": 0,
"phase3Ms": 1,
"totalMs": 2,
"jankBaselineP50Ms": 1,
"jankBaselineP95Ms": 24,
"jankLoadP50Ms": -1,
"jankLoadP95Ms": -1,
"jankFactor": -0.04,
"allocHotspots": [
{
"frame": "byte[]_[k]",
"samples": 588,
"pct": 38.0
},
{
"frame": "java.lang.String_[k]",
"samples": 114,
"pct": 7.4
},
{
"frame": "int[]_[k]",
"samples": 94,
"pct": 6.1
},
{
"frame": "java.util.LinkedHashMap$Entry_[k]",
"samples": 86,
"pct": 5.6
},
{
"frame": "java.lang.Object[]_[k]",
"samples": 56,
"pct": 3.6
},
{
"frame": "java.lang.StringBuilder_[k]",
"samples": 42,
"pct": 2.7
},
{
"frame": "dev.stapler.stelekit.parsing.lexer.Token_[k]",
"samples": 35,
"pct": 2.3
},
{
"frame": "java.lang.String[]_[k]",
"samples": 33,
"pct": 2.1
},
{
"frame": "java.nio.DirectByteBuffer_[k]",
"samples": 32,
"pct": 2.1
},
{
"frame": "java.util.HashMap$Node[]_[k]",
"samples": 29,
"pct": 1.9
}
],
"cpuHotspots": [
{
"frame": "/usr/lib/x86_64-linux-gnu/libc.so.6",
"samples": 31579,
"pct": 97.4
},
{
"frame": "/tmp/sqlite-3.51.3.0-d6361724-2336-43b3-abc6-14d0d0c8d13d-libsqlitejdbc.so",
"samples": 269,
"pct": 0.8
},
{
"frame": "fsync",
"samples": 140,
"pct": 0.4
},
{
"frame": "__libc_pwrite",
"samples": 80,
"pct": 0.2
},
{
"frame": "SR_handler",
"samples": 44,
"pct": 0.1
},
{
"frame": "pthread_cond_signal",
"samples": 36,
"pct": 0.1
},
{
"frame": "pread",
"samples": 13,
"pct": 0.0
},
{
"frame": "syscall",
"samples": 8,
"pct": 0.0
},
{
"frame": "malloc",
"samples": 7,
"pct": 0.0
},
{
"frame": "dev/stapler/stelekit/util/ContentHasher.sha256_[1]",
"samples": 5,
"pct": 0.0
}
],
"queryStats": []
}
Loading
Loading