Skip to content

Add sha256 file hashing tests - #107

Merged
rylinjames merged 2 commits into
FastCrest:mainfrom
txhno:test/sha256-file-hashing
May 12, 2026
Merged

Add sha256 file hashing tests#107
rylinjames merged 2 commits into
FastCrest:mainfrom
txhno:test/sha256-file-hashing

Conversation

@txhno

@txhno txhno commented May 5, 2026

Copy link
Copy Markdown
Contributor

Description

Adds unit coverage for reflex.verification_report._sha256 across empty, small, and chunk-spanning files using fixed expected SHA256 digests.

Closes #36

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Infrastructure / CI update
  • Test coverage

How Has This Been Tested?

  • pytest tests/ passes locally
  • reflex doctor sanity check
  • Other: PYTHONPATH=src pytest tests/test_verification.py -q
  • Other: ruff check tests/test_verification.py

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • I have kept the PR scoped to a single concern (one concern per PR)

@txhno
txhno requested a review from rylinjames as a code owner May 5, 2026 05:53
@AniketR10
AniketR10 enabled auto-merge (rebase) May 8, 2026 03:38
rylinjames added a commit that referenced this pull request May 12, 2026
* fix: green main test suite — 3 prod bugs + 7 stale tests

Main has been red on `pytest CI` since today's v0.9.0 → v0.9.6 churn.
Diagnosed 3 real production bugs + 7 tests that drifted vs the live
CLI / API surface. Splits into:

PRODUCTION BUGS (these would have hit customers):

* `src/reflex/diagnostics/__init__.py` — `_ensure_registry_loaded()`
  short-circuited on `if _REGISTRY:` which broke when any single
  check_*.py was imported before run_all_checks (registry frozen at
  one entry, 9 missing). Switched to a separate `_REGISTRY_LOADED`
  bool flag.

* `src/reflex/diagnostics/check_rtc_chunks.py` — interpreted
  `rtc_execution_horizon` as seconds and multiplied by frequency_hz,
  over-counting by ~Hz×. Validator at embodiments/validate.py:163
  documents the field as actions count. With Hz×over-count, every
  preset (franka/so100/ur5) flagged "fail" at well-aligned chunk
  sizes. Fixed: read field directly as int actions.

* `src/reflex/pro/license.py` — `issue_dev_license` wrote
  license_version=2 (signed) with empty signature; loader rejected
  the same file as corrupt. The whole dev-license escape hatch was
  broken. Switched to LICENSE_VERSION_LEGACY_UNSIGNED so the loader's
  unsigned path takes it.

STALE TESTS (drift vs current CLI/API):

* `test_doctor_diagnostics::TestSmoke` — derived expected check count
  from the registry instead of hardcoding `== 10` so future check
  additions don't break it.
* `test_cli_export_end_to_end::test_unsupported_model_type_raises` —
  GR00T now matches the substring path; use a sentinel name.
* `test_install_smoke::test_import_reflex_version_is_v07` — used semver
  parsing (>= 0.7.0) instead of `startswith("0.7.")`.
* `test_model_registry` — `--family openvla` now matches v0.9.6
  registry; switched to a sentinel family. Output string changed from
  "Available:" to "Available registry ids:".
* `test_export_mode::test_run_parallel_pi05_exports_*` — assert against
  positional index 6 instead of [-1] after `per_step_expert` arg added.
* `test_vlm_prefix::TestOrchestratorFullPipeline` — `run()` now returns
  (vlm_k, vlm_v) per-layer K/V tuple, not a single 3D prefix.
* `test_snapflow_backend` — 4 tests skip when `lerobot` not installed
  (require [native]/[monolithic]/[rtc] extras, not in CI's [dev,onnx,serve].

Verified: 2441 passed, 51 skipped on Python 3.12 with the exact CI
extras (Obtaining file:///Users/romirjain/Desktop/building%20projects/reflex-vla
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Checking if build backend supports build_editable: started
  Checking if build backend supports build_editable: finished with status 'done'
  Getting requirements to build editable: started
  Getting requirements to build editable: finished with status 'done'
  Installing backend dependencies: started
  Installing backend dependencies: finished with status 'done'
  Preparing editable metadata (pyproject.toml): started
  Preparing editable metadata (pyproject.toml): finished with status 'done'
Requirement already satisfied: cryptography>=42.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (46.0.3)
Requirement already satisfied: httpx>=0.24.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (0.28.1)
Requirement already satisfied: huggingface-hub>=0.20.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (0.36.2)
Requirement already satisfied: numpy>=1.24.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (2.2.6)
Requirement already satisfied: onnx>=1.15.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (1.21.0)
Requirement already satisfied: onnxscript>=0.1.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (0.6.2)
Requirement already satisfied: pydantic>=2.0.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (2.12.4)
Requirement already satisfied: pyyaml>=6.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (6.0.3)
Requirement already satisfied: rich>=13.0.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (15.0.0)
Requirement already satisfied: safetensors>=0.4.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (0.7.0)
Requirement already satisfied: torch>=2.1.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (2.10.0)
Requirement already satisfied: transformers<5.4,>=4.40 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (4.57.6)
Requirement already satisfied: typer>=0.9.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (0.20.0)
Requirement already satisfied: mypy>=1.10 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (1.19.1)
Requirement already satisfied: pytest-asyncio>=0.23 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (1.3.0)
Requirement already satisfied: pytest>=8.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (9.0.2)
Requirement already satisfied: ruff>=0.4.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (0.15.0)
Requirement already satisfied: onnxruntime>=1.17.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (1.24.4)
Requirement already satisfied: fastapi>=0.100.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (0.134.0)
Requirement already satisfied: jsonschema>=4.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (4.25.1)
Requirement already satisfied: pillow>=10.0.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (11.3.0)
Requirement already satisfied: prometheus-client>=0.19.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (0.24.1)
Requirement already satisfied: uvicorn>=0.23.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from reflex-vla==0.9.6) (0.41.0)
Requirement already satisfied: filelock in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from transformers<5.4,>=4.40->reflex-vla==0.9.6) (3.25.0)
Requirement already satisfied: packaging>=20.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from transformers<5.4,>=4.40->reflex-vla==0.9.6) (25.0)
Requirement already satisfied: regex!=2019.12.17 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from transformers<5.4,>=4.40->reflex-vla==0.9.6) (2026.2.19)
Requirement already satisfied: requests in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from transformers<5.4,>=4.40->reflex-vla==0.9.6) (2.32.5)
Requirement already satisfied: tokenizers<=0.23.0,>=0.22.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from transformers<5.4,>=4.40->reflex-vla==0.9.6) (0.22.2)
Requirement already satisfied: tqdm>=4.27 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from transformers<5.4,>=4.40->reflex-vla==0.9.6) (4.67.1)
Requirement already satisfied: fsspec>=2023.5.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from huggingface-hub>=0.20.0->reflex-vla==0.9.6) (2026.2.0)
Requirement already satisfied: hf-xet<2.0.0,>=1.1.3 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from huggingface-hub>=0.20.0->reflex-vla==0.9.6) (1.4.3)
Requirement already satisfied: typing-extensions>=3.7.4.3 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from huggingface-hub>=0.20.0->reflex-vla==0.9.6) (4.15.0)
Requirement already satisfied: cffi>=2.0.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from cryptography>=42.0->reflex-vla==0.9.6) (2.0.0)
Requirement already satisfied: pycparser in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from cffi>=2.0.0->cryptography>=42.0->reflex-vla==0.9.6) (2.23)
Requirement already satisfied: starlette>=0.46.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from fastapi>=0.100.0->reflex-vla==0.9.6) (0.52.1)
Requirement already satisfied: typing-inspection>=0.4.2 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from fastapi>=0.100.0->reflex-vla==0.9.6) (0.4.2)
Requirement already satisfied: annotated-doc>=0.0.2 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from fastapi>=0.100.0->reflex-vla==0.9.6) (0.0.4)
Requirement already satisfied: anyio in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from httpx>=0.24.0->reflex-vla==0.9.6) (4.12.1)
Requirement already satisfied: certifi in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from httpx>=0.24.0->reflex-vla==0.9.6) (2025.11.12)
Requirement already satisfied: httpcore==1.* in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from httpx>=0.24.0->reflex-vla==0.9.6) (1.0.9)
Requirement already satisfied: idna in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from httpx>=0.24.0->reflex-vla==0.9.6) (3.11)
Requirement already satisfied: h11>=0.16 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from httpcore==1.*->httpx>=0.24.0->reflex-vla==0.9.6) (0.16.0)
Requirement already satisfied: attrs>=22.2.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from jsonschema>=4.0->reflex-vla==0.9.6) (25.4.0)
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from jsonschema>=4.0->reflex-vla==0.9.6) (2025.9.1)
Requirement already satisfied: referencing>=0.28.4 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from jsonschema>=4.0->reflex-vla==0.9.6) (0.37.0)
Requirement already satisfied: rpds-py>=0.7.1 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from jsonschema>=4.0->reflex-vla==0.9.6) (0.30.0)
Requirement already satisfied: mypy_extensions>=1.0.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from mypy>=1.10->reflex-vla==0.9.6) (1.1.0)
Requirement already satisfied: pathspec>=0.9.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from mypy>=1.10->reflex-vla==0.9.6) (1.0.4)
Requirement already satisfied: librt>=0.6.2 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from mypy>=1.10->reflex-vla==0.9.6) (0.8.0)
Requirement already satisfied: protobuf>=4.25.1 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from onnx>=1.15.0->reflex-vla==0.9.6) (6.33.5)
Requirement already satisfied: ml_dtypes>=0.5.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from onnx>=1.15.0->reflex-vla==0.9.6) (0.5.4)
Requirement already satisfied: flatbuffers in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from onnxruntime>=1.17.0->reflex-vla==0.9.6) (25.12.19)
Requirement already satisfied: sympy in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from onnxruntime>=1.17.0->reflex-vla==0.9.6) (1.14.0)
Requirement already satisfied: onnx_ir<2,>=0.1.15 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from onnxscript>=0.1.0->reflex-vla==0.9.6) (0.2.0)
Requirement already satisfied: annotated-types>=0.6.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from pydantic>=2.0.0->reflex-vla==0.9.6) (0.6.0)
Requirement already satisfied: pydantic-core==2.41.5 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from pydantic>=2.0.0->reflex-vla==0.9.6) (2.41.5)
Requirement already satisfied: iniconfig>=1.0.1 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from pytest>=8.0->reflex-vla==0.9.6) (2.3.0)
Requirement already satisfied: pluggy<2,>=1.5 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from pytest>=8.0->reflex-vla==0.9.6) (1.5.0)
Requirement already satisfied: pygments>=2.7.2 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from pytest>=8.0->reflex-vla==0.9.6) (2.19.2)
Requirement already satisfied: markdown-it-py>=2.2.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from rich>=13.0.0->reflex-vla==0.9.6) (4.0.0)
Requirement already satisfied: mdurl~=0.1 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from markdown-it-py>=2.2.0->rich>=13.0.0->reflex-vla==0.9.6) (0.1.2)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from sympy->onnxruntime>=1.17.0->reflex-vla==0.9.6) (1.3.0)
Requirement already satisfied: setuptools in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from torch>=2.1.0->reflex-vla==0.9.6) (80.9.0)
Requirement already satisfied: networkx>=2.5.1 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from torch>=2.1.0->reflex-vla==0.9.6) (3.6.1)
Requirement already satisfied: jinja2 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from torch>=2.1.0->reflex-vla==0.9.6) (3.1.6)
Requirement already satisfied: click>=8.0.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from typer>=0.9.0->reflex-vla==0.9.6) (8.1.8)
Requirement already satisfied: shellingham>=1.3.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from typer>=0.9.0->reflex-vla==0.9.6) (1.5.4)
Requirement already satisfied: MarkupSafe>=2.0 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from jinja2->torch>=2.1.0->reflex-vla==0.9.6) (3.0.3)
Requirement already satisfied: charset_normalizer<4,>=2 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from requests->transformers<5.4,>=4.40->reflex-vla==0.9.6) (3.4.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/romirjain/anaconda3/lib/python3.13/site-packages (from requests->transformers<5.4,>=4.40->reflex-vla==0.9.6) (2.6.1)
Building wheels for collected packages: reflex-vla
  Building editable for reflex-vla (pyproject.toml): started
  Building editable for reflex-vla (pyproject.toml): finished with status 'done'
  Created wheel for reflex-vla: filename=reflex_vla-0.9.6-py3-none-any.whl size=21769 sha256=fa814e4a5e66c9d88ce465ed5b542b313eaaa2c214e095809def12757cb46c2f
  Stored in directory: /private/var/folders/0m/9x1qvrkn179c6cpstxkqxcn80000gn/T/pip-ephem-wheel-cache-59ob5rns/wheels/30/e8/90/06fbe50a9d826022f91f9fe36795a7a533865706fc0f193102
Successfully built reflex-vla
Installing collected packages: reflex-vla
  Attempting uninstall: reflex-vla
    Found existing installation: reflex-vla 0.1.0
    Uninstalling reflex-vla-0.1.0:
      Successfully uninstalled reflex-vla-0.1.0
Successfully installed reflex-vla-0.9.6). All 6 unblocked-by-CI
PRs (#105, #107, #109) should turn green on the next run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)

* fix: force COLUMNS=200 in conftest so help-output tests survive CI

Six CLI --help tests (test_cli, test_cuda_graphs, test_distill_cli,
test_one_command_deploy, test_runtime_calibration) failed on Ubuntu
CI runners but passed locally with identical rich/click/typer
versions. Root cause: GitHub Actions runners default to a terminal
width where Rich elides long option names to "--..." in the rendered
panel, breaking substring assertions like
`"--export-mode" in result.output`.

Set COLUMNS=200 in pytest_configure so every CliRunner invocation
gets a wide-enough rendering window. This is the long-term fix —
every future help-output test inherits it without needing per-test
ENV management.

Verified: 2441 passed locally on Py3.12 with CI's exact extras.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: set TERM=dumb in conftest so CI's color renderer doesn't break flag matching

Reproduced under `CI=true GITHUB_ACTIONS=true`: Rich inserts ANSI color
escapes BETWEEN the two `-` chars of long flag names, so substring
assertions like `"--export-mode" in result.output` are False even
though the rendered help looks identical. The two hyphens are no
longer adjacent in the captured buffer.

The conftest's earlier `COLUMNS=200` fix removed Rich's name-elision
("--..." truncation) but didn't address this second behavior. Adding
`TERM=dumb` forces Rich into no-color plain-text rendering — flag
names render as adjacent `--name` and substring search works.

Verified locally with CI=true GITHUB_ACTIONS=true forced: 2441 passed,
51 skipped (matches the no-CI-env run).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@rylinjames
rylinjames merged commit 62f0b75 into FastCrest:main May 12, 2026
6 checks passed
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.

[Testing] Unit test for file integrity hashing

3 participants