focus-flow/Codex Documentation/Current Software Plan/V1_REQUIREMENTS_TRACEABILITY_MATRIX.md

15 KiB

V1 Requirements Traceability Matrix

Status: Baseline captured during Block 11.1.

Review basis:

  • Human Documentation/Overall App Design Spec.docx, section 25, plus MVP requirements from sections 5-19.
  • Human Documentation/Unified Product Design Summary.md
  • Human Documentation/Starter Architecture Notes.md
  • Public exports from lib/scheduler_core.dart
  • Tests under test/

Starting commit: 775c2ed406f03a73a9b0ca621dea5b4482468616

Verification result on 2026-06-24:

  • dart pub get: passed
  • dart format lib test: passed, 0 files changed
  • dart analyze: passed, no issues found
  • dart test: passed, 143 tests
  • git diff --check: passed

Latest Block 12 verification result on 2026-06-25:

  • dart format lib test: passed, 0 files changed
  • dart analyze: passed, no issues found
  • dart test: passed, 203 tests
  • git diff --check: passed

Latest Block 13.1 verification result on 2026-06-25:

  • dart format lib test: passed, 0 files changed
  • dart analyze: passed, no issues found
  • dart test: passed, 211 tests
  • git diff --check: passed

Latest Block 13.2 verification result on 2026-06-25:

  • dart format lib test: passed, 0 files changed
  • dart analyze: passed, no issues found
  • dart test: passed, 218 tests
  • git diff --check: passed

Latest Block 13.3 verification result on 2026-06-25:

  • dart format lib test: passed, 0 files changed after final format
  • dart analyze: passed, no issues found
  • dart test: passed, 225 tests
  • git diff --check: passed

Latest Block 13.4 verification result on 2026-06-25:

  • dart format lib test: passed, 0 files changed after final format
  • dart analyze: passed, no issues found
  • dart test: passed, 233 tests
  • git diff --check: passed

Latest Block 13.5 verification result on 2026-06-25:

  • dart format lib test: passed, 0 files changed after final format
  • dart analyze: passed, no issues found
  • dart test: passed, 243 tests
  • git diff --check: passed

Latest Block 14.1 verification result on 2026-06-25:

  • dart format lib test: passed, 0 files changed after final format
  • dart analyze: passed, no issues found
  • dart test: passed, 249 tests
  • git diff --check: passed

Latest Block 14.2 verification result on 2026-06-25:

  • dart format lib test: passed, 0 files changed after final format
  • dart analyze: passed, no issues found
  • dart test: passed, 257 tests
  • git diff --check: passed

Status values:

  • complete: Current backend APIs and tests cover the requirement.
  • incomplete: Some required backend, application, persistence, or UI-facing contract work remains.
  • intentionally deferred: The human spec places this outside MVP, or the active plan explicitly defers it.
  • contradictory: The human spec conflicts with the V1 backend direction and an active plan must resolve it without silently changing behavior.

Section 25 MVP acceptance criteria

ID Acceptance criterion Production API surface Representative tests Status Active-plan reference or issue
MVP-AC-01 Create a task through quick capture with only a title. Task.quickCapture, QuickCaptureRequest, QuickCaptureService.capture test/scheduling_engine_test.dart, test/edge_case_regression_test.dart complete Keep constructor invariants under Chunk 11.3.
MVP-AC-02 Store quick-capture tasks in Backlog with neutral defaults. Task.quickCapture, QuickCaptureService.capture, TaskStatus.backlog, PriorityLevel.medium, RewardLevel.notSet, inbox project default test/scheduling_engine_test.dart, test/edge_case_regression_test.dart complete Backlog-entered timestamp remains incomplete; see Blocks 11 and 15.
MVP-AC-03 Optionally schedule a quick-capture task into the next available slot after entering duration. QuickCaptureRequest.scheduleImmediately, QuickCaptureService.capture, SchedulingEngine.insertBacklogTaskIntoNextAvailableSlot test/scheduling_engine_test.dart, test/edge_case_regression_test.dart, test/scheduling_invariants_test.dart complete Block 12 covers central occupancy, protected Free Slot avoidance, structured no-slot outcomes, and invariant coverage.
MVP-AC-04 Create recurring hidden locked blocks and one-day overrides. LockedBlock, LockedBlockRecurrence.weekly, LockedBlockOverride.remove, LockedBlockOverride.replace, LockedBlockOverride.add, expandLockedBlocksForDay test/scheduling_engine_test.dart, test/timeline_state_test.dart, test/edge_case_regression_test.dart complete Date-only/time-zone hardening remains in Chunk 11.4 and Block 15.
MVP-AC-05 Render Today as a timeline with project border, task-type background, task name, reward icon, and difficulty icon. GetTodayStateQuery, TodayState, TodayTimelineItem, TimelineItemMapper, TimelineItem, timeline token enums test/timeline_state_test.dart, test/today_state_test.dart incomplete Backend Today read model and tokens are complete; actual Flutter rendering is Block 18.
MVP-AC-06 Use compact Today mode manually. GetTodayStateQuery, TodayCompactState, TimelineItemMapper.compactStateForTasks, CompactTimelineState test/timeline_state_test.dart, test/today_state_test.dart complete Complete at backend/read-model level, including current/next deduplication; Flutter UI remains Block 18.
MVP-AC-07 Push flexible tasks to next available slot, tomorrow, or backlog. FlexibleTaskQuickAction.push, PushDestination, FlexibleTaskActionService.applyPushDestination, SchedulingEngine push methods, TaskActivityCode test/scheduling_engine_test.dart, test/required_task_actions_test.dart, test/task_lifecycle_test.dart complete Chunk 13.1 adds internal activity records; exactly-once statistics/accounting continues in Chunk 13.2.
MVP-AC-08 Move backlog items into the soonest flexible slot where they fit and shift later flexible tasks. SchedulingEngine.insertBacklogTaskIntoNextAvailableSlot test/scheduling_engine_test.dart, test/edge_case_regression_test.dart, test/occupancy_policy_test.dart, test/free_slots_test.dart, test/scheduling_invariants_test.dart complete Block 12 covers central occupancy, protected Free Slot blockers, structured outcomes, and invariant coverage.
MVP-AC-09 Automatically roll unfinished flexible tasks to tomorrow/top of queue with a small notice. SchedulingEngine.rolloverUnfinishedFlexibleTasks, SchedulingNotice, TodayPendingNotice, GetTodayStateQuery test/scheduling_engine_test.dart, test/edge_case_regression_test.dart, test/scheduling_invariants_test.dart, test/today_state_test.dart incomplete Domain movement, structured rollover notices, and Today pending-notice read model exist; explicit durable app-open rollover orchestration remains in Chunk 14.5.
MVP-AC-10 Log unplanned completed tasks and push overlapping flexible tasks normally. SurpriseTaskLogRequest, SurpriseTaskLogService.log, SurpriseTaskLogResult, Task.completedAt test/surprise_task_logging_test.dart, test/scheduling_invariants_test.dart, test/task_lifecycle_test.dart incomplete Block 12 covers actual occupancy and idempotent retry; Chunks 13.1-13.2 add completion timestamps and surprise completion accounting/locked-hour statistics; application use cases remain in Block 14.
MVP-AC-11 Break a large task into child tasks with row-level priority, reward, and duration. ChildTaskEntry, ChildTaskBreakUpRequest, ChildTaskBreakUpResult, ChildTaskBreakUpService, ChildTaskView test/child_tasks_test.dart complete Chunk 13.3 adds deterministic break-up mutation results; persistence transaction wiring remains in Block 14.
MVP-AC-12 Auto-complete parent tasks when all children are done and allow force-completing all children from the parent or a child. ChildTaskCompletionService, ChildTaskCompletionResult, parent-child helpers, TaskActivity test/child_tasks_test.dart complete Chunk 13.3 routes parent/child completion through lifecycle activities and preserves already-terminal child facts.
MVP-AC-13 Display backlog staleness icons without per-task stale prompts. BacklogStalenessMarker, BacklogStalenessSettings, BacklogView test/scheduling_engine_test.dart, test/edge_case_regression_test.dart incomplete Backend marker exists; settings persistence and UI display remain in Blocks 14, 15, and 18.
MVP-AC-14 Track baseline internal statistics needed for later reports and filtering. TaskStatistics, ProjectStatistics, TaskActivity, TaskActivityApplicationResult, TaskActivityAccountingService, ProjectStatisticsAggregationService, ApplicationUnitOfWork, selected action services test/scheduling_engine_test.dart, test/required_task_actions_test.dart, test/document_mapping_test.dart, test/task_lifecycle_test.dart, test/child_tasks_test.dart, test/project_statistics_test.dart, test/application_layer_test.dart incomplete Chunks 13.1-13.4 add canonical activities, exactly-once task/project statistic accounting, parent/child completion metadata, and learned suggestion aggregates; Chunk 14.1 adds the atomic in-memory unit-of-work foundation; concrete command integration remains in Chunk 14.3.

Additional MVP backend requirements

ID Requirement Production API surface Representative tests Status Active-plan reference or issue
MVP-SUP-01 Flexible tasks move while locked, inflexible, and critical time does not move automatically. OccupancyPolicy, SchedulingInput.blockedIntervals, SchedulingEngine placement methods test/scheduling_engine_test.dart, test/edge_case_regression_test.dart, test/occupancy_policy_test.dart, test/scheduling_invariants_test.dart complete Block 12 centralizes occupancy and adds structured outcomes plus invariant coverage for immovable placements.
MVP-SUP-02 Critical missed tasks are marked missed and moved to backlog. RequiredTaskActionService, SchedulingEngine.markMissed, TaskTransitionService, TaskType.critical test/scheduling_engine_test.dart, test/required_task_actions_test.dart, test/task_lifecycle_test.dart complete Chunk 13.1 records both missed and moved-to-backlog activities.
MVP-SUP-03 Inflexible missed tasks are marked missed and left in place/history. RequiredTaskActionService, SchedulingEngine.markMissed, TaskTransitionService, TaskType.inflexible test/scheduling_engine_test.dart, test/required_task_actions_test.dart, test/task_lifecycle_test.dart complete Actual/historical interval semantics are formalized in Chunk 11.2 and Block 12.
MVP-SUP-04 Cancelled and no-longer-relevant are separate calm lifecycle outcomes. TaskStatus.cancelled, TaskStatus.noLongerRelevant, RequiredTaskAction, TaskActivityCode test/required_task_actions_test.dart, test/task_lifecycle_test.dart complete Chunk 13.1 centralizes both transitions and emits distinct activity codes.
MVP-SUP-05 Free Slot is intentional rest that blocks normal flexible placement and suppresses normal flexible reminders. TaskType.freeSlot, OccupancyPolicy, FreeSlotService, ReminderPolicyService, timeline tokens test/timeline_state_test.dart, test/occupancy_policy_test.dart, test/free_slots_test.dart, test/scheduling_invariants_test.dart, test/reminder_policy_test.dart complete Blocks 12 and 13 cover scheduling protection, explicit required conflicts, and reminder suppression/directives at the backend policy level.
MVP-SUP-06 Project defaults apply, learned suggestions stay optional, and task reminder overrides are possible. ProjectProfile, ProjectStatistics, ProjectSuggestionService, ProjectDefaultResolution, ReminderPolicyService, Task.reminderOverride, ReminderProfile test/scheduling_engine_test.dart, test/domain_invariants_test.dart, test/project_statistics_test.dart, test/reminder_policy_test.dart complete Chunk 13.5 adds effective reminder resolution without using learned suggestions as silent configuration.
MVP-SUP-07 Repository boundaries prepare for MongoDB without coupling the scheduler to MongoDB APIs. Repository interfaces, in-memory repositories, ApplicationUnitOfWork, document mapping helpers test/repositories_test.dart, test/document_mapping_test.dart, test/persistence_edge_cases_test.dart, test/application_layer_test.dart incomplete Chunk 14.1 adds pure Dart application transaction contracts and staged in-memory unit-of-work behavior; complete codecs, revisions, and runtime adapter remain in Blocks 15 and 16.
MVP-SUP-08 Hidden locked time remains hidden by default, with explicit reveal as an overlay. LockedBlockOccurrence.hiddenByDefault, TimelineItemMapper.fromLockedOccurrence, GetTodayStateQuery, TodayTimelineItem test/timeline_state_test.dart, test/edge_case_regression_test.dart, test/today_state_test.dart complete Chunk 14.2 adds hidden-by-default Today omission, explicit reveal mode, and date-stable locked overlay IDs.
MVP-SUP-09 Push/backlog/restore movement should be activity/stat data, not shame language. TaskStatistics, ProjectStatistics, TaskActivity, TaskActivityCode, SchedulingChange, SchedulingMovementCode, ApplicationUnitOfWork, action result objects test/scheduling_engine_test.dart, test/required_task_actions_test.dart, test/scheduling_invariants_test.dart, test/task_lifecycle_test.dart, test/project_statistics_test.dart, test/application_layer_test.dart incomplete Chunks 13.1-13.4 add canonical transition/activity records plus exactly-once task/project statistic accounting; Chunk 14.1 adds atomic transaction contracts; concrete action use-case persistence remains in Chunk 14.3.
MVP-SUP-10 The human spec lists pushed and skipped as statuses. TaskStatus excludes both; movement and burnout compatibility are modeled as activity/stat metadata. test/domain_contracts_test.dart contradictory Resolved by V1_ADR_001_Lifecycle_Metadata_Reminder_Semantics.md; the contradiction is kept visible so later chunks do not add movement labels as statuses.

Intentionally deferred human-spec items

ID Requirement Status Deferred location
DEF-01 Week view and month view. intentionally deferred V2/non-MVP.
DEF-02 Weekly reports and dashboard. intentionally deferred V2/non-MVP; internal stats remain MVP baseline only.
DEF-03 Overwhelm shield and burnout catch-up flow. intentionally deferred V2/non-MVP.
DEF-04 Drag-and-drop reordering. intentionally deferred V2/non-MVP.
DEF-05 Visible per-task history panel. intentionally deferred V2/non-MVP.
DEF-06 Task dependencies and context tags. intentionally deferred Wishlist/non-MVP.
DEF-07 Flexible-task overrun behavior. intentionally deferred Wishlist/non-MVP decision.