Skip to content

Commit adab08f

Browse files
committed
Remove em-dashes: the rest
1 parent c39ecdc commit adab08f

24 files changed

Lines changed: 191 additions & 191 deletions

File tree

.claude/commands/execute.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Agents:
1818
whole plan. This usually results in a disaster in quality because they run out of context, they auto-compress, then
1919
the compressed agent lacks proper understanding of our values and what we're doing. So again, give them a clear scope.
2020
- Ask every agent to reflect whether they are satisfied with what they'd done. Make them ask: "Is what I've done solid
21-
AND elegant? You proud and confident about it?" If the answer is "no" to either, they should adjust, then rinse and
21+
AND elegant? You proud and confident about it?" If the answer is "no" to either, they should adjust, then rinse and
2222
repeat.
2323
- They should also see if there is something else to fix, like any latent bugs that only need 10–15 LoC changes around
2424
their part of the development. They're encouraged to fix these. Correctness and bug-free code over crystal-clean

.claude/commands/release.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ Prepare a release based on docs/guides/releasing.md.
33
1. Prerequisite: Run `gh secret list` and verify that `TAURI_SIGNING_PRIVATE_KEY` and
44
`TAURI_SIGNING_PRIVATE_KEY_PASSWORD` both exist. If either is missing, warn the user and stop.
55
2. Update @CHANGELOG.md based on git commits since last release.
6-
- Commits have title + body — read all!
6+
- Commits have title + body. Read all!
77
- You can link multiple commits for changelog items if needed.
88
- List major but non-app changes in a "Non-app" section.
9-
- **Get commit SHAs via `git log --format='%h' --abbrev=8`** — never extend a 7-char prefix from `git log --oneline`
9+
- **Get commit SHAs via `git log --format='%h' --abbrev=8`**. Never extend a 7-char prefix from `git log --oneline`
1010
by guessing the next character. The committed changelog convention is 8 chars; let git produce them. The
1111
`changelog-links` check will reject fabricated SHAs and abort the release.
1212
- **Add a `## [Unreleased]` heading** right after the format preamble (before the first versioned section), then put
1313
entries under it. The release script replaces this heading with the versioned one. The committed changelog has no
14-
`[Unreleased]` section between releases — you're creating it fresh each time.
14+
`[Unreleased]` section between releases. You're creating it fresh each time.
1515

1616
### Style: plain-sentence, dense, impact-focused
1717
- **Each entry is one sentence.** No `**Bold title:** Body.`; the headline IS the entry. Most entries land under 20
@@ -59,7 +59,7 @@ Prepare a release based on docs/guides/releasing.md.
5959

6060
> - Add friendly errors for git browser ([19d5b075](...), [af64689f](...)).
6161
62-
**Keep long when warranted** (true tentpole launches like Linux alpha many real commits, big story):
62+
**Keep long when warranted** (true tentpole launches like Linux alpha, with many real commits and a big story):
6363

6464
> - Add Linux support (alpha): volumes via /proc/mounts, file ops with reflink support, trash via FreeDesktop spec,
6565
> inotify file watching, MTP ungated, SMB via mDNS + smbclient fallback, GVFS-mounted shares as volumes, native
@@ -76,18 +76,18 @@ Prepare a release based on docs/guides/releasing.md.
7676
7. **After pushing**, confirm the self-hosted runner picked up the build:
7777
- Wait ~30 seconds, then run `gh run view <release-run-id> --json jobs` and check the `Build (...)` jobs.
7878
- At least one `Build (...)` job should be `in_progress` (the self-hosted runner serializes the three matrix jobs, so
79-
the others stay `queued` — that's normal).
79+
the others stay `queued`, which is normal).
8080
- **If all three are still `queued` after ~30s, the self-hosted runner is down.** Confirm with
8181
`launchctl list | grep cmdr` and look for `actions.runner.vdavid-cmdr.*`. Restart with
8282
`cd ~/actions-runner-cmdr && ./svc.sh start` (fall back to `launchctl bootout` + `bootstrap` if `svc.sh` errors
8383
with "Load failed: 5: Input/output error"). Re-check after another 30 s. The queued jobs pick up automatically once
84-
the runner reports in — no need to re-trigger or re-tag.
84+
the runner reports in. No need to re-trigger or re-tag.
8585
8. **Then arm `caffeinate`** to prevent the Mac from sleeping during the build. The self-hosted runner lives on this
86-
Mac; any sleep display or system drops the runner connection and fails every in-flight matrix job with
86+
Mac; any sleep (display or system) drops the runner connection and fails every in-flight matrix job with
8787
`The self-hosted runner lost communication with the server`. See `docs/guides/releasing.md` § "Keep the Mac awake
8888
during the build".
8989
- Run `caffeinate -dimsu` as a Bash `run_in_background` call. Capture the background task id so you can stop it.
90-
- Disarm it once the release workflow reports `completed` (success or failure not just when the matrix is done).
90+
- Disarm it once the release workflow reports `completed` (success or failure, not just when the matrix is done).
9191
- If the user requests a re-run of failed jobs, re-arm caffeinate first.
9292
9. **Monitor the CI build**:
9393
- Remind the user not to close their laptop for ~15 minutes while the self-hosted runner builds.
@@ -97,14 +97,14 @@ Prepare a release based on docs/guides/releasing.md.
9797
fix.
9898
- Suggest the user to also track the build at https://github.com/vdavid/cmdr/actions.
9999
10. **In parallel, watch the standalone CI run** (the non-release `CI` workflow that fires on the same push):
100-
- It's not a blocker for the release. If it goes red, fix it in the background while the release builds — small
100+
- It's not a blocker for the release. If it goes red, fix it in the background while the release builds. Small
101101
things like lint regressions are common.
102102
- Surface the failure to the user when convenient; don't interrupt release-build progress reporting for it.
103103
11. **After the release run succeeds, verify the public surface**:
104-
- `gh release view vX.Y.Z --json assets,tagName,publishedAt` confirm the expected DMGs are attached
104+
- `gh release view vX.Y.Z --json assets,tagName,publishedAt`: confirm the expected DMGs are attached
105105
(`Cmdr_X.Y.Z_aarch64.dmg`, `_x64.dmg`, `_universal.dmg`) and sizes look reasonable.
106106
- Wait ~30 seconds for the website auto-deploy (the release workflow commits an updated `latest.json` and fires a
107107
webhook), then `curl -s https://getcmdr.com/latest.json | jq -r .version` and confirm it matches `X.Y.Z`.
108108
- If `latest.json` still shows the old version after ~2 minutes, the deploy webhook may have failed silently. Tell
109109
the user; the manual fix is to re-trigger the website-deploy workflow via `workflow_dispatch` from the Actions
110-
tab. Don't block release success on this — the GitHub Release is what users actually download.
110+
tab. Don't block release success on this. The GitHub Release is what users actually download.

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
7878
- name: Detach stale Cmdr* DMG mounts
7979
# tauri-action's bundle_dmg.sh fails fast (~3 s) when the "Cmdr" volume name is already
80-
# taken in /Volumes (typically from a previous Finder double-click on an old DMG
80+
# taken in /Volumes (typically from a previous Finder double-click on an old DMG;
8181
# the self-hosted runner shares /Volumes with the dev's interactive session). Detach any
8282
# leftovers so the new bundle gets the canonical volume name. scripts/release.sh has the
8383
# same guard pre-tag-push, but this catches mounts that appear AFTER the tag push.

apps/desktop/scripts/e2e-linux.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ SMB_E2E_SERVICES=(smb-consumer-guest smb-consumer-auth smb-consumer-50shares smb
262262

263263
# probe_smb_ports returns 0 if every required service's published port 445
264264
# accepts TCP within $1 seconds, otherwise 1. NEVER replace this with a
265-
# blanket `sleep N` see apps/desktop/test/CLAUDE.md "Testing principles".
265+
# blanket `sleep N`; see apps/desktop/test/CLAUDE.md "Testing principles".
266266
probe_smb_ports() {
267267
local timeout="${1:-10}"
268268
local deadline=$((SECONDS + timeout))
@@ -292,7 +292,7 @@ start_smb_containers() {
292292
# the other two fail with "Cannot reach smb-consumer-50shares".
293293
#
294294
# ALSO: "running" per `docker compose ps` only means the container is
295-
# alive smbd inside may be hung, OOM-killed, or still loading. We always
295+
# alive; smbd inside may be hung, OOM-killed, or still loading. We always
296296
# follow the running-check with an active TCP probe; if it fails, we
297297
# restart the SMB stack rather than letting the E2E run hit "Cannot reach"
298298
# errors mid-test. See the case study in
@@ -308,11 +308,11 @@ start_smb_containers() {
308308
done
309309

310310
if $all_running; then
311-
log_info "SMB containers already running verifying smbd reachability..."
311+
log_info "SMB containers already running; verifying smbd reachability..."
312312
if probe_smb_ports 10; then
313313
log_info "SMB containers healthy"
314314
else
315-
log_warn "SMB containers running but not serving restarting"
315+
log_warn "SMB containers running but not serving; restarting"
316316
docker compose -p smb-consumer down > /dev/null 2>&1 || true
317317
"$SMB_SERVERS_DIR/start.sh" e2e
318318
fi
@@ -337,7 +337,7 @@ start_smb_containers() {
337337
if probe_smb_ports 30; then
338338
log_info "SMB e2e stack ready: all 4 containers accepting TCP on :445"
339339
else
340-
log_error "SMB e2e stack NOT ready after restart aborting before tests"
340+
log_error "SMB e2e stack NOT ready after restart; aborting before tests"
341341
docker compose -p smb-consumer ps
342342
for service in "${SMB_E2E_SERVICES[@]}"; do
343343
log_warn "--- last 30 lines of $service log ---"
@@ -475,7 +475,7 @@ else
475475
if probe_smb_ports 5; then
476476
log_info "SMB post-flight: all 4 containers still accepting TCP on :445"
477477
else
478-
log_warn "SMB post-flight: at least one container is no longer accepting TCP likely died mid-run"
478+
log_warn "SMB post-flight: at least one container is no longer accepting TCP, likely died mid-run"
479479
for service in "${SMB_E2E_SERVICES[@]}"; do
480480
state=$(docker compose -p smb-consumer ps --format '{{.State}} {{.Status}}' "$service" 2>/dev/null | head -1)
481481
log_warn " $service: ${state:-unknown}"

apps/desktop/src-tauri/src/commands/rename.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ fn check_macos_flags(path: &Path) -> Result<(), String> {
253253
// SAFETY: c_path is valid, stat is a valid pointer
254254
let result = unsafe { libc::lstat(c_path.as_ptr(), stat.as_mut_ptr()) };
255255
if result != 0 {
256-
// Can't stat file may have been deleted, let the rename itself fail with a clear error
256+
// Can't stat; file may have been deleted, let the rename itself fail with a clear error
257257
return Ok(());
258258
}
259259

@@ -409,7 +409,7 @@ async fn check_sibling_conflict_via_volume(volume_id: &str, new_path: &Path) ->
409409

410410
let entry = match volume.get_metadata(new_path).await {
411411
Ok(e) => e,
412-
Err(_) => return (false, None), // No conflict file doesn't exist
412+
Err(_) => return (false, None), // No conflict: file doesn't exist
413413
};
414414

415415
let conflict = ConflictFileInfo {
@@ -456,7 +456,7 @@ mod tests {
456456
async fn test_check_rename_permission_nonexistent() {
457457
let result = check_rename_permission("/nonexistent_12345/file.txt".to_string()).await;
458458
assert!(result.is_err());
459-
// allowed-error-string-match: IpcError is a flat struct with no typed variants message content is the only signal
459+
// allowed-error-string-match: IpcError is a flat struct with no typed variants; message content is the only signal
460460
assert!(result.unwrap_err().message.contains("doesn't exist"));
461461
}
462462

@@ -580,7 +580,7 @@ mod tests {
580580
)
581581
.await;
582582
assert!(result.is_err());
583-
// allowed-error-string-match: IpcError is a flat struct with no typed variants message content is the only signal
583+
// allowed-error-string-match: IpcError is a flat struct with no typed variants; message content is the only signal
584584
assert!(result.unwrap_err().message.contains("already exists"));
585585
// Both files still intact
586586
assert!(old.exists());
@@ -629,7 +629,7 @@ mod tests {
629629
async fn test_move_to_trash_nonexistent() {
630630
let result = move_to_trash("/nonexistent_12345/trash_me.txt".to_string()).await;
631631
assert!(result.is_err());
632-
// allowed-error-string-match: IpcError is a flat struct with no typed variants message content is the only signal
632+
// allowed-error-string-match: IpcError is a flat struct with no typed variants; message content is the only signal
633633
assert!(result.unwrap_err().message.contains("doesn't exist"));
634634
}
635635
}

apps/desktop/src-tauri/src/file_system/write_operations/move_op.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use super::types::{
2020
// ============================================================================
2121

2222
/// Tracks renames performed during same-FS move for rollback on cancellation.
23-
/// Each entry is `(original_source, moved_to_dest)` — rollback reverses them.
23+
/// Each entry is `(original_source, moved_to_dest)`. Rollback reverses them.
2424
struct MoveTransaction {
2525
renames: Vec<(PathBuf, PathBuf)>,
2626
}
@@ -154,7 +154,7 @@ fn move_with_rename(
154154
}
155155
}
156156
} else {
157-
// No conflict just rename
157+
// No conflict, so just rename
158158
fs::rename(source, &dest_path).with_path(source)?;
159159
move_tx.record(source.clone(), dest_path);
160160
}
@@ -223,7 +223,7 @@ fn move_with_rename(
223223
/// The two look similar in structure but differ in every detail (copy has progress tracking,
224224
/// symlink handling, byte counting, transaction recording, strategy selection). A shared
225225
/// abstraction would be forced and fragile. See `copy.rs` `copy_single_item` for the copy side.
226-
#[allow(clippy::too_many_arguments, reason = "intentional see doc comment above")]
226+
#[allow(clippy::too_many_arguments, reason = "intentional; see doc comment above")]
227227
fn merge_move_directory(
228228
source_dir: &Path,
229229
dest_dir: &Path,
@@ -253,7 +253,7 @@ fn merge_move_directory(
253253
}
254254

255255
if source_child.is_dir() && dest_child.exists() && dest_child.is_dir() {
256-
// Both are directories recurse
256+
// Both are directories, recurse
257257
merge_move_directory(
258258
&source_child,
259259
&dest_child,
@@ -280,12 +280,12 @@ fn merge_move_directory(
280280
move_tx.record(source_child, resolved.path);
281281
}
282282
None => {
283-
// Skip source file stays in place
283+
// Skip: source file stays in place
284284
continue;
285285
}
286286
}
287287
} else {
288-
// No conflict just rename
288+
// No conflict, just rename
289289
fs::rename(&source_child, &dest_child).with_path(&source_child)?;
290290
move_tx.record(source_child, dest_child);
291291
}
@@ -435,7 +435,7 @@ fn move_with_staging(
435435
let final_path = destination.join(file_name);
436436

437437
// When both staged and final are directories, merge recursively.
438-
// No MoveTransaction needed here staging cleanup handles rollback.
438+
// No MoveTransaction needed here: staging cleanup handles rollback.
439439
let mut staging_move_tx = MoveTransaction::new();
440440
if staged_path.is_dir() && final_path.exists() && final_path.is_dir() {
441441
merge_move_directory(
@@ -476,7 +476,7 @@ fn move_with_staging(
476476
}
477477
}
478478
} else {
479-
// No conflict just rename from staging to final
479+
// No conflict, just rename from staging to final
480480
fs::rename(&staged_path, &final_path).map_err(|e| WriteOperationError::IoError {
481481
path: staged_path.display().to_string(),
482482
message: format!("Failed to move from staging: {}", e),

apps/desktop/src-tauri/src/indexing/aggregator.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,7 @@ mod tests {
838838
],
839839
);
840840

841-
// Only compute stats for /a/sub (id=4) leave /a (id=2) and root (id=1) missing
841+
// Only compute stats for /a/sub (id=4): leave /a (id=2) and root (id=1) missing
842842
IndexStore::upsert_dir_stats_by_id(
843843
&conn,
844844
&[DirStatsById {
@@ -894,7 +894,7 @@ mod tests {
894894
// /grand/parent (id=3)
895895
// /grand/parent/leaf (id=4)
896896
// /grand/parent/leaf/link (id=5, symlink)
897-
// /grand/sibling (id=6) no symlinks
897+
// /grand/sibling (id=6), no symlinks
898898
// /grand/sibling/file.txt (id=7, 100 bytes)
899899
insert_entries(
900900
&conn,
@@ -955,7 +955,7 @@ mod tests {
955955
#[test]
956956
fn aggregate_dir_with_only_symlinks_has_zero_size() {
957957
let (conn, _dir) = open_temp_conn();
958-
// /links contains only two symlinks total size 0, but flag is true
958+
// /links contains only two symlinks: total size 0, but flag is true
959959
insert_entries(
960960
&conn,
961961
&[
@@ -1053,7 +1053,7 @@ mod tests {
10531053
id, cp, pid, pp
10541054
);
10551055
}
1056-
// Transitively the same must hold for any ancestor — but
1056+
// Transitively the same must hold for any ancestor,
10571057
// chain through `parent_of` to be sure.
10581058
let mut cursor = pid;
10591059
let mut hops = 0;

0 commit comments

Comments
 (0)