Skip to content

Move the project from Pipfile to pyproject#409

Open
Claude wants to merge 5 commits intostagingfrom
claude/move-project-to-pyproject
Open

Move the project from Pipfile to pyproject#409
Claude wants to merge 5 commits intostagingfrom
claude/move-project-to-pyproject

Conversation

@Claude
Copy link
Contributor

@Claude Claude AI commented Feb 21, 2026

Original prompt

This section details on the original issue you should resolve

<issue_title>Move the project from Pipfile to pyproject</issue_title>
<issue_description>Move the project from Pipfile to pyproject, move from pipenv to uv</issue_description>

Comments on the Issue (you are @claude[agent] in this section)

@railway-app
Copy link

railway-app bot commented Feb 21, 2026

This PR was not deployed automatically as @claude does not have access to the Railway project.

In order to get automatic PR deploys, please add @claude to your workspace on Railway.

- Created pyproject.toml with all dependencies from Pipfile
- Updated Makefile to use uv instead of pipenv
- Updated GitHub Actions workflows (tests.yml, pylint.yml, playwright.yml)
- Updated Dockerfile to use uv
- Updated setup_e2e_tests.sh script
- Updated README.md documentation
- Updated .github/copilot-instructions.md

Co-authored-by: gkorland <753206+gkorland@users.noreply.github.com>
python -m pip install --upgrade pip
pip install pipenv
- name: Install uv
uses: astral-sh/setup-uv@v5

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow Medium

Unpinned 3rd party Action 'Pylint' step
Uses Step
uses 'astral-sh/setup-uv' with ref 'v5', not a pinned commit hash
python -m pip install --upgrade pip
pip install pipenv
- name: Install uv
uses: astral-sh/setup-uv@v5

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow Medium test

Unpinned 3rd party Action 'Tests' step
Uses Step
uses 'astral-sh/setup-uv' with ref 'v5', not a pinned commit hash
- Generated uv.lock file with all dependencies
- Removed Pipfile and Pipfile.lock
- Updated pyproject.toml with hatch build config for api package

Co-authored-by: gkorland <753206+gkorland@users.noreply.github.com>
@Claude Claude AI changed the title [WIP] Move the project from Pipfile to pyproject Migrate from Pipfile/pipenv to pyproject.toml/uv Feb 21, 2026
@Claude Claude AI requested a review from gkorland February 21, 2026 09:22
@gkorland gkorland changed the base branch from main to staging February 21, 2026 09:25
@gkorland gkorland marked this pull request as ready for review February 21, 2026 09:25
@github-actions
Copy link

github-actions bot commented Feb 21, 2026

Dependency Review

The following issues were found:
  • ❌ 1 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 34 package(s) with unknown licenses.
  • ⚠️ 1 packages with OpenSSF Scorecard issues.
See the Details below.

Vulnerabilities

uv.lock

NameVersionVulnerabilitySeverity
diskcache5.6.3DiskCache has unsafe pickle deserializationmoderate

License Issues

.github/workflows/tests.yml

PackageVersionLicenseIssue Type
astral-sh/setup-uv5.*.*NullUnknown License

pyproject.toml

PackageVersionLicenseIssue Type
graphiti-coreNullUnknown License

uv.lock

PackageVersionLicenseIssue Type
astroid4.0.4NullUnknown License
authlib1.6.8NullUnknown License
cachetools7.0.1NullUnknown License
cyclopts4.5.4NullUnknown License
fastmcp3.0.1NullUnknown License
filelock3.24.3NullUnknown License
fsspec2026.2.0NullUnknown License
greenlet3.3.2NullUnknown License
grpcio1.78.1NullUnknown License
isort8.0.0NullUnknown License
jaraco-context6.1.0NullUnknown License
jaraco-functools4.4.0NullUnknown License
jsonschema-path0.4.1NullUnknown License
litellm1.80.17NullUnknown License
neo4j6.1.0NullUnknown License
openai2.21.0NullUnknown License
packaging26.0NullUnknown License
pathable0.5.0NullUnknown License
platformdirs4.9.2NullUnknown License
playwright1.57.0NullUnknown License
py-key-value-aio0.4.4NullUnknown License
pycparser3.0NullUnknown License
pydantic-settings2.13.1NullUnknown License
pyee13.0.1NullUnknown License
pylint4.0.5NullUnknown License
regex2026.2.19NullUnknown License
rich14.3.3NullUnknown License
typer0.24.0NullUnknown License
typer-slim0.24.0NullUnknown License
websockets16.0NullUnknown License
jaraco-classes3.4.0NullUnknown License
posthog7.9.3NullUnknown License

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
actions/astral-sh/setup-uv 5.*.* UnknownUnknown
pip/graphiti-core UnknownUnknown
pip/diskcache 5.6.3 UnknownUnknown
pip/aiofile 3.9.0 🟢 3.1
Details
CheckScoreReason
Code-Review🟢 4Found 6/14 approved changesets -- score normalized to 4
Packaging⚠️ -1packaging workflow not detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 9license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/aiohappyeyeballs 2.6.1 UnknownUnknown
pip/aiohttp 3.13.3 UnknownUnknown
pip/aiosignal 1.4.0 🟢 6.1
Details
CheckScoreReason
Code-Review🟢 5Found 1/2 approved changesets -- score normalized to 5
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Maintained🟢 56 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 2dependency not pinned by hash detected -- score normalized to 2
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Vulnerabilities🟢 100 existing vulnerabilities detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ 11 out of the last 5 releases have a total of 1 signed artifacts.
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Security-Policy🟢 10security policy file detected
Packaging🟢 10packaging workflow detected
SAST🟢 10SAST tool is run on all commits
pip/annotated-doc 0.0.4 UnknownUnknown
pip/annotated-types 0.7.0 UnknownUnknown
pip/anyio 4.12.1 UnknownUnknown
pip/astroid 4.0.4 UnknownUnknown
pip/attrs 25.4.0 UnknownUnknown
pip/authlib 1.6.8 UnknownUnknown
pip/backoff 2.2.1 🟢 3.4
Details
CheckScoreReason
Code-Review⚠️ 2Found 7/24 approved changesets -- score normalized to 2
Packaging⚠️ -1packaging workflow not detected
Maintained⚠️ 0project is archived
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST🟢 7SAST tool detected but not run on all commits
pip/beartype 0.22.9 UnknownUnknown
pip/cachetools 7.0.1 UnknownUnknown
pip/caio 0.9.25 UnknownUnknown
pip/certifi 2026.1.4 🟢 6.6
Details
CheckScoreReason
Code-Review🟢 5Found 1/2 approved changesets -- score normalized to 5
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Security-Policy🟢 10security policy file detected
Maintained🟢 1014 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Pinned-Dependencies🟢 5dependency not pinned by hash detected -- score normalized to 5
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 9license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/cffi 2.0.0 UnknownUnknown
pip/charset-normalizer 3.4.4 UnknownUnknown
pip/click 8.3.1 UnknownUnknown
pip/colorama 0.4.6 UnknownUnknown
pip/cryptography 46.0.5 UnknownUnknown
pip/cyclopts 4.5.4 UnknownUnknown
pip/dill 0.4.1 🟢 4.5
Details
CheckScoreReason
Token-Permissions⚠️ -1No tokens found
Maintained🟢 89 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 8
Packaging⚠️ -1packaging workflow not detected
Dangerous-Workflow⚠️ -1no workflows found
Code-Review⚠️ 0Found 1/25 approved changesets -- score normalized to 0
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies⚠️ -1no dependencies found
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing🟢 10project is fuzzed
License🟢 9license file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
Security-Policy🟢 10security policy file detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/distro 1.9.0 🟢 3.8
Details
CheckScoreReason
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Binary-Artifacts🟢 10no binaries found in the repo
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Code-Review🟢 10all changesets reviewed
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Packaging⚠️ -1packaging workflow not detected
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/dnspython 2.8.0 UnknownUnknown
pip/docstring-parser 0.17.0 UnknownUnknown
pip/docutils 0.22.4 UnknownUnknown
pip/email-validator 2.3.0 🟢 4
Details
CheckScoreReason
Maintained⚠️ 11 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 1
Code-Review⚠️ 1Found 4/27 approved changesets -- score normalized to 1
Packaging⚠️ -1packaging workflow not detected
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
Fuzzing🟢 10project is fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection🟢 3branch protection is not maximal on development and all release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/exceptiongroup 1.3.1 UnknownUnknown
pip/falkordb 1.2.2 UnknownUnknown
pip/fastapi 0.124.4 UnknownUnknown
pip/fastmcp 3.0.1 UnknownUnknown
pip/fastuuid 0.14.0 UnknownUnknown
pip/filelock 3.24.3 UnknownUnknown
pip/frozenlist 1.8.0 🟢 6.1
Details
CheckScoreReason
Code-Review🟢 5Found 4/8 approved changesets -- score normalized to 5
Maintained⚠️ 11 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 1
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
License🟢 10license file detected
Fuzzing⚠️ 0project is not fuzzed
Vulnerabilities🟢 100 existing vulnerabilities detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Security-Policy🟢 10security policy file detected
Packaging🟢 10packaging workflow detected
Signed-Releases🟢 64 out of the last 5 releases have a total of 4 signed artifacts.
SAST🟢 10SAST tool is run on all commits
pip/fsspec 2026.2.0 UnknownUnknown
pip/greenlet 3.3.2 UnknownUnknown
pip/grpcio 1.78.1 UnknownUnknown
pip/h11 0.16.0 🟢 4.4
Details
CheckScoreReason
Packaging⚠️ -1packaging workflow not detected
Code-Review🟢 5Found 9/18 approved changesets -- score normalized to 5
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Maintained⚠️ 00 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
Fuzzing🟢 10project is fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/hf-xet 1.2.0 UnknownUnknown
pip/httpcore 1.0.9 UnknownUnknown
pip/httpx 0.28.1 UnknownUnknown
pip/httpx-sse 0.4.3 UnknownUnknown
pip/huggingface-hub 1.4.1 🟢 5.7
Details
CheckScoreReason
Code-Review🟢 9Found 28/30 approved changesets -- score normalized to 9
Maintained🟢 1030 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Packaging⚠️ -1packaging workflow not detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Security-Policy⚠️ 0security policy file not detected
License🟢 10license file detected
Fuzzing⚠️ 0project is not fuzzed
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
SAST🟢 6SAST tool is not run on all commits -- score normalized to 6
pip/idna 3.11 UnknownUnknown
pip/importlib-metadata 8.7.1 UnknownUnknown
pip/iniconfig 2.3.0 UnknownUnknown
pip/isort 8.0.0 UnknownUnknown
pip/itsdangerous 2.2.0 UnknownUnknown
pip/jaraco-classes 3.4.0 🟢 4.1
Details
CheckScoreReason
Code-Review⚠️ 0Found 0/30 approved changesets -- score normalized to 0
Binary-Artifacts🟢 10no binaries found in the repo
Packaging⚠️ -1packaging workflow not detected
Security-Policy🟢 10security policy file detected
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
SAST⚠️ 0no SAST tool detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
License⚠️ 0license file not detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
pip/jaraco-context 6.1.0 UnknownUnknown
pip/jaraco-functools 4.4.0 UnknownUnknown
pip/jeepney 0.9.0 UnknownUnknown
pip/jinja2 3.1.6 UnknownUnknown
pip/jiter 0.13.0 UnknownUnknown
pip/jsonref 1.1.0 UnknownUnknown
pip/jsonschema 4.26.0 UnknownUnknown
pip/jsonschema-path 0.4.1 UnknownUnknown
pip/jsonschema-specifications 2025.9.1 UnknownUnknown
pip/keyring 25.7.0 UnknownUnknown
pip/litellm 1.80.17 UnknownUnknown
pip/markdown-it-py 4.0.0 UnknownUnknown
pip/markupsafe 3.0.3 UnknownUnknown
pip/mccabe 0.7.0 🟢 4.3
Details
CheckScoreReason
Packaging⚠️ -1packaging workflow not detected
Code-Review🟢 9Found 13/14 approved changesets -- score normalized to 9
Dangerous-Workflow⚠️ -1no workflows found
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ -1No tokens found
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Pinned-Dependencies⚠️ -1no dependencies found
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
License🟢 9license file detected
Fuzzing🟢 10project is fuzzed
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/mcp 1.26.0 UnknownUnknown
pip/mdurl 0.1.2 UnknownUnknown
pip/more-itertools 10.8.0 UnknownUnknown
pip/multidict 6.7.1 🟢 7.3
Details
CheckScoreReason
Code-Review🟢 6Found 5/8 approved changesets -- score normalized to 6
Maintained🟢 1018 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Fuzzing🟢 10project is fuzzed
Vulnerabilities🟢 100 existing vulnerabilities detected
License🟢 9license file detected
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Security-Policy🟢 10security policy file detected
Packaging🟢 10packaging workflow detected
SAST🟢 10SAST tool is run on all commits
Branch-Protection🟢 3branch protection is not maximal on development and all release branches
Signed-Releases🟢 85 out of the last 5 releases have a total of 5 signed artifacts.
pip/neo4j 6.1.0 UnknownUnknown
pip/numpy 2.4.2 UnknownUnknown
pip/openai 2.21.0 UnknownUnknown
pip/openapi-pydantic 0.5.1 UnknownUnknown
pip/opentelemetry-api 1.39.1 UnknownUnknown
pip/packaging 26.0 UnknownUnknown
pip/pathable 0.5.0 UnknownUnknown
pip/platformdirs 4.9.2 UnknownUnknown
pip/playwright 1.57.0 UnknownUnknown
pip/pluggy 1.6.0 UnknownUnknown
pip/posthog 7.9.3 UnknownUnknown
pip/propcache 0.4.1 UnknownUnknown
pip/psycopg2-binary 2.9.11 UnknownUnknown
pip/py-key-value-aio 0.4.4 UnknownUnknown
pip/pycparser 3.0 UnknownUnknown
pip/pydantic 2.12.5 UnknownUnknown
pip/pydantic-core 2.41.5 UnknownUnknown
pip/pydantic-settings 2.13.1 UnknownUnknown
pip/pyee 13.0.1 UnknownUnknown
pip/pygments 2.19.2 UnknownUnknown
pip/pyjwt 2.11.0 UnknownUnknown
pip/pylint 4.0.5 UnknownUnknown
pip/pymysql 1.1.2 UnknownUnknown
pip/pyperclip 1.11.0 UnknownUnknown
pip/pytest 8.4.2 UnknownUnknown
pip/pytest-asyncio 1.2.0 UnknownUnknown
pip/pytest-base-url 2.1.0 UnknownUnknown
pip/pytest-playwright 0.7.2 UnknownUnknown
pip/python-dateutil 2.9.0.post0 🟢 4.8
Details
CheckScoreReason
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Code-Review🟢 5Found 8/14 approved changesets -- score normalized to 5
Packaging⚠️ -1packaging workflow not detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Security-Policy⚠️ 0security policy file not detected
License🟢 9license file detected
Fuzzing🟢 10project is fuzzed
Signed-Releases🟢 82 out of the last 2 releases have a total of 2 signed artifacts.
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/python-dotenv 1.2.1 UnknownUnknown
pip/python-multipart 0.0.22 UnknownUnknown
pip/python-slugify 8.0.4 🟢 4.3
Details
CheckScoreReason
Code-Review🟢 5Found 11/20 approved changesets -- score normalized to 5
Maintained🟢 1012 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Packaging⚠️ -1packaging workflow not detected
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/pytz 2025.2 UnknownUnknown
pip/pywin32 311 UnknownUnknown
pip/pywin32-ctypes 0.2.3 🟢 3
Details
CheckScoreReason
Code-Review⚠️ 0Found 0/30 approved changesets -- score normalized to 0
Packaging⚠️ -1packaging workflow not detected
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 9license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/pyyaml 6.0.3 UnknownUnknown
pip/redis 6.4.0 UnknownUnknown
pip/referencing 0.37.0 UnknownUnknown
pip/regex 2026.2.19 UnknownUnknown
pip/requests 2.32.5 UnknownUnknown
pip/rich 14.3.3 UnknownUnknown
pip/rich-rst 1.3.2 UnknownUnknown
pip/rpds-py 0.30.0 UnknownUnknown
pip/secretstorage 3.5.0 UnknownUnknown
pip/shellingham 1.5.4 🟢 3.3
Details
CheckScoreReason
Code-Review🟢 5Found 6/11 approved changesets -- score normalized to 5
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Packaging⚠️ -1packaging workflow not detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/six 1.17.0 🟢 3.7
Details
CheckScoreReason
Code-Review⚠️ 2Found 8/30 approved changesets -- score normalized to 2
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Maintained⚠️ 01 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Binary-Artifacts🟢 10no binaries found in the repo
Packaging⚠️ -1packaging workflow not detected
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
Fuzzing🟢 10project is fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/sniffio 1.3.1 UnknownUnknown
pip/sse-starlette 3.2.0 UnknownUnknown
pip/starlette 0.50.0 UnknownUnknown
pip/tenacity 9.1.4 🟢 6.6
Details
CheckScoreReason
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Code-Review🟢 9Found 27/28 approved changesets -- score normalized to 9
Maintained🟢 1030 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Security-Policy⚠️ 0security policy file not detected
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/text-unidecode 1.3 ⚠️ 2.2
Details
CheckScoreReason
Code-Review⚠️ 2Found 6/23 approved changesets -- score normalized to 2
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Binary-Artifacts🟢 10no binaries found in the repo
Packaging⚠️ -1packaging workflow not detected
Token-Permissions⚠️ -1No tokens found
Dangerous-Workflow⚠️ -1no workflows found
Pinned-Dependencies⚠️ -1no dependencies found
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 9license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/tiktoken 0.12.0 UnknownUnknown
pip/tokenizers 0.22.2 UnknownUnknown
pip/tomlkit 0.14.0 UnknownUnknown
pip/tqdm 4.67.3 UnknownUnknown
pip/typer 0.24.0 UnknownUnknown
pip/typer-slim 0.24.0 UnknownUnknown
pip/typing-extensions 4.15.0 UnknownUnknown
pip/typing-inspection 0.4.2 UnknownUnknown
pip/urllib3 2.6.3 UnknownUnknown
pip/uvicorn 0.40.0 UnknownUnknown
pip/watchfiles 1.1.1 🟢 3.4
Details
CheckScoreReason
Maintained⚠️ 01 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Packaging⚠️ -1packaging workflow not detected
Code-Review🟢 3Found 8/25 approved changesets -- score normalized to 3
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/websockets 16.0 UnknownUnknown
pip/yarl 1.22.0 🟢 7.1
Details
CheckScoreReason
Code-Review🟢 3Found 3/10 approved changesets -- score normalized to 3
Maintained🟢 1017 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Vulnerabilities🟢 100 existing vulnerabilities detected
Fuzzing🟢 10project is fuzzed
License🟢 10license file detected
Security-Policy🟢 10security policy file detected
Packaging🟢 10packaging workflow detected
SAST🟢 10SAST tool is run on all commits
Branch-Protection🟢 3branch protection is not maximal on development and all release branches
Signed-Releases🟢 85 out of the last 5 releases have a total of 5 signed artifacts.
pip/zipp 3.23.0 UnknownUnknown

Scanned Files

  • .github/workflows/tests.yml
  • Pipfile.lock
  • pyproject.toml
  • uv.lock


# Install uv
- name: Install uv
uses: astral-sh/setup-uv@v5

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow Medium

Unpinned 3rd party Action 'Playwright Tests' step
Uses Step
uses 'astral-sh/setup-uv' with ref 'v5', not a pinned commit hash
@gkorland
Copy link
Contributor

@claude[agent] please fix the CI and review the comment on the PR

- Updated .github/workflows/tests.yml to use 'uv run python -m pytest'
- Updated .github/workflows/pylint.yml to use 'uv run python -m pylint'
- Updated Makefile test and lint commands to use 'python -m' syntax
- Updated README.md and copilot-instructions.md with correct commands
- Updated setup_e2e_tests.sh with correct pytest command

This fixes the CI failures where uv couldn't find pytest/pylint executables.

Co-authored-by: gkorland <753206+gkorland@users.noreply.github.com>
@Claude
Copy link
Contributor Author

Claude AI commented Feb 21, 2026

@claude[agent] please fix the CI and review the comment on the PR

Fixed the CI failures in commit 8a6745f. The issue was that uv run pytest and uv run pylint couldn't find the executables. Updated all workflows and Makefile to use uv run python -m pytest and uv run python -m pylint instead, which properly invokes these tools as Python modules within the uv-managed environment.

@Claude Claude AI changed the title Migrate from Pipfile/pipenv to pyproject.toml/uv Addressing PR comments Feb 21, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR migrates the project from Pipfile/pipenv to pyproject.toml/uv for faster dependency resolution and modern Python packaging standards (PEP 621). The migration removes the old Pipfile/Pipfile.lock and introduces pyproject.toml with hatchling as the build backend, along with a uv.lock file containing 135 resolved packages. All build tools, CI/CD workflows, and documentation have been updated to use uv commands instead of pipenv.

Changes:

  • Converted Pipfile dependencies to pyproject.toml with PEP 621 compliance and configured hatchling build backend
  • Updated Makefile, Dockerfile, setup scripts, and all CI/CD workflows to use uv instead of pipenv
  • Updated README and copilot-instructions documentation to reflect the new uv-based workflow

Reviewed changes

Copilot reviewed 10 out of 12 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
pyproject.toml New configuration file defining project metadata, dependencies, and build system with hatchling
uv.lock Generated lockfile with 135 resolved packages and their exact versions
Pipfile Removed old pipenv configuration
Dockerfile Updated to use ghcr.io/astral-sh/uv image and uv sync commands
Makefile Replaced all pipenv commands with uv equivalents (uv sync, uv run)
setup_e2e_tests.sh Updated to check for uv installation and use uv commands
.github/workflows/tests.yml Uses astral-sh/setup-uv@v5 action instead of pipenv installation
.github/workflows/pylint.yml Uses astral-sh/setup-uv@v5 action instead of pipenv installation
.github/workflows/playwright.yml Uses astral-sh/setup-uv@v5 action instead of pipenv installation
README.md Updated all documentation to reference uv instead of pipenv
.github/copilot-instructions.md Updated setup instructions and troubleshooting guide for uv

Comment on lines +46 to +52
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = "-v"

Copy link

Copilot AI Feb 21, 2026

Choose a reason for hiding this comment

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

The pyproject.toml now includes pytest configuration that duplicates settings in pytest.ini. The pytest.ini file has more comprehensive settings including markers (e2e, slow, auth, integration, unit), filterwarnings, and additional addopts like --strict-markers and --disable-warnings. Consider either removing pytest.ini and migrating all settings to pyproject.toml, or removing the duplicate [tool.pytest.ini_options] section from pyproject.toml to avoid configuration conflicts. For consistency in modern Python projects, consolidating all tool configuration in pyproject.toml is recommended.

Suggested change
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = "-v"

Copilot uses AI. Check for mistakes.
Comment on lines +37 to +38
# Install Python dependencies from pyproject.toml
RUN uv sync --frozen --no-dev
Copy link

Copilot AI Feb 21, 2026

Choose a reason for hiding this comment

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

The Dockerfile uses 'uv sync --frozen --no-dev' which installs only production dependencies. However, this approach expects an activated virtual environment. Since the Dockerfile doesn't create or activate a virtual environment and doesn't set UV_SYSTEM_PYTHON=1, uv will create a virtual environment at /app/.venv by default. Consider either: (1) adding 'ENV UV_SYSTEM_PYTHON=1' before the uv sync command to install packages system-wide, which matches the previous pipenv behavior with --system flag, or (2) explicitly activating the virtual environment in subsequent RUN commands and the ENTRYPOINT.

Copilot uses AI. Check for mistakes.
@gkorland gkorland changed the title Addressing PR comments Move the project from Pipfile to pyproject Feb 21, 2026
@gkorland
Copy link
Contributor

@claude[agent] please resolve the conflicts in this PR

@Claude
Copy link
Contributor Author

Claude AI commented Feb 27, 2026

@gkorland Unfortunately I hit an unexpected error while processing your comment. I've automatically reported this to GitHub.

You can ask me to try again later by mentioning me in a new comment.

If you want to contact GitHub about this error, please mention the following identifier so they can better serve you: ca5f32ce-6355-4deb-9770-46ec459753fb

Sorry for the inconvenience!

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.

Move the project from Pipfile to pyproject

3 participants