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, which is the source of truth your agents retrieve from.
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.
Two tabs, two destinations
When any input produces a new piece of knowledge, the author picks one of two destinations:
In Review
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.
Published
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.
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.
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.
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.
Inbox feedback
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.
Sources
A Source was refreshed and the underlying content changed. Any Articles derived from that Source get a proposed update queued here for review.
Magic Articles
A Magic Articles run set to Suggest for Review lands here. Includes drafts retrained from past conversations.
Articles (manual)
A teammate edited an article directly in Articles and saved with review-and-approval enabled.
Plus a fifth, distinct origin:
Background AI
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.
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, 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.”
Agent scope and sidebar count
The Reviews badge in the sidebar counts pending drafts for the selected agent, using the same agent scope as the review list. Drafts in folders assigned to that agent are included, along with drafts whose folder has no agent assignment or cannot yet be matched to a folder.Switching agents updates this scope. The Author, Origin, and Type filters narrow the list further; they do not change the sidebar count. The badge is hidden when there is no selected agent, while the folder snapshot is unavailable, or when the count is zero.
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
1
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.
2
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.
3
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.
4
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.
5
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.
6
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.
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.
The background AI flagged a gap
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 from a real source, and reject the AI’s draft.
The background AI flagged a conflict
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.
Inbox feedback proposed a correction
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.
Two inputs disagree on the same article
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.
A draft duplicates an existing article
A Duplicate-type entry means an overlap was flagged without writing. Open the draft, compare to the existing article in Articles, and either reject (the existing article is sufficient) or edit the existing article to incorporate anything new from the draft.
The draft is in the wrong 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 after the fact.
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.
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.
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.
Why a draft is stuck
Nobody has been notified to review it
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.
The author is also the only reviewer
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.
The folder has not been confirmed yet
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.
The entry says Needs folder or No match
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.
There is a concurrent-edit conflict
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.
A related draft needs to be resolved first
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.
Background AI keeps re-flagging the same issue
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.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/schema.json","name":"Fini","description":"Documentation for Fini AI (usefini.com): build, deploy and run autonomous AI support agents. Fini is made by Fini Technologies Inc. and is not affiliated with fini.ai.","colors":{"primary":"#C3EE5E","light":"#C3EE5E","dark":"#A8D43E"},"logo":{"light":"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-light.png?fit=max\u0026auto=format\u0026n=fep-JMymNphpe1DQ\u0026q=85\u0026s=a460ff8bb507876712db2f0fb12c21e4","dark":"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026auto=format\u0026n=fep-JMymNphpe1DQ\u0026q=85\u0026s=8a2bf1d8a0e5c590ebb976eadccf26a9"},"favicon":"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026auto=format\u0026n=fep-JMymNphpe1DQ\u0026q=85\u0026s=8a2bf1d8a0e5c590ebb976eadccf26a9","footer":{"socials":{"x":"https://x.com/finichatAI","linkedin":"https://www.linkedin.com/company/usefini","youtube":"https://www.youtube.com/@finiai","instagram":"https://www.instagram.com/usefini.official","github":"https://github.com/ask-fini"}},"seo":{"metatags":{"msvalidate.01":"9A9FD7AB87AE2DEA257FE41F07C61E70"}},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","default":true,"href":"en/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"fini","hasAudioNarration":false,"actualSubdomain":"fini","customDomains":["docs.usefini.com"],"gitSource":{"type":"github","owner":"ask-fini","repo":"fini-docs","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af6e134e0d07833655260d7","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"en","tag":"API reference","count":207},{"language":"en","tag":"Documentation","count":56},{"language":"en","tag":"Knowledge","count":40},{"language":"en","tag":"Test Suite","count":31},{"language":"en","tag":"Use cases","count":29},{"language":"en","tag":"Deploy","count":21},{"language":"en","tag":"Intent Rules","count":18},{"language":"en","tag":"Conversations","count":14},{"language":"en","tag":"Integrations","count":14},{"language":"en","tag":"Agent Configuration","count":13}]},"assistantConfig":{"deflection":{"enabled":true,"email":"[email protected]","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"en/knowledge/review","slug":"/en/knowledge/review","pageMetadata":{"title":"Review Queue","description":"The consolidation gate for Fini's knowledge graph. Every new piece of knowledge flows here so gaps and conflicts get resolved before reaching Articles.","icon":"circle-check","href":"/en/knowledge/review"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"The consolidation gate for Fini’s knowledge graph. Every new piece of knowledge flows here so gaps and conflicts get resolved before reaching Articles.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Review Queue (shown in the dashboard as `,_jsx(_components.strong,{children:`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 `,_jsx(_components.a,{href:`/en/knowledge/articles`,children:`Articles`}),`, which is the source of truth your agents retrieve from.`]}),`\n`,_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/fini/_6SPlxEhJWDC08iH/images/en/knowledge/review-approvals/list.png?fit=max\u0026auto=format\u0026n=_6SPlxEhJWDC08iH\u0026q=85\u0026s=4803d7c8e7076582c5710b20efbab166`,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`,\"data-og-width\":`1680`,width:`1680`,\"data-og-height\":`1050`,height:`1050`,\"data-path\":`images/en/knowledge/review-approvals/list.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/fini/_6SPlxEhJWDC08iH/images/en/knowledge/review-approvals/list.png?w=280\u0026fit=max\u0026auto=format\u0026n=_6SPlxEhJWDC08iH\u0026q=85\u0026s=5e46bd3e1585551eb8e83d3776525890 280w, https://mintcdn.com/fini/_6SPlxEhJWDC08iH/images/en/knowledge/review-approvals/list.png?w=560\u0026fit=max\u0026auto=format\u0026n=_6SPlxEhJWDC08iH\u0026q=85\u0026s=42c59a0f0e8424837ac8218d8499c62e 560w, https://mintcdn.com/fini/_6SPlxEhJWDC08iH/images/en/knowledge/review-approvals/list.png?w=840\u0026fit=max\u0026auto=format\u0026n=_6SPlxEhJWDC08iH\u0026q=85\u0026s=4613bcfad7b84dc2c19c27e854e0ea55 840w, https://mintcdn.com/fini/_6SPlxEhJWDC08iH/images/en/knowledge/review-approvals/list.png?w=1100\u0026fit=max\u0026auto=format\u0026n=_6SPlxEhJWDC08iH\u0026q=85\u0026s=67d22b60f2d645ad9386d74bba23cf1e 1100w, https://mintcdn.com/fini/_6SPlxEhJWDC08iH/images/en/knowledge/review-approvals/list.png?w=1650\u0026fit=max\u0026auto=format\u0026n=_6SPlxEhJWDC08iH\u0026q=85\u0026s=379df502db2c91ef65106a7a890fcf8e 1650w, https://mintcdn.com/fini/_6SPlxEhJWDC08iH/images/en/knowledge/review-approvals/list.png?w=2500\u0026fit=max\u0026auto=format\u0026n=_6SPlxEhJWDC08iH\u0026q=85\u0026s=38ec8109b7e38fccaac4738f18cca415 2500w`})}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`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 `,_jsx(_components.strong,{children:`conflicts`}),` (two inputs disagree), `,_jsx(_components.strong,{children:`gaps`}),` (a customer question no article answers), and `,_jsx(_components.strong,{children:`proposed updates`}),` in one queue so a human can resolve them before your agents see them.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`two-tabs-two-destinations`,children:`Two tabs, two destinations`}),`\n`,_jsx(_components.p,{children:`When any input produces a new piece of knowledge, the author picks one of two destinations:`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`In Review`,icon:`hourglass-half`,children:_jsxs(_components.p,{children:[`The draft lands in the `,_jsx(_components.strong,{children:`In Review`}),` tab and waits for human approval. Editable, rejectable, mergeable with concurrent edits. Nothing reaches agents until someone approves.`]})}),_jsx(Card,{title:`Published`,icon:`circle-check`,children:_jsxs(_components.p,{children:[`The draft skips Review and goes live immediately. Lands directly in the `,_jsx(_components.strong,{children:`Published`}),` tab as an audit record. Agents retrieve from it on the next conversation.`]})})]}),`\n`,_jsx(_components.p,{children:`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.`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Drafts created by Fini’s `,_jsx(_components.strong,{children:`background AI`}),` always land in `,_jsx(_components.strong,{children:`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.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`where-drafts-come-from`,children:`Where drafts come from`}),`\n`,_jsxs(_components.p,{children:[`Drafts arrive in the queue from several origins. The `,_jsx(_components.strong,{children:`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.`]}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Inbox feedback`,icon:`inbox`,children:_jsxs(_components.p,{children:[`A teammate left feedback on a live conversation — `,_jsx(_components.em,{children:`“this answer was wrong,”`}),` `,_jsx(_components.em,{children:`“this missed a case,”`}),` `,_jsx(_components.em,{children:`“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.`]})}),_jsx(Card,{title:`Sources`,icon:`database`,children:_jsxs(_components.p,{children:[`A `,_jsx(_components.a,{href:`/en/knowledge/sources`,children:`Source`}),` was refreshed and the underlying content changed. Any Articles derived from that Source get a proposed update queued here for review.`]})}),_jsx(Card,{title:`Magic Articles`,icon:`wand-magic-sparkles`,children:_jsxs(_components.p,{children:[`A `,_jsx(_components.a,{href:`/en/knowledge/magic-articles`,children:`Magic Articles`}),` run set to `,_jsx(_components.strong,{children:`Suggest for Review`}),` lands here. Includes drafts retrained from past conversations.`]})}),_jsx(Card,{title:`Articles (manual)`,icon:`book-open`,children:_jsxs(_components.p,{children:[`A teammate edited an article directly in `,_jsx(_components.a,{href:`/en/knowledge/articles`,children:`Articles`}),` and saved with review-and-approval enabled.`]})})]}),`\n`,_jsx(_components.p,{children:`Plus a fifth, distinct origin:`}),`\n`,_jsx(Card,{title:`Background AI`,icon:`robot`,horizontal:true,children:_jsxs(_components.p,{children:[`Fini runs a continuous AI pass over your knowledge graph and your live conversations. When it detects a `,_jsx(_components.strong,{children:`gap`}),` (a question customers are asking that no article answers) or a `,_jsx(_components.strong,{children:`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.`]})}),`\n`,_jsx(_components.p,{children:`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.`}),`\n`,_jsx(Heading,{level:`2`,id:`kinds-of-changes`,children:`Kinds of changes`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Type`}),` filter distinguishes three kinds of work:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`New`}),` — a brand-new draft article with no live predecessor. The diff view shows the article in full (the `,_jsx(_components.code,{children:`CURRENT`}),` column is empty).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Update`}),` — a modification to an existing live article. The diff view shows old → new for each modified field, with strikethrough text in the `,_jsx(_components.code,{children:`CURRENT`}),` column and the proposed final state in `,_jsx(_components.code,{children:`RESULT`}),`. Modified sections get a `,_jsx(_components.strong,{children:`MODIFIED`}),` badge.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Some entries are informational instead of publishable:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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 `,_jsx(_components.a,{href:`/en/knowledge/articles`,children:`Articles`}),`, then generate again.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`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.`}),`\n`,_jsx(Heading,{level:`2`,id:`the-review-surface`,children:`The review surface`}),`\n`,_jsx(_components.p,{children:`The page splits into three vertical regions:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`List (left)`}),` — every draft in queue, filterable by tab and by Author / Origin / Type chips at the top.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Diff or editor (center)`}),` — the article being reviewed, with the proposed change shown as a two-column side-by-side diff: `,_jsx(_components.code,{children:`CURRENT`}),` on the left, `,_jsx(_components.code,{children:`RESULT`}),` on the right.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Header actions (top of editor)`}),` — `,_jsx(_components.strong,{children:`Reject Suggestion`}),` and `,_jsx(_components.strong,{children:`Save \u0026 Publish`}),` buttons, plus a section title that distinguishes new drafts (`,_jsx(_components.em,{children:`“Review Draft Update”`}),`) from updates to live articles (`,_jsx(_components.em,{children:`“Review Updated Article”`}),`).`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`When no draft is selected, the editor pane reads `,_jsx(_components.em,{children:`“Select an article to review.”`}),` When the queue is empty, the list reads `,_jsx(_components.em,{children:`“No drafts.”`})]}),`\n`,_jsx(Heading,{level:`2`,id:`agent-scope-and-sidebar-count`,children:`Agent scope and sidebar count`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Reviews`}),` badge in the sidebar counts pending drafts for the selected agent, using the same agent scope as the review list. Drafts in folders assigned to that agent are included, along with drafts whose folder has no agent assignment or cannot yet be matched to a folder.`]}),`\n`,_jsxs(_components.p,{children:[`Switching agents updates this scope. The `,_jsx(_components.strong,{children:`Author`}),`, `,_jsx(_components.strong,{children:`Origin`}),`, and `,_jsx(_components.strong,{children:`Type`}),` filters narrow the list further; they do not change the sidebar count. The badge is hidden when there is no selected agent, while the folder snapshot is unavailable, or when the count is zero.`]}),`\n`,_jsx(Heading,{level:`2`,id:`filters`,children:`Filters`}),`\n`,_jsx(_components.p,{children:`Above the list, three filter chips narrow the queue:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Filters compose (Author = Anna AND Origin = Magic Article). The filter state is per-session; refreshing the page resets to the default (everything).`}),`\n`,_jsx(Heading,{level:`2`,id:`reviewing-a-draft`,children:`Reviewing a draft`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Pick a draft from the list`,children:_jsx(_components.p,{children:`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.`})}),_jsxs(Step,{title:`Read the diff`,children:[_jsx(_components.p,{children:`The center pane is a two-column side-by-side:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`CURRENT`}),` (left) — the live version of each field. For updates, removed content is shown with red strikethrough.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`RESULT`}),` (right) — the proposed final state after the change is approved.`]}),`\n`]}),_jsxs(_components.p,{children:[`Every field is shown: Title, Main Knowledge, Agent Instruction, Keywords, Questions. Fields that changed get a `,_jsx(_components.strong,{children:`MODIFIED`}),` badge. Pay particular attention to the Questions list — that’s where retrieval issues most often originate.`]})]}),_jsx(Step,{title:`Revert specific changes (optional)`,children:_jsxs(_components.p,{children:[`Each modified field has a `,_jsx(_components.strong,{children:`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.`]})}),_jsx(Step,{title:`Edit in place if needed`,children:_jsxs(_components.p,{children:[`Every field in the `,_jsx(_components.code,{children:`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.`]})}),_jsx(Step,{title:`Confirm or set the target folder`,children:_jsx(_components.p,{children:`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 \u0026 Publish unlocks once a folder is set.`})}),_jsxs(Step,{title:`Save \u0026 Publish or Reject Suggestion`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Save \u0026 Publish`}),` writes the changes to the live article (or creates the new article); the entry moves to the Published tab.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`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.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`resolving-gaps-and-conflicts`,children:`Resolving gaps and conflicts`}),`\n`,_jsx(_components.p,{children:`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.`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`The background AI flagged a gap`,icon:`square-dashed`,id:`the-background-ai-flagged-a-gap`,children:[_jsx(_components.p,{children:`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.`}),_jsxs(_components.p,{children:[`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 `,_jsx(_components.em,{children:`prompt`}),` — go author a proper article in `,_jsx(_components.a,{href:`/en/knowledge/articles`,children:`Articles`}),` from a real source, and reject the AI’s draft.`]})]}),_jsxs(Accordion,{title:`The background AI flagged a conflict`,icon:`triangle-exclamation`,id:`the-background-ai-flagged-a-conflict`,children:[_jsx(_components.p,{children:`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.`}),_jsxs(_components.p,{children:[`Approve only if the unified answer is actually correct. Otherwise, reject and resolve the conflict manually by editing both articles in `,_jsx(_components.a,{href:`/en/knowledge/articles`,children:`Articles`}),`.`]})]}),_jsxs(Accordion,{title:`Inbox feedback proposed a correction`,icon:`inbox`,id:`inbox-feedback-proposed-a-correction`,children:[_jsx(_components.p,{children:`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).`}),_jsx(_components.p,{children:`Confirm the feedback was actionable, edit the draft, and publish. Reject if the original reply was actually correct and the feedback was a mistake.`})]}),_jsxs(Accordion,{title:`Two inputs disagree on the same article`,icon:`code-merge`,id:`two-inputs-disagree-on-the-same-article`,children:[_jsx(_components.p,{children:`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.`}),_jsxs(_components.p,{children:[`Approve one, reject the other — or edit the `,_jsx(_components.code,{children:`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.`]})]}),_jsx(Accordion,{title:`A draft duplicates an existing article`,icon:`copy`,id:`a-draft-duplicates-an-existing-article`,children:_jsxs(_components.p,{children:[`A Duplicate-type entry means an overlap was flagged without writing. Open the draft, compare to the existing article in `,_jsx(_components.a,{href:`/en/knowledge/articles`,children:`Articles`}),`, and either reject (the existing article is sufficient) or edit the existing article to incorporate anything new from the draft.`]})}),_jsx(Accordion,{title:`The draft is in the wrong folder`,icon:`folder`,id:`the-draft-is-in-the-wrong-folder`,children:_jsxs(_components.p,{children:[`Common for Magic Articles and AI-generated drafts. The folder picker on the right is the fix — set the correct target before Save \u0026 Publish, or move the article in `,_jsx(_components.a,{href:`/en/knowledge/articles`,children:`Articles`}),` after the fact.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`concurrent-edits`,children:`Concurrent edits`}),`\n`,_jsxs(_components.p,{children:[`When two teammates open the same draft, the second one’s edits are based on a stale snapshot. The system resolves this with a `,_jsx(_components.strong,{children:`merge view`}),`: when you try to Save \u0026 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.`]}),`\n`,_jsx(_components.p,{children:`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.`}),`\n`,_jsx(Heading,{level:`2`,id:`the-published-tab`,children:`The Published tab`}),`\n`,_jsxs(_components.p,{children:[`The Published tab is a chronological list of recently approved articles and updates `,_jsx(_components.em,{children:`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:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Who published what, when`}),` — including “Background AI” as the actor when the AI’s draft was approved.`]}),`\n`,_jsxs(_components.li,{children:[`The full diff of what each publish changed, in the same two-column `,_jsx(_components.code,{children:`CURRENT`}),` vs `,_jsx(_components.code,{children:`RESULT`}),` layout.`]}),`\n`,_jsx(_components.li,{children:`A revert option for accidentally-approved changes (creates a new draft that reverts the change, which itself goes through review).`}),`\n`]}),`\n`,_jsx(_components.p,{children:`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.`}),`\n`,_jsx(Heading,{level:`2`,id:`bulk-operations`,children:`Bulk operations`}),`\n`,_jsxs(_components.p,{children:[`The list supports bulk selection. Each draft row has a checkbox, plus a `,_jsx(_components.strong,{children:`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).`]}),`\n`,_jsx(_components.p,{children:`Bulk approval is intentionally not supported — approval is the moment where conflicts get resolved, and that’s a per-draft decision.`}),`\n`,_jsx(Heading,{level:`2`,id:`disabling-review-per-workspace`,children:`Disabling review per workspace`}),`\n`,_jsxs(_components.p,{children:[`Workspace settings expose a global “require review” toggle. With it off, `,_jsx(_components.em,{children:`user-created`}),` drafts go live without ever entering this queue. Use cases:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Solo or small team where review overhead isn’t worth it.`}),`\n`,_jsx(_components.li,{children:`An internal-only test workspace.`}),`\n`,_jsx(_components.li,{children:`A migration where you’re bulk-importing trusted content that’s already been reviewed elsewhere.`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`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.`})}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`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.`})}),`\n`,_jsx(Heading,{level:`2`,id:`why-a-draft-is-stuck`,children:`Why a draft is stuck`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Nobody has been notified to review it`,icon:`bell-slash`,id:`nobody-has-been-notified-to-review-it`,children:_jsx(_components.p,{children:`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.`})}),_jsx(Accordion,{title:`The author is also the only reviewer`,icon:`user-clock`,id:`the-author-is-also-the-only-reviewer`,children:_jsx(_components.p,{children:`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.`})}),_jsx(Accordion,{title:`The folder has not been confirmed yet`,icon:`folder-open`,id:`the-folder-has-not-been-confirmed-yet`,children:_jsxs(_components.p,{children:[`For new drafts, `,_jsx(_components.strong,{children:`Save \u0026 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.`]})}),_jsx(Accordion,{title:`The entry says Needs folder or No match`,icon:`folder-xmark`,id:`the-entry-says-needs-folder-or-no-match`,children:_jsxs(_components.p,{children:[`This is an informational entry, not a draft article. `,_jsx(_components.strong,{children:`Needs folder`}),` means the content matched part of the tree but there was no folder where Fini could create the article. `,_jsx(_components.strong,{children:`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.`]})}),_jsx(Accordion,{title:`There is a concurrent-edit conflict`,icon:`code-merge`,id:`there-is-a-concurrent-edit-conflict`,children:_jsx(_components.p,{children:`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.`})}),_jsx(Accordion,{title:`A related draft needs to be resolved first`,icon:`link-slash`,id:`a-related-draft-needs-to-be-resolved-first`,children:_jsx(_components.p,{children:`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.`})}),_jsx(Accordion,{title:`Background AI keeps re-flagging the same issue`,icon:`rotate`,id:`background-ai-keeps-re-flagging-the-same-issue`,children:_jsx(_components.p,{children:`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.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Review Queue","description":"The consolidation gate for Fini's knowledge graph. Every new piece of knowledge flows here so gaps and conflicts get resolved before reaching Articles.","icon":"circle-check","href":"/en/knowledge/review"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Two tabs, two destinations","slug":"two-tabs-two-destinations","depth":2,"children":[]},{"title":"Where drafts come from","slug":"where-drafts-come-from","depth":2,"children":[]},{"title":"Kinds of changes","slug":"kinds-of-changes","depth":2,"children":[]},{"title":"The review surface","slug":"the-review-surface","depth":2,"children":[]},{"title":"Agent scope and sidebar count","slug":"agent-scope-and-sidebar-count","depth":2,"children":[]},{"title":"Filters","slug":"filters","depth":2,"children":[]},{"title":"Reviewing a draft","slug":"reviewing-a-draft","depth":2,"children":[]},{"title":"Resolving gaps and conflicts","slug":"resolving-gaps-and-conflicts","depth":2,"children":[]},{"title":"Concurrent edits","slug":"concurrent-edits","depth":2,"children":[]},{"title":"The Published tab","slug":"the-published-tab","depth":2,"children":[]},{"title":"Bulk operations","slug":"bulk-operations","depth":2,"children":[]},{"title":"Disabling review per workspace","slug":"disabling-review-per-workspace","depth":2,"children":[]},{"title":"Why a draft is stuck","slug":"why-a-draft-is-stuck","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"fini","siteName":"Fini","title":"Review Queue - Fini","relatedPagesConfig":{"enabled":true,"limit":3,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/en/knowledge/review","matchLevel":0}}},"lastModified":"2026-11-12T12:10:38.997Z","originalFileLocation":"en/knowledge/review.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"The consolidation gate for Fini\u0026#x27;s knowledge graph. Every new piece of knowledge flows here so gaps and conflicts get resolved before reaching Articles.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Fini\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026amp;auto=format\u0026amp;n=fep-JMymNphpe1DQ\u0026amp;q=85\u0026amp;s=8a2bf1d8a0e5c590ebb976eadccf26a9\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026amp;auto=format\u0026amp;n=fep-JMymNphpe1DQ\u0026amp;q=85\u0026amp;s=8a2bf1d8a0e5c590ebb976eadccf26a9\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026amp;auto=format\u0026amp;n=fep-JMymNphpe1DQ\u0026amp;q=85\u0026amp;s=8a2bf1d8a0e5c590ebb976eadccf26a9\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/png\" href=\"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026amp;auto=format\u0026amp;n=fep-JMymNphpe1DQ\u0026amp;q=85\u0026amp;s=8a2bf1d8a0e5c590ebb976eadccf26a9\">\u003cmeta data-mint-head property=\"og:title\" content=\"Review Queue - Fini\">\u003cmeta data-mint-head property=\"og:description\" content=\"The consolidation gate for Fini\u0026#x27;s knowledge graph. Every new piece of knowledge flows here so gaps and conflicts get resolved before reaching Articles.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Fini\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.usefini.com/en/knowledge/review\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://fini.mintlify.site/_mintlify/api/og/v2?division=Knowledge\u0026amp;title=Review+Queue\u0026amp;description=The+consolidation+gate+for+Fini%27s+knowledge+graph.+Every+new+piece+of+knowledge+flows+here+so+gaps+and+conflicts+get+resolved+before+reaching+Articles.\u0026amp;theme=cf30811e7a75ce9cedcd10e2\u0026amp;signature=f66a633a5255988f78670637b7381ee81e2b37b6faab97f8a5a73c35166e00c8\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Review Queue - Fini\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The consolidation gate for Fini\u0026#x27;s knowledge graph. Every new piece of knowledge flows here so gaps and conflicts get resolved before reaching Articles.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://fini.mintlify.site/_mintlify/api/og/v2?division=Knowledge\u0026amp;title=Review+Queue\u0026amp;description=The+consolidation+gate+for+Fini%27s+knowledge+graph.+Every+new+piece+of+knowledge+flows+here+so+gaps+and+conflicts+get+resolved+before+reaching+Articles.\u0026amp;theme=cf30811e7a75ce9cedcd10e2\u0026amp;signature=f66a633a5255988f78670637b7381ee81e2b37b6faab97f8a5a73c35166e00c8\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/fini/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Fini\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#C3EE5E\">\u003cmeta data-mint-head name=\"msvalidate.01\" content=\"9A9FD7AB87AE2DEA257FE41F07C61E70\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.usefini.com/en/knowledge/review\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/knowledge/review.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.usefini.com/#organization\",\"name\":\"Fini\",\"url\":\"https://docs.usefini.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-light.png?fit=max\u0026auto=format\u0026n=fep-JMymNphpe1DQ\u0026q=85\u0026s=a460ff8bb507876712db2f0fb12c21e4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.usefini.com#website\",\"name\":\"Fini\",\"url\":\"https://docs.usefini.com\",\"publisher\":{\"@id\":\"https://docs.usefini.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.usefini.com/en/knowledge/review#webpage\",\"url\":\"https://docs.usefini.com/en/knowledge/review\",\"name\":\"Review Queue\",\"description\":\"The consolidation gate for Fini's knowledge graph. Every new piece of knowledge flows here so gaps and conflicts get resolved before reaching Articles.\",\"dateModified\":\"2026-11-12T12:10:38.997Z\",\"isPartOf\":{\"@id\":\"https://docs.usefini.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.usefini.com/en/knowledge/review#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.usefini.com/en/knowledge/review#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Agent Configuration\",\"item\":\"https://docs.usefini.com/en/configuration/agent-home\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Knowledge\",\"item\":\"https://docs.usefini.com/en/knowledge/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Review Queue\",\"item\":\"https://docs.usefini.com/en/knowledge/review\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.usefini.com/en/knowledge/review#article\",\"headline\":\"Review Queue\",\"name\":\"Review Queue\",\"description\":\"The consolidation gate for Fini's knowledge graph. Every new piece of knowledge flows here so gaps and conflicts get resolved before reaching Articles.\",\"url\":\"https://docs.usefini.com/en/knowledge/review\",\"mainEntityOfPage\":{\"@id\":\"https://docs.usefini.com/en/knowledge/review#webpage\"},\"dateModified\":\"2026-11-12T12:10:38.997Z\",\"publisher\":{\"@id\":\"https://docs.usefini.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.usefini.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Fini\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Fini\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/en/knowledge/review.md","siteName":"Fini","nav":{"global":null,"languages":[{"language":"en","default":true,"tabs":[{"tab":"Documentation","groups":[{"group":"Getting Started","icon":"flag","pages":[{"title":"Introduction","icon":"book","href":"/en/introduction"},{"title":"What is Fini","icon":"circle-info","href":"/en/what-is-fini"},{"title":"How Fini works","icon":"gears","href":"/en/how-fini-works"},{"title":"Quickstart","icon":"bolt","href":"/en/quickstart"},{"title":"Rollout timeline: Day 1, 14, 30","icon":"calendar-days","href":"/en/rollout-timeline"},{"title":"Supported languages","icon":"language","href":"/en/supported-languages"},{"title":"Fini Scout","icon":"binoculars","href":"/en/fini-scout"},{"title":"Okta SSO","icon":"key","href":"/en/sso-login"},{"title":"Fini FAQ","icon":"circle-question","href":"/en/faq"}]},{"group":"Agent Configuration","icon":"sliders","pages":[{"title":"Home","icon":"robot","href":"/en/configuration/agent-home"},{"title":"Behavior","icon":"message","href":"/en/configuration/prompts"},{"group":"Knowledge","icon":"database","pages":[{"title":"Knowledge","icon":"graduation-cap","href":"/en/knowledge/overview"},{"title":"Sources","icon":"database","href":"/en/knowledge/sources"},{"title":"Articles","icon":"book-open","href":"/en/knowledge/articles"},{"title":"Magic Articles","description":"Turn transcripts, docs, or notes into structured help articles with AI. Fini drafts, deduplicates, and routes new content through Review before publishing.","icon":"wand-magic-sparkles","href":"/en/knowledge/magic-articles"},{"title":"Review Queue","icon":"circle-check","href":"/en/knowledge/review"},{"title":"How Fini handles messy or conflicting docs","description":"Why AI support gives wrong answers when policy docs conflict or update, and how Fini's approved-Articles design and Review Queue keep one approved answer per topic.","icon":"broom","href":"/en/knowledge/messy-or-conflicting-docs"}]},{"title":"Tags","icon":"tag","href":"/en/configuration/tags"},{"title":"Guardrails","icon":"shield-check","href":"/en/configuration/guardrails"},{"group":"Automations","icon":"bolt","pages":[{"title":"Intent Rules","icon":"diagram-project","href":"/en/automations/rulebook"},{"title":"Business Rules","icon":"zap","href":"/en/automations/business-rules"},{"title":"Reply Rules","icon":"turn-down-right","href":"/en/automations/reply-behavior"}]}]},{"group":"Deploy","icon":"cloud-arrow-up","pages":[{"title":"Channel overview","icon":"cloud-arrow-up","href":"/en/deploy/overview"},{"title":"Fini on top of your helpdesk","icon":"layer-group","href":"/en/deploy/on-top-of-your-helpdesk"},{"title":"Widget","icon":"message","href":"/en/deploy/widget"},{"title":"Help Center","icon":"book-open","href":"/en/deploy/helpcenter"},{"title":"Email","icon":"envelope","href":"/en/deploy/email"},{"title":"Fini on voice","icon":"phone","href":"/en/deploy/voice"},{"title":"API Keys","icon":"key","href":"/en/deploy/api-keys"},{"group":"Integrations","icon":"arrow-rotate-right","pages":[{"title":"Zendesk","icon":"https://mintlify.s3.us-west-1.amazonaws.com/fini/images/shared/logos/zendesk.png","href":"/en/deploy/zendesk"},{"title":"Intercom","icon":"https://mintlify.s3.us-west-1.amazonaws.com/fini/images/shared/logos/intercom.png","href":"/en/deploy/intercom"},{"title":"Front","icon":"https://mintlify.s3.us-west-1.amazonaws.com/fini/images/shared/logos/front.png","href":"/en/deploy/front"},{"title":"Gorgias","icon":"https://mintlify.s3.us-west-1.amazonaws.com/fini/images/shared/logos/gorgias.png","href":"/en/deploy/gorgias"},{"title":"HubSpot","icon":"https://mintlify.s3.us-west-1.amazonaws.com/fini/images/shared/logos/hubspot.png","href":"/en/deploy/hubspot"},{"title":"Microsoft 365","icon":"envelope","href":"/en/deploy/microsoft365"},{"title":"Salesforce","icon":"https://mintlify.s3.us-west-1.amazonaws.com/fini/images/shared/logos/salesforce.png","href":"/en/deploy/salesforce"},{"title":"LiveChat","icon":"https://mintlify.s3.us-west-1.amazonaws.com/fini/images/shared/logos/livechat.png","href":"/en/deploy/livechat"},{"title":"Slack","icon":"https://mintlify.s3.us-west-1.amazonaws.com/fini/images/shared/logos/slack.png","href":"/en/deploy/slack"},{"title":"Facebook","icon":"key","href":"/en/deploy/facebook"},{"title":"Instagram","icon":"camera","href":"/en/deploy/instagram"},{"title":"Jira Service Management","icon":"ticket","href":"/en/deploy/jira"},{"title":"WhatsApp","icon":"comment-dots","href":"/en/deploy/whatsapp"},{"title":"Deskpro","icon":"inbox","href":"/en/deploy/deskpro"}]}]},{"group":"Ticketing","icon":"ticket","pages":[{"title":"Ticketing overview","icon":"ticket","href":"/en/ticketing/overview"},{"title":"Set up ticketing","icon":"sliders","href":"/en/ticketing/get-started"},{"title":"Agent groups","icon":"users","href":"/en/ticketing/agent-groups"},{"title":"Work a ticket","icon":"comments","href":"/en/ticketing/working-tickets"},{"title":"Escalation and hand-back","icon":"arrows-turn-to-dots","href":"/en/ticketing/escalation-and-handoff"},{"title":"Ticket macros","icon":"message","href":"/en/ticketing/macros"}]},{"group":"Test \u0026 Ship","icon":"vial","pages":[{"title":"Inbox","icon":"inbox","href":"/en/testing/inbox"},{"title":"Refine with AI","icon":"wand-magic-sparkles","href":"/en/testing/fix-with-ai"},{"title":"Test Suite","icon":"vial","href":"/en/testing/test-suite"},{"title":"Best practices for testing your agent","icon":"list-check","href":"/en/testing/best-practices"}]},{"group":"Performance \u0026 accuracy","icon":"gauge-high","pages":[{"title":"How accuracy and resolution rate are measured","icon":"bullseye","href":"/en/performance/how-accuracy-is-measured"},{"title":"Resolution vs deflection","icon":"scale-balanced","href":"/en/performance/resolution-vs-deflection"},{"title":"Analytics","icon":"chart-bar","href":"/en/analytics"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/en/api-reference/overview"}]},{"tab":"Use cases","pages":[{"title":"Use cases","href":"/en/use-cases/refunds"}]},{"tab":"Trust \u0026 pricing","pages":[{"title":"Trust \u0026 pricing","href":"/en/security/overview"}]}]}]},"basePath":"","title":"Review Queue - Fini","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-D2acuaLg.js","DynamicMarkdown-Co5nikxh.js","zoom-image-lightbox-BbK2OBGL.js","lightbox-handle-r17bVUz3.js"]}