Skip to content

Local validation — 2026-10-24

Historical local report

This records checks before the public release. Version 0.3.0a1 is now available on PyPI. For subsequent remote runs, consult GitHub Actions.

Package: 0.3.0a1. Environment: macOS arm64, Python 3.13.7, Django 6.0.4, SQLite, Node 22.19.0, npm 10.9.3. Frontend dependency versions are pinned in frontend/package-lock.json. Browser tests used an existing Chromium installation through MODELSHEET_CHROMIUM, with Playwright's local Django test server.

Check Result
pytest backend/formula/permission/transaction tests 102 passed
Vitest buffer/formula tests 57 passed
Playwright browser scenarios 10 passed
TypeScript check and production Vite bundle Passed
Ruff Passed
Django system checks Passed
Missing migration detection No changes detected
wheel and sdist build Passed
twine metadata checks Both distributions passed
Wheel installation outside repository import path Passed
Installed wheel migrations and collectstatic Passed without Node.js
Wheel templates, compiled assets, dependency notices Present
sdist contents No node_modules or browser reports

The package smoke test creates a new virtualenv with access to existing system dependencies, installs the wheel without resolving dependencies, then runs outside the repository with a separate database/settings module. It verifies package contents and integration, not a fresh download of Django from an index.

Browser coverage includes formula edit/undo/redo/save/reload, readonly clipboard paste, preview/confirmation, failed-save retention, Admin pagination/search roundtrip, 50-column virtualization, arrow/Tab/Enter/Shift navigation, server sorting, Ctrl+D, and rejecting copied positional formulas after a page change.

Backend coverage includes permission bypass attempts, hidden fields/history masking, read-only audit Admin, conflicts with an actual ordinary Admin save, atomic rollback, concurrent saves through separate connections, duplicate keys, frozen bulk membership, dependency conflicts, background cancellation/resume, duplicate delivery, partial results, and permission revocation between worker chunks.

Recorded benchmarks

The benchmark creates a temporary SQLite file with 50 scalar data columns and returns 200-row windows. Ten samples were measured per case. Backend latency includes snapshot persistence and exact count; it excludes HTTP/browser overhead. These are local observations, not release-wide performance guarantees. The runs were not isolated from other development/test activity; CPU model/RAM were not available through the sandbox's hardware-query interface.

Dataset / operation Median p95
100k / first 200-row page 29.94 ms 40.70 ms
100k / fifth page 33.75 ms 40.94 ms
100k / exact indexed filter 2.99 ms 4.80 ms
100k / substring search 46.60 ms 57.19 ms
1M / first 200-row page 36.07 ms 300.50 ms
1M / fifth page 37.32 ms 60.13 ms
1M / exact indexed filter 2.15 ms 3.37 ms
1M / substring search 377.84 ms 442.33 ms

Each case used four SQL queries per call. Raw results are in benchmark-100k.json and benchmark-1m.json. See benchmark instructions to reproduce them.

Checks that still require an external environment

  • PostgreSQL/MySQL servers and Docker were unavailable locally. The CI workflow configures service containers and runs the same transactional tests against both.
  • Django 5.2/6.1 and the other Python versions are configured in CI but were not run in this local environment. The compatibility matrix is a target until those jobs pass.
  • PyPI name availability could not be established: the direct probe encountered certificate/transport failures, and the web fetch was unavailable. The read-only scripts/check_pypi_name.py probe is provided for a release environment with working trusted TLS access. No name reservation is implied.
  • No package was uploaded to PyPI/TestPyPI, no remote CI run or repository push was performed, and no upgrade from a prior published release was possible for this initial distribution. The release procedure is documented in releasing.md.