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

10 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

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 complete Occupancy centralization and free-slot protection remain in Block 12.
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 test/scheduling_engine_test.dart, test/required_task_actions_test.dart complete Exactly-once activity/stat records remain in Block 13.
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 complete Chunk 12.1 centralized occupancy; Chunk 12.2 covers protected Free Slot blockers.
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 incomplete Domain movement exists; 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 test/surprise_task_logging_test.dart incomplete Chunk 12.3 covers actual occupancy, same-day blockers, privacy-safe locked overlap reporting, and idempotent retry; statistics/application use cases remain in Blocks 13 and 14.
MVP-AC-11 Break a large task into child tasks with row-level priority, reward, and duration. ChildTaskEntry, ChildTaskView, child creation helpers test/child_tasks_test.dart complete Atomic application use case 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 test/child_tasks_test.dart complete Activity/stat updates remain in Block 13.
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, statistics increment helpers, selected action services test/scheduling_engine_test.dart, test/required_task_actions_test.dart, test/document_mapping_test.dart incomplete Automatic exactly-once activity/stat updates remain in Block 13.

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 complete Centralized by Chunk 12.1; later Block 12 chunks add more outcome structure and edge-case coverage.
MVP-SUP-02 Critical missed tasks are marked missed and moved to backlog. RequiredTaskActionService, SchedulingEngine.markMissed, TaskType.critical test/scheduling_engine_test.dart, test/required_task_actions_test.dart complete Durable completion/missed metadata remains in Block 13.
MVP-SUP-03 Inflexible missed tasks are marked missed and left in place/history. RequiredTaskActionService, SchedulingEngine.markMissed, TaskType.inflexible test/scheduling_engine_test.dart, test/required_task_actions_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 test/required_task_actions_test.dart complete Completion/cancellation timestamps remain in Block 13.
MVP-SUP-05 Free Slot is intentional rest that blocks normal flexible placement and suppresses normal flexible reminders. TaskType.freeSlot, OccupancyPolicy, FreeSlotService, timeline tokens test/timeline_state_test.dart, test/occupancy_policy_test.dart, test/free_slots_test.dart incomplete Chunk 12.2 covers scheduling protection, helpers, and explicit required conflicts; reminder directives remain in Block 13.
MVP-SUP-06 Project defaults apply, learned suggestions stay optional, and task reminder overrides are possible. ProjectProfile, Task.reminderOverride, ReminderProfile test/scheduling_engine_test.dart, test/domain_invariants_test.dart incomplete Task override storage exists; effective resolver, learned suggestions, and reminder directives remain in Block 13.
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, SchedulingChange, action result objects test/scheduling_engine_test.dart, test/required_task_actions_test.dart incomplete Canonical transition/activity layer remains in Block 13.
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.