Files
ui/_docs/02_document/01_legacy_coverage_gaps.md
Oleksandr Bezdieniezhnykh 510df68bcf [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>
2026-05-11 00:38:49 +03:00

8.5 KiB
Raw Permalink Blame History

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 + 19 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 #2123, #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 #1415; 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 (19, 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 featureDropped (intentionally not ported).
  2. Drone Maintenance featureDropped (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 persistencePersist 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.