Skip to main content

max / balanced_breakfast

Adopt lint block, pin stable toolchain, cargo fmt, fix clippy Wire the shared clippy::pedantic block across all members, pin channel=stable, normalize with cargo fmt, and reach green under -D warnings: #[must_use] on builders, explicit imports over wildcard, pub(crate) for private-module items, write!/writeln! over format!-push, clone_from, let-else, borrow spawn args. Scoped #[allow]s (with reasons) for Tauri command handlers and a map_err callback. No rhai/plugin, SQL, or serde-field changes.
Co-Authored-By
Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-07-24 15:42 UTC
Signed with PGP, not checked
Commit: d7ef3a63878e11e0c3fa5ab19b6a9880358679ca
Parent: f474d91
85 files changed, +657 insertions, -596 deletions
M CONTRIBUTING.md +2 -2
@@ -108,7 +108,7 @@
108 108
109 109 **Rules:**
110 110 - Every command: `#[instrument(skip_all)]`, returns `Result<T, ApiError>`
111 - - No business logic in commands — that belongs in library crates
111 + - No business logic in commands, that belongs in library crates
112 112 - Response types use `#[serde(rename_all = "camelCase")]` for JS consumption
113 113
114 114 ## Error Types
@@ -250,7 +250,7 @@
250 250
251 251 1. Create a `.rhai` file in `plugins/` implementing the 4 required functions
252 252 2. Test it manually: add a feed with the new busser, trigger a fetch
253 - 3. The orchestrator auto-discovers plugins on startup — no Rust changes needed
253 + 3. The orchestrator auto-discovers plugins on startup, no Rust changes needed
254 254
255 255 ## When Adding Features
256 256
M Cargo.lock +65 -106
@@ -492,7 +492,7 @@
492 492
493 493 [[package]]
494 494 name = "bb-core"
495 - version = "0.3.1"
495 + version = "0.3.3"
496 496 dependencies = [
497 497 "aes-gcm",
498 498 "base64 0.22.1",
@@ -523,7 +523,7 @@
523 523
524 524 [[package]]
525 525 name = "bb-db"
526 - version = "0.3.1"
526 + version = "0.3.3"
527 527 dependencies = [
528 528 "bb-interface",
529 529 "chrono",
@@ -538,7 +538,7 @@
538 538
539 539 [[package]]
540 540 name = "bb-feed"
541 - version = "0.3.1"
541 + version = "0.3.3"
542 542 dependencies = [
543 543 "bb-db",
544 544 "bb-interface",
@@ -553,7 +553,7 @@
553 553
554 554 [[package]]
555 555 name = "bb-interface"
556 - version = "0.3.1"
556 + version = "0.3.3"
557 557 dependencies = [
558 558 "chrono",
559 559 "serde",
@@ -562,7 +562,7 @@
562 562
563 563 [[package]]
564 564 name = "bb-pdf"
565 - version = "0.3.1"
565 + version = "0.3.3"
566 566 dependencies = [
567 567 "printpdf",
568 568 "pter 0.1.1",
@@ -998,7 +998,7 @@
998 998 "bitflags 2.13.1",
999 999 "core-foundation 0.10.1",
1000 1000 "core-graphics-types",
1001 - "foreign-types 0.5.0",
1001 + "foreign-types",
1002 1002 "libc",
1003 1003 ]
1004 1004
@@ -1233,6 +1233,32 @@
1233 1233 "cmov",
1234 1234 ]
1235 1235
1236 + [[package]]
1237 + name = "curve25519-dalek"
1238 + version = "4.1.3"
1239 + source = "registry+https://github.com/rust-lang/crates.io-index"
1240 + checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be"
1241 + dependencies = [
1242 + "cfg-if",
1243 + "cpufeatures 0.2.17",
1244 + "curve25519-dalek-derive",
1245 + "fiat-crypto",
1246 + "rustc_version",
1247 + "subtle",
1248 + "zeroize",
1249 + ]
1250 +
1251 + [[package]]
1252 + name = "curve25519-dalek-derive"
1253 + version = "0.1.1"
1254 + source = "registry+https://github.com/rust-lang/crates.io-index"
1255 + checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
1256 + dependencies = [
1257 + "proc-macro2",
1258 + "quote",
1259 + "syn 2.0.114",
1260 + ]
1261 +
1236 1262 [[package]]
1237 1263 name = "darling"
1238 1264 version = "0.21.3"
@@ -1653,6 +1679,12 @@
1653 1679 "simd-adler32",
1654 1680 ]
1655 1681
1682 + [[package]]
1683 + name = "fiat-crypto"
1684 + version = "0.2.9"
1685 + source = "registry+https://github.com/rust-lang/crates.io-index"
1686 + checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"
1687 +
1656 1688 [[package]]
1657 1689 name = "field-offset"
1658 1690 version = "0.3.6"
@@ -1713,15 +1745,6 @@
1713 1745 source = "registry+https://github.com/rust-lang/crates.io-index"
1714 1746 checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
1715 1747
1716 - [[package]]
1717 - name = "foreign-types"
1718 - version = "0.3.2"
1719 - source = "registry+https://github.com/rust-lang/crates.io-index"
1720 - checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
1721 - dependencies = [
1722 - "foreign-types-shared 0.1.1",
1723 - ]
1724 -
1725 1748 [[package]]
1726 1749 name = "foreign-types"
1727 1750 version = "0.5.0"
@@ -1729,7 +1752,7 @@
1729 1752 checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
1730 1753 dependencies = [
1731 1754 "foreign-types-macros",
1732 - "foreign-types-shared 0.3.1",
1755 + "foreign-types-shared",
1733 1756 ]
1734 1757
1735 1758 [[package]]
@@ -1743,12 +1766,6 @@
1743 1766 "syn 2.0.114",
1744 1767 ]
1745 1768
1746 - [[package]]
1747 - name = "foreign-types-shared"
1748 - version = "0.1.1"
1749 - source = "registry+https://github.com/rust-lang/crates.io-index"
1750 - checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
1751 -
1752 1769 [[package]]
1753 1770 name = "foreign-types-shared"
1754 1771 version = "0.3.1"
@@ -2493,22 +2510,6 @@
2493 2510 "tower-service",
2494 2511 ]
2495 2512
2496 - [[package]]
2497 - name = "hyper-tls"
2498 - version = "0.6.0"
2499 - source = "registry+https://github.com/rust-lang/crates.io-index"
2500 - checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
2501 - dependencies = [
2502 - "bytes",
2503 - "http-body-util",
2504 - "hyper",
2505 - "hyper-util",
2506 - "native-tls",
2507 - "tokio",
2508 - "tokio-native-tls",
2509 - "tower-service",
2510 - ]
2511 -
2512 2513 [[package]]
2513 2514 name = "hyper-util"
2514 2515 version = "0.1.20"
@@ -3308,23 +3309,6 @@
3308 3309 "windows-sys 0.60.2",
3309 3310 ]
3310 3311
3311 - [[package]]
3312 - name = "native-tls"
3313 - version = "0.2.18"
3314 - source = "registry+https://github.com/rust-lang/crates.io-index"
3315 - checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2"
3316 - dependencies = [
3317 - "libc",
3318 - "log",
3319 - "openssl",
3320 - "openssl-probe",
3321 - "openssl-sys",
3322 - "schannel",
3323 - "security-framework",
3324 - "security-framework-sys",
3325 - "tempfile",
3326 - ]
3327 -
3328 3312 [[package]]
3329 3313 name = "ndk"
3330 3314 version = "0.9.0"
@@ -3750,50 +3734,12 @@
3750 3734 "pathdiff",
3751 3735 ]
3752 3736
3753 - [[package]]
3754 - name = "openssl"
3755 - version = "0.10.75"
3756 - source = "registry+https://github.com/rust-lang/crates.io-index"
3757 - checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328"
3758 - dependencies = [
3759 - "bitflags 2.13.1",
3760 - "cfg-if",
3761 - "foreign-types 0.3.2",
3762 - "libc",
3763 - "once_cell",
3764 - "openssl-macros",
3765 - "openssl-sys",
3766 - ]
3767 -
3768 - [[package]]
3769 - name = "openssl-macros"
3770 - version = "0.1.1"
3771 - source = "registry+https://github.com/rust-lang/crates.io-index"
3772 - checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
3773 - dependencies = [
3774 - "proc-macro2",
3775 - "quote",
3776 - "syn 2.0.114",
3777 - ]
3778 -
3779 3737 [[package]]
3780 3738 name = "openssl-probe"
3781 3739 version = "0.2.1"
3782 3740 source = "registry+https://github.com/rust-lang/crates.io-index"
3783 3741 checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
3784 3742
3785 - [[package]]
3786 - name = "openssl-sys"
3787 - version = "0.9.111"
3788 - source = "registry+https://github.com/rust-lang/crates.io-index"
3789 - checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321"
3790 - dependencies = [
3791 - "cc",
3792 - "libc",
3793 - "pkg-config",
3794 - "vcpkg",
3795 - ]
3796 -
3797 3743 [[package]]
3798 3744 name = "option-ext"
3799 3745 version = "0.2.0"
@@ -4680,12 +4626,10 @@
4680 4626 "http-body-util",
4681 4627 "hyper",
4682 4628 "hyper-rustls",
4683 - "hyper-tls",
4684 4629 "hyper-util",
4685 4630 "js-sys",
4686 4631 "log",
4687 4632 "mime",
4688 - "native-tls",
4689 4633 "percent-encoding",
4690 4634 "pin-project-lite",
4691 4635 "rustls",
@@ -4696,7 +4640,6 @@
4696 4640 "serde_urlencoded",
4697 4641 "sync_wrapper",
4698 4642 "tokio",
4699 - "tokio-native-tls",
4700 4643 "tokio-rustls",
4701 4644 "tokio-util",
4702 4645 "tower",
@@ -5951,6 +5894,7 @@
5951 5894 "unicode-normalization",
5952 5895 "urlencoding",
5953 5896 "uuid",
5897 + "x25519-dalek",
5954 5898 "zeroize",
5955 5899 ]
5956 5900
@@ -6613,16 +6557,6 @@
6613 6557 "syn 2.0.114",
6614 6558 ]
6615 6559
6616 - [[package]]
6617 - name = "tokio-native-tls"
6618 - version = "0.3.1"
6619 - source = "registry+https://github.com/rust-lang/crates.io-index"
6620 - checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
6621 - dependencies = [
6622 - "native-tls",
6623 - "tokio",
6624 - ]
6625 -
6626 6560 [[package]]
6627 6561 name = "tokio-rustls"
6628 6562 version = "0.26.4"
@@ -8057,6 +7991,17 @@
8057 7991 "pkg-config",
8058 7992 ]
8059 7993
7994 + [[package]]
7995 + name = "x25519-dalek"
7996 + version = "2.0.1"
7997 + source = "registry+https://github.com/rust-lang/crates.io-index"
7998 + checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277"
7999 + dependencies = [
8000 + "curve25519-dalek",
8001 + "rand_core 0.6.4",
8002 + "zeroize",
8003 + ]
8004 +
8060 8005 [[package]]
8061 8006 name = "xattr"
8062 8007 version = "1.6.1"
@@ -8226,6 +8171,20 @@
8226 8171 version = "1.8.2"
8227 8172 source = "registry+https://github.com/rust-lang/crates.io-index"
8228 8173 checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
8174 + dependencies = [
8175 + "zeroize_derive",
8176 + ]
8177 +
8178 + [[package]]
8179 + name = "zeroize_derive"
8180 + version = "1.5.0"
8181 + source = "registry+https://github.com/rust-lang/crates.io-index"
8182 + checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328"
8183 + dependencies = [
8184 + "proc-macro2",
8185 + "quote",
8186 + "syn 2.0.114",
8187 + ]
8229 8188
8230 8189 [[package]]
8231 8190 name = "zerotrie"
M Cargo.toml +32
@@ -73,3 +73,35 @@
73 73 regex = "1"
74 74 zeroize = "1"
75 75 wiremock = "0.6"
76 +
77 + [workspace.lints.rust]
78 + unused = "warn"
79 + unreachable_pub = "warn"
80 +
81 + [workspace.lints.clippy]
82 + pedantic = { level = "warn", priority = -1 }
83 + # Allow-list tuned from a measured breakdown across server/multithreaded/pter
84 + # (2026-07-22). These are the high-churn / low-signal pedantic lints; everything
85 + # else in `pedantic` stays a warning. Keep this block identical across repos.
86 + module_name_repetitions = "allow"
87 + # Doc lints. No docs-completeness push is underway.
88 + missing_errors_doc = "allow"
89 + missing_panics_doc = "allow"
90 + doc_markdown = "allow"
91 + # Numeric casts. Endemic and mostly intentional in size and byte math.
92 + cast_possible_truncation = "allow"
93 + cast_sign_loss = "allow"
94 + cast_precision_loss = "allow"
95 + cast_possible_wrap = "allow"
96 + cast_lossless = "allow"
97 + # Subjective structure and style nags. High churn, low signal.
98 + must_use_candidate = "allow"
99 + too_many_lines = "allow"
100 + struct_excessive_bools = "allow"
101 + similar_names = "allow"
102 + items_after_statements = "allow"
103 + single_match_else = "allow"
104 + # Frequent false-positives in TUI and router-heavy code.
105 + match_same_arms = "allow"
106 + unnecessary_wraps = "allow"
107 + type_complexity = "allow"
@@ -1,4 +1,4 @@
1 - // Reader-view extractor. Not a feed plugin — provides the extract(url)
1 + // Reader-view extractor. Not a feed plugin; provides the extract(url)
2 2 // function for article content. Uses the extract_article host function
3 3 // (readability algorithm). Rewrites arXiv abstract URLs to ar5iv HTML.
4 4
@@ -105,3 +105,6 @@
105 105 # readers do not own one, and enabling it pulls an HTTP client and an mDNS
106 106 # responder in for a device they will never point at.
107 107 supernote = ["dep:supernote-push"]
108 +
109 + [lints]
110 + workspace = true
@@ -28,5 +28,5 @@
28 28
29 29 fn main() {
30 30 materialize_themes();
31 - tauri_build::build()
31 + tauri_build::build();
32 32 }