nikivdev/code · error

Quality gate blocked commit

Error message

Quality gate blocked commit

What it means

The commit command runs quality gates before committing; when gate mode is "block" and issues were found, it restores the staged snapshot and aborts the commit with this error. It exists to stop low-quality changes from entering history while pointing the user at the reported issues and the override flag.

Solutions

  1. Fix the issues listed above the error in the output.
  2. If the issues are acceptable, re-run with `f commit --skip-quality` to override the gate.
  3. Switch gate mode from "block" to "warn" in quality config if warnings should not block.
  4. Commit in a clean state after re-running formatters/linters locally.

Example fix

// before
f commit
// error: Quality gate blocked commit
// after (intentional override)
f commit --skip-quality
Defensive patterns

Strategy: validation

Validate before calling

// run the same gates locally before committing
// e.g. `cargo fmt --check && cargo clippy -- -D warnings && cargo test`

Try / catch

if let Err(e) = commit_cmd.run() {
    if e.to_string().contains("Quality gate blocked commit") {
        eprintln!("Fix reported issues, or re-run with: f commit --skip-quality");
    }
}

Prevention

When it happens

Trigger: Running `f commit` with quality gates configured in block mode when the staged changes violate one or more gates (lint/format/complexity/test issues printed just above the error).

Common situations: Failing linters or formatters on staged code; quality score below threshold; new gate rules added by a config/version update that existing code violates.

Related errors


AI-assisted analysis of nikivdev/code@a747e741ae (2026-09-01). Data as JSON: /api/errors/fdbcb00216aedc28. Report an issue: GitHub.

Appendix: source

Thrown at src/commit.rs:4232

        let mut gate_failures: Vec<String> = quality.gate_failures.clone();
        if gate_overrides.skip_docs {
            gate_failures.retain(|failure| !is_doc_gate_failure(failure));
        }
        if gate_overrides.skip_tests {
            gate_failures.retain(|failure| !is_test_gate_failure(failure));
        }

        if !gate_failures.is_empty() && mode != "off" {
            println!();
            for failure in &gate_failures {
                eprintln!("  quality: {}", failure);
            }

            if mode == "block" {
                eprintln!("\nCommit blocked by quality gates.");
                eprintln!("Fix the issues above, or override with: f commit --skip-quality");
                restore_staged_snapshot_in(&repo_root, &staged_snapshot)?;
                bail!("Quality gate blocked commit");
            } else {
                eprintln!("\nQuality warnings above. Proceeding with commit.");
            }
        }

        // Auto-generate/update feature docs if enabled
        let auto_docs = quality_config.auto_generate_docs.unwrap_or(true);
        if auto_docs && mode != "off" && !gate_overrides.skip_docs {
            let commit_sha_preview = git_capture_in(&repo_root, &["rev-parse", "--short", "HEAD"])
                .unwrap_or_else(|_| "unknown".to_string())
                .trim()
                .to_string();

            match features::apply_quality_results(&repo_root, quality, &commit_sha_preview) {
                Ok(actions) => {
                    for action in &actions {
                        println!("  feature docs: {}", action);
                    }

View on GitHub (pinned to a747e741ae)