Replaced HARBOR_USER and HARBOR_TOKEN with REGISTRY_USER and REGISTRY_TOKEN for Docker login. Updated image push path to include 'azaion' in the registry URL.
Add HARBOR_USER/HARBOR_TOKEN from Woodpecker secrets and a docker login
step before the existing build/push, so pipelines can push to the new
TLS-authenticated Harbor registry.
Pipeline reads $REGISTRY_HOST from the Woodpecker global secret
'registry_host' instead of hardcoding 'localhost:5000'. The full
host:port lives in the secret, so Harbor migration (AZ-205) becomes
one secret edit rather than editing every submodule pipeline.
Made-with: Cursor
- Enhanced CI configuration to streamline build processes.
- Updated documentation to clarify setup instructions and usage guidelines.
Made-with: Cursor
- Revised coding rules to emphasize readability, meaningful comments, and maintainability.
- Adjusted thresholds for test coverage on business logic from 80% to 75%, aligning with the new quality standards.
- Enhanced guidelines for handling skipped tests, introducing classifications for legitimate and illegitimate skips.
- Updated the requirements for test scenarios to ensure every test has a clear pass/fail criterion.
Made-with: Cursor
- Added a new guideline to never suppress errors silently in coding rules.
- Introduced specifications for command files, including markdown format and kebab-case filenames.
- Updated Git workflow to require explicit user permission before pushing or merging changes.
- Adjusted Woodpecker CI configuration to trigger on push events.
Made-with: Cursor
- Changed current step from 8 (New Task) to 2 (Test Spec) and updated sub_step to Phase 3 (Test Data Validation Gate).
- Added a rollback note detailing the reason for reverting to step 2 due to missing data in expected result CSV files, impacting E2E test verification.
Made-with: Cursor
- Deleted the `.woodpecker.yml` file, which contained the CI configuration for multi-platform builds targeting ARM64 and AMD64 platforms.
- This change simplifies the project by removing obsolete CI settings that are no longer in use.
Made-with: Cursor
- Introduced a matrix configuration to support building for both ARM64 and AMD64 platforms.
- Updated the Dockerfile reference to be dynamic based on the selected platform.
- Modified tag formatting for Docker images to include platform-specific tags, improving clarity in versioning.
Made-with: Cursor
- Updated Docker configurations for Jetson deployment, including new image specifications in `docker-compose` files.
- Improved `Dockerfile.jetson` with a newer JetPack base image and additional dependencies.
- Streamlined model handling in the inference module, enhancing performance and error management.
- Cleaned up project structure by removing obsolete scripts and improving resource management.
Made-with: Cursor
- Added image specifications for services in `docker-compose.demo-jetson.yml` and `docker-compose.jetson.yml` to streamline deployment.
- Updated `Dockerfile.gpu` to use the development version of the CUDA runtime for enhanced compatibility.
- Modified `Dockerfile.jetson` to switch to a newer JetPack base image and adjusted the requirements file to include additional dependencies for improved functionality.
- Removed obsolete deployment scripts and calibration cache generation script to clean up the project structure.
Made-with: Cursor
- Updated the autopilot state to reflect the current task status as in progress.
- Refactored the inference module to streamline model downloading and conversion processes, replacing the download_model method with a more efficient load_source method.
- Introduced asynchronous model building in the inference module to enhance performance during model conversion.
- Enhanced the engine factory to include a new method for building and caching models, improving error handling and logging during the upload process.
- Added calibration cache handling in the Jetson TensorRT engine for better resource management.
Made-with: Cursor
- Added a new Cython extension for the engine factory to the setup configuration.
- Updated the inference module to include additional logging for video batch processing and annotation callbacks.
- Refactored test cases to standardize the detection endpoint responses and include channel IDs in headers for better event handling.
- Updated the detection image endpoint to require a channel ID for event streaming.
- Introduced a new endpoint for streaming detection events, allowing clients to receive real-time updates.
- Enhanced the internal buffering mechanism for detection events to manage multiple channels.
- Refactored the inference module to support the new event handling structure.
Made-with: Cursor
- Added Jetson-specific deployment instructions to `deploy_scripts.md`, detailing prerequisites and service management.
- Updated `deploy_status_report.md` to reflect the completion of the AZ-180 cycle and the readiness of Jetson support.
- Removed outdated task documentation for Jetson Orin Nano support from the todo list.
Made-with: Cursor
In TensorRT 10.x, INT8 conversion requires FP16 to be set as a fallback for
network layers (e.g. normalization ops in detection models) that have no INT8
kernel implementation. Without FP16, build_serialized_network can return None
on Jetson for YOLO-type models. INT8 flag is still the primary precision;
FP16 is only the layer-level fallback within the same engine.
Made-with: Cursor
Tests expecting file storage (image/video write) failed because JWT_SECRET was
not set in the test environment, causing require_auth to return "" (falsy),
skipping the storage block. Both tests now patch main.JWT_SECRET and use a
properly signed JWT.
Made-with: Cursor
- Dockerfile.jetson: JetPack 6.x L4T base image (aarch64), TensorRT and PyCUDA from apt
- requirements-jetson.txt: derived from requirements.txt, no pip tensorrt/pycuda
- docker-compose.jetson.yml: runtime: nvidia for NVIDIA Container Runtime
- tensorrt_engine.pyx: convert_from_source accepts optional calib_cache_path; INT8 used when cache present, FP16 fallback; get_engine_filename encodes precision suffix to avoid engine cache confusion
- inference.pyx: init_ai tries INT8 engine then FP16 on lookup; downloads calibration cache before conversion thread; passes cache path through to convert_from_source
- constants_inf: add INT8_CALIB_CACHE_FILE constant
- Unit tests for AC-3 (INT8 flag set when cache provided) and AC-4 (FP16 when no cache)
Made-with: Cursor
- Pin all deps; h11==0.16.0 (CVE-2025-43859), python-multipart>=1.3.1 (CVE-2026-28356), PyJWT==2.12.1
- Add HMAC JWT verification (require_auth FastAPI dependency, JWT_SECRET-gated)
- Fix TokenManager._refresh() to use ADMIN_API_URL instead of ANNOTATIONS_URL
- Rename POST /detect → POST /detect/image (image-only, rejects video files)
- Replace global SSE stream with per-job SSE: GET /detect/{media_id} with event replay buffer
- Apply require_auth to all 4 protected endpoints
- Fix on_annotation/on_status closure to use mutable current_id for correct post-upload event routing
- Add non-root appuser to Dockerfile and Dockerfile.gpu
- Add JWT_SECRET to e2e/docker-compose.test.yml and run-tests.sh
- Update all e2e tests and unit tests for new endpoints and HMAC token signing
- 64/64 tests pass
Made-with: Cursor
- Update autopilot state to step 14 (Deploy) with status in progress.
- Mark step 12 (Security Audit) and step 13 (Performance Test) as skipped due to previous cycle completion.
- Update deployment status report date to 2026-04-01 and add notes on the implementation and testing of the `POST /detect/video` endpoint.
- Emphasize the need to address security findings before production deployment.
Made-with: Cursor
- Add tests/test_az178_realvideo_streaming.py: integration test that validates
frame decoding begins while upload is still in progress using a real video fixture
- Add conftest.py: pytest plugin for per-test duration reporting
- Update e2e tests (async_sse, performance, security, streaming_video_upload, video)
and run-tests.sh for updated test suite
- Move AZ-178 task to done/; add data/ to .gitignore (StreamingBuffer temp files)
- Update autopilot state to step 12 (Security Audit) for new feature cycle
Made-with: Cursor
- Added `/detect/video` endpoint for true streaming video detection, allowing inference to start as upload bytes arrive.
- Introduced `run_detect_video_stream` method in the inference module to handle video processing from a file-like object.
- Updated media hashing to include a new function for computing hashes directly from files with minimal I/O.
- Enhanced documentation to reflect changes in video processing and API behavior.
Made-with: Cursor