Skip to content

[ENH] Add phenotype and rawbids directories to "study" datasets#2191

Merged
julia-pfarr merged 13 commits into
bids-standard:masterfrom
nikhil153:master
Apr 17, 2026
Merged

[ENH] Add phenotype and rawbids directories to "study" datasets#2191
julia-pfarr merged 13 commits into
bids-standard:masterfrom
nikhil153:master

Conversation

@nikhil153

@nikhil153 nikhil153 commented Sep 2, 2025

Copy link
Copy Markdown
Contributor

This is a continuation of discussion on BIDS DatasetType started in #1972 and #2185. The proposed DatasetTypes include: bids-study, raw, and derivative.

I think this is a fantastic idea with the capacity to curate modular and nested standardized datasets.

However, the directory layout for bids-study proposed in #2185 is suboptimal from the data visibility perspective. Currently, the bids-study does not have a root-level subdirectory for bids-raw dataset. Based on previous conversations it was suggested that bids-raw dataset can be stowed inside sourcedata dir. This hidden location for a valid and probably the most common DatasetType is probably not ideal and will confuse new users.

So, I would like to make a case for treating sourcedata, bids-raw, and bids-derivative with equal importance by putting them on the same root-level inside the bids-study directory tree. In my experience this is more intuitive and helpful for data management of neuroimaging studies, where potentially different people will handle these three DatasetTypes.

The suggested bids- prefix for these directories is mostly to avoid possible confusion between source vs raw data connotations from past discussions and to indicate each of them can be stand-alone BIDS datasets.

Happy to hear your thoughts @michellewang, @jbpoline, @yarikoptic, @effigies, @mathdugre, @julia-pfarr, @nburgos, @AliceJoubert, @Adam-Ismaili-92, @surchs

@codecov

codecov Bot commented Sep 2, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.07%. Comparing base (6764039) to head (4cd73f4).
⚠️ Report is 21 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #2191   +/-   ##
=======================================
  Coverage   83.07%   83.07%           
=======================================
  Files          22       22           
  Lines        1696     1696           
=======================================
  Hits         1409     1409           
  Misses        287      287           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@nikhil153 nikhil153 changed the title [WIP] Suggested modifications to directory layout of the bids-study Dataset… [WIP] Suggested modifications to directory layout of the bids-study DatasetType Sep 2, 2025
@jbpoline

jbpoline commented Sep 3, 2025

Copy link
Copy Markdown
Contributor

This makes a lot of sense to me, and would help everyone to more straightforwardly differentiate source-data and raw-bids much more easily.

@AliceJoubert

Copy link
Copy Markdown

This solution feels much clearer, I think it's a good idea !

@effigies effigies left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Two notes on the schema. I don't have a strong opinion about bids-raw/, except to note that this will be the first use of a hyphen that doesn't separate key-value entities. If you want to be consistent with older versions of the spec, you could call it rawdata/. Many people seemed to think that was supposed to be valid...

Comment thread src/schema/rules/directories.yaml Outdated
Comment thread src/schema/rules/directories.yaml Outdated
Comment thread src/schema/rules/directories.yaml
Comment on lines +53 to +56
phenotype:
name: phenotype
level: optional
opaque: false

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This was removed after this discussion: #2185 (comment)

I didn't see a justification for re-adding it, so I want to make sure this isn't slipped in with little consideration.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes, should have explained this addition based on offline conversations.
The reason for removing phenotype directory was that it would presumably appear in the raw dataset. But isn't that true for derivatives directory as well? It's a bit confusing having derivatives part of all three DatasetTypes but enforcing phenotype only be part of raw or derivative. In practice, phenotype data curation is likely to be more independent than that of derivatives, which is one of the reasons we prefer it to be at the top level.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Sorry for the long silence.

The reason for removing phenotype directory was that it would presumably appear in the raw dataset. But isn't that true for derivatives directory as well? It's a bit confusing having derivatives part of all three DatasetTypes but enforcing phenotype only be part of raw or derivative. In practice, phenotype data curation is likely to be more independent than that of derivatives, which is one of the reasons we prefer it to be at the top level.

So the logic in derivatives is that any raw dataset is a valid derivative dataset, so you cannot restrict, you can only expand. Furthermore, you can have derivatives of derivatives, so nesting is entirely reasonable. I suppose you could preprocess phenotypic data and include it in a derivative, so it might even make sense.

IMO, if phenotypic data is worth including in the study, it's worth including in the raw data, regardless of the independence of curation. I still don't see the use case for phenotype at the study level.

That said, I won't block this.

@effigies effigies added the discussion ongoing discussion label Sep 5, 2025
@nikhil153

Copy link
Copy Markdown
Contributor Author

@effigies - Thanks for the feedback and patiently dealing with these multiple intertwined open issues and hurried PR from my side - a result of mixed-up online and offline conversations. Will respond individually to the inline comments.

@julia-pfarr julia-pfarr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

A few thoughts:

  1. I think we need to be more clear about what bids-study is. If I was a naive user, I would think bids-study is a layout for organizing my study in "the bids way". Meaning that as soon as I move from unorganized sourcedata to some sort of organized data, it should be BIDS compliant. Thus, I do not need a bids prefix for raw or derivatives since my assumption is "everything BIDS". If we want to expand bids-study to allow it to be consumed by other schemas or standards (e.g., Nipoppy), I think we can find a different way than the folder-naming to make them compatible and validate. E.g., adding expanded validation rules in the sense of „if type bids-study is used, everything that BIDS has a spec on (raw, derivatives, phenotype etc.) needs to be in BIDS standard“ or „„if type bids-study is used, at least X% of data needs to be BIDS“ or add an output-validator file that lists which of the data was validated by BIDS. (idk if any of those suggestions make sense, it’s just wild ideas :-D)

  2. It is true that phenotype is supposed to be on the level of the raw data. However, the <measurement_tool_name>.tsv/.json are connected to the (recommended) sessions.tsv/.json file which should be kept at the root level. Thus, it would be more convenient to not have too deep nesting of phenotype. Also, as measurement data can also evolve from source to raw, the <measurement_tool_name>.tsv/.json might contain information for both types.

  3. in offline conversation we also had the discussion about making bids-study not a DatasetType but a StudyType. Reasoning for that would be to have a clear specification for StudyType, maybe the validation would be wasier than changing the nesting logic of existing DatasetTypes and it is expandable to e.g. Meta or Mega Analysis etc. Wdyt?

@julia-pfarr

Copy link
Copy Markdown
Member

re-posting my comment from bids-specification/bids-website#688 here again since it was misplaced in that PR:

I kind of don't understand why we need to serve all these different cases of where to store what?

Why can't we just say

  • root/sourcedata --> out of scanner data
  • root/raw --> raw data in BIDS
  • root/derivatives --> anything starting with preprocessing, in BIDS
  • If you have only one of those three, adding a second level folder is not necessary.

@yarikoptic

Copy link
Copy Markdown
Collaborator

There is a lot to discuss and unpack. And I do like the clarity of sourcedata (non-BIDS), raw (BIDS), derivatives (BIDS). But, then immediately questions come up, in particular with account that "study" BIDS dataset is just a "base" case of any BIDS dataset, just without direct data (sub-*) in it. Questions:

  • where do we place non-BIDS derivatives?
  • where, for a BIDS derivative dataset, do we place BIDS input datasets used to produce it
    • when they are "raw BIDS"
    • when they are "derivative BIDS"
    • when they are a mix of both

My point, is that ATM sourcedata/ and derivatives/ separation and lack of further formalization under them is made to foster flexibility. That is where any BIDS dataset can place relevant source data (from scanner or other BIDS datasets, BIDS raw or not) under sourcedata/ and then store produced derivatives (some of which might be BIDS) produced either from sourcedata/ ones (in case of "study") and/or current BIDS dataset itself (if not "study") - under derivatives/.
sourcedata/raw within study is just a suggestion since derivatives/ are for "derived from BIDS datasets" hence "raw BIDS" cannot be there by definition.

Going back to items

  • 1: it does not need to be all or nothing: "study" DatasetType just follows what BIDS defines already for "raw" and "derivative" types -- basic folder structure, files and metadata at the root. As soon as we formalize sourcedata/ or derivatives/ more -- it would benefit from that too. Similarly BEP on stimuli tries to further formalize stimuli/ folder.
  • 2: sorry -- not following there, may be partially due to weak knowhow on phenotype/
  • 3: what is StudyType -- we do not have that in bids yet I think?

@julia-pfarr

Copy link
Copy Markdown
Member

For the sake of moving forward with this PR, let’s only review and approve/disapprove of the changes made by @nikhil153 and move this bigger discussion to a dedicated meeting (maybe at distribits?). Wdyt @yarikoptic and @effigies, could you do a final review on Nikhil's changes?


Still, I'll post my answers here, to use this PR as the starting point for following discussions (and that I don't forget what I wanted to say...):

  1. I actually did not mean an "all or nothing" approach but my thoughts were very much like yours. At the very base, I assume bids-study means I should follow BIDS wherever is possible. Meaning, that if I have data in the derivatives folder, it should follow a BIDS spec IF there is one. If there is none, then it’s not in BIDS but that’s fine because we don’t have a spec for this (yet). So derivatives can hold both, non-BIDS and BIDS derivatives.
    My point here was more about if we need a bids- prefix for the folders or not. So "it is BIDS" is the umbrella assumption for everything that is in the study but not a hard requirement.

  2. This was just me voting for having a /phenotype folder at root level. Since the current phenotype BEP does not make any layout suggestions for /phenotype within bids-study, I feel we have some freedom here to decide where the /phenotype folder should/could be. I did not see anything in the current version of the phenotype BEP that would be violated by having /phenotype at root level in the bids-study layout.

  3. No, we don’t have that yet. We can talk about this another time and separate this discussion from this one!

Your other questions:

where do we place non-BIDS derivatives?

This I addressed in my reply to 1.

where, for a BIDS derivative dataset, do we place BIDS input datasets used to produce it
* when they are "raw BIDS"
* when they are "derivative BIDS"
* when they are a mix of both

This is a point where you and I (and probably BIDS and I) don’t use the same meaning for sourcedata.

  • Sourcedata for me is any data in it’s barest form, like right after its „birth“. And only this.
  • Raw for me is non-processed data but data that is in a standard and interoperable format.
  • Derivative for me is everything that was processed, no matter if it was processed directly from sourcedata or raw or other derivatives.

For me it does not make a difference if this dataset was used as an input, it is NOT sourcedata if it is in the raw or derivatives form. Whereas you use sourcedata for anything that was an input for something, no matter of its form.

So, for me, the answers would be:

  • „where do we place BIDS input datasets used to produce it when they are „raw BIDS““ —> in /raw
  • „where do we place BIDS input datasets used to produce it when they are „derivative BIDS““ —> in /derivatives
  • „where do we place BIDS input datasets used to produce it when they are a mix of both“ —> separated in /raw and /derivatives.

We do have the Sources metadata for the derivatives, so it shouldn’t be an issue if inputs are in different places.

@jbpoline

Copy link
Copy Markdown
Contributor

2cents : the very flexible specification comes at the cost of loss of useful information in the standard, I would certainly make "raw"/"rawbids" the only (first?) place to search for a BIDS validated dataset, that would be useful for the tools and mental clarity : source data == not BIDS, raw/rawbids == BIDS

@CPernet

CPernet commented Oct 24, 2025

Copy link
Copy Markdown
Collaborator

I like the idea, obviously, but I wonder how this conflicts with the existing structure —i.e., how the validator behaves and whether 'we' want to differentiate cases. Concretely,

MyData/
      |- source
      |- derivatives
      |- sub-01

vs

MyStudy/
       |- bids-source
       |- bids-derivatives
       |- bids-raw
                  |- sub-01
  • source and bids-source are ignored
  • derivatives and bids-derivatives are validated for whatever parts follow BIDS
  • MyData (a BIDS dataset) is validated to same as bids-raw except for Modality agnostic files
  • MyStudy has an extra validation ? and Modality agnostic files are at this level

@nikhil153 nikhil153 marked this pull request as ready for review October 29, 2025 15:04
@julia-pfarr

Copy link
Copy Markdown
Member

@yarikoptic @effigies how is it going with this PR?

@effigies

effigies commented Nov 6, 2025

Copy link
Copy Markdown
Collaborator

Regarding phenotype, pulling it out of the primary dataset seems to run counter to BEP36, which aims to put additional constraints on phenotype. Because many of those rules hinge on relationships between phenotype files and root-level participants.tsv/sessions.tsv, I think this would relax those new rules almost entirely.

I also have a pair of questions:

  1. In each of sourcedata/, rawdata/ and derivatives/, is the contents of each of these directories supposed to be a dataset, or are they a collection of datasets, or are they potentially an arbitrary directory structure with datasets appearing somewhere within? Just to illustrate my meaning:

    study/
      sourcedata/
        dicoms/ <- second level
        physio/  <- second level
      rawdata/
        dataset_description.json <- first level
      derivatives/
        subdirA/
          subdirB/
            dataset_description.json <- third level
        subdirC/
          subdirD/
            subdirE/
              dataset_description.json <- fourth level
    
  2. Is a validator expected to find BIDS datasets in any/all of these subdirectories and validate them, or do these all remain opaque, and it's the responsibility of the curator/archive to validate subdatasets?

The simple answers: 1) The contents are arbitrary (at least as far as this PR is concerned); 2) No (at least as far as this PR is concerned).

You could go a bit further and say that rawdata/ is expected to be a BIDS dataset, which is a very straightforward directive for a toolwriter to follow (see study, look in rawdata/), but that then rules out the possibility of multiple raw datasets.

I realize these aren't problems Nikhil is introducing, but up to now, there has been a validator behavior for sourcedata/ and derivatives/: ignore their contents. When re-introducing rawdata/, it's an opportunity to think through whether BIDS has anything to say inside these directories.

@nikhil153

Copy link
Copy Markdown
Contributor Author

@effigies,
Re: phenotype, if that's the case, then wouldn't it be an issue for the derivative DatasetType as well? Happy to discuss the implication in the BEP36 thread, as I am not sure if it currently considers the newer DatasetTypes (i.e. derivative and study).

Re: questions, my view would be:
sourcedata : arbitrary
rawdata: single BIDS raw DatasetType (i.e. no collection of datasets)
derivatives: non-nested (i.e. no derivatives within derivatives) collection of BIDS derivative DatasetType.

I think allowing multiple raw datasets would create several complications that are better discussed at a later time - possibly under BIDS-MEGA BEP / BIDS2.0?
For derivatives directory, allowing nested sub-directory structure as in your example is okay. As long there there is no nesting of Datasets themselves i.e. no nesting of dataset_description.json files. Hopefully, this would allow enough flexibility for pipeline outputs while avoiding recursion and keeping the validator logic relatively simple.

@julia-pfarr

Copy link
Copy Markdown
Member

@bids-maintenance please look at this PR and discussion and comment your thoughts! Thank you <3

@neuromechanist neuromechanist left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Late to the party, the change LGTM since:
Common Principles document defines source vs. raw vs. derivative data. Having raw directory (as raw, bidsraw, or rawdata) provides parity.

However, as a result the text under Study Dataset needs to be revised as well to match the suggested structure here.

Comment on lines +53 to +56
phenotype:
name: phenotype
level: optional
opaque: false

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Sorry for the long silence.

The reason for removing phenotype directory was that it would presumably appear in the raw dataset. But isn't that true for derivatives directory as well? It's a bit confusing having derivatives part of all three DatasetTypes but enforcing phenotype only be part of raw or derivative. In practice, phenotype data curation is likely to be more independent than that of derivatives, which is one of the reasons we prefer it to be at the top level.

So the logic in derivatives is that any raw dataset is a valid derivative dataset, so you cannot restrict, you can only expand. Furthermore, you can have derivatives of derivatives, so nesting is entirely reasonable. I suppose you could preprocess phenotypic data and include it in a derivative, so it might even make sense.

IMO, if phenotypic data is worth including in the study, it's worth including in the raw data, regardless of the independence of curation. I still don't see the use case for phenotype at the study level.

That said, I won't block this.

@effigies effigies added this to the 1.11.0 milestone Jan 16, 2026
@julia-pfarr

Copy link
Copy Markdown
Member

@effigies do you approve? @bids-maintenance could someone else take another look, since we need 2 approvals

@effigies effigies left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM. @yarikoptic?

Comment thread src/common-principles.md Outdated
@bendhouseart

Copy link
Copy Markdown
Collaborator

If the point of the rawdata/ folder is to hold bids data that is used to construct the parent dataset, then why can't we call it datasets/ and use the dataset description to describe the dataset type with rawdata, derivative, pheno etc?

Then, the parent dataset could be understood to have been constructed from any number of child datasets (raw or derivative) and further outputs from that parent dataset go in into derivative/ and so on and so forth?

I don't believe we ever define dataset in the spec, but maybe this is an opportunity to do so and have a flexible layout?

@effigies effigies changed the title [ENH] Add phenotype and rawdata directories to "study" datasets [ENH] Add phenotype and rawbids directories to "study" datasets Apr 10, 2026
@effigies

Copy link
Copy Markdown
Collaborator

Given that the latest response was to the rawdata/ proposal, I want to try to reestablish the state of this discussion.

In February, we had an offline conversation that led to changing the proposal to rawbids/, but the reasoning wasn't shared. Here is my recollection of the discussion:

  • Right now, you can stick source datasets (BIDS or pre-BIDS) in sourcedata/ and derivative datasets in derivatives/. For raw and derivative datasets, sourcedata/ and derivative/ are relative to the current dataset's contents.
  • There are three problems with the status quo:
    1. For BIDS-Study datasets, the line between sourcedata/ and derivative/ is up to the curator. There is no blessed location for the BIDS dataset that is the subject of the study.
    2. When training people to use nipoppy (the project that was the original inspiration of of BIDS-Study, and which hopes to be able to fully adopt BIDS-Study), there was pretty strong resistance among trainees to use sourcedata/raw for the raw BIDS datasets. Due to the example of sourcedata/+rawdata/+derivatives/ that was in historical drafts of the BIDS spec, rawdata/ was familiar and made sense to users.
    3. rawdata/ is a bad name, with "raw" having different connotations for different people.

Because "raw BIDS" is a phrase that appears in Common principles and BIDS Derivatives, rawbids/ was proposed as being a compromise that addresses all three problems:

  1. It unambiguously identifies the topic of a BIDS-Study dataset.
  2. It is close enough to the historical rawdata/ example that it should face less user resistance.
  3. It clarifies that "raw" is being used according to BIDS' idiosyncratic usage.

Finally, for the sake of consistency, rawbids/ is permitted for derivative datasets, while it is not meaningful for raw datasets.

Hopefully others will add to this if I have missed something.

@yarikoptic yarikoptic left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM.

Thanks all the sharing pain and joy!

@nikhil153

Copy link
Copy Markdown
Contributor Author

@effigies - thanks for the apt summary!

@effigies, @yarikoptic and other @bids-maintenance - greatly appreciate your efforts, patient explanations, and interesting conversations on the messy business of maintaining standards!

@michellewang, @mathdugre, @julia-pfarr, @nburgos, @AliceJoubert, @Adam-Ismaili-92, @surchs, @jbpoline - thanks for your feedback in shaping and fine-tuning this PR.

We look forward to the convergence of nipoppy and BIDS-Study that would grow the community adoption further!

@julia-pfarr julia-pfarr merged commit 308395f into bids-standard:master Apr 17, 2026
17 of 23 checks passed
yarikoptic added a commit to yarikoptic/bids-validator that referenced this pull request Apr 21, 2026
`BIDSContextDataset.opaqueDirectories` was computed only from
`rules.directories.raw`, so opaque directories declared only at the
study level (e.g. `rawbids/` in recent schemas — see
bids-standard/bids-specification#2191) were not marked opaque.  The
walker would then descend into them and raise `NOT_INCLUDED` for
their contents.

Now compute the set from both `rules.directories.raw` and
`rules.directories.study`, so any directory marked `opaque: true` in
either section is honored regardless of the dataset's `DatasetType`.

For a study dataset containing `rawbids/`, this is sufficient: the
existing `findDirRuleMatches` path with `datasetType = "study"` already
matches `rawbids` by name, avoiding `NOT_INCLUDED` on the pseudo-file
itself.

Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
yarikoptic added a commit to yarikoptic/bids-validator that referenced this pull request Apr 21, 2026
`BIDSContextDataset.opaqueDirectories` was hardcoded to
`rules.directories.raw`, regardless of the dataset's `DatasetType`.
This had two consequences:

- Derivative datasets did not recognize derivative-only opaque
  directories (e.g. `template`, `cohort`).
- Study datasets did not recognize study-only opaque directories
  (e.g. `rawbids/` added in
  bids-standard/bids-specification#2191), so the walker descended
  into them and raised `NOT_INCLUDED` on their contents.

Switch to `rules.directories[DatasetType]` so each dataset uses the
rules for its own type.  `DatasetType` is only populated after the
constructor runs (the caller assigns it from the loaded
`dataset_description.json` afterward), so move the computation into
a helper that is invoked from both the constructor and the
`dataset_description` setter, keeping the set in sync.

Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
yarikoptic added a commit to yarikoptic/bids-validator that referenced this pull request Apr 21, 2026
`BIDSContextDataset.opaqueDirectories` was hardcoded to
`rules.directories.raw`, regardless of the dataset's `DatasetType`.
This had two consequences:

- Derivative datasets did not recognize derivative-only opaque
  directories (e.g. `template`, `cohort`).
- Study datasets did not recognize study-only opaque directories
  (e.g. `rawbids/` added in
  bids-standard/bids-specification#2191), so the walker descended
  into them and raised `NOT_INCLUDED` on their contents.

Switch to `rules.directories[DatasetType]` so each dataset uses the
rules for its own type.  `DatasetType` is only populated after the
constructor runs (the caller assigns it from the loaded
`dataset_description.json` afterward), so move the computation into
a helper that is invoked from both the constructor and the
`dataset_description` setter, keeping the set in sync.

Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
yarikoptic added a commit to yarikoptic/bids-validator that referenced this pull request Apr 23, 2026
Recursive validation (`-r`) previously recognized only datasets under
`derivatives/<name>/`.  Nested BIDS datasets placed under `rawbids/`
(new study-level container, bids-standard/bids-specification#2191) or
`sourcedata/` (historically used for `sourcedata/raw/` or
OpenNeuro-style `sourcedata/ds00003/`) were silently ignored, so
internal bugs in those subdatasets never surfaced.

Generalize the detection:

- For each of `derivatives/`, `rawbids/`, `sourcedata/`, check both
  forms:
  - Immediate: the container itself contains `dataset_description.json`
    (single nested dataset, e.g. `rawbids/dataset_description.json`).
  - Subfolder: one or more immediate children contain
    `dataset_description.json` (e.g. `derivatives/fmriprep/`,
    `sourcedata/ds00003/`).
- Rename the local collection to `bidsNestedDatasets` /
  `nestedDatasetsSummary`; keep the public `derivativesSummary` field
  for API stability but widen its documented semantics.
- Update the text output label "Derivative:" -> "Nested dataset:".

Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
yarikoptic added a commit to yarikoptic/bids-validator that referenced this pull request Apr 24, 2026
Recursive validation (`-r`) previously recognized only datasets under
`derivatives/<name>/`.  Nested BIDS datasets placed under `rawbids/`
(new study-level container, bids-standard/bids-specification#2191) or
`sourcedata/` (historically used for `sourcedata/raw/` or
OpenNeuro-style `sourcedata/ds00003/`) were silently ignored, so
internal bugs in those subdatasets never surfaced.

Generalize the detection:

- For each of `derivatives/`, `rawbids/`, `sourcedata/`, check both
  forms:
  - Immediate: the container itself contains `dataset_description.json`
    (single nested dataset, e.g. `rawbids/dataset_description.json`).
  - Subfolder: one or more immediate children contain
    `dataset_description.json` (e.g. `derivatives/fmriprep/`,
    `sourcedata/ds00003/`).
- Rename the local collection to `bidsNestedDatasets` /
  `nestedDatasetsSummary`; keep the public `derivativesSummary` field
  for API stability but widen its documented semantics.
- Update the text output label "Derivative:" -> "Nested dataset:".

Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
yarikoptic added a commit that referenced this pull request May 7, 2026
…2409)

PR #2191 added rawbids/ to the study DatasetType but not to derivative,
even though the same convention -- "rawbids/ holds the raw BIDS dataset"
-- is equally applicable when a standalone derivative dataset includes
its raw source.

- Add rawbids as an optional opaque subdirectory of the derivative
  DatasetType in src/schema/rules/directories.yaml.
- Update the derivative example in common-principles.md to use rawbids/
  instead of sourcedata/raw/.
- Clarify that rawbids/ is reserved for raw BIDS datasets in both study
  and derivative cases, and that derivatives of derivatives MUST place
  their source derivative under sourcedata/ (not rawbids/).

Co-authored-by: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
yarikoptic added a commit to yarikoptic/bids-validator that referenced this pull request Jun 3, 2026
Recursive validation (`-r`) previously recognized only datasets under
`derivatives/<name>/`.  Nested BIDS datasets placed under `rawbids/`
(new study-level container, bids-standard/bids-specification#2191) or
`sourcedata/` (historically used for `sourcedata/raw/` or
OpenNeuro-style `sourcedata/ds00003/`) were silently ignored, so
internal bugs in those subdatasets never surfaced.

Generalize the detection:

- For each of `derivatives/`, `rawbids/`, `sourcedata/`, check both
  forms:
  - Immediate: the container itself contains `dataset_description.json`
    (single nested dataset, e.g. `rawbids/dataset_description.json`).
  - Subfolder: one or more immediate children contain
    `dataset_description.json` (e.g. `derivatives/fmriprep/`,
    `sourcedata/ds00003/`).
- Rename the local collection to `bidsNestedDatasets` /
  `nestedDatasetsSummary`; keep the public `derivativesSummary` field
  for API stability but widen its documented semantics.
- Update the text output label "Derivative:" -> "Nested dataset:".

Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ericearl added a commit to surchs/bids-specification that referenced this pull request Jun 11, 2026
* fix(bst): Address deprecation warnings (bids-standard#2361)

* chore: Set minimum dependencies, use dependency groups

* chore: Add tox.ini to run test suite

* chore(ci): Use tox to run bidsschematools CI

* chore: Update pre-commit excludes

* chore(tox): Enable -Werror to catch incoming warnings

* fix: Address pyparsing deprecation warning

* fix: Only opt in ot pandas 3.0 behaviors if pandas is not 3+

* chore(dependabot): Update uv.locks quarterly

* chore(dependabot): Drop update frequencies to quarterly

* chore(ci): Use FORCE_COLOR, limit token permissions

* chore: Drop Python 3.9 support, test on 3.14

* chore: Add uv.lock for package, update base lock

* chore: Bump schema package to 1.2.2

* chore: Bump schema package to 1.2.3-dev

* fix(ci): Call pre-build script correctly

* [DATALAD RUNCMD] bash -c 'uv lock && (cd tools/schemacode...

=== Do not change lines below ===
{
 "chain": [],
 "cmd": "bash -c 'uv lock && (cd tools/schemacode; uv lock)'",
 "exit": 0,
 "extra_inputs": [],
 "inputs": [],
 "outputs": [],
 "pwd": "."
}
^^^ Do not change lines above ^^^

* fix: Bad merge

* chore(deps): bump the build-dependencies group across 1 directory with 5 updates (bids-standard#2370)

Bumps the build-dependencies group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [mkdocs-material](https://github.com/squidfunk/mkdocs-material) | `9.7.1` | `9.7.4` |
| [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) | `10.20` | `10.21` |
| [numpy](https://github.com/numpy/numpy) | `2.4.1` | `2.4.3` |
| [myst-nb](https://github.com/executablebooks/myst-nb) | `1.3.0` | `1.4.0` |
| [universal-pathlib](https://github.com/fsspec/universal_pathlib) | `0.3.8` | `0.3.10` |



Updates `mkdocs-material` from 9.7.1 to 9.7.4
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](squidfunk/mkdocs-material@9.7.1...9.7.4)

Updates `pymdown-extensions` from 10.20 to 10.21
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](facelessuser/pymdown-extensions@10.20...10.21)

Updates `numpy` from 2.4.1 to 2.4.3
- [Release notes](https://github.com/numpy/numpy/releases)
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
- [Commits](numpy/numpy@v2.4.1...v2.4.3)

Updates `myst-nb` from 1.3.0 to 1.4.0
- [Release notes](https://github.com/executablebooks/myst-nb/releases)
- [Changelog](https://github.com/executablebooks/MyST-NB/blob/main/CHANGELOG.md)
- [Commits](executablebooks/MyST-NB@v1.3.0...v1.4.0)

Updates `universal-pathlib` from 0.3.8 to 0.3.10
- [Release notes](https://github.com/fsspec/universal_pathlib/releases)
- [Changelog](https://github.com/fsspec/universal_pathlib/blob/main/CHANGELOG.md)
- [Commits](fsspec/universal_pathlib@v0.3.8...v0.3.10)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-version: 9.7.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-dependencies
- dependency-name: pymdown-extensions
  dependency-version: '10.21'
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: build-dependencies
- dependency-name: numpy
  dependency-version: 2.4.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: build-dependencies
- dependency-name: myst-nb
  dependency-version: 1.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: build-dependencies
- dependency-name: universal-pathlib
  dependency-version: 0.3.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: build-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump tornado from 6.5.2 to 6.5.5 (bids-standard#2360)

Bumps [tornado](https://github.com/tornadoweb/tornado) from 6.5.2 to 6.5.5.
- [Changelog](https://github.com/tornadoweb/tornado/blob/master/docs/releases.rst)
- [Commits](tornadoweb/tornado@v6.5.2...v6.5.5)

---
updated-dependencies:
- dependency-name: tornado
  dependency-version: 6.5.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump minimatch from 9.0.5 to 9.0.9 (bids-standard#2355)

Bumps [minimatch](https://github.com/isaacs/minimatch) from 9.0.5 to 9.0.9.
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](isaacs/minimatch@v9.0.5...v9.0.9)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-version: 9.0.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump actions/upload-artifact (bids-standard#2369)

Bumps the actions-infrastructure group with 1 update: [actions/upload-artifact](https://github.com/actions/upload-artifact).


Updates `actions/upload-artifact` from 6 to 7
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-infrastructure
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump prettier in the node-utilities group (bids-standard#2352)

Bumps the node-utilities group with 1 update: [prettier](https://github.com/prettier/prettier).


Updates `prettier` from 3.8.0 to 3.8.1
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](prettier/prettier@3.8.0...3.8.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: node-utilities
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump picomatch from 2.3.1 to 2.3.2

Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2.
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](micromatch/picomatch@2.3.1...2.3.2)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump requests from 2.32.5 to 2.33.0 in /tools/schemacode

Bumps [requests](https://github.com/psf/requests) from 2.32.5 to 2.33.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](psf/requests@v2.32.5...v2.33.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.33.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fix BIDS Starter Kit link in src/index.md (bids-standard#2374)

Updated link for the BIDS Starter Kit to the correct URL.

* chore(deps): bump yaml from 2.8.1 to 2.8.3

Bumps [yaml](https://github.com/eemeli/yaml) from 2.8.1 to 2.8.3.
- [Release notes](https://github.com/eemeli/yaml/releases)
- [Commits](eemeli/yaml@v2.8.1...v2.8.3)

---
updated-dependencies:
- dependency-name: yaml
  dependency-version: 2.8.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump brace-expansion from 2.0.2 to 2.0.3

Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](juliangruber/brace-expansion@v2.0.2...v2.0.3)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 2.0.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump pygments from 2.19.2 to 2.20.0

Bumps [pygments](https://github.com/pygments/pygments) from 2.19.2 to 2.20.0.
- [Release notes](https://github.com/pygments/pygments/releases)
- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)
- [Commits](pygments/pygments@2.19.2...2.20.0)

---
updated-dependencies:
- dependency-name: pygments
  dependency-version: 2.20.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump pygments from 2.19.2 to 2.20.0 in /tools/schemacode

Bumps [pygments](https://github.com/pygments/pygments) from 2.19.2 to 2.20.0.
- [Release notes](https://github.com/pygments/pygments/releases)
- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)
- [Commits](pygments/pygments@2.19.2...2.20.0)

---
updated-dependencies:
- dependency-name: pygments
  dependency-version: 2.20.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump actions/download-artifact

Bumps the actions-infrastructure group with 1 update: [actions/download-artifact](https://github.com/actions/download-artifact).


Updates `actions/download-artifact` from 7 to 8
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](actions/download-artifact@v7...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-infrastructure
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump aiohttp from 3.13.3 to 3.13.4

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-version: 3.13.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump lodash from 4.17.23 to 4.18.1

Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](lodash/lodash@4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.18.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(tox): Fix environment to avoid pre-release tests (bids-standard#2391)

* [pre-commit.ci] pre-commit autoupdate (bids-standard#2381)

updates:
- [github.com/python-jsonschema/check-jsonschema: 0.37.0 → 0.37.1](python-jsonschema/check-jsonschema@0.37.0...0.37.1)
- [github.com/codespell-project/codespell: v2.4.1 → v2.4.2](codespell-project/codespell@v2.4.1...v2.4.2)
- [github.com/pre-commit/mirrors-mypy: v1.19.1 → v1.20.0](pre-commit/mirrors-mypy@v1.19.1...v1.20.0)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* [ENH] Link to example datasets page on the website (bids-standard#2364)

* [FIX] Accept MiscChannelCount in EEG/Motion sidecars; deprecate MISCChannelCount alias (bids-standard#2394)

* schema: accept MiscChannelCount in EEG sidecar; deprecate MISCChannelCount alias

The Recommended-fields rule for EEG sidecars uses MISCChannelCount, but
the validator check rule (MiscChannelCountReq), the spec example in
electroencephalography.md, the MEG and iEEG sidecar rules, and the
legacy validator's JSON schema all use MiscChannelCount. Datasets in the
wild already exist with both spellings.

Make MiscChannelCount the canonical recommended key (matching the rest
of the schema and the docs example) while keeping MISCChannelCount as a
deprecated alias so existing datasets continue to validate.

Closes bids-standard#2393.

* schema: apply MISCChannelCount deprecation to motion sidecar and glossary

Addresses review feedback on bids-standard#2394:

- Apply the same MiscChannelCount (recommended) + MISCChannelCount
  (deprecated) pattern to the motion sidecar rule, matching the EEG
  sidecar change.
- Simplify the EEG sidecar entry to the concise `deprecated` level
  (no per-rule addendum) now that the deprecation note lives with the
  field definition.
- Document the deprecation in the MISCChannelCount description in
  objects/metadata.yaml, so the glossary entry surfaces the canonical
  replacement wherever the field is referenced.

* Fix typos (bids-standard#2399)

* [FIX] Update OSIPI Task force link for ASL lexicon (bids-standard#2396)

* [ENH] Add phenotype and rawbids directories to "study" datasets (bids-standard#2191)

* Suggested modifications to directory layout of the bids-study DatasetType

* fixed minor typos

* removed bids prefix from the DatasetType and subdirs.

* changed rawdata to rawbids directory in the study dataset and updated description in the common principles

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fixed URL in the JSON example

* Update src/common-principles.md

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Chris Markiewicz <effigies@gmail.com>
Co-authored-by: Chris Markiewicz <markiewicz@stanford.edu>
Co-authored-by: Julia-Katharina Pfarr <111446107+julia-pfarr@users.noreply.github.com>

* [ENH] Allow rawbids/ in derivative datasets for the raw BIDS source (bids-standard#2409)

PR bids-standard#2191 added rawbids/ to the study DatasetType but not to derivative,
even though the same convention -- "rawbids/ holds the raw BIDS dataset"
-- is equally applicable when a standalone derivative dataset includes
its raw source.

- Add rawbids as an optional opaque subdirectory of the derivative
  DatasetType in src/schema/rules/directories.yaml.
- Update the derivative example in common-principles.md to use rawbids/
  instead of sourcedata/raw/.
- Clarify that rawbids/ is reserved for raw BIDS datasets in both study
  and derivative cases, and that derivatives of derivatives MUST place
  their source derivative under sourcedata/ (not rawbids/).

Co-authored-by: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [ENH] Recommend controlled vocabulary for age Units, clarify that it can be overloaded (bids-standard#2400)

* Clarify that age Units could be overriden and refer to Units in common principles

* Add ISO 8601-based duration units for age and validate in schema

Document in common-principles.md that age Units MAY be overridden
to one of: year, month, week, day, hour, minute, or second (based on
ISO 8601 duration designators).  Add AgeUnits schema check rule that
validates participants.json age Units against the allowed set.

Co-Authored-By: Claude Code 2.1.110 / Claude Opus 4.6 <noreply@anthropic.com>

* Keep compatible (warning, not error) + simplify check

Co-authored-by: Chris Markiewicz <effigies@gmail.com>

* Remove duplicate specification of units in the Description

Co-authored-by: Yaroslav Halchenko <debian@onerussian.com>

* Make check operate on participants.tsv not .json

Co-authored-by: Chris Markiewicz <effigies@gmail.com>

---------

Co-authored-by: Claude Code 2.1.110 / Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Chris Markiewicz <effigies@gmail.com>

* [ENH] Allow for institutions to be listed as Authors (bids-standard#2397)

* Allow for institutions to be listed as Authors

It is not uncommon to have datasets which are a truly an institutional effort -- from
data collection planing, acquisition, curation, harmonization etc, where it is a pipeline
to deliver high quality datasets.  For instance we have a number of such contributions from
Allen Institute(s) in DANDI archive.  In DANDI schema we allow for both Person and Organization
entries, and e.g. in https://github.com/dandisets/000020 we have

```yaml
contributor:
- affiliation:
  - identifier: https://ror.org/00dcv1019
    name: Allen Institute for Brain Science
    schemaKey: Affiliation
  email: nathang@alleninstitute.org
  identifier: 0000-0001-8429-4090
  includeInCitation: false
  name: Gouwens, Nathan
  roleName:
  - dcite:ContactPerson
  schemaKey: Person
- contactPoint: []
  identifier: https://ror.org/00dcv1019
  includeInCitation: true
  name: Allen Institute for Brain Science
  roleName: []
  schemaKey: Organization
  url: https://alleninstitute.org
```

so there is an Organization, which is actually the one to cite, although we do
not list any particular roleName, and then responsible ContactPerson (who is
not even listed as an Author) who could be contacted  ATM (but might be a
different person later) about this dandiset.

I have tried to make wording a bit more explicit than just listing Organizations
as a possible entry here, rather to keep it for large efforts.

* Shorten and generalize statement about Authors

Co-authored-by: Chris Markiewicz <effigies@gmail.com>

---------

Co-authored-by: Chris Markiewicz <effigies@gmail.com>
Co-authored-by: Mark Mikkelsen <mark.mikkelsen@gmail.com>

* [FIX] Bump pymdown-extensions to >=10.21.2 to restore code-block rendering (bids-standard#2438)

* [FIX] Bump pymdown-extensions to >=10.21.2 to restore code-block rendering (bids-standard#2421)

Pygments 2.20.0 made `html.escape()` on the formatter's `filename`
option strict, raising `AttributeError` when the value is `None`.
pymdownx.highlight 10.21 (and earlier) passed `filename=title` where
`title` defaults to `None` for code blocks without a title, which
triggered the crash. pymdownx.superfences catches that exception and
silently falls back to inline-`<code>` rendering, so fenced code
blocks inside list items (e.g. the "Plain" examples in
common-principles.md) lost their `<pre>` formatting and showed the
language tag as literal text.

pymdown-extensions 10.21.2 fixes the upstream defect, so require it
(or newer) in both the docs build and bidsschematools[render].

Closes: bids-standard#2421

Co-Authored-By: Claude Code 2.1.160 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [FIX] Regenerate tools/schemacode/uv.lock for pymdown-extensions bump

The previous commit updated tools/schemacode/pyproject.toml but
forgot to refresh its sibling uv.lock. The `latest` tox envs use
the `uv-venv-lock-runner` with `--locked`, so they failed `Setup
test suite` with the pyproject/lockfile mismatch.

Co-Authored-By: Claude Code 2.1.160 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Code 2.1.160 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Chris Markiewicz <markiewicz@stanford.edu>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Remi Gau <remi_gau@hotmail.com>
Co-authored-by: Bru <b.aristimunha@gmail.com>
Co-authored-by: Dimitri Papadopoulos Orfanos <3234522+DimitriPapadopoulos@users.noreply.github.com>
Co-authored-by: Kabilar Gunalan <kabi@mit.edu>
Co-authored-by: Nikhil Bhagwat <nikhil153@users.noreply.github.com>
Co-authored-by: Chris Markiewicz <effigies@gmail.com>
Co-authored-by: Julia-Katharina Pfarr <111446107+julia-pfarr@users.noreply.github.com>
Co-authored-by: Yaroslav Halchenko <debian@onerussian.com>
Co-authored-by: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Mark Mikkelsen <mark.mikkelsen@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

discussion ongoing discussion needs-review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants