Class UpdateGeoSourceMetadataCli

All Implemented Interfaces:
org.springframework.beans.factory.Aware, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationContextAware, org.springframework.context.EnvironmentAware, CLI

public class UpdateGeoSourceMetadataCli extends ExpressionExperimentManipulatingCLI
Housekeeping: store the GEO record each experiment was built from.

Investigation.sourceMetadata is written at import time only, so it exists for what has been imported since that shipped and for nothing else — one experiment on production as of 2026-08-28. This walks the corpus and fills it in.

🛑 It writes the document and nothing else. GeoUpdateConfig gates every other effect of a refetch — experiment tags, sample characteristics, publications — and this sets none of them. That matters more here than in an ordinary refresh: GEO is not the authority on a curated field, and a corpus-wide job that quietly took GEO's opinion on 23,000 datasets would be very hard to undo.

One GEO fetch per experiment is the cost, so this is a slow job by construction. It is resumable: an experiment that already has a document is skipped unless --force is given, so an interrupted run continues where it stopped.