Repository layout

The importable public package is everything under src/metadata_tools/ except the hosts/ subpackage. The hosts/ subpackage and everything outside src/ is supporting code: per-collection configuration, templates, tests, docs, and tooling.

rms-metadata-tools/
  pyproject.toml            # packaging, dependencies, and tool configuration
  requirements.txt          # runtime requirements (mirrors pyproject)
  README.md                 # project front page (included into these docs)
  CONTRIBUTING.md           # contribution workflow
  codecov.yml               # coverage service configuration
  scripts/
    run-all-checks.sh       # single source of truth for the quality gates
    read-docs.sh            # build the docs (-W) and open them in a browser
  docs/                     # Sphinx documentation source (this site)
    conf.py                 # single Sphinx configuration
    index.rst               # documentation root
    user_guide/             # the end-user manual
    dev_guide/              # this developer manual, including api/
  tests/                    # pytest suite (see Environment setup)
    hosts/<HOST>/           # host-specific tests (requires_archive)
  src/
    metadata_tools/         # the importable engine (public package)
      __init__.py           # package docstring and version
      common.py             # Table base class, global logger, and CLI argument helpers
      config.py             # host config registry (set_host / get_*_config)
      task_list_support.py  # task file generation for cloud workers
      index_support/        # IndexTable and process_index() (package)
        __init__.py
        table.py
        process.py
        key_fns.py
      geometry_support/     # geometry engine (package)
      cumulative_support.py # cumulative table concatenation
      label_support.py      # PDS3 label generation from templates
      cli/                  # installed console-script entry points
        index.py            # metadata-index
        geometry.py         # metadata-geometry
        cumulative.py       # metadata-cumulative
        index_worker.py     # metadata-index-worker    (local parallel)
        geometry_worker.py  # metadata-geometry-worker (local parallel)
        cumulative_worker.py # metadata-cumulative-worker (local parallel)
        index_cloud.py      # metadata-index-cloud     (GCP dispatch)
        geometry_cloud.py   # metadata-geometry-cloud  (GCP dispatch)
        cumulative_cloud.py # metadata-cumulative-cloud (GCP dispatch)
        task_list.py        # metadata-task-list
        _host.py            # shared host-directory injection helpers
      columns/              # geometry column definitions (body/ring/sky/sun)
      bodies.py             # builds the oops Body registry
      util.py               # path, text, time, and math utilities
      defs.py               # constants (body names, ring radii, paths)
      templates/            # shared PDS3 label-template fragments
      _version.py           # version string, auto-generated by setuptools-scm
      hosts/                # per-collection configuration + scripts
        GO_0xxx/            # Galileo SSI host (the reference example)

The geometry engine is a package:

src/metadata_tools/geometry_support/
  __init__.py        # re-exports the public surface (entry points + classes)
  process.py         # get_args() and process_tables() (the stage entry point)
  suite.py           # Suite: the set of geometry tables for one volume
  record.py          # Record: one observation's row across all tables
  tables.py          # InventoryTable, SkyTable, SunTable, RingTable, BodyTable
  prep.py            # prep_row(): builds the formatted columns for a row
  masks.py           # construct_excluded_mask(): excluded-pixel masks
  formatting.py      # numeric/ISO column formatting
  formats.py         # FORMAT_DICT: per-column format/units/null/range metadata
  bodies_select.py   # primary/body selection and field-of-view inventory

A host directory contains configuration and templates only — there are no per-host runnable scripts; every host is driven through the shared console-script entry points (see Environment setup):

src/metadata_tools/hosts/GO_0xxx/
  host_config.py            # shared host settings + get_volume_id()
  index_config.py           # index glob + key__<NAME> column functions
  geometry_config.py        # SPICE id, mission table, meshgrids, hooks
  host_init.py              # initializes the oops host module (side effects)
  templates/                # host PDS3 label templates

GCP deployment files live outside the package and are not installed with the wheel:

cloud/
  gcp_common_startup.sh     # shared VM bootstrap template
  GO_0xxx/
    gcp_index_config.yml        # GCP machine/queue config for the index stage
    gcp_geometry_config.yml     # GCP machine/queue config for the geometry stage
    gcp_cumulative_config.yml   # GCP machine/queue config for the cumulative stage
    tasks.json                 # example/output task file

GCP instance startup scripts are generated at runtime by metadata_tools.cli._host.build_startup_script (invoked by the *-cloud entry points, or previewed directly with --create-startup-file); they are never stored in the repository. The cli package is console-script entry-point code, not a stable import surface, so it is not part of the API Reference.