This is another RFC. Any and all feedback is encouraged.

Currently Node Heaven is very separate from the rest of the database. There is no way for people to access their old nodes, and to see old versions of writeups currently. Versioning is a problem that faces e2 in a small way; people can't really refresh/backup/version their writeups without the intervention of a God. One really good way would be to use Node Heaven as not only a place where people can reflect on how they've messed up, but also as a place where they can version control their docs.

First off, my current idea would require a change the heaven dbtable. This would be really minor, and it would be to add a secondary index to contain the old_parent_id of a writeup. It would contain the id, so that it can be looked up whenever a node is visited. This would also require a small change to write down the parent_id when something gets whacked, but that seems rather reasonable. I can't find the code that removes the node, but I know this is some kind of job or something that is scheduled to trigger at night.

We could also back index the current selection of database rows, so that the table is healthy, alive, and ready to go. (if they don't exist anymore, they will be lost children, oh well.)

Once we have an index of the parent_ids of all of the current Heaven inhabitents, we then can modify the way the pages are displayed so that users can see when they have had previous versions of a writeup in play. This will allow them to see that they have in fact had something there previously.

In addwriteup, we could add stuff around line 17 to something like the following:

# Do something here so that we don't have old versions mentioned in E2 Nuke Request, and the like.
my $qNH = $DB->sqlSelectMany('*', 'heaven', 'type_nodetype='.getID(getType('writeup')).' AND author_user='.getID($USER), 'order by createtime');

my $outStr = '<br><b>You have had previous versions of this node that now rest in'.linkNode(getNode('node heaven', 'superdoc'), 'Node Heaven').': ';

my $NHv = getNode('Node Heaven Visitation', 'superdoc');
while(my $N = $qNHr->fetchrow_hashref) 
{
  return if int($N) == -1;
  outStr .= linkNode($NHv, $n{node_id}, {visit_id => $$N{node_id}}).', ';
}
outStr .= '</b><br>';
outStr;


Basically it would look like:

*end of node*
You have had previous versions of this node that now rest in Node Heaven: 12348, 993456



Why I feel this is a good thing for the database, even though it might cost a little more to check for things inside of Node Heaven :
  • New users ask a lot of questions, especially after they lose something they thought was funny, or were glad that no one had beat them to a teacher in their high school. A user can go to check up on his or her node, and find out that there was something missing.
  • This would allow for a sort of versioning of writeups, for people who want to start from scratch.
  • Node heaven would be more highly integrated into E2, the way Everything User Search, and other critical docs are.
It shouldn't be totally expensive, because we are making a lookup to a fairly uncommon id (unless the user has tried forty or fifty times.. to get it right on some node).



Another suggestion for the heaven dbtable would be to include the reason that Klaproth gives , so that people who ignore the message can still get the reason. (Maybe people are afraid of messages). It would require storing some text in the db, but it may be worth it... Thoughts?