# Auto-Fix vs Ask-User Findings in no-mistakes: Understanding Pipeline Decisions

> Understand the difference between auto-fix and ask-user findings in no-mistakes pipeline decisions. Auto-fix applies safe changes automatically, while ask-user requires manual approval for functional impact.

- Repository: [Kun Chen/no-mistakes](https://github.com/kunchenguid/no-mistakes)
- Tags: deep-dive
- Published: 2026-07-19

---

**In no-mistakes, auto-fix findings are applied automatically by the engine for safe, non-functional issues, while ask-user findings pause execution at the `fix_review` gate and require manual approval for any change affecting functional behavior or product intent.**

The `no-mistakes` engine classifies every issue discovered during a pipeline run as a **finding**, with each entry carrying an **action** field that dictates how the repair proceeds. Understanding the distinction between **auto-fix** and **ask-user** classifications lets you predict when the CLI resolves issues silently versus when it demands human intervention. This logic is implemented across the `kunchenguid/no-mistakes` repository, from type definitions in [`internal/types/findings.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/types/findings.go) to the execution engine in [`internal/pipeline/steps/review.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/steps/review.go).

## Defining Auto-Fix and Ask-User Actions

### Auto-Fix: Safe, Automated Repairs

The **auto-fix** action indicates that an issue is safe to repair automatically without human interruption. According to the contractual definition in [[`internal/pipeline/steps/review.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/steps/review.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/steps/review.go#L163-L169), these are "non-functional, non-user-visible issues" that can be fixed "without any discussion about the author's intent." When a step returns only auto-fix findings, the executor enters an **auto-fix loop**, repeatedly invoking the repair agent until the findings disappear or the maximum retry count is reached. This behavior is verified in [[`internal/pipeline/executor_autofix_test.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/executor_autofix_test.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/executor_autofix_test.go#L351-L371).

### Ask-User: Human Review for Ambiguous Changes

The **ask-user** action marks findings that require a human decision because they touch functional requirements, product behavior, or any change that could be controversial. As defined in [[`internal/pipeline/steps/review.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/steps/review.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/steps/review.go#L207-L215), even if an issue "seems obviously wrong," the pipeline defaults to asking for review when intent is unclear. If any ask-user findings remain after auto-fix rounds, the pipeline **parks** at the `fix_review` gate, displaying a "🛑 ask-user" badge in the PR summary ([[`internal/pipeline/steps/prsummary.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/steps/prsummary.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/steps/prsummary.go#L1023-L1025)) and waiting for commands like `axi respond` or `axi approve` to resume.

## Source Code Implementation Details

### Action Constants and Defaults

The string constants `ActionAutoFix = "auto-fix"` and `ActionAskUser = "ask-user"` are declared in [[`internal/types/findings.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/types/findings.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/types/findings.go#L12-L13). The helper function `actionOrDefault` ensures that any finding with an empty or missing action field defaults to `ask-user` ([[`internal/types/findings.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/types/findings.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/types/findings.go#L232-L235)), guaranteeing the pipeline never silently auto-fixes ambiguous issues.

### User-Facing Documentation

The CLI help text generated from [[`internal/skill/skill.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/skill/skill.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/skill/skill.go#L162-L166) explicitly states that **review auto-fix is disabled by default** and that ask-user findings **park for your decision** ([[`internal/skill/skill.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/skill/skill.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/skill/skill.go#L310)). This aligns with the engine's safety-first approach of requiring explicit opt-in for automatic repairs.

## Pipeline Execution Behavior

### The Auto-Fix Loop

When a step returns exclusively auto-fix findings, the executor immediatly begins applying fixes without stopping. The loop continues until all findings are resolved or the configured retry limit is reached. Tests in [[`executor_autofix_test.go`](https://github.com/kunchenguid/no-mistakes/blob/main/executor_autofix_test.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/executor_autofix_test.go) verify that this loop only initiates when no ask-user findings are present.

### Parking at the Fix Review Gate

If ask-user findings exist, the pipeline halts at the `fix_review` gate. The approval flow demonstrated in [[`executor_approval_test.go`](https://github.com/kunchenguid/no-mistakes/blob/main/executor_approval_test.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/executor_approval_test.go#L81-L88) shows how the run remains in a pending state until explicitly approved, rejected, or edited by the user.

## Practical Examples

### Auto-Fix Finding JSON Structure

```json
{
  "findings": [
    {
      "id": "lint-1",
      "severity": "error",
      "description": "missing error check",
      "action": "auto-fix"
    }
  ],
  "summary": "1 lint issue"
}

```

### Ask-User Finding JSON Structure

```json
{
  "findings": [
    {
      "id": "review-1",
      "severity": "warning",
      "description": "hard-coded API URL; should be configurable",
      "action": "ask-user"
    }
  ],
  "summary": "1 issue requiring review"
}

```

### CLI Interaction Patterns

```bash

# Run pipeline; auto-fix findings resolve automatically

no-mistakes run

# Pipeline pauses with ask-user findings; manual intervention required

axi respond  # or axi approve, axi reject

```

## Summary

- **Auto-fix** applies to non-functional, mechanical, or low-risk code-quality issues that do not alter author intent, allowing the pipeline to proceed without interruption.
- **Ask-user** applies to functional changes, design choices, or ambiguous issues where the pipeline cannot safely infer intent, causing the run to park at the `fix_review` gate.
- Missing or empty action fields **default to ask-user** via the `actionOrDefault` helper in [`internal/types/findings.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/types/findings.go), preventing silent automatic repairs.
- The executor enters an **auto-fix loop** for eligible findings but **parks for approval** when ask-user items remain, rendering a "🛑 ask-user" badge in the PR summary.

## Frequently Asked Questions

### What happens if a finding has no action field specified?

The `actionOrDefault` function in [[`internal/types/findings.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/types/findings.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/types/findings.go#L232-L235) treats empty or missing action fields as **ask-user**. This safety default ensures the pipeline never automatically fixes an issue unless explicitly marked as safe to do so.

### Can I enable auto-fix for review findings that default to ask-user?

Yes, but it requires explicit configuration. According to the skill documentation in [[`internal/skill/skill.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/skill/skill.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/skill/skill.go#L162-L166), review auto-fix is disabled by default. You can adjust the `auto_fix.review` flag in your configuration to change this behavior, though ask-user remains the recommended default for functional changes.

### How do I resume a pipeline paused at the fix_review gate?

When ask-user findings park the execution, use the `axi respond` command to provide feedback, or `axi approve` to accept the proposed changes. The approval workflow is demonstrated in [[`executor_approval_test.go`](https://github.com/kunchenguid/no-mistakes/blob/main/executor_approval_test.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/executor_approval_test.go#L81-L88), showing that the run only continues after explicit human action.

### Where does the "🛑 ask-user" badge appear in the output?

The badge is rendered in the PR summary UI within [[`internal/pipeline/steps/prsummary.go`](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/steps/prsummary.go)](https://github.com/kunchenguid/no-mistakes/blob/main/internal/pipeline/steps/prsummary.go#L1023-L1025). This visual indicator appears alongside any findings that require manual review, making it clear which issues blocked the automatic pipeline completion.