Commit graph

10 commits

Author SHA1 Message Date
Breadway
c10e8dc5e8 Switch to tag-pinned bread-ecosystem deps; bump version to v2.1.6
All checks were successful
Mirror to GitHub / mirror (push) Successful in 2s
release / build (push) Successful in 38s
Build and publish package / package (push) Successful in 46s
2026-07-19 03:52:39 +08:00
Breadway
59416fb273 Promote util::run to bread_utils::proc; delegate write_atomic
This crate's util::run/run_with_stdin/run_ok/Output was cited as the one
correct, timeout-guarded subprocess implementation in the ecosystem worth
sharing — it's now promoted verbatim into bread-utils and re-exported here
so every existing crate::util::{run, ...} call site (notify.rs, nm.rs,
status.rs, tailscale.rs) keeps working unchanged. write_atomic similarly
delegates to bread_utils::atomic::write_atomic (path dependency for now,
see the TODO in Cargo.toml). home_dir/command_exists/timestamp stay local
— they're breadcrumbs-specific, not duplicated elsewhere.

New worktree for this repo (none existed from tonight's earlier passes,
since breadcrumbs needed no audit fixes then).

Builds clean; all 74 unit tests + 25 CLI integration tests pass.
2026-07-17 09:35:23 +08:00
Breadway
b786060517 Stop injecting phantom core profiles into a customized profile set
All checks were successful
Mirror to GitHub / mirror (push) Successful in 2s
release / build (push) Successful in 38s
Build and publish package / package (push) Successful in 45s
ensure_core_profiles() was unconditionally backfilling home/work/away
into the in-memory config on every load, even when the user had
already defined their own profiles (e.g. Home/Away/School). This
showed up as duplicate/phantom lowercase entries in `breadcrumbs
profile list`, and downstream in breadbar and bos-settings.

Now the self-heal only fires when the profile set is completely
empty (a genuinely fresh or corrupted config), never padding an
existing customized set.
2026-07-10 13:37:41 +08:00
Breadway
941742c5b6 2.1.4: fix blank exit-node rendering, relabel for clarity
Some checks failed
Mirror to GitHub / mirror (push) Successful in 4s
Build and publish package / package (push) Successful in 1m19s
release / build (push) Failing after 52s
"(exit: , optional)" printed with nothing after the colon whenever no
Tailscale exit node was configured (the default). Now renders "none",
and relabels "exit:" to "exit node:" -- the abbreviated form read as an
exit *code* at a glance, which is what led to this being misdiagnosed
as a process-exit-code formatting bug in the first place.
2026-07-05 09:14:46 +08:00
Breadway
b8121ae00f Fix breadcrumbs.service: default.target not graphical-session.target
All checks were successful
Mirror to GitHub / mirror (push) Successful in 1s
release / build (push) Successful in 35s
Build and publish package / package (push) Successful in 44s
graphical-session.target ships RefuseManualStart=yes and BOS has no
session manager to activate it properly (the same issue worked around
for breadclipd) - breadcrumbs doesn't need a Wayland session anyway,
so default.target avoids the problem entirely.
2026-07-03 17:59:38 +08:00
Breadway
2418cb900c Add systemd --user service for the watch daemon
All checks were successful
Mirror to GitHub / mirror (push) Successful in 1s
release / build (push) Successful in 37s
Build and publish package / package (push) Successful in 1m0s
breadcrumbs had a watch subcommand meant to run continuously but no
systemd unit anywhere, so bakery installs never actually started it -
Wi-Fi profile config in bos-settings had no daemon consuming it.
2026-07-03 17:56:06 +08:00
Breadway
0fdac8e07c Add join, networks, and scan-list commands; bump to v2.1.1
All checks were successful
Mirror to GitHub / mirror (push) Successful in 3s
2026-06-24 07:04:31 +08:00
Breadway
d3c1e19ba3 Release v2.1.0: backend test seam, captive-portal detection, JSON status, robustness
Features:
- Introduce a Backend trait + System impl so flow/status/watch can be unit
  tested against a fake; add 11 connect-state-machine tests.
- Captive-portal detection: status::connectivity returns Online/Portal/Offline;
  surfaced in status, JSON, connect notes, and a dedicated watch state.
- `status --json` for bars/scripts; `profile add`/`profile remove`; detect now
  scores by number of in-range markers.

Robustness:
- Pin LC_ALL=C/LANG=C on child processes for locale-independent parsing.
- Atomic config/state writes (temp + rename); 0600 config never world-readable.
- Transient PSK file written to $XDG_RUNTIME_DIR when available.

Fixes (from prior audit):
- Feed Wi-Fi PSK to nmcli via stdin/passwd-file, never argv.
- mask() no longer panics on multi-byte passwords.
- Connectivity check requires HTTP 204 (no captive-portal false positives).
- nmcli NAME,TYPE parsing handles escaped colons.
- Strip CIDR suffix from displayed IP; PKGBUILD/Cargo version aligned (2.1.0).
2026-06-23 12:13:34 +08:00
Breadway
5939362fcc chore: bump version to 2.0.1 2026-06-11 14:21:47 +08:00
Breadway
3422c12379 Initial commit: breadcrumbs — profile-driven Wi-Fi + Tailscale state machine 2026-05-19 11:52:46 +08:00