Skip to content

Tags: zincware/ZnDraw

Tags

v0.7.0a8

Toggle v0.7.0a8's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
[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>

v0.7.0a7

Toggle v0.7.0a7's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
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>

v0.7.0a6

Toggle v0.7.0a6's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
[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>

v0.7.0a5

Toggle v0.7.0a5's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
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>

v0.7.0a4

Toggle v0.7.0a4's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
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>

v0.7.0a3

Toggle v0.7.0a3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
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>

v0.7.0a2

Toggle v0.7.0a2's commit message
[pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

v0.7.0a1

Toggle v0.7.0a1's commit message
[pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

v0.6.0

Toggle v0.6.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
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>

v0.6.0a22

Toggle v0.6.0a22's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
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>