Files
galaxy/lib
mvdbeek e38aca1d96 lazy fast panel init: rebuild the panel faithfully from indexed placements
The from-index fast panel init registered stubs into the live panel only,
keyed per collapsed entry id. Three fidelity gaps against the eager conf
walk broke the first lazy CI runs carrying it:

1. The integrated tool panel stayed empty on fresh boots. It is what
   _load_tool_panel_views renders EDAM/static views from (and what
   _save_integrated_tool_panel persists), so every panel view rendered
   empty: the EDAM toolbox tests, all panel_views_dir integration tests,
   and /api/users favorite EDAM operations 404d.

2. ToolIndex.entries collapses same-id tools to one winner, so it cannot
   represent the panel: a top-level sectionless tool (upload1 in the
   functional conf - test_index), a tool id referenced both top-level and
   inside a section (multiple_versions), or expanded-content twins each
   lost whichever placement their winning entry didn't carry.

3. Runtime shed installs lost their panel position and repository
   metadata across the reload that follows: a full repopulate reset
   placement order to conf order (eager inserts at the section head via
   update_or_append), and the unchanged-file carry kept serving the
   ad-hoc self-heal entry written during metadata generation, which has
   no shed conf context - so the rendered panel entry lacked
   tool_shed_repository.

Fixes, index side: ToolIndexEntry.in_panel marks conf tool items
(converter and data-manager discoveries are indexed for lookups but never
placed); ToolIndex.panel_items records one placement per conf reference
in discovery order, appended by add_entry (keyed on tool id + section,
composite-merged across stores); discovery yields every conf reference of
a path instead of dedup-ing (the store layer is content-addressed and
absorbs repeats); the unchanged-file carry reconciles conf-level context
(section, shed repository coordinates) from the current discovery; a full
rebuild merges the previous index's placement order (the placements list
is the panel-order memory, the role integrated_tool_panel.xml plays for
eager) and partial updates insert new placements at the head of their
section, matching the eager runtime insert.

Toolbox side: _init_tools_from_index registers all stubs unplaced and
replays placements through a shared _place_stub that mirrors every
placement into the integrated panel (hidden included, like the eager
__add_tool always did) and slots visible ones into the live panel.

Verified: lazy integration test_panel_views + test_edam_toolbox 18/18
(previously 16 of the lazy CI dispatch failures), lazy api test_index +
test_favorite_edam_operations, eager panel views 16/16, 153 unit, tox
lint/format/mypy. The index schema hash changes, so existing persisted
indexes rebuild once on upgrade.
2026-07-28 17:27:46 +02:00
..
2026-07-22 08:11:31 +03:00