Skip to content

Carry retire-class passthroughs as v1; openminds_element carry-128; species text accepted in the round trip - #293

Merged
jesshaley merged 5 commits into
V2from
claude/build-retire-carries
Oct 29, 2026
Merged

jesshaley merged 5 commits into
V2from
claude/build-retire-carries

Conversation

@jesshaley

Copy link
Copy Markdown
Collaborator

Based on V2, with claude/ecstatic-pascal-md91fw (#292, a test fix this branch's CI needs) merged in as a fast-forward. No MATLAB here: CI will be the first run.

1. [openMINDS element leftovers carried] (Jess Haley, 2026-10-29): built

  • +migrators_j/openminds_element.m: an element whose openminds block states a non-empty openminds_id or fields.description is carried whole as v1. Its note is [carry-128] awaiting_home: ....
  • +roundtrip/openminds_element.m: header updated.
  • Tests:
    • testWholeBatchRoundTrip: testAnOpenmindsElementReportsWhatItDoesNotKeep is INVERTED to testAnOpenmindsElementWithAnIdAndADescriptionIsCarried (each field alone also carries).
    • New testAnOpenmindsElementWithNeitherConverts.
    • testMigratorsJ: new testAnOpenmindsElementWithAnIdOrADescriptionIsCarried.

2. [species text is the openMINDS equivalent] (Jess Haley, 2026-10-29): built

  • +roundtrip/openminds_subject.m: for a Species, openminds.fields.definition and .synonym are added to spec.same, with the decision cited. check then reports them under equivalent, the same way the other accepted differences are expressed, and not as lost.
  • testWholeBatchRoundTrip: testAnOpenmindsSubjectRoundTrips is INVERTED to testAnOpenmindsSubjectRoundTripsWithTheSpeciesTextAccepted.

3. [one folder, final classes only] (Jess Haley, 2026-10-29): silent passthroughs under a retire class

Carried whole as v1 with a carried_as_v1 note. Each marker says % carry-register: none, because no existing row's when covers these reasons:

  • Nothing to declare: daqmetadatareader.m, daqreader.m, daqsystem.m, filenavigator.m
  • Nothing to fold: electrode_offset_voltage.m (offset not finite), probe_geometry.m (no axis values)
  • syncgraph.m: no session id, or the sentinel
  • No subject:
    • private/jModelFit.m (fitcurve, vmspikefit)
    • hartley_calc.m (checked just before jCalculation; the shared guard in jCalculation is unchanged for the other callers)
  • Always carried: site2channelmap.m, stimulus_parameter.m, vmneuralresponseresiduals.m, vmspikesummary.m
    • stimulus_parameter no longer drops the empty value placeholder, since a carried document is not read against V2. Its char-value errors are unchanged.
  • vmspikefilteringparameters.m: spiketimes guard
  • subjectmeasurement.m: guards 1 to 4. Guard 4 only writes a note if jMeasurementFold did not already write one (carry-059).
  • openminds_element.m: no openMINDS block

New helper: private/jCarryId.m. The Contents.m roster was regenerated.

Unchanged: a deliberate input to a batch pass or to NDI's second pass.

  • control_stimulus_ids, ontology_table_row, openminds_stimulus: NDI second pass.
  • openminds: resolveOpenmindsCitations and NDI strainAssembly read the pass-1 output.
  • daqreader_epochdata_ingested, daqreader_image_epochdata_ingested: resolveEpochProbemap folds their files and retires the document.
  • epochfiles_ingested: resolveEpochProbemap and epochMint.
  • syncrule (:239): resolveClockAlignment stamps and re-runs it.
  • stimulus_response_scalar (GUARD 4): armed by epochMint.
  • stimulus_response_scalar_parameters_basic: resolveResponseParameters.

Skipped, needs a team answer: distance_metadata (:119-126) and oneepoch (:107-140). These reshape the document into the retire class rather than leave it as v1. [retired classes leave V2] (1) suggests carrying them, but that would drop the decided reshape. Should they be carried whole as v1, and under which register row?

Skipped, built elsewhere: binaryseries_parameters. The carry citing carry-122 is on claude/build-image-bodies (4fbfeca).

Tests INVERTED 2026-10-29:

  • testTheResidualPassthroughIsAQuarantinePathByConstruction → testTheResidualDaqsystemIsCarriedWholeAsV1
  • testFilenavigatorWithNothingToDeclarePassesThrough → ...IsCarried
  • testGraphWithTheEmptySessionSentinelPassesThrough → ...IsCarried
  • testFixturesRoundTripAsPassthroughs (IngestedEpochs) → ...OrCarries
  • testStimulusParameterEmptyValuePlaceholderIsDropped → ...IsCarriedAsWritten
  • Fixture outcomes for site2channelmap (Probe) and stimulus_parameter (Measurement) changed to carried

New tests: hollow daq readers and systems, electrode offset NaN, subjectmeasurement guards, stimulus_parameter, hartley with no subject, subjectless fitcurve.

Side effect: a carried document now pulls its dependents into a carry under carry-064, for example a syncrule_mapping of a sentinel syncgraph. The hollow and sentinel cases are ones NDI's writers do not produce.

check_carry_citations.py reports OK. test_check_carry_citations.py reports 19 tests, 0 failures. check_migrator_roster.py reports OK.


Generated by Claude Code

[openMINDS element leftovers carried] (Jess Haley, 2026-10-29): an
openminds_element stating an openminds_id or a fields.description is
carried whole as v1, citing carry-128.

[species text is the openMINDS equivalent] (Jess Haley, 2026-10-29): the
openminds_subject round trip reports a Species' definition and synonym as
an accepted difference (spec.same, reported as equivalent), not lost.

[one folder, final classes only] (Jess Haley, 2026-10-29): branches that
left a v1 document as v1 on purpose, but passed it through silently under
its retire class (validated against that V2 file), now carry it whole as
v1 with a carried_as_v1 note: daqmetadatareader, daqreader, daqsystem and
filenavigator (nothing to declare), electrode_offset_voltage and
probe_geometry (nothing to fold), syncgraph (no session), fitcurve and
vmspikefit (jModelFit, no subject), hartley_calc (no subject),
site2channelmap, stimulus_parameter, vmneuralresponseresiduals and
vmspikesummary (always), vmspikefilteringparameters (spiketimes),
subjectmeasurement (guards 1-4), openminds_element (no block). No register
row covers these reasons, so each marker says none. Branches that feed a
batch pass or NDI's second pass, and the reshapes, are unchanged.

Tests pinning the old passthroughs are inverted (INVERTED 2026-10-29).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FxKLA8Tbf9cpvDe7fuVeKf
…enminds_element

openminds_element is read on the renamed path, so pass 1 hands a carried
element back as the renamed body (depends_on value -> document_id, renamed
superclasses), recorded as a passthrough; the pipeline stores the untouched v1
source (v1_to_v2.m, "A CARRY IS THE V1 SOURCE"). The test compared the
renamed body with roundtrip.check and reported those renames as lost and
invented (CI on db17ce8). It now checks the passthrough is recorded and
compares what is stored, through roundtrip.wholeBatch, as the table-row test
above it does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FxKLA8Tbf9cpvDe7fuVeKf
did-schema #235 adds the register rows. Each marker now names its row and
each note opens with the row's tag and kind instead of 'unplaced:'.
private/jModelFit.m tags carry-136 for fitcurve, carry-137 for vmspikefit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FxKLA8Tbf9cpvDe7fuVeKf
@jesshaley
jesshaley marked this pull request as ready for review October 29, 2026 20:26
@jesshaley
jesshaley merged commit 7389989 into V2 Oct 29, 2026
11 of 13 checks passed
@jesshaley
jesshaley deleted the claude/build-retire-carries branch October 30, 2026 13:58
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.

2 participants