mirror of
https://github.com/azaion/ui.git
synced 2026-06-22 02:31:10 +00:00
[AZ-447] autodev Steps 1-4 baseline: docs, tests, refactor specs
Captures the full output of autodev existing-code Phase A through Step 4 (Code Testability Revision) for the Azaion UI workspace: - Step 1 Document: _docs/02_document/ (FINAL_report, architecture, glossary, components/, modules/, diagrams/, system-flows, module-layout) plus _docs/00_problem/ + _docs/01_solution/ + _docs/legacy/ + _docs/how_to_test + README. - Step 2 Architecture Baseline: architecture_compliance_baseline.md. - Step 3 Test Spec: _docs/02_document/tests/ (environment, test-data, blackbox/performance/resilience/security/ resource-limit tests, traceability-matrix), enum_spec_snapshot, expected_results/results_report.md (98 rows), plus the run-tests.sh + run-performance-tests.sh runners. - Step 4 Code Testability Revision: 01-testability-refactoring/ run dir (list-of-changes C01-C07, deferred_to_refactor, analysis/research_findings + refactoring_roadmap) and the 7 child task specs AZ-448..AZ-454 under _docs/02_tasks/todo/ plus _dependencies_table.md. - _docs/_autodev_state.md pins the cursor at Step 4 / refactor Phase 4 entry so /autodev resumes cleanly. Epic AZ-447 (UI testability gates) tracks the 7 child tasks that will land in subsequent commits. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# Legacy Coverage Gaps — React UI vs WPF Era
|
||||
|
||||
> Output of the autodev Step 2 BLOCKING-gate cross-check (2026-05-10). Compares
|
||||
> the current React port (this repo) against the legacy WPF source preserved at
|
||||
> `/Users/obezdienie001/dev/azaion/suite/annotations-research/` (commit
|
||||
> `22529c2`, the last commit before the WPF→.NET-API "big refactoring"). The
|
||||
> source-of-truth narrative is `_docs/legacy/wpf-era.md`; this document lists
|
||||
> the **delta** — features that exist in the WPF source but are not yet present
|
||||
> (or are broken) in the React port.
|
||||
>
|
||||
> Each gap is owned by one component. Per-component gap tables live in the
|
||||
> respective `_docs/02_document/components/<NN>_<name>/description.md` §6b
|
||||
> sections. This document is the *single-page rollup* for review.
|
||||
>
|
||||
> **What this document is NOT**: it does not re-litigate features that
|
||||
> `_docs/legacy/wpf-era.md §11` declares "intentionally NOT being ported"
|
||||
> (DI host, LibVLCSharp, ZeroMQ, the Azaion.LoaderUI handoff, the binary-split
|
||||
> key-fragment dance, the Cython sidecars). Those gaps are by design.
|
||||
|
||||
## Coverage matrix
|
||||
|
||||
| WPF concept (where it lived) | Status in React port | Owner component |
|
||||
|------------------------------|----------------------|-----------------|
|
||||
| Module switcher (Suite + IAzaionModule + SVG icon) | **Covered** by `Header.tsx` top nav | `03_shared-ui` |
|
||||
| Dark navy/blue + orange-accent color scheme | **Covered** by `index.css` `az-*` tokens | `03_shared-ui` (theme) |
|
||||
| Login → encrypted-creds handoff | **Intentionally not ported** (browser uses JWT) | `04_login` |
|
||||
| Detection-class strip + PhotoMode + 1–9 shortcut | **Covered** | `03_shared-ui/DetectionClasses` + `11_class-colors` |
|
||||
| `yoloId = classId + photoModeOffset` | **Covered** in `11_class-colors` | `11_class-colors` |
|
||||
| Annotator: bbox draw / 8-handle resize | **Covered** | `06_annotations/CanvasEditor` |
|
||||
| Annotator: Ctrl-multi-select / Ctrl-wheel zoom / Ctrl-drag pan | **Partially missing** (multi-select unverified, pan/zoom flagged) | `06_annotations/CanvasEditor` |
|
||||
| Annotator: time-windowed overlay (50 ms before / 150 ms after) | **Wrong** (symmetric ±200 ms, finding #6) | `06_annotations/CanvasEditor` |
|
||||
| Annotator: video play/pause + frame-by-frame stepping | **Partially covered** (controls exist; per-frame counts unverified vs FPS) | `06_annotations/VideoPlayer` |
|
||||
| Annotator: keyboard shortcuts `[Space]` / `[Left]` / `[Right]` / `[Enter]` / `[Del]` / `[X]` / `[M]` / `[R]` / `[K]` | **Missing** | `06_annotations` (multiple modules) |
|
||||
| Annotator: volume slider | **Missing** | `06_annotations/VideoPlayer` |
|
||||
| Annotator: status bar — clock + help text + status text | **Missing** | `06_annotations` (or shell-level toast) |
|
||||
| Annotator: AI-Detect button + modal progress | **Partial** — sync-image works; video AI-Detect is fire-and-forget, no SSE subscription, no progress UI (findings #21–23, #30) | `06_annotations/AnnotationsSidebar` |
|
||||
| Annotator: **Sound Detections** feature ("show objects from audio analysis") | **Intentionally not ported** (Step 4.5 decision 2026-05-10) | — |
|
||||
| Annotator: **Drone Maintenance** feature ("Аналіз стану БПЛА") | **Intentionally not ported** (Step 4.5 decision 2026-05-10) | — |
|
||||
| Annotator: camera-config side panel (altitude / focal / sensor → GSD) | **Missing** (finding #17) | `06_annotations/AnnotationsPage` |
|
||||
| Annotator: GPS panel toggle below canvas | **Moved** to `05_flights` GPS-Denied sub-page (per user direction) | `05_flights` |
|
||||
| Annotator: affiliation icons + combat-readiness indicator on bbox label | **Missing** (findings #14–15; `AFFILIATION_COLORS` exists but is dead code) | `06_annotations/CanvasEditor` |
|
||||
| Annotator: annotation-row gradient (alpha ∝ confidence; empty bg `#40DDDDDD`) | **Wrong** — alpha caps at 16 % (finding #9, hex/decimal mistake) | `06_annotations/AnnotationsSidebar` |
|
||||
| Annotator: media-list filter / search | **Covered** (debounced) | `06_annotations/MediaList` |
|
||||
| Annotator: media-list `blob:` previews | **Bug** (#25 — local previews ignore filter) | `06_annotations/MediaList` |
|
||||
| Annotator: virtualised media list | **Missing** (finding #26) | `06_annotations/MediaList` |
|
||||
| Annotator: "open folder" file menu | **Intentionally not ported** (web upload via dropzone) | `06_annotations` |
|
||||
| Annotator: help window with 6 quality rules | **Covered** (`HelpModal`) but rules are hardcoded in source — Step 4 i18n | `03_shared-ui/HelpModal` |
|
||||
| Dataset: thumbnail grid + filter | **Covered** but **not virtualised** (finding #3) | `07_dataset` |
|
||||
| Dataset: 3-tab layout (Annotations / Editor / **Class Distribution**) | **Implemented** (Step 4 correction — `DatasetPage.tsx:151` has all three tabs; `loadDistribution()` calls `/api/annotations/dataset/class-distribution`. Verify bar tint matches `classColors`.) | `07_dataset` |
|
||||
| Dataset: "Show only annotations with objects" checkbox | **Implemented** (Step 4 correction — `DatasetPage.tsx:110-114`, state `objectsOnly`) | `07_dataset` |
|
||||
| Dataset: Validate button (bulk validate to `Validated` status) | **Implemented** (Step 4 correction — `DatasetPage.tsx:142-146` button when `selectedIds.size > 0`); `[V]` keyboard shortcut still missing. | `07_dataset` |
|
||||
| Dataset: Refresh thumbnails button + progress | **Missing** (finding #2) | `07_dataset` |
|
||||
| Dataset: `SelectedAnnotationName` + `StatusText` status-bar slots | **Missing** | `07_dataset` |
|
||||
| Dataset: seed annotation 8 px border highlight (`IsSeed=true`) | **Missing** | `07_dataset` |
|
||||
| Dataset: keyboard shortcuts (1–9, Enter, Del, X, V, arrows, PgUp/PgDn, Esc) | **Missing** (finding #1) | `07_dataset` |
|
||||
| Dataset: inline editor saves | **Broken** (finding #4) | `07_dataset` + `06_annotations/CanvasEditor` |
|
||||
| Cross-cutting: resizable panel widths persisted per user | **Not persisted** (finding #11) | `00_foundation/useResizablePanel` + Settings backend |
|
||||
| Cross-cutting: Ukrainian + English localisation | **Covered** (`react-i18next` w/ `en.json` + `ua.json`) — surface area to verify against legacy `translations.json` (only 6 keys, but XAML hardcoded UA strings everywhere). | `00_foundation/i18n` |
|
||||
| Cross-cutting: confirmation dialogs (delete-media / delete-selected / delete-all / deactivate-user) | **Component covered** (`ConfirmDialog`); some destructive actions still bypass it (`08_admin` `handleDeleteClass` finding) | `03_shared-ui/ConfirmDialog` + `08_admin` |
|
||||
|
||||
## Decisions taken at Step 4.5 (Architecture Vision, 2026-05-10)
|
||||
|
||||
The Step 4.5 user review resolved the product-level decisions that were pending here. Summary:
|
||||
|
||||
1. ~~Sound Detections feature~~ — **Dropped** (intentionally not ported).
|
||||
2. ~~Drone Maintenance feature~~ — **Dropped** (intentionally not ported).
|
||||
3. ~~Class Distribution chart~~ — already ported (Step 4 correction).
|
||||
4. **Status bar with clock + help-text-blink pattern** — still open, deferred to a Phase B cycle (low priority — replace with toast unless a downstream cycle picks it up explicitly).
|
||||
5. **Seed annotation concept** (`IsSeed=true` highlight) — still open, deferred to a Phase B cycle (need to verify whether the modern API still exposes `isSeed`).
|
||||
6. **Camera config persistence** — still open, deferred to the Phase B cycle that ports the camera-config side panel from `mission-planner/`.
|
||||
7. **Resizable panel width persistence** — **Persist** as part of `UserSettings` (Step 4 fix; principle P11 in `architecture.md` Architecture Vision).
|
||||
|
||||
Additional Step 4.5 resolutions not from this rollup but recorded for traceability:
|
||||
|
||||
- **Spec is source of truth for numeric enums** with inline comments per value (principle P9).
|
||||
- **OpenWeatherMap API key** moves to `.env` (principle P10; Step 4 fix candidate).
|
||||
- **Admin can edit detection classes** — re-introduce `PATCH /api/admin/classes/{id}` and the in-place edit form (principle P12).
|
||||
- **Mission-planner convergence** — flag at Step 2 (Architecture Baseline), spec at Step 3 (Test Spec), port across Phase B cycles, delete tree in final cycle (recorded in `architecture.md` Architecture Vision).
|
||||
|
||||
## Where to find the per-component detail
|
||||
|
||||
- `_docs/02_document/components/06_annotations/description.md` §6b — Annotations gap table (~17 entries)
|
||||
- `_docs/02_document/components/07_dataset/description.md` §6b — Dataset gap table (~12 entries)
|
||||
- Other components (`00_foundation`, `01_api-transport`, `02_auth`, `03_shared-ui`, `04_login`, `05_flights`, `08_admin`, `09_settings`, `10_app-shell`, `11_class-colors`) have no WPF-source delta — either no WPF analog (most), or already covered (Header / module switcher / DetectionClasses / 11_class-colors) per `_docs/legacy/wpf-era.md §10`.
|
||||
Reference in New Issue
Block a user