From d46b4f215652aea164a06610a67c0959db851961 Mon Sep 17 00:00:00 2001 From: Sorra Date: Wed, 11 Mar 2026 15:22:42 -0700 Subject: [PATCH 1/4] WL-0MMMFYJTO0B4H4UV: doctor --fix: auto-convert completed+in_progress -> completed+in_review (safe fix) --- src/commands/doctor.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/commands/doctor.ts b/src/commands/doctor.ts index 2682907..cb7f870 100644 --- a/src/commands/doctor.ts +++ b/src/commands/doctor.ts @@ -211,6 +211,21 @@ export default function register(ctx: PluginContext): void { // fall back to hard-coded default } + // Auto-fix: if an item is `completed` with stage `in_progress`, convert stage -> `in_review`. + // This handles a common mismatch where completed items retained an in-progress stage. + for (const f of findings) { + try { + const ctx = (f && (f as any).context) || {}; + if (f.type === 'incompatible-status-stage' && ctx.status === 'completed' && ctx.stage === 'in_progress') { + const current = (f.proposedFix && typeof f.proposedFix === 'object') ? (f.proposedFix as Record) : {}; + (f as any).proposedFix = Object.assign({}, current, { stage: 'in_review' }); + (f as any).safe = true; + } + } catch (e) { + // ignore + } + } + // Normalize certain findings: if an invalid/empty stage can be safely defaulted, mark safe for (const f of findings) { try { From c2fdda2967addcd976cce3b7f670680b99644dbb Mon Sep 17 00:00:00 2001 From: Sorra Date: Wed, 11 Mar 2026 15:33:05 -0700 Subject: [PATCH 2/4] WL-0MMMFYJTO0B4H4UV: doctor --fix: also auto-convert completed+intake_complete -> completed+in_review --- src/commands/doctor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/doctor.ts b/src/commands/doctor.ts index cb7f870..8a3ca90 100644 --- a/src/commands/doctor.ts +++ b/src/commands/doctor.ts @@ -216,7 +216,7 @@ export default function register(ctx: PluginContext): void { for (const f of findings) { try { const ctx = (f && (f as any).context) || {}; - if (f.type === 'incompatible-status-stage' && ctx.status === 'completed' && ctx.stage === 'in_progress') { + if (f.type === 'incompatible-status-stage' && ctx.status === 'completed' && (ctx.stage === 'in_progress' || ctx.stage === 'intake_complete')) { const current = (f.proposedFix && typeof f.proposedFix === 'object') ? (f.proposedFix as Record) : {}; (f as any).proposedFix = Object.assign({}, current, { stage: 'in_review' }); (f as any).safe = true; From 3951d903c6b7f4a5fbb3f4803f91d9fe6acf443b Mon Sep 17 00:00:00 2001 From: Sorra Date: Wed, 11 Mar 2026 15:35:24 -0700 Subject: [PATCH 3/4] WL-0MMMFYJTO0B4H4UV: doctor --fix: also auto-convert completed+idea -> completed+in_review --- src/commands/doctor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/doctor.ts b/src/commands/doctor.ts index 8a3ca90..8d1a1db 100644 --- a/src/commands/doctor.ts +++ b/src/commands/doctor.ts @@ -216,7 +216,7 @@ export default function register(ctx: PluginContext): void { for (const f of findings) { try { const ctx = (f && (f as any).context) || {}; - if (f.type === 'incompatible-status-stage' && ctx.status === 'completed' && (ctx.stage === 'in_progress' || ctx.stage === 'intake_complete')) { + if (f.type === 'incompatible-status-stage' && ctx.status === 'completed' && (ctx.stage === 'in_progress' || ctx.stage === 'intake_complete' || ctx.stage === 'idea')) { const current = (f.proposedFix && typeof f.proposedFix === 'object') ? (f.proposedFix as Record) : {}; (f as any).proposedFix = Object.assign({}, current, { stage: 'in_review' }); (f as any).safe = true; From 6e6e5ecc809d75f61e5d2117ed9ae51e8a5f956b Mon Sep 17 00:00:00 2001 From: Sorra Date: Wed, 11 Mar 2026 15:38:20 -0700 Subject: [PATCH 4/4] WL-0MMMFYJTO0B4H4UV: doctor --fix: auto-convert deleted+in_progress -> deleted+done --- src/commands/doctor.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/commands/doctor.ts b/src/commands/doctor.ts index 8d1a1db..27a82cd 100644 --- a/src/commands/doctor.ts +++ b/src/commands/doctor.ts @@ -211,16 +211,23 @@ export default function register(ctx: PluginContext): void { // fall back to hard-coded default } - // Auto-fix: if an item is `completed` with stage `in_progress`, convert stage -> `in_review`. - // This handles a common mismatch where completed items retained an in-progress stage. + // Auto-fix rules for common incompatible status/stage combos for (const f of findings) { try { const ctx = (f && (f as any).context) || {}; + // completed + (in_progress|intake_complete|idea) -> completed + in_review if (f.type === 'incompatible-status-stage' && ctx.status === 'completed' && (ctx.stage === 'in_progress' || ctx.stage === 'intake_complete' || ctx.stage === 'idea')) { const current = (f.proposedFix && typeof f.proposedFix === 'object') ? (f.proposedFix as Record) : {}; (f as any).proposedFix = Object.assign({}, current, { stage: 'in_review' }); (f as any).safe = true; } + + // deleted + in_progress -> deleted + done + if (f.type === 'incompatible-status-stage' && ctx.status === 'deleted' && ctx.stage === 'in_progress') { + const current = (f.proposedFix && typeof f.proposedFix === 'object') ? (f.proposedFix as Record) : {}; + (f as any).proposedFix = Object.assign({}, current, { stage: 'done' }); + (f as any).safe = true; + } } catch (e) { // ignore }