Skip to content

Merge master into dev - #769

Merged
d-chambers merged 8 commits into
devfrom
merge-master-into-dev-20260724
Jul 24, 2026
Merged

Merge master into dev#769
d-chambers merged 8 commits into
devfrom
merge-master-into-dev-20260724

Conversation

@d-chambers

@d-chambers d-chambers commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Description

Routine forward-integration of master into dev. Brings the 7 commits merged to master since the last integration into the dev branch (#767 coverage, #768 CoordRange fast paths, #766/#755/#753/#747/#745, and the assert→exception conversions in #765/#755).

Merge branched from origin/dev; four files conflicted and were resolved by hand:

  • dascore/io/wav/core.py — kept dev's coerce_to_local_path/coerce_to_upath resource handling and adopted master's assertParameterError conversion for the single-patch guard.
  • dascore/proc/correlate.py — kept dev's removal of the lag parameter (raises TypeError when lag is passed via kwargs) and adopted master's assertParameterError conversion for the 2D-patch guard. Master's deprecation-warning branch was dropped because lag is no longer a function parameter on dev.
  • tests/test_core/test_coords.py — kept both new test classes (TestStringCoords from dev, TestDimensionalityErrors from master).
  • tests/test_io/test_wav/test_wav.py — kept both new tests. Master's test_multi_patch_spool_raises was updated: two identical patches coalesce into a single logical patch under dev's spool semantics, so the test now offsets a copy in time to build a genuine 2-patch spool before asserting the write raises.

Changelog

none

Checklist

I have (if applicable):

  • referenced the GitHub issue this PR closes.
  • documented the new feature with docstrings and/or appropriate doc page. (n/a — integration merge)
  • included tests. (conflict-resolved tests updated; no new behavior)
  • added the "ready_for_review" tag once the PR is ready to be reviewed.

Verification

  • pre-commit run --files <changed> — passed (ruff, ruff-format, future-annotations, typos, etc.).
  • pytest tests8151 passed, 89 skipped, 2 xfailed in ~120s.

Summary by CodeRabbit

  • New Features

    • Waterfall plots now handle irregular sampling with smarter rendering and optional colored gap bands (gap_color, gap_factor).
    • Added gap/edge utilities for monotonic coordinate arrays.
  • Bug Fixes

    • Corrected decibel scaling for frequency-band energy in db=True.
    • Improved input validation and error reporting across core processing, visualization, and WAV writing.
  • Performance

    • No-op coordinate operations now avoid unnecessary rebuilds (e.g., sort/snap/transpose/squeeze).

d-chambers and others added 8 commits July 6, 2026 23:03
* Raise CoordError instead of assert for non-1D coord operations

Several coordinate operations that only support 1D coords guarded their
input with `assert`, which raises a bare AssertionError and is stripped
entirely under `python -O` (so the check silently vanishes in optimized
runs). Convert the user-reachable ones -- select-by-sample-array, align_to,
get_sample_count, CoordPartial.change_length, and CoordRange construction --
to raise CoordError. Genuine internal invariants that are impossible by
construction (CoordRange.change_length) stay as asserts.

Add tests covering each new error path.

* Extend assert->raise cleanup to proc, viz, and wav IO

Apply the same treatment repo-wide to user-reachable asserts that validate
caller input, converting them to ParameterError:

- proc/taper: taper window must be a length-2 sequence
- proc/detrend: dim must be in the patch
- proc/correlate: patch must be 2D
- viz/map_fiber: x/y/color must be existing coords; scale_type and scale validated
- io/wav: only single-patch spools can be written to wav

Internal invariants (impossible-by-construction shape/postcondition checks,
binary-format parser consistency) are left as asserts. Adds tests for every
new error path; the five changed modules keep 100% line coverage.
* fixed decibel scaling factore to 20 (was 10)

* fixed test to match new decibel factor
* implemented gap-sensistive waterfall plot

* added 3 more tests

* refactor gap_detection and mesh-coordinates; handle datetime64 natively
…ev-20260724

# Conflicts:
#	dascore/io/wav/core.py
#	dascore/proc/correlate.py
#	tests/test_core/test_coords.py
#	tests/test_io/test_wav/test_wav.py
@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR updates release instructions and CI actions, preserves objects on coordinate no-ops, replaces assertions with explicit errors, corrects FBE dB scaling, and adds gap-aware waterfall rendering with utilities, tests, and benchmarks.

Changes

DASCore and repository workflow changes

Layer / File(s) Summary
Release drafting workflow
.agents/skills/draft-release/SKILL.md
Release guidance restricts tag fetching to origin, records reverted PR pairs separately, and revises changelog classification rules.
CI action version upgrades
.github/actions/*, .github/workflows/*
Micromamba, cache, checkout, and Codecov actions are upgraded to newer major versions.
Coordinate identity and no-op processing
dascore/core/coordmanager.py, dascore/core/coords.py, dascore/proc/coords.py, tests/test_core/*, tests/test_proc/test_proc_coords.py, benchmarks/test_patch_benchmarks.py
Coordinate and patch operations preserve existing objects for no-op paths, retain CoordRange instances, and add identity, canonicalization, and benchmark coverage.
Explicit runtime validation
dascore/io/wav/core.py, dascore/proc/*, dascore/viz/map_fiber.py, tests/test_core/test_coords.py, tests/test_io/*, tests/test_proc/*, tests/test_viz/test_map_fiber.py
Assertion-based checks are replaced with ParameterError, CoordError, or validation handling, with tests for invalid dimensions, spools, taper inputs, coordinates, scales, and plotting inputs.
FBE decibel scaling
dascore/transform/fbe.py, tests/test_transform/test_fbe.py
The documented and implemented dB conversion uses 20 * log10(...), and the expected test value is updated.
Gap-aware waterfall rendering
dascore/utils/gaps.py, dascore/viz/waterfall.py, tests/test_utils/test_gaps.py, tests/test_viz/test_waterfall.py
Gap utilities support numeric and datetime-like coordinates; waterfall adds gap_color and gap_factor, selects mesh rendering for irregular coordinates, and tests masked gap bands and renderer behavior.

Possibly related PRs

Suggested labels: bug, CI, patch, proc, transform, viz

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title accurately reflects that this is a merge of master into dev, which matches the PR's integration-only intent.
Description check ✅ Passed The description follows the template with a Description and Checklist and includes conflict notes plus verification results.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch merge-master-into-dev-20260724

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot added bug Something isn't working CI continuous integration IO Work for reading/writing different formats patch related to Patch class proc Related to processing module spool related to Spool class transform Related to transform operations viz Related to visualization labels Jul 24, 2026
@codecov

codecov Bot commented Jul 24, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (4474c28) to head (fdcfde3).

Additional details and impacted files
@@            Coverage Diff             @@
##               dev      #769    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files          163       164     +1     
  Lines        17221     17357   +136     
==========================================
+ Hits         17221     17357   +136     
Flag Coverage Δ
network 48.25% <13.12%> (-0.28%) ⬇️
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 6

🧹 Nitpick comments (3)
tests/test_viz/test_waterfall.py (1)

68-84: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Optional: consolidate the two near-identical gap fixtures.

distance_gap_patch and time_gap_patch are structurally identical apart from the coordinate name. Could be collapsed into one parametrized fixture (e.g. parametrize on dim) to avoid duplicated maintenance.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_viz/test_waterfall.py` around lines 68 - 84, Consolidate the
duplicated distance_gap_patch and time_gap_patch fixtures into a single
parametrized fixture keyed by the coordinate dimension, such as “distance” or
“time.” Preserve the existing gap construction and return shape so each test
continues receiving the updated patch and split index.
tests/test_utils/test_gaps.py (1)

75-83: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Optional: add datetime/timedelta cases to TestIsMonotonicAndFinite.

is_monotonic_and_finite is used directly on datetime64/timedelta64 coordinate arrays in dascore/viz/waterfall.py's renderer-selection logic, but this suite only exercises plain numeric lists. Direct coverage here (rather than only indirectly via test_viz/test_waterfall.py) would pin down the datetime/timedelta contract in isolation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_utils/test_gaps.py` around lines 75 - 83, Extend
TestIsMonotonicAndFinite with direct datetime64 and timedelta64 cases for
is_monotonic_and_finite, covering valid monotonic finite arrays and invalid or
nonfinite values as supported by the function’s contract. Keep the existing
numeric tests unchanged and place the new coverage alongside test_valid and
test_invalid.
dascore/utils/gaps.py (1)

87-104: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Consider vectorizing the gap-edge construction loop.

This loop runs once per element of the irregular coordinate (O(N) pure Python) every time _plot_with_mesh renders. For large irregular coordinate arrays with few gaps, this could become a real cost on a plotting hot path. A vectorized approach — compute the default values[:-1] + diffs/2 edges array, then insert the two gap-boundary edges at gap positions using a cumulative-index technique (similar to the one already used in _insert_gap_bands in dascore/viz/waterfall.py) — would avoid the per-element Python loop while preserving identical output.

♻️ Sketch of a vectorized approach
# default midpoint edges, vectorized
mid_edges = values[:-1] + diffs / 2
# at gap positions, override with signed_step-based boundaries using
# an insertion technique analogous to _insert_gap_bands' cumsum trick,
# instead of the per-index Python loop.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@dascore/utils/gaps.py` around lines 87 - 104, Replace the per-element edge
construction loop in the surrounding gap-edge function with a vectorized
approach: compute the default midpoint edges from values and diffs, then insert
or override the two signed_step-based boundary edges for gap positions using a
cumulative-index technique like _insert_gap_bands. Preserve first_step,
last_step, edge ordering, and identical output for both gap and non-gap
intervals.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.agents/skills/draft-release/SKILL.md:
- Around line 96-97: Update the reverted PR example in the release skill
documentation so both `#126` and `#127` include their corresponding PR links, while
preserving the existing “Reverted (no net change)” wording and formatting.
- Around line 54-59: Update the reverted-pair guidance in the release drafting
instructions to require verifying the combined diff or resulting behavior before
omitting either PR from the main sections. Keep title/body wording as an
identification signal only, and list the pair under “Reverted (no net change)”
only when the check confirms no net user-facing change.

In @.github/workflows/build_deploy_master_docs.yaml:
- Around line 34-37: Disable persisted checkout credentials by adding
persist-credentials: false to the checkout steps in
.github/workflows/build_deploy_master_docs.yaml (34-37),
.github/workflows/build_deploy_stable_docs.yaml (29-32),
.github/workflows/get_coverage.yml (13-16), .github/workflows/lint.yml (19-22),
.github/workflows/profile.yml (30-33), both sites in
.github/workflows/run_min_dep_tests.yml (37 and 61-64), both sites in
.github/workflows/runtests.yml (41 and 66-69),
.github/workflows/test_doc_build.yml (18-21), and
.github/workflows/upload_pypi.yml (12-15). Verify the
.github/actions/mamba-install-dascore jobs first and do not change them unless
their later steps do not require authenticated Git.

In `@dascore/core/coords.py`:
- Around line 375-377: Require exactly one dimension in all affected coordinate
APIs by changing the ndim guards in dascore/core/coords.py ranges 375-377,
460-462, 949-951, and 1247-1249 from greater-than-one checks to not-equal-one
checks. Add regression cases in tests/test_core/test_coords.py range 2581-2617
using CoordPartial(shape=()) to verify sample-array selection, alignment,
sample-count calculation, and partial-coordinate resizing reject rank-0
coordinates.

In `@dascore/transform/fbe.py`:
- Around line 44-45: Update the dB documentation in the relevant transform
function to correct “orginal” to “original” and remove the extra closing
parenthesis from the 20 * log10(sqrt(mean(x^2))) formula, keeping the documented
calculation aligned with the implementation.

In `@dascore/viz/map_fiber.py`:
- Around line 24-29: Update the scale validation in the map-fiber configuration
flow to accept only numeric scalars or supported Sequence/np.ndarray values
before calling len, rejecting unsupported objects without leaking TypeError and
preventing strings such as "ab" from passing. Reuse the same scalar predicate in
the scale conversion logic around line 35 so validation and conversion apply
identical type rules.

---

Nitpick comments:
In `@dascore/utils/gaps.py`:
- Around line 87-104: Replace the per-element edge construction loop in the
surrounding gap-edge function with a vectorized approach: compute the default
midpoint edges from values and diffs, then insert or override the two
signed_step-based boundary edges for gap positions using a cumulative-index
technique like _insert_gap_bands. Preserve first_step, last_step, edge ordering,
and identical output for both gap and non-gap intervals.

In `@tests/test_utils/test_gaps.py`:
- Around line 75-83: Extend TestIsMonotonicAndFinite with direct datetime64 and
timedelta64 cases for is_monotonic_and_finite, covering valid monotonic finite
arrays and invalid or nonfinite values as supported by the function’s contract.
Keep the existing numeric tests unchanged and place the new coverage alongside
test_valid and test_invalid.

In `@tests/test_viz/test_waterfall.py`:
- Around line 68-84: Consolidate the duplicated distance_gap_patch and
time_gap_patch fixtures into a single parametrized fixture keyed by the
coordinate dimension, such as “distance” or “time.” Preserve the existing gap
construction and return shape so each test continues receiving the updated patch
and split index.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: cb7e610e-72ce-492a-93d2-d8f86cc0ab3f

📥 Commits

Reviewing files that changed from the base of the PR and between 4474c28 and fdcfde3.

📒 Files selected for processing (34)
  • .agents/skills/draft-release/SKILL.md
  • .github/actions/mamba-install-dascore/action.yml
  • .github/workflows/build_deploy_master_docs.yaml
  • .github/workflows/build_deploy_stable_docs.yaml
  • .github/workflows/get_coverage.yml
  • .github/workflows/lint.yml
  • .github/workflows/profile.yml
  • .github/workflows/run_min_dep_tests.yml
  • .github/workflows/runtests.yml
  • .github/workflows/test_doc_build.yml
  • .github/workflows/upload_pypi.yml
  • benchmarks/test_patch_benchmarks.py
  • dascore/core/coordmanager.py
  • dascore/core/coords.py
  • dascore/io/wav/core.py
  • dascore/proc/coords.py
  • dascore/proc/correlate.py
  • dascore/proc/detrend.py
  • dascore/proc/taper.py
  • dascore/transform/fbe.py
  • dascore/utils/gaps.py
  • dascore/viz/map_fiber.py
  • dascore/viz/waterfall.py
  • tests/test_core/test_coordmanager.py
  • tests/test_core/test_coords.py
  • tests/test_io/test_wav/test_wav.py
  • tests/test_proc/test_correlate.py
  • tests/test_proc/test_detrend.py
  • tests/test_proc/test_proc_coords.py
  • tests/test_proc/test_taper.py
  • tests/test_transform/test_fbe.py
  • tests/test_utils/test_gaps.py
  • tests/test_viz/test_map_fiber.py
  • tests/test_viz/test_waterfall.py

Comment on lines +54 to +59
5. Drop reverted pairs first. If a PR in scope reverts another PR that is also
in scope (revert PRs usually say "Revert ..." and name the reverted PR or
commit in the title/body), the two cancel out to no net user-facing change.
Omit both from the sections and instead list them under a short
`Reverted (no net change)` note at the end, so the reader knows why those PR
numbers are absent.

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.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Verify reverted pairs before omitting them.

A “Revert …” title/body is not sufficient proof that the original PR and revert produce no net user-facing change; reverts can be partial or followed by dependent changes. Require a diff/result check before dropping both PRs from the main sections.

Proposed wording
-5. Drop reverted pairs first. If a PR in scope reverts another PR that is also
-   in scope ...
+5. Identify suspected reverted pairs first. Confirm from the PR diff and resulting
+   branch history that the revert fully removes the original user-facing change;
+   only then omit both PRs ...
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
5. Drop reverted pairs first. If a PR in scope reverts another PR that is also
in scope (revert PRs usually say "Revert ..." and name the reverted PR or
commit in the title/body), the two cancel out to no net user-facing change.
Omit both from the sections and instead list them under a short
`Reverted (no net change)` note at the end, so the reader knows why those PR
numbers are absent.
5. Identify suspected reverted pairs first. Confirm from the PR diff and resulting
branch history that the revert fully removes the original user-facing change;
only then omit both PRs from the sections and instead list them under a short
`Reverted (no net change)` note at the end, so the reader knows why those PR
numbers are absent.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agents/skills/draft-release/SKILL.md around lines 54 - 59, Update the
reverted-pair guidance in the release drafting instructions to require verifying
the combined diff or resulting behavior before omitting either PR from the main
sections. Keep title/body wording as an identification signal only, and list the
pair under “Reverted (no net change)” only when the check confirms no net
user-facing change.

Comment on lines +96 to +97

Reverted (no net change): #126 reverted by #127

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Include links for reverted PRs too.

The output example omits links for #126 and #127, contradicting the requirement to include a PR link for changelog entries and reducing traceability.

Proposed wording
-Reverted (no net change): `#126` reverted by `#127`
+Reverted (no net change): `#126` (https://github.com/OWNER/REPO/pull/126) reverted by `#127` (https://github.com/OWNER/REPO/pull/127)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Reverted (no net change): #126 reverted by #127
Reverted (no net change): `#126` (https://github.com/OWNER/REPO/pull/126) reverted by `#127` (https://github.com/OWNER/REPO/pull/127)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agents/skills/draft-release/SKILL.md around lines 96 - 97, Update the
reverted PR example in the release skill documentation so both `#126` and `#127`
include their corresponding PR links, while preserving the existing “Reverted
(no net change)” wording and formatting.

Comment on lines +34 to 37
- uses: actions/checkout@v5
with:
fetch-tags: "true"
fetch-depth: '0'

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.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '--- workflow checkout occurrences ---\n'
for f in $(git ls-files '.github/workflows/*'); do
  echo "### $f"
  nl -ba "$f" | sed -n '1,120p' | grep -n -A4 -B2 'actions/checkout' || true
done

printf '\n--- network_tests context references ---\n'
rg -n "network_tests|persist-credentials|fetch-tags|fetch-depth" .github/workflows || true

Repository: DASDAE/dascore

Length of output: 243


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- workflow checkout occurrences ---'
find .github/workflows -maxdepth 1 -type f -print | sort | while read -r f; do
  echo "### $f"
  nl -ba "$f" | sed -n '1,120p' | grep -n -A4 -B2 'actions/checkout' || true
done

printf '%s\n' ''
printf '%s\n' '--- network_tests / persist-credentials / fetch flags references ---'
rg -n "network_tests|persist-credentials|fetch-tags|fetch-depth" .github/workflows || true

Repository: DASDAE/dascore

Length of output: 2701


🌐 Web query:

actions/checkout v5 persist-credentials default true documentation

💡 Result:

In actions/checkout v5, the persist-credentials input parameter defaults to true [1][2]. When set to true (the default), the action configures the GitHub Actions authentication token or SSH key in the local git configuration [2][3]. This allows your workflow scripts to run authenticated git commands (such as git push or git pull) against the repository [2][4]. The action automatically removes these credentials during the post-job cleanup process [2][5]. If you wish to prevent the action from configuring these credentials, you can explicitly set persist-credentials to false in your workflow file [2][3]: - uses: actions/checkout@v5 with: persist-credentials: false

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- workflow checkout lines with line numbers ---'
find .github/workflows -maxdepth 1 -type f -print | sort | while read -r f; do
  echo "### $f"
  grep -n -C 3 'actions/checkout' "$f" || true
done

printf '%s\n' ''
printf '%s\n' '--- YAML references to ghp-token / gh-token / git fetch --tags / auth in docs workflows ---'
rg -n 'ghp-token|gh-token|git fetch|--fetch|fetch tags|mamba-install-dascore|uses: mamba' .github/workflows || true

printf '%s\n' ''
printf '%s\n' '--- file sizes ---'
find .github/workflows -maxdepth 1 -type f -print | sort | xargs wc -l

Repository: DASDAE/dascore

Length of output: 5021


Disable persisted checkout credentials where checkout credentials are not needed.

actions/checkout preserves the GitHub token by default; set persist-credentials: false on checkout steps whose later workflow actions do not need authenticated Git. Add it to the changed checkout steps, and verify the .github/actions/mamba-install-dascore jobs before applying it there.

🧰 Tools
🪛 zizmor (1.26.1)

[warning] 34-37: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)

📍 Affects 9 files
  • .github/workflows/build_deploy_master_docs.yaml#L34-L37 (this comment)
  • .github/workflows/build_deploy_stable_docs.yaml#L29-L32
  • .github/workflows/get_coverage.yml#L13-L16
  • .github/workflows/lint.yml#L19-L22
  • .github/workflows/profile.yml#L30-L33
  • .github/workflows/run_min_dep_tests.yml#L37-L37
  • .github/workflows/run_min_dep_tests.yml#L61-L64
  • .github/workflows/runtests.yml#L41-L41
  • .github/workflows/runtests.yml#L66-L69
  • .github/workflows/test_doc_build.yml#L18-L21
  • .github/workflows/upload_pypi.yml#L12-L15
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/build_deploy_master_docs.yaml around lines 34 - 37,
Disable persisted checkout credentials by adding persist-credentials: false to
the checkout steps in .github/workflows/build_deploy_master_docs.yaml (34-37),
.github/workflows/build_deploy_stable_docs.yaml (29-32),
.github/workflows/get_coverage.yml (13-16), .github/workflows/lint.yml (19-22),
.github/workflows/profile.yml (30-33), both sites in
.github/workflows/run_min_dep_tests.yml (37 and 61-64), both sites in
.github/workflows/runtests.yml (41 and 66-69),
.github/workflows/test_doc_build.yml (18-21), and
.github/workflows/upload_pypi.yml (12-15). Verify the
.github/actions/mamba-install-dascore jobs first and do not change them unless
their later steps do not require authenticated Git.

Source: Linters/SAST tools

Comment thread dascore/core/coords.py
Comment on lines +375 to +377
if self.ndim > 1:
msg = "Select only works on 1D coords."
raise CoordError(msg)

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Require exactly one dimension, not at most one. The new self.ndim > 1 checks admit rank-0 coordinates, breaking the prior 1D-only contract.

  • dascore/core/coords.py#L375-L377: use self.ndim != 1 before sample-array selection.
  • dascore/core/coords.py#L460-L462: use self.ndim != 1 before alignment.
  • dascore/core/coords.py#L949-L951: use self.ndim != 1 before sample-count calculation.
  • dascore/core/coords.py#L1247-L1249: use self.ndim != 1 before resizing a partial coordinate.
  • tests/test_core/test_coords.py#L2581-L2617: add CoordPartial(shape=()) regression cases for these APIs.
📍 Affects 2 files
  • dascore/core/coords.py#L375-L377 (this comment)
  • dascore/core/coords.py#L460-L462
  • dascore/core/coords.py#L949-L951
  • dascore/core/coords.py#L1247-L1249
  • tests/test_core/test_coords.py#L2581-L2617
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@dascore/core/coords.py` around lines 375 - 377, Require exactly one dimension
in all affected coordinate APIs by changing the ndim guards in
dascore/core/coords.py ranges 375-377, 460-462, 949-951, and 1247-1249 from
greater-than-one checks to not-equal-one checks. Add regression cases in
tests/test_core/test_coords.py range 2581-2617 using CoordPartial(shape=()) to
verify sample-array selection, alignment, sample-count calculation, and
partial-coordinate resizing reject rank-0 coordinates.

Comment thread dascore/transform/fbe.py
Comment thread dascore/viz/map_fiber.py
@coderabbitai coderabbitai Bot removed IO Work for reading/writing different formats spool related to Spool class labels Jul 24, 2026
@d-chambers
d-chambers force-pushed the merge-master-into-dev-20260724 branch 2 times, most recently from 7630a16 to fdcfde3 Compare July 24, 2026 07:50
@d-chambers
d-chambers merged commit ffd59df into dev Jul 24, 2026
67 of 68 checks passed
@d-chambers
d-chambers deleted the merge-master-into-dev-20260724 branch July 24, 2026 08:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working CI continuous integration patch related to Patch class proc Related to processing module transform Related to transform operations viz Related to visualization

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants