## TL;DR
Fix this in Discourse by acting on the exact problem first: fix visibility by auditing every group on the category permission tab, deleting any broad group entry, testing with a signed out session and a basic member session, and only then treating external search copies as a cleanup task, because reindex requests do nothing while the permission still leaks. Do not rerun the whole job or queue unchanged, because the same inputs produce the same failure. Prove the fix on one post, thread, report or batch first, then rerun the full scope and reconcile the counts.

```text
Private category visible in search results
```

## Use this when
- The operation in Discourse fails with this exact message or symptom: Private category visible in search results.
- The same failure repeats on retry with unchanged inputs.
- Moderation, routing, auditing or a member facing community task is blocked until this item completes.

## Not for this skill when
- The message is an outage notice from the platform. Resolve that first, then return here if this problem remains.
- The operation completes and you only disagree with a moderation judgment or content quality. That is a policy review, not this failure.

## Steps
1. Reproduce the failure with the smallest scope that still shows it in Discourse, and copy the full message plus the post, thread, report or member involved into the run notes. Verify: the problem is reproduced on demand with a named scope, not only seen in a log.
2. Apply the specific fix for this problem: fix visibility by auditing every group on the category permission tab, deleting any broad group entry, testing with a signed out session and a basic member session, and only then treating external search copies as a cleanup task, because reindex requests do nothing while the permission still leaks. Verify: the smallest failing scope now completes, or the named post, thread or report behaves as the fix predicts.
3. Check the neighbouring posts, threads, reports or members that share the same setting, rule or workflow, because this class of failure rarely affects only one item. Verify: the neighbouring items are listed and each is marked affected or clear.
4. Rerun the original operation in Discourse on the previously failing scope, watching for the same message rather than assuming success from a quiet log. Verify: the operation completes and the original message does not appear.
5. Compare the result counts or status against the source in Discourse so a silent partial success is caught before sign off. Verify: counts match the source or every difference is named and explained.
6. Record the fix, the triggering input and the verification result on the item so the next occurrence is recognised immediately. Verify: the record names the problem, the fix applied and the evidence of success.

## Why it happens
Permission tabs accumulate group entries over time, and one leftover broad entry exposes the whole category to search indexing while the category still looks private in the category list.

## Variant phrasings

### Private category visible in search results
The verbatim form searchers paste from the console, queue or report. Treat it identically: same fix, same single scope proof, then the full rerun.

### How to fix - how to fix Discourse category permission error private category visible in search results fails error
The how to phrasing for the same failure in Discourse. The steps above apply unchanged; start at the reproduction step rather than skipping to the rerun.

### Discourse troubleshooting for this failure
The symptom first phrasing used when the console hides the full message. Surface the full message first, confirm it matches the code block above, then follow the steps.

## Edge cases
- If the fix works on the small scope but the full rerun still fails on a different item, treat that item as a new instance, record its scope separately, and apply the same steps rather than widening the first fix blindly.
- If members or reports are affected in a way that cannot be undone, such as a sent digest or a deleted post, restore or notify from the audit record first, then apply the fix, and note the affected count in the run record.
- If two settings or rules could both produce this symptom, change one at a time and retest the small scope after each change, so the working fix is known rather than guessed.

Compatibility: Discourse at current versions, plus the admin console, moderation queue or API the query names; no extra tooling beyond the source system access needed to verify counts.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_JMDZpPF_WUBm3uD0ZIoKDA
