Radish alpha
h
rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
Radicle Heartwood Protocol & Stack
Radicle
Git
Add codespell config and make it fix some typos
Merged did:key:z6MkfCGi...puRr opened 6 months ago

Some we had to address interactively, hence 2 DATALAD RUNCMD commits!

48 files changed +69 -63 8e331ce1 32d77641
added .codespellrc
@@ -0,0 +1,6 @@
+
[codespell]
+
# Ref: https://github.com/codespell-project/codespell#using-a-config-file
+
skip = .git*,*.lock,.codespellrc
+
check-hidden = true
+
# ignore-regex = 
+
ignore-words-list = ser,noes
modified CHANGELOG.md
@@ -112,7 +112,7 @@ confusing.

## New Features

-
- `rad clone` now supports the flag `--bare` which works analoguously to
+
- `rad clone` now supports the flag `--bare` which works analogously to
  `git clone --bare`.
- `rad patch show` now has improved output. It does not distinguish between the
  original author's updates and other updated, each update is marked as
modified crates/radicle-cli-test/README.md
@@ -18,7 +18,7 @@ ohai
`````

Say this is placed in `kind-echo.md`, this is what the corresponding test case
-
would look lke:
+
would look like:

``` rust
use std::path::Path;
modified crates/radicle-cli-test/src/lib.rs
@@ -204,7 +204,7 @@ impl TestFormula {
        // Add the target dir to the beginning of the list we will use as `PATH`.
        self.bins.insert(0, bins);

-
        // We don't need to re-build everytime the `build` function is called. Once is enough.
+
        // We don't need to re-build every time the `build` function is called. Once is enough.
        BUILD.call_once(|| {
            use escargot::format::Message;
            use radicle::logger::env_level;
modified crates/radicle-cli/examples/git/git-push-canonical-annotated-tags.md
@@ -120,7 +120,7 @@ From rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji
 * [new tag]         v1.0-hotfix -> v1.0-hotfix
```

-
Since Alice crated an annotated tag, resolving the reference on Bob's end yields an object of type 'tag'.
+
Since Alice created an annotated tag, resolving the reference on Bob's end yields an object of type 'tag'.

``` ~bob
$ git cat-file -t v1.0-hotfix
modified crates/radicle-cli/examples/git/git-push-canonical-lightweight-tags.md
@@ -118,7 +118,7 @@ From rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji
 * [new tag]         v1.0-hotfix -> v1.0-hotfix
```

-
Since Alice crated a lightweight tag, resolving the reference on Bob's end yields an object of type 'commit'.
+
Since Alice created a lightweight tag, resolving the reference on Bob's end yields an object of type 'commit'.

``` ~bob
$ git cat-file -t v1.0-hotfix
modified crates/radicle-cli/examples/rad-id.md
@@ -6,7 +6,7 @@ project.

For cases where `threshold > 1`, it is necessary to gather a quorum of
signatures to update the Radicle identity. To do this, we use the `rad id`
-
command. For now, since we are the only delegate, and `treshold` is `1`, we
+
command. For now, since we are the only delegate, and `threshold` is `1`, we
can update the identity ourselves.

Let's add Bob as a delegate using their DID,
modified crates/radicle-cli/examples/rad-init-no-seed.md
@@ -1,4 +1,4 @@
-
If we initialize a public repository without seeding it, it won't be advertized:
+
If we initialize a public repository without seeding it, it won't be advertised:
```
$ rad init --name heartwood --description "radicle heartwood protocol & stack" --no-confirm --public --no-seed

@@ -17,7 +17,7 @@ To push changes, run `git push`.
$ rad node inventory
```

-
If we then seed it, it becomes advertized in our inventory:
+
If we then seed it, it becomes advertised in our inventory:
```
$ rad seed rad:zhbMU4DUXrzB8xT6qAJh6yZ7bFMK
✓ Inventory updated with rad:zhbMU4DUXrzB8xT6qAJh6yZ7bFMK
modified crates/radicle-cli/examples/rad-init-private-clone-seed.md
@@ -1,6 +1,6 @@
Given a private repo `rad:z2ug5mwNKZB8KGpBDRTrWHAMbvHCu` belonging to Alice,
Alice allows Bob to fetch it, and Bob, without the updated identity document
-
is able to fetch it by specifiying Alice as a seed.
+
is able to fetch it by specifying Alice as a seed.

``` ~alice
$ rad id update --title "Allow Bob" --description "" --allow did:key:z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk -q
modified crates/radicle-cli/examples/rad-init-private.md
@@ -17,7 +17,7 @@ To make it public, run `rad publish`.
To push changes, run `git push`.
```

-
The repository does not show up in our inventory, since it is not advertized,
+
The repository does not show up in our inventory, since it is not advertised,
despite being seeded:
```
$ rad node inventory
modified crates/radicle-cli/src/commands/node/control.rs
@@ -105,7 +105,7 @@ pub fn start(
    } else {
        // Write a hint to the log file, but swallow any errors.
        let mut log_file = log_file;
-
        let _ = log_file.write_all(format!("radicle-node started in foreground, no futher log messages are written to '{}' (this file).\n", log_path.display()).as_bytes());
+
        let _ = log_file.write_all(format!("radicle-node started in foreground, no further log messages are written to '{}' (this file).\n", log_path.display()).as_bytes());

        let mut child = process::Command::new(cmd)
            .args(options)
modified crates/radicle-cli/src/commands/sync.rs
@@ -87,7 +87,7 @@ Options
    -r, --replicas      <count>   Sync with a specific number of seeds
        --replicas-max  <count>   Sync with an upper bound number of seeds
    -v, --verbose                 Verbose output
-
        --debug                   Print debug information afer sync
+
        --debug                   Print debug information after sync
        --help                    Print help
"#,
};
modified crates/radicle-cli/src/git/ddiff.rs
@@ -41,7 +41,7 @@
//! +snuffing
//! omitting
//! ```
-
//! The `DDiff` will show the what changes are being made, overlayed on to the original diff and
+
//! The `DDiff` will show the what changes are being made, overlaid on to the original diff and
//! the diff's original file as context.
//!
//! ```text
modified crates/radicle-cli/tests/util/environment.rs
@@ -238,7 +238,7 @@ impl Environment {
        radicle::test::fixtures::repository(self.work(has_alias).as_path())
    }

-
    // Convenience method for exectuing a test formula with standard configuration.
+
    // Convenience method for executing a test formula with standard configuration.
    pub fn test(
        &self,
        test_file: &'static str,
modified crates/radicle-cob/src/history.rs
@@ -45,7 +45,7 @@ impl History {
    }

    /// A topological (parents before children) traversal of the dependency
-
    /// graph of this history. This is analagous to
+
    /// graph of this history. This is analogous to
    /// [`std::iter::Iterator::fold`] in that it folds every change into an
    /// accumulator value of type `A`. However, unlike `fold` the function `f`
    /// may prune branches from the dependency graph by returning
modified crates/radicle-cob/src/object/collaboration/create.rs
@@ -46,7 +46,7 @@ impl Create {
/// software project. Its content-address is stored in the object's
/// history.
///
-
/// The `identifier` is a unqiue id that is passed through to the
+
/// The `identifier` is a unique id that is passed through to the
/// [`crate::object::Storage`].
///
/// The `args` are the metadata for this [`CollaborativeObject`]. See
modified crates/radicle-cob/src/object/collaboration/update.rs
@@ -50,11 +50,11 @@ pub struct Update {
/// The `parents` are other the parents of this object, for example a
/// code commit.
///
-
/// The `identifier` is a unqiue id that is passed through to the
+
/// The `identifier` is a unique id that is passed through to the
/// [`crate::object::Storage`].
///
/// The `args` are the metadata for this [`CollaborativeObject`]
-
/// udpate. See [`Update`] for further information.
+
/// update. See [`Update`] for further information.
pub fn update<T, S, G>(
    storage: &S,
    signer: &G,
modified crates/radicle-node/src/fingerprint.rs
@@ -128,7 +128,7 @@ mod tests {
        let other_secret = store.secret_key(None).unwrap().unwrap();

        assert_ne!(secret, other_secret);
-
        // Note that `fp` has not changed since it was initialiazed from `secret`.
+
        // Note that `fp` has not changed since it was initialized from `secret`.
        assert_eq!(fp.verify(&other_secret), FingerprintVerification::Mismatch);
    }
}
modified crates/radicle-node/src/reactor.rs
@@ -77,7 +77,7 @@ pub trait WriteAtomic: std::io::Write {
                result.as_ref().err().map(|err| err.kind()),
                Some(Interrupted | WouldBlock | WriteZero)
            ),
-
            "WriteAtomic::write_or_buf must handle erros of kind {Interrupted:?}, {WouldBlock:?}, {WriteZero:?} by buffering",
+
            "WriteAtomic::write_or_buf must handle errors of kind {Interrupted:?}, {WouldBlock:?}, {WriteZero:?} by buffering",
        );

        result
modified crates/radicle-node/src/runtime/handle.rs
@@ -42,7 +42,7 @@ pub enum Error {
    /// The operation timed out.
    #[error("the operation timed out")]
    Timeout,
-
    /// An I/O error occured.
+
    /// An I/O error occurred.
    #[error(transparent)]
    Io(#[from] std::io::Error),
}
modified crates/radicle-node/src/test/peer.rs
@@ -167,7 +167,7 @@ where
        let local_addr = net::SocketAddr::new(ip, config.rng.u16(..));
        let inventory = storage.repositories().unwrap();

-
        // Make sure the peer address is advertized.
+
        // Make sure the peer address is advertised.
        config.config.external_addresses.push(local_addr.into());
        for repo in &inventory {
            policies.seed(&repo.rid, Scope::Followed).unwrap();
modified crates/radicle-node/src/tests.rs
@@ -734,7 +734,7 @@ fn test_refs_announcement_relay_public() {
        .elapse(service::GOSSIP_INTERVAL);
    assert!(
        alice.messages(eve.id()).next().is_none(),
-
        "The same ref announement is not relayed"
+
        "The same ref announcement is not relayed"
    );

    alice
modified crates/radicle-node/src/tests/e2e.rs
@@ -886,7 +886,7 @@ fn test_non_fastforward_sigrefs() {

    converge([&alice, &bob, &eve]);

-
    // Eve fetches the inital project from Bob.
+
    // Eve fetches the initial project from Bob.
    eve.handle.fetch(rid, bob.id, DEFAULT_TIMEOUT).unwrap();
    // Alice fetches it too.
    let old_bob = alice.handle.fetch(rid, bob.id, DEFAULT_TIMEOUT).unwrap();
modified crates/radicle-protocol/src/service.rs
@@ -660,7 +660,7 @@ where
            Ok(Some(last)) => Some(last.to_local_time()),
            Ok(None) => None,
            Err(e) => {
-
                error!(target: "service", "Error getting the lastest gossip message from db: {e}");
+
                error!(target: "service", "Error getting the latest gossip message from db: {e}");
                None
            }
        };
@@ -2069,7 +2069,7 @@ where

    /// Get our local inventory.
    ///
-
    /// A node's inventory is the advertized list of repositories offered by a node.
+
    /// A node's inventory is the advertised list of repositories offered by a node.
    ///
    /// A node's inventory consists of *public* repositories that are seeded and available locally
    /// in the node's storage. We use the routing table as the canonical state of all inventories,
@@ -2749,7 +2749,7 @@ where
/// Disconnect reason.
#[derive(Debug)]
pub enum DisconnectReason {
-
    /// Error while dialing the remote. This error occures before a connection is
+
    /// Error while dialing the remote. This error occurs before a connection is
    /// even established. Errors of this kind are usually not transient.
    Dial(Arc<dyn std::error::Error + Sync + Send>),
    /// Error with an underlying established connection. Sometimes, reconnecting
modified crates/radicle-protocol/src/service/message.rs
@@ -50,7 +50,7 @@ impl Subscribe {
pub struct NodeAnnouncement {
    /// Supported protocol version.
    pub version: u8,
-
    /// Advertized features.
+
    /// Advertised features.
    pub features: node::Features,
    /// Monotonic timestamp.
    pub timestamp: Timestamp,
modified crates/radicle-protocol/src/wire/frame.rs
@@ -54,7 +54,7 @@ impl wire::Decode for Version {
/// bit set to `1` for all streams she creates, while Bob will have it set to `0`.
///
/// This ensures that Stream IDs never collide.
-
/// Additionally, Stream IDs must never be re-used within a connection.
+
/// Additionally, Stream IDs must never be reused within a connection.
///
/// +=======+==================================+
/// | Bits  | Stream Type                      |
modified crates/radicle-ssh/src/encoding.rs
@@ -52,9 +52,9 @@ pub trait Encoding {
    fn write_empty_list(&mut self);
    /// Write the buffer length at the beginning of the buffer.
    fn write_len(&mut self);
-
    /// Push a [`usize`] as an SSH-encoded unsiged 32-bit integer.
+
    /// Push a [`usize`] as an SSH-encoded unsigned 32-bit integer.
    /// May panic if the argument is greater than [`u32::MAX`].
-
    /// This is a convience method, to spare callers casting or converting
+
    /// This is a convenience method, to spare callers casting or converting
    /// [`usize`] to [`u32`]. If callers end up in a situation where they
    /// need to push a 32-bit unisgned integer, but the value they would
    /// like to push does not fit 32 bits, then the implementation will not
modified crates/radicle/src/cob/cache.rs
@@ -214,13 +214,13 @@ impl Store<Write> {
    }

    /// Migrate this database to the latest version.
-
    /// Returns the verison migrated to.
+
    /// Returns the version migrated to.
    pub fn migrate<M: MigrateCallback>(&mut self, callback: M) -> Result<usize, Error> {
        self.migrate_to(MIGRATIONS.len(), callback)
    }

    /// Migrate this database to the given target version.
-
    /// Returns the verison migrated to.
+
    /// Returns the version migrated to.
    pub fn migrate_to<M: MigrateCallback>(
        &mut self,
        target: usize,
modified crates/radicle/src/cob/cache/migrations/samples/patch.v1.json
@@ -41,7 +41,7 @@
        {
          "author": "z6MkkfM3tPXNPrPevKr3uSiQtHPuwnNhu2yUVjgd2jXVsVz5",
          "timestamp": 1710939751000,
-
          "body": "Instead of disabeling the Share button, adds a min-width param",
+
          "body": "Instead of disabling the Share button, adds a min-width param",
          "embeds": []
        }
      ],
modified crates/radicle/src/cob/cache/migrations/samples/patch.v2.json
@@ -41,7 +41,7 @@
        {
          "author": "z6MkkfM3tPXNPrPevKr3uSiQtHPuwnNhu2yUVjgd2jXVsVz5",
          "timestamp": 1710939751000,
-
          "body": "Instead of disabeling the Share button, adds a min-width param",
+
          "body": "Instead of disabling the Share button, adds a min-width param",
          "embeds": []
        }
      ],
modified crates/radicle/src/cob/issue.rs
@@ -940,7 +940,7 @@ pub enum Action {
        /// Should be the root [`CommentId`] if it's a top-level comment.
        #[serde(default, skip_serializing_if = "Option::is_none")]
        reply_to: Option<CommentId>,
-
        /// Embeded content.
+
        /// Embedded content.
        #[serde(default, skip_serializing_if = "Vec::is_empty")]
        embeds: Vec<Embed<Uri>>,
    },
modified crates/radicle/src/cob/patch.rs
@@ -217,7 +217,7 @@ pub enum Action {
        /// Should be [`Some`] otherwise.
        #[serde(default, skip_serializing_if = "Option::is_none")]
        reply_to: Option<CommentId>,
-
        /// Embeded content.
+
        /// Embedded content.
        #[serde(default, skip_serializing_if = "Vec::is_empty")]
        embeds: Vec<Embed<Uri>>,
    },
@@ -265,7 +265,7 @@ pub enum Action {
    RevisionEdit {
        revision: RevisionId,
        description: String,
-
        /// Embeded content.
+
        /// Embedded content.
        #[serde(default, skip_serializing_if = "Vec::is_empty")]
        embeds: Vec<Embed<Uri>>,
    },
@@ -295,7 +295,7 @@ pub enum Action {
        /// Should be the root [`CommentId`] if it's a top-level comment.
        #[serde(default, skip_serializing_if = "Option::is_none")]
        reply_to: Option<CommentId>,
-
        /// Embeded content.
+
        /// Embedded content.
        #[serde(default, skip_serializing_if = "Vec::is_empty")]
        embeds: Vec<Embed<Uri>>,
    },
modified crates/radicle/src/cob/thread.rs
@@ -14,7 +14,7 @@ use crate::git;
use crate::prelude::ReadRepository;

/// Type name of a thread, as well as the domain for all thread operations.
-
/// Note that threads are not usually used standalone. They are embeded into other COBs.
+
/// Note that threads are not usually used standalone. They are embedded into other COBs.
pub static TYPENAME: LazyLock<cob::TypeName> =
    LazyLock::new(|| FromStr::from_str("xyz.radicle.thread").expect("type name is valid"));

modified crates/radicle/src/git/canonical/rules.rs
@@ -155,7 +155,7 @@ impl PartialOrd for Pattern {
///     component i of `ψ`, denoted `ψ[i]`. This is the case if:
///      a. `φ[i]` does not contain an asterisk and `ψ[i]` contains an asterisk,
///         i.e. the symbol `*`, e.g. `a < * and abc < a*`.
-
///         Note that this is important to capture specificity accross
+
///         Note that this is important to capture specificity across
///         components, i.e. to conclude that `a/b/* < a/*/c`.
///      b. Both `φ[i]` and `ψ[i]` contain an asterisk.
///          A. The asterisk in `φ[i]` is further right than the asterisk in `φ[i]`,
modified crates/radicle/src/identity/project.rs
@@ -172,7 +172,7 @@ impl<'de> Deserialize<'de> for Project {
                })
            }
        }
-
        const FIELDS: &[&str] = &["name", "descrption", "defaultBranch"];
+
        const FIELDS: &[&str] = &["name", "description", "defaultBranch"];
        deserializer.deserialize_struct("Project", FIELDS, ProjectVisitor)
    }
}
modified crates/radicle/src/node/address.rs
@@ -122,11 +122,11 @@ impl<K: hash::Hash + Eq, V> DerefMut for AddressBook<K, V> {
pub struct Node {
    /// Protocol version.
    pub version: u8,
-
    /// Advertized alias.
+
    /// Advertised alias.
    pub alias: Alias,
-
    /// Advertized features.
+
    /// Advertised features.
    pub features: node::Features,
-
    /// Advertized addresses
+
    /// Advertised addresses
    pub addrs: Vec<KnownAddress>,
    /// Proof-of-work included in node announcement.
    pub pow: u32,
modified crates/radicle/src/node/command.rs
@@ -54,7 +54,7 @@ pub enum Command {
    /// Update node's inventory.
    AddInventory { rid: RepoId },

-
    /// Get the current node condiguration.
+
    /// Get the current node configuration.
    Config,

    /// Get the node's listen addresses.
@@ -203,7 +203,7 @@ impl Default for ConnectOptions {
pub enum CommandResult<T> {
    /// Response on node socket indicating that a command was carried out successfully.
    Okay(T),
-
    /// Response on node socket indicating that an error occured.
+
    /// Response on node socket indicating that an error occurred.
    Error {
        /// The reason for the error.
        #[serde(rename = "error")]
modified crates/radicle/src/node/config.rs
@@ -139,7 +139,7 @@ pub struct Limits {
    /// Maximum number of open files.
    pub max_open_files: LimitMaxOpenFiles,

-
    /// Rate limitter settings.
+
    /// Rate limiter settings.
    pub rate: RateLimits,

    /// Connection limits.
@@ -251,7 +251,7 @@ pub struct ConnectionLimits {
    pub outbound: LimitConnectionsOutbound,
}

-
/// Rate limts for a single connection.
+
/// Rate limits for a single connection.
#[derive(Debug, Clone, Serialize, Deserialize, Display)]
#[display("RateLimit(fill_rate={fill_rate}, capacity={capacity})")]
#[serde(rename_all = "camelCase")]
modified crates/radicle/src/node/db.rs
@@ -1,7 +1,7 @@
//! # Note on database migrations
//!
//! The `user_version` field in the database SQLite header is used to keep track of the database
-
//! version. It starts with `0`, which means no tables exist yet, and is incremented everytime a
+
//! version. It starts with `0`, which means no tables exist yet, and is incremented every time a
//! migration is applied. In turn, migrations are named after their version numbers, so the first
//! migration is `1.sql`, the second one is `2.sql` and so on.
//!
modified crates/radicle/src/node/db/schema.sql
@@ -15,7 +15,7 @@ create table if not exists "nodes" (
  --
) strict;

-
-- Node addresses. These are adresses advertized by a node.
+
-- Node addresses. These are addresses advertised by a node.
create table if not exists "addresses" (
  -- Node ID.
  "node"               text      not null references "nodes" ("id") on delete cascade,
modified crates/radicle/src/node/features.rs
@@ -1,8 +1,8 @@
-
//! Node features advertized on the network.
+
//! Node features advertised on the network.
use serde::{Deserialize, Serialize};
use std::{fmt, ops};

-
/// Advertized node features. Signals what services the node supports.
+
/// Advertised node features. Signals what services the node supports.
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[serde(transparent)]
pub struct Features(u64);
modified crates/radicle/src/node/routing.rs
@@ -21,7 +21,7 @@ pub enum InsertResult {
    SeedAdded,
}

-
/// An error occuring in peer-to-peer networking code.
+
/// An error occurring in peer-to-peer networking code.
#[derive(Error, Debug)]
pub enum Error {
    /// An Internal error.
modified crates/radicle/src/profile.rs
@@ -66,12 +66,12 @@ pub mod env {
    // to generate deterministic COB IDs.
    pub const GIT_COMMITTER_DATE: &str = "GIT_COMMITTER_DATE";

-
    /// Commit timestamp to use. Can be overriden by [`RAD_COMMIT_TIME`].
+
    /// Commit timestamp to use. Can be overridden by [`RAD_COMMIT_TIME`].
    pub fn commit_time() -> localtime::LocalTime {
        time(RAD_COMMIT_TIME).unwrap_or_else(local_time)
    }

-
    /// Local time. Can be overriden by [`RAD_LOCAL_TIME`].
+
    /// Local time. Can be overridden by [`RAD_LOCAL_TIME`].
    pub fn local_time() -> localtime::LocalTime {
        time(RAD_LOCAL_TIME).unwrap_or_else(localtime::LocalTime::now)
    }
modified crates/radicle/src/storage.rs
@@ -537,7 +537,7 @@ pub trait ReadRepository: Sized + ValidateRepository {
    /// Get the root commit of the canonical identity branch.
    fn identity_root(&self) -> Result<Oid, RepositoryError>;

-
    /// Get the root commit of the identity branch of a sepcific remote.
+
    /// Get the root commit of the identity branch of a specific remote.
    fn identity_root_of(&self, remote: &RemoteId) -> Result<Oid, RepositoryError>;

    /// Load the identity history.
@@ -598,7 +598,7 @@ pub trait ReadRepository: Sized + ValidateRepository {
    /// Skips references with names that are not parseable into [`Qualified`].
    ///
    /// This function always peels reference to the commit. For tags, this means the [`Oid`] of the
-
    /// commit pointed to by the tag is returned, and not the [`Oid`] of the tag itsself.
+
    /// commit pointed to by the tag is returned, and not the [`Oid`] of the tag itself.
    fn references_glob(
        &self,
        pattern: &crate::git::fmt::refspec::PatternStr,
modified crates/radicle/src/storage/git/transport/local/url.rs
@@ -31,7 +31,7 @@ pub enum UrlError {
/// A git local transport URL.
///
/// * Used to content-address a repository, eg. when sharing projects.
-
/// * Used as a remore url in a git working copy.
+
/// * Used as a remote url in a git working copy.
///
/// `rad://<repo>[/<namespace>]`
///
modified crates/radicle/src/storage/refs.rs
@@ -566,7 +566,7 @@ mod tests {
        }

        // Now Bob checks out a copy of the `paris` repository and pushes a commit to the
-
        // default branch (master). We store the OID of that commti in `bob_head`, as this
+
        // default branch (master). We store the OID of that commit in `bob_head`, as this
        // is the commit we will try to get the `london` repo to point to.
        let (bob_paris_sigrefs, bob_head) = {
            let bob_working = rad::checkout(
modified rad-patch.1.adoc
@@ -152,10 +152,10 @@ Any other Revision ID will comment on the revision specified.

*--message*, *-m <string>*::
Comment message. If omitted, Radicle will prompt for a comment string via
-
*$EDITOR*. Multiple messages will be concatinated with a blank line in between.
+
*$EDITOR*. Multiple messages will be concatenated with a blank line in between.

*--reply-to <comment-id>*::
-
Optional comment to reply to. If ommitted, the comment is a top-level comment
+
Optional comment to reply to. If omitted, the comment is a top-level comment
on the given revision.

== Opening a patch
modified rad.1.adoc
@@ -199,7 +199,7 @@ description and default branch by running:
*~/.radicle*::

The _Radicle Home_. This is the default location for Radicle configuration
-
files, keys, and repository storage. Can be controlled by settting the
+
files, keys, and repository storage. Can be controlled by setting the
**RAD_HOME** environment variable.

*~/.radicle/config.json*::