I've been doing some more digging around in the JS and think there's a permissions issue somewhere in the mix.
I'm looking at the configure button that gets added to the editing toolbar (/libs/cq/gui/components/authoring/editors/clientlibs/core/js/edit/ToolbarActions/edit.ToolbarActions.js):
ns.edit.ToolbarActions.CONFIGURE = new ns.ui.ToolbarAction({
name: "CONFIGURE",
icon: "wrench",
text: Granite.I18n.get("Configure"),
execute: function openEditDialog(editable) {
ns.DialogFrame.openDialog(new ns.edit.Dialog(editable));
},
condition: function (editable) {
return ns.pageInfoHelper.canModify() && editable.hasAction("CONFIGURE") && !!editable.config.dialog;
},
isNonMulti: true
});
For the line starting return ns.pageInfoHelper.canModify(), I think there is some data missing in the page info json object.
On my broken machine, I cannot see a permissions array:

However, I'm my working, local machine, I can:

Can anyone think of a reason why this permissions array is not being passed into the page info object available to the page?