- Recover regular multipart fields when the file part is not exposed through request.files.
- Preserve expires and note values for browser uploads that need body-based file recovery.
- Add parser coverage for file parts without filenames and recovered expiry fields.
- Extend upload route tests to assert recovered uploads keep expiry metadata.
- Bump NanoShare to 1.27.3.
- 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.
- Update h2 from 4.3.0 to 4.4.0 in uv.lock.
- Refresh the locked source distribution metadata.
- Refresh the locked wheel metadata for the new release.
- Bump certifi from 2026.6.17 to 2026.7.22 in uv.lock.
- Refresh the source distribution URL and checksum.
- Refresh the wheel URL and checksum.
- Leave untracked static assets out of this commit.
- Raise index and file-serving limits to 20 requests per minute.
- Keep hourly file-serving allowance at 500 requests.
- Increase the index hourly allowance to 500 requests.
- Update the my_helpers submodule pointer.
- Refresh uv.lock for current dependency releases.
- Update the uv lockfile with the latest resolved dependency versions.
- Refresh security/auth-adjacent packages including cryptography, certifi, idna, and joserfc.
- Pull in current compatibility fixes for aiohappyeyeballs, yarl, werkzeug, wrapt, packaging, click, and propcache.
- 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.