86 lines
4.0 KiB
Markdown
86 lines
4.0 KiB
Markdown
# Spec: Deep Interview — scheduled-task-git-sync-gant
|
||
|
||
## Metadata
|
||
- **Profile:** Standard
|
||
- **Rounds:** 12
|
||
- **Final Ambiguity:** 0.16
|
||
- **Threshold:** 0.20 (met)
|
||
- **Type:** Brownfield
|
||
- **Context Snapshot:** `.omx/context/scheduled-task-git-sync-gant-20260429T161523Z.md`
|
||
|
||
## Clarity Breakdown
|
||
|
||
| Dimension | Weight | Score | Notes |
|
||
|-----------|--------|-------|-------|
|
||
| Intent | 0.25 | 0.85 | InBox notes visible in Gantt chart without manual steps |
|
||
| Outcome | 0.20 | 0.85 | New → added, deleted → removed, existing → de-duplicated |
|
||
| Scope | 0.20 | 0.85 | PARA/InBox git only; "待看" type only; .md files only |
|
||
| Constraints | 0.15 | 0.80 | Win Task Scheduler; gantt-app.exe; toast; abort on conflict; no logs |
|
||
| Success | 0.10 | 0.80 | At 22:30, Gantt shows "待看:xxx" for all InBox .md files |
|
||
| Context | 0.10 | 0.90 | Well-understood repo and tooling |
|
||
| **Weighted** | | **0.84** | Ambiguity = 0.16 |
|
||
|
||
## Intent
|
||
用户希望每晚 22:30 自动将 InBox 中的待读笔记同步到甘特图软件中,消除手动搬运步骤。
|
||
|
||
## Desired Outcome
|
||
- 甘特图出现所有 InBox 中 `.md` 文件对应的 "待看:{文件名}" 任务
|
||
- 已存在的不重复添加(更新)
|
||
- InBox 中已删除的文件对应任务也从甘特图中移除
|
||
- Git 自动拉取/提交/推送 PARA/ 和 InBox/ 目录
|
||
|
||
## In-Scope
|
||
1. 每晚 22:30 通过 Windows Task Scheduler 触发
|
||
2. `git pull && git add PARA/ InBox/ && git commit -m "auto nightly sync" && git push`
|
||
3. 扫描 InBox/*.md,为每个文件在甘特图创建/更新 "待看:{文件名}" 任务
|
||
4. 检测甘特图中已存在的 "待看:xxx" 任务,若 InBox 中对应文件已删除则移除
|
||
5. 去重:已在甘特图中的任务不重复创建,仅更新
|
||
6. 脚本文件与 gantt-app.exe 放在同一目录
|
||
|
||
## Out-of-Scope / Non-goals
|
||
1. 不操作 PARA/ 和 InBox/ 之外的任何文件
|
||
2. 不创建 "待看" 之外的甘特图任务类型
|
||
3. 不处理非 `.md` 文件
|
||
|
||
## Decision Boundaries (OMX 可自行决定)
|
||
- 具体用哪个 Windows 通知 API(PowerShell toast / `msg` / 其他)
|
||
- Git commit 消息的具体格式
|
||
- 脚本语言选择(bash / PowerShell / 混合)
|
||
- 甘特图 CLI 的 command/subcommand 细节(从 gant-cli skill 获取)
|
||
|
||
## Constraints
|
||
- **触发机制:** Windows Task Scheduler(非 Claude session 依赖)
|
||
- **甘特图 CLI:** `gantt-app.exe`
|
||
- **脚本位置:** 与 gantt-app.exe 同目录
|
||
- **Git 冲突:** abort(保留本地)
|
||
- **Push 失败:** Windows 右下角 toast 通知
|
||
- **甘特图未运行:** 静默跳过,次日重试
|
||
- **日志:** 不需要
|
||
- **重名任务:** 更新而非跳过
|
||
- **持久化:** 无 Claude session 依赖(系统级调度)
|
||
|
||
## Testable Acceptance Criteria
|
||
- [ ] 晚上 22:30,打开甘特图能看到所有 InBox/*.md 对应的 "待看:{文件名}" 任务
|
||
- [ ] 在 InBox 中新增一个 .md 文件 → 下次执行后甘特图出现对应任务
|
||
- [ ] 在 InBox 中删除一个 .md 文件 → 下次执行后甘特图移除对应任务
|
||
- [ ] 非 .md 文件被忽略
|
||
- [ ] PARA/ 和 InBox/ 外文件不受 git 影响
|
||
- [ ] Git 冲突时 abort 不丢数据
|
||
- [ ] 甘特图未运行时脚本不崩溃
|
||
|
||
## Assumptions Exposed + Resolved
|
||
1. **gantt-app.exe CLI 能力:** 假设支持 add/delete/list 操作 → 实现时通过 gant-cli skill 确认
|
||
2. **Session-only vs durable:** 初始误解为 Claude session 调度 → 澄清为系统级 Windows Task Scheduler
|
||
3. **文件处理后:** 最初未明确 → 澄清为保留文件、双向同步
|
||
|
||
## Pressure-Pass Findings
|
||
- Round 2 追问了具体格式("到底长什么样")→ 从模糊的"处理"收缩到 `待看:{标题}`
|
||
- Round 8 追问了 session-only 假设 → 推翻了 CronCreate 方案,转向系统级 Task Scheduler
|
||
- Round 11 追问了明确的 non-goals → 三条边界锁定
|
||
|
||
## Handoff Contract
|
||
This spec is the requirements source of truth. Downstream execution must preserve:
|
||
- Intent, non-goals, decision boundaries, and acceptance criteria
|
||
- The bidirectional mirror model (InBox ↔ Gantt)
|
||
- System-level scheduling (not Claude session-dependent)
|