Skip to content

fix: address DeepSource audit findings - #193

Merged
YaoYinYing merged 63 commits into
mainfrom
codex/deepsource-audit-fixes
Jul 22, 2026
Merged

fix: address DeepSource audit findings#193
YaoYinYing merged 63 commits into
mainfrom
codex/deepsource-audit-fixes

Conversation

@YaoYinYing

@YaoYinYing YaoYinYing commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Summary

Addresses the current live DeepSource Python audit results for default-branch run 9ea7977c-250b-4dbd-abd2-a5b02ae9e62e / check Q2hlY2s6eGp5cnJvbnk=.

Full-scope snapshot pulled from the DeepSource API:

  • 519 issue nodes returned, no additional page.
  • Category counts: SECURITY=453, ANTI_PATTERN=59, STYLE=3, BUG_RISK=2, PERFORMANCE=2.
  • The largest root cause was server/tests/** being analyzed as production: BAN-B101=444 plus test chmod/import/comment noise.

Fixed production-code findings:

  • PYL-E0602 CRITICAL: import Any in routes.py for admin update annotations.
  • PYL-E0102 MAJOR: remove the shadowing _env_int import in pssm_gremlin.py.
  • PY-S6007 MAJOR: split mixed GET/POST handlers for reset-password and admin users routes.
  • Low-risk production cleanup: remove unused imports, collapse nested auth checks, use lazy logging formatting, remove unnecessary else / return, avoid built-in open() findings by using Path.open(), and replace the route side-effect import with importlib.import_module().

Fixed audit configuration:

  • Add server/tests/** to .deepsource.toml test/exclude patterns.
  • Add server/tests to Bandit exclude_dirs so local security scanning has the same test boundary.

Deferred:

  • Production complexity findings (PY-R1000) and the route-module cycle (PYL-R0401) need a separate refactor PR because they are architectural, not safe one-line audit cleanup.

Validation:

  • make clean
  • conda run -n REvoDesignTestFlight make kw-test PYTEST_KW='"reset_password or admin_users or admin_create_user or api_key or auth_me"' passed: 8 passed, 837 deselected. This expression selected OpenKinetics due shared api_key wording, so server tests were run separately.
  • conda run -n REvoDesignTestFlight python -m pytest -q server/tests/test_auth.py::test_reset_password_get_renders_form server/tests/test_auth.py::test_reset_password_get_rejects_missing_token server/tests/test_auth.py::test_reset_password_get_rejects_invalid_token server/tests/test_auth.py::test_reset_password_post_sets_new_password server/tests/test_auth.py::test_upload_rejects_binary_content server/tests/test_auth.py::test_upload_rejects_invalid_fasta_content server/tests/test_admin.py::test_admin_can_list_users server/tests/test_admin.py::test_non_admin_cannot_list_users server/tests/test_admin.py::test_admin_create_user_with_affiliation passed: 9 passed.
  • conda run -n REvoDesignTestFlight python -m py_compile server/pssm_gremlin_server/auth.py server/pssm_gremlin_server/pssm_gremlin.py server/pssm_gremlin_server/routes.py passed in the first batch.
  • conda run -n REvoDesignTestFlight python -m py_compile server/pssm_gremlin_server/pssm_gremlin.py passed after the second batch.
  • python3 TOML parse check for .deepsource.toml and pyproject.toml passed.
  • git diff --check passed.

Note: python -m ruff check ... could not run because ruff is not installed in REvoDesignTestFlight.

Summary by CodeRabbit

  • New Features

    • Added dedicated password-reset page and submission flows for clearer validation and responses.
    • Added a dedicated administrative user-creation workflow with automatic activation and email verification.
    • Improved administrative user listing with safer displayed account details.
  • Bug Fixes

    • Strengthened authentication checks to reject blocked users and outdated tokens.
    • Improved reliability when reading uploaded files and handling background notification errors.
  • Quality Improvements

    • Expanded automated server testing and coverage reporting.

@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Too many files!

This PR contains 108 files, which is 8 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 05c1af2f-9122-479c-ba12-35ff498287d2

📥 Commits

Reviewing files that changed from the base of the PR and between 58ccb65 and 7993d51.

📒 Files selected for processing (109)
  • .gitignore
  • CHANGELOG.md
  • Makefile
  • dev/TODO.md
  • dev/tools/generate_ui_typing.py
  • dev/tools/validate_package_data.py
  • dev/tools/validate_ui_i18n.py
  • docs/api/download-registry.md
  • docs/dev-guide/package-manager.md
  • docs/dev-guide/server.md
  • docs/dev-guide/testing.md
  • docs/getting-started.md
  • server/.env.example
  • server/README.md
  • server/pssm_gremlin_server/pssm_gremlin.py
  • server/scripts/GREMLIN_TFv1.py
  • server/scripts/fasta_lower_char_rm.py
  • server/scripts/make_paired_MSA_simple.py
  • server/tests/test_config.py
  • server/tests/test_runner_script_static.py
  • server/tests/test_tasks.py
  • src/REvoDesign/Qt/ui_runtime_loader.py
  • src/REvoDesign/REvoDesign.py
  • src/REvoDesign/UI/REvoDesign-PyMOL-entry.ui
  • src/REvoDesign/UI/UI.pyproject.user
  • src/REvoDesign/application/cluster_tab.py
  • src/REvoDesign/application/font/font_manager.py
  • src/REvoDesign/application/i18n/language_settings.py
  • src/REvoDesign/application/launching.py
  • src/REvoDesign/basic/abc_singleton.py
  • src/REvoDesign/basic/extensions.py
  • src/REvoDesign/basic/param_toggle.py
  • src/REvoDesign/bootstrap/set_config.py
  • src/REvoDesign/citations/citation_manager.py
  • src/REvoDesign/clients/QtSocketConnector.py
  • src/REvoDesign/clusters/cluster_runner.py
  • src/REvoDesign/clusters/cluster_sequence.py
  • src/REvoDesign/clusters/methods/evo.py
  • src/REvoDesign/common/multi_mutant_designer.py
  • src/REvoDesign/common/mutant_tree.py
  • src/REvoDesign/common/mutant_visualise.py
  • src/REvoDesign/common/profile_parsers.py
  • src/REvoDesign/config/environ.yaml
  • src/REvoDesign/driver/environ_register.py
  • src/REvoDesign/driver/file_dialog.py
  • src/REvoDesign/driver/param_toggle_register.py
  • src/REvoDesign/driver/ui_driver.py
  • src/REvoDesign/editor/monaco/monaco.py
  • src/REvoDesign/editor/monaco/server.py
  • src/REvoDesign/evaluate/evaluator.py
  • src/REvoDesign/logger/logger.py
  • src/REvoDesign/magician/designers/cart_ddg.py
  • src/REvoDesign/magician/designers/colabdesign.py
  • src/REvoDesign/magician/designers/openkinetics/_client.py
  • src/REvoDesign/magician/designers/openkinetics/_scorers.py
  • src/REvoDesign/phylogenetics/evo_mutator.py
  • src/REvoDesign/phylogenetics/gremlin_tools.py
  • src/REvoDesign/phylogenetics/revo_designer.py
  • src/REvoDesign/shortcuts/__init__.py
  • src/REvoDesign/shortcuts/function_utils.py
  • src/REvoDesign/shortcuts/tools/designs.py
  • src/REvoDesign/shortcuts/tools/esm2.py
  • src/REvoDesign/shortcuts/tools/evolution.py
  • src/REvoDesign/shortcuts/tools/ligand_converters.py
  • src/REvoDesign/shortcuts/tools/mutation_effect_predictors.py
  • src/REvoDesign/shortcuts/tools/openmm_utils.py
  • src/REvoDesign/shortcuts/tools/represents.py
  • src/REvoDesign/shortcuts/tools/rfdiffusion_tasks.py
  • src/REvoDesign/shortcuts/tools/rosetta_tasks.py
  • src/REvoDesign/shortcuts/tools/vina_tools.py
  • src/REvoDesign/shortcuts/utils.py
  • src/REvoDesign/sidechain/mutate_runner/DLPacker.py
  • src/REvoDesign/sidechain/mutate_runner/DunbrackRotamerLib.py
  • src/REvoDesign/sidechain/mutate_runner/RosettaMutateRelax.py
  • src/REvoDesign/sidechain/sidechain_solver.py
  • src/REvoDesign/structure/PocketSearcher.py
  • src/REvoDesign/tools/cgo_utils.py
  • src/REvoDesign/tools/customized_widgets.py
  • src/REvoDesign/tools/download_registry.py
  • src/REvoDesign/tools/measure_utils.py
  • src/REvoDesign/tools/mutant_tools.py
  • src/REvoDesign/tools/package_manager.py
  • src/REvoDesign/tools/pymol_utils.py
  • src/REvoDesign/tools/rfdiffusion_tools.py
  • src/REvoDesign/tools/rosetta_utils.py
  • src/REvoDesign/tools/safe_pickle.py
  • src/REvoDesign/tools/ssl_certificates.py
  • src/REvoDesign/tools/system_tools.py
  • src/REvoDesign/tools/utils.py
  • tests/bootstrap/test_set_config.py
  • tests/conftest.py
  • tests/data/ddg_csv.json
  • tests/data/kinetics/openkinetics_1SUO/manifest.json
  • tests/data/test_data.py
  • tests/driver/test_environ_register.py
  • tests/driver/test_file_dialog.py
  • tests/editor/test_editor_server.py
  • tests/editor/test_monaco.py
  • tests/menu/shortcuts/test_mutation_effect_predictor.py
  • tests/shortcuts/test_function_utils.py
  • tests/shortcuts/test_rfdiffusion_tasks.py
  • tests/test_config_isolation.py
  • tests/test_revodesign_workdir.py
  • tests/tools/customized_widgets/test_shortcuts_util.py
  • tests/tools/test_file_downloader.py
  • tests/tools/test_package_manager.py
  • tests/tools/test_rfdiffusion_tools.py
  • tests/tools/test_ssl_certificates.py
  • tests/tools/test_utils.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Review on demand using usage pricing
📝 Walkthrough

Walkthrough

Authentication validation was consolidated, password-reset and admin-user routes were separated by HTTP method, server utilities were cleaned up, and CI workflows now upload server coverage to DeepSource.

Changes

Authentication and Route Handler Refactor

Layer / File(s) Summary
Authentication loading checks
server/pssm_gremlin_server/auth.py
Bearer and cookie authentication now use consolidated checks for user existence, account status, and token-version matching.
Dedicated reset and admin handlers
server/pssm_gremlin_server/routes.py
Password reset and admin user endpoints now use separate GET and POST route functions.
Server runtime cleanup
server/pssm_gremlin_server/pssm_gremlin.py
Server imports, file access, exception handling, logging, control flow, and route loading were adjusted.
Coverage reporting workflows
.github/workflows/server-test.yml, .github/workflows/unit_tests_tag.yml
Workflows now check out pull-request head commits and upload coverage to DeepSource with OIDC permissions.
Static-analysis configuration
.deepsource.toml, pyproject.toml
Test patterns and analyzer exclusions now include server-side tests, with Python line-length metadata configured.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: fixing DeepSource audit findings in the server code.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/deepsource-audit-fixes

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.

@codacy-production

codacy-production Bot commented Jul 16, 2026

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 5 high · 2 medium · 11 minor

Alerts:
⚠ 18 issues (≤ 0 issues of at least minor severity)

Results:
18 new issues

Category Results
Documentation 7 minor
ErrorProne 3 high
Security 2 high
CodeStyle 4 minor
Complexity 2 medium

View in Codacy

🟢 Metrics 231 complexity · 6 duplication

Metric Results
Complexity 231
Duplication 6

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@deepsource-io

deepsource-io Bot commented Jul 16, 2026

Copy link
Copy Markdown

DeepSource Code Review

We reviewed changes in 0736756...7993d51 on this pull request. Below is the summary for the review, and you can see the individual issues we found as inline review comments.

See full review on DeepSource ↗

PR Report Card

Overall Grade   Security  

Reliability  

Complexity  

Hygiene  

Code Review Summary

Analyzer Status Updated (UTC) Details
Python Jul 22, 2026 12:22p.m. Review ↗

Important

AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🧹 Nitpick comments (1)
server/pssm_gremlin_server/auth.py (1)

474-494: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Extract repeated token validation logic.

The token validation and user fetching logic is virtually identical for both the Bearer and Cookie authentication methods. Consider extracting this into a helper function to reduce duplication.

♻️ Proposed helper extraction
    def _authenticate_token(token: str | None, auth_method: str) -> dict[str, Any] | None:
        if not token:
            return None
        payload = validate_token(token)
        if payload is None:
            return None
        user = db.get_user(payload["uid"])
        if (
            user is not None
            and _is_account_blocked(user) is None
            and payload.get("ver", 0) == user.get("token_version", 0)
        ):
            g.auth_method = auth_method
            return user
        return None

    if user := _authenticate_token(_extract_bearer_token(), "bearer"):
        return user
    if user := _authenticate_token(request.cookies.get("auth_token"), "cookie"):
        return user
🤖 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 `@server/pssm_gremlin_server/auth.py` around lines 474 - 494, Extract the
duplicated token validation, user lookup, account-blocking, token-version, and
auth-method assignment logic from the Bearer and Cookie branches into a shared
_authenticate_token helper. Update both authentication paths to call it with
their respective token and method values, preserving Bearer-first precedence and
the existing user return behavior.
🤖 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 `@server/pssm_gremlin_server/routes.py`:
- Around line 751-753: Update auth_reset_password to increment the user’s
token_version when completing the password reset, alongside the db.update_user
password-hash update. Ensure the updated version is persisted so existing bearer
tokens and authentication cookies are invalidated while the reset flow continues
to issue the new password successfully.

---

Nitpick comments:
In `@server/pssm_gremlin_server/auth.py`:
- Around line 474-494: Extract the duplicated token validation, user lookup,
account-blocking, token-version, and auth-method assignment logic from the
Bearer and Cookie branches into a shared _authenticate_token helper. Update both
authentication paths to call it with their respective token and method values,
preserving Bearer-first precedence and the existing user return behavior.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: 803e3dec-1546-404a-9827-a920f5953520

📥 Commits

Reviewing files that changed from the base of the PR and between 0736756 and b57eb24.

📒 Files selected for processing (3)
  • server/pssm_gremlin_server/auth.py
  • server/pssm_gremlin_server/pssm_gremlin.py
  • server/pssm_gremlin_server/routes.py

Comment on lines +751 to +753
@app.route("/PSSM_GREMLIN/reset_password", methods=["POST"])
def auth_reset_password():
"""Set a new password using a password-reset token."""

Copy link
Copy Markdown

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
# Description: Check if update_user handles token_version automatically.

rg -A 20 'def update_user\b' server/

Repository: YaoYinYing/REvoDesign

Length of output: 1663


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- auth.py outline ---'
ast-grep outline server/pssm_gremlin_server/auth.py --view expanded | sed -n '1,220p'

echo
echo '--- routes.py outline ---'
ast-grep outline server/pssm_gremlin_server/routes.py --view expanded | sed -n '1,220p'

echo
echo '--- auth.py relevant slice ---'
grep -n -A80 -B20 'def update_user\b' server/pssm_gremlin_server/auth.py | sed -n '1,180p'

echo
echo '--- routes.py relevant slice ---'
grep -n -A80 -B20 'def auth_reset_password\b' server/pssm_gremlin_server/routes.py | sed -n '1,180p'

Repository: YaoYinYing/REvoDesign

Length of output: 13781


🏁 Script executed:

#!/bin/bash
set -euo pipefail

grep -n -A60 -B20 'def generate_token\b\|def validate_token\b\|token_version' server/pssm_gremlin_server/auth.py | sed -n '1,220p'

Repository: YaoYinYing/REvoDesign

Length of output: 11088


Invalidate sessions on password reset. db.update_user(...) only updates the password hash; it does not bump token_version, so existing bearer tokens and auth cookies remain valid. Increment token_version here as well.

🤖 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 `@server/pssm_gremlin_server/routes.py` around lines 751 - 753, Update
auth_reset_password to increment the user’s token_version when completing the
password reset, alongside the db.update_user password-hash update. Ensure the
updated version is persisted so existing bearer tokens and authentication
cookies are invalidated while the reset flow continues to issue the new password
successfully.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🧹 Nitpick comments (1)
pyproject.toml (1)

229-229: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add spaces after commas in the list.

As per coding guidelines, repository formatting checks should be run before committing. The list items are missing spaces after the commas.

🎨 Proposed format
-exclude_dirs = ["build","dist","tests","server/tests","scripts"]
+exclude_dirs = ["build", "dist", "tests", "server/tests", "scripts"]
🤖 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 `@pyproject.toml` at line 229, Update the exclude_dirs list in pyproject.toml
to include a space after each comma while preserving the existing directory
entries and order.

Source: Coding guidelines

🤖 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 @.github/workflows/server-test.yml:
- Around line 37-38: Disable credential persistence in the actions/checkout
`with` blocks by adding `persist-credentials: false` at both
.github/workflows/server-test.yml lines 37-38 and
.github/workflows/unit_tests_tag.yml lines 110-111; keep the existing checkout
references unchanged.

---

Nitpick comments:
In `@pyproject.toml`:
- Line 229: Update the exclude_dirs list in pyproject.toml to include a space
after each comma while preserving the existing directory entries and order.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: 258b45f2-49c1-4159-a2aa-a77c7224b40f

📥 Commits

Reviewing files that changed from the base of the PR and between b57eb24 and 58ccb65.

📒 Files selected for processing (5)
  • .deepsource.toml
  • .github/workflows/server-test.yml
  • .github/workflows/unit_tests_tag.yml
  • pyproject.toml
  • server/pssm_gremlin_server/pssm_gremlin.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • server/pssm_gremlin_server/pssm_gremlin.py

Comment thread .github/workflows/server-test.yml Outdated
Comment on lines +37 to +38
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}

Copy link
Copy Markdown

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

Disable credential persistence in checkout actions.

The actions/checkout step defaults to persisting the repository credentials in the local Git configuration. This creates a risk of credential exposure if subsequent steps are compromised. Set persist-credentials: false to mitigate this risk.

  • .github/workflows/server-test.yml#L37-L38: Add persist-credentials: false to the with block.
  • .github/workflows/unit_tests_tag.yml#L110-L111: Add persist-credentials: false to the with block.
🧰 Tools
🪛 zizmor (1.26.1)

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

(artipacked)

📍 Affects 2 files
  • .github/workflows/server-test.yml#L37-L38 (this comment)
  • .github/workflows/unit_tests_tag.yml#L110-L111
🤖 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/server-test.yml around lines 37 - 38, Disable credential
persistence in the actions/checkout `with` blocks by adding
`persist-credentials: false` at both .github/workflows/server-test.yml lines
37-38 and .github/workflows/unit_tests_tag.yml lines 110-111; keep the existing
checkout references unchanged.

Source: Linters/SAST tools

@YaoYinYing YaoYinYing changed the title fix(server): address DeepSource audit findings fix: address DeepSource audit findings Jul 16, 2026
@codecov

codecov Bot commented Jul 16, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 72.52907% with 189 lines in your changes missing coverage. Please review.
✅ Project coverage is 74.08%. Comparing base (39f29a1) to head (0f3882a).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
src/REvoDesign/tools/package_manager.py 67.53% 75 Missing ⚠️
src/REvoDesign/tools/utils.py 87.15% 14 Missing ⚠️
src/REvoDesign/REvoDesign.py 18.75% 13 Missing ⚠️
src/REvoDesign/bootstrap/set_config.py 57.14% 9 Missing ⚠️
src/REvoDesign/driver/file_dialog.py 80.00% 8 Missing ⚠️
src/REvoDesign/common/multi_mutant_designer.py 14.28% 6 Missing ⚠️
src/REvoDesign/phylogenetics/evo_mutator.py 14.28% 6 Missing ⚠️
src/REvoDesign/tools/measure_utils.py 14.28% 6 Missing ⚠️
src/REvoDesign/tools/mutant_tools.py 14.28% 6 Missing ⚠️
src/REvoDesign/tools/customized_widgets.py 64.28% 5 Missing ⚠️
... and 20 more
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #193      +/-   ##
==========================================
+ Coverage   73.55%   74.08%   +0.53%     
==========================================
  Files         122      122              
  Lines       15221    15592     +371     
==========================================
+ Hits        11196    11552     +356     
- Misses       4025     4040      +15     
Files with missing lines Coverage Δ
src/REvoDesign/Qt/ui_runtime_loader.py 68.68% <100.00%> (-2.03%) ⬇️
src/REvoDesign/application/launching.py 95.23% <ø> (ø)
src/REvoDesign/basic/abc_singleton.py 100.00% <ø> (ø)
src/REvoDesign/basic/extensions.py 92.30% <ø> (ø)
src/REvoDesign/basic/param_toggle.py 93.33% <ø> (ø)
src/REvoDesign/clusters/cluster_sequence.py 95.51% <100.00%> (ø)
src/REvoDesign/common/mutant_tree.py 61.50% <ø> (ø)
src/REvoDesign/common/profile_parsers.py 81.95% <100.00%> (+0.13%) ⬆️
src/REvoDesign/driver/environ_register.py 96.42% <100.00%> (+33.92%) ⬆️
src/REvoDesign/driver/param_toggle_register.py 100.00% <ø> (ø)
... and 54 more

... and 2 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

YaoYinYing and others added 28 commits July 17, 2026 11:42
- ensure_ui_file: restore fetch-on-missing path, cache to writable dir
- fetch_gist_file: add timeout parameter (default 10s)
- self_upgrade: HMAC-verify downloaded assets against manifest.json
- fetch_tags: silent degrade on network failure (no popup)
- make_window: re-fetch on loadUi failure instead of os.remove+recurse
- refresh_remote_json: cache successful fetches to disk
- _load_extras_table: shared loader with notify_on_error flag
- Makefile: upload-gists generates manifest.json automatically
- validate_package_data: check canonical Gist sources, not vendored copies
- Remove TODO.md entry for package manager bootstrapping (addressed)
- Update CHANGELOG and package-manager docs

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- conftest: move platformdirs patch before all REvoDesign imports so
  import-time bootstrap resolves against the mock user-data dir instead
  of ~/Library/Application Support. Guarded with # isort: split.
- current_font: guard setFont against CURRENT_FONT or DEFAULT_FONT
  being None when the plugin is not fully initialised (tests).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@YaoYinYing
YaoYinYing merged commit 569bf39 into main Jul 22, 2026
11 of 13 checks passed
@YaoYinYing
YaoYinYing deleted the codex/deepsource-audit-fixes branch July 22, 2026 12:55
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.

1 participant