Tickets Addressed in Release 29.1.1

  • DM-49501: Create a tool to run forced photometry [pipe_tasks]

  • DM-49994: Make it possible to run makeDirectWarp on the final visit_image data product [drp_tasks]

  • DM-50892: Updates to standard plots for publications [utils]

  • DM-51445: Fix overzealous check for SkyWcs.isFits in copyWithFitsApproximation [afw]

  • DM-51451: Get the new colorblind-friendly `ugrizy` color definitions merged into `lsst.utils` [utils]

  • DM-51452: Guard against empty WCS pointers in FITS approximation logic [afw]

Tickets Addressed in Release 29.1.0

  • DM-31824: Parallelize more operations in ResourcePath [resources]

  • DM-34978: Allow disabling the timing decorator [utils]

  • DM-38497: Use explicit bind syntax in user expressions [pipe_base]

  • DM-44862: Specify default location of db-auth.yaml file. [utils]

  • DM-45987: Convert RuntimeErrors in ObjectSizeStarSelector to AlgorithmError [meas_algorithms]

  • DM-46249: Upload analysis_tools metrics from ap_verify so they can be retrieved in Chronograf [utils]

  • DM-46294: Allow user-defined ordering in bps [ctrl_bps, ctrl_bps_htcondor, ctrl_bps_panda]

  • DM-46526: Bring vendor-provided spatially variable vendor LSSTCam filter curves into curated calibrations [obs_base]

  • DM-47916: Remove makeWarp and warpAndPsfMatch tasks [ctrl_mpexec]

  • DM-48206: Graph-based visualization of pipeline processing status (text representation) [ctrl_mpexec, pipe_base]

  • DM-48482: Build image rendering around `mermaid-py` for Mermaid diagrams [ctrl_mpexec, pipe_base]

  • DM-48671: Add node info to task metadata [utils]

  • DM-48913: Add small expression language for selecting subsets of pipelines [pipe_base]

  • DM-49020: fix fileDistributionEndPoint for different protocols [ctrl_bps_panda]

  • DM-49095: MPGraphExecutor failure to fail [ctrl_mpexec]

  • DM-49240: BPS quantum clustering and partitioning in multiple dataset dimensions [ctrl_bps]

  • DM-49266: Exception in QG builder in skip-existing-in builds with predicted-only output datasets [pipe_base]

  • DM-49296: Optimize QG generation and mitigate PostgreSQL string-size limit problems [pipe_base]

  • DM-49300: Add new adjustQuanta hook to allow a task to modify all quanta associated with a task [pipe_base]

  • DM-49310: Add test coverage for mermaid image rendering and source output [pipe_base]

  • DM-49311: Enable Mermaid output for quantum graphs [ctrl_mpexec]

  • DM-49314: ConsolidateVisitSummary very I/O hungry [obs_base]

  • DM-49440: Attempt quick-and-dirty speedups for pipetask report metadata loading [ctrl_mpexec, pipe_base]

  • DM-49537: Implement ability to load a single blend from scarletModelData [daf_butler]

  • DM-49622: Add pydantic serialization for DimensionRecordSet [obs_base]

  • DM-49669: Update preliminary DP1 at IDF with v2 pipelines outputs [dax_obscore]

  • DM-49728: Create standard matplotlib style for Rubin publications [utils]

  • DM-49744: Return exit code for signal (-9) with BPS [ctrl_bps]

  • DM-49747: Handle label problems in user config of bps job ordering [ctrl_bps]

  • DM-49763: Avoid internal exception traceback from empty QG [pipe_base]

  • DM-49784: Add explicit WebDAV scheme to ResourcePath [resources]

  • DM-49786: Add dav and davs schemes as aliases in lsst-resources [resources]

  • DM-49801: Enable environment variables to be set in bps yaml files for the PanDA bps plugin [ctrl_bps_panda]

  • DM-49807: Error from FitsExposureFormatter when reading from s3 with caching disabled [obs_base]

  • DM-49845: Can not ingest raws with certain on-sky fields [obs_base]

  • DM-49860: Allow DBAuth to take credentials from a JSON environment variable [utils]

  • DM-49870: Butler cache directories are not cleaned up promptly after pipetasks finish in bps jobs [ctrl_mpexec]

  • DM-49900: Examine dateutil usage in obs_lsst scripts [obs_base]

  • DM-49911: Butler init via alias broken by DM-49860 [utils]

  • DM-49913: s3 downloads leave temporary directories behind for every downloaded file [resources]

  • DM-49922: objectTable and diffim clustering is broken in w_2025_14 [ctrl_bps]

  • DM-49949: Plumb data ID upload and task expression language through to ctrl_mpexec [ctrl_mpexec, pipe_base]

  • DM-49951: Create examples for standard plotting styles [utils]

  • DM-50041: Make QG full reads fetch all bytes up front (or do some kind of buffering) [pipe_base]

  • DM-50074: Allow bigger connection pool for ResourcePath mtransfer and mexists [resources]

  • DM-50107: Fix pipeline step resolution when selecting single tasks [pipe_base]

  • DM-50167: Modify what data gets visit definitions [obs_base]

  • DM-50191: Add support for substring queries in butler [pipe_base]

  • DM-50212: DAGMan submissions are ignoring service DAGMAN_MAX_JOBS_IDLE [ctrl_bps_htcondor]

  • DM-50218: HealPixelization: Error computing envelope for point region [sphgeom]

  • DM-50243: Document how to set logging values for commands in bps [ctrl_bps]

  • DM-50294: Writing to quantumGraphGeneration.out is buffered [ctrl_bps]

  • DM-50310: Add data ID / dimension record tooling for QGs and zip archives [pipe_base]

  • DM-50379: Add missing metadata method to ObjectSizeNoSourcesError [meas_extensions_psfex]

  • DM-50400: pass IDDS_MAX_NAME_LENGTH to remote build task [ctrl_bps_panda]

  • DM-50446: Make it possible for define-visits to fix bad detector-regions even when visit is unchanged [obs_base]

  • DM-50451: Make sure dataset_ids and UUID literals work in butler string expressions and the butler CLI [pipe_base]

  • DM-50476: Fix metadata-existence skipping in auto-retries and add job-level timing info to metadata [ctrl_mpexec]

  • DM-50490: Record butler metrics in quantum metadata [ctrl_mpexec, utils]

  • DM-50491: Add get/put timing metrics into butler [pipe_base]

  • DM-50498: Make bps config environment values strings [ctrl_bps]

  • DM-50506: Ensure HTTPResourcePath closes connection when doing partial reads [resources]

  • DM-50538: Add more logging to define-visits to track down partial visit_detector_region coverage [obs_base]

  • DM-50539: Improve QG builder error handling and improve adjust_all_quanta [pipe_base]

  • DM-50559: Fix AlgorithmError metadata abc [pipe_base]

  • DM-50614: Add ability to auto-release every held job when using ctrl_bps_htcondor [ctrl_bps_htcondor]

  • DM-50645: Connection pool warnings with RSP butler.get at USDF [resources]

  • DM-50661: Don’t constrain on raw existence in define-visits CLI script [obs_base]

  • DM-50724: Support bulk deletes in ResourcePath [resources]

  • DM-50727: Database deadlock errors when attempting to delete dataset from /rubin/embargo [daf_butler_admin]

  • DM-50753: Use vcr for cp_pipe efd tests [cp_pipe]

  • DM-50857: Investigate performance of butler remove-runs in embargo [resources]

  • DM-50885: Add a –datasetTypes switch to transfer_from_graph to allow parallel merges of large quantumGraph [ctrl_mpexec, pipe_base]

  • DM-50897: Parallelize s3 ResourcePath.mremove [resources]

  • DM-50926: Change default color cycle in plotting utils [utils]

  • DM-50958: Try to improve database performance removing large collections [daf_butler_migrate]

  • DM-50969: Push spatial predicate terms and data ID tables into spatial-overlap subquery when possible [pipe_base]

  • DM-50973: use a map file to reduce the size of the bps PanDA submission size [ctrl_bps_panda]

  • DM-50980: Add task to do tract-level background subtraction [drp_tasks]

  • DM-51073: Make middleware v29.1 release [daf_butler, pipe_base, resources]

  • DM-51075: Implement Butler.transfer_from() for RemoteButler -> DirectButler [daf_butler]

  • DM-51087: Bug in ResourcePath with astropy.io.fits writing [resources]

  • DM-51116: BAND queries no longer work in SIAv2 in dax_obscore [dax_obscore]

  • DM-51270: Fix BUNIT in Exposure writeFits [afw]

  • DM-51331: Allow SkyWcs to hold a FITS approximation to itself and use it in Exposure.writeFits [afw, meas_extensions_psfex]

  • SP-2200: Consider updates to the filter linestyle advice with matplotlib [utils]