ghost skill reconcile failed (Plugin owner boundary is not durably stable) on every startup — single instance, v0.1.55→0.1.57
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 401
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
## 环境
- Cindy 桌面版 41.10.3(app 版本标记 0.1.55,更新器已拉取 0.1.57 hotfix)
- Windows 11(26200.9168),`activeMode: 'cloud'`,`app-session.json` 标记 `isCustomized: true`
- 单实例运行(非正式版 + CindyDev 并行场景)
## 现象(每次启动稳定复现)
主进程日志 `%APPDATA%\CindyGlobal\logs\main-*.log` 每次启动时依次出现:
```
[WARN ] [brain] ghost skill reconcile failed { error: 'Plugin owner boundary is not durably stable' }
[ERROR] [console] Error occurred in handler for 'maker:remote-ssh:cc-mgr-list-pending-upgrades': Error: No handler registered for 'maker:remote-ssh:cc-mgr-list-pending-upgrades'
[ERROR] [console] Error occurred in handler for 'maker:get-capabilities': Error: [PRECONDITION_FAILED] App session is switching; retry after the owner boundary settles.
[ERROR] [console] Error occurred in handler for 'maker:list-active': Error: [PRECONDITION_FAILED] App session is switching; retry after the owner boundary settles.
```
单次启动计数:15× `maker:get-capabilities`、7× `maker:remote-ssh`、2× `maker:list-active`。
跨版本连续复现:8/15(4×)、8/19(4×)、8/21(2×),自 0.1.55 起每次启动都出现,非偶发。
## 复现步骤
1. 正常启动 Cindy(单实例)。
2. 观察启动后 60 秒内主进程日志,命中上述 WARN + ERROR 序列。
## 影响
- Maker 相关 IPC 当前会话一直处于 `PRECONDITION_FAILED: App session is switching`,直到 owner boundary 稳定前不可用。
- 日志堆满无效错误,掩盖真实告警。
## 与 PR #2758 的关系
PR #2758(8/14 合入)把「进程内 App 切换」与「durable Ghost owner 稳定性」解耦,修复的是**跨实例并行**时另一实例改写 owner 导致整体误判的场景。
本报告是**单实例启动即失败**的路径,8/21 在安装 0.1.55/0.1.57 的机器上仍稳定复现,疑似另一条未覆盖路径:`brain` 层 ghost skill reconcile 在启动阶段未达持久稳定态,导致后续 maker IPC handler 注册与 `isAppSessionBoundaryPending()` 判定异常。
## 期望行为
- ghost skill reconcile 失败时应重试/等待 owner boundary 稳定,而不是让整个 Maker IPC 面失效。
- 或 reconcile 未稳定期间,`maker:*` 请求给出明确的"初始化中"而非误导性 503。
## 补充
单条栈帧定位:`resources\app.asar\.vite\build\bootstrap-electron-CmrBgcGc.js:12062:14909`(EventEmitter / Session handler 注册路径)。
---
# 附注:聊天 embedding 静默失败(voyage/voyage-4 不可用)
同一环境检测到的第二个问题,关联 PR #2288(8/19 仍 open)。
```
[ERROR] [embeddingHost] {"event":"embeddingWorker.batch.failed","source":"chat","modelId":"voyage/voyage-4","code":"INVALID_MODEL","error":"XD Gateway /v1/embeddings 400: /embeddings: Invalid model name passed in model=voyage/voyage-4. Call `/v1/models` to view available models for your key.","count":1}
```
- 现象:聊天触发 embedding 批量任务失败(INVALID_MODEL),单次启动 10 次。
- 根因推断:账户在 XD Gateway(/v1/embeddings)可用模型列表里没有 `voyage/voyage-4`,但客户端 embedding 配置仍指向它 → 静默失败。
- 期望行为:客户端按网关 /v1/models 实际可用列表回退/降级,或配置层可选账户可用的 embedding 模型。很期待 PR #2288 的熔断机制合入。
Contributor guide
Research direction
Start with the startup log sequence and the bundled stack location at resources\app.asar\.vite\build\bootstrap-electron-CmrBgcGc.js:12062:14909, then inspect the ghost skill reconcile and maker IPC registration paths behind it. Compare the single-instance behavior with the boundary changes in PR #2758. Done means reconcile failure no longer leaves maker:* unavailable, and initialization errors are explicit or retried until the owner boundary settles.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- electron, typescript
- Domain
- backend, desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100