makecindy / makecindy/cindy

ghost skill reconcile failed (Plugin owner boundary is not durably stable) on every startup — single instance, v0.1.55→0.1.57

Open
#3,174 1 comment 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.