[AZ-185][AZ-186] Batch 2

Made-with: Cursor
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-04-15 07:32:37 +03:00
parent d244799f02
commit 9a0248af72
18 changed files with 1857 additions and 26 deletions
@@ -0,0 +1,41 @@
# Code Review Report
**Batch**: 2 (AZ-185, AZ-186)
**Date**: 2026-04-15
**Verdict**: PASS_WITH_WARNINGS
## Spec Compliance
All 11 acceptance criteria across 2 tasks are satisfied with corresponding tests.
| Task | ACs | Covered | Status |
|------|-----|---------|--------|
| AZ-185 Update Manager | 6 | 6/6 | All pass (10 tests) |
| AZ-186 CI/CD Artifact Publish | 5 | 5/5 | All pass (8 tests) |
## Findings
| # | Severity | Category | File:Line | Title |
|---|----------|----------|-----------|-------|
| 1 | Low | Style | scripts/publish_artifact.py | Union syntax fixed |
| 2 | Low | Maintainability | src/main.py:15 | Deprecated on_event startup |
### Finding Details
**F1: Union syntax fixed** (Low / Style)
- Location: `scripts/publish_artifact.py:172,182`
- Description: Used `list[str] | None` syntax, fixed to `Optional[List[str]]` for consistency
- Status: Fixed
**F2: Deprecated on_event startup** (Low / Maintainability)
- Location: `src/main.py:15`
- Description: `@app.on_event("startup")` is deprecated in modern FastAPI in favor of lifespan context manager
- Suggestion: Migrate to `@asynccontextmanager lifespan` when upgrading FastAPI — not blocking
- Task: AZ-185
## Cross-Task Consistency
- AZ-185 uses AZ-184's `ResumableDownloadManager` correctly via its public API
- AZ-186 encrypt format (IV + AES-CBC + PKCS7) is compatible with AZ-184's `decrypt_cbc_file()`
- AZ-186's `encryption_key` is hex-encoded; AZ-185's `_aes_key_from_encryption_field` handles hex decoding
- Self-update ordering (loader last) correctly implemented in AZ-185