Skip to content

security: pytest harness, dependabot advisories, and OSSF Scorecard remediations#501

Merged
WilliamBerryiii merged 21 commits into
mainfrom
security/remediate-dependency-advisories
Apr 21, 2026
Merged

security: pytest harness, dependabot advisories, and OSSF Scorecard remediations#501
WilliamBerryiii merged 21 commits into
mainfrom
security/remediate-dependency-advisories

Conversation

@WilliamBerryiii
Copy link
Copy Markdown
Member

@WilliamBerryiii WilliamBerryiii commented Apr 19, 2026

Closes #440
Closes #502

Description

This PR bundles three related work streams that all touch the security/dependency-pinning surface and share a common dependency closure:

  1. A comprehensive pytest harness for the evaluation/ package.
  2. Remediation of three Dependabot security advisories.
  3. Remediation of two OSSF Scorecard findings: Token-Permissions and Pinned-Dependencies.

The streams are bundled because the security upgrades (notably mlflow 3.11.1 requiring Python >=3.12) cascade into the dependency closure exercised by the new test suite, and the Scorecard remediations touch the same Dockerfiles and workflow files — splitting them would leave the branch in a non-buildable or partially-remediated state.

Test Harness

  • 12 test modules under evaluation/tests/ covering policy evaluation, runners, plotting, AzureML/MLflow bootstrap, blob/model download, batch eval, robot types, and artifact upload — 217 tests, 99.87% branch coverage.
  • New reusable workflow .github/workflows/evaluation-pytests.yml with if: !cancelled() guard, OIDC-authenticated Codecov upload under flag pytest-evaluation, and Python 3.12 runtime.
  • Wired into .github/workflows/pr-validation.yml; codecov.yml updated with the new flag.
  • evaluation/metrics/upload_artifacts.py: replaced deprecated datetime.utcnow() with timezone-aware datetime.now(timezone.utc) to silence test warnings and match Python 3.12 guidance.

Dependabot Security Advisories Addressed

Advisory Package Remediation Scope
IV-001 follow-redirects >=1.16.0 <2.0.0 npm override docs/docusaurus/package.json
IV-002 mlflow 3.11.0rc13.11.1 evaluation/pyproject.toml, requirements-lerobot-eval.txt, training/il/lerobot/pyproject.toml
IV-003 smol-toml 1.6.1 (exact) npm override package.json
lodash 4.17.214.18.1 docs/docusaurus/package.json

OSSF Scorecard Remediations (closes #502)

Token-Permissions (documentation)

  • docs/security/workflow-permissions.md documents the three workflows that require write-scoped permissions and the rationale for each (CodeQL security-events: write, Dependency Review pull-requests: write, Scorecard id-token: write + security-events: write).
  • No workflow YAML changes required — the existing scoping is the minimum necessary for those actions to function.

Pinned-Dependencies

  • Pinned the pip install of uv==0.10.9 by SHA256 hash with --require-hashes in both Dockerfiles that previously used unpinned pipCommand invocations:
    • data-management/viewer/backend/Dockerfile
    • evaluation/sil/docker/Dockerfile.lerobot-eval
  • The pin includes hashes for all 18 uv 0.10.9 PyPI artifacts (17 wheels + 1 sdist) so the build remains portable across Linux/macOS/Windows base images and x86_64/aarch64 architectures.
  • Expected Scorecard impact: Pinned-Dependencies score 9 → 10.

Dependency Conflict Resolution

The mlflow 3.11.1 upgrade required python >=3.12. To keep evaluation/ solvable the following bumps were applied in evaluation/pyproject.toml:

evaluation/uv.lock was re-resolved against the merged tree.

Deviations from Plan

  • smol-toml: pinned to exact 1.6.1 rather than >=1.6.1 to satisfy the repository's dependency-pinning lint rule.
  • Codecov upload: gated with if: !cancelled() so cancellations do not erroneously fail coverage reporting.
  • Python 3.12 floor: documented in test(evaluation): add unit test infrastructure and initial test suite #440 — the only practical path forward given the mlflow advisory.
  • Token-Permissions: addressed via documentation rather than YAML changes; the existing scopes are the minimum required for the actions to function.
  • Pinned-Dependencies: chose --require-hashes with the full 18-artifact hash list instead of pinning to a single platform-specific wheel hash, to preserve cross-arch/OS portability.

Type of Change

  • 🐛 Bug fix (security advisory + Scorecard remediation)
  • ✨ New feature (test harness + CI workflow)
  • 💥 Breaking change
  • 📚 Documentation update (workflow-permissions exceptions doc)
  • 🏗️ Infrastructure change
  • ♻️ Refactoring

Component(s) Affected

  • evaluation/ — pytest harness, security pins, requires-python floor
  • .github/workflows/ — new reusable evaluation-pytests workflow + PR validation wiring
  • docs/docusaurus/ — npm advisory remediation (follow-redirects, lodash)
  • docs/security/ — workflow-permissions exceptions documentation
  • training/il/lerobot/ — mlflow pin alignment
  • data-management/viewer/backend/Dockerfile — uv pinned by SHA256
  • evaluation/sil/docker/Dockerfile.lerobot-eval — uv pinned by SHA256
  • root package.json — smol-toml override, codecov.yml flag

Testing Performed

  • pytest evaluation/tests/ — 217/217 passing, 99.87% branch coverage
  • npm audit (root): 0 vulnerabilities
  • npm audit (docs/docusaurus): 0 vulnerabilities
  • uv lock (evaluation): resolves cleanly against the merged tree
  • OSSF Scorecard live API queried to confirm only pipCommand findings remained for Pinned-Dependencies, both addressed by this PR

Documentation Impact

  • Added docs/security/workflow-permissions.md documenting Token-Permissions exceptions
  • No other user-facing documentation changes needed (CI/security/test scope)

Bug Fix Checklist

Checklist

  • Code follows project conventions
  • Commits follow conventional commit format
  • Self-reviewed
  • No new linting warnings introduced
  • CI workflow guarded with if: !cancelled()
  • Branch up to date with main (merged via ort strategy)

🤖 - Generated by Copilot

Bill Berry and others added 5 commits April 15, 2026 19:45
- Bump lodash override to 4.18.0 (3 prototype pollution advisories)
- Add follow-redirects >=1.16.0 <2.0.0 override (header leak advisory)
- Update mlflow pins to stable 3.11.1 in IL training and eval configs
- Add smol-toml >=1.6.1 root override to eliminate vulnerable 1.6.0
- Regenerate lockfiles for docs/docusaurus and evaluation

🔒 - Generated by Copilot
… compliance

- pin numpy, marshmallow, packaging, torch to resolved uv.lock versions
- regenerate uv.lock after pinning changes

🔒 - Generated by Copilot
- Accept packaging==26.1 from main over 25.0

📦 - Generated by Copilot
…ecard

- add workflow-permissions.md cataloging 15 job-scoped write permissions across 9 workflows with rationale
- cover SARIF upload, release artifact attachment, and Sigstore attestation cases
- remove redundant top-level security-events permission from check-binary-integrity.yml
- link new doc from docs/security/README.md
- add intoto to cspell dictionary

📝 - Generated by Copilot
@WilliamBerryiii WilliamBerryiii requested a review from a team as a code owner April 19, 2026 01:22
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 19, 2026

Dependency Review

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

Snapshot Warnings

⚠️: No snapshots were found for the head SHA 1491252.
Ensure that dependencies are being submitted on PR branches and consider enabling retry-on-snapshot-warnings. See the documentation for more information and troubleshooting advice.

License Issues

evaluation/uv.lock

PackageVersionLicenseIssue Type
hypothesis6.151.13NullUnknown License
pytest9.0.3NullUnknown License

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
actions/actions/checkout de0fac2e4500dabe0009e67214ff5f5447ce83dd 🟢 5.7
Details
CheckScoreReason
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
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
Packaging⚠️ -1packaging workflow not detected
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Pinned-Dependencies🟢 3dependency not pinned by hash detected -- score normalized to 3
Security-Policy🟢 9security policy file detected
Branch-Protection🟢 5branch protection is not maximal on development and all release branches
SAST🟢 8SAST tool detected but not run on all commits
actions/actions/setup-python a309ff8b426b58ec0e2a45f0f869d46889d02405 🟢 5.2
Details
CheckScoreReason
Code-Review🟢 10all changesets reviewed
Maintained⚠️ 23 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
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
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST🟢 9SAST tool is not run on all commits -- score normalized to 9
actions/actions/upload-artifact 043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 🟢 6
Details
CheckScoreReason
Maintained🟢 88 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 8
Binary-Artifacts🟢 10no binaries found in the repo
Code-Review🟢 10all changesets reviewed
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Packaging⚠️ -1packaging workflow not detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 1dependency not pinned by hash detected -- score normalized to 1
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST🟢 10SAST tool is run on all commits
actions/astral-sh/setup-uv 08807647e7069bb48b6ef5acd8ec9567f424441b UnknownUnknown
actions/codecov/codecov-action 57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 🟢 7.2
Details
CheckScoreReason
Code-Review🟢 10all changesets reviewed
Maintained🟢 56 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
Binary-Artifacts🟢 10no binaries found in the repo
Dependency-Update-Tool🟢 10update tool detected
Packaging⚠️ -1packaging workflow not detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
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
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration
License🟢 10license file detected
Security-Policy🟢 10security policy file detected
Fuzzing⚠️ 0project is not fuzzed
SAST🟢 9SAST tool detected but not run on all commits
CI-Tests🟢 929 out of 30 merged PRs checked by a CI test -- score normalized to 9
Contributors🟢 10project has 13 contributing companies or organizations
pip/packaging 25.0 UnknownUnknown
pip/coverage 7.13.5 UnknownUnknown
pip/hypothesis 6.151.13 UnknownUnknown
pip/iniconfig 2.3.0 UnknownUnknown
pip/pluggy 1.6.0 UnknownUnknown
pip/pytest 9.0.3 UnknownUnknown
pip/pytest-cov 7.1.0 UnknownUnknown
pip/pytest-mock 3.15.1 UnknownUnknown
pip/sortedcontainers 2.4.0 UnknownUnknown

Scanned Files

  • .github/workflows/evaluation-pytests.yml
  • evaluation/pyproject.toml
  • evaluation/uv.lock

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Apr 19, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 67.61%. Comparing base (1bdfc1e) to head (1491252).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #501      +/-   ##
==========================================
+ Coverage   65.07%   67.61%   +2.53%     
==========================================
  Files         253      265      +12     
  Lines       15621    16851    +1230     
  Branches     2087     2266     +179     
==========================================
+ Hits        10166    11394    +1228     
  Misses       5165     5165              
- Partials      290      292       +2     
Flag Coverage Δ
pester 81.11% <ø> (ø)
pytest 92.40% <ø> (ø)
pytest-dataviewer 65.12% <ø> (ø)
pytest-evaluation 99.83% <100.00%> (?)
pytest-fuzz 1.56% <ø> (ø)
vitest 51.08% <ø> (ø)
Files with missing lines Coverage Δ
evaluation/metrics/bootstrap_mlflow.py 100.00% <100.00%> (ø)
evaluation/metrics/upload_artifacts.py 100.00% <100.00%> (ø)
evaluation/sil/scripts/download_aml_model.py 100.00% <100.00%> (ø)
evaluation/sil/scripts/download_blob_dataset.py 100.00% <100.00%> (ø)

... and 8 files with indirect coverage changes

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

WilliamBerryiii and others added 2 commits April 18, 2026 19:50
- add 12 test modules and conftest under evaluation/tests (217 tests, 99.87% branch coverage)
- add reusable workflow .github/workflows/evaluation-pytests.yml with codecov OIDC upload (flag: pytest-evaluation)
- wire workflow into .github/workflows/pr-validation.yml and configure codecov.yml flag
- pin evaluation/pyproject.toml security upgrades (numpy, marshmallow, packaging, torch, mlflow); requires-python >=3.12
- pin smol-toml 1.6.1 (exact) in package.json overrides
- replace datetime.utcnow() with timezone-aware now() in evaluation/metrics/upload_artifacts.py

Refs #440

🧪 - Generated by Copilot
…pendency-advisories

# Conflicts:
#	evaluation/uv.lock
#	package.json
@WilliamBerryiii WilliamBerryiii changed the title docs(security): document workflow permission exceptions for OSSF Scorecard test(evaluation): add pytest harness and remediate security advisories Apr 19, 2026
- Pin pip install of uv==0.10.9 with --require-hashes and SHA256 for all 17 wheels + sdist in both Dockerfiles
- Resolves OSSF Scorecard Pinned-Dependencies findings:
  - data-management/viewer/backend/Dockerfile:12
  - evaluation/sil/docker/Dockerfile.lerobot-eval:8-9
- Expected score: Pinned-Dependencies 9 -> 10

🤖 - Generated by Copilot
@WilliamBerryiii WilliamBerryiii changed the title test(evaluation): add pytest harness and remediate security advisories security: pytest harness, dependabot advisories, and OSSF Scorecard remediations Apr 19, 2026
- Add cspell words array for envaccount, envcontainer, myacct, mycontainer, noseparator, preds, xticklabels

- Loosen evaluation packaging pin to >=24.2,<26.0 to satisfy lerobot 0.5.0

- Add E402 noqa to test imports gated by pytest.importorskip

- Discard unused mock_mlflow tuple element to clear RUF059

- Trim trailing blank line from workflow-permissions.md to clear MD012

🤖 - Generated by Copilot
Comment thread evaluation/pyproject.toml Fixed
Bill Berry and others added 2 commits April 19, 2026 10:46
- relax packaging pin to <26.0 for lerobot 0.5.0 compatibility
- add E402 noqa for sys.path-dependent imports in policy tests
- rename unused mock fixtures to _mock_mlflow (RUF059)
- format lerobot eval test files
- fix MD012 trailing blank in workflow-permissions docs
- add envaccount, envcontainer, mycontainer to cspell dictionary

🔧 - Generated by Copilot
- Reformat lerobot eval test files with ruff

- Pin packaging==25.0 to satisfy SHA-pinning compliance check

🤖 - Generated by Copilot
WilliamBerryiii and others added 4 commits April 20, 2026 08:42
…pendency-advisories

# Conflicts:
#	evaluation/sil/docker/Dockerfile.lerobot-eval
- Update _load_skrl test to assert enable_training_mode(enabled=False, apply_to_models=True)
- Source switched to skrl 2.0 API in #492; test on this branch was stale

🤖 Generated by Copilot
@katriendg
Copy link
Copy Markdown
Collaborator

A few nits from review — none are blockers, just observations for awareness:

1. Tests use hardcoded /tmp paths — Several test files (test_bootstrap_mlflow.py, test_download_aml_model.py) use hardcoded /tmp/mlflow_config.env, /tmp/aml-model etc. rather than tmp_path fixtures. This creates potential conflicts in parallel CI runs and leaves artifacts on the filesystem. Low risk since they clean up in fixtures, but not ideal.

2. test_download_blob_dataset.py uses exec(compile(...)) — The script rewrites source code strings at runtime to redirect paths. This is fragile — if the script's string literals change, the tests silently stop replacing paths. A monkeypatch-based approach would be more robust.

3. smol-toml override change (>=1.6.11.6.1) — Correct per the dependency-pinning lint rule, but means future smol-toml patches won't auto-resolve. This is deliberate and documented.

Copy link
Copy Markdown
Contributor

@rezatnoMsirhC rezatnoMsirhC left a comment

Choose a reason for hiding this comment

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

Solid PR — thorough Dockerfile hash pinning across all 18 platform artifacts, correct OSSF Token-Permissions fix in check-binary-integrity.yml, well-structured test harness with good fixture isolation in conftest.py, and a correct datetime.utcnow()datetime.now(UTC) fix. The new reusable workflow is correctly SHA-pinned with persist-credentials: false and proper OIDC-gated Codecov upload.

Four non-blocking comments inline. The packaging version discrepancy (26.1 in description vs 25.0 in code) is worth a follow-up clarification before this branch is used as a dependency baseline.

Comment thread evaluation/pyproject.toml
Comment thread docs/security/workflow-permissions.md
Comment thread docs/security/workflow-permissions.md
Comment thread evaluation/tests/test_download_blob_dataset.py Outdated
Comment thread .github/workflows/evaluation-pytests.yml Outdated
Align evaluation-pytests.yml with other workflows pinned to v8.1.0

(08807647e7069bb48b6ef5acd8ec9567f424441b).

🔧 - Generated by Copilot
…sions doc

- resolve PYSEC-2025-49 by bumping packaging from 25.0 to 26.1

- add missing top-level heading to docs/security/workflow-permissions.md

🔒 - Generated by Copilot
…nize tests

- replace hardcoded paths with env vars (MLFLOW_CONFIG_PATH, AML_DOWNLOAD_DIR,

  AML_CONFIG_PATH, DATA_ROOT, DATASET_CONFIG_PATH) with sensible defaults

- replace fragile runpy/exec+source test loading with importlib spec loader

- use tmp_path and monkeypatch.setenv for test isolation

♻️ - Generated by Copilot
…duplicate H1

- revert packaging==26.1 to ==25.0 because lerobot==0.5.0 requires packaging<26.0; PYSEC-2025-49 is a setuptools advisory (fixed in 78.1.1), not packaging

- remove duplicate H1 in workflow-permissions.md; markdownlint MD025 treats frontmatter title: as the document H1

🔧 - Generated by Copilot
- branch protection requires a status check named 'pr-validation-summary' but no workflow produced it, leaving every PR stuck on 'Expected - Waiting for status to be reported'

- new aggregator runs after every PR validation job with if: always(), reads needs.*.result, and fails only when an upstream job neither succeeded nor was skipped

🔧 - Generated by Copilot
@WilliamBerryiii WilliamBerryiii merged commit e8756e8 into main Apr 21, 2026
41 checks passed
@WilliamBerryiii WilliamBerryiii deleted the security/remediate-dependency-advisories branch April 21, 2026 23:28
WilliamBerryiii pushed a commit that referenced this pull request May 8, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.8.0](v0.7.4...v0.8.0)
(2026-05-08)


### ⚠ BREAKING CHANGES

* **dataviewer:** bump frontend stack to React 19, Vite 8, Tailwind v4,
MSAL 5, ESLint 10
([#524](#524))

### ✨ Features

* **agents:** add automated validation for high-risk Dependabot bumps
([#574](#574))
([8c3686a](8c3686a)),
closes
[#573](#573)
* **data:** add camera selector to annotation workspace and fix AV1
frame extraction
([#591](#591))
([c809d2f](c809d2f))
* **data:** seed dataviewer frontend test foundation and per-section
codecov flags
([#594](#594))
([c06c4e3](c06c4e3))
* **dataviewer:** add OWASP security middleware stack
([#439](#439))
([239edb9](239edb9))
* **infrastructure:** add conversion pipeline Terraform module
([#542](#542))
([244531e](244531e))
* **infrastructure:** upgrade OSMO to chart 1.2.1 / image 6.2 with
secure auth and skrl 2.0.0 compatibility
([#492](#492))
([edfd7a5](edfd7a5))
* **pipeline:** add ACSA setup for ROS2 bag sync to Blob
([#451](#451))
([c271a54](c271a54))
* **workflows:** add advisory Dependabot PR reviewer agentic workflow
([#498](#498))
([d4bb140](d4bb140))
* **workflows:** trigger AW Dependabot PR reviewer after PR Validation
([#580](#580))
([7ab3d16](7ab3d16))


### 🐛 Bug Fixes

* **ci:** correct stale version comment for
actions/create-github-app-token
([#506](#506))
([b2e9a54](b2e9a54))
* **ci:** restore data-pipeline and training broken tests by domain
folder restructure
([#547](#547))
([06d8472](06d8472))
* **docs:** update remaining stale 'Coming soon' labels in
docs/README.md
([#507](#507))
([02439d6](02439d6))
* **docs:** update stale coming soon label for Training section
([#472](#472))
([46db49b](46db49b))
* **evaluation:** scope SIL AzureML validation code path and script
reference
([#387](#387))
([9f138a9](9f138a9))
* **infrastructure:** OSMO workflow execution, PostgreSQL public access,
and quickstart corrections
([#477](#477))
([9ed2da6](9ed2da6))
* **scripts:** exclude CHANGELOG.md from changed-files msdate check
([#644](#644))
([8133bdc](8133bdc))
* **workflows:** allow dependabot[bot] to activate AW Dependabot PR
Review
([#586](#586))
([39dc022](39dc022))
* **workflows:** correct branches filter on AW Dependabot PR Review
workflow_run trigger
([#584](#584))
([fe06b52](fe06b52))
* **workflows:** normalize validate.yaml placeholder env/compute values
([#510](#510))
([340ff44](340ff44))
* **workflows:** recompile aw-dependabot-pr-review lock file
([#576](#576))
([d77c167](d77c167))
* **workflows:** switch AW Dependabot PR Review to pull_request_target
([#589](#589))
([3f1edd1](3f1edd1))


### 📚 Documentation

* **docs:** Fix deployment guide links
([#614](#614))
([0070b04](0070b04))
* document dependency-pinning-artifacts directory purpose
([#508](#508))
([50e0010](50e0010))


### 📦 Build System

* **training:** standardize on Python 3.12 across manifests, containers,
and runtime scripts
([#541](#541))
([7ad014a](7ad014a))


### 🔧 Operations

* **build:** add Copilot cloud agent setup-steps workflow
([#593](#593))
([c912668](c912668))


### 🔧 Miscellaneous

* **build:** exclude auto-generated CHANGELOG.md from cspell and seed
dictionary
([#582](#582))
([de1dd57](de1dd57))
* **build:** redesign codecov flags and split pytest CI per component
([#520](#520))
([357e745](357e745))
* **dataviewer:** bump frontend stack to React 19, Vite 8, Tailwind v4,
MSAL 5, ESLint 10
([#524](#524))
([50f8ad4](50f8ad4))
* **dataviewer:** repoint stale src/dataviewer references to
data-management/viewer
([#504](#504))
([88fa1b4](88fa1b4)),
closes
[#503](#503)
* **deps-dev:** bump basic-ftp from 5.3.0 to 5.3.1
([#618](#618))
([ca10f2a](ca10f2a))
* **deps-dev:** bump globals from 15.15.0 to 17.5.0 in
/data-management/viewer/frontend
([#527](#527))
([0e0b2ae](0e0b2ae))
* **deps-dev:** bump ip-address from 10.1.0 to 10.2.0
([#616](#616))
([816c9cf](816c9cf))
* **deps-dev:** bump lint-staged from 16.4.0 to 17.0.2 in the
root-npm-dependencies group across 1 directory
([#626](#626))
([0e2f293](0e2f293))
* **deps-dev:** bump pydantic from 2.13.3 to 2.13.4 in the
python-dependencies group across 1 directory
([#629](#629))
([c24f1c1](c24f1c1))
* **deps-dev:** bump the python-dependencies group across 1 directory
with 2 updates
([#514](#514))
([8410f4b](8410f4b))
* **deps:** bump azure-core from 1.39.0 to 1.40.0 in /evaluation in the
inference-dependencies group across 1 directory
([#597](#597))
([6141db4](6141db4))
* **deps:** bump cryptography from 46.0.6 to 46.0.7 in
/data-management/viewer
([#424](#424))
([5fb6d58](5fb6d58))
* **deps:** bump cryptography from 46.0.6 to 46.0.7 in
/data-management/viewer/backend
([#423](#423))
([b516ad5](b516ad5))
* **deps:** bump lucide-react from 0.469.0 to 1.8.0 in
/data-management/viewer/frontend
([#528](#528))
([1bdfc1e](1bdfc1e))
* **deps:** bump nginx from `8aa63af` to `5616878` in
/data-management/viewer/frontend
([#511](#511))
([9e7e20e](9e7e20e))
* **deps:** bump nginx from 1.27-alpine to 1.29-alpine in
/data-management/viewer/frontend
([#484](#484))
([0e5c3dd](0e5c3dd))
* **deps:** bump node from `435f353` to `e49fd70` in
/data-management/viewer/frontend
([#560](#560))
([2884649](2884649))
* **deps:** bump react-is from 18.3.1 to 19.2.5 in
/data-management/viewer/frontend
([#530](#530))
([d51318c](d51318c))
* **deps:** bump tensordict from 0.11.0 to 0.12.1 in /evaluation in the
inference-dependencies group across 1 directory
([#456](#456))
([b24e733](b24e733))
* **deps:** bump the dataviewer-backend-dependencies group across 1
directory with 2 updates
([#531](#531))
([171a1da](171a1da))
* **deps:** bump the dataviewer-backend-dependencies group across 1
directory with 5 updates
([#516](#516))
([4f9a577](4f9a577))
* **deps:** bump the dataviewer-backend-dependencies group across 1
directory with 5 updates
([#602](#602))
([6c27ab5](6c27ab5))
* **deps:** bump the dataviewer-dependencies group across 1 directory
with 2 updates
([#529](#529))
([8646971](8646971))
* **deps:** bump the dataviewer-dependencies group across 1 directory
with 3 updates
([#601](#601))
([d28fb50](d28fb50))
* **deps:** bump the dataviewer-dependencies group across 1 directory
with 3 updates
([#632](#632))
([4ca5f3e](4ca5f3e))
* **deps:** bump the dataviewer-dependencies group across 1 directory
with 5 updates
([#515](#515))
([109ee81](109ee81))
* **deps:** bump the dataviewer-frontend-patch-minor group across 1
directory with 6 updates
([#630](#630))
([04d5dfd](04d5dfd))
* **deps:** bump the dataviewer-frontend-patch-minor group across 1
directory with 9 updates
([#563](#563))
([c08f450](c08f450))
* **deps:** bump the docusaurus-dependencies group across 1 directory
with 4 updates
([#627](#627))
([f5825fc](f5825fc))
* **deps:** bump the docusaurus-dependencies group across 1 directory
with 6 updates
([#599](#599))
([b859344](b859344))
* **deps:** bump the github-actions group across 1 directory with 4
updates
([#459](#459))
([2609c52](2609c52))
* **deps:** bump the github-actions group across 1 directory with 4
updates
([#517](#517))
([f54bf5d](f54bf5d))
* **deps:** bump the inference-dependencies group across 1 directory
with 11 updates
([#562](#562))
([087f53a](087f53a))
* **deps:** bump the inference-dependencies group across 1 directory
with 2 updates
([#628](#628))
([4a3be47](4a3be47))
* **deps:** bump the pip group across 2 directories with 1 update
([#494](#494))
([a14b6b0](a14b6b0))
* **docs:** update stale Python 3.11 references to 3.12
([#575](#575))
([6f85c95](6f85c95))
* **scripts:** remove redundant SC1091 disables in OSMO deploy scripts
([#509](#509))
([ae1cb82](ae1cb82))


### 🔒 Security

* **build:** pin dependencies and hash-verify downloads
([#465](#465))
([0289f49](0289f49))
* **build:** remediate dependency security advisories
([#479](#479))
([7196d6d](7196d6d))
* **deps-dev:** bump basic-ftp from 5.2.1 to 5.2.2
([#454](#454))
([cb158f1](cb158f1))
* **deps-dev:** bump basic-ftp from 5.2.2 to 5.3.0
([#495](#495))
([e983b8b](e983b8b))
* **deps-dev:** bump hypothesis from 6.152.3 to 6.152.4 in the
python-dependencies group
([#598](#598))
([83384d2](83384d2))
* **deps-dev:** bump markdownlint-cli2 from 0.22.0 to 0.22.1 in the
root-npm-dependencies group
([#559](#559))
([32bde35](32bde35))
* **deps-dev:** bump picomatch from 2.3.1 to 2.3.2 in /docs/docusaurus
([#455](#455))
([66f86ca](66f86ca))
* **deps-dev:** bump postcss from 8.5.10 to 8.5.12 in
/data-management/viewer/frontend
([#569](#569))
([a652dba](a652dba))
* **deps-dev:** bump the python-dependencies group with 2 updates
([#457](#457))
([749d231](749d231))
* **deps-dev:** bump the python-dependencies group with 2 updates
([#485](#485))
([71b44fd](71b44fd))
* **deps-dev:** bump the python-dependencies group with 3 updates
([#564](#564))
([9fc52fd](9fc52fd))
* **deps-dev:** bump typescript from 6.0.2 to 6.0.3 in /docs/docusaurus
in the docusaurus-dependencies group
([#513](#513))
([5694dbc](5694dbc))
* **deps:** bump azureml/openmpi4.1.0-ubuntu22.04 from 20260303.v5 to
20260409.v4 in /evaluation/sil/docker
([#480](#480))
([25d4df8](25d4df8))
* **deps:** bump cryptography from 46.0.6 to 46.0.7 in /evaluation in
the uv group across 1 directory
([#538](#538))
([92c5b2e](92c5b2e))
* **deps:** bump diffusers from 0.35.2 to 0.38.0 in /training/il/lerobot
([#638](#638))
([6261d19](6261d19))
* **deps:** bump follow-redirects from 1.15.11 to 1.16.0 in
/docs/docusaurus
([#469](#469))
([0458908](0458908))
* **deps:** bump gitpython and mako for lerobot IL training
([#623](#623))
([9f8022b](9f8022b))
* **deps:** bump node from 24.14.1-slim to 25.9.0-slim in
/data-management/viewer/frontend
([#482](#482))
([1532d09](1532d09))
* **deps:** bump packaging from 26.0 to 26.1 in /evaluation in the
inference-dependencies group
([#483](#483))
([f4afb6c](f4afb6c))
* **deps:** bump pillow from 12.1.1 to 12.2.0
([#467](#467))
([39fb663](39fb663))
* **deps:** bump python from 3.11-slim to 3.14-slim in
/data-management/viewer/backend
([#481](#481))
([7af9dfc](7af9dfc))
* **deps:** bump the dataviewer-backend-dependencies group across 1
directory with 15 updates
([#428](#428))
([e4446a2](e4446a2))
* **deps:** bump the dataviewer-backend-dependencies group in
/data-management/viewer/backend with 4 updates
([#487](#487))
([0f57c5b](0f57c5b))
* **deps:** bump the dataviewer-backend-dependencies group in
/data-management/viewer/backend with 8 updates
([#566](#566))
([d6e7869](d6e7869))
* **deps:** bump the dataviewer-dependencies group across 1 directory
with 5 updates
([#464](#464))
([24c208d](24c208d))
* **deps:** bump the dataviewer-dependencies group in
/data-management/viewer with 2 updates
([#486](#486))
([90149f3](90149f3))
* **deps:** bump the dataviewer-dependencies group in
/data-management/viewer with 6 updates
([#565](#565))
([f0bb36b](f0bb36b))
* **deps:** bump the dataviewer-frontend-patch-minor group across 1
directory with 10 updates
([#613](#613))
([e481f83](e481f83))
* **deps:** bump the github-actions group across 1 directory with 4
updates
([#534](#534))
([5478ab6](5478ab6))
* **deps:** bump the github-actions group with 2 updates
([#488](#488))
([4e6ce98](4e6ce98))
* **deps:** bump the github-actions group with 3 updates
([#567](#567))
([48c38dc](48c38dc))
* **deps:** bump the github-actions group with 3 updates
([#634](#634))
([00cfb49](00cfb49))
* **deps:** bump the github-actions group with 6 updates
([#603](#603))
([73eb79a](73eb79a))
* **deps:** bump the training-dependencies group across 1 directory with
23 updates
([#463](#463))
([d5a8656](d5a8656))
* **deps:** bump yaml from 2.8.2 to 2.8.3 in
/data-management/viewer/frontend
([#453](#453))
([10449df](10449df))
* pytest harness, dependabot advisories, and OSSF Scorecard remediations
([#501](#501))
([e8756e8](e8756e8))
* **scripts:** pin and hash-verify all shell script downloads
([#468](#468))
([0c2bb9c](0c2bb9c))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: physical-ai-toolchain-release[bot] <267194360+physical-ai-toolchain-release[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.

docs(security): document workflow permission exceptions for OSSF Scorecard test(evaluation): add unit test infrastructure and initial test suite

7 participants