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

14 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

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. TimelineItemMapper, TimelineItem, timeline token enums test/timeline_state_test.dart incomplete Backend read-model tokens exist; actual Flutter rendering is Block 18.
MVP-AC-06 Use compact Today mode manually. TimelineItemMapper.compactStateForTasks, CompactTimelineState test/timeline_state_test.dart complete Complete at backend/read-model level; 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 and SchedulingNotice test/scheduling_engine_test.dart, test/edge_case_regression_test.dart, test/scheduling_invariants_test.dart incomplete Domain movement and structured rollover notices exist; durable next-open rollover notice/read model remains in Block 14.
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, 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 incomplete Chunks 13.1-13.4 add canonical activities, exactly-once task/project statistic accounting, parent/child completion metadata, and learned suggestion aggregates; atomic persistence remains in Block 14.

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, document mapping helpers test/repositories_test.dart, test/document_mapping_test.dart, test/persistence_edge_cases_test.dart incomplete Complete codecs, revisions, unit of work, 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 test/timeline_state_test.dart, test/edge_case_regression_test.dart complete Stable per-occurrence IDs and Today query read model remain in Block 14.
MVP-SUP-09 Push/backlog/restore movement should be activity/stat data, not shame language. TaskStatistics, ProjectStatistics, TaskActivity, TaskActivityCode, SchedulingChange, SchedulingMovementCode, 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 incomplete Chunks 13.1-13.4 add canonical transition/activity records plus exactly-once task/project statistic accounting; atomic persistence remains in Block 14.
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.