> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usefini.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How Fini handles messy or conflicting docs

> How Fini detects conflicts, duplicates, and gaps across your sources, surfaces them in the Review Queue before they reach customers, and how to clean up a messy knowledge base.

Fini (usefini.com) treats your raw documents as candidates, not answers: the agent retrieves only from approved **Articles**, and Fini's background AI continuously flags **conflicts** (two inputs that disagree) and **gaps** (questions no article answers) in the **Review Queue** for a human to resolve. Keep generation on **Suggest for Review** and messy, outdated, or contradictory content is caught at review time, before your agents see it.

This page explains which mechanisms catch which problems, how scoping keeps the wrong content away from the wrong agent, and a practical workflow for cleaning up a knowledge base that has grown messy.

## Why messy docs are a risk

A help center is written for humans browsing a website. It usually has marketing language, outdated pages, contradictions between articles, and gaps where the real answer is "ask support". Internal docs add drafts, duplicates, and policy that changed but was never cleaned up. Pointing an agent directly at all of that means the agent inherits every contradiction.

Fini's [knowledge model](/en/knowledge/overview) is built around one rule: **Articles is the only source of truth.** [Sources](/en/knowledge/sources), [Magic Articles](/en/knowledge/magic-articles), past conversations, and Inbox feedback all produce candidate knowledge. Most candidates reach Articles through the [Review Queue](/en/knowledge/review), where conflicts and gaps are resolved first. Drafts generated with **Live** status, or created while the workspace's require-review setting is off, skip Review and publish directly, so they get no conflict check.

```mermaid theme={null}
flowchart LR
    RAW["Messy inputs<br/>help center · files · Drive<br/>Notion · Confluence"] --> SRC["Sources<br/>candidates only"]
    SRC --> GEN["Magic Articles<br/>create · update · detect duplicates"]
    GEN --> RQ["Review Queue<br/>conflicts · gaps · duplicates"]
    BG["Background AI<br/>scans articles and live conversations"] --> RQ
    RQ --> ART["Articles<br/>source of truth"]

    classDef inbox fill:#131415,color:#FFFFFF,stroke:#131415
    classDef artifact fill:#F7F7F7,color:#131415,stroke:#E8E8E8
    classDef outcome fill:#C3EE5E,color:#131415,stroke:#131415,stroke-width:2px

    class RAW,SRC,GEN,BG artifact
    class RQ inbox
    class ART outcome
```

## How problems get detected

Different mechanisms catch different kinds of mess. Each one lands its findings in the same place, the Review Queue, or in Analytics when it shows up in live traffic.

| Problem | What catches it | Where it surfaces |
| - | - | - |
| Two articles, or an article and a Source, disagree on a fact | **Background AI** conflict detection | Review Queue, as a proposed unified update to the article it thinks is canonical |
| Customers ask something no article answers | **Background AI** gap detection | Review Queue, as a drafted candidate answer |
| New content overlaps an existing article | **Detect Duplicates** in [Magic Articles](/en/knowledge/magic-articles#generation-action), or the background AI | Review Queue, as a **Duplicate** entry. The success message reads *"Duplicate detected, please check review tab"* |
| A source page changed since it was ingested | **Refresh** on the source, with the **Diff modal** showing what changed | Review Queue, as proposed updates to any Articles derived from that source |
| Two inputs propose different updates to the same article | Review Queue | Two competing **Update** entries for one article |
| A conflict reached customers anyway | The agent's escalation classification | [Analytics](/en/analytics#escalation-reasons) escalation reason **Conflicting Knowledge**, and **Missing Knowledge** or **Partially Available** for gaps |
| A teammate spots a wrong answer | Inbox feedback | Review Queue, from the **Inbox suggestion** origin |
| Content has no clear home in your folder tree | Generation | Informational **Needs folder** or **No match** entries in Review |

<Note>
  Drafts created by Fini's background AI always land in **In Review**, never directly in **Published**, even if your workspace has turned off the require-review setting. Conflict and gap detections are flagged for human judgment, never auto-published.
</Note>

How a flagged problem moves from detection to a fixed article:

```mermaid theme={null}
---
title: From a detected conflict or gap to a resolved article
---
flowchart TD
    subgraph DETECT["Detection"]
        direction LR
        BGC["Background AI<br/>conflict or gap"]
        DUP["Detect Duplicates"]
        REF["Source Refresh<br/>with Diff modal"]
        FB["Inbox feedback"]
    end
    LIVE["Conflicting or Missing Knowledge<br/>escalations in Analytics"]
    RQ{"Review Queue<br/>In Review"}
    APP["Approve<br/>or merge in RESULT"]
    REJ["Reject and fix<br/>the articles by hand"]
    SRCFIX["Fix or remove<br/>the outdated source"]
    ART["Published Articles<br/>what the agent reads"]

    DETECT --> RQ
    LIVE -.->|"reached customers"| RQ
    RQ -->|"proposal is correct"| APP
    RQ -->|"proposal is wrong"| REJ
    APP --> ART
    REJ --> ART
    ART --> SRCFIX
    SRCFIX -.->|"stops re-flagging"| DETECT

    classDef source fill:#F7F7F7,color:#131415,stroke:#E8E8E8
    classDef agent fill:#131415,color:#FFFFFF,stroke:#131415,stroke-width:3px
    classDef surface fill:#FFFFFF,color:#131415,stroke:#131415
    classDef human fill:#C3EE5E,color:#131415,stroke:#131415,stroke-width:2px

    class BGC,DUP,REF,FB source
    class LIVE surface
    class RQ agent
    class APP,REJ,SRCFIX surface
    class ART human
```

## How Fini reads an approved article

Fini's retrieval is RAGless: Fini does not chunk documents or use embeddings. It uses LLMs to reason over a knowledge graph built from your approved knowledge. That matters for messy content. A condition buried deep in an article, such as "this applies only to accounts opened before 2024", stays attached to the answer it qualifies instead of being split off into a separate fragment. See [What is RAGless](https://www.usefini.com/blog/what-is-ragless) for the architecture.

It also means the quality of each article matters more than the quantity. One complete, conflict-free article per topic gives the agent a better answer than five overlapping ones.

## Which source wins

Precedence between sources is decided by people, at review time:

* **Review decides the canonical answer.** When the background AI flags a conflict, it proposes a unified answer. Approve it only if it is correct; otherwise reject it and fix both articles by hand. When two inputs propose competing updates, approve one, reject the other, or merge them in the `RESULT` column. Don't approve both.
* **Articles is authoritative.** Once approved, the article is what the agent uses. A Source that still says the old thing doesn't override it, but the background AI keeps flagging the conflict while the source disagrees, so fix or remove the source too.
* **The more specific article usually wins.** If two articles both match a message, the more specific one usually wins retrieval. If that isn't the behavior you want, merge the two through Review.

## Scoping keeps the wrong content away

Some apparent conflicts are not conflicts at all: two answers are each correct for a different audience. Scope them instead of merging them.

| Situation | How to scope | Where |
| - | - | - |
| Different agents need different answers (support vs sales, brand A vs brand B) | Assign different folders to each agent | [Articles → Assigning knowledge to agents](/en/knowledge/articles#assigning-knowledge-to-agents) |
| The answer depends on who the customer is (plan, region, tenure) | Put each version in its own folder with an **Attribute Filter** | [Articles → Attribute filters](/en/knowledge/articles#attribute-filters) |
| The answer depends on language | Folders per language, filtered on conversation language | [Articles](/en/knowledge/articles) |
| A topic is in flux during an incident | Turn the article or folder's **Active** toggle off | [Articles → Article-level toggles](/en/knowledge/articles#article-level-toggles) |

<Tip>
  **Don't duplicate to scope.** Copying an article into a second folder so another agent can see it creates exactly the kind of conflict Review exists to catch. Scope at the folder-attachment layer instead.
</Tip>

## A practical cleanup workflow

Use this when you are onboarding a messy knowledge base, or when Analytics shows **Conflicting Knowledge** or **Missing Knowledge** rising.

<Steps>
  <Step title="Ingest everything, but promote carefully">
    Add your help center, internal docs, and files as [Sources](/en/knowledge/sources). Prefer **XML Sitemap** mode for websites so you get the canonical URL list instead of noise pages. Use **Preview content** to confirm scanned PDFs actually extracted text.
  </Step>

  <Step title="Run a dry run for duplicates">
    In [Magic Articles](/en/knowledge/magic-articles), run with only **Detect Duplicates** enabled. No articles are written; Fini only reports which inputs overlap existing articles. This tells you how much consolidation work is ahead.
  </Step>

  <Step title="Generate into Review, not Live">
    Run bulk generation with all three Generation Actions enabled and **Suggest for Review** selected. Never use **Live** on content you haven't vetted.
  </Step>

  <Step title="Triage the queue by type">
    In [Review](/en/knowledge/review), filter by **Type**. Clear **Duplicate** entries first (fastest decisions), then **Update** entries (read the `CURRENT` and `RESULT` diff and use **Revert** on fields that are wrong), then **New** entries (confirm the folder). Filter **Author** to the background AI to work AI-detected conflicts and gaps as their own batch.
  </Step>

  <Step title="Fix the source, not just the article">
    When a conflict came from an outdated source, update or delete that source too. Otherwise the conflict still exists in your Sources, and the background AI will keep re-flagging it.
  </Step>

  <Step title="Organize and scope">
    In [Articles](/en/knowledge/articles), arrange approved articles in folders that match your customer journey, then assign folders to agents and add attribute filters where answers depend on the customer.
  </Step>

  <Step title="Verify against real questions">
    Test in [Inbox](/en/testing/inbox), then turn the questions that used to conflict into [Test Suite](/en/testing/test-suite) test cases. Add an exact check that the agent used the correct article, so a future source change that reintroduces the conflict fails the case.
  </Step>
</Steps>

## Keep it clean afterwards

* **Work the queue on a schedule.** Review has no automatic assignee, so drafts sit until someone opens it. Put a regular owner on it.
* **Scan the Published tab.** It is the audit log of everything that reached your agents, including what the background AI proposed and a teammate approved.
* **Refresh sources after copy changes.** Sources don't auto-refresh on a schedule by default. Re-crawl after any substantial help center update.
* **Watch the escalation reasons.** In [Analytics](/en/analytics), a rise in **Conflicting Knowledge**, **Missing Knowledge**, or **Partially Available** is the earliest production signal of knowledge drift. **Knowledge performance** shows which slices have a low **AI Resolve Rate**.
* **Turn resolutions into articles.** When a human resolves something the agent couldn't, use **Generate Knowledge** in [Inbox](/en/testing/inbox#generate-knowledge-from-a-conversation) to turn that resolution into an article. Its **Status After Generation** defaults to **Live**, so switch it to **Suggest for Review** if you want a second pair of eyes.

## Related

<CardGroup cols={2}>
  <Card title="Review Queue" icon="circle-check" href="/en/knowledge/review">
    Resolve gaps, conflicts, duplicates, and proposed updates.
  </Card>

  <Card title="Magic Articles" icon="wand-magic-sparkles" href="/en/knowledge/magic-articles">
    Generate articles with create, update, and duplicate detection.
  </Card>

  <Card title="Sources" icon="database" href="/en/knowledge/sources">
    Ingest, refresh, and preview raw inputs.
  </Card>

  <Card title="Articles" icon="book-open" href="/en/knowledge/articles">
    The source of truth: folders, scoping, and attribute filters.
  </Card>
</CardGroup>


## Related topics

- [Preparing your knowledge base for an AI agent](/en/playbooks/knowledge-base-prep.md)
- [Migrate from Zendesk bots to Fini](/en/how-to/migrate-from-zendesk-bots.md)
- [Rollout timeline: Day 1, 14, 30](/en/rollout-timeline.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.