mvdbeek da6480e89b LazyTool stub + create_tool seam (dormant; activation in follow-up)
Introduces the seam the conceptual-simplification plan
(``.claude/plans/witty-drifting-clock.md``) hangs the LazyToolBox refactor on:

* ``LazyTool`` — strict-by-default proxy over ``ToolIndexEntry`` that
  forwards the narrow attribute surface the eager pipeline actually reads
  (audited at plan time: ~28 attrs + 3 methods, zero ``isinstance(_, Tool)``
  checks anywhere). Mutations (``tool.hidden = True``, shed metadata,
  ``tool.labels = ...``) land in ``_overrides`` and survive any later
  materialise. ``to_dict(link_details=False)`` stays on the entry — only
  ``link_details=True`` (and the ``_MATERIALIZE_OK`` allow-list) parse XML.
  Unknown attributes raise ``NotImplementedError`` with a clear message;
  ``LAZY_TOOL_PERMISSIVE=1`` downgrades to warn + materialise for
  debugging.

* ``LazyToolBox.create_tool`` — returns a ``LazyTool`` when the index
  already has the source; otherwise falls through to the eager
  ``ToolBox.create_tool`` and persists the freshly-parsed tool via
  ``_persist_tool_source`` so the next boot is a hit. Paired with
  ``load_tool_from_cache``/``add_tool_to_cache`` no-ops so the disk
  ``ToolCache`` doesn't shadow the seam.

* ``_resolve_index_entry`` — guid → ``store.get_by_source_path`` →
  short-id fallback. ``_materialize_for_lazy_tool`` routes the
  stub→Tool promotion through the existing
  ``_create_tool_from_stored_source`` + ``_register_loaded_tool`` so
  ``_tools_by_id`` / ``_tool_versions_by_id`` / ``_tools_by_old_id`` /
  lineage all agree with the eager bookkeeping.

The seam is **dormant** in this commit: ``LazyToolBox.__init__`` still
runs its hand-written ``_init_lazy_toolbox`` mirror, so ``create_tool``
is never invoked on the boot path. A follow-up commit will flip
``__init__`` to ``super().__init__()`` and delete the duplicate
panel-parsing complex (~1500 lines per Phase 2 of the plan); this
commit is purely additive so the activation can be reviewed in
isolation.

21 unit tests cover the forwarded surface, mutator overrides
round-tripping through materialise, the ``to_dict`` fast/slow paths,
strict / permissive ``__getattr__`` behavior, and the
``create_tool`` index-hit paths (guid + source_path).
2026-07-28 17:27:14 +02:00
…
2026-07-25 18:58:46 +01:00
2026-06-25 15:12:05 +01:00
…
…
2026-07-25 18:58:46 +01:00
2026-05-22 11:27:36 -04:00
…
…
2026-06-03 11:12:02 +02:00

.. figure:: https://galaxyproject.org/images/galaxy-logos/galaxy_project_logo.jpg
   :alt: Galaxy Logo

The latest information about Galaxy can be found on the `Galaxy Community Hub <https://galaxyproject.org/>`__.

Community support is available at `Galaxy Help <https://help.galaxyproject.org/>`__.

.. image:: https://img.shields.io/badge/chat-gitter-blue.svg
    :target: https://gitter.im/galaxyproject/Lobby
    :alt: Chat on gitter

.. image:: https://img.shields.io/badge/chat-irc.freenode.net%23galaxyproject-blue.svg
    :target: https://webchat.freenode.net/?channels=galaxyproject
    :alt: Chat on irc

.. image:: https://img.shields.io/badge/release-documentation-blue.svg
    :target: https://docs.galaxyproject.org/en/master/
    :alt: Release Documentation

.. image:: https://travis-ci.org/galaxyproject/galaxy.svg?branch=dev
    :target: https://travis-ci.org/galaxyproject/galaxy
    :alt: Inspect the test results

Galaxy Quickstart
=================

Galaxy requires Python 3.10 or higher. To check your Python version, run:

.. code:: console

    $ python -V
    Python 3.10.12

Start Galaxy:

.. code:: console

    $ sh run.sh

Once Galaxy completes startup, you should be able to view Galaxy in your
browser at: http://localhost:8080

For more installation details please see: https://getgalaxy.org/

Documentation is available at: https://docs.galaxyproject.org/

Tutorials on how to use Galaxy, perform scientific analyses with it, develop Galaxy and its tools, and admin a Galaxy server are at: https://training.galaxyproject.org/

Tools
=====

Tools can be either installed from the Tool Shed or added manually.
For details please see the `tutorial <https://galaxyproject.org/admin/tools/add-tool-from-toolshed-tutorial/>`__.
Note that not all dependencies for the tools provided in the
``tool_conf.xml.sample`` are included. To install them please visit
"Manage dependencies" in the admin interface.

Issues and Galaxy Development
=============================

Please see `CONTRIBUTING.md <CONTRIBUTING.md>`_ .
S
Description
Data intensive science for everyone.
Readme Cite this repository
1 GiB
Languages
Python 64.2%
TypeScript 14.6%
Vue 12.4%
JavaScript 3.7%
Jupyter Notebook 2.4%
Other 2.5%