> ## 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.

# Review Queue

> The consolidation gate for Fini's knowledge graph. Every new piece of knowledge flows here so gaps and conflicts get resolved before reaching Articles.

Review Queue (shown in the dashboard as **Reviews**) is the consolidation layer in Fini's knowledge model. Every piece of knowledge that enters Fini — whether you authored it, your team generated it, or Fini's own background AI proposed it — can land here as a draft. A teammate reviews, edits, and approves before it reaches [Articles](/en/knowledge/articles), which is the source of truth your agents retrieve from.

<Frame>
  <img src="https://mintcdn.com/fini/zef_RDWlJqADKDlS/images/en/knowledge/review-approvals/list.png?fit=max&auto=format&n=zef_RDWlJqADKDlS&q=85&s=389574f5ba2b97aaab1ddece707e99f1" alt="Review page in the Fini Demo workspace showing the Reviews and Approvals queue, In Review and Published tabs, Author, Origin, and Type filters, and an empty editor pane prompting the user to select an article to review" width="1680" height="1050" data-path="images/en/knowledge/review-approvals/list.png" />
</Frame>

<Info>
  **Why Review exists.** Knowledge enters Fini from many places — Sources refreshes, Magic Articles runs, Inbox feedback, manual edits in Articles, and a background AI that continuously scans for gaps and conflicts. Without a consolidation layer, all of this would write directly into Articles, and you'd end up with duplicates, contradictions, and silent gaps. Review's job is to surface **conflicts** (two inputs disagree), **gaps** (a customer question no article answers), and **proposed updates** in one queue so a human can resolve them before your agents see them.
</Info>

## Two tabs, two destinations

When any input produces a new piece of knowledge, the author picks one of two destinations:

<CardGroup cols={2}>
  <Card title="In Review" icon="hourglass-half">
    The draft lands in the **In Review** tab and waits for human approval. Editable, rejectable, mergeable with concurrent edits. Nothing reaches agents until someone approves.
  </Card>

  <Card title="Published" icon="circle-check">
    The draft skips Review and goes live immediately. Lands directly in the **Published** tab as an audit record. Agents retrieve from it on the next conversation.
  </Card>
</CardGroup>

The choice is per-draft. A trusted bulk import might go straight to Published; a Magic Articles run from a sales transcript probably goes In Review. The two tabs aren't a workflow progression — they're two routes a draft can take based on the trust level of the input.

<Note>
  Drafts created by Fini's **background AI** always land in **In Review**, never directly in Published. The whole point of the AI's gap-and-conflict detection is to flag work for a human, not to auto-publish.
</Note>

## Where drafts come from

Drafts arrive in the queue from several origins. The **Origin** filter exposes each stored article origin explicitly, including manual edits, API-created articles, Magic Articles, source imports, Inbox suggestions, Fix Review, overnight generation, and Fini Scout.

<CardGroup cols={2}>
  <Card title="Inbox feedback" icon="inbox">
    A teammate left feedback on a live conversation — *"this answer was wrong,"* *"this missed a case,"* *"the customer asked X and we have no article for it."* Fini turns that feedback into a new article, an update, or a flagged conflict, and routes it here.
  </Card>

  <Card title="Sources" icon="database">
    A [Source](/en/knowledge/sources) was refreshed and the underlying content changed. Any Articles derived from that Source get a proposed update queued here for review.
  </Card>

  <Card title="Magic Articles" icon="wand-magic-sparkles">
    A [Magic Articles](/en/knowledge/magic-articles) run set to **Suggest for Review** lands here. Includes drafts retrained from past conversations.
  </Card>

  <Card title="Articles (manual)" icon="book-open">
    A teammate edited an article directly in [Articles](/en/knowledge/articles) and saved with review-and-approval enabled.
  </Card>
</CardGroup>

Plus a fifth, distinct origin:

<Card title="Background AI" icon="robot" horizontal>
  Fini runs a continuous AI pass over your knowledge graph and your live conversations. When it detects a **gap** (a question customers are asking that no article answers) or a **conflict** (two articles or two inputs that disagree), it drafts a proposed resolution and queues it here. You didn't ask for it — Fini surfaced it on its own. This is one of the most valuable origins to review regularly, because it catches problems before a customer does.
</Card>

The fact that every origin funnels into the same queue is the whole point. A reviewer working through the backlog sees Sources refreshes, Magic Articles drafts, Inbox feedback, manual edits, API-created drafts, and AI-detected gaps and conflicts as one stream - and resolves them together before any of it goes live.

## Kinds of changes

The **Type** filter distinguishes three kinds of work:

* **New** — a brand-new draft article with no live predecessor. The diff view shows the article in full (the `CURRENT` column is empty).
* **Update** — a modification to an existing live article. The diff view shows old → new for each modified field, with strikethrough text in the `CURRENT` column and the proposed final state in `RESULT`. Modified sections get a **MODIFIED** badge.
* **Duplicate** — an overlap was flagged (either by Magic Articles' Detect Duplicates, or by the background AI). A human confirms whether it's actually a duplicate or a more nuanced case.

Some entries are informational instead of publishable:

* **Needs folder** — Fini found content that belongs in your knowledge tree, but could not find a folder that can hold a new article. Create the right folder in [Articles](/en/knowledge/articles), then generate again.
* **No match** — Fini could not match the content to the current knowledge tree. Add a folder or instruction that gives the content a clear destination, then generate again.

Informational entries explain why nothing was created. They cannot be edited or published from Review; dismiss them after you have fixed the underlying tree or generation input.

## The review surface

The page splits into three vertical regions:

* **List (left)** — every draft in queue, filterable by tab and by Author / Origin / Type chips at the top.
* **Diff or editor (center)** — the article being reviewed, with the proposed change shown as a two-column side-by-side diff: `CURRENT` on the left, `RESULT` on the right.
* **Header actions (top of editor)** — **Reject Suggestion** and **Save & Publish** buttons, plus a section title that distinguishes new drafts (*"Review Draft Update"*) from updates to live articles (*"Review Updated Article"*).

When no draft is selected, the editor pane reads *"Select an article to review."* When the queue is empty, the list reads *"No drafts."*

## Filters

Above the list, three filter chips narrow the queue:

* **Author** — multi-select of teammates who created drafts in this workspace, plus an entry for drafts produced by the background AI. Useful when divvying up a backlog or focusing specifically on AI-detected items.
* **Origin** — Manual article, Created via API, Magic article, Source import, Inbox suggestion, Fix review, Overnight generation, or Fini Scout. Use to focus on one input stream at a time.
* **Type** — New, Update, or Duplicate. Use to triage by complexity: Duplicates are usually the fastest decisions, Updates need diff-reading, New articles need folder placement.

Filters compose (Author = Anna AND Origin = Magic Article). The filter state is per-session; refreshing the page resets to the default (everything).

## Reviewing a draft

<Steps>
  <Step title="Pick a draft from the list">
    Click an entry. The editor loads with the diff (for updates) or the full article (for new drafts). The header shows the article title and whether this is a new draft or an update.
  </Step>

  <Step title="Read the diff">
    The center pane is a two-column side-by-side:

    * **CURRENT** (left) — the live version of each field. For updates, removed content is shown with red strikethrough.
    * **RESULT** (right) — the proposed final state after the change is approved.

    Every field is shown: Title, Main Knowledge, Agent Instruction, Keywords, Questions. Fields that changed get a **MODIFIED** badge. Pay particular attention to the Questions list — that's where retrieval issues most often originate.
  </Step>

  <Step title="Revert specific changes (optional)">
    Each modified field has a **Revert** button in its header. Clicking it keeps the rest of the proposed changes but reverts that one field back to the live version. Use this when most of the draft is good but one section is wrong — you don't have to reject the whole thing.
  </Step>

  <Step title="Edit in place if needed">
    Every field in the `RESULT` column is editable directly. Fix typos, tighten the Title, drop a paragraph that's too internal. Your edits become part of the published version.
  </Step>

  <Step title="Confirm or set the target folder">
    For new drafts, the folder picker confirms where the article will land. Magic Articles and the background AI pre-fill their best guess; correct if needed. Save & Publish unlocks once a folder is set.
  </Step>

  <Step title="Save & Publish or Reject Suggestion">
    **Save & Publish** writes the changes to the live article (or creates the new article); the entry moves to the Published tab.

    **Reject Suggestion** discards the draft (for new drafts) or rejects the proposed update (for updates; the live article stays as it was). For AI-detected items, rejecting also tells Fini's background AI to deprioritize that signal so it doesn't keep re-flagging.
  </Step>
</Steps>

## Resolving gaps and conflicts

This is the consolidation work Review exists to enable. Most of these scenarios are surfaced automatically by the background AI; some come from inputs that disagree.

<AccordionGroup>
  <Accordion title="The background AI flagged a gap" icon="square-dashed">
    A customer (or many customers) asked something no article answers. Fini drafts a candidate answer from whatever context it can pull — transcripts, related articles, public Sources — and queues it for review.

    Read the draft critically. If the answer is right, edit and approve. If it's a genuine gap but the AI's guess is thin, treat the draft as a *prompt* — go author a proper article in [Articles](/en/knowledge/articles) from a real source, and reject the AI's draft.
  </Accordion>

  <Accordion title="The background AI flagged a conflict" icon="triangle-exclamation">
    Two articles, or an article and a Source, disagree on the same fact. The AI drafts a proposed unified answer and queues it as an update to whichever article it thinks is canonical.

    Approve only if the unified answer is actually correct. Otherwise, reject and resolve the conflict manually by editing both articles in [Articles](/en/knowledge/articles).
  </Accordion>

  <Accordion title="Inbox feedback proposed a correction" icon="inbox">
    A teammate marked an agent reply as wrong in Inbox. Fini turns that feedback into either a new article (if the gap is real) or an update to an existing one (if the answer was close but wrong).

    Confirm the feedback was actionable, edit the draft, and publish. Reject if the original reply was actually correct and the feedback was a mistake.
  </Accordion>

  <Accordion title="Two inputs disagree on the same article" icon="code-merge">
    A Sources refresh proposes one update, a Magic Articles run from a recent transcript proposes another. Both show up in the queue as competing updates to the same article.

    Approve one, reject the other — or edit the `RESULT` column to merge the two into a single canonical answer before publishing. Don't approve both; the second one will create a conflicting update that lands right back here.
  </Accordion>

  <Accordion title="A draft duplicates an existing article" icon="copy">
    A Duplicate-type entry means an overlap was flagged without writing. Open the draft, compare to the existing article in [Articles](/en/knowledge/articles), and either reject (the existing article is sufficient) or edit the existing article to incorporate anything new from the draft.
  </Accordion>

  <Accordion title="The draft is in the wrong folder" icon="folder">
    Common for Magic Articles and AI-generated drafts. The folder picker on the right is the fix — set the correct target before Save & Publish, or move the article in [Articles](/en/knowledge/articles) after the fact.
  </Accordion>
</AccordionGroup>

## Concurrent edits

When two teammates open the same draft, the second one's edits are based on a stale snapshot. The system resolves this with a **merge view**: when you try to Save & Publish a draft that's been edited since you opened it, you're shown the other person's edits alongside yours and asked to confirm the merged result before publishing.

If a teammate has already published your draft while you were reviewing, you'll see a notice when you try to approve. Refresh and start over from the new live version.

## The Published tab

The Published tab is a chronological list of recently approved articles and updates *plus* every draft that went live directly (bypassing review). It's the unified audit log of what reached your agents and when, regardless of which path it took:

* **Who published what, when** — including "Background AI" as the actor when the AI's draft was approved.
* The full diff of what each publish changed, in the same two-column `CURRENT` vs `RESULT` layout.
* A revert option for accidentally-approved changes (creates a new draft that reverts the change, which itself goes through review).

Use this tab as a daily scan when multiple teammates and the background AI are publishing in parallel — and as the audit trail when a customer-facing answer changes and you need to know why.

## Bulk operations

The list supports bulk selection. Each draft row has a checkbox, plus a **Select all** option at the top. Selected drafts can be rejected together (useful when clearing out a stale Magic Articles run that produced too many low-quality drafts at once).

Bulk approval is intentionally not supported — approval is the moment where conflicts get resolved, and that's a per-draft decision.

## Disabling review per workspace

Workspace settings expose a global "require review" toggle. With it off, *user-created* drafts go live without ever entering this queue. Use cases:

* Solo or small team where review overhead isn't worth it.
* An internal-only test workspace.
* A migration where you're bulk-importing trusted content that's already been reviewed elsewhere.

<Warning>
  Drafts from Fini's background AI always go to Review regardless of this setting — gap and conflict detections are flagged for human judgment, never auto-published. The toggle only affects user-initiated drafts.
</Warning>

<Note>
  For most teams, leave review on. Skipping it means every conflict and duplicate goes live unmediated, and the cleanup later is much more expensive than the per-draft approval friction now.
</Note>

## Why a draft is stuck

<AccordionGroup>
  <Accordion title="Nobody has been notified to review it" icon="bell-slash">
    Review Queue has no automatic assignee. If your team does not have a handoff in Slack or email, drafts sit until someone opens the queue and works them.
  </Accordion>

  <Accordion title="The author is also the only reviewer" icon="user-clock">
    Some teams treat Review as a second set of eyes. If the person who created the draft is also the only person watching the queue, items can sit indefinitely until someone else picks them up.
  </Accordion>

  <Accordion title="The folder has not been confirmed yet" icon="folder-open">
    For new drafts, **Save & Publish** stays blocked until the target folder is set. This is especially common for Magic Articles and background-AI drafts where the system has to guess the destination.
  </Accordion>

  <Accordion title="The entry says Needs folder or No match" icon="folder-xmark">
    This is an informational entry, not a draft article. **Needs folder** means the content matched part of the tree but there was no folder where Fini could create the article. **No match** means the content did not map to the current tree. Open Articles, create or adjust the destination folder, then rerun generation and dismiss the informational entry.
  </Accordion>

  <Accordion title="There is a concurrent-edit conflict" icon="code-merge">
    If another teammate changed or published the same draft while you were reviewing it, you'll need to resolve the merge view before the draft can move forward.
  </Accordion>

  <Accordion title="A related draft needs to be resolved first" icon="link-slash">
    Two drafts that both touch the same article can effectively block each other. Approving one usually turns the other into a merge conflict, so they need to be triaged as a pair.
  </Accordion>

  <Accordion title="Background AI keeps re-flagging the same issue" icon="rotate">
    Rejecting the AI's draft tells Fini you did not like that proposed fix. It does not remove the underlying signal. If customers keep asking the same unanswered question, or the same conflict still exists in Articles or Sources, the background AI will surface it again.
  </Accordion>
</AccordionGroup>


## Related topics

- [Articles](/en/knowledge/articles.md)
- [Home](/en/configuration/agent-home.md)
- [Fini Scout](/en/fini-scout.md)


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