Skip to main content

max / makenotwork

The syntax highlighter classifies instead of emitting HTML quasicoherent 19d7602d, the MNW half. `SyntaxHighlighter::highlight` returned a string of `<span class="keyword storage">`; it is `classify` now and returns `Vec<Vec<Lexeme>>`, one vector of classified runs per line. The classification was always happening here. What changed is that it crosses the seam as data, so the terminal and egui renderers get the same colours the browser does, and the markup is the renderer's. The scope-to-class mapping moved with it. It was seven CSS selectors in `static/style.css` matching syntect's own emitted class names, which meant this repo held half a mapping and syntect held the other half; it is `syntax_of` in `src/git/mod.rs` now, walking the scope stack from the specific end, and the stylesheet keys off what quasi-webview writes. The palette itself is unchanged and still fixed across all 31 themes. `src/quasi/widgets/code.rs` is the seam, and it is `widgets/carousel.rs`'s shape for its reason: the file view is still an Askama page, so something has to turn runs into markup, and it should be the renderer rather than a second emitter here. Its header records why the page is still a template -- all three heavy git pages sit behind two partials that eight other git templates share, so converting one means converting the eight. Two properties the tests now hold that nothing held before: the runs rejoin to the source exactly, and a file's blank lines survive. A view that dropped one would renumber every line under it. `ssh_keys.rs` renders its SHA256 fingerprint as an inline `Node::Code`, so a reader comparing one against another gets a monospace face. Plain rather than classified: nothing lexed it and nothing should. Also in this commit: the makeover 0.44 and quasi 0.99 pins, which move together because makeover-layout carries `links`.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session
https://claude.ai/code/session_01MptwXZ8k65v19rFmdGAyki
Author: Max Johnson <me@maxj.phd> · 2026-09-02 15:29 UTC
Signed with PGP, not checked
Commit: 17360d90b028becf3d8ee25b711785f518eec941
Parent: 7b59253
15 files changed, +437 insertions, -166 deletions
@@ -18,7 +18,7 @@
18 18 # `makeover-tui` is the terminal renderer, and its `theme` feature is the
19 19 # intents-to-ratatui-colours mapping. No hex value is written in this crate.
20 20 makeover = "3.0"
21 - makeover-tui = { version = "0.43", features = ["theme"] }
21 + makeover-tui = { version = "0.44", features = ["theme"] }
22 22 tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread", "time", "sync", "signal", "fs"] }
23 23 # `rustls-no-provider` rather than `rustls`: the latter is an alias for
24 24 # `__rustls-aws-lc-rs`, which links a C crypto backend. The provider is ring
M mnw-cli/Cargo.lock +20 -24
@@ -1836,7 +1836,7 @@
1836 1836
1837 1837 [[package]]
1838 1838 name = "makeover-layout"
1839 - version = "0.42.0"
1839 + version = "0.44.0"
1840 1840
1841 1841 [[package]]
1842 1842 name = "makeover-timing"
@@ -1849,7 +1849,7 @@
1849 1849
1850 1850 [[package]]
1851 1851 name = "makeover-tui"
1852 - version = "0.42.0"
1852 + version = "0.44.0"
1853 1853 dependencies = [
1854 1854 "makeover",
1855 1855 "makeover-layout",
@@ -4789,33 +4789,29 @@
4789 4789 name = "tagtree"
4790 4790 version = "0.4.1"
4791 4791
4792 - [[patch.unused]]
4793 - name = "quasi-type"
4794 - version = "0.1.3"
4795 -
4796 4792 [[patch.unused]]
4797 4793 name = "quasi-axum"
4798 - version = "0.97.0"
4794 + version = "0.99.0"
4799 4795
4800 4796 [[patch.unused]]
4801 4797 name = "quasi-basics"
4802 - version = "0.97.0"
4798 + version = "0.99.0"
4803 4799
4804 4800 [[patch.unused]]
4805 4801 name = "quasi-http"
4806 - version = "0.97.0"
4802 + version = "0.99.0"
4807 4803
4808 4804 [[patch.unused]]
4809 4805 name = "quasi-immediate"
4810 - version = "0.97.0"
4806 + version = "0.99.0"
4811 4807
4812 4808 [[patch.unused]]
4813 4809 name = "quasi-notifs"
4814 - version = "0.97.0"
4810 + version = "0.99.0"
4815 4811
4816 4812 [[patch.unused]]
4817 4813 name = "quasi-router"
4818 - version = "0.97.0"
4814 + version = "0.99.0"
4819 4815
4820 4816 [[patch.unused]]
4821 4817 name = "quasi-store"
@@ -4823,36 +4819,36 @@
4823 4819
4824 4820 [[patch.unused]]
4825 4821 name = "quasi-tauri"
4826 - version = "0.97.0"
4822 + version = "0.99.0"
4827 4823
4828 4824 [[patch.unused]]
4829 4825 name = "quasi-webview"
4830 - version = "0.97.0"
4831 -
4832 - [[patch.unused]]
4833 - name = "synckit-config"
4834 - version = "0.2.0"
4826 + version = "0.99.0"
4835 4827
4836 4828 [[patch.unused]]
4837 4829 name = "docengine"
4838 4830 version = "0.7.0"
4839 4831
4840 4832 [[patch.unused]]
4841 - name = "alloy_tui"
4842 - version = "13.0.0"
4833 + name = "quasi-type"
4834 + version = "0.1.3"
4843 4835
4844 4836 [[patch.unused]]
4845 4837 name = "makeover-build"
4846 - version = "0.64.0"
4838 + version = "0.66.0"
4847 4839
4848 4840 [[patch.unused]]
4849 4841 name = "makeover-immediate"
4850 - version = "0.43.0"
4842 + version = "0.45.0"
4851 4843
4852 4844 [[patch.unused]]
4853 4845 name = "makeover-touch"
4854 - version = "0.32.0"
4846 + version = "0.34.0"
4855 4847
4856 4848 [[patch.unused]]
4857 4849 name = "makeover-webview"
4858 - version = "0.71.0"
4850 + version = "0.73.0"
4851 +
4852 + [[patch.unused]]
4853 + name = "synckit-config"
4854 + version = "0.2.0"
@@ -15,7 +15,7 @@
15 15 # selection; `makeover-tui` is the terminal renderer, and its `theme` feature is
16 16 # the intents-to-ratatui-colours mapping. No colour is named in this crate.
17 17 makeover = "3.0"
18 - makeover-tui = { version = "0.43", features = ["theme"] }
18 + makeover-tui = { version = "0.44", features = ["theme"] }
19 19 tokio = { version = "1", features = ["full"] }
20 20 # `rustls-no-provider` rather than `rustls`: the latter is an alias for
21 21 # `__rustls-aws-lc-rs`, which links a C crypto backend. The provider is ring
@@ -2940,7 +2940,7 @@
2940 2940
2941 2941 [[package]]
2942 2942 name = "s3-storage"
2943 - version = "0.1.1"
2943 + version = "0.1.2"
2944 2944 dependencies = [
2945 2945 "aws-config",
2946 2946 "aws-sdk-s3",
@@ -4863,29 +4863,41 @@
4863 4863 source = "registry+https://github.com/rust-lang/crates.io-index"
4864 4864 checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
4865 4865
4866 + [[patch.unused]]
4867 + name = "synckit-client"
4868 + version = "0.10.0"
4869 +
4870 + [[patch.unused]]
4871 + name = "synckit-config"
4872 + version = "0.2.0"
4873 +
4874 + [[patch.unused]]
4875 + name = "quasi-type"
4876 + version = "0.1.3"
4877 +
4866 4878 [[patch.unused]]
4867 4879 name = "quasi-axum"
4868 - version = "0.56.0"
4880 + version = "0.93.0"
4869 4881
4870 4882 [[patch.unused]]
4871 4883 name = "quasi-basics"
4872 - version = "0.56.0"
4884 + version = "0.93.0"
4873 4885
4874 4886 [[patch.unused]]
4875 4887 name = "quasi-http"
4876 - version = "0.56.0"
4888 + version = "0.93.0"
4877 4889
4878 4890 [[patch.unused]]
4879 4891 name = "quasi-immediate"
4880 - version = "0.56.0"
4892 + version = "0.93.0"
4881 4893
4882 4894 [[patch.unused]]
4883 4895 name = "quasi-notifs"
4884 - version = "0.56.0"
4896 + version = "0.93.0"
4885 4897
4886 4898 [[patch.unused]]
4887 4899 name = "quasi-router"
4888 - version = "0.56.0"
4900 + version = "0.93.0"
4889 4901
4890 4902 [[patch.unused]]
4891 4903 name = "quasi-store"
@@ -4893,23 +4905,11 @@
4893 4905
4894 4906 [[patch.unused]]
4895 4907 name = "quasi-tauri"
4896 - version = "0.56.0"
4908 + version = "0.93.0"
4897 4909
4898 4910 [[patch.unused]]
4899 4911 name = "quasi-webview"
4900 - version = "0.56.0"
4901 -
4902 - [[patch.unused]]
4903 - name = "quasi-type"
4904 - version = "0.1.0"
4905 -
4906 - [[patch.unused]]
4907 - name = "synckit-client"
4908 - version = "0.9.0"
4909 -
4910 - [[patch.unused]]
4911 - name = "synckit-config"
4912 - version = "0.2.0"
4912 + version = "0.93.0"
4913 4913
4914 4914 [[patch.unused]]
4915 4915 name = "kberg"
M server/Cargo.lock +28 -28
@@ -2875,7 +2875,7 @@
2875 2875 checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
2876 2876 dependencies = [
2877 2877 "libc",
2878 - "windows-sys 0.52.0",
2878 + "windows-sys 0.61.2",
2879 2879 ]
2880 2880
2881 2881 [[package]]
@@ -3660,7 +3660,7 @@
3660 3660 checksum = "1a791e6620676a875f362f3156ed213e73ca099a09bf992c18812abe65cc37b1"
3661 3661 dependencies = [
3662 3662 "bstr",
3663 - "hashbrown 0.15.5",
3663 + "hashbrown 0.17.1",
3664 3664 ]
3665 3665
3666 3666 [[package]]
@@ -4811,7 +4811,7 @@
4811 4811 source = "registry+https://github.com/rust-lang/crates.io-index"
4812 4812 checksum = "82cb6a9f675da968c63b6208c641b9dca58fc0133ae53375736b1767b0cab8bd"
4813 4813 dependencies = [
4814 - "windows-sys 0.59.0",
4814 + "windows-sys 0.61.2",
4815 4815 ]
4816 4816
4817 4817 [[package]]
@@ -5390,9 +5390,7 @@
5390 5390
5391 5391 [[package]]
5392 5392 name = "makeover-build"
5393 - version = "0.65.0"
5394 - source = "registry+https://github.com/rust-lang/crates.io-index"
5395 - checksum = "a4118bf04192ff4fcfd4c8fa4ac7d956a1f9bb37fc204a56c9e9be4668c88491"
5393 + version = "0.66.0"
5396 5394 dependencies = [
5397 5395 "makeover",
5398 5396 "makeover-geometry",
@@ -5408,9 +5406,7 @@
5408 5406
5409 5407 [[package]]
5410 5408 name = "makeover-layout"
5411 - version = "0.43.0"
5412 - source = "registry+https://github.com/rust-lang/crates.io-index"
5413 - checksum = "c0a9124f65373683ae4320b00bf4a6198b2554ef3ad3af2806b413ac164545fa"
5409 + version = "0.44.0"
5414 5410
5415 5411 [[package]]
5416 5412 name = "makeover-timing"
@@ -5423,9 +5419,7 @@
5423 5419
5424 5420 [[package]]
5425 5421 name = "makeover-touch"
5426 - version = "0.33.0"
5427 - source = "registry+https://github.com/rust-lang/crates.io-index"
5428 - checksum = "6281006f62d84f15c8c88662056e32f2027717bdd61f29d36f7917b9a694d64a"
5422 + version = "0.34.0"
5429 5423 dependencies = [
5430 5424 "makeover-geometry",
5431 5425 "makeover-layout",
@@ -5433,9 +5427,7 @@
5433 5427
5434 5428 [[package]]
5435 5429 name = "makeover-webview"
5436 - version = "0.72.0"
5437 - source = "registry+https://github.com/rust-lang/crates.io-index"
5438 - checksum = "ae1993234ce8b39b26b326b40cf92f455dfe0656b79d96cbe012c09c982df96d"
5430 + version = "0.73.0"
5439 5431 dependencies = [
5440 5432 "makeover-geometry",
5441 5433 "makeover-layout",
@@ -5722,7 +5714,7 @@
5722 5714 source = "registry+https://github.com/rust-lang/crates.io-index"
5723 5715 checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
5724 5716 dependencies = [
5725 - "windows-sys 0.59.0",
5717 + "windows-sys 0.61.2",
5726 5718 ]
5727 5719
5728 5720 [[package]]
@@ -6636,7 +6628,7 @@
6636 6628
6637 6629 [[package]]
6638 6630 name = "quasi-axum"
6639 - version = "0.98.0"
6631 + version = "0.99.0"
6640 6632 dependencies = [
6641 6633 "axum",
6642 6634 "http 1.4.2",
@@ -6647,7 +6639,7 @@
6647 6639
6648 6640 [[package]]
6649 6641 name = "quasi-basics"
6650 - version = "0.98.0"
6642 + version = "0.99.0"
6651 6643 dependencies = [
6652 6644 "makeover-layout",
6653 6645 "quasi-router",
@@ -6655,7 +6647,7 @@
6655 6647
6656 6648 [[package]]
6657 6649 name = "quasi-http"
6658 - version = "0.98.0"
6650 + version = "0.99.0"
6659 6651 dependencies = [
6660 6652 "form_urlencoded",
6661 6653 "http 1.4.2",
@@ -6664,7 +6656,7 @@
6664 6656
6665 6657 [[package]]
6666 6658 name = "quasi-router"
6667 - version = "0.98.0"
6659 + version = "0.99.0"
6668 6660 dependencies = [
6669 6661 "makeover-layout",
6670 6662 ]
@@ -6687,7 +6679,7 @@
6687 6679
6688 6680 [[package]]
6689 6681 name = "quasi-webview"
6690 - version = "0.98.0"
6682 + version = "0.99.0"
6691 6683 dependencies = [
6692 6684 "docengine",
6693 6685 "makeover-layout",
@@ -7339,7 +7331,7 @@
7339 7331 "errno",
7340 7332 "libc",
7341 7333 "linux-raw-sys 0.12.1",
7342 - "windows-sys 0.52.0",
7334 + "windows-sys 0.61.2",
7343 7335 ]
7344 7336
7345 7337 [[package]]
@@ -7419,7 +7411,7 @@
7419 7411 "security-framework 3.7.0",
7420 7412 "security-framework-sys",
7421 7413 "webpki-root-certs",
7422 - "windows-sys 0.52.0",
7414 + "windows-sys 0.61.2",
7423 7415 ]
7424 7416
7425 7417 [[package]]
@@ -8545,7 +8537,7 @@
8545 8537 "getrandom 0.4.3",
8546 8538 "once_cell",
8547 8539 "rustix 1.1.4",
8548 - "windows-sys 0.52.0",
8540 + "windows-sys 0.61.2",
8549 8541 ]
8550 8542
8551 8543 [[package]]
@@ -9971,7 +9963,7 @@
9971 9963 source = "registry+https://github.com/rust-lang/crates.io-index"
9972 9964 checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
9973 9965 dependencies = [
9974 - "windows-sys 0.48.0",
9966 + "windows-sys 0.61.2",
9975 9967 ]
9976 9968
9977 9969 [[package]]
@@ -10781,11 +10773,11 @@
10781 10773
10782 10774 [[patch.unused]]
10783 10775 name = "quasi-immediate"
10784 - version = "0.98.0"
10776 + version = "0.99.0"
10785 10777
10786 10778 [[patch.unused]]
10787 10779 name = "quasi-notifs"
10788 - version = "0.98.0"
10780 + version = "0.99.0"
10789 10781
10790 10782 [[patch.unused]]
10791 10783 name = "quasi-store"
@@ -10793,4 +10785,12 @@
10793 10785
10794 10786 [[patch.unused]]
10795 10787 name = "quasi-tauri"
10796 - version = "0.98.0"
10788 + version = "0.99.0"
10789 +
10790 + [[patch.unused]]
10791 + name = "makeover-immediate"
10792 + version = "0.45.0"
10793 +
10794 + [[patch.unused]]
10795 + name = "makeover-tui"
10796 + version = "0.44.0"
@@ -163,29 +163,29 @@
163 163 # through quasi beside its Askama equivalent, so the cost of describing a screen
164 164 # here is measured rather than argued. Not load-bearing for any shipped route.
165 165 # See wiki look-wave-2, tier G.
166 - quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.98" }
166 + quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.99" }
167 167 # The description vocabulary quasi's screen types are built from. Pinned here
168 168 # rather than reached through quasi-router's re-export because a described
169 169 # screen names FieldKind and Tone directly; it has to track what quasi-router
170 170 # resolves or the two `layout::` paths are different crates.
171 - makeover-layout = "0.43"
171 + makeover-layout = "0.44"
172 172 # The webview renderer's field emitter, called directly by
173 173 # `quasi::rich_field` so one markdown editor's markup comes from the same
174 174 # place a whole described screen's would. Pinned here rather than reached
175 175 # through quasi-webview for makeover-layout's reason: two `form::` paths from
176 176 # two resolutions are two crates, and the `data-format="markdown"` rules in
177 177 # `static/layout.css` are generated from this one.
178 - makeover-webview = "0.72"
178 + makeover-webview = "0.73"
179 179 # For the request head the per-viewer state factory reads. axum re-exports it,
180 180 # but the factory's signature is quasi-axum's and names `http::request::Parts`.
181 181 http = "1.3.1"
182 - quasi-axum = { git = "https://makenot.work/git/max/quasi.git", version = "0.98" }
183 - quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.98" }
182 + quasi-axum = { git = "https://makenot.work/git/max/quasi.git", version = "0.99" }
183 + quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.99" }
184 184 # The first-party widget set. The carousel was proved here against three pages
185 185 # and then moved there; what is left in `quasi/widgets/carousel.rs` is the
186 186 # Askama glue. Not `makeover-basics`: a widget is an assembly of `Node`s, so it
187 187 # sits above quasi-router rather than inside the description suite.
188 - quasi-basics = { git = "https://makenot.work/git/max/quasi.git", version = "0.98" }
188 + quasi-basics = { git = "https://makenot.work/git/max/quasi.git", version = "0.99" }
189 189
190 190 # Git source browser
191 191 gix = { version = "0.86", default-features = false, features = ["blame", "mailmap", "revision", "sha1", "max-performance-safe"] }
@@ -254,7 +254,7 @@
254 254 # Emits static/geometry.css (makeover-geometry) and static/layout.css
255 255 # (makeover-webview). The same generator GO and BB run; only the output paths
256 256 # differ, since the server serves its stylesheets rather than bundling them.
257 - makeover-build = "0.65"
257 + makeover-build = "0.66"
258 258 # Read directly for the embeds' own copy of the spacing layer, which they need
259 259 # because an iframe cannot link a stylesheet. makeover-build does not re-export
260 260 # it, so the pin lives here and has to track the one makeover-build resolves.
@@ -277,7 +277,7 @@
277 277 # Written from the crate rather than copied into the repo for the reason the
278 278 # constants exist: a stale copy in a static directory is a silently dead bulk
279 279 # bar, and the version has to be the one the emitter agrees with.
280 - quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.98" }
280 + quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.99" }
281 281
282 282 [dev-dependencies]
283 283 tower = { version = "0.5.3", features = ["util"] }
@@ -6543,18 +6543,31 @@
6543 6543 border-radius: 0 0 var(--radius-control) var(--radius-control);
6544 6544 }
6545 6545
6546 - /* Syntax highlighting (syntect class-based) */
6547 - .git-file-content .source { color: var(--content); }
6548 - .git-file-content .keyword,
6549 - .git-file-content .storage { color: var(--syntax-keyword); }
6550 - .git-file-content .string { color: var(--syntax-string); }
6551 - .git-file-content .comment { color: var(--syntax-comment); font-style: italic; }
6552 - .git-file-content .constant,
6553 - .git-file-content .constant.numeric { color: var(--syntax-constant); }
6554 - .git-file-content .entity.name { color: var(--syntax-entity); }
6555 - .git-file-content .variable { color: var(--syntax-variable); }
6556 - .git-file-content .support { color: var(--syntax-support); }
6557 - .git-file-content .meta.preprocessor { color: var(--syntax-keyword); }
6546 + /* Syntax highlighting.
6547 + The class names are quasi-webview's, from `makeover_layout::Syntax::name`,
6548 + and the scope-to-class mapping is `src/git/mod.rs`'s `syntax_of` (quasi
6549 + `19d7602d`, 2026-09-02). It matched syntect's own emitted scopes until then,
6550 + which meant this file held half a mapping the server held the other half of.
6551 + The palette below it is unchanged and still fixed across all 31 themes.
6552 +
6553 + Not scoped under `.git-file-content` any more: a code node is a code node
6554 + wherever it is drawn, and a fingerprint in a table or a clone URL in a
6555 + sentence wants the same colours as a line of a file. */
6556 + .lex-keyword { color: var(--syntax-keyword); }
6557 + .lex-string { color: var(--syntax-string); }
6558 + .lex-comment { color: var(--syntax-comment); font-style: italic; }
6559 + .lex-constant { color: var(--syntax-constant); }
6560 + .lex-entity { color: var(--syntax-entity); }
6561 + .lex-variable { color: var(--syntax-variable); }
6562 + .lex-support { color: var(--syntax-support); }
6563 +
6564 + /* The element the runs sit in. `code` is quasi-webview's, and it is the whole
6565 + of what makes an inline literal read as one: a monospace face and the
6566 + whitespace kept. A block form (`<pre>`) inherits both from the browser. */
6567 + code.code {
6568 + font-family: var(--font-mono);
6569 + white-space: pre;
6570 + }
6558 6571
6559 6572 /* Commit list */
6560 6573 .git-commit-list { list-style: none; }
@@ -2375,10 +2375,38 @@
2375 2375 source = "registry+https://github.com/rust-lang/crates.io-index"
2376 2376 checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
2377 2377
2378 + [[patch.unused]]
2379 + name = "kberg"
2380 + version = "0.1.0"
2381 +
2382 + [[patch.unused]]
2383 + name = "ops-status"
2384 + version = "0.1.0"
2385 +
2386 + [[patch.unused]]
2387 + name = "painhours"
2388 + version = "0.1.0"
2389 +
2390 + [[patch.unused]]
2391 + name = "tagtree"
2392 + version = "0.4.1"
2393 +
2378 2394 [[patch.unused]]
2379 2395 name = "docengine"
2380 2396 version = "0.7.0"
2381 2397
2398 + [[patch.unused]]
2399 + name = "quasi-type"
2400 + version = "0.1.3"
2401 +
2402 + [[patch.unused]]
2403 + name = "synckit-client"
2404 + version = "0.10.0"
2405 +
2406 + [[patch.unused]]
2407 + name = "synckit-config"
2408 + version = "0.2.0"
2409 +
2382 2410 [[patch.unused]]
2383 2411 name = "quasi-axum"
2384 2412 version = "0.93.0"
@@ -2414,31 +2442,3 @@
2414 2442 [[patch.unused]]
2415 2443 name = "quasi-webview"
2416 2444 version = "0.93.0"
2417 -
2418 - [[patch.unused]]
2419 - name = "quasi-type"
2420 - version = "0.1.3"
2421 -
2422 - [[patch.unused]]
2423 - name = "kberg"
2424 - version = "0.1.0"
2425 -
2426 - [[patch.unused]]
2427 - name = "ops-status"
2428 - version = "0.1.0"
2429 -
2430 - [[patch.unused]]
2431 - name = "painhours"
2432 - version = "0.1.0"
2433 -
2434 - [[patch.unused]]
2435 - name = "tagtree"
2436 - version = "0.4.1"
2437 -
2438 - [[patch.unused]]
2439 - name = "synckit-client"
2440 - version = "0.10.0"
2441 -
2442 - [[patch.unused]]
2443 - name = "synckit-config"
2444 - version = "0.2.0"