makecindy / makecindy/cindy

自动化排队输入被丢弃时会误报为用户暂停或删除任务

Open
#3,581 2 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
TypeScript
Stars
2.7k
Forks
401
Avg merge
21h 48m
Merged PRs (30d)
776

Description

**提交人**: 匿名
**客户端版本**: 0.1.67

---

## 现象

一个绑定到已有任务的周期自动化发生重叠运行:前一轮仍在执行时,下一轮已触发并等待。前一轮结束后,下一轮输入进入排队状态;几乎同时,用户向同一任务发送了普通消息。随后自动化输入在实际派发前被移除,运行历史却显示:

`cancelled by user (schedule deleted or paused)`

用户没有暂停、删除或取消该自动化;自动化始终保持启用,后续运行也能正常成功。

## 可能复现步骤

目前尚未稳定复现,以下是根据本次事件整理的高风险路径:

1. 创建一个绑定到已有任务的周期自动化。
2. 让一次运行持续到下一次计划触发时间,形成同一自动化的重叠运行或排队等待。
3. 在前一轮刚结束、后一轮自动化输入刚进入队列时,立即向绑定任务发送普通消息。
4. 查看后一轮的运行历史。

## 期望行为

- 自动化输入应继续排队,或以真实的队列丢弃/竞争原因失败、顺延。
- 只有确实收到暂停或删除操作、且对应 AbortSignal 已触发时,才显示“用户暂停或删除任务”。
- 运行历史应保留可诊断的真实失败原因。

## 实际行为

排队输入在派发前被移除后,运行被记为 `aborted`,真实错误被覆盖成“用户暂停或删除任务”。这会误导用户,并隐藏真正的队列竞争或内部清理原因。

## 复现频率

目前观察到 1 次;尚无稳定复现方法。问题发生在重叠运行结束与人工消息进入同一任务的毫秒级竞争窗口。

## 已尝试

- 核对自动化状态:事发期间始终为启用,配置更新时间没有变化。
- 核对运行记录:前一轮成功,异常轮被记为 aborted,后续轮次继续成功。
- 核对消息记录:异常轮的自动化输入从未落成用户消息,说明它在派发前被移除。
- 排除任务清空、应用重启、锁屏和手机控制:这些事件不存在,或发生在异常结束之后。
- 只读检查了事发客户端打包代码与当前仓库中的对应实现。

## 脱敏诊断摘要

用户已同意公开以下脱敏摘要:

- 相对时间线:
- T0:前一轮运行完成。
- T0 + 约 36ms:后一轮自动化输入进入队列。
- T0 + 约 51ms:同一任务收到人工消息。
- T0 + 约 114ms:人工消息开始执行。
- T0 + 约 25.5s:自动化输入在派发前被移除。
- `apps/desktop/src/main/scheduler-host/runner.ts` 中,排队项触发 `onDiscarded` 时统一生成包含 `aborted` 的错误文本。
- `packages/maker-scheduler/src/engine/scheduler.ts` 的 agent 模式除检查真实 `AbortSignal` 外,还使用 `/abort/i` 匹配错误文本。
- 文本命中后,原始错误会被覆盖为固定文案 `cancelled by user (schedule deleted or paused)`。
- Stop、单项删除、clearSession、策略 hook 拦截、队列合并等多种原因都会经过相同的 discard 回调,但当前日志没有记录 discard 的结构化原因,因此无法从现有证据确定最终调用入口。
- 本次最符合的触发条件是:重叠运行排队与同一任务人工输入之间的队列接管竞争;具体丢弃入口仍需增加埋点或稳定复现后确认。

## 建议

1. 取消基于错误文本的 `/abort/i` 判断;只以真实 signal 或结构化取消原因判断用户取消。
2. 为队列丢弃增加结构化原因,例如 `user-remove`、`session-stop`、`session-clear`、`hook-block`、`internal-race`、`schedule-pause/delete`。
3. 仅对真实的 pause/delete 显示当前文案,其他情况保留真实错误或按策略顺延。
4. 记录不含消息正文的审计字段:clientId、scheduleId、discard reason、调用入口、signal 状态。
5. 增加“同一自动化重叠运行 + 前轮结束瞬间人工消息抢占”的跨层回归测试。
---
**版本区域**: CN
**OS**: win32 x64 (10.0.26100)
**Harness**: Codex
**Model ID**: ` gpt-5.6-sol `
**界面语言**: zh-CN

Contributor guide

Open the contributing guide

Research direction

Start with apps/desktop/src/main/scheduler-host/runner.ts and packages/maker-scheduler/src/engine/scheduler.ts, tracing the onDiscarded path and the agent-mode abort check. Add a regression test for overlapping scheduled runs racing with a manual message, then verify that only a real pause or delete produces the user-cancellation history while other discard causes remain diagnosable.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
backend, testing-qa
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
50/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.