107 lines
5.5 KiB
Markdown
107 lines
5.5 KiB
Markdown
# UTO Manager — Development Status
|
||
|
||
**Last Updated:** 2026-08-07
|
||
**Current Branch:** `feature/phase-1-foundations` → merged to `main`
|
||
**Active Phase:** Phase 1 — Architecture & Data Foundations ✅ COMPLETE
|
||
|
||
---
|
||
|
||
## Phase 1 — Architecture & Data Foundations ✅ COMPLETE
|
||
|
||
### Completed Items
|
||
|
||
| Item | Status | Notes |
|
||
|------|--------|-------|
|
||
| Flutter project initialization | ✅ | Multi-platform: Windows, Web (WASM), Android |
|
||
| Clean architecture folder structure | ✅ | domain / infrastructure / presentation layers |
|
||
| `pubspec.yaml` configuration | ✅ | Drift, Equatable, flutter_bloc, uuid, meta, path_provider |
|
||
| `analysis_options.yaml` lint rules | ✅ | very_good_analysis base + project overrides |
|
||
| `Echelon` entity | ✅ | Brigade→Team hierarchy, `isValidParent`, `isValidChild`, `level` |
|
||
| `DoctrinalBranch` entity | ✅ | Infantry, Medical, Fires, Signal, Cyber/EW, Aviation, Logistics, Engineer |
|
||
| `AuthorizedRank` entity | ✅ | E1–E9, W1–W5, O1–O10; `payGrade`, `rankTitle`, `meetsMinimum`, category flags |
|
||
| `UnitNode` entity | ✅ | Immutable, `Equatable`, `copyWith`, `isRoot`, `isValidParentNode` |
|
||
| `PositionSlot` entity | ✅ | Immutable, `Equatable`, `copyWith`, `isVacant`, `isFilled` |
|
||
| `PersonnelRecord` entity | ✅ | Immutable, `Equatable`, `copyWith`, `ReadinessState` (FMC/PMC/NMC) |
|
||
| `DutyMos` value object | ✅ | Validated MOS codes, `@immutable`, `codesForBranch`, `isKnown` |
|
||
| `domain_entities.dart` barrel export | ✅ | Single import for all domain entities |
|
||
| `UnitRepository` abstract interface | ✅ | CRUD + subtree + watch streams |
|
||
| `PersonnelRepository` abstract interface | ✅ | CRUD + assignment + watch streams |
|
||
| `AppDatabase` (Drift) schema | ✅ | Units, PositionSlots, Personnel, Templates tables |
|
||
| Drift code generation (`build_runner`) | ✅ | `app_database.g.dart` generated (94 KB) |
|
||
| `assets/data/mos_dictionary.json` | ✅ | 8 branches, 60+ MOS codes, position slot templates |
|
||
| `assets/svg/` directory | ✅ | Reserved for NATO military symbols (Phase 2) |
|
||
| GitHub Actions CI/CD pipeline | ✅ | Test + analyze + build (Windows, Web WASM, Android) |
|
||
| `lib/main.dart` placeholder scaffold | ✅ | Army-blue Material 3 theme, placeholder UI |
|
||
| Unit tests — `Echelon` | ✅ | 17 tests passing |
|
||
| Unit tests — `AuthorizedRank` | ✅ | 16 tests passing |
|
||
| Unit tests — `PersonnelRecord` | ✅ | 13 tests passing |
|
||
| Unit tests — `UnitNode` | ✅ | 15 tests passing |
|
||
| Unit tests — `DutyMos` | ✅ | 32 tests passing |
|
||
| Widget test — placeholder scaffold | ✅ | 1 test passing |
|
||
| **Total tests** | ✅ | **94 / 94 passing** |
|
||
| `flutter analyze` | ✅ | **No issues found** |
|
||
|
||
---
|
||
|
||
## Phase 2 — Canvas Engine & Drag-Drop UTO Builder (NEXT)
|
||
|
||
### Planned Items
|
||
|
||
| Item | Priority | Notes |
|
||
|------|----------|-------|
|
||
| `UnitTreeService` domain service | High | Build/validate unit tree from `UnitNode` list |
|
||
| `AssignmentService` domain service | High | Assign/unassign soldiers to slots with validation |
|
||
| Drift DAO implementations | High | `UnitDao`, `PersonnelDao`, `PositionSlotDao`, `TemplateDao` |
|
||
| Repository concrete implementations | High | Wire DAOs to abstract repository interfaces |
|
||
| `flutter_bloc` Cubits/Blocs | High | `UnitTreeCubit`, `PersonnelCubit`, `TemplateCubit` |
|
||
| Three-pane UI shell | High | Left panel (unit tree), center canvas, right panel (personnel) |
|
||
| Interactive canvas widget | High | Scrollable/zoomable org chart canvas |
|
||
| Drag-and-drop soldier assignment | High | Drag from personnel panel → drop on position slot |
|
||
| NATO military symbol SVGs | Medium | Brigade, Battalion, Company, Platoon, Squad, Team symbols |
|
||
| Unit node card widget | Medium | Echelon symbol + name + fill rate indicator |
|
||
| Position slot card widget | Medium | MOS badge + rank + soldier name or "VACANT" |
|
||
| Readiness color coding | Medium | FMC=green, PMC=amber, NMC=red |
|
||
| Template save/load | Medium | Serialize unit tree to JSON, persist via `Templates` table |
|
||
|
||
---
|
||
|
||
## Phase 3 — Reporting & Export (PLANNED)
|
||
|
||
| Item | Priority | Notes |
|
||
|------|----------|-------|
|
||
| UTO report generation | High | PDF/HTML export of unit task organization |
|
||
| Readiness dashboard | High | Aggregate FMC/PMC/NMC statistics by echelon |
|
||
| Personnel roster export | Medium | CSV export of assigned/unassigned soldiers |
|
||
| Template library | Medium | Save/load/share UTO templates |
|
||
| Multi-BCT support | Low | Support multiple simultaneous BCT configurations |
|
||
| Web deployment | Low | Deploy WASM build to internal web server |
|
||
|
||
---
|
||
|
||
## Known Issues / Technical Debt
|
||
|
||
| Issue | Severity | Resolution |
|
||
|-------|----------|-----------|
|
||
| `lines_longer_than_80_chars` disabled | Low | Dart formatter produces lines > 80 chars for chained method calls; rule disabled in `analysis_options.yaml` |
|
||
| Drift DAOs not yet implemented | Medium | Phase 2 work item — abstract interfaces defined, concrete implementations pending |
|
||
| No integration tests | Medium | Phase 2 will add integration tests for repository implementations |
|
||
| `sqlite3_flutter_libs` EOL warning | Low | Will upgrade when `drift` supports newer version |
|
||
|
||
---
|
||
|
||
## Test Coverage Summary
|
||
|
||
```
|
||
flutter test --coverage
|
||
94 tests | 0 failures | 0 skipped
|
||
Coverage: domain layer ~95%+ (entities, value objects)
|
||
```
|
||
|
||
---
|
||
|
||
## Branch History
|
||
|
||
| Branch | Merged | Description |
|
||
|--------|--------|-------------|
|
||
| `feature/phase-1-foundations` | 2026-08-07 | Phase 1: Architecture & Data Foundations |
|