uto_manager/development_status.md

4.8 KiB

UTO Manager — Development Status

Last updated: 2026-08-09


Current Branch

main (feature/phase-2-canvas-engine merged)

Overall Progress

Phase Title Status
1 Domain Foundation ✅ Complete
2 Canvas Engine & Persistence ✅ Complete
3 Template Library & Import/Export 🔲 Not started
4 Reporting & Analytics 🔲 Not started
5 Multi-user / Sync 🔲 Not started

Phase 1 — Domain Foundation ✅

Completed items:

  • Echelon entity with doctrinal hierarchy validation (isValidParent, isValidChild)
  • DoctrinalBranch entity with display names
  • AuthorizedRank entity with pay grade, category flags, meetsMinimum, gradeLevel
  • DutyMos value object with MOS dictionary validation and unvalidated constructor
  • UnitNode entity with copyWith, isRoot, isValidParentNode
  • PositionSlot entity with isVacant, isFilled, isKeyLeader
  • PersonnelRecord entity with ReadinessState, copyWith, isUnassigned
  • UnitRepository abstract interface
  • PersonnelRepository abstract interface
  • domain_entities.dart barrel export
  • Full unit test coverage for all domain entities and value objects

Test count (Phase 1): 60 tests


Phase 2 — Canvas Engine & Persistence ✅

Completed items:

Domain Services

  • UnitTreeService — buildTree, getSubtree, getAncestors, validateReparent, validateAssignment, calculateFillRate, getVacantKeyLeaderSlots, getMosMismatches
  • AssignmentService — assign, unassign, aggregateReadiness with ReadinessColor

Infrastructure — Database

  • Drift schema: Units, PositionSlots, Personnel, Templates tables
  • AppDatabase with forTesting(NativeDatabase.memory()) constructor
  • UnitDao — full CRUD + watch streams
  • PersonnelDao — full CRUD + assignToSlot / unassignFromSlot + watch streams
  • PositionSlotDao — full CRUD + assignPersonnel / clearAssignment + watch streams
  • TemplateDao — full CRUD + upsertTemplate
  • build_runner code generation (.g.dart files)

Infrastructure — Repositories

  • DriftUnitRepository — implements UnitRepository with domain↔Drift mapping
  • DriftPersonnelRepository — implements PersonnelRepository with domain↔Drift mapping
  • DriftPositionSlotRepository — concrete slot repository

Application — BLoC

  • UnitTreeCubit / UnitTreeState (sealed) — tree loading, selection, reparent, subtree delete
  • PersonnelCubit / PersonnelState (sealed) — roster loading, filter, assign/unassign
  • TemplateCubit / TemplateState (sealed) — template save/load/delete

Presentation

  • HomeScreen — three-pane adaptive layout (personnel | canvas | inspector)
  • UtoCanvasWidget — InteractiveViewer pan/zoom org chart with drag-and-drop reparent
  • UnitNodeCard — echelon-colored card with fill rate progress bar
  • PositionSlotCard — DragTarget slot card with MOS badge and readiness color
  • PersonnelListTile — Draggable soldier tile for assignment
  • Status bar with live unit/slot fill counts

App Wiring

  • main.dart — MultiBlocProvider wiring all cubits with production database

Test count (Phase 2): 77 new tests (137 total)


Test Summary

File Tests Status
authorized_rank_test.dart 16 ✅
echelon_test.dart 17 ✅
personnel_record_test.dart 13 ✅
unit_node_test.dart 15 ✅
duty_mos_test.dart 32 ✅
assignment_service_test.dart 16 ✅
unit_tree_service_test.dart 27 ✅
widget_test.dart 1 ✅
Total 137 ✅ All pass

Known Limitations / Next Steps (Phase 3)

  • Template serialization is JSON-only; no import from external formats yet
  • No PDF/Excel export of readiness reports
  • No multi-user or sync capability
  • Canvas layout is vertical tree only; horizontal layout not yet implemented
  • No undo/redo for assignment operations
  • No search/filter on the canvas itself

Architecture Notes

lib/
├── domain/
│   ├── entities/          # Pure Dart domain models (no Flutter deps)
│   ├── value_objects/     # DutyMos
│   ├── repositories/      # Abstract interfaces
│   └── services/          # UnitTreeService, AssignmentService
├── infrastructure/
│   ├── database/          # Drift schema, DAOs, generated code
│   └── repositories/      # Drift-backed implementations
├── application/
│   └── blocs/             # flutter_bloc Cubits
└── presentation/
    ├── screens/           # HomeScreen
    └── widgets/           # Canvas, cards, tiles