[ZCode 主仓 bugfix] CronCreate 无条件改写会话标题——修复分支已就绪,主仓 PR 渠道受限,请求拉取
メンテナーはふだん 2 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 25/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- node.js, typescript
調査の方向性
Start by reading automation-port.ts and core/runtime/methods/session-title.ts, then run apps/zcode-cli/packages/core/test/session-title.test.ts. Done means the existing session-title tests pass, the bootstrap build and architecture check remain clean, and CronCreate no longer changes custom or generated session titles.
索引モデルが issue の本文から書いたものです。
説明
说明:本 issue 面向 ZCode 主仓(zai-org/ZCode) 的一个 bug 修复。主仓当前 issues 关闭、外部账号创建 PR 也被权限拦截(GraphQL 报
does not have the correct permissions to execute CreatePullRequest),修复分支已推到 fork,只能借本仓库反馈,请维护者拉取或告知正确的提交渠道。
[Bug] CronCreate 会无条件把当前任务(会话)标题改写为 automation 标题
修复分支:https://github.com/neoblackxt/ZCode/tree/fix/croncreate-session-title-freeze
基于 main(29628c9),7 个文件 +169/-2,含 spec 与单元测试(5/5 通过)。
问题
会话内 CronCreate 成功后,automation-port.ts 会无条件调用 setCustomSessionTitle 把当前会话(任务)标题覆盖为该 automation 的 title(代码注释称 "freeze session title")。该调用不检查标题现有来源,titleSource === "custom"(用户手动命名)与 generated(自动命名已完成)的任务都会被覆盖。
实际影响:在长周期任务中多次创建定时巡检(watchdog)类 automation 时,任务名随每次 CronCreate 反复变化——每个新 automation 就改一次名,用户手动命名也会被覆盖,严重干扰任务列表管理。
实测记录(桌面版 3.11.2,同一任务一天内被改名 4 次,session_title_updated 事件与 CronCreate 调用毫秒级对齐):
| 时间 | 调用 | 任务被改为的名字(= automation title) |
|---|---|---|
| 17:00:54 | CronCreate | vol_volume_coupling 全量计算 watchdog |
| 17:03:39 | CronCreate | vol_volume_coupling IC 快筛 watchdog |
| 18:07:19 | CronCreate | illiquidity 分钟 stage1 watchdog |
| 18:54:30 | CronCreate | illiquidity IC main 轮 watchdog |
原因
冻结的设计意图(原注释)是抢占首轮迟到的标题生成 sidecar,避免标题被生成成"我无法..."之类的内容。问题在于:
setCustomSessionTitle无条件覆盖,缺少与其它路径一致的保护——自动命名路径(persistGeneratedSessionTitle)在titleSource === "custom"时会跳过,且写回带expectedTitleSources乐观锁;冻结路径两者皆无。结果是自动命名尊重用户手动命名,冻结反而不尊重。- 冻结对已命名的既有会话没有可保护的对象:标题生成只在
turnNumber === 0触发(resume.ts从历史消息重建turnNumber,不会归零),任务中途不存在迟到 sidecar 的竞争窗口,此时覆盖的唯一效果就是改写既有任务名。
修复方案
新增 freezeSessionTitleForAutomation(core/runtime/methods/session-title.ts),把"是否需要冻结"的判定收敛到拥有标题语义的 runtime 层:
- 仅当当前
titleSource ∈ {default, first_input}(sidecar 可能尚未写回)时冻结为 automation 标题——完整保留抢占首轮迟到 sidecar 的原设计意图; custom(用户手动命名)与generated(sidecar 已完成)跳过,记automation.session_title_freeze.skipped(debug);- 用户手动重命名路径(
setCustomSessionTitle)行为不变。
影响面:首轮创建 automation 行为不变;任务中途 / 手动命名后创建 automation 不再被改名;同一任务多个 automation 不再互相覆盖任务名。
验证
- 单元测试(新增,node:test):
apps/zcode-cli/packages/core/test/session-title.test.ts,5/5 通过,覆盖上述全部场景; pnpm -r --filter "@zcode/bootstrap..." run build通过(含 core/bootstrap 全量 tsc 类型检查);pnpm architecture:check --changed:violations 0 / baseline 0 / new 0;- lint / fmt:改动文件 0 警告 0 错误(bootstrap 包存量的 20 个 lint 错误经 stash 对照确认与本次无关)。
请求
- 维护者直接从上述 fork 分支拉取 / cherry-pick(提交信息已按仓库规范写好,含中文修复说明);或
- 告知外部贡献的正确提交渠道(若 PR 权限是临时限制,恢复后我可立即在主仓补提正式 PR)。
- 主要言語
- Python
- スター
- 86
- フォーク
- 51
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
zai-org/zcode-plugins のほかの issue
-
video-agent-kit (0.4.3): hooks invoke python3, which doesn't exist on Windows — SessionStart/UserPromptSubmit/Stop hooks fail on every trigger対応中かも @dvd233 が 11 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
zai-org/zcode-plugins#14 ·
メンテナーはふだん 2 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
zai-org/zcode-plugins#64 ·
メンテナーはふだん 2 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
zai-org/zcode-plugins#63 ·
メンテナーはふだん 2 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 38/100
zai-org/zcode-plugins#59 ·
メンテナーはふだん 2 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 45/100
zai-org/zcode-plugins#58 ·
メンテナーはふだん 2 日以内に返信
zai-org/zcode-plugins の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
FuRongJun-1999/dsh-memory#56 ·
メンテナーはふだん 1 日以内に返信
-
Bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
pgadmin-org/pgadmin4#10503 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 85/100
521xueweihan/HelloGitHub#3857 ·
-
needs-ac
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
Ikalus1988/MisakaNet#2845 ·
メンテナーはふだん 1 日以内に返信
-
bug connectors operations
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
pyinfra-dev/pyinfra#1989 ·
メンテナーはふだん 3 日以内に返信