# Contributing to Cleansh

First and foremost, thank you for considering contributing to `cleansh`\! Your interest, whether through bug reports, feature requests, or code contributions, is incredibly valuable. `cleansh` is a high-trust, single-purpose CLI tool, and we believe that community involvement is key to its security, robustness, and continued growth.

This document outlines the guidelines for contributing to the `cleansh` project. Following these guidelines helps ensure a smooth and effective collaboration for everyone involved.

-----

## 💡 How Can I Contribute?

There are many ways to contribute to `cleansh`, even if you're not a Rust expert:

  * **Reporting Bugs:** Found an issue? Let us know\!
  * **Suggesting Features:** Have an idea to make `cleansh` even better? We'd love to hear it.
  * **Improving Documentation:** Clarity in documentation is crucial. If something is unclear or missing, consider suggesting improvements.
  * **Writing Code:** This includes bug fixes, new features, or performance enhancements.
  * **Providing Feedback:** General feedback on usability, design, or anything else is always welcome.

-----

## 🐞 Reporting Bugs

If you encounter a bug or unexpected behavior, please help us by reporting it. Before opening a new issue, please:

1.  **Search Existing Issues:** Check the [GitHub Issues](https://www.google.com/search?q=https://github.com/KarmaYama/cleansh/issues) to see if the bug has already been reported.
2.  **Provide Clear Information:** If it's a new bug, open a [new issue](https://www.google.com/search?q=https://github.com/KarmaYama/cleansh/issues/new/choose) and include:
      * A clear and concise **description** of the bug.
      * **Steps to reproduce** the behavior (e.g., specific command, input data, configuration).
      * The **`cleansh` version** you are using (e.g., `v0.1.2`).
      * Your **operating system** and environment details (e.g., Windows 10, macOS Ventura, Ubuntu 22.04, PowerShell, Bash, Zsh).
      * Any **error messages** or stack traces.
      * Expected vs. Actual behavior.

-----

## ✨ Suggesting Enhancements

We're always looking for ways to improve `cleansh`\! If you have an idea for a new feature or an enhancement to existing functionality:

1.  **Search Existing Issues:** Check for similar suggestions first.
2.  **Open a Feature Request:** Open a [new issue](https://www.google.com/search?q=https://github.com/KarmaYama/cleansh/issues/new/choose) and choose the "Feature Request" template.
      * Clearly describe the **proposed feature** and its **purpose**.
      * Explain the **problem it solves** or the **value it adds**.
      * Provide any **examples** of how it might be used.
      * Consider potential **impacts** (performance, security, usability).

-----

## 👩‍💻 Code Contributions

Ready to dive into the code? We appreciate well-crafted contributions that adhere to the project's standards.

### Setting Up Your Development Environment

1.  **Fork the Repository:** Start by forking the [cleansh repository](https://github.com/KarmaYama/cleansh) to your GitHub account.
2.  **Clone Your Fork:**
    ```bash
    git clone https://github.com/YourUsername/cleansh.git
    cd cleansh
    ```
3.  **Install Rust:** If you don't have Rust installed, follow the instructions on [rustup.rs](https://rustup.rs/). `cleansh` uses the latest stable Rust version (currently `1.88.0` as per `Cargo.toml`).
4.  **Build and Test:**
    ```bash
    cargo build
    cargo test
    ```
    Ensure all tests pass before making changes.

### Making Changes

1.  **Create a New Branch:** Always work on a new branch for your changes. Use a descriptive name like `fix/windows-paths` or `feat/add-json-redaction`.
    ```bash
    git checkout -b your-feature-or-bugfix-branch
    ```
2.  **Code Style:** We follow standard Rust formatting. Please run `cargo fmt` before committing.
    ```bash
    cargo fmt
    ```
3.  **Tests:**
      * For bug fixes, add a test that reproduces the bug and then passes with your fix.
      * For new features, add comprehensive unit and integration tests covering the new functionality and edge cases. Refer to the `src/tests/` and the `Integration Tests` section in the `README.md` for examples.
4.  **Commit Messages:** Write clear, concise, and descriptive commit messages. A good commit message explains *what* was changed and *why*.
      * Use the present tense ("Add feature" instead of "Added feature").
      * Limit the first line to 72 characters.
      * Reference relevant issue numbers (e.g., `Fix #123`).

### Submitting Your Pull Request (PR)

1.  **Push Your Changes:** Push your local branch to your forked repository.
    ```bash
    git push origin your-feature-or-bugfix-branch
    ```
2.  **Open a Pull Request:** Go to the [cleansh GitHub repository](https://github.com/KarmaYama/cleansh) and open a new Pull Request.
      * Provide a clear **title** and detailed **description** of your changes.
      * Reference the issue your PR addresses (e.g., `Closes #123`, `Fixes #456`).
      * Explain your **solution** and any **design decisions**.
      * Mention that you've run `cargo fmt` and that tests pass.
      * Include any relevant `cleansh` command examples if your PR modifies behavior.
3.  **Code Review:** Your PR will be reviewed by maintainers. Be prepared for feedback and discussions. We may ask for changes or clarifications.
4.  **Address Feedback:** Make requested changes and push new commits to your branch. The PR will update automatically.
5.  **Merge:** Once approved, your changes will be merged into the `main` branch\!

-----

## 🛡️ Security Vulnerabilities

We prioritize the security of `cleansh`. If you believe you've found a security vulnerability, please **DO NOT** open a public GitHub issue. Instead, please follow our [Security Policy](SECURITY.md) for responsible disclosure.

-----

## ❓ Questions?

If you have any questions about contributing, don't hesitate to open a [discussion on GitHub](https://www.google.com/search?q=https://github.com/KarmaYama/cleansh/discussions) or reach out to the maintainers.

We're excited to see your contributions\!

-----
