22 KiB
V1 Public API Baseline
Status: Captured during Block 11.1.
Starting commit: 775c2ed406f03a73a9b0ca621dea5b4482468616
Public import:
import 'package:adhd_scheduler_core/scheduler_core.dart';
The public library entry point is lib/scheduler_core.dart. It exports the
following source files:
src/models.dartsrc/application_commands.dartsrc/application_layer.dartsrc/application_management.dartsrc/application_recovery.dartsrc/backlog.dartsrc/child_tasks.dartsrc/document_mapping.dartsrc/free_slots.dartsrc/locked_time.dartsrc/occupancy_policy.dartsrc/persistence_contract.dartsrc/project_statistics.dartsrc/quick_capture.dartsrc/reminder_policy.dartsrc/repositories.dartsrc/scheduling_engine.dartsrc/task_actions.dartsrc/task_lifecycle.dartsrc/task_statistics.dartsrc/time_contracts.dartsrc/today_state.dartsrc/timeline_state.dart
This baseline is used by later chunks to distinguish intentional breaking changes from accidental API drift.
Public enums
| File | Enums |
|---|---|
src/application_commands.dart |
ApplicationCommandCode |
src/application_management.dart |
ApplicationManagementCommandCode, OwnerSettingsWarningCode |
src/application_recovery.dart |
AppOpenRecoveryOutcome |
src/application_layer.dart |
ApplicationFailureCode |
src/document_mapping.dart |
DocumentMappingFailureCode |
src/models.dart |
DomainValidationCode, TaskType, TaskStatus, PriorityLevel, RewardLevel, DifficultyLevel, ReminderProfile, BacklogTag |
src/backlog.dart |
BacklogFilter, BacklogSortKey, BacklogStalenessMarker |
src/free_slots.dart |
RequiredCommitmentScheduleStatus |
src/locked_time.dart |
LockedWeekday, LockedBlockOverrideType |
src/occupancy_policy.dart |
OccupancyCategory, OccupancySource |
src/project_statistics.dart |
ProjectCompletionTimeBucket, ProjectSuggestionType, ProjectSuggestionConfidence |
src/quick_capture.dart |
QuickCaptureStatus |
src/reminder_policy.dart |
ReminderDirectiveAction, ReminderDirectiveReason, EffectiveReminderProfileSource |
src/scheduling_engine.dart |
SchedulingNoticeType, SchedulingOperationCode, SchedulingOutcomeCode, SchedulingIssueCode, SchedulingMovementCode, SchedulingConflictCode |
src/task_actions.dart |
FlexibleTaskQuickAction, RequiredTaskAction, PushDestination |
src/task_lifecycle.dart |
TaskTransitionCode, TaskActivityCode, TaskTransitionOutcomeCode |
src/time_contracts.dart |
LocalTimeResolution, NonexistentLocalTimePolicy, RepeatedLocalTimePolicy |
src/today_state.dart |
TodayTimelineItemSource |
src/timeline_state.dart |
TimelineItemCategory, TimelineBackgroundToken, TimelineRewardIconToken, TimelineDifficultyIconToken, TimelineQuickAction |
Public classes and top-level functions
| File | Public API |
|---|---|
src/application_commands.dart |
ApplicationChildTaskDraft, ApplicationCommandReadHint, ApplicationCommandResult, V1ApplicationCommandUseCases |
src/application_layer.dart |
OwnerTimeZoneContext, ApplicationOperationContext, ApplicationFailure, ApplicationResult, ApplicationFailureException, ApplicationPersistenceException, ApplicationOperationRecord, NoticeAcknowledgementRecord, OwnerSettings, TaskActivityRepository, ProjectStatisticsRepository, OwnerSettingsRepository, NoticeAcknowledgementRepository, ApplicationOperationRepository, ApplicationUnitOfWorkRepositories, ApplicationUnitOfWork, ApplicationSchedulingLoader, InMemoryApplicationUnitOfWork |
src/application_management.dart |
GetBacklogRequest, BacklogItemReadModel, BacklogQueryResult, GetProjectDefaultsRequest, ProjectDefaultsQueryResult, ProjectProfileDraft, ProjectProfileUpdate, LockedBlockDraft, LockedBlockUpdate, OwnerSettingsUpdateResult, OwnerSettingsUpdate, NoticeAcknowledgementResult, V1ApplicationManagementUseCases |
src/application_recovery.dart |
RunAppOpenRecoveryRequest, AppOpenRecoveryResult, V1AppOpenRecoveryUseCases |
src/models.dart |
DomainValidationException, Task, ProjectProfile, TimeInterval |
src/backlog.dart |
BacklogStalenessSettings, BacklogView |
src/child_tasks.dart |
ChildTaskEntry, ChildTaskBreakUpRequest, ChildTaskBreakUpResult, ChildTaskBreakUpService, ChildTaskView, ChildTaskCompletionResult, ChildTaskCompletionService, ChildTaskSummary |
src/document_mapping.dart |
DocumentMappingException, DocumentMetadata, PersistenceEnumMapping, TaskDocumentMapping, TaskStatisticsDocumentMapping, ProjectDocumentMapping, ProjectStatisticsDocumentMapping, LockedBlockRecurrenceDocumentMapping, LockedBlockDocumentMapping, LockedBlockOverrideDocumentMapping, TaskActivityDocumentMapping, OwnerSettingsDocumentMapping, BacklogStalenessDocumentMapping, NoticeAcknowledgementDocumentMapping, ApplicationOperationDocumentMapping, SchedulingSnapshotDocumentMapping, SchedulingWindowDocumentMapping, TimeIntervalDocumentMapping, SchedulingNoticeDocumentMapping, SchedulingChangeDocumentMapping, SchedulingOverlapDocumentMapping, TaskDocumentExtension, TaskStatisticsDocumentExtension, ProjectStatisticsDocumentExtension |
src/free_slots.dart |
ProtectedFreeSlotConflict, RequiredCommitmentScheduleResult, FreeSlotService |
src/locked_time.dart |
ClockTime, LockedBlockRecurrence, LockedBlock, LockedBlockOccurrence, LockedBlockOverride, LockedScheduleExpansion, expandLockedBlocksForDay, lockedSchedulingIntervalsForDay, trackCompletedDuringLockedHours, completedDuringLockedHoursMinutes |
src/occupancy_policy.dart |
OccupancyEntry, OccupancyPolicy |
src/persistence_contract.dart |
v1SchemaVersion, PersistenceDateTimeConvention, PersistenceCivilDateConvention, PersistenceWallTimeConvention, PersistenceEnumName, V1 document field-name classes |
src/project_statistics.dart |
ProjectStatistics, ProjectStatisticsApplicationResult, ProjectStatisticsAggregationService, ProjectSuggestionPolicy, ProjectSuggestion, ProjectSuggestionSet, ProjectDefaultResolution, ProjectSuggestionService |
src/quick_capture.dart |
QuickCaptureRequest, QuickCaptureResult, QuickCaptureService |
src/reminder_policy.dart |
EffectiveReminderProfile, ReminderDirective, ReminderPolicyService |
src/repositories.dart |
SchedulingStateSnapshot, InMemoryTaskRepository, InMemoryProjectRepository, InMemoryLockedBlockRepository, InMemorySchedulingSnapshotRepository |
src/scheduling_engine.dart |
SchedulingWindow, SchedulingInput, SchedulingChange, SchedulingOverlap, SchedulingNotice, SchedulingResult, SchedulingEngine |
src/task_actions.dart |
FlexibleTaskActionResult, PushDestinationResult, RequiredTaskActionResult, SurpriseTaskLogRequest, SurpriseTaskLogResult, FlexibleTaskActionService, RequiredTaskActionService, SurpriseTaskLogService |
src/task_lifecycle.dart |
TaskActivity, TaskActivityApplicationResult, TaskActivityAccountingService, TaskTransitionResult, TaskTransitionService |
src/task_statistics.dart |
TaskStatistics |
src/time_contracts.dart |
Clock, SystemClock, FixedClock, IdGenerator, SequentialIdGenerator, CivilDate, WallTime, TimeZoneResolutionOptions, ResolvedLocalDateTime, TimeZoneResolver, FixedOffsetTimeZoneResolver |
src/today_state.dart |
GetTodayStateRequest, TodayTimelineItem, TodayCompactState, TodayPendingNotice, TodayState, GetTodayStateQuery |
src/timeline_state.dart |
TimelineItem, CompactTimelineState, TimelineItemMapper |
Current model baseline
TaskType values:
flexibleinflexiblecriticallockedsurprisefreeSlot
TaskStatus values:
plannedactivecompletedmissedcancellednoLongerRelevantbacklog
Current notable model fields:
Task:id,title,projectId,type,status,priority,reward,difficulty,durationMinutes,scheduledStart,scheduledEnd,actualStart,actualEnd,completedAt,parentTaskId,backlogTags,reminderOverride,createdAt,updatedAt,statsProjectProfile:id,name,colorKey, default priority/reward/ difficulty/reminder profile/duration fields,archivedAtProjectStatistics: completion count, duration sample counts, completion-time buckets, pushes-before-completion totals, reward/difficulty distributions, and reminder-profile observationsTimeInterval:start,end, optionallabelTaskStatistics: skip/push/backlog/missed/cancelled/late/locked-hour, completed-after-shield, and push-before-completion counters. Parent/child completion patterns are carried as activity metadata.
Known baseline gaps to preserve as explicit later work:
TaskStatusdoes not includepushedorskipped; Chunk 11.2 resolves the status/event distinction.Taskdoes not yet have an explicit backlog-entered timestamp field.- Instant ranges still use
DateTime; locked recurrence dates, wall-clock rules, clocks, IDs, and timezone resolution are explicit Chunk 11.4 contracts.
Intentional API Changes After Baseline
Chunk 11.3 intentionally changed the public API:
- Added
DomainValidationCodeandDomainValidationException. - Added
Task.actualStart,Task.actualEnd, andTask.reminderOverride. - Added explicit
copyWithclear flags for nullable task fields. - Added
ProjectProfile.copyWith(clearDefaultDuration: true). - Changed several public value constructors from
constto runtime-validating constructors. - Public collection fields now expose unmodifiable snapshots instead of caller mutable collections.
Chunk 11.4 intentionally changed the public API:
- Added clock, ID, civil-date, wall-time, timezone resolver, DST policy, and
fixed-offset resolver contracts in
src/time_contracts.dart. - Exported
src/time_contracts.dartfromscheduler_core.dart. - Added
nonexistentLocalTimeandambiguousLocalTimevalidation codes. - Changed
ClockTimeto a backwards-compatible alias ofWallTime. - Changed locked block dates and override dates from
DateTimetoCivilDate. - Changed locked-time expansion helpers and override interval conversion to
require explicit
timeZoneIdandTimeZoneResolver. - Added injected
Clockboundaries to scheduling/action/child completion services and optionalIdGeneratorconvenience wrappers for quick capture and surprise logging. - Added civil-date and wall-time persistence conventions that store strings without timezone conversion.
Chunk 12.1 intentionally changed the public API:
- Added
src/occupancy_policy.dartand exported it fromscheduler_core.dart. - Added
OccupancyCategory,OccupancySource,OccupancyEntry, andOccupancyPolicy. - Added policy-derived
SchedulingInput.occupancyEntries,SchedulingInput.movablePlannedFlexibleTasks, andSchedulingInput.conflictReportingOccupancies. - Changed
SchedulingInput.blockedIntervalsto derive from the central occupancy policy rather than from duplicated task-type filters.
Chunk 12.2 intentionally changed the public API:
- Added
src/free_slots.dartand exported it fromscheduler_core.dart. - Added
RequiredCommitmentScheduleStatus,ProtectedFreeSlotConflict,RequiredCommitmentScheduleResult, andFreeSlotService. - Added validated Free Slot create/update helpers and a typed explicit required commitment scheduling result for protected-rest conflicts.
Chunk 12.3 intentionally changed the public API:
- Added optional
revealHiddenLockedDetailsparameters toSurpriseTaskLogService.logandSurpriseTaskLogService.logNew. - Defined
SurpriseTaskLogRequest.idas the idempotency key for retrying the same surprise log operation. - Surprise tasks with known time now populate
actualStartandactualEndin addition to the existing scheduled interval compatibility fields.
Chunk 12.4 intentionally changed the public API:
- Added stable scheduler code enums:
SchedulingOperationCode,SchedulingOutcomeCode,SchedulingIssueCode,SchedulingMovementCode, andSchedulingConflictCode. - Added
SchedulingResult.operationCodeandSchedulingResult.outcomeCode. - Added
SchedulingNotice.issueCode,SchedulingNotice.movementCode,SchedulingNotice.conflictCode, and immutableSchedulingNotice.parameters. - Changed
SchedulingNoticefrom aconstconstructor to a runtime constructor so notice parameters can be defensively copied. - Added a
SchedulingResultassertion that each notice uses at most one issue, movement, or conflict code.
Chunk 13.1 intentionally changed the public API:
- Added
src/task_lifecycle.dartand exported it fromscheduler_core.dart. - Added
TaskTransitionCode,TaskActivityCode,TaskTransitionOutcomeCode,TaskActivity,TaskTransitionResult, andTaskTransitionService. - Added
Task.completedAtandTask.copyWith(clearCompletion: true). - Added
TaskActivityDocumentFieldsandTaskDocumentFields.completedAt. - Added activity and transition outcome fields to flexible, push-destination, and required task action results.
- Routed flexible/required direct action services through the canonical transition service while preserving existing scheduling helper compatibility.
Chunk 13.2 intentionally changed the public API:
- Added
TaskActivityApplicationResultandTaskActivityAccountingService. - Added
TaskStatistics.completedAfterShieldCount,TaskStatistics.completedAfterPushCount, andTaskStatistics.totalPushesBeforeCompletion. - Added
TaskStatistics.recordPushesBeforeCompletion. - Added matching
TaskStatisticsDocumentFieldsconstants and document mapping. - Added
appliedActivityIdsandlockedIntervalsparameters toTaskTransitionService.apply. - Added actual/locked interval parameters to flexible and required action completion paths.
- Added
SurpriseTaskLogResult.activitiesand routed surprise completion through the same accounting boundary.
Chunk 13.3 intentionally changed the public API:
- Added
ChildTaskBreakUpRequest,ChildTaskBreakUpResult, andChildTaskBreakUpService. - Added
activitiesandtransitionOutcomeCodestoChildTaskCompletionResult. - Added
transitionServiceinjection toChildTaskCompletionService. - Added
operationId, existing-activity, and applied-activity parameters to child and parent completion methods. - Added
ChildTaskCompletionService.completeParentFromChild. - Routed parent/child completion through canonical lifecycle transitions and parent/child completion metadata.
Chunk 13.4 intentionally changed the public API:
- Added
src/project_statistics.dartand exported it fromscheduler_core.dart. - Added project-statistics enums, aggregate model, exactly-once aggregation result/service, suggestion policy/result types, and configured-default resolution.
- Added
ProjectStatisticsDocumentFields,ProjectStatisticsDocumentMapping, andProjectStatisticsDocumentExtension. - Added project-statistics field sets to the persistence field registry.
- Expanded completion activity metadata with duration, reward, difficulty, and reminder-profile observations for project aggregation.
Chunk 13.5 intentionally changed the public API:
- Added
src/reminder_policy.dartand exported it fromscheduler_core.dart. - Added reminder directive action/reason enums and effective-profile source enum.
- Added
EffectiveReminderProfile,ReminderDirective, andReminderPolicyService. - Added deterministic effective-profile resolution using task override, project configured default, then fallback.
- Added typed reminder directives for normal delivery, suppression, deferral, and required-task acknowledgement, including protected Free Slot suppression.
Chunk 14.1 intentionally changed the public API:
- Added
src/application_layer.dartand exported it fromscheduler_core.dart. - Added application operation context, owner time-zone context, typed result/failure contracts, and expected application/persistence exceptions.
- Added activity, project-statistics, owner-settings, operation-record, and unit-of-work repository contracts for application orchestration.
- Added
OwnerSettings,ApplicationOperationRecord,ApplicationSchedulingLoader, andInMemoryApplicationUnitOfWork. - Added in-memory staged transaction behavior with exactly-once operation records and rollback on typed failures or persistence failures.
Chunk 14.2 intentionally changed the public API:
- Added
src/today_state.dartand exported it fromscheduler_core.dart. - Added
GetTodayStateQuery,GetTodayStateRequest,TodayState,TodayTimelineItem,TodayCompactState, andTodayPendingNotice. - Added
TodayTimelineItemSourcefor stable task-vs-overlay source metadata. - Added
ApplicationUnitOfWork.readso application queries can access repositories without creating operation records. - Added an optional
occurrenceDateparameter toTimelineItemMapper.fromLockedOccurrenceso Today read models can produce date-stable locked overlay IDs. - Updated compact next-flexible selection so the current flexible item is not
also returned as
nextFlexibleItem.
Chunk 14.3 intentionally changed the public API:
- Added
src/application_commands.dartand exported it fromscheduler_core.dart. - Added
ApplicationCommandCode,ApplicationChildTaskDraft,ApplicationCommandReadHint,ApplicationCommandResult, andV1ApplicationCommandUseCases. - Added atomic V1 commands for quick capture, backlog scheduling, flexible push/backlog/completion, required task actions, surprise logging, protected Free Slot create/update/remove, child break-up, and parent/child completion.
- Command results return changed tasks, persisted activities, project aggregate updates, scheduler notices/changes/overlaps, child ids, and read refresh hints.
- Application command failures use stable
ApplicationFailureCodevalues for not found, stale revision, no slot, validation, persistence, and duplicate operation outcomes.
Chunk 14.4 intentionally changed the public API:
- Added
src/application_management.dartand exported it fromscheduler_core.dart. - Added management query/command contracts for backlog, project defaults, project create/update/archive, locked-block create/update/archive, one-day locked overrides, owner settings updates, and notice acknowledgement.
- Added
ProjectProfile.archivedAtandLockedBlock.archivedAtsoft-archive fields. - Added
NoticeAcknowledgementRecordandNoticeAcknowledgementRepository. - Added stable notice IDs to
TodayPendingNoticeand Today-state filtering for acknowledged notices.
Chunk 14.5 intentionally changed the public API:
- Added
src/application_recovery.dartand exported it fromscheduler_core.dart. - Added
AppOpenRecoveryOutcome,RunAppOpenRecoveryRequest,AppOpenRecoveryResult, andV1AppOpenRecoveryUseCases. - Added
InMemoryApplicationUnitOfWork.currentSchedulingSnapshotsfor application/recovery contract tests.
Chunk 15.2 intentionally changed the public API:
- Replaced legacy enum
.namedocument encoding indocument_mapping.dartwith explicit stable V1 code tables throughPersistenceEnumMapping. - Added
DocumentMappingFailureCode,DocumentMappingException, andDocumentMetadata. - Expanded document codecs to every V1 persisted entity: project profiles, project statistics, locked blocks/overrides, activities, owner settings, notice acknowledgements, operation records, scheduling snapshots, notices, changes, overlaps, windows, intervals, civil dates, and wall times.
- Changed top-level document
toDocumenthelpers/extensions to require owner scope and V1 metadata where the domain model does not carry it directly. - Expanded
persistence_contract.dartwithv1SchemaVersion, common document fields, and V1 field sets for every persisted repository entity.
Chunk 15.3 intentionally changed the public API:
- Added
src/document_migration.dartand exported it fromscheduler_core.dart. - Added
V1DocumentMigrationServicefor pure Dart V0-to-V1 migration of task, project, locked block, and locked override documents. - Added typed migration surface area:
DocumentMigrationEntity,DocumentMigrationStatus,DocumentMigrationFailureCode,DocumentMigrationNoteCode,DocumentMigrationProvenance,DocumentMigrationNote,DocumentMigrationReport, andDocumentMigrationResult. - Migration results expose
document,isSuccess, andshouldWriteso persistence adapters can dry-run migrations and refuse to overwrite unreadable source documents. - Legacy backlog tasks now carry explicit provenance when
backlogEnteredAtis approximated fromcreatedAt.
Chunk 15.4 intentionally changed the public API:
- Added adapter-neutral repository conflict/paging/record contracts:
RepositoryFailureCode,RepositoryFailure,RepositoryMutationResult,RepositoryRecord,RepositoryPageRequest,RepositoryPage, andBacklogCandidateQuery. - Expanded
TaskRepositorywith owner, project, parent, backlog-candidate, local-day/window, record/revision, insert, and compare-and-set save methods. - Expanded
ProjectRepositoryandLockedBlockRepositorywith owner-scoped paged queries, revision records, compare-and-set saves, duplicate insert failures, archive methods, and date-scoped locked override lookup. - Expanded application-layer repository interfaces for task activity owner queries/appends, project statistics/settings revision saves, notice acknowledgement insert/paging, and idempotent operation lookup/insert.
- In-memory unit-of-work repositories now track owner/revision metadata in the staged transaction state.
Repository contracts
The current repository surface is pure Dart and in-memory only:
- Task repository behavior is represented by
InMemoryTaskRepository. - Project repository behavior is represented by
InMemoryProjectRepository. - Locked block repository behavior is represented by
InMemoryLockedBlockRepository. - Snapshot repository behavior is represented by
InMemorySchedulingSnapshotRepository. - Application transaction behavior is represented by
InMemoryApplicationUnitOfWork. - Application read-query behavior uses
ApplicationUnitOfWork.read, which stages repository access without committing operation records.
Future MongoDB adapter work must remain behind repository interfaces and must not import MongoDB APIs into the scheduling core.