# Title has already been used (in a secure category)

**URL:** https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047
**Category:** Feature
**Created:** [7월 16, 2019, 7:51오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047 "2019-07-16T07:51:14Z")
**Posts on this page:** 16
**Page:** 1

<div class="post-metadata">

### Author: ![HAWK](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hawk/32/86627_2.png) [@HAWK](https://meta.discourse.org/u/HAWK)
#### Post date: [7월 16, 2019, 7:51오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/1 "2019-07-16T07:51:15Z")

</div>

The duplicate topic title check doesn’t take into account whether the original title is that of a topic in a private category and it probably should.

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [7월 16, 2019, 8:13오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/3 "2019-07-16T08:13:35Z")

</div>

Whether a topic has permissions (through the category) or not doesn’t make it eligible to not be a duplicate topic title.

If it is a PM, that’s a different matter.

---

<div class="post-metadata">

### Author: ![HAWK](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hawk/32/86627_2.png) [@HAWK](https://meta.discourse.org/u/HAWK)
#### Post date: [7월 16, 2019, 8:14오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/4 "2019-07-16T08:14:38Z")

</div>

I’d argue that it should. What is the rationale behind the rule?

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [7월 16, 2019, 8:15오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/5 "2019-07-16T08:15:53Z")

</div>

Slug / title duplication, essentially. It’s been this way by design since inception in 2013.

---

<div class="post-metadata">

### Author: ![HAWK](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hawk/32/86627_2.png) [@HAWK](https://meta.discourse.org/u/HAWK)
#### Post date: [7월 16, 2019, 8:17오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/6 "2019-07-16T08:17:26Z")

</div>

That’s the logic but it’s not really solid a rationale IMO… what are we trying to fix or avoid with the rule?

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [7월 16, 2019, 8:18오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/7 "2019-07-16T08:18:01Z")

</div>

Why is it suddenly a problem if it’s been this way since 2013 🤔

I’d like to see 3-4 reports of problems from customers before proceeding. I don’t take action on a sample size of one.

---

<div class="post-metadata">

### Author: ![HAWK](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hawk/32/86627_2.png) [@HAWK](https://meta.discourse.org/u/HAWK)
#### Post date: [7월 16, 2019, 8:20오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/8 "2019-07-16T08:20:15Z")

</div>

> [@codinghorror](#):
>
> Why is it suddenly a problem if it’s been this way since 2013

Because it makes no sense for a user that can’t see the other duplicates. They are forced to make up a title just to avoid a rule.

Fair enough that we don’t take action at this point but it still needs to be logged (in case 2 more come in).

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [7월 16, 2019, 8:22오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/9 "2019-07-16T08:22:06Z")

</div>

Well, I’d argue this is kinda correct, in the same way that if your password is a duplicate then you shouldn’t really be allowed to use it, _even if other people have that password as well_.

The potential confusion between

`http://discourse.example.com/t/upgrading-discourse/8922`  
`http://discourse.example.com/t/upgrading-discourse/7451`

.. is substantial.

---

<div class="post-metadata">

### Author: ![HAWK](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hawk/32/86627_2.png) [@HAWK](https://meta.discourse.org/u/HAWK)
#### Post date: [7월 16, 2019, 8:23오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/10 "2019-07-16T08:23:15Z")

</div>

One has security implications and the other is just plain confusing…

But all good. Let’s leave this here for posterity with no action required right now.

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [7월 16, 2019, 12:52오후 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/11 "2019-07-16T12:52:56Z")

</div>

The only place where slug duplication is really material is for SEO. If one resides in a secure category and we’re always talking about the less secured topic being created _second_, then surely this isn’t going to be a factor?

---

<div class="post-metadata">

### Author: ![JWagstaff](https://avatars.discourse-cdn.com/v4/letter/j/ee59a6/32.png) [@JWagstaff](https://meta.discourse.org/u/JWagstaff)
#### Post date: [8월 21, 2019, 8:59오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/12 "2019-08-21T08:59:51Z")

</div>

Hello, this is posterity. We’re creating a number of private categories, each with the same topics in them - but we’ve run up against this issue. Is there any way we can work around it?

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [8월 21, 2019, 10:23오전 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/13 "2019-08-21T10:23:07Z")

</div>

Enable duplicate title support in site settings if you need that.

---

<div class="post-metadata">

### Author: ![AndrewPA](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/andrewpa/32/570506_2.png) [@AndrewPA](https://meta.discourse.org/u/AndrewPA)
#### Post date: [7월 13, 2026, 9:28오후 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/14 "2026-07-13T21:28:58Z")

</div>

에러 메시지에 충돌하는 토픽 ID를 표시하도록 해주시길 부탁드립니다.

토픽 업데이트 시 제목 고유성 검사(`has_already_been_used`)가 실패하면, 어떤 토픽이 충돌을 일으키고 있는지 에러에 전혀 표시되지 않습니다. 이는 특히 검사 대상이 `Topic.listable_topics`이기 때문에, 충돌하는 토픽이 목록에 표시되지 않은(unlisted) 상태일 수 있어 더욱 문제입니다. 에러에서 원인으로 바로 도달할 수단이 없으며, 스태프는 `status:unlisted`로 검색해야 하고, 카테고리나 제목 표현의 변형까지 추측해야 하는 번거로움이 있습니다.

스태프/관리자 사용자를 위해 에러 응답에 해당 토픽의 ID(또는 관리자 URL)를 포함하면, 여러 단계의 조사를 클릭 한 번으로 해결할 수 있게 됩니다. 예시:

{“errors”: [“Title has already been used”], “conflicting\_topic\_id”: 12345}

---

<div class="post-metadata">

### Author: ![zogstrip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/zogstrip/32/512781_2.png) [@zogstrip](https://meta.discourse.org/u/zogstrip)
#### Post date: [7월 21, 2026, 1:38오후 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/16 "2026-07-21T13:38:12Z")

</div>

꽤나 섬세한 균형이라, 이 변경 사항이 "정답"인지조차 확신이 서지 않습니다.

> <https://github.com/discourse/discourse/pull/41871>
>
> Previously, the duplicate topic title check compared new titles against every to…pic on the site regardless of visibility: users were blocked by titles in categories they couldn't see or unlisted topics they couldn't find, the bare "Title has already been used" error gave no way to locate the conflict (and doubled as an existence oracle for hidden titles), and the behavior was controlled by two entangled boolean settings.
> 
> This change scopes the check to the destination category plus whatever the acting user can actually see, links the conflicting topic in the error — safe by construction, since being blocked now implies being able to see it:
> 
> \> This title has already been used by \[another topic\]().
> 
> It also consolidates the two booleans into a single \`duplicate\_topic\_titles\` enum (\`disallowed\` / \`allowed\_across\_categories\` / \`allowed\`), with existing values migrated and the old names kept as hidden deprecated aliases that admin search still resolves.
> 
> Reported in https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047
> 
> Note for self-hosters: env-provided settings can't be migrated — \`DISCOURSE\_ALLOW\_DUPLICATE\_TOPIC\_TITLES=true\` configs need to switch to \`DISCOURSE\_DUPLICATE\_TOPIC\_TITLES=allowed\`.

아이디어는 다른 주제를 볼 수 있는 경우에만 차단한다는 것입니다. 볼 수 있다면, 해당 주제로 바로 이동할 수 있도록 링크도 제공하겠습니다.

---

<div class="post-metadata">

### Author: ![AndrewPA](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/andrewpa/32/570506_2.png) [@AndrewPA](https://meta.discourse.org/u/AndrewPA)
#### Post date: [7월 21, 2026, 3:07오후 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/17 "2026-07-21T15:07:39Z")

</div>

링크는 사용자 측에서 실제로 가장 필요한 핵심 요소이므로, 이는 저에게 완벽한 이점이 되는 것 같습니다! 게다가, 이렇게 긴밀하게 연결된 로직에 두 개의 불리언을 사용하는 것보다 단일 enum을 사용하는 것이 더 나은 선택지라고 생각합니다. 이 내용을 공유해 주셔서 감사합니다.

---

<div class="post-metadata">

### Author: ![zogstrip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/zogstrip/32/512781_2.png) [@zogstrip](https://meta.discourse.org/u/zogstrip)
#### Post date: [7월 31, 2026, 1:33오후 UTC](https://meta.discourse.org/t/title-has-already-been-used-in-a-secure-category/123047/19 "2026-07-31T13:33:38Z")

</div>

이 주제는 마지막 답변 후 7일이 지나면 자동으로 닫힙니다. 더 이상 새 답변을 작성할 수 없습니다.
