30 KiB
V1 Public API Baseline
Status: Captured during Block 11.1.
Starting commit: 775c2ed406f03a73a9b0ca621dea5b4482468616
Public import:
import 'package: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.
Chunk 15.5 intentionally changed the public API:
- Added V1 collection/index contract types and constants:
PersistenceCollections,PersistenceIndexDirection,PersistenceIndexField,PersistenceIndexSpec,RepositoryQueryNames, andPersistenceIndexCatalog. - Added bounded payload/retention guard surface:
PersistencePayloadLimits,PersistenceGuardResult, andPersistencePayloadGuard. - Added repository integrity failure codes for invalid revisions and owner mismatches.
- Added
V1_BLOCK_16_REPOSITORY_ADAPTER_CHECKLIST.mdfor the former document adapter implementation prerequisites, archived after the SQLite-first pivot.
Chunk 19.1 intentionally changed the public/package API:
- Rehomed the core library under
packages/scheduler_corewith public importpackage:scheduler_core/scheduler_core.dart. - Added shared repository value objects exported from
scheduler_core:OwnerId,Revision,PageRequest, andPage<T>. - Added
packages/scheduler_persistencewith domain-only repository interfaces for tasks, projects, locked blocks, settings, and schedule snapshots. - Added
RepositoryFailurevariants, sealedEither<L, R>, andRepoResult<T>for expected repository success/failure paths.
Chunk 19.2 intentionally changed the public/package API:
- Added
packages/scheduler_persistence_memorywithInMemoryTaskRepository,InMemoryProjectRepository,InMemoryLockedBlockRepository,InMemorySettingsRepository, andInMemoryScheduleSnapshotRepository. - Added package entry points
package:scheduler_persistence_memory/persistence_memory.dartandpackage:scheduler_persistence_memory/memory.dart. - Added shared adapter conformance test surface
runRepositoryComplianceTests()andRepositoryComplianceFactoriesunderpackages/scheduler_persistence/test/repo_conformance.dart.
Chunk 20.1 intentionally changed the public/package API:
- Added
packages/scheduler_persistence_sqlitewith Drift-backed schema package entry pointpackage:scheduler_persistence_sqlite/sqlite.dart. - Added
SchedulerDbwith schema version 1 and generated Drift table/data classes fortasks,projects,locked_blocks,locked_overrides,settings, andsnapshots. - Added generated accessor classes:
TaskDao,ProjectDao,LockedBlockDao,SettingsDao, andSnapshotDao.
Chunk 20.2 intentionally changed the public/package API:
- Added SQLite repository implementations exported from
package:scheduler_persistence_sqlite/sqlite.dart:SqliteTaskRepository,SqliteProjectRepository,SqliteLockedBlockRepository,SqliteSettingsRepository, andSqliteScheduleSnapshotRepository. - Added SQLite adapter conformance and write-latency tests under
packages/scheduler_persistence_sqlite/test/.
Chunk 21.1 intentionally changed the public/package API:
- Added
packages/scheduler_notificationswith package entry pointspackage:scheduler_notifications/notifications.dartandpackage:scheduler_notifications/scheduler_notifications.dart. - Added notification abstraction types:
NotificationRequest,NotificationFeedbackType,NotificationFeedback,NotificationAdapter, andFakeNotificationAdapter.
Chunk 22.1 intentionally changed the public/package API:
- Added
packages/scheduler_notifications_desktopwith package entry pointspackage:scheduler_notifications_desktop/desktop_notifications.dartandpackage:scheduler_notifications_desktop/scheduler_notifications_desktop.dart. - Added desktop notification types:
DesktopNotificationPlatform,DesktopNotificationBackend,DesktopNotificationAdapter,StdoutNotificationBackend, and the IO backends for Linux/macOS.
Chunk 23.1 intentionally changed the public/package API:
- Added
packages/scheduler_exportwith package entry pointspackage:scheduler_export/export.dartandpackage:scheduler_export/scheduler_export.dart. - Added readable export contracts and orchestration types:
ExportContext,ExportWriter,ExportWriterFactory,ExportWriterRegistry,ExportController,ExportException, andExportRepositoryException. - Added sink-backed writer implementations
JsonExportWriterandCsvExportWriter.
Chunk 24.1 intentionally changed the public/package API:
- Added
packages/scheduler_backupwith package entry pointspackage:scheduler_backup/backup.dartandpackage:scheduler_backup/scheduler_backup.dart. - Added encrypted backup functions
createEncryptedBackup,restoreEncryptedBackup,defaultSchedulerSqliteFile, anddefaultSchedulerBackupDirectory. - Added backup constants
defaultSchedulerDirectoryName,defaultSchedulerDatabaseFileName, anddefaultSchedulerBackupDirectoryName. - Added backup exceptions
BackupExceptionandBackupDecryptionException.
Chunk 24.2 intentionally changed the public/package API:
- Added
packages/scheduler_export_jsonwith package entry pointspackage:scheduler_export_json/export_json.dartandpackage:scheduler_export_json/scheduler_export_json.dart. - Added readable writer factory
readableExportWriterRegistry. - Added concrete readable export writers
JsonExportWriterandCsvExportWriter. - Added CLI export command
bin/export.dart.
Chunk 25.1 intentionally changed the workspace test surface:
- Added test-only package
packages/scheduler_integration_tests. - Added integration harness
integration/scheduler_flow_test.dartcovering scheduler placement, fake notification scheduling, SQLite save, and reload.
Chunk 26.1 intentionally changed the verification surface:
- Added executable
scripts/test.shas the required analyze/test/coverage gate. - Added
tool/check_coverage.dartfor LCOV threshold enforcement. - Added shared notification adapter contract test helper
packages/scheduler_notifications/test/notification_adapter_contract.dart. - Desktop notification adapter cancellation now normalizes ids before backend cancellation.
Chunk 27.1 intentionally changed the dev/CI surface:
- Added
scripts/dev.dartfor local build-runner watch plus Flutter desktop launch with a SQLite path define. - Added
scripts/test.dartfor cross-platform coverage collection and LCOV combination. - Added
scripts/bootstrap_dev.shandscripts/dev.shshell entry points for agent-compatible setup and desktop development. - Added GitHub Actions test matrix in
.github/workflows/ci.yml.
Chunk 27.2 intentionally changed the packaging surface:
- Added
scripts/build.dartfor platform-specific Flutter desktop packaging. - Added
scripts/package_release.shshell entry point for release packaging. - Added tagged CI release artifact upload steps.
- Replaced README content with workspace test, dev, packaging, and prerequisite instructions.
Chunk 28.1 intentionally changed the documentation verification surface:
- Added
tool/check_docs.dartto generate package docs and fail on warnings. - Added generated docs upload under the CI artifact step.
- Added generated
doc/api/output to.gitignore. - Fixed unresolved public API documentation references in core and export packages.
Chunk 29.1 intentionally changed the UI surface:
- Added provisional Flutter app
apps/focus_flow_flutteroutside the root Dart workspace. - Added app-local path dependency on
packages/scheduler_core. - Added
FocusFlowApp,DemoSchedulerComposition,SchedulerHome,TodayPane, andBacklogPanein the Flutter app. - Added widget test coverage for rendering Today and Backlog read-model data.
Chunk 29.2 intentionally changed the UI surface:
- Split the Flutter shell into
app.dart,composition/,controllers/,theme/, andwidgets/. - Added
UiReadController<T>,ApplicationReadController<T>, andSchedulerReadState<T>variants for loading, data, empty, and typed failure states. - Added
SchedulerVisualTokensfor centralized project/task/reward/difficulty and staleness visual mappings. - Added component widgets for Today, Backlog, compact panels, timeline rows, backlog rows, notice banners, empty states, and failure retry states.
- Expanded Flutter widget coverage to 4 tests.
Repository contracts
The current repository surface is pure Dart and adapter-backed:
- Core legacy repository fakes remain in
scheduler_corefor existing domain services and tests. - The Block 19 repository abstraction lives in
scheduler_persistence. - The Block 19 conformance-tested memory adapter lives in
scheduler_persistence_memory. - The Block 20 conformance-tested SQLite adapter lives in
scheduler_persistence_sqlite. - Application transaction behavior is represented by
InMemoryApplicationUnitOfWork. - Application read-query behavior uses
ApplicationUnitOfWork.read, which stages repository access without committing operation records.
Future SQLite adapter work must remain behind repository interfaces and must not import storage APIs into the scheduling core.