mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-21 05:45:37 +08:00
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.