Tags: zincware/ZnDraw
Tags
[pre-commit.ci] pre-commit autoupdate (#900) updates: - [github.com/biomejs/pre-commit: v2.4.8 → v2.4.9](biomejs/pre-commit@v2.4.8...v2.4.9) - [github.com/astral-sh/ruff-pre-commit: v0.15.7 → v0.15.8](astral-sh/ruff-pre-commit@v0.15.7...v0.15.8) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
feat: worker resilience — remove eager SIO cleanup, add integration t… …ests (#887) * feat: register joblib WorkerNotFound and TaskNotFound in PROBLEM_TYPES Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: remove eager worker cleanup from SIO on_disconnect Worker cleanup is now handled by HTTP DELETE (called from ZnDraw.disconnect() -> jobs.disconnect()) or the background sweeper. The SIO on_disconnect handler only cleans up cameras and edit locks. Also updated ZnDraw.disconnect() to call jobs.disconnect() first, which performs the HTTP DELETE on the worker before dropping SIO. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: add Redis frame count cleanup to sweeper and DELETE paths Wire up FrameRoomCleanup dependency and on_frame_rooms callback to delete Redis provider_frame_count keys and emit FramesInvalidate when frame providers are removed (worker DELETE or sweeper timeout). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: install zndraw-joblib as editable dependency Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * test: add worker resilience integration tests Verify that removing eager cleanup_worker() from SIO on_disconnect works correctly: SIO disconnect preserves worker records, heartbeat still works, and server restart with fresh DB causes worker thread exit. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * style: format test_resilience.py with ruff Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: bump zndraw-joblib>=0.1.7, remove editable source, clean up test code - Bump dependency to released v0.1.7 (was >=0.1.6 with editable override) - Remove [tool.uv.sources] editable path entry - Add debug logging to teardown exception handlers - Fix redundant except clause and unused loop variable Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * style: fix ruff E402 import order and F841 unused variable --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[pre-commit.ci] pre-commit autoupdate (#885) updates: - [github.com/biomejs/pre-commit: v2.4.7 → v2.4.8](biomejs/pre-commit@v2.4.7...v2.4.8) - [github.com/astral-sh/ruff-pre-commit: v0.15.6 → v0.15.7](astral-sh/ruff-pre-commit@v0.15.6...v0.15.7) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
fix: taskiq worker healthcheck and cross-replica socket events (#879) The taskiq-worker container inherited the Dockerfile HEALTHCHECK which pings :8000 — but the worker has no HTTP server, so it was permanently "unhealthy". Override with a pgrep-based process check in both compose files. Bump zndraw-socketio>=0.1.6 which fixes AsyncRedisManager not being set on the underlying socketio.AsyncServer (was stored on the wrapper only), causing socket events to never cross replicas via Redis pub/sub. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix/isosurface improvements (#876) * feat: add configurable isovalue range, smoothing, and editable-range slider - Add isovalue_min/isovalue_max fields to Isosurface model with model validator, replacing hardcoded ge/le bounds. Users can now set custom ranges for SDF data (values 1-30+) instead of being capped at [-0.25, 0.25]. - Add sigma field for server-side Gaussian smoothing before marching cubes. - New EditableRangeSlider frontend component: slider with click-to-edit min, max, and value labels driven by x-custom-type: "editable-range". - New HiddenRenderer to suppress x-hidden fields from the form. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: address code review issues for isosurface improvements - Add le=5.0 upper bound to sigma query parameter (prevent DoS via huge sigma) - Add scipy as explicit dependency (was only transitive via scikit-image) - Validate commitMin/commitMax against current bounds in EditableRangeSlider - Remove hardcoded fallback defaults (-0.25/0.25) from frontend component - Fix aria-label to use actual label instead of non-existent element ID - Reorder editableRangeSliderTester with other Priority 10 renderers - Fix misleading test docstring for hidden fields test Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix: use tuple for pytest.mark.parametrize argument (PT006) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Fix/typing (#873) * fix type issues * use `get_headers` * Fix all pre-commit hook violations (ruff, codespell) - Fix 510+ ruff lint errors: type ignores, unused args, line lengths, naming, blind exceptions, logging format, raise-from, pathlib, etc. - Rename private attrs to public where cross-module access is intended (cached_length, mount, mount_name, tsio, fetch, get_headers) - Fix infinite recursion bug in APIManager.get_headers() - Rename ProblemException to ProblemError (N818) - Add codespell config to skip lock files, SVGs, planning docs - Add per-file-ignores for tests (INP001, N803, SLF001) and docs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix runtime errors: revert base.py future annotations, fix pathlib import - Revert `from __future__ import annotations` in geometries/base.py (runtime type aliases with `|` fail on Python 3.11) - Move `pathlib` out of TYPE_CHECKING in presets.py (Typer evals annotations at runtime, needs pathlib available) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix CI failures: correct zndraw_joblib import, store() signature, zip strictness - Fix ImportError: import ProblemException (not ProblemError) from zndraw_joblib - Fix StorageResultBackend.store() param name _ttl → ttl to match keyword API - Use zip(strict=True) in frames route to fail loudly on length mismatch - Fix malformed type: ignore syntax in test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add noqa for StorageResultBackend.store() ttl param (interface contract) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * bugfix * Fix failing tests: match patterns and store() parameter name - Case-insensitive regex for step error message match - Update PermissionError match to reflect new error wording - Rename _ttl to ttl in InMemoryResultBackend.store() Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix SocketManager: validate room before connect, fix mount reference - Move room-is-None check before tsio.connect() to avoid orphaned transport - Wrap join/retry logic in try/except to disconnect on failure - Fix _on_connect: use _mount/_mount_name instead of bound method .mount Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * lint * Fix store() parameter name: noqa instead of rename to avoid kwarg breakage Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Feat/reduce verbose output (#855) * feat(cli): reduce default terminal output, add --verbose for details - Change operational INFO logs to DEBUG level across all modules - Make --verbose flag set DEBUG log level (default WARNING) - Add -q flag to celery worker to suppress banner in non-verbose mode - Make some CLI echo messages conditional on verbose flag - Fix duplicate logging by removing redundant basicConfig calls - Move config banner from INFO to DEBUG level - Celery worker loglevel now respects config.log_level Default output now shows only: - Server startup messages - Essential status (PID, port, URL) - Warnings and errors Use --verbose to see detailed operational logs. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * further debug messages --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Fix/geometry form defaults (#815) * fix: geometry form defaults and array serialization - Extract defaults from JSON schema properties instead of merging schema structure - Apply defaults immediately when geometry type is selected (not on blur) - Pass schema.default to ArrayEditorDialog instead of using hardcoded values - Remove getDefaultArrayValue() - Pydantic is single source of truth - Fix array serialization for rotation, scale, size_2d, size_3d fields to always return 2D arrays (e.g., [[1,1,1]]) matching Pydantic's list[Vec] types - Set supportsSingleValue=false for all multi-dimensional geometry fields - Use Zustand store as single source of truth for GeometryForm (fixes position not updating after transform controls manipulation) Fixes 400 BAD REQUEST errors when modifying scale/rotation/size fields on Shape, Box, and other geometry types. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: sync geometry form with Zustand in real-time Add real-time sync between Zustand store and geometry form data while the form sidebar is open. This ensures transform control updates are immediately visible in the form. Changes: - Watch geometry data in both edit and create modes (using keyInput in create mode after the geometry is saved) - Add sync effect that compares Zustand data with form data and updates when they differ - Add isSyncingFromZustandRef flag to prevent auto-save loops when syncing from external updates (transform controls, Python client) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * review * refactor: derive array editor config from Pydantic schemas Remove hardcoded frontend configuration (ArrayFieldType, getFieldTypeConfig, inferFieldType, supportsSingleValue) and derive all array field configuration from Pydantic JSON schemas. Pydantic is now the single source of truth. - Replace ArrayFieldType enum with schema-based getArrayFieldInfo() - Remove FieldTypeConfig hardcoded defaults in favor of schema parsing - Update ArrayEditorDialog to accept schema prop instead of fieldType - Rename store property geometryDefaults -> geometrySchemas for clarity - Delete outdated README_ARRAY_EDITOR.md documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: make hex color validation schema-driven via x-features - Only validate strings as hex colors when schema has "color-picker" feature - Fix createDefaultRow to return full 1D array instead of just first element - Remove unused getArrayFieldInfo import from DynamicEnumRenderer - Add development warnings for schema parsing failures and malformed data - Document magic number in flat array preview (3x for Vec3 visual density) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
PreviousNext