Why does hook_menu add my menu items multiple times?
This was a problem with link_path as hinted at by @xurshid29 and @ARUN.

link_path "works" in that it inserts a link with the given path into the menu, but it also has the odd side effect of inserting multiple links into the menu - one for each cache clear - despite each link having the same key in $items. It's also undocumented, so I have no idea where I picked it up from.

Removing the link_path argument and replacing it with "page callback" fixes the problem of multiple links being inserted.

"Have a chat" was fixed to explicitly callback the "add discussion form":

$items['have_a_chat'] = array(
    'title' =&gt; 'Have a chat',
    'page callback' =&gt; 'node_add',
    'page arguments' =&gt; array('discussion'),
    'type' =&gt; MENU_NORMAL_ITEM,
    'access arguments' =&gt; array('create discussion content'),
    'menu_name' =&gt; 'user-menu'
);


And "external" was fixed to page callback a function that then calls drupal_goto.