Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wikilink tags and Trust Rank NIP (and how to apply it to wikis) #1220

Open
wants to merge 7 commits into
base: master
Choose a base branch
from

Conversation

arthurfranca
Copy link
Contributor

@arthurfranca arthurfranca commented May 3, 2024

Edited TLDR:

When user gives a thumbs up/down to an article, wiki client auto sets the trust rank for the wiki author relative to the said article (and to some other closely related articles; most likely the first two article links).

By looking at an user network (him and his follows) of trust metrics, client can figure out the best article version to show.

54.md Outdated
Comment on lines 64 to 66
Those tags are handy when searching for topics related to an article.
They may be used as labels to tell two articles with the same `d` tag apart.
They are also used when [ranking authors](#author-ranking).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Having y and z tags instead of just t tags for these use-cases feels overly complicated.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree. Though used r instead of t. People tend to over use hashtags and I think the d value would end up being a t tag too, which is not the intent.

64.md Outdated
Comment on lines 22 to 28
"kind": 30382,
"tags": [
["d", "<pubkey>"],
["T", "3:wiki:role-playing-video-game", "x"], // has written a based wiki article about RPG
["T", "2:driver"], // polite and skilled driver but doesn't turn the air conditioner on
["T", "3:buyer"], // no problems when selling to this person
["T", "-2:seller"] // had a bad experience when buying from this person or company
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer a different kind for each trust rank application or another indexable tag that sets the application like ["D", "wiki"]. Otherwise a wiki client would just discard the driver, buyer, and seller tags when updating a wiki value, because these are not useful for the client, leading to interoperability issues.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added this:

If a client doesn't recognize a topic name, it should leave the corresponding T tag untouched. For example,
a wiki client will only add/update/remove T tags with topic names starting with wiki:.

This kind comes from @vitorpamplona's #761.

I think a good side effect of using trust metrics related to wiki content is that for someone to become trusted on a topic they would first have to write a good public wiki article about it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My point remains. Leaving junk data untouched would require client devs to write extra code for no benefit to their own clients. It's also more bandwidth efficient if I can query only the tags that are of interest to me.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Leaving junk data untouched would require client devs to write extra code for no benefit

Even if there was a kind just for ranking authors of wiki articles, the client would have to fetch the latest version and don't touch ratings on topics other than the current one. Similar work.

[...] indexable tag that sets the application like ["D", "wiki"] [...] It's also more bandwidth efficient if I can query only the tags that are of interest to me

One isn't supposed to fetch all wiki-related trust scores but do one article at a time like this:

{ kinds: [30382], authors: ['<my>', '<follows'>, '<...>'], #T: [
  '3:wiki:nostr',
  '2:wiki:nostr',
  '1:wiki:nostr',
]}

The above will return just people with positively ranked knowledge on the encyclopedic nostr topic (randed by one's follows). Those with the d marker will lead to a recommended article variant. Pubkeys ranked with r markers can be used on a follow-up query in the authors filter till reaching a d marker to lead to a recommended article variant.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if there was a kind just for ranking authors of wiki articles, the client would have to fetch the latest version and don't touch ratings on topics other than the current one. Similar work.

No. All wiki ratings are relevant to a wiki client, every other ranking is junk. Same with the legacy follow lists. If a client does not implement following relays and hashtags than it would just ignore these tags, why would the client cache these irrelevant tags? This leads to clients nuking each others lists.
Nip51(Lists) does it right, having a different kind for each use-case because managing one giant list is hell, same applies to these rankings.
Also it's much more efficient if you don't have to constantly refetch and validate the event when a marketplace client changes tags that have nothing to do with your wiki use-case.
Doesn't have to be a new kind, maybe put it in the d tag like ["d", "wiki:<pubkey>"]

64.md Outdated

The `kind:30382` is used to assign public relationship statuses between the event author and a pubkey set to the `d` tag.
This NIP assigns one or more trust ranks by adding `T` tags with different topic names to such event
using the following structure: `["T", "<int_value_ranging_from_-3_to_3>:<topic-name>", "<context_dependent_marker>"]`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you think about ["T", "<topic-name>", "<int_value_ranging_from_-3_to_3>", "<context_dependent_marker>"]?
This way you could easily query a pubkey's trust rank for a topic.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your example doesn't allow to filter on relays by trust score.

The reason the score has few possible values (-3 to 3) and goes together with the topic name is that it enables filtering on relays by both (always picking one or more specific topics).

Filter examples:
All "nostr": { #T: ['-3:wiki:nostr', '-2:wiki:nostr', "...", '3:wiki:nostr'] }
Positive "nostr": { #T: ['1:wiki:nostr', '2:wiki:nostr', '3:wiki:nostr'] }
Negative "nostr": { #T: ['-3:wiki:nostr', '-2:wiki:nostr', '-1:wiki:nostr'] }
"nostr" gurus: { #T: ['3:wiki:nostr'] }

@arthurfranca
Copy link
Contributor Author

Am I expecting too much from this or am I right to expect these changes to:

  1. Allow people to be rated as <insert-topic> gurus after writing good wiki articles on said topic
  2. Which motivates <insert-topic> influencers to write based wiki articles
  3. Which gonna expand human public knowledge base
  4. And as a bonus could give us better notes when clicking a hashtag #<insert-topic> (notes from those gurus)
  5. And then all wiki articles would finally be wiped out by another Damus Relay database reset 😅️

@fiatjaf @pablof7z @vitorpamplona @staab @mikedilger

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants