I've been thinking about how to make a really great reposting system on LiveJournal for a long time, and after considering both of LJ's attempts I think the best approach is to stop thinking about it as a repost/reblog/retweet and instead look at it like embedding.
To start, an author would mark their entry as repostable. This either occurs as an option in the editor, or it happens via inserting a piece of code in the entry the way LiveJournal does. This would place a button in the entry that any reader could click on to repost that entry.
When the button is clicked a new entry is started in the editor with an embed code for the original entry. The reposter can add commentary above, below, or around the embedded entry but cannot change anything inside that entry. They can post to their journal or to a community, they can make it access-only, private, or public, and they can enable or disable comments - in short, they can structure this entry just the same as if it were another entry with no repost.
Now there's a new entry somewhere on DW that has that first entry embedded in it. Immediately the system places a comment on the original entry stating that the entry was reposted, who reposted it, where, and maybe include a few lines of any text surrounding the embed (sort of like the pingback system on LJ.)
Inside this new entry the embedded post is clearly marked as such. The embed clearly displays the original author, any metadata (time/date, location, userpic, etc...), and not only shows the comment count but includes a quick-reply form so that readers can reply directly to the embedded post. The repost button would also be active so that new readers could embed the original entry in their own journals or communities.
If the original author chooses to stop making the entry repostable, then the embedded version will disappear from the reposts, but those repost entries and any comments on them will remain. The embedded version will also respect the privacy settings of the original post - if public then everyone can see the embed, if private then no-one but them can see the embed, and if made access-only then only a select few will see the embed.
With changes...
To start, an author would mark their entry as repostable. This either occurs as an option in the editor, or it happens via inserting a piece of code in the entry the way LiveJournal does. This would place a button in the entry that any reader could click on to repost that entry.
When the button is clicked a new entry is started in the editor with an embed code for the original entry. The reposter can add commentary above, below, or around the embedded entry but cannot change anything inside that entry. They can post to their journal or to a community, they can make it access-only, private, or public, and they can enable or disable comments - in short, they can structure this entry just the same as if it were another entry with no repost.
Now there's a new entry somewhere on DW that has that first entry embedded in it. Immediately the system places a comment on the original entry stating that the entry was reposted, who reposted it, where, and maybe include a few lines of any text surrounding the embed (sort of like the pingback system on LJ.)
Inside this new entry the embedded post is clearly marked as such. The embed clearly displays the original author, any metadata (time/date, location, userpic, etc...), and not only shows the comment count but includes a quick-reply form so that readers can reply directly to the embedded post. The repost button would also be active so that new readers could embed the original entry in their own journals or communities.
If the original author chooses to stop making the entry repostable, then the embedded version will disappear from the reposts, but those repost entries and any comments on them will remain. The embedded version will also respect the privacy settings of the original post - if public then everyone can see the embed, if private then no-one but them can see the embed, and if made access-only then only a select few will see the embed.