Conversation
The async-route audit Phase 3 cleanup (PR #247) folded the directory existence check into ``_find_snapshot_file`` for a single ``to_thread`` hop, but in the process collapsed two distinct 404 messages into one generic ``Snapshot not found``. ``test_real_mode_snapshot_dir_missing`` asserts ``"directory" in response.json()["detail"].lower()`` and has been failing on all four matrix legs since 2026-05-06. Extend the helper return type to ``(file, stat, directory_missing)`` so the route handler can emit the original ``Snapshot directory not found`` message without re-introducing a separate ``exists`` syscall on the event loop. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
….2.0 pyproject.toml's juniper-observability floor was bumped to ``>=0.2.0`` on 2026-05-06 (register_or_reuse migration in juniper-observability 0.2.0) but the lockfile still pinned ``0.1.1``. The constraint-mode Lockfile Freshness gate correctly flagged this as ``requirements are unsatisfiable``. Regenerated with uv 0.11.8 + Python 3.14 (matching CI). Bumps: - juniper-observability 0.1.1 -> 0.2.0 (direct) - pydantic 2.13.3 -> 2.13.4 (transitive patch) - pydantic-core 2.46.3 -> 2.46.4 (transitive patch) - sentry-sdk 2.58.0 -> 2.59.0 (transitive patch) - urllib3 2.6.3 -> 2.7.0 (transitive minor) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ning Several tests intentionally exercise the ``DemoMode._generate_spiral_dataset_local`` fallback path that fires when the JuniperData service is unreachable, polluting the CI summary with 10+ DeprecationWarnings per run despite being expected: - test_demo_mode_concurrency.py (3 warnings) - test_demo_mode_perform_reset.py (1 warning) - test_demo_mode_running_property.py (5 warnings) - test_startup_regression.py (1 warning) Add a targeted ``filterwarnings`` rule so the warning is silenced during normal test runs. The ``test_juniper_data_integration::test_local_fallback_emits_warning`` case uses ``pytest.warns`` which captures warnings independently of the global filter and continues to assert the deprecation is emitted. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…nges Extends ``lockfile-update.yml`` so the regen+commit workflow also fires on pull_request events that modify ``pyproject.toml``, not only on Dependabot-authored pushes to ``dependabot/pip/**`` branches. Closes the gap that caused this branch's parent failure: a manual juniper-observability floor bump in pyproject.toml landed without a matching lockfile regen, leaving main red until a follow-up commit. Behaviour: - ``push`` to ``dependabot/pip/**``: unchanged. - ``pull_request`` touching ``pyproject.toml``: checks out the PR head branch, runs ``uv pip compile --upgrade``, commits and pushes back to the PR branch with a chore(deps) message. PRs from forks are skipped (no token, no third-party PRs in this single-author repo). - main and develop are never pushed to directly — the regen always lands on the PR branch. References notes/LOCKFILE_FRESHNESS_REDESIGN_2026-05-04.md (juniper-ml). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Bundle of four small, related fixes to bring canopy main back to green and
prevent the most recent class of CI failure from recurring.
fix(api): restore distinct snapshot-directory-missing 404 messagesrc/main.pytest_real_mode_snapshot_dir_missinghas been failing on all 4 matrix legs since 2026-05-06.chore(deps): regenerate requirements.lockrequirements.lockjuniper-observability>=0.2.0floor bump on 2026-05-06 left the lockfile pinned to0.1.1, making the constraint-mode Lockfile Freshness gate (correctly) unsatisfiable.test(canopy): silence expected DeprecationWarningpyproject.toml_generate_spiral_dataset_localfallback is a real (deprecated) codepath several tests intentionally exercise; the 10+ warnings per CI run were noise, not signal. Thepytest.warnsassertion intest_juniper_data_integrationis unaffected.ci(lockfile): auto-regenerate on pull_request.github/workflows/lockfile-update.ymlpyproject.tomledits (not just Dependabot pushes) now trigger an auto-regen + commit-back to the PR branch.Local verification
test_real_mode_snapshot_dir_missingand the rest ofTestSnapshotDetailRealMode: 5 / 5 pass on Python 3.13 (JuniperCanopy1 env).uv 0.11.8+ Python 3.14) reproduced locally — passes.Test plan
Update LockfileworkflowReferences
notes/LOCKFILE_FRESHNESS_REDESIGN_2026-05-04.md(juniper-ml)🤖 Generated with Claude Code