Skip to content

[Sad Catapella B5][Correctness] Channel-label copy freshness check accepts missing or truncated OMERO metadata #88

Closed

Description

@guijacquemet

Baseline / classification

Adversarial audit Batch 5 at d7a538e56d41ac1093ba79adcad397c21b3dfd32. Confirmed source-level predicate defect, distinct from copy pixel integrity (#87 or its final issue number). No tests executed.

Evidence

Minimal cases

  1. Source TIFF has CYX, channels named DAPI/GFP; convert successfully. Delete omero from the copy's .zattrs while leaving multiscales metadata and axes unchanged; subsequent run can reuse a copy that no longer advertises its source channel names.
  2. Replace omero.channels with [] or with one matching channel; all(...) yields True, despite two expected channels.

Fix / tests

Require the entire expected channels list, including cardinality, to match the copy's stored metadata when a C axis is present; missing omero, malformed omero.channels or mismatched/extra/truncated labels should be False or a named corruption error. Verify whether no-C copies legitimately omit OMERO and keep that case explicit. Add regression tests for absent, empty, truncated, extra and correct labels, both named and unnamed channels. No Numba role.

Activity

  1. guijacquemet commented on Nov 2, 2026

    @guijacquemet
    ContributorAuthor

    Obsolete in v0.4.0: convert_tiffs, zarr_export and OME-Zarr copy reuse were removed in PP-2 (#66, commit 3c2802d; plan question 46). Named-axis copies of images with axis errors are now the OME-TIFF convert step (PP-11, #124, merged as 8db1f4a). Closing as not planned (owner-approved triage, 2026-11-02).

    PP-11's reuse check compares the recorded copy (fingerprint, axes, channel names) with the source; there is no OMERO freshness path any more.


    Generated by Claude Code

  2. guijacquemet commented on Nov 2, 2026

    @guijacquemet
    ContributorAuthor

    Reopening: an independent review of commit 8db1f4a found the closure premature. The closing comment said reuse compares channel names; it does not: CopyEntry has no channel-names field and same_plan() cannot compare them (nor significant bits). Fix: record the expected channel names (and significant bits) in the copy entry and compare them on reuse; the copy's content hash (#87) covers the written metadata. Tracked in PR PP-11c.


    Generated by Claude Code

  3. guijacquemet commented on Nov 2, 2026

    @guijacquemet
    ContributorAuthor

    Fixed by PR #126, merged as 6ac81ad (fix commit 4312b5a). I checked in the code before closing:


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions