docs: 写入 Z28 同步绑定≠换票,智建需回传密钥/复用 active
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# 联调后修改意见 · 宇恒松离线(形态 B)
|
# 联调后修改意见 · 宇恒松离线(形态 B)
|
||||||
|
|
||||||
> 初稿:2026-08-01 · 修订至 **2026-08-06 20:20**(Z27 他机自动生成 host_key)
|
> 初稿:2026-08-01 · 修订至 **2026-08-06 20:45**(Z28 同步绑定≠换票;登记勿另起 pending)
|
||||||
> 焦点:**§0.2**(按负责方);**改代码前须先写入本意见**(见 §0.0)
|
> 焦点:**§0.2**(按负责方);**改代码前须先写入本意见**(见 §0.0)
|
||||||
> 来源:宇恒 `yuhengyihao_client` ↔ 智建(生产 `aisite.yuxindazhineng.com`)
|
> 来源:宇恒 `yuhengyihao_client` ↔ 智建(生产 `aisite.yuxindazhineng.com`)
|
||||||
> 依据:`松离线-dbsync方案-最终版.md`、`宇恒-松离线数据同步使用文档.md`
|
> 依据:`松离线-dbsync方案-最终版.md`、`宇恒-松离线数据同步使用文档.md`
|
||||||
@@ -29,9 +29,10 @@
|
|||||||
| **Z22 绑定表单失败可重试** | **宇恒已改完;智建无需** | prepare 只做非交互检测;`ask_fields`/`Expecting value` 不冒泡成「绑定引导失败」;必弹绑定表单(§5.20) |
|
| **Z22 绑定表单失败可重试** | **宇恒已改完;智建无需** | prepare 只做非交互检测;`ask_fields`/`Expecting value` 不冒泡成「绑定引导失败」;必弹绑定表单(§5.20) |
|
||||||
| **Z23 表单推送失败禁止空等** | **宇恒已改完;智建无需** | `ask_fields_via_chat` 推送失败立即抛错;进行中再选中会话给出提示;对齐 ty_host≥1.2.35(§5.21) |
|
| **Z23 表单推送失败禁止空等** | **宇恒已改完;智建无需** | `ask_fields_via_chat` 推送失败立即抛错;进行中再选中会话给出提示;对齐 ty_host≥1.2.35(§5.21) |
|
||||||
| **Z24 已绑定勿 force 清落点** | **宇恒已改完;智建无需** | 启动自动引导绑定时禁止 `force_rebind` 清 CHANNEL;仅用户点「换绑」才清(§5.22) |
|
| **Z24 已绑定勿 force 清落点** | **宇恒已改完;智建无需** | 启动自动引导绑定时禁止 `force_rebind` 清 CHANNEL;仅用户点「换绑」才清(§5.22) |
|
||||||
| **Z25 自动引导勿 force + host_key** | **宇恒已改完;智建无需** | prepare 失败只弹表单不清落点;host_key 回落 env/config,禁止空串打智建(§5.23) |
|
| **Z25 自动引导勿 force + host_key** | **宇恒已改完;智建无需** | prepare 失败只弹表单不清落点;host_key 回落 env/config(§5.23) |
|
||||||
| **Z26 已有 CHANNEL 禁再弹绑表** | **宇恒已改完;智建无需** | 本机已有同步通道时自动引导不再弹「绑定公司同步」;仅换绑才清(§5.24) |
|
| **Z26 已有 CHANNEL 禁再弹绑表** | **宇恒已改完;智建无需** | 本机已有同步通道时自动引导不再弹绑定表(§5.24) |
|
||||||
| **Z27 他机自动生成 host_key** | **宇恒已改完;智建无需** | 无 YXD_HOST_KEY/config.host_key 时自动生成并固化,禁止空串绑定失败(§5.25) |
|
| **Z27 他机自动生成 host_key** | **宇恒已改完;智建无需** | 无 host_key 时自动生成并固化(§5.25) |
|
||||||
|
| **Z28 同步绑定≠换票 / 禁另起 pending** | **宇恒已改·智建待改** | 已绑 CHANNEL 勿用 user_id 清凭证再 SelfRegister;智建绑定回传 client 密钥(§5.26) |
|
||||||
| **仍关注** | 用法 | 通道断了靠智建自愈;表数据靠宇恒双向指纹 / 数据恢复;不是「再点启动」 |
|
| **仍关注** | 用法 | 通道断了靠智建自愈;表数据靠宇恒双向指纹 / 数据恢复;不是「再点启动」 |
|
||||||
|
|
||||||
### 0.0 修改流程(冻结)
|
### 0.0 修改流程(冻结)
|
||||||
@@ -943,26 +944,41 @@ POST /api/v1/agent/sync/channels/{id}/pull
|
|||||||
3. 已 sync_bound 时 bootstrap_auth 失败不要清绑定;保留 runtime 或走门闸。
|
3. 已 sync_bound 时 bootstrap_auth 失败不要清绑定;保留 runtime 或走门闸。
|
||||||
|
|
||||||
|
|
||||||
### 5.23 【Z25 · 2026-08-06】自动引导禁止 force 清绑;host_key 必须回落
|
### 5.26 【Z28 · 2026-08-06】同步绑定成功后仍报 pending:两套身份错位
|
||||||
|
|
||||||
**状态**:**宇恒已改完**。
|
**状态**:**宇恒已改(禁 user_id 覆盖);智建待改(绑定回传密钥 / register 复用 active)**。
|
||||||
|
|
||||||
1. `runtime is None` 自动绑定时 `force_rebind=False`(仅「换绑」/门闸显式换绑才 clear)。此前 `force_rebind=not already_bound` 在未绑时仍会 clear,出现「已清空」+ 空表。
|
#### 现象(他机日志)
|
||||||
2. `_host_key` / `_host_key_default` 回落 `YXD_HOST_KEY` 与技能 `config.json`;空 host_key 本地拦截,避免智建 `host_key required`。
|
|
||||||
|
|
||||||
|
- `skip bind form: local CHANNEL present (b9345197…)` → **公司同步落点已是坤坤,不是「又要绑测试账号」**。
|
||||||
|
- 紧接着 `POST /auth/token` → `401 agent pending approval` → **换票用的是另一条智能体账号**(SelfRegister 新建/复用的 pending),与 CHANNEL 上那条 active 不是同一套凭证。
|
||||||
|
|
||||||
### 5.24 【Z26 · 2026-08-06】已有 CHANNEL 禁止再弹绑定表
|
#### 根因
|
||||||
|
|
||||||
**状态**:**宇恒已改完**。
|
1. **智建同步绑定路径**(手机号/绑定码/凭票 → `bindUserHostSync` → `AttachSyncBind(..., activate=true)`)会把该 `host_key` 智能体设为 **active** 并挂通道。
|
||||||
|
2. **宇恒 `prepare_runtime`** 在 config.`host_key` ≠ 当前宇恒 `user_id` 时:**清空 `client_id/client_secret`,并把 `host_key` 改成 user_id**,再 `bootstrap_auth` → `POST /auth/agent/register`。
|
||||||
|
3. **`/auth/agent/register`(SelfRegister)设计为默认 pending**(须管理员启用)。于是出现:同步落点已是坤坤 active,换票却打到 **user_id 名下新建的 pending**。
|
||||||
|
4. 绑定成功响应**不回传** `client_id/client_secret`,宇恒无法直接用「同步绑定那条」换票,只能再走 SelfRegister。
|
||||||
|
|
||||||
本机 `YXD_SYNC_CHANNEL_ID` 已存在时:`ensure_sync_bound_interactive` 直接 skip;`prepare` 失败分支也不再打开绑定表单,只走门闸「重新检查/换绑」。避免他机已绑仍反复弹出「绑定公司同步」。
|
「测试账号」误解:config 里 `active_env=prod` 仍可能因上述逻辑登记出**另一条**智能体;与「绑到测试租户」不是一回事。CHANNEL=`b9345197…` 已证明同步落点是坤坤。
|
||||||
|
|
||||||
|
#### 宇恒改(本仓)
|
||||||
|
|
||||||
### 5.25 【Z27 · 2026-08-06】他机自动生成并固化 host_key
|
1. **已有 `YXD_SYNC_CHANNEL_ID`(同步已绑)时**:禁止因 user_id≠config.host_key 清空 client 凭证;换票/`register` 使用稳定 `_config_host_key` / `YXD_HOST_KEY`,**不要**把会话 `host_key` 改成 user_id 用于登记。
|
||||||
|
2. 用户可见文案区分:「同步已绑定」vs「生成发布换票待启用」,避免再说成「绑定失败」。
|
||||||
|
3. (可选后续)绑定成功若智建回传密钥,写入 config 并直接换票。
|
||||||
|
|
||||||
**状态**:**宇恒已改完**。
|
#### 智建改(需配合)
|
||||||
|
|
||||||
他机首次无联调 `YXD_HOST_KEY`、技能 config `host_key` 为空时:`_host_key_default` 自动 `token_hex(12)` 写入 env 文件与 config,绑定不再报缺 host_key。用户可见文案避免 Markdown 吃掉下划线。
|
1. **P0**:`phone-confirm` / `bind-code/redeem` / `ticket-exchange` 成功响应增加 `client_id` + `client_secret`(新建或本轮轮换时必带;已有未轮换可省略 secret 但须带 client_id,并文档说明宇恒如何续用)。
|
||||||
|
2. **P0**:`POST /auth/agent/register`:若同 `host_key` 已存在 **active 且已 sync_bound**,**禁止**再开一条 pending;应复用该账号(可轮换 secret 并返回),或 409 提示「请使用同步绑定凭证」。
|
||||||
|
3. **P1**:配置开关(如 `Agent.RegisterAutoActivate`):合法 `register_secret` 自注册时直接 `active` + 默认「生成发布」角色权限(松离线开通场景减少人工点启用)。当前「登记默认 pending」对**未绑定自注册**仍可保留。
|
||||||
|
4. **P1**:控制台列表区分「同步已绑 active」与「仅登记 pending」,避免管理员启用错条(host/client_id 不一致)。
|
||||||
|
|
||||||
|
#### 验收
|
||||||
|
|
||||||
|
- 他机仅完成手机号/绑定码同步后:有 CHANNEL,换票不再 401 pending(或明确门闸「待启用」且 client_id 与控制台同一条)。
|
||||||
|
- 管理员启用后「重新检查」一次即可生成发布;无需再走绑定表单。
|
||||||
|
|
||||||
## 6. 联系与附件
|
## 6. 联系与附件
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user