@@ -949,9 +949,12 @@ export class TaskService {
949949 if ( updates . recurrence !== undefined && updates . recurrence !== originalTask . recurrence ) {
950950 // Recurrence rule changed, calculate new scheduled date
951951 const tempTask : TaskInfo = { ...originalTask , ...updates } ;
952- const nextScheduledDate = updateToNextScheduledOccurrence ( tempTask ) ;
953- if ( nextScheduledDate ) {
954- recurrenceUpdates . scheduled = nextScheduledDate ;
952+ const nextDates = updateToNextScheduledOccurrence ( tempTask , this . plugin . settings . maintainDueDateOffsetInRecurring ) ;
953+ if ( nextDates . scheduled ) {
954+ recurrenceUpdates . scheduled = nextDates . scheduled ;
955+ }
956+ if ( nextDates . due ) {
957+ recurrenceUpdates . due = nextDates . due ;
955958 }
956959
957960 // Add DTSTART to recurrence rule if it's missing (scenario 1: editing recurrence rule)
@@ -1230,16 +1233,20 @@ export class TaskService {
12301233 }
12311234
12321235 // Update scheduled date to next uncompleted occurrence
1233- const nextScheduledDate = updateToNextScheduledOccurrence ( updatedTask ) ;
1234- if ( nextScheduledDate ) {
1235- updatedTask . scheduled = nextScheduledDate ;
1236+ const nextDates = updateToNextScheduledOccurrence ( updatedTask , this . plugin . settings . maintainDueDateOffsetInRecurring ) ;
1237+ if ( nextDates . scheduled ) {
1238+ updatedTask . scheduled = nextDates . scheduled ;
1239+ }
1240+ if ( nextDates . due ) {
1241+ updatedTask . due = nextDates . due ;
12361242 }
12371243
12381244 // Step 2: Persist to file
12391245 await this . plugin . app . fileManager . processFrontMatter ( file , ( frontmatter ) => {
12401246 const completeInstancesField = this . plugin . fieldMapper . toUserField ( 'completeInstances' ) ;
12411247 const dateModifiedField = this . plugin . fieldMapper . toUserField ( 'dateModified' ) ;
12421248 const scheduledField = this . plugin . fieldMapper . toUserField ( 'scheduled' ) ;
1249+ const dueField = this . plugin . fieldMapper . toUserField ( 'due' ) ;
12431250 const recurrenceField = this . plugin . fieldMapper . toUserField ( 'recurrence' ) ;
12441251
12451252 // Ensure complete_instances array exists
@@ -1268,6 +1275,12 @@ export class TaskService {
12681275 if ( updatedTask . scheduled ) {
12691276 frontmatter [ scheduledField ] = updatedTask . scheduled ;
12701277 }
1278+
1279+ // Update due date if it changed
1280+ if ( updatedTask . due ) {
1281+ frontmatter [ dueField ] = updatedTask . due ;
1282+ }
1283+
12711284
12721285 frontmatter [ dateModifiedField ] = updatedTask . dateModified ;
12731286 } ) ;
@@ -1282,6 +1295,9 @@ export class TaskService {
12821295 if ( updatedTask . scheduled !== freshTask . scheduled ) {
12831296 expectedChanges . scheduled = updatedTask . scheduled ;
12841297 }
1298+ if ( updatedTask . due !== freshTask . due ) {
1299+ expectedChanges . due = updatedTask . due ;
1300+ }
12851301 await this . plugin . cacheManager . waitForFreshTaskData ( file , expectedChanges ) ;
12861302 }
12871303 await this . plugin . cacheManager . updateTaskInfoInCache ( freshTask . path , updatedTask ) ;
0 commit comments