Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/broken-access-control-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: '3.12'

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/broken-access-control-full-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: '3.12'

Expand Down Expand Up @@ -85,7 +85,7 @@ jobs:

- name: Upload Broken Access Control full scan report
if: always() && steps.python-files.outputs.file_count != '0'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: broken-access-control-full-scan-report
path: |
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,17 @@
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/[email protected]
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

# Add any setup steps before running the `github/codeql-action/init` action.
# This includes steps like installing compilers or runtimes (`actions/setup-node`
# or others). This is typically only required for manual builds.
# - name: Setup runtime (example)
# uses: actions/setup-example@v1

Check warning on line 71 in .github/workflows/codeql.yml

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Low - GitHub Action is version-tagged rather than pinned to an immutable commit SHA. Recommendation%3A Confirm this tag is an accepted repository convention or pin to a reviewed commit SHA.

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
uses: github/codeql-action/init@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
Expand Down Expand Up @@ -102,6 +102,6 @@
exit 1

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
uses: github/codeql-action/analyze@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
with:
category: "/language:${{matrix.language}}"
6 changes: 3 additions & 3 deletions .github/workflows/malicious-pr-security-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,12 @@ jobs:

steps:
- name: Checkout code
uses: actions/[email protected]
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v7
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: '3.12'

Expand Down Expand Up @@ -141,7 +141,7 @@ jobs:

- name: Upload review report
if: always()
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: malicious-pr-security-review
path: artifacts/malicious-pr-security-review.md
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/python-syntax-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Set up Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: '3.12'

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/staging-azd-ui-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -224,12 +224,12 @@ jobs:
exit 1

- name: Set up Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "3.12"

- name: Set up Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: "20"
cache: npm
Expand Down Expand Up @@ -285,7 +285,7 @@ jobs:

- name: Upload UI test artifacts
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: staging-ui-test-artifacts
path: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/swagger-route-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: '3.12'

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/xss-sink-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: '3.12'

Expand Down
2 changes: 1 addition & 1 deletion application/single_app/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@
EXECUTOR_MAX_WORKERS = 30
CHAT_STREAM_EXECUTOR_MAX_WORKERS = max(8, int(os.getenv('SIMPLECHAT_CHAT_STREAM_WORKERS', '32') or '32'))
SESSION_TYPE = 'filesystem'
VERSION = "0.261.401"
VERSION = "0.261.402"
IS_DEVELOPMENT = is_development_env_enabled()

# Opt-out for deployments where App Service Easy Auth is active but the platform
Expand Down
18 changes: 9 additions & 9 deletions application/single_app/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
Flask==3.1.3
Flask-WTF==1.2.1
gunicorn==25.0.3
Werkzeug==3.1.6
Werkzeug==3.1.9
requests==2.33.1
jsonschema==4.25.1
regex==2026.5.9
Expand All @@ -29,8 +29,8 @@
python-dotenv==1.2.2
azure-ai-formrecognizer==3.3.3
azure-ai-projects==1.0.0
azure-ai-agents==1.2.0b6

Check warning on line 32 in application/single_app/requirements.txt

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Important - Python requirement appears to use a pre-release version. Recommendation%3A Confirm the pre-release package was intentionally selected and reviewed.
pyjwt==2.13.0
pyjwt==2.15.0
markdown2==2.5.5
azure-mgmt-cognitiveservices==13.6.0
azure-identity==1.24.0
Expand All @@ -39,7 +39,7 @@
azure-storage-file-share==12.25.0
azure-storage-queue==12.12.0
azure-keyvault-secrets==4.10.0
pypdf==6.16.1
pypdf==6.21.4
python-docx==1.1.2
docxcompose==2.2.0
python-pptx==1.0.2
Expand All @@ -49,26 +49,26 @@
beautifulsoup4==4.13.3
openpyxl==3.1.5
xlrd==2.0.1
pillow==12.3.0
pillow==13.0.0
ffmpeg-binaries-compat==1.0.1
ffmpeg-python==0.2.0
semantic-kernel==1.39.4
snowflake-connector-python[pandas]==3.18.1
snowflake-connector-python[pandas]==4.7.3
tableauserverclient==0.40
yamcs-client==2.1.0
protobuf==6.33.5
redis==5.3.1
redis-entraid==1.2.1
redis-entraid==1.2.2
smbprotocol==1.15.0
pyodbc==5.3.0
PyMySQL==1.1.2
azure-monitor-opentelemetry==1.8.9
psycopg2-binary==2.9.10
cython==3.2.4
pyyaml==6.0.2
aiohttp==3.14.3
# AnyIO 4.11+ requires typing_extensions.sentinel, which older App Service agents can shadow.
anyio==4.10.0
aiohttp==3.14.4

Check warning on line 69 in application/single_app/requirements.txt

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Important - Changed line contains external connection or remote asset marker. Recommendation%3A Review whether changed code can send prompts, files, credentials, cookies, settings, logs, or user data to a new sink.
# This release no longer imports typing_extensions.sentinel (older App Service agents can shadow it).

Check warning on line 70 in application/single_app/requirements.txt

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Important - Changed line contains AI, plugin, agent, or workspace boundary marker. Recommendation%3A Check whether prompts, chat history, uploaded documents, embeddings, citations, settings, or identity can cross a new boundary.
anyio==4.14.2
html2text==2025.4.15
matplotlib==3.10.7
azure-cognitiveservices-speech==1.48.2
Expand Down
77 changes: 77 additions & 0 deletions docs/explanation/fixes/CONSOLIDATED_DEPENDENCY_UPDATES_FIX.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Consolidated dependency updates (v0.261.402)

## Issue and root cause

Nine Dependabot PRs targeted `main`, while these updates need to enter through
`paullizer-react-v2-ui` and subsequently follow its promotion through Development
to main. A replacement PR collects the updates without bypassing that branch flow.

Check warning on line 7 in docs/explanation/fixes/CONSOLIDATED_DEPENDENCY_UPDATES_FIX.md

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Important - Changed line contains security control, sanitization, or audit marker. Recommendation%3A Confirm the change does not weaken auth, CSRF, CSP, XSS defenses, settings sanitization, redaction, audit logging, or tests.
Closing an original PR as superseded does not mean its change has merged into main.

The proposed PyJWT upgrade also conflicts with the feature branch's
`redis-entraid==1.2.1`, which requires `PyJWT~=2.13.0`. Merely copying the Dependabot
pins would leave the combined application requirements uninstallable.

## Fixed in version: **0.261.402**

`application/single_app/config.py` increments the application patch segment from
`0.261.401` to `0.261.402`.

## Technical details

| Original PR | Included update |
| --- | --- |
| #1866 | pypdf 6.16.1 to 6.21.4 |
| #1863 | SHA-pinned setup-python 7.1.0, setup-node 7.1.0, upload-artifact 7.0.2, checkout 7.0.1, and CodeQL 4.39.1 in the eight original workflows |
| #1862 | AnyIO 4.10.0 to 4.14.2 |
| #1829 | Pillow 12.3.0 to 13.0.0 |
| #1792 | snowflake-connector-python[pandas] 3.18.1 to 4.7.3 |
| #1791 | aiohttp 3.14.3 to 3.14.4 |

Check warning on line 28 in docs/explanation/fixes/CONSOLIDATED_DEPENDENCY_UPDATES_FIX.md

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Important - Changed line contains external connection or remote asset marker. Recommendation%3A Review whether changed code can send prompts, files, credentials, cookies, settings, logs, or user data to a new sink.
| #1782 | Development-only MCP SDK 1.28.1 to 1.30.0 |
| #1758 | Werkzeug 3.1.6 to 3.1.9 |
| #1599 | PyJWT 2.13.0 to 2.15.0 |

The Python changes are in `application/single_app/requirements.txt` and
`requirements-dev.txt`. The directly coupled `redis-entraid` patch upgrade to
1.2.2 explicitly permits `PyJWT>=2.15.0,<3`; Redis, MSAL, and Azure Identity pins

Check warning on line 35 in docs/explanation/fixes/CONSOLIDATED_DEPENDENCY_UPDATES_FIX.md

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Important - Changed line contains secret or sensitive data source marker. Recommendation%3A Pair this source with any nearby network, logging, serialization, or process execution sink before approving.
remain unchanged. No deployment configuration or user-facing setting is added.

The previous AnyIO pin protected App Service installations where an agent's

Check warning on line 38 in docs/explanation/fixes/CONSOLIDATED_DEPENDENCY_UPDATES_FIX.md

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Important - Changed line contains AI, plugin, agent, or workspace boundary marker. Recommendation%3A Check whether prompts, chat history, uploaded documents, embeddings, citations, settings, or identity can cross a new boundary.
`typing_extensions` lacks `sentinel`. AnyIO 4.14.2 no longer imports that symbol.
The regression test removes it from the real module in a fresh process, then
imports the real AnyIO, OpenAI, MCP, and Semantic Kernel MCP integrations and

Check warning on line 41 in docs/explanation/fixes/CONSOLIDATED_DEPENDENCY_UPDATES_FIX.md

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Important - Changed line contains secret or sensitive data source marker. Recommendation%3A Pair this source with any nearby network, logging, serialization, or process execution sink before approving.
executes task groups, thread dispatch, and an HTTPX-mocked OpenAI completion.

Check warning on line 42 in docs/explanation/fixes/CONSOLIDATED_DEPENDENCY_UPDATES_FIX.md

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Important - Changed line contains secret or sensitive data source marker. Recommendation%3A Pair this source with any nearby network, logging, serialization, or process execution sink before approving.
This is checked with both normal and optimized Python. It does not claim
compatibility with arbitrary incompatible versions of agent-supplied packages.

## Testing and impact

`functional_tests/test_dependency_upgrade_compatibility.py` covers the historical
AnyIO import failure, PyJWT signature/audience validation and Redis token identity
extraction, Redis Entra package constraints, and real PNG/JPEG logo and ICO
conversion. Renamed GIF input must still fail the shared image-decoding allowlist.
The tests use isolated subprocesses rather than leaving mocked modules in the
pytest process.

Local validation passed 54 focused pytest cases and all five standalone
Snowflake action checks on Python 3.12 in a virtual environment without inherited
system packages. The combined application/development requirements installed
successfully, and `python -m pip check` reported no broken requirements.
The three route-policy scripts passed
28 checks, and documentation coverage and site quality passed 13 checks.
All eight changed workflow files parsed successfully; their 21 relevant action
references match the expected immutable SHAs, verified against upstream tags
(including the dereferenced CodeQL release tag). All nine upgraded Python
packages, including the supporting Redis Entra patch, meet the repository's
seven-day release-age requirement.

Existing focused tests cover PDF assembly and extraction, Snowflake action
configuration and read-only query handling, session merging, Redis token
providers, and MCP argument handling. Live Azure App Service, Redis, and
Snowflake authentication require deployment credentials and are not represented
by offline checks. The replacement PR records the exact validation commands,
results, and any environment limitations.

Before this change, the dependency updates were split across main-targeting PRs
and the combined PyJWT/Redis Entra pins conflicted. After this change, all nine
updates are represented together against the feature branch, with the necessary
Redis Entra compatibility patch and regression coverage.
Loading
Loading