Skip to content

225 add a page to begin documenting standards for pipelines shared externally - #238

Open
arielleleon wants to merge 10 commits into
mainfrom
225-add-a-page-to-begin-documenting-standards-for-pipelines-shared-externally
Open

arielleleon wants to merge 10 commits into
mainfrom
225-add-a-page-to-begin-documenting-standards-for-pipelines-shared-externally

Conversation

@arielleleon

@arielleleon arielleleon commented Oct 6, 2026 •

Copy link
Copy Markdown
Collaborator

Modified platform_support.md to edit "Platform requirements", add a "Data flow pipeline" blurb, and edit "Logging". Left everything else the same but we may want to edit some of the processing pipeline documentation to reference pipeline standards documentation.

processing_pipeline_standards is a new heading under "Policies and practices". It contains a sub-contents for:

  • package management
  • versioning pipelines (moved from platform_support.md)
  • ai/ND processing pipelines
  • processing and pipeline testing
  • pipeline parameterization
  • branch management

I left a couple headings within "Policies and practices" in case they do not deserve a full page

Closes #225


📚 Documentation preview 📚: https://scicomp-docs--238.org.readthedocs.build/en/238/

@arielleleon
arielleleon requested a review from a team October 6, 2026 02:06

@alejoe91 alejoe91 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @arielleleon

Added some comments as talking points


## Processing pipeline development

Pipelines are a standardized series of processing steps that take raw data from a single modality and typically produce an NWB file as output. Pipelines are organized in a Nextflow pipeline with individual Code Ocean capsules performing internal steps. Platforms should use established pipelines for processing.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Pipelines are a standardized series of processing steps that take raw data from a single modality and typically produce an NWB file as output. Pipelines are organized in a Nextflow pipeline with individual Code Ocean capsules performing internal steps. Platforms should use established pipelines for processing.
Pipelines are a standardized series of processing steps that take raw data from a single modality and typically produce an NWB file as output. Pipelines are organized in a Nextflow pipeline with individual processes implemented as separate GitHub repositories performing internal steps. Platforms should use established pipelines for processing.

Comment on lines +7 to +10
aind_processing_pipelines.md
pipeline_and_process_testing.md
pipeline_parameters.md
pipeline_branch_management.md

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
aind_processing_pipelines.md
pipeline_and_process_testing.md
pipeline_parameters.md
pipeline_branch_management.md
pipeline_parameters.md
pipeline_testing.md
aind_processing_pipelines.md

Just reordering in my personal favorite order of importance

@alejoe91

Copy link
Copy Markdown

@AllenNeuralDynamics/pipeline-devs I did a first round of edits, mainly based on recent structural changes from the ephys pipeline, where I automated most of the steps. Left some TODO in the docs for discussion and potential centralization

@dougollerenshaw tagging you here too since we discussed about this and we'll need to align on metadata too!

@arielleleon
arielleleon requested a review from a team October 26, 2026 16:06
@arielleleon

Copy link
Copy Markdown
Collaborator Author

@alejoe91 @camilolaiton

We need to think about the case where there is a different container per process. How can container changes made in the remote repository of a process get synced back to the pipeline?

Step repositories SHOULD keep a `code/params.json` with defaults, so the step can also run on its own.

```python
parser.add_argument("--params", default=None, help="JSON string or path to a JSON file")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alternative in smarstspim pipeline:

nextflow distributes full params.json to processes, whcih are in charge of reading and pull-out the step-specific section

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@camilolaiton implemented here: AllenNeuralDynamics/aind-ephys-pipeline#146

Can you take a look and validate this approach?

Then each process looks for a capsule/params.json as source for parameters

Comment on lines +47 to +51
acquisition_name = LOGGING.get("acquisition_name")
if acquisition_name is None:
data_description_json = next(data_folder.glob("**/data_description.json"), None)
if data_description_json is not None:
acquisition_name = json.loads(data_description_json.read_text())["name"]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it should be the nextflow script to set the acquisition name for the logging section

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done for ephys here: AllenNeuralDynamics/aind-ephys-pipeline#146

acquisition_name and pipeline_name are aded to the logging section of the params by the main.nf script

|---|---|
| `Dockerfile_<image>` | One Dockerfile per container image (e.g. a base image, plus images for steps with special dependencies, like GPU spike sorters). |
| `images.json` | Maps an image key to its Dockerfile and its GHCR image name. CI builds, promotes and tags every image listed here. |
| `package-versions.txt` | Pinned (`==`) versions of the Python packages installed in the images. The Dockerfiles install from it, CI installs from it to run checks against the same versions, and release notes are checked against it. |

@arjunsridhar12345 arjunsridhar12345 Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how do people feel about using uv instead of pip? I think the software best practices documenation recommends using uv.

I think this would mean we could maybe have a pyproject.toml and then the uv lockfile which would contain the pinned versions being installed. The Dockerfile would have to be updated to use uv to install instead of pip. Personally I find uv to be faster and easier to use, but just wondering what other people think

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea, but this is up to the individual Dockerfiles. This file cannot be a uv.lock because it could happen that not all package versions are not satisfiable in the same environment (see AllenNeuralDynamics/aind-ephys-pipeline#57)

I think we could add something about using uv as a recommended package manager in the Dockerfiles.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sounds good!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a page to begin documenting standards for pipelines shared externally

3 participants