Files
obsidian-notes/.omx/plans/autopilot-impl.md
2026-05-07 01:13:24 +08:00

2.8 KiB

Implementation Plan: InBox → Gantt Nightly Sync

Source of Truth

  • Spec: .omx/specs/deep-interview-scheduled-task-git-sync-gant.md
  • Context: .omx/context/scheduled-task-git-sync-gant-20260429T161523Z.md

Architecture

Windows Task Scheduler (22:30 daily)
  └─ powershell.exe -ExecutionPolicy Bypass -File "sync-inbox-to-gantt.ps1"
       ├─ 1. Git sync (pull, add, commit, push)
       ├─ 2. Gantt bidirectional mirror (InBox ↔ Gantt "待看:*" tasks)
       └─ 3. Notifications (push failure toast)

Files to Create

File Path Purpose
Sync script C:\Users\Zane\Desktop\Gantt App\sync-inbox-to-gantt.ps1 Main nightly script
Setup script C:\app\unity_project\obsidian-notes\.omx\setup-task.ps1 One-shot Task Scheduler registration

Algorithm

Phase A — Git Sync

  1. cd C:\app\unity_project\obsidian-notes
  2. git pull — if conflict → git merge --abort → exit git phase
  3. git add PARA/ InBox/
  4. git diff --cached --quiet → if no changes, skip commit
  5. git commit -m "auto nightly sync"
  6. git push — if failure → Show-Toast "Git push failed" → continue

Phase B — Gantt Mirror

  1. Call gantt-app.exe --cli list-tasks → parse JSON
    • If Gantt not running (process error / non-zero exit) → skip phase B
  2. Extract "待看:*" tasks → set {baseName} from task name
  3. Scan InBox\*.md → set {baseName} from filename (strip .md)
  4. Add: For each InBox file NOT in Gantt → add-task --name "待看:{baseName}" --start {today} --end "" --progress 0
  5. Delete: For each Gantt "待看:*" NOT in InBox → delete-task --id {id}
  6. Existing matches: No-op (already correct)

Error Handling Matrix

Failure Behavior
Git pull conflict git merge --abort, skip rest of git phase
Git push fails PowerShell toast notification, continue to Gantt phase
Gantt CLI not found Write-Error, exit 1
Gantt not running Skip Gantt phase silently
Gantt add/delete fails Write-Error for that item, continue
Script not in gantt dir Resolve gantt dir from script location dynamically

Task Scheduler Registration

$action = New-ScheduledTaskAction -Execute "powershell.exe" `
  -Argument "-ExecutionPolicy Bypass -File `"C:\Users\Zane\Desktop\Gantt App\sync-inbox-to-gantt.ps1`""
$trigger = New-ScheduledTaskTrigger -Daily -At 22:30
Register-ScheduledTask -TaskName "InBox-Gantt-Nightly-Sync" `
  -Action $action -Trigger $trigger -RunLevel Highest `
  -Description "Nightly sync Obsidian InBox to Gantt tasks with git auto-commit"

Implementation Tasks

  1. Create sync-inbox-to-gantt.ps1 — the main sync script with all logic
  2. Create setup-task.ps1 — registers the scheduled task
  3. Manual dry-run test — run script manually, verify Gantt tasks created