Program: 36587
Project: 36587
Buggy source:
@Override public void init(){
  UUID id=getWidget().id;
  playlist=PlaylistManager.playlists.getOr(id,getUnusedPlaylist(id));
  PlaylistManager.playlists.add(playlist);
  d(() -> PlaylistManager.playlists.remove(playlist));
  outSelected=outputs.create(widget.id,"String_Node_Str",Item.class,null);
  outPlaying=outputs.create(widget.id,"String_Node_Str",Item.class,null);
  d(Player.playlistSelected.i.bind(outSelected));
  d(maintain(playlist.playingI,ι -> playlist.getPlaying(),outPlaying));
  d(Player.onItemRefresh(ms -> {
    if (outPlaying.getValue() != null)     ms.ifHasK(outPlaying.getValue().getURI(),m -> outPlaying.setValue(m.toPlaylist()));
    if (outSelected.getValue() != null)     ms.ifHasK(outSelected.getValue().getURI(),m -> outSelected.setValue(m.toPlaylist()));
  }
));
  table=new PlaylistTable(playlist);
  root.getChildren().add(table.getRoot());
  setAnchors(table.getRoot(),0d);
  table.setFixedCellSize(gui.GUI.font.getValue().getSize() + 5);
  table.getSelectionModel().setSelectionMode(MULTIPLE);
  d(maintain(orient,table.nodeOrientationProperty()));
  d(maintain(zeropad,table.zeropadIndex));
  d(maintain(orig_index,table.showOriginalIndex));
  d(maintain(show_header,table.headerVisible));
  d(maintain(show_footer,table.footerVisible));
  table.items_info.textFactory=(all,list) -> {
    double Σms=list.stream().mapToDouble(PlaylistItem::getTimeMs).sum();
    return DEFAULT_TEXT_FACTORY.apply(all,list) + "String_Node_Str" + new FormattedDuration(Σms);
  }
;
  table.menuAdd.getItems().addAll(menuItem("String_Node_Str",PlaylistManager::chooseFilestoAdd),menuItem("String_Node_Str",PlaylistManager::chooseFoldertoAdd),menuItem("String_Node_Str",PlaylistManager::chooseUrltoAdd),menuItem("String_Node_Str",PlaylistManager::chooseFilesToPlay),menuItem("String_Node_Str",PlaylistManager::chooseFolderToPlay),menuItem("String_Node_Str",PlaylistManager::chooseUrlToPlay),menuItem("String_Node_Str",() -> playlist.duplicateItemsByOne(table.getSelectedItems())),menuItem("String_Node_Str",() -> playlist.duplicateItemsAsGroup(table.getSelectedItems())));
  table.menuRemove.getItems().addAll(menuItem("String_Node_Str",() -> playlist.removeAll(table.getSelectedItems())),menuItem("String_Node_Str",() -> playlist.retainAll(table.getSelectedItems())),menuItem("String_Node_Str",playlist::removeUnplayable),menuItem("String_Node_Str",playlist::removeDuplicates),menuItem("String_Node_Str",playlist::clear));
  table.menuOrder.getItems().addAll(menuItem("String_Node_Str",playlist::reverse),menuItem("String_Node_Str",playlist::randomize),menuItem("String_Node_Str",() -> WidgetManager.use(SongReader.class,NO_LAYOUT,w -> w.read(table.getSelectedItems()))),menuItem("String_Node_Str",this::saveSelectedAsPlaylist),menuItem("String_Node_Str",this::savePlaylist));
  Menu sortM=new Menu("String_Node_Str");
  for (  Field f : Field.values())   sortM.getItems().add(menuItem(f.toStringEnum(),() -> table.sortBy(f)));
  table.menuOrder.getItems().add(0,sortM);
  root.setOnScroll(Event::consume);
  table.getSelectionModel().selectedItemProperty().addListener((o,ov,nv) -> outSelected.setValue(nv));
  d(table::dispose);
}

Fixed version (ground truth):
@Override public void init(){
  UUID id=getWidget().id;
  playlist=PlaylistManager.playlists.getOr(id,getUnusedPlaylist(id));
  PlaylistManager.playlists.add(playlist);
  d(() -> PlaylistManager.playlists.remove(playlist));
  outSelected=outputs.create(widget.id,"String_Node_Str",Item.class,null);
  outPlaying=outputs.create(widget.id,"String_Node_Str",Item.class,null);
  d(Player.playlistSelected.i.bind(outSelected));
  d(maintain(playlist.playingI,ι -> playlist.getPlaying(),outPlaying));
  d(Player.onItemRefresh(ms -> {
    if (outPlaying.getValue() != null)     ms.ifHasK(outPlaying.getValue().getURI(),m -> outPlaying.setValue(m.toPlaylist()));
    if (outSelected.getValue() != null)     ms.ifHasK(outSelected.getValue().getURI(),m -> outSelected.setValue(m.toPlaylist()));
  }
));
  table=new PlaylistTable(playlist);
  root.getChildren().add(table.getRoot());
  setAnchors(table.getRoot(),0d);
  table.setFixedCellSize(gui.GUI.font.getValue().getSize() + 5);
  table.getSelectionModel().setSelectionMode(MULTIPLE);
  d(maintain(orient,table.nodeOrientationProperty()));
  d(maintain(zeropad,table.zeropadIndex));
  d(maintain(orig_index,table.showOriginalIndex));
  d(maintain(show_header,table.headerVisible));
  d(maintain(show_footer,table.footerVisible));
  table.items_info.textFactory=(all,list) -> {
    double Σms=list.stream().mapToDouble(PlaylistItem::getTimeMs).sum();
    return DEFAULT_TEXT_FACTORY.apply(all,list) + "String_Node_Str" + new FormattedDuration(Σms);
  }
;
  table.menuAdd.getItems().addAll(menuItem("String_Node_Str",PlaylistManager::chooseFilestoAdd),menuItem("String_Node_Str",PlaylistManager::chooseFoldertoAdd),menuItem("String_Node_Str",PlaylistManager::chooseUrltoAdd),menuItem("String_Node_Str",PlaylistManager::chooseFilesToPlay),menuItem("String_Node_Str",PlaylistManager::chooseFolderToPlay),menuItem("String_Node_Str",PlaylistManager::chooseUrlToPlay),menuItem("String_Node_Str",() -> playlist.duplicateItemsByOne(table.getSelectedItems())),menuItem("String_Node_Str",() -> playlist.duplicateItemsAsGroup(table.getSelectedItems())));
  table.menuRemove.getItems().addAll(menuItem("String_Node_Str",() -> playlist.removeAll(table.getSelectedItems())),menuItem("String_Node_Str",() -> playlist.retainAll(table.getSelectedItems())),menuItem("String_Node_Str",playlist::removeUnplayable),menuItem("String_Node_Str",playlist::removeDuplicates),menuItem("String_Node_Str",playlist::clear));
  table.menuOrder.getItems().addAll(menuItem("String_Node_Str",playlist::reverse),menuItem("String_Node_Str",playlist::randomize),menuItem("String_Node_Str",() -> WidgetManager.use(SongReader.class,NO_LAYOUT,w -> w.read(table.getSelectedItems()))),menuItem("String_Node_Str",this::saveSelectedAsPlaylist),menuItem("String_Node_Str",this::savePlaylist));
  Menu sortM=new Menu("String_Node_Str");
  for (  Field f : Field.values())   sortM.getItems().add(menuItem(f.toStringEnum(),() -> table.sortBy(f)));
  table.menuOrder.getItems().add(0,sortM);
  root.setOnScroll(Event::consume);
  table.getSelectionModel().selectedItemProperty().addListener((o,ov,nv) -> {
    if (!table.movingitems)     outSelected.setValue(nv);
  }
);
  d(table::dispose);
}