Skip to content

DIP-287 Add inReplyTo to Reply Notes #287

@wesbiggs

Description

@wesbiggs

A DSNP Content URI is formed by using the creator's DSNP User Id and the content hash of the referenced content.

However, it provides no context as to where (or when) the content appears.

Because DSNP specifies that Activity Content Notes contain a timestamp (the published field) with second-level precision (xsd:dateTime type), it is unlikely that two Notes from the same user, even if they contain the same content, will generate the same hash.

Problem Scenarios

Misattribution

However, a malicious user or poorly implemented application could certainly create this scenario:

  1. A posts "I like puppies". B posts "I like Nazis".
  2. C constructs a reply Note that says "I agree". C announces the Note twice -- once as a reply to A, once as a reply to B.
  3. D comes along and sees the "I like puppies" thread. D replies to C's "I agree" with "Me too"

Does D's "Me too" get included in the "I like Nazis" thread? An outside observer can't tell.

Over-tombstoning

Consider a similar case where the same content is posted twice in two different contexts within the same published second.
If C wants to delete the reply to B, but not the reply to A, he has no ability to do so.

Options

  1. Leave as is. The likelihood of this scenario occurring is low.
  2. Leave as is, but add instructions to implementers on heuristics to deal with these situations (e.g. don't allow the same DSNP Content URI to be used as a Reply in two different threads.)
  3. Add further context to DSNP Content URI in an attempt to make it more unique.
  4. (Similar to 3.) Add further fields to Activity Content Note in an attempt to make it hash more uniquely in different contexts.
  5. Change resolution of timestamp in published field to milliseconds

A note on 3 (and possibly 4) -- what happens if a user replies to a specific item with the same text, over and over again? Should this be allowed, or should it be de-duped?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions