Skip to content

Fortress Rollback

Contribution Guidelines

First and foremost: Thank you for showing interest in contributing to Fortress Rollback (a fork of GGRS)! Make sure to read the Code of Conduct. If you have a cool example or showcase of Fortress Rollback in use, let me know so your project can be highlighted!

Create an issue

Visit GitHub Issues to:

  • Report a bug
  • Request a feature

Contribute to Fortress Rollback

Please send a GitHub Pull Request with a clear list of what you've done (read more about pull requests). When you send a pull request, it would be great if you wrote unit- or integration tests for your changes. Please format your code via cargo fmt and make sure all of your commits are atomic (one feature per commit).

Always write a clear log message for your commits. One-line messages are fine for small changes, but bigger changes should look like this:

Bash
git commit -m "prefix: brief summary of the commit

A paragraph describing what changed and its impact."

With the following prefixes commonly used:

  • feat: for new features
  • fix: for fixing a bug
  • doc: for adding/changing documentation
  • test: for adding/changing tests
  • chore: for any minor code cleanups

More about the GitHub flow. More about the Conventional Commits Specification

Local Hooks

This project uses pre-commit for fast local feedback before commits and pushes. CI runs exhaustive Rust, documentation, and feature-matrix checks; developers can run those checks manually when needed.

Setup

Bash
# Install pre-commit (requires Python)
pip install pre-commit

# Install the git hooks managed by .pre-commit-config.yaml
pre-commit install --hook-type pre-commit --hook-type pre-push

What's Checked

The pre-commit hook is intentionally fast (<10 seconds) and file-scoped. It validates:

  • Code formatting: rustfmt for changed Rust files
  • Markdown formatting: markdownlint for consistent documentation
  • General hygiene: Trailing whitespace, YAML/TOML syntax, merge conflicts

Slow full-repository checks such as cargo clippy, cargo doc, link validation, and cargo hack are manual/CI checks rather than blocking every commit or push.

Running Manually

Bash
# Run fast pre-commit hooks on current changes
pre-commit run

# Run manual full-repository hooks
pre-commit run --hook-stage manual cargo-clippy --all-files
pre-commit run --hook-stage manual rustdoc-links --all-files
pre-commit run --hook-stage manual check-links --all-files
pre-commit run --hook-stage manual cargo-hack-check --all-files
pre-commit run --hook-stage manual sync-wiki --all-files
pre-commit run --hook-stage manual check-llm-skills --all-files
pre-commit run --hook-stage manual check-shell-portability --all-files
pre-commit run --hook-stage manual sync-version-check --all-files
pre-commit run --hook-stage manual check-doc-claims --all-files
pre-commit run --hook-stage manual check-derive-bounds --all-files

# Run a specific hook
pre-commit run markdownlint --all-files

# Run the link checker script directly
python3 scripts/docs/check-links.py --verbose

# Verify markdown code samples compile
./scripts/docs/verify-markdown-code.sh

# With verbose output for debugging
./scripts/docs/verify-markdown-code.sh --verbose

# Check a specific file
./scripts/docs/verify-markdown-code.sh docs/user-guide.md

# Check for invalid rustdoc-style code fence attributes in markdown
./scripts/docs/check-code-fence-syntax.sh

# Check a specific directory
./scripts/docs/check-code-fence-syntax.sh docs/

Bypassing Hooks (Emergencies Only)

Bash
git commit --no-verify -m "emergency fix"

Note: CI will still run these checks on pull requests