diff --git a/联调后修改意见-宇恒松离线.md b/联调后修改意见-宇恒松离线.md index 947e700..ac686d0 100644 --- a/联调后修改意见-宇恒松离线.md +++ b/联调后修改意见-宇恒松离线.md @@ -1,6 +1,6 @@ # 联调后修改意见 · 宇恒松离线(形态 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) > 来源:宇恒 `yuhengyihao_client` ↔ 智建(生产 `aisite.yuxindazhineng.com`) > 依据:`松离线-dbsync方案-最终版.md`、`宇恒-松离线数据同步使用文档.md` @@ -29,9 +29,10 @@ | **Z22 绑定表单失败可重试** | **宇恒已改完;智建无需** | prepare 只做非交互检测;`ask_fields`/`Expecting value` 不冒泡成「绑定引导失败」;必弹绑定表单(§5.20) | | **Z23 表单推送失败禁止空等** | **宇恒已改完;智建无需** | `ask_fields_via_chat` 推送失败立即抛错;进行中再选中会话给出提示;对齐 ty_host≥1.2.35(§5.21) | | **Z24 已绑定勿 force 清落点** | **宇恒已改完;智建无需** | 启动自动引导绑定时禁止 `force_rebind` 清 CHANNEL;仅用户点「换绑」才清(§5.22) | -| **Z25 自动引导勿 force + host_key** | **宇恒已改完;智建无需** | prepare 失败只弹表单不清落点;host_key 回落 env/config,禁止空串打智建(§5.23) | -| **Z26 已有 CHANNEL 禁再弹绑表** | **宇恒已改完;智建无需** | 本机已有同步通道时自动引导不再弹「绑定公司同步」;仅换绑才清(§5.24) | -| **Z27 他机自动生成 host_key** | **宇恒已改完;智建无需** | 无 YXD_HOST_KEY/config.host_key 时自动生成并固化,禁止空串绑定失败(§5.25) | +| **Z25 自动引导勿 force + host_key** | **宇恒已改完;智建无需** | prepare 失败只弹表单不清落点;host_key 回落 env/config(§5.23) | +| **Z26 已有 CHANNEL 禁再弹绑表** | **宇恒已改完;智建无需** | 本机已有同步通道时自动引导不再弹绑定表(§5.24) | +| **Z27 他机自动生成 host_key** | **宇恒已改完;智建无需** | 无 host_key 时自动生成并固化(§5.25) | +| **Z28 同步绑定≠换票 / 禁另起 pending** | **宇恒已改·智建待改** | 已绑 CHANNEL 勿用 user_id 清凭证再 SelfRegister;智建绑定回传 client 密钥(§5.26) | | **仍关注** | 用法 | 通道断了靠智建自愈;表数据靠宇恒双向指纹 / 数据恢复;不是「再点启动」 | ### 0.0 修改流程(冻结) @@ -943,26 +944,41 @@ POST /api/v1/agent/sync/channels/{id}/pull 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. 联系与附件