topical communities#4
Conversation
simply community DIP
added non- to bitcoiners
updated with Daniel's elaboration and details
added link to NIP-22
Added "Isn't this just NIP-22?" dev question
Update simple open communities with publishing subscribed communities
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📝 WalkthroughWalkthroughAdds a new DIP proposal document (05.md) that specifies open communities in Nostr: community identifiers (NIP-73), timeline construction using kind:1111 posts with root I tags, a subscription mechanism via kind:30073 events, privacy handling, client merge behavior, example queries, and PoC link. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
maybe just call it "topical communities" |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Fix all issues with AI agents
In `@05.md`:
- Line 12: Fix the grammatical typo in the markdown sentence that reads "This is
can be" by replacing it with "This can be" in file 05.md; search for the exact
phrase "This is can be a major roadblock for adoption of
public-square/Twitter-style/`kind:1` clients outside Bitcoiner circles." and
update it to "This can be a major roadblock for adoption of
public-square/Twitter-style/`kind:1` clients outside Bitcoiner circles." to
correct the grammar.
- Line 7: The sentence in 05.md repeats "find their people"; remove the
redundant phrase so it reads smoothly (e.g., "Bitcoiners find it easy to find
their people and join in the conversation. However, for non-bitcoiners, it is
not trivial to find interesting people to follow or conversations to join.").
Edit that sentence to keep a single occurrence of "find their people" and adjust
punctuation/capitalization accordingly.
- Line 123: Remove the stray editing artifact "1m" found in the document (a lone
token present on its own line); open 05.md, locate the line containing the
extraneous "1m" and delete that token so the line is either blank or replaced
with the intended content, then save the file.
🧹 Nitpick comments (3)
05.md (3)
90-93: Format encrypted content structure as a proper code block.The JSON structure showing the encrypted content format is not in a proper code block, which reduces readability and makes it harder to distinguish from the surrounding text.
📝 Proposed fix
Encrypted content format: + ```json { "communities": ["#private-topic", "#another-private"] } + ```
35-51: Consider adding guidance on community discovery.The spec clearly defines how communities are structured and how timelines are built, but doesn't address how users discover available communities. Consider adding a section explaining:
- How clients populate a list of available communities for users to browse
- Whether there's a recommended way to discover popular or active communities
- How new communities become visible to users
This would help implementers create a better user experience for community discovery.
58-70: Add language identifier to code fence.The code fence showing the event structure should have a language identifier (e.g.,
json) for proper syntax highlighting.Based on static analysis hints.
📝 Proposed fix
-``` +```json { "kind": 30073, "tags": [
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
05.md
🧰 Additional context used
🪛 LanguageTool
05.md
[grammar] ~10-~10: Use a hyphen to join words.
Context: ...content is overwhelmingly Bitcoin /Nostr oriented, they often leave within a few ...
(QB_NEW_EN_HYPHEN)
[style] ~18-~18: This phrase can be considered informal. To elevate your writing, consider using a more professional alternative.
Context: ...bling: - veteran nostr/bitcoin users to talk about other specific interests or topics that...
(TALK_ABOUT_DISCUSS)
[style] ~18-~18: In American English, abbreviations like “etc.” require a period.
Context: ...abbing, Physics, Math, specific cities, etc) - new non-Bitcoiner users to easily fi...
(ETC_PERIOD)
[grammar] ~29-~29: Use a hyphen to join words.
Context: ...new users on kind:1 clients. ### One day prototype/proof of concept This is ...
(QB_NEW_EN_HYPHEN)
[style] ~122-~122: In American English, abbreviations like “etc.” require a period.
Context: ...antically interpret different I tags, etc). This DIP aims to specify one specific...
(ETC_PERIOD)
🪛 markdownlint-cli2 (0.18.1)
05.md
5-5: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
5-5: Heading style
Expected: setext; Actual: atx
(MD003, heading-style)
29-29: Heading style
Expected: setext; Actual: atx
(MD003, heading-style)
33-33: Bare URL used
(MD034, no-bare-urls)
35-35: Heading style
Expected: setext; Actual: atx
(MD003, heading-style)
53-53: Heading style
Expected: setext; Actual: atx
(MD003, heading-style)
58-58: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
71-71: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
88-88: Bare URL used
(MD034, no-bare-urls)
120-120: Heading style
Expected: setext; Actual: atx
(MD003, heading-style)
🔇 Additional comments (1)
05.md (1)
55-55: kind:30073 is available for use.Verification confirms that kind:30073 is not defined in any published NIP or existing Nostr specification, so there are no conflicts with official standards. This is an appropriate choice for a new parameterized replaceable event kind.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
| Event Structure | ||
| ``` | ||
| { | ||
| "kind": 30073, |
There was a problem hiding this comment.
This should probably be a 10xxx event if the d-tag is always empty.
There was a problem hiding this comment.
We use kind: 10015 for hashtag/community follows.
|
|
||
| ## Isn't this just NIP-22? | ||
|
|
||
| Yes, strictly speaking this is part of NIP-22. However, NIP-22 could have some slight different interpretations and implementation differences based on the use case (e.g. Which tags to use for constructing threads, how to semantically interpret different `I` tags, etc). This DIP aims to specify one specific interpretation for a specific use case. |
There was a problem hiding this comment.
I am not sure what this NIP is doing different than NIP-22. In the current text, it looks like they are exactly the same, with the same interpretation and use cases, including the "Which tags to use for constructing threads" and "how to semantically interpret different I tags" example use cases.
There was a problem hiding this comment.
yes i think that's the point of the nip (or dip in this case)
There was a problem hiding this comment.
there are lot of different choices you could have, being vague is not good for a spec
There was a problem hiding this comment.
Ok, you guys tell me if there is something extra I need to do on top of NIP-22. Amethyst users can already read/participate in these communities in the current version in production. And users can choose to blend their favorite hashtags/communities with the main follows feed or not.
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Fix all issues with AI agents
In `@05.md`:
- Around line 122-123: Remove the duplicated paragraph that starts "Yes,
strictly speaking this is part of NIP-22. However, NIP-22 could have some slight
different interpretations..." so only a single instance remains; locate the
repeated block (the two identical consecutive paragraphs) and delete the second
occurrence, leaving the original paragraph unchanged.
- Line 55: Update the documentation line that currently references `kind:30073`
to use the standardized Nostr event kinds: replace `kind:30073` with
`kind:10004` (Communities list) and mention that it stores references to
community definitions of `kind:34550` via `"a"` tags per NIP-51/NIP-72; adjust
the surrounding sentence to state that users track subscribed communities using
the Communities list (`kind:10004`) containing `"a"` tags pointing to
`kind:34550` community definitions.
🧹 Nitpick comments (3)
05.md (3)
58-70: Add language specifier to code block.The fenced code block should specify
jsonas the language for proper syntax highlighting.✨ Proposed improvement
-``` +```json { "kind": 30073,
91-93: Format JSON example consistently in a code block.The encrypted content format should be in a fenced code block like other JSON examples in this document for consistency and readability.
📦 Proposed improvement
Encrypted content format: + ```json { "communities": ["#private-topic", "#another-private"] } + ```
112-116: Add language specifier to code block.The fenced code block should specify
jsonas the language for proper syntax highlighting.✨ Proposed improvement
- { + ```json + { "kinds": [30073], "authors": ["<pubkey>"], "#d": [""] } + ```
Per NIP-51, kind 30xxx events are parameterized replaceable events intended for users to have MULTIPLE lists with different d-tag values. Since this DIP uses an empty d-tag (users only need ONE global community subscription list), it should use a standard replaceable event (10xxx range). This change: - Updates kind from 30073 to 10073 - Removes the unnecessary "d" tag - Updates documentation from "parameterized replaceable" to "replaceable" - Simplifies query filters (no need for #d filter) Users can still subscribe to unlimited communities via multiple I tags. This change only affects the event kind architecture, not functionality. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
cc @derekross |
|
Per Damus team update in damus-io/dips#4 — regular replaceable event instead of parameterized replaceable. Removed d tag requirement.
Topical communities
Summary by CodeRabbit
Documentation