32 KiB
Development Status
Flutter-Based Military Unit Task Organization (UTO) Manager
U.S. Army 2026 Doctrine — Cross-Platform Enterprise System
How to use this document: Update task statuses as work progresses. Use the status legend below. Record blockers, notes, and completion dates in the Notes column. This document is the single source of truth for sprint tracking and stakeholder reporting.
Status Legend
| Symbol | Status | Meaning |
|---|---|---|
| ⬜ | NOT STARTED |
Work has not begun |
| 🔵 | IN PROGRESS |
Actively being worked on |
| ✅ | COMPLETE |
Done and acceptance criteria verified |
| ⚠️ | BLOCKED |
Cannot proceed; blocker documented in Notes |
| 🔁 | IN REVIEW |
Implementation complete; pending review/testing |
| ⏭️ | DEFERRED |
Intentionally postponed to a later phase |
Overall Project Progress
| Phase | Title | Weeks | Status | % Complete |
|---|---|---|---|---|
| Phase 1 | Architecture & Data Foundations | 1 – 4 | ⬜ NOT STARTED | 0% |
| Phase 2 | Canvas Graphics Engine & Gesture Subsystem | 5 – 9 | ⬜ NOT STARTED | 0% |
| Phase 3 | 2026 Doctrinal Templates & Symbology Engine | 10 – 14 | ⬜ NOT STARTED | 0% |
| Phase 4 | Persistence, Validation Rules, & Export Engine | 15 – 19 | ⬜ NOT STARTED | 0% |
| Phase 5 | Platform Optimization, Profiling, & Hardening | 20 – 24 | ⬜ NOT STARTED | 0% |
Overall Project Completion: 0%
Current Active Phase: —
Project Start Date: ___________
Target Completion Date: ___________
Phase 1: Architecture & Data Foundations
Weeks 1 – 4 | Status: ⬜ NOT STARTED
1.1 — Project Scaffolding & Clean Architecture Setup
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 1.1.1 | Initialize Flutter project with windows, web, android targets |
⬜ | ||||
| 1.1.2 | Establish clean architecture folder structure (domain/, application/, infrastructure/, presentation/) |
⬜ | ||||
| 1.1.3 | Configure flutter_lints and very_good_analysis lint rules |
⬜ | ||||
| 1.1.4 | Set up pubspec.yaml with initial dependency declarations |
⬜ | ||||
| 1.1.5 | Initialize Git repository with branch protection rules (main, develop, feature/*) |
⬜ |
1.1 Acceptance Criteria:
flutter run -d windowslaunches blank scaffold without errorsflutter run -d chromelaunches blank scaffold without errorsflutter run -d androidlaunches blank scaffold without errorsflutter analyzepasses with zero lint violations
1.2 — Core Domain Entity Definitions
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 1.2.1 | Define Echelon enum (Brigade → Team) |
⬜ | ||||
| 1.2.2 | Define DoctrinalBranch enum (Infantry, Medical, Fires, Signal, CyberEW, Aviation, Logistics, Engineer) |
⬜ | ||||
| 1.2.3 | Define AuthorizedRank enum (E1–E9, W1–W5, O1–O10) |
⬜ | ||||
| 1.2.4 | Define UnitNode entity with all required fields |
⬜ | ||||
| 1.2.5 | Define PositionSlot entity with all required fields |
⬜ | ||||
| 1.2.6 | Define PersonnelRecord entity with all required fields |
⬜ | ||||
| 1.2.7 | Define DutyMOS value object with MOS code validation |
⬜ | ||||
| 1.2.8 | Build Infantry & Maneuver position slot dictionary (11A, 11B, 15W) | ⬜ | ||||
| 1.2.9 | Build Medical position slot dictionary (68W) | ⬜ | ||||
| 1.2.10 | Build Field Artillery position slot dictionary (13F, 13D) | ⬜ | ||||
| 1.2.11 | Build Signal position slot dictionary (25H, 25B) | ⬜ | ||||
| 1.2.12 | Build Cyber/EW position slot dictionary (17E) | ⬜ | ||||
| 1.2.13 | Build Logistics position slot dictionary (92Y, 92A, 91B, 91A) | ⬜ | ||||
| 1.2.14 | Build Engineer position slot dictionary (12B) | ⬜ | ||||
| 1.2.15 | Implement UnitRepository abstract interface |
⬜ | ||||
| 1.2.16 | Implement PersonnelRepository abstract interface |
⬜ | ||||
| 1.2.17 | Write unit tests for all domain entity validation logic | ⬜ | ||||
| 1.2.18 | Create MOS dictionary JSON data file | ⬜ |
1.2 Acceptance Criteria:
- 100% unit test coverage on all domain entity validation logic
- MOS validation rejects invalid codes
- MOS validation accepts all defined specialties across all branches
1.3 — Database Schema & Infrastructure Layer
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 1.3.1 | Add drift package; configure for Windows/Android (SQLite) |
⬜ | ||||
| 1.3.2 | Configure drift_web for Web (IndexedDB) |
⬜ | ||||
| 1.3.3 | Define units Drift table schema |
⬜ | ||||
| 1.3.4 | Define position_slots Drift table schema |
⬜ | ||||
| 1.3.5 | Define personnel Drift table schema |
⬜ | ||||
| 1.3.6 | Define templates Drift table schema |
⬜ | ||||
| 1.3.7 | Implement DAOs for all four tables (CRUD operations) | ⬜ | ||||
| 1.3.8 | Configure database migrations framework (versioned migration files) | ⬜ | ||||
| 1.3.9 | Implement JsonTemplateCodec for unit tree serialization/deserialization |
⬜ | ||||
| 1.3.10 | Stub Protobuf schema definitions (.proto files) |
⬜ | ||||
| 1.3.11 | Write integration tests for all DAO operations | ⬜ |
1.3 Acceptance Criteria:
- Integration tests pass: CRUD on all four tables
- Database migrations run cleanly from version 1 → current
- JSON round-trip serialization produces identical domain objects
1.4 — CI/CD Pipeline Configuration
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 1.4.1 | Configure CI pipeline with flutter build windows target |
⬜ | ||||
| 1.4.2 | Configure CI pipeline with flutter build web --wasm target |
⬜ | ||||
| 1.4.3 | Configure CI pipeline with flutter build apk target |
⬜ | ||||
| 1.4.4 | Add flutter test and flutter analyze automated stages |
⬜ | ||||
| 1.4.5 | Configure build artifact upload (.exe, web/, .apk) |
⬜ | ||||
| 1.4.6 | Set up code coverage reporting (80% minimum threshold gate) | ⬜ |
1.4 Acceptance Criteria:
- All three platform builds succeed in CI without manual intervention
- Pull requests blocked on failing tests or lint violations
Phase 1 Exit Criteria
| Criterion | Status | Verified By | Date |
|---|---|---|---|
| Clean architecture folder structure established and enforced by linting | ⬜ | ||
| All domain entities defined with full unit test coverage | ⬜ | ||
| Drift database operational on Windows, Web, and Android | ⬜ | ||
| CI/CD pipeline passing on all three platform targets | ⬜ | ||
| MOS dictionary data file complete for all functional branches | ⬜ |
Phase 2: Canvas Graphics Engine & Gesture Subsystem
Weeks 5 – 9 | Status: ⬜ NOT STARTED
Dependency: Phase 1 must be complete before Phase 2 begins.
2.1 — CustomPainter Canvas Engine Foundation
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 2.1.1 | Implement UtoCanvasPainter extends CustomPainter with paint() rendering loop |
⬜ | ||||
| 2.1.2 | Implement shouldRepaint() with dirty-flag comparison |
⬜ | ||||
| 2.1.3 | Implement node rendering (drawRect, drawPath, drawParagraph) |
⬜ | ||||
| 2.1.4 | Implement parent-child connection line rendering | ⬜ | ||||
| 2.1.5 | Wrap painter in InteractiveViewer with TransformationController |
⬜ | ||||
| 2.1.6 | Implement viewport culling via inverse matrix transform (M⁻¹ × S) |
⬜ | ||||
| 2.1.7 | Define NodeRenderModel flat list data structure |
⬜ | ||||
| 2.1.8 | Benchmark: verify 60 FPS at 500 placeholder nodes on all three platforms | ⬜ |
2.1 Acceptance Criteria:
- 60 FPS maintained with 500 placeholder nodes on Windows
- 60 FPS maintained with 500 placeholder nodes on Web
- 60 FPS maintained with 500 placeholder nodes on Android
- Viewport culling demonstrably skips off-screen nodes (verified via paint call counters)
2.2 — Reingold-Tilford Tree Layout Algorithm
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 2.2.1 | Implement Reingold-Tilford algorithm in dedicated layout/ module |
⬜ | ||||
| 2.2.2 | Implement bottom-up subtree width calculation | ⬜ | ||||
| 2.2.3 | Implement (x, y) coordinate assignment per echelon level |
⬜ | ||||
| 2.2.4 | Enforce horizontal branch separation (Maneuver, Fires, Recon, Engineer, Sustainment) | ⬜ | ||||
| 2.2.5 | Enforce vertical echelon alignment (Brigade → Individual) | ⬜ | ||||
| 2.2.6 | Offload layout computation to background Dart Isolate | ⬜ | ||||
| 2.2.7 | Implement LayoutResult message passing (Isolate → main thread) |
⬜ | ||||
| 2.2.8 | Trigger layout recalculation on: node add, remove, re-parent, template load | ⬜ |
2.2 Acceptance Criteria:
- Layout correctly positions a full BCT (500+ nodes) without visual overlap
- Layout computation completes in < 100ms for a full BCT on Windows
- UI thread remains unblocked during layout recalculation (verified via DevTools)
2.3 — Quadtree Spatial Index
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 2.3.1 | Implement Quadtree<NodeId> in pure Dart |
⬜ | ||||
| 2.3.2 | Implement node bounding box insert on layout completion | ⬜ | ||||
| 2.3.3 | Implement nearest-neighbor proximity query | ⬜ | ||||
| 2.3.4 | Implement index update on node position change (drag) | ⬜ | ||||
| 2.3.5 | Implement entry removal on node deletion | ⬜ | ||||
| 2.3.6 | Integrate Quadtree with canvas hit-testing pipeline | ⬜ | ||||
| 2.3.7 | Implement screen-space → canvas-space coordinate transform via M⁻¹ |
⬜ | ||||
| 2.3.8 | Write unit tests covering edge cases (overlapping bounds, boundary nodes) | ⬜ |
2.3 Acceptance Criteria:
- Hit-testing correctly identifies nodes in a 1,000-node tree with < 1ms query time
- No false positives or missed hits in unit tests
2.4 — Cross-Platform Drag-and-Drop State Machine
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 2.4.1 | Implement Idle state: canvas responds to pan/zoom only |
⬜ | ||||
| 2.4.2 | Implement DragInitiated state: node selected, subtree isolated to overlay |
⬜ | ||||
| 2.4.3 | Implement DragInProgress state: Quadtree proximity queries + validation highlights |
⬜ | ||||
| 2.4.4 | Implement DropExecuted state: re-parenting command, DB update, layout recalc |
⬜ | ||||
| 2.4.5 | Implement desktop gesture threshold: drag after 2-pixel mouse movement | ⬜ | ||||
| 2.4.6 | Implement mobile gesture threshold: 200ms long-press + haptic feedback | ⬜ | ||||
| 2.4.7 | Integrate super_drag_and_drop package for cross-component payload integrity |
⬜ | ||||
| 2.4.8 | Implement DragOverlayPainter as isolated RepaintBoundary layer |
⬜ | ||||
| 2.4.9 | Implement AttachNodeCommand as undoable command object |
⬜ | ||||
| 2.4.10 | Implement DetachNodeCommand as undoable command object |
⬜ | ||||
| 2.4.11 | Implement undo/redo stack for node re-parenting operations | ⬜ | ||||
| 2.4.12 | Implement green highlight for valid drop targets | ⬜ | ||||
| 2.4.13 | Implement red indicator for invalid drop targets | ⬜ |
2.4 Acceptance Criteria:
- Dragging Rifle Squad to Infantry Platoon shows green highlight and completes re-parenting
- Dragging Fire Team to Brigade HQ shows red invalid indicator
- 200ms long-press threshold prevents accidental drags on touch devices
- Undo (Ctrl+Z / gesture) correctly reverses re-parenting operations
- Drag overlay does not trigger full canvas repaint (verified via DevTools)
Phase 2 Exit Criteria
| Criterion | Status | Verified By | Date |
|---|---|---|---|
| CustomPainter canvas engine rendering nodes and connection lines with viewport culling | ⬜ | ||
| Reingold-Tilford layout algorithm operational in background Dart Isolate | ⬜ | ||
| Quadtree spatial index integrated with hit-testing pipeline | ⬜ | ||
| Cross-platform drag-and-drop state machine functional on Windows and Android | ⬜ | ||
| 60 FPS maintained at target node counts on all three platforms | ⬜ |
Phase 3: 2026 Doctrinal Templates & Symbology Engine
Weeks 10 – 14 | Status: ⬜ NOT STARTED
Dependency: Phase 2 must be complete before Phase 3 begins.
3.1 — Doctrinal Template Library
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 3.1.1 | Implement JSON-driven runtime template loader | ⬜ | ||||
| 3.1.2 | Build MBCT JSON template (full brigade structure) | ⬜ | ||||
| 3.1.3 | Build SBCT JSON template (full brigade structure) | ⬜ | ||||
| 3.1.4 | Build ABCT JSON template (full brigade structure) | ⬜ | ||||
| 3.1.5 | Build CAB-Heavy JSON template | ⬜ | ||||
| 3.1.6 | Build CAB-Light JSON template | ⬜ | ||||
| 3.1.7 | Implement TemplateInstantiator service (JSON → UnitNode tree → Drift DB) |
⬜ | ||||
| 3.1.8 | Implement runtime template reload mechanism (no binary recompilation required) | ⬜ | ||||
| 3.1.9 | Write integration tests for TemplateInstantiator |
⬜ |
3.1 Acceptance Criteria:
- MBCT template instantiation creates correct unit/slot/personnel counts in DB
- SBCT template instantiation creates correct unit/slot/personnel counts in DB
- ABCT template instantiation creates correct unit/slot/personnel counts in DB
- CAB-Heavy template instantiation creates correct unit/slot/personnel counts in DB
- CAB-Light template instantiation creates correct unit/slot/personnel counts in DB
- Template instantiation completes in < 2 seconds for a full BCT
- Updated JSON template files reload correctly without app restart
3.2 — MIL-STD-2525D Symbology Engine
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 3.2.1 | Integrate milsymbol.js via dart:js_interop for Web target |
⬜ | ||||
| 3.2.2 | Implement SIDC → milsymbol.js → SVG path pipeline for Web | ⬜ | ||||
| 3.2.3 | Bundle SVG assets: affiliation frames (Friendly, Hostile, Neutral, Unknown) | ⬜ | ||||
| 3.2.4 | Bundle SVG assets: function icons (infantry, medical, signal, artillery, engineer, aviation, EW, UAV, logistics) | ⬜ | ||||
| 3.2.5 | Bundle SVG assets: echelon modifiers (Team through Division) | ⬜ | ||||
| 3.2.6 | Implement SVG path parsing via path_drawing into immutable Path objects at app launch |
⬜ | ||||
| 3.2.7 | Implement thread-safe LRU cache for parsed Path objects (indexed by SIDC) |
⬜ | ||||
| 3.2.8 | Implement SidcResolver mapping (DoctrinalBranch, Echelon, Affiliation) → 15-digit SIDC |
⬜ | ||||
| 3.2.9 | Implement TacticalSymbolPainter: Frame + Icon + Echelon Modifier + Text Designator |
⬜ | ||||
| 3.2.10 | Integrate TacticalSymbolPainter into main UtoCanvasPainter node rendering loop |
⬜ |
3.2 Acceptance Criteria:
- All defined branch/echelon combinations render correct MIL-STD-2525D symbols
- Symbol cache hit rate > 95% during normal canvas rendering
- Symbol rendering adds < 2ms overhead per frame on Android
- Web target renders symbols via milsymbol.js without visible quality difference from native
3.3 — Three-Pane UI Shell
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 3.3.1 | Implement application header (Echelon Selector, Doctrinal Mode, Export Tools) | ⬜ | ||||
| 3.3.2 | Implement left panel: collapsible template palette sidebar | ⬜ | ||||
| 3.3.3 | Implement left panel: template drag sources (MBCT, SBCT, ABCT, CAB, echelon blocks, duty slots) | ⬜ | ||||
| 3.3.4 | Implement central canvas workspace integration (canvas + InteractiveViewer) | ⬜ | ||||
| 3.3.5 | Implement right panel: context-sensitive node inspector | ⬜ | ||||
| 3.3.6 | Implement right panel: unit ID, MOS, personnel search, weapon assignment, readiness status | ⬜ | ||||
| 3.3.7 | Implement status bar (scale factor, active node count, MTOE validation status) | ⬜ | ||||
| 3.3.8 | Implement keyboard shortcuts: Ctrl+Z, Ctrl+Y, Ctrl+F, Ctrl+D, Ctrl+S |
⬜ | ||||
| 3.3.9 | Implement mouse-wheel pan/zoom | ⬜ | ||||
| 3.3.10 | Implement multi-node box selection | ⬜ | ||||
| 3.3.11 | Implement right-click context menus (desktop) | ⬜ | ||||
| 3.3.12 | Implement Android navigation drawer (replaces left panel) | ⬜ | ||||
| 3.3.13 | Implement Android bottom sheet inspector (replaces right panel) | ⬜ | ||||
| 3.3.14 | Implement tap-and-hold radial menus (Android, replaces right-click) | ⬜ | ||||
| 3.3.15 | Verify all touch targets ≥ 48×48 dp on Android | ⬜ |
3.3 Acceptance Criteria:
- Three-pane layout renders correctly at 1920×1080 on Windows
- Three-pane layout renders correctly at 2560×1440 on Windows
- Mobile layout correctly switches to drawer/bottom-sheet on Android
- All keyboard shortcuts function correctly on Windows and Web
- Touch targets meet 48×48 dp minimum on Android
Phase 3 Exit Criteria
| Criterion | Status | Verified By | Date |
|---|---|---|---|
| All five BCT doctrinal templates instantiable from JSON | ⬜ | ||
| MIL-STD-2525D symbology rendering on all three platforms | ⬜ | ||
| Three-pane UI shell functional on desktop and adaptive on Android | ⬜ | ||
| Runtime template reload mechanism operational | ⬜ |
Phase 4: Persistence, Validation Rules, & Export Engine
Weeks 15 – 19 | Status: ⬜ NOT STARTED
Dependency: Phase 3 must be complete before Phase 4 begins.
4.1 — Full Persistence Integration & Offline-First Architecture
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 4.1.1 | Complete Drift repository implementations for all four tables | ⬜ | ||||
| 4.1.2 | Implement reactive Drift watchAll() streams feeding BLoC state |
⬜ | ||||
| 4.1.3 | Implement CommandEventStore with local offline queue |
⬜ | ||||
| 4.1.4 | Implement AttachNodeEvent command event type |
⬜ | ||||
| 4.1.5 | Implement DetachNodeEvent command event type |
⬜ | ||||
| 4.1.6 | Implement AssignPersonnelEvent command event type |
⬜ | ||||
| 4.1.7 | Implement UnassignPersonnelEvent command event type |
⬜ | ||||
| 4.1.8 | Implement ModifySlotEvent command event type |
⬜ | ||||
| 4.1.9 | Implement DeltaSynchronizer (transmit queued events on reconnection) |
⬜ | ||||
| 4.1.10 | Implement conflict resolution strategy (last-write-wins + conflict flagging) | ⬜ | ||||
| 4.1.11 | Configure drift_web for IndexedDB persistence on Web target |
⬜ | ||||
| 4.1.12 | Implement database backup/restore (export to encrypted JSON archive) | ⬜ |
4.1 Acceptance Criteria:
- Application continues full operation with zero network connectivity
- Delta synchronizer transmits only changed events (not full model) on reconnection
- Reactive streams update UI within 16ms of database write
- Backup/restore round-trip produces identical database state
4.2 — Real-Time MTOE Domain Validation Engine
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 4.2.1 | Implement MtoeValidationEngine in background Dart Isolate |
⬜ | ||||
| 4.2.2 | Implement MOS Mismatch Detection rule | ⬜ | ||||
| 4.2.3 | Implement Rank Mismatch Detection rule | ⬜ | ||||
| 4.2.4 | Implement Vacant Leadership Slot Detection rule | ⬜ | ||||
| 4.2.5 | Implement Missing Critical Support Role Detection rule (68W, 13F) | ⬜ | ||||
| 4.2.6 | Implement Structural Hierarchy Violation Detection rule | ⬜ | ||||
| 4.2.7 | Implement Doctrinal Strength Deviation rule (< 70% manning) | ⬜ | ||||
| 4.2.8 | Implement ValidationFinding result model (severity, unitId, slotId, findingCode, description) |
⬜ | ||||
| 4.2.9 | Integrate validation findings into status bar (aggregate counts by severity) | ⬜ | ||||
| 4.2.10 | Integrate validation findings into node visual indicators (colored border/badge) | ⬜ | ||||
| 4.2.11 | Integrate validation findings into right panel inspector (detailed finding list) | ⬜ | ||||
| 4.2.12 | Implement drag-and-drop pre-validation (evaluate before drop execution) | ⬜ |
4.2 Acceptance Criteria:
- All six validation rules correctly identify violations in test unit trees
- Validation engine processes a full BCT (500+ nodes) in < 500ms in background Isolate
- Node visual indicators update within one frame of validation completion
- Dragging Fire Team to Brigade HQ shows red pre-validation indicator before drop
4.3 — Data Export Engine
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 4.3.1 | Implement JSON export module (full unit tree serialization) | ⬜ | ||||
| 4.3.2 | Implement Protobuf export module (binary-encoded unit tree) | ⬜ | ||||
| 4.3.3 | Implement vector PDF export: org chart rendering via pdf package |
⬜ | ||||
| 4.3.4 | Implement PDF export: MIL-STD-2525D symbols as vector paths | ⬜ | ||||
| 4.3.5 | Implement PDF export: configurable page sizes (Letter, A4, Tabloid/A3) | ⬜ | ||||
| 4.3.6 | Implement PDF export: cover page with unit designation, date, classification placeholder | ⬜ | ||||
| 4.3.7 | Implement JSON import pipeline with doctrinal validation | ⬜ | ||||
| 4.3.8 | Implement export UI dialog (format selection, scope selection, file save) | ⬜ | ||||
| 4.3.9 | Offload JSON/Protobuf serialization to background Dart Isolate | ⬜ | ||||
| 4.3.10 | Offload PDF rendering to background Dart Isolate | ⬜ |
4.3 Acceptance Criteria:
- JSON export/import round-trip produces identical unit tree
- Protobuf export file size < 50% of equivalent JSON for a full BCT
- PDF export renders all MIL-STD-2525D symbols as vector paths (not rasterized)
- PDF export completes in < 10 seconds for a full BCT on Windows
Phase 4 Exit Criteria
| Criterion | Status | Verified By | Date |
|---|---|---|---|
| Full reactive Drift persistence layer operational on all three platforms | ⬜ | ||
| Offline-first operation verified with delta synchronization | ⬜ | ||
| MTOE validation engine detecting all defined violation types in real time | ⬜ | ||
| JSON, Protobuf, and vector PDF export modules functional | ⬜ | ||
| JSON import pipeline with doctrinal validation | ⬜ |
Phase 5: Platform Optimization, Profiling, & Hardening
Weeks 20 – 24 | Status: ⬜ NOT STARTED
Dependency: Phase 4 must be complete before Phase 5 begins.
5.1 — Performance Profiling & Rendering Optimization
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 5.1.1 | Profile Windows target: frame timeline, memory, CPU via Flutter DevTools | ⬜ | ||||
| 5.1.2 | Profile Web (WASM) target: frame timeline, memory, CPU via Flutter DevTools | ⬜ | ||||
| 5.1.3 | Profile Android target: frame timeline, memory, CPU via Flutter DevTools | ⬜ | ||||
| 5.1.4 | Apply RepaintBoundary isolation: static layer (grid, connection lines) |
⬜ | ||||
| 5.1.5 | Apply RepaintBoundary isolation: dynamic layer (drag preview overlay) |
⬜ | ||||
| 5.1.6 | Apply RepaintBoundary isolation: node layer (individual unit nodes) |
⬜ | ||||
| 5.1.7 | Optimize Reingold-Tilford: cache subtree widths, skip unchanged subtrees | ⬜ | ||||
| 5.1.8 | Optimize Quadtree: bulk-insert for template instantiation, lazy rebuild | ⬜ | ||||
| 5.1.9 | Tune LRU symbol cache capacity per platform (Windows: 2,000 / Android: 500 / Web: 1,000) | ⬜ | ||||
| 5.1.10 | Implement progressive loading for large templates (visible viewport first) | ⬜ | ||||
| 5.1.11 | Build automated performance benchmark suite (frame rate tests at target node counts) | ⬜ |
5.1 Acceptance Criteria:
- Windows: 60 FPS at 5,000+ nodes (verified by automated benchmark)
- Web (WASM): 60 FPS at 2,000+ nodes (verified by automated benchmark)
- Android: 60 FPS at 1,500+ nodes (verified by automated benchmark)
- No memory leaks over 30-minute continuous operation sessions
- Main thread frame time < 8ms during layout recalculation
5.2 — Heavy Computation Isolate Offloading
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 5.2.1 | Audit and confirm: Reingold-Tilford layout → background Isolate | ⬜ | ||||
| 5.2.2 | Audit and confirm: MTOE validation engine → background Isolate | ⬜ | ||||
| 5.2.3 | Offload JSON/Protobuf serialization → background Isolate | ⬜ | ||||
| 5.2.4 | Offload PDF rendering → background Isolate | ⬜ | ||||
| 5.2.5 | Implement IsolatePool for managing concurrent background computations |
⬜ | ||||
| 5.2.6 | Implement progress reporting from Isolates to UI | ⬜ | ||||
| 5.2.7 | Implement Isolate cancellation for superseded layout requests | ⬜ |
5.2 Acceptance Criteria:
- Main UI thread frame time remains < 8ms during any background computation
- Isolate cancellation correctly aborts superseded layout requests
- Progress indicators display for all operations > 500ms
5.3 — Platform-Specific Hardening
Windows x64
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 5.3.1 | Implement multi-window support (multiple UTO workspaces simultaneously) | ⬜ | ||||
| 5.3.2 | Verify high-DPI scaling at 100%, 125%, 150%, 200% display scaling | ⬜ | ||||
| 5.3.3 | Implement system tray integration and window state persistence | ⬜ | ||||
| 5.3.4 | Configure .msi installer with registry entries and uninstall support |
⬜ | ||||
| 5.3.5 | Implement Windows file association for .uto project files |
⬜ |
Web (WASM/CanvasKit)
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 5.3.6 | Optimize WASM bundle size (tree-shaking, deferred template asset loading) | ⬜ | ||||
| 5.3.7 | Implement IndexedDB storage quota management and user warnings | ⬜ | ||||
| 5.3.8 | Implement memory-bounded canvas surface allocation | ⬜ | ||||
| 5.3.9 | Configure service worker for offline PWA capability | ⬜ | ||||
| 5.3.10 | Test across Chrome, Edge, and Firefox | ⬜ |
Android
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 5.3.11 | Implement battery profiling: reduce Isolate activity when battery < 20% | ⬜ | ||||
| 5.3.12 | Verify all touch targets ≥ 48×48 dp across all interactive elements | ⬜ | ||||
| 5.3.13 | Implement Android back-gesture handling for panel navigation | ⬜ | ||||
| 5.3.14 | Configure .aab release build with ProGuard/R8 optimization |
⬜ | ||||
| 5.3.15 | Test on Android 12, 13, and 14 (tablet and phone form factors) | ⬜ |
5.3 Acceptance Criteria:
- Windows installer installs/uninstalls cleanly;
.utofile association works - Web app functions offline after initial load (PWA service worker active)
- Android app passes battery profiling: no excessive background drain
- All touch targets verified ≥ 48×48 dp on Android
5.4 — Security, Accessibility, & Final QA
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 5.4.1 | Implement classification marking placeholder system (UNCLASSIFIED / FOUO banners) | ⬜ | ||||
| 5.4.2 | Integrate SQLCipher for data-at-rest database encryption | ⬜ | ||||
| 5.4.3 | Implement platform keychain key storage (Windows Credential Manager / Android Keystore) | ⬜ | ||||
| 5.4.4 | Conduct screen reader compatibility audit (Windows Narrator, Android TalkBack) | ⬜ | ||||
| 5.4.5 | Verify WCAG 2.1 AA contrast ratios for all text elements | ⬜ | ||||
| 5.4.6 | Verify keyboard-only navigation completeness on Windows/Web | ⬜ | ||||
| 5.4.7 | Execute E2E test: template instantiation → drag-and-drop → personnel assignment → export | ⬜ | ||||
| 5.4.8 | Execute E2E test: offline operation → reconnection → delta synchronization | ⬜ | ||||
| 5.4.9 | Execute E2E test: validation finding detection → resolution → re-validation | ⬜ | ||||
| 5.4.10 | Conduct load test: 10 simultaneous full BCT templates, 10-minute stability | ⬜ |
5.4 Acceptance Criteria:
- Database encryption verified: raw SQLite file unreadable without key
- All WCAG 2.1 AA contrast requirements met
- All E2E tests pass with 100% success rate on all three platforms
- Load test: 10 simultaneous BCT templates stable for 10 minutes without crash or memory leak
5.5 — Release Package Assembly
| # | Task | Status | Assignee | Start Date | End Date | Notes |
|---|---|---|---|---|---|---|
| 5.5.1 | Assemble Windows release: signed .msi installer + portable .exe archive |
⬜ | ||||
| 5.5.2 | Assemble Web release: optimized WASM bundle + static hosting configuration | ⬜ | ||||
| 5.5.3 | Assemble Android release: signed .aab (Google Play) + sideload .apk |
⬜ | ||||
| 5.5.4 | Generate release notes (features, known limitations, upgrade instructions) | ⬜ | ||||
| 5.5.5 | Tag release in version control (v1.0.0) |
⬜ | ||||
| 5.5.6 | Archive build artifacts with SHA-256 checksums | ⬜ |
5.5 Acceptance Criteria:
- All three release packages install and launch correctly on clean target systems
- SHA-256 checksums verified for all artifacts
- Release tagged in version control
Phase 5 Exit Criteria
| Criterion | Status | Verified By | Date |
|---|---|---|---|
| All three platforms meet FPS targets at specified node counts | ⬜ | ||
| All heavy computations confirmed offloaded to background Isolates | ⬜ | ||
| Platform-specific hardening complete (Windows multi-window, Web PWA, Android battery) | ⬜ | ||
| Database encryption integrated | ⬜ | ||
| End-to-end test suite passing on all three platforms | ⬜ | ||
| Release packages assembled and signed for all three platforms | ⬜ |
Blockers & Issues Log
| # | Date Raised | Phase | Task # | Description | Severity | Status | Resolution | Date Resolved |
|---|---|---|---|---|---|---|---|---|
| — | — | — | — | No blockers recorded | — | — | — | — |
Milestone Summary
| Milestone | Target Week | Deliverable | Status |
|---|---|---|---|
| M1 | End of Week 4 | Compilable multi-platform skeleton + Drift DB + CI pipeline | ⬜ |
| M2 | End of Week 9 | Functional canvas engine with drag-and-drop on Windows and Android | ⬜ |
| M3 | End of Week 14 | All BCT templates instantiable + MIL-STD-2525D symbols rendering | ⬜ |
| M4 | End of Week 19 | Full persistence + real-time MTOE validation + JSON/PDF export | ⬜ |
| M5 | End of Week 24 | Signed release packages for Windows, Web, and Android | ⬜ |
Task Count Summary
| Phase | Total Tasks | Complete | In Progress | Blocked | Not Started |
|---|---|---|---|---|---|
| Phase 1 | 30 | 0 | 0 | 0 | 30 |
| Phase 2 | 29 | 0 | 0 | 0 | 29 |
| Phase 3 | 34 | 0 | 0 | 0 | 34 |
| Phase 4 | 30 | 0 | 0 | 0 | 30 |
| Phase 5 | 33 | 0 | 0 | 0 | 33 |
| Total | 156 | 0 | 0 | 0 | 156 |
Document Version: 1.0 | Generated: 2026-08-07 | Companion to: phased_development_plan.md
Update this document at the start and end of each work session.