focus-flow/Codex Documentation/Archived plans/V1_REQUIREMENTS_TRACEABILITY_MATRIX.md

17 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

Latest Block 14.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, 268 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. V1ApplicationCommandUseCases.quickCaptureToBacklog, Task.quickCapture, QuickCaptureRequest, QuickCaptureService.capture test/scheduling_engine_test.dart, test/edge_case_regression_test.dart, test/application_commands_test.dart complete Chunk 14.3 adds the atomic application command boundary.
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, TaskDocumentFields.backlogEnteredAt test/scheduling_engine_test.dart, test/edge_case_regression_test.dart, test/document_mapping_test.dart, packages/scheduler_persistence_sqlite/test/sqlite_repository_conformance_test.dart complete Backlog-entered timestamp fields are covered by document mapping and SQLite persistence.
MVP-AC-03 Optionally schedule a quick-capture task into the next available slot after entering duration. V1ApplicationCommandUseCases.quickCaptureToNextAvailableSlot, QuickCaptureRequest.scheduleImmediately, QuickCaptureService.capture, SchedulingEngine.insertBacklogTaskIntoNextAvailableSlot test/scheduling_engine_test.dart, test/edge_case_regression_test.dart, test/scheduling_invariants_test.dart, test/application_commands_test.dart complete Block 12 covers scheduling rules; Chunk 14.3 adds the atomic application command boundary.
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, TodayPane, TimelineRow, SchedulerVisualTokens test/timeline_state_test.dart, test/today_state_test.dart, apps/focus_flow_flutter/test/widget_test.dart complete Backend Today read model and provisional Flutter token-driven rendering are complete through Block 29.2; final visual design remains intentionally open.
MVP-AC-06 Use compact Today mode manually. GetTodayStateQuery, TodayCompactState, TimelineItemMapper.compactStateForTasks, CompactTimelineState, CompactPanel test/timeline_state_test.dart, test/today_state_test.dart, test/application_management_test.dart, packages/scheduler_persistence_sqlite/test/sqlite_repository_conformance_test.dart, apps/focus_flow_flutter/test/widget_test.dart complete Complete at backend/read-model and settings-persistence level, including current/next deduplication; Block 29.2 renders compact state through a component contract, while a user-facing toggle remains a later UI command/control task.
MVP-AC-07 Push flexible tasks to next available slot, tomorrow, or backlog. V1ApplicationCommandUseCases.pushFlexibleToNextAvailableSlot, V1ApplicationCommandUseCases.pushFlexibleToTomorrowTopOfQueue, V1ApplicationCommandUseCases.moveFlexibleToBacklog, FlexibleTaskActionService.applyPushDestination, SchedulingEngine push methods, TaskActivityCode test/scheduling_engine_test.dart, test/required_task_actions_test.dart, test/task_lifecycle_test.dart, test/application_commands_test.dart complete Chunk 14.3 adds atomic application commands with persisted activities and operation records.
MVP-AC-08 Move backlog items into the soonest flexible slot where they fit and shift later flexible tasks. V1ApplicationCommandUseCases.scheduleBacklogItemToNextAvailableSlot, 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, test/application_commands_test.dart complete Block 12 covers scheduling rules; Chunk 14.3 adds the atomic application command boundary.
MVP-AC-09 Automatically roll unfinished flexible tasks to tomorrow/top of queue with a small notice. SchedulingEngine.rolloverUnfinishedFlexibleTasks, SchedulingNotice, TodayPendingNotice, GetTodayStateQuery, V1AppOpenRecoveryUseCases test/scheduling_engine_test.dart, test/edge_case_regression_test.dart, test/scheduling_invariants_test.dart, test/today_state_test.dart, test/application_recovery_test.dart complete Domain movement, durable app-open recovery orchestration, scheduling snapshots, and Today pending-notice lifecycle are complete.
MVP-AC-10 Log unplanned completed tasks and push overlapping flexible tasks normally. V1ApplicationCommandUseCases.logSurpriseTask, SurpriseTaskLogRequest, SurpriseTaskLogService.log, SurpriseTaskLogResult, Task.completedAt test/surprise_task_logging_test.dart, test/scheduling_invariants_test.dart, test/task_lifecycle_test.dart, test/application_commands_test.dart complete Chunk 14.3 adds atomic surprise logging use case with flexible repair, activity persistence, project stats, and operation records.
MVP-AC-11 Break a large task into child tasks with row-level priority, reward, and duration. V1ApplicationCommandUseCases.breakUpTask, ApplicationChildTaskDraft, ChildTaskEntry, ChildTaskBreakUpRequest, ChildTaskBreakUpResult, ChildTaskBreakUpService, ChildTaskView test/child_tasks_test.dart, test/application_commands_test.dart complete Chunk 14.3 adds atomic child break-up command wiring.
MVP-AC-12 Auto-complete parent tasks when all children are done and allow force-completing all children from the parent or a child. V1ApplicationCommandUseCases.completeChildTask, V1ApplicationCommandUseCases.completeParentTask, V1ApplicationCommandUseCases.completeParentFromChild, ChildTaskCompletionService, ChildTaskCompletionResult, parent-child helpers, TaskActivity test/child_tasks_test.dart, test/application_commands_test.dart complete Chunk 14.3 adds atomic parent/child completion command wiring.
MVP-AC-13 Display backlog staleness icons without per-task stale prompts. BacklogStalenessMarker, BacklogStalenessSettings, BacklogView, OwnerSettings, BacklogPane test/scheduling_engine_test.dart, test/edge_case_regression_test.dart, test/application_management_test.dart, packages/scheduler_persistence_sqlite/test/sqlite_repository_conformance_test.dart, apps/focus_flow_flutter/test/widget_test.dart complete Backend marker, settings persistence, and provisional Flutter backlog icon rendering are complete without per-task stale prompts.
MVP-AC-14 Track baseline internal statistics needed for later reports and filtering. TaskStatistics, ProjectStatistics, TaskActivity, TaskActivityApplicationResult, TaskActivityAccountingService, ProjectStatisticsAggregationService, ApplicationUnitOfWork, V1ApplicationCommandUseCases, 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, test/application_commands_test.dart complete Chunks 13.1-13.4 add canonical statistics/accounting; Chunk 14.3 persists command activities and project aggregate updates atomically in memory. Blocks 19-20 add repository contracts and SQLite adapter conformance.

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. V1ApplicationCommandUseCases.createProtectedFreeSlot, V1ApplicationCommandUseCases.updateProtectedFreeSlot, V1ApplicationCommandUseCases.removeProtectedFreeSlot, 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, test/application_commands_test.dart complete Blocks 12 and 13 cover scheduling/reminder policy; Chunk 14.3 adds atomic protected Free Slot commands.
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 swappable persistence without coupling the scheduler to database APIs. Repository interfaces, in-memory repositories, SQLite repositories, ApplicationUnitOfWork, V1ApplicationCommandUseCases, document mapping helpers test/repositories_test.dart, test/document_mapping_test.dart, test/persistence_edge_cases_test.dart, test/application_layer_test.dart, test/application_commands_test.dart, packages/scheduler_persistence_memory/test/memory_repository_conformance_test.dart, packages/scheduler_persistence_sqlite/test/sqlite_repository_conformance_test.dart complete Blocks 19-20 add domain-only repository contracts, in-memory conformance, SQLite adapter conformance, durable revisions, and compare-and-set saves.
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, V1ApplicationCommandUseCases, 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, test/application_commands_test.dart complete Chunk 14.3 adds atomic command persistence for movement activities, task stats, project stats, and operation records.
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.