Skip to content

chore(deps): stop dependabot relaxing the scipy runtime pin - #2822

Merged
POWERFULMOVES merged 6 commits into
mainfrom
chore/dependabot-ignore-scipy-agent-zero
Aug 30, 2026
Merged

POWERFULMOVES merged 6 commits into
mainfrom
chore/dependabot-ignore-scipy-agent-zero

Conversation

@POWERFULMOVES

Copy link
Copy Markdown
Owner

Closes the loop on #2804, which proposed relaxing the scipy ceiling past a pin whose rationale sits directly above it — written three days before the bump.

Closing that PR fixes it once. This stops it recurring every Friday.

Why the pin can't be a dependency constraint

Package metadata does not describe the failure:

version requires_python numpy constraint against base image numpy 1.26.x
1.14.1 (ceiling) >=3.10 numpy>=1.23.5,<2.3 ✅ resolves + runs
1.15.0 >=3.10 numpy>=1.23.5,<2.5 ⚠️ resolves cleanly, dies at import
1.18.0 >=3.12 numpy>=2.0.0 ❌ hard conflict

The middle row is why a manual pin exists. scipy 1.15's declared metadata permits numpy 1.26, so pip resolves it without complaint and run_ui.py then dies on ufuncs (sph_legendre_p) that only register under numpy 2.x. Green resolve, broken container.

So the proposed ceiling admits two distinct breakages — a silent one (1.15–1.17) and a hard one (1.18).

Queried live from PyPI rather than taken from the comment.

What changed

  • ignore rule in the agent-zero pip ecosystem. .github/dependabot.yml had zero ignore blocks before this, so nothing prevented the bump from returning.
  • Reciprocal pointer in requirements.txt, so an editor who relaxes one finds the other. They were previously independent and could drift silently.

Validated

dependabot.yml parses; all 6 update blocks preserved; the rule reads back as {dependency-name: scipy, versions: ['>=1.15']}; the pin itself is byte-unchanged (comment-only addition there).

🤖 Generated with Claude Code

https://claude.ai/code/session_01Jxd5gryAFPXwhjaCMw9Qrx

PR #2804 proposed moving the scipy ceiling from 1.15 to 1.19, relaxing a pin
whose rationale sits directly above it and was written three days earlier.
Closing that PR fixes it once; this stops it recurring every Friday.

Why the pin cannot be expressed as a dependency constraint: package metadata
does not describe the failure. scipy 1.15 declares numpy>=1.23.5 and numpy<2.5,
so pip resolves it cleanly against the base image's numpy 1.26 and run_ui.py
then dies at IMPORT on ufuncs (sph_legendre_p) that only register under numpy
2.x. A green resolve and a broken container. scipy 1.18 is a different failure
mode -- it requires numpy>=2.0.0 outright.

So the proposed ceiling admits two distinct breakages, and only a manual pin
plus an explicit ignore rule can prevent them.

Verified against PyPI rather than taken from the comment:

  scipy 1.14.1  requires_python>=3.10  numpy>=1.23.5,<2.3   resolves + runs
  scipy 1.15.0  requires_python>=3.10  numpy>=1.23.5,<2.5   resolves, dies at import
  scipy 1.18.0  requires_python>=3.12  numpy>=2.0.0         hard conflict

.github/dependabot.yml had ZERO ignore blocks before this, so nothing prevented
the bump from returning. Adds the reciprocal pointer in requirements.txt so an
editor who relaxes one finds the other.

Validated: dependabot.yml parses, 6 update blocks preserved, the ignore rule
reads back as {dependency-name: scipy, versions: ['>=1.15']}, and the pin
itself is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jxd5gryAFPXwhjaCMw9Qrx
@coderabbitai

coderabbitai Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: c9d8eeb0-892f-4166-9457-3b8c075d29f4


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.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 28, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-08-28T23:04:23.137982Z e6ec169 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added chit-aware Touches a CHIT-aware service — control-body signature gate applies services Service source under pmoves/services/ labels Aug 28, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🔏 CHIT-aware change — control-body routing

This PR touches a CHIT-aware service (ports 8086/8087/8103/8106/8113/9224 surface). Before a Control-Body ACK:

  • the diff (or PR body) should reference a CHIT signature trail — chit.signed.v1, a CHIT: trailer, or a make -C pmoves sign-trail entry;
  • the chit-pr-audit-agent (.claude/agents/chit-pr-audit-agent.md) is the gate that grants/refuses ACK eligibility;
  • signing quickstart: pmoves/docs/AGENTS/CHIT_SIGNING_TUTORIAL.md.

Advisory routing only — the blocking contract check is CHIT Contract.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e6ec169f33

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/dependabot.yml Outdated
POWERFULMOVES and others added 5 commits August 29, 2026 08:25
Codex P2, and it found a real inconsistency — though not one that can be
resolved by inference, so the pin stays and the contradiction is now
recorded where the next editor will hit it.

The rationale says the image runs numpy 1.26, and concludes scipy >=1.15
would break at import. But `requirements.lock` resolves `numpy==2.2.6`
alongside `scipy==1.14.1`, and it was introduced by the SAME commit that
added the scipy pin (#2750, 59cc5e8, "pin scipy<1.15 against the numpy
1.26 base image"). The Dockerfile has installed with
`--constraint requirements.lock` since 2026-05-19, well before that.

So the fix for "the base image has numpy 1.26" shipped a lock that pins
numpy to 2.x. If that constraint lands, scipy 1.15-1.18 are all compatible
— 1.18 needs numpy>=2.0.0, which 2.2.6 satisfies — and `>=1.15` blocks
valid updates forever.

Not relaxed, because the opposite is also possible and the difference is
not decidable from the tree: constraints apply to what is INSTALLED, and
numpy 1.26 already satisfies scipy 1.14.1 (numpy>=1.23.5,<2.3), so a
resolver may leave it alone and never apply the constraint. Relaxing a
runtime pin on a guess buys a container that boots and then dies at import
with the exact error the pin exists to prevent.

The comment now carries the one command that settles it against the built
image, and the branch to take for either answer. Verify, then act — do not
delete this note and relax the pin in one step.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X9mpK1ZFjexjthZbvcb94f
…about it

Codex was right, and the earlier reply on this PR was right to refuse to
relax the pin on inference. Docker became available, so it stopped being
inference.

MEASURED against the built image, /opt/venv-a0:

    numpy 2.3.5
    scipy 1.16.3
    import scipy.special      -> OK
    sph_legendre_p present    -> True
    scipy.stats, scipy.linalg -> OK

That is scipy >=1.15 running on numpy 2.x, with the exact ufunc the rationale
names present and importable. The incompatibility is real but CONDITIONAL on
numpy 1.26, and nothing in this build path produces 1.26: requirements.lock
pins numpy==2.2.6 and the measured image carries 2.3.5.

Stated because it limits the claim: that image was built 2026-08-23, two days
BEFORE the pin landed (59cc5e8, 08-25), so it does not test the pin itself.
It tests the COMPATIBILITY CLAIM, which is what the ignore rests on. I nearly
published the stronger conclusion before checking the image date; the date is
what kept it honest.

Bound moved to where the constraint actually is: scipy 1.19 requires
numpy>=2.5, which neither 2.2.6 nor 2.3.5 satisfies. 1.15 through 1.18 are
fine on numpy 2.x -- including 1.18, which needs numpy>=2.0.0 and therefore
was never the "hard conflict" the old comment claimed. Ignoring >=1.15 blocked
four minor lines for a break that only happens on a numpy this image does not
have.

versions: [">=1.15"] -> [">=1.19"]

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X9mpK1ZFjexjthZbvcb94f
@POWERFULMOVES
POWERFULMOVES merged commit 6ff8b77 into main Aug 30, 2026
44 checks passed
@POWERFULMOVES
POWERFULMOVES deleted the chore/dependabot-ignore-scipy-agent-zero branch August 30, 2026 07:29
POWERFULMOVES added a commit that referenced this pull request Aug 30, 2026
…lisions

main moved while #2818 sat blocked: #2813, #2822, #2825, #2826, #2827,
#2830, #2831, #2832, #2837, #2838 all landed, plus the CodeQL alert
cleanup on main. Automatic merge, no conflicts.

Re-ran the checks that matter for a merge of this size rather than
assuming a clean `git merge` means a correct one:

  duplicate top-level definitions  4 modules, all 4 already shadowed on
                                   main. mcp_server.py stays clean, so
                                   the collision fixed earlier held and
                                   nothing new joined it.
  hardening_ratchet                debt=6, no new, no stale
  validate-dockerfile-paths        OK (93 dockerfiles, 83 referenced)
  validate-command-anchors         498 baselined, 0 new, no stale

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X9mpK1ZFjexjthZbvcb94f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chit-aware Touches a CHIT-aware service — control-body signature gate applies services Service source under pmoves/services/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant