- Treat an existing multipart file field as upload content even when FileStorage has an empty filename.
- Keep upload telemetry aligned with file field presence instead of FileStorage truthiness.
- Add regression coverage for frontend-style uploads that provide a file field without a filename.
- Bump NanoShare to 1.27.2 and refresh the staged lockfile.
- Resolve quart-flask-patch from the private Gitea PyPI index
- Require quart-flask-patch >= 0.3.1, the version published there
- Drop the PyPI 0.3.0 build that crashed the server on Python 3.14
- The Gitea build declares requires-python >=3.13,<3.15
- Relock uv.lock so sdist and wheel point at the Gitea URLs
- Bump NanoShare to 1.27.1
Verified with uv lock --check, uv sync --frozen and an import of
quart_flask_patch reporting 0.3.1. Test suite stays at 141 passed.
- Drop the quart-session git submodule and its uv workspace member entry
- Resolve quart-session from the private Gitea PyPI index instead
- Pin the new index as explicit so only quart-session is fetched from it
- Require quart-session >= 3.0.2, the version published in the registry
- Raise requires-python to >=3.14 and set .python-version to 3.14
- Switch the image base to ghcr.io/astral-sh/uv:python3.14-trixie-slim
- Relax runtime pins from == to >= so uv.lock stays the single source
- Relock all 50 packages for CPython 3.14, dropping 3.13-only markers
- Delete the stale hand-maintained requirements.txt, unused by the build
Verified with uv lock --check, uv sync --frozen and a docker build; the
container reports CPython 3.14.7 and imports quart_session and convex.
Test suite is unchanged at 131 passed, 4 pre-existing wide_event failures.
- Add structured URL codec with compact alphabets and dictionary support.
- Add public decode, redirect, and QR endpoints for composed links.
- Add authenticated encode API and link composer UI.
- Generate PNG QR codes via qrcode with Pillow support.
- Register the new blueprint and navigation entry.
- Cover public decode, auth gating, redirect URL parsing, and QR output.
- Bump NanoShare to 1.27.0 and lock new dependencies.
- Disable the Quart response timeout for authenticated file event streams.
- Send SSE keepalives more often to avoid idle proxy disconnects.
- Treat remote stream interruptions as reconnectable disconnects in watch output.
- Bump NanoShare to 1.26.0 and the standalone CLI to 0.4.1.
- Add a private SSE endpoint that emits file change events for authenticated clients.
- Replace the watch sleep loop with watchdog local file events and remote SSE triggers.
- Debounce local event bursts and keep watch running after transient sync failures.
- Add watchdog as a standalone CLI dependency and cover watch behavior in tests.
- Bump NanoShare to 1.25.0 and the standalone CLI to 0.4.0.
- Leave sync and watch notes empty by default instead of writing placeholder text.
- Preserve existing remote notes when moving or adopting files without --note.
- Detect tracked local moves by SHA-256 and update remote metadata safely.
- Skip files that vanish during watch scans instead of aborting the sync cycle.
- Bump NanoShare to 1.24.0 and the standalone CLI to 0.3.0.
- Store synced folder locations in file_path instead of embedding them in file names.
- Add ignore rules from .nanoshareignore and repeatable sync --ignore flags.
- Adopt existing remote files only after SHA-256 verification.
- Move adopted remotes with metadata updates instead of uploading duplicates.
- Bump NanoShare to 1.23.0 and the standalone CLI to 0.2.0.
- Declare the NanoShare client package for Hatch wheel builds.
- Ensure uv tool install can build and install the CLI from cli/.
- Bump the server package version to 1.22.0 for the CLI release.
- Add the servicelink submodule and register POST /rpc for node-to-node file operations.
- Require bearer tokens with the mesh scope and apply rate/body-size limits to RPC calls.
- Map database connectivity failures to the existing 504 database error flow, with JSON responses for API routes.
- Cover the new RPC handlers and database error handling with focused pytest tests.
- Bump the NanoShare package version to 1.21.0.
- Bump the application version from 0.1.0 to 1.20.0 using the project version scheme.
- Trim pyproject dependencies to direct root packages only and let uv.lock keep the resolved transitive set.
- Update the quart_common submodule to include the latest wide-event session context handling.
- Adjust NanoShare wide-event middleware expectations for the new session payload shape.
- Register quart_common wide-event logging during app setup so every HTTP request emits one canonical structured event.
- Replace the inline security middleware with reusable quart_common security middleware wiring and move skip path configuration into app constants.
- Add NanoShare-specific wide-event context for health checks, auth/error handlers, file list/edit/delete/serve flows and upload outcomes.
- Rename runtime logging/project metadata from simple-picoshare to nanoshare where it is emitted in service context.
- Update my_helpers and quart_common submodules for Convex/wide-event integration and reusable security middleware support.
- Add NanoShare middleware tests covering safe user context, client IP enrichment, missing Convex handling and Convex security lookup failures.