From 9ff0e8b01f56f1ea224a20160c8f8f0068f371de Mon Sep 17 00:00:00 2001 From: Fintan Halpenny Date: Fri, 17 Apr 2026 17:37:56 +0100 Subject: [PATCH] just: checking for ellipses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add custom check for ellipses "...", asking for replacement of "…". Git ranges and the CLI wildcard matches are ignored. This change includes fixes to all sites that did not pass the check. --- CHANGELOG.md | 2 +- CONTRIBUTING.md | 8 +-- crates/radicle-cli/examples/rad-auth.md | 2 +- crates/radicle-cli/examples/rad-id.md | 2 +- crates/radicle-cli/examples/rad-inbox.md | 4 +- .../examples/rad-init-existing-bare.md | 2 +- .../radicle-cli/examples/rad-init-existing.md | 2 +- crates/radicle-cli/examples/rad-node.md | 4 +- .../examples/rad-patch-checkout-force.md | 2 +- crates/radicle-cli/src/commands/auth.rs | 4 +- crates/radicle-cli/src/commands/checkout.rs | 2 +- crates/radicle-cli/src/commands/init.rs | 4 +- .../radicle-cli/src/commands/node/control.rs | 8 +-- .../src/commands/patch/checkout.rs | 2 +- crates/radicle-cli/src/terminal/io.rs | 2 +- crates/radicle-node/src/main.rs | 2 +- crates/radicle-node/src/reactor.rs | 2 +- crates/radicle-node/src/reactor/controller.rs | 2 +- crates/radicle-node/src/tests.rs | 6 +-- crates/radicle-protocol/src/bounded.rs | 2 +- crates/radicle-protocol/src/service.rs | 12 ++--- crates/radicle-protocol/src/wire/frame.rs | 2 +- crates/radicle-term/src/io.rs | 2 +- crates/radicle/src/canonical/formatter.rs | 2 +- crates/radicle/src/identity/doc.rs | 2 +- crates/radicle/src/profile.rs | 2 +- justfile | 27 ++++++---- scripts/build-man-pages.sh | 2 +- scripts/just/check-ellipses.sh | 54 +++++++++++++++++++ scripts/just/check-keywords.sh | 2 +- simulation/README.md | 4 +- simulation/justfile | 20 +++---- simulation/modules/radicle-node/README.md | 2 +- 33 files changed, 128 insertions(+), 69 deletions(-) create mode 100755 scripts/just/check-ellipses.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ce1e377..745729d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -219,7 +219,7 @@ COB type names and payload IDs remain unchanged for backwards compatibility. The `Service` has now learned to return results when an error occurs which will be reported back to the user. - Parsing addresses involving an IPv6 host failed if they were enclosed in - square brackets, e.g. in `rad node connect z6Mk...@[::1]:8776`. + square brackets, e.g. in `rad node connect z6Mk…@[::1]:8776`. Also, ambiguous addresses would parse, e.g. `::1:8776` would be indistinguishable from `[::1]:8776`. Since a port number is always required along a host when providing an address, IPv6 addresses now always require diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 11ae2650..3cee3862 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -152,7 +152,7 @@ are separated from private modules with a blank line: use std::time; use std::process; - ... + … Imports are organized in groups, from least specific to more specific: @@ -175,13 +175,13 @@ Use short 1-letter names when the variable scope is only a few lines, or the con obvious, eg. if let Some(e) = result.err() { - ... + … } Use 1-word names for function parameters or variables that have larger scopes: pub fn commit(repo: &Repository, sig: &Signature) -> Result { - ... + … } Use the most descriptive names for globals: @@ -224,7 +224,7 @@ for the reader: // all of it. It can happen that inventory is not properly tracked if for eg. the // user creates a new repository while the node is stopped. for rid in self.storage.inventory()? { - ... + … ### Referring to radicle.dev in Code diff --git a/crates/radicle-cli/examples/rad-auth.md b/crates/radicle-cli/examples/rad-auth.md index 41bbd134..b6f69960 100644 --- a/crates/radicle-cli/examples/rad-auth.md +++ b/crates/radicle-cli/examples/rad-auth.md @@ -6,7 +6,7 @@ $ rad auth --alias "alice" Initializing your Radicle 👾 identity -✓ Creating your Ed25519 keypair... +✓ Creating your Ed25519 keypair… ✓ Your Radicle DID is did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi. This identifies your device. Run `rad self` to show it at all times. ✓ You're all set. diff --git a/crates/radicle-cli/examples/rad-id.md b/crates/radicle-cli/examples/rad-id.md index 44b5de6d..6fcd3d5f 100644 --- a/crates/radicle-cli/examples/rad-id.md +++ b/crates/radicle-cli/examples/rad-id.md @@ -59,7 +59,7 @@ the delegates and threshold: + "did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi", + "did:key:z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk" ], - ... + … - "threshold": 1 + "threshold": 2 diff --git a/crates/radicle-cli/examples/rad-inbox.md b/crates/radicle-cli/examples/rad-inbox.md index e0c9943d..1e3e447b 100644 --- a/crates/radicle-cli/examples/rad-inbox.md +++ b/crates/radicle-cli/examples/rad-inbox.md @@ -6,7 +6,7 @@ Your inbox is empty. ``` ~bob $ cd heartwood -$ rad issue open --title "No license file" --description "..." -q +$ rad issue open --title "No license file" --description "…" -q ✓ Synced with 1 seed(s) $ git commit -m "Change copyright" --allow-empty -q $ git push rad HEAD:bob/copy @@ -80,7 +80,7 @@ $ rad inbox show 1 │ Author bob z6Mkt67…v4N1tRk │ │ Status open │ │ │ -│ ... │ +│ [...] │ ╰──────────────────────────────────────────────────╯ ``` diff --git a/crates/radicle-cli/examples/rad-init-existing-bare.md b/crates/radicle-cli/examples/rad-init-existing-bare.md index d6d8279b..f2c88a7e 100644 --- a/crates/radicle-cli/examples/rad-init-existing-bare.md +++ b/crates/radicle-cli/examples/rad-init-existing-bare.md @@ -22,7 +22,7 @@ And initialize this working copy as that existing repository: ``` $ rad init --setup-signing --existing rad:z42hL2jL4XNk6K8oHQaSWfMgCL7ji -Configuring Radicle signing key SHA256:UIedaL6Cxm6OUErh9GQUzzglSk7VpQlVTI1TAFB/HWA... +Configuring Radicle signing key SHA256:UIedaL6Cxm6OUErh9GQUzzglSk7VpQlVTI1TAFB/HWA… ✓ Signing configured in [..]/heartwood/config ! Not writing .gitsigners file. diff --git a/crates/radicle-cli/examples/rad-init-existing.md b/crates/radicle-cli/examples/rad-init-existing.md index d727b671..8ec0eb3f 100644 --- a/crates/radicle-cli/examples/rad-init-existing.md +++ b/crates/radicle-cli/examples/rad-init-existing.md @@ -22,7 +22,7 @@ And initialize this working copy as that existing repository: ``` $ rad init --setup-signing --existing rad:z42hL2jL4XNk6K8oHQaSWfMgCL7ji -Configuring Radicle signing key SHA256:UIedaL6Cxm6OUErh9GQUzzglSk7VpQlVTI1TAFB/HWA... +Configuring Radicle signing key SHA256:UIedaL6Cxm6OUErh9GQUzzglSk7VpQlVTI1TAFB/HWA… ✓ Signing configured in [..]/heartwood/.git/config ✓ Created .gitsigners file diff --git a/crates/radicle-cli/examples/rad-node.md b/crates/radicle-cli/examples/rad-node.md index 175268b2..8f7d8591 100644 --- a/crates/radicle-cli/examples/rad-node.md +++ b/crates/radicle-cli/examples/rad-node.md @@ -84,7 +84,7 @@ Running the command again gives us an error: ``` $ rad node stop -✗ Stopping node... error: node is not running +✗ Stopping node… error: node is not running ``` Note that if we unseed a repository, it is no longer part of our inventory: @@ -126,7 +126,7 @@ $ rad sync status ``` ``` (fail) $ rad node connect z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk@radicle.example:58776 -✗ Connecting to z6Mkt67…v4N1tRk@radicle.example:58776... +✗ Connecting to z6Mkt67…v4N1tRk@radicle.example:58776… ✗ Error: failed to open node control socket "[..]/.radicle/node/control.sock" (entity not found) ✗ Hint: to start your node, run `rad node start`. ``` diff --git a/crates/radicle-cli/examples/rad-patch-checkout-force.md b/crates/radicle-cli/examples/rad-patch-checkout-force.md index 8983eaf5..d4b476cf 100644 --- a/crates/radicle-cli/examples/rad-patch-checkout-force.md +++ b/crates/radicle-cli/examples/rad-patch-checkout-force.md @@ -80,7 +80,7 @@ ensure that they are looking at the latest changes: ``` ~bob (fail) $ rad patch checkout aa45913 --name alice-init -✗ Performing checkout... +✗ Performing checkout… ✗ Error: branch 'alice-init' already exists (use `--force` to overwrite) ``` diff --git a/crates/radicle-cli/src/commands/auth.rs b/crates/radicle-cli/src/commands/auth.rs index 28b0155a..cd5a4991 100644 --- a/crates/radicle-cli/src/commands/auth.rs +++ b/crates/radicle-cli/src/commands/auth.rs @@ -55,7 +55,7 @@ pub fn init(args: Args) -> anyhow::Result<()> { term::passphrase_confirm("Enter a passphrase:", env::RAD_PASSPHRASE)? }; let passphrase = passphrase.filter(|passphrase| !passphrase.trim().is_empty()); - let spinner = term::spinner("Creating your Ed25519 keypair..."); + let spinner = term::spinner("Creating your Ed25519 keypair…"); let profile = Profile::init(home, alias, passphrase.clone(), env::seed())?; let mut agent = true; spinner.finish(); @@ -63,7 +63,7 @@ pub fn init(args: Args) -> anyhow::Result<()> { if let Some(passphrase) = passphrase { match ssh::agent::Agent::connect() { Ok(mut agent) => { - let mut spinner = term::spinner("Adding your Radicle key to ssh-agent..."); + let mut spinner = term::spinner("Adding your Radicle key to ssh-agent…"); if register(&mut agent, &profile, passphrase).is_ok() { spinner.finish(); } else { diff --git a/crates/radicle-cli/src/commands/checkout.rs b/crates/radicle-cli/src/commands/checkout.rs index 0becf7dd..3b8a1b1f 100644 --- a/crates/radicle-cli/src/commands/checkout.rs +++ b/crates/radicle-cli/src/commands/checkout.rs @@ -38,7 +38,7 @@ fn execute(args: Args, profile: &Profile) -> anyhow::Result { anyhow::bail!("the local path {:?} already exists", path.as_path()); } - let mut spinner = term::spinner("Performing checkout..."); + let mut spinner = term::spinner("Performing checkout…"); let repo = match radicle::rad::checkout(args.repo, &remote, path.clone(), &storage, false) { Ok(repo) => repo, Err(err) => { diff --git a/crates/radicle-cli/src/commands/init.rs b/crates/radicle-cli/src/commands/init.rs index 661c4062..d0ab135c 100644 --- a/crates/radicle-cli/src/commands/init.rs +++ b/crates/radicle-cli/src/commands/init.rs @@ -134,7 +134,7 @@ pub fn init(repo: git::Repository, args: Args, profile: &profile::Profile) -> an let signer = term::signer(profile)?; let mut node = radicle::Node::new(profile.socket_from_env()); - let mut spinner = term::spinner("Initializing..."); + let mut spinner = term::spinner("Initializing…"); let mut push_cmd = String::from("git push"); match radicle::rad::init( @@ -497,7 +497,7 @@ pub fn setup_signing( let key = ssh::fmt::fingerprint(node_id); let yes = if !git::is_signing_configured(path)? { term::headline(format!( - "Configuring Radicle signing key {}...", + "Configuring Radicle signing key {}…", term::format::tertiary(key) )); true diff --git a/crates/radicle-cli/src/commands/node/control.rs b/crates/radicle-cli/src/commands/node/control.rs index 506bac69..cf842771 100644 --- a/crates/radicle-cli/src/commands/node/control.rs +++ b/crates/radicle-cli/src/commands/node/control.rs @@ -120,7 +120,7 @@ pub fn start( } pub fn stop(node: Node, profile: &Profile) { - let mut spinner = term::spinner("Stopping node..."); + let mut spinner = term::spinner("Stopping node…"); if node.shutdown().is_err() { spinner.error("node is not running"); } else { @@ -198,7 +198,7 @@ pub fn connect( timeout: time::Duration, ) -> anyhow::Result<()> { let spinner = term::spinner(format!( - "Connecting to {}@{addr}...", + "Connecting to {}@{addr}…", term::format::node_id_human_compact(&nid) )); match node.connect( @@ -222,11 +222,11 @@ pub fn connect_many( addrs: Vec
, timeout: time::Duration, ) -> anyhow::Result<()> { - let mut spinner = term::spinner("Connecting..."); + let mut spinner = term::spinner("Connecting…"); let mut errors = HashMap::new(); for addr in addrs { spinner.message(format!( - "Connecting to {}@{addr}...", + "Connecting to {}@{addr}…", term::format::node_id_human_compact(&nid) )); match node.connect( diff --git a/crates/radicle-cli/src/commands/patch/checkout.rs b/crates/radicle-cli/src/commands/patch/checkout.rs index f49a4323..d4cd2eec 100644 --- a/crates/radicle-cli/src/commands/patch/checkout.rs +++ b/crates/radicle-cli/src/commands/patch/checkout.rs @@ -54,7 +54,7 @@ pub fn run( None => patch.latest(), }; - let mut spinner = term::spinner("Performing checkout..."); + let mut spinner = term::spinner("Performing checkout…"); let patch_branch = opts.branch(patch_id)?; let commit = match working.find_branch(patch_branch.as_str(), git::raw::BranchType::Local) { diff --git a/crates/radicle-cli/src/terminal/io.rs b/crates/radicle-cli/src/terminal/io.rs index f4425f99..cfc26a08 100644 --- a/crates/radicle-cli/src/terminal/io.rs +++ b/crates/radicle-cli/src/terminal/io.rs @@ -64,7 +64,7 @@ pub fn signer(profile: &Profile) -> anyhow::Result { ) } }; - let spinner = spinner("Unsealing key..."); + let spinner = spinner("Unsealing key…"); let signer = MemorySigner::load(&profile.keystore, Some(passphrase))?; spinner.finish(); diff --git a/crates/radicle-node/src/main.rs b/crates/radicle-node/src/main.rs index 61251f7e..06a3aa5c 100644 --- a/crates/radicle-node/src/main.rs +++ b/crates/radicle-node/src/main.rs @@ -18,7 +18,7 @@ use radicle_signals as signals; const HELP_MSG: &str = r#" Usage - radicle-node [