YonBIP OA集成部署(主Skill)
> 调度编排层,负责意图识别、子Skill路由、参数传递、结果聚合
一、技能定位
| 属性 | 说明 |
|---|---|
| 名称 | yonbip-p-oa-deploy |
| 定位 | YonBIP OA集成资产部署助手(调度编排层) |
| 核心职责 | 意图路由、子Skill调度、参数传递、结果聚合 |
| 不负责 | 具体业务逻辑(部署、SSO生成、资产调整) |
| 子Skill数 | 4 |
二、子Skill列表
2.1 子Skill 1:yonbip-p-oa-asset-setup
| 属性 | 说明 |
|---|---|
| 核心职责 | 资产包实施部署 |
| 可独立运行 | ✅ 是 |
| 覆盖厂商 | 9大OA(泛微EC9/EC10/EOffice、钉钉、飞书、企微、致远、蓝凌MK/EKP) |
| 部署层级 | L1-L8全流程 |
| 脚本数量 | 约 80+ 个脚本(12 个目录:thirdAuth/connection/application/appkey/eventSubscribe/routeRule/apiAuth/schedule/scheme/deploy/workflow/utils + 顶层 5 个散落文件) |
| 路径 | yonbip-p-oa-asset-setup/ |
| 文档 | yonbip-p-oa-asset-setup/SKILL.md |
2.2 子Skill 2:yonbip-p-oa-ssolink-builder
| 属性 | 说明 |
|---|---|
| 核心职责 | OA单点登录SSO链接生成 |
| 可独立运行 | ✅ 是 |
| 覆盖场景 | 15场景(6大OA × 多种认证方式) |
| 脚本数量 | 4个脚本 |
| 路径 | yonbip-p-oa-ssolink-builder/ |
| 文档 | yonbip-p-oa-ssolink-builder/SKILL.md |
2.3 子Skill 3:yonbip-p-oa-asset-adjust
| 属性 | 说明 |
|---|---|
| 核心职责 | 集成资产内容层调整(已部署方案的映射键/常量/公式/值转换规则;平台API直改,禁覆盖导入) |
| 可独立运行 | ✅ 是(依赖子Skill 1 的 scripts/utils 共享基建,sys.path 引用禁复制) |
| 覆盖厂商 | 9大OA(场景 S1-S9 分场景覆盖,厂商知识内嵌注册表;专修包/配方两层结构) |
| 成功判据 | 写前检查 + 写后回读 1:1(不依赖响应码;假成功自动反向写回) |
| 脚本数量 | 9 个脚本(adjust_common / scenario_registry / api / verify / inventory / diff / apply / guide / recipe)+ tests |
| 路径 | yonbip-p-oa-asset-adjust/ |
| 文档 | yonbip-p-oa-asset-adjust/SKILL.md |
2.4 子Skill 4:yonbip-p-oa-log-search
| 属性 | 说明 |
|---|---|
| 核心职责 | ipaas 连接器运行日志检索/还原/分析(部署后排障:scan 先验 → search 检索 → replay 调用全貌 → analyze 健康度 → export 导出) |
| 可独立运行 | ✅ 是(纯 stdlib 单脚本,离线分析日志文件,不访问远端) |
| 输入 | 现场导出的 yms 连接器日志(.log/.txt/.gz,上限 500MB) |
| 成功判据 | 解析条数/车道分布如实输出(0 条=非 yms 格式 fail-loud);结论带行号溯源;输出默认脱敏 |
| 脚本数量 | 1 个脚本(log_search.py,5 子命令)+ tests 56 例 |
| 路径 | yonbip-p-oa-log-search/ |
| 文档 | yonbip-p-oa-log-search/SKILL.md |
三、能力矩阵
| 能力 | 子Skill 1 | 子Skill 2 | 子Skill 3 | 子Skill 4 | 主Skill |
|---|---|---|---|---|---|
| 9大OA厂商集成部署 | ✅ | ❌ | ❌ | ❌ | ❌ |
| L1-L8全流程部署 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 15场景SSO链接生成 | ❌ | ✅ | ❌ | ❌ | ❌ |
| encrypt API调用 | ❌ | ✅ | ❌ | ❌ | ❌ |
| 已部署方案内容调整(映射键/常量/公式) | ❌ | ❌ | ✅ | ❌ | ❌ |
| 连接器日志检索/调用全貌还原/异常分析 | ❌ | ❌ | ❌ | ✅ | ❌ |
| 意图路由 | ❌ | ❌ | ❌ | ❌ | ✅ |
| 参数传递 | ❌ | ❌ | ❌ | ❌ | ✅ |
| 结果聚合 | ❌ | ❌ | ❌ | ❌ | ✅ |
四、触发词
4.1 子Skill 1(资产部署)
部署OA待办集成
部署OA基础数据
资产包实施
重部署OA集成
批量部署9厂商
验证OA集成部署状态
检查部署现状
查询当前配置
排查OA集成部署问题
资产清理与状态维护
4.2 子Skill 2(SSO链接)
生成单点链接
SSO链接生成
生成OA单点BIP链接
泛微单点链接
钉钉SSO链接
飞书OAuth链接
企微单点登录
致远SSO
蓝凌encrypt
4.3 子Skill 3(资产内容调整)
调整映射键
绑定字段改员工编号
改绑定键
消息来源code调整
资产调整
调整绑定方案映射
4.4 子Skill 4(连接器日志检索)
查连接器日志
ipaas日志排查
按traceId排查
还原调用过程
调用全貌
连接器报文查询
> ⚠️ 否决词(先于正词判定):「执行日志 / run日志 / 部署日志 / ui_logs」= 部署链路日志,归子Skill 1;
> 仅说「日志」无上下文 → route_intent 返回 ambiguous=True,必须 AskUserQuestion 确认,禁静默路由。
五、目录结构
yonbip-p-oa-deploy/ # 主Skill
├── SKILL.md # 本文件(主入口)
├── AGENT.md # AI工具规范
├── skill-workflow.md # 部署工作流
├── skill-reference.md # API速查
├── skill-traps.md # Trap档案
├── CHANGELOG.md # 变更日志
│
├── scripts/ # 🆕 主Skill调度层
│ ├── router.py # 意图路由脚本
│ └── orchestrator.py # 编排调度脚本
│
├── references/ # 🆕 主Skill接口文档
│ └── interfaces/
│ ├── subskill-interfaces.md # 子Skill接口定义
│ └── intent-classification.md # 意图分类规则
│
├── yonbip-p-oa-asset-setup/ # 子Skill 1(根目录同级)
│ ├── SKILL.md
│ ├── scripts/ # workflow/ 引擎 + 各资源脚本
│ ├── references/
│ └── knowledges/ # 9大OA实施指南
│
├── yonbip-p-oa-ssolink-builder/ # 子Skill 2(根目录同级)
│ ├── SKILL.md
│ ├── scripts/ # 4个脚本
│ └── references/
│
├── yonbip-p-oa-asset-adjust/ # 子Skill 3(根目录同级,专项97)
│ ├── SKILL.md
│ ├── AGENT.md
│ ├── scripts/ # 8个脚本(adjust_*)
│ ├── references/ # scheme-anatomy 方案剖析底稿
│ ├── tests/ # 127 用例
│ └── runs/ # 运行留痕(gitignore)
│
├── yonbip-p-oa-log-search/ # 子Skill 4(根目录同级,连接器日志检索)
│ ├── SKILL.md
│ ├── scripts/ # log_search.py(5 子命令,纯 stdlib)
│ ├── references/ # log-format.md(yms 格式单一规格源)
│ └── tests/ # 56 用例 + fixtures(手写构造)
│
├── tools/ # 守门员工具(skill_workflow_guard 等)
│
├── docs/ # 设计文档
│ ├── 01-Skill设计开发方案.md
│ └── ...
│
├── history/ # 历史记录
└── .githooks/ # Git Hooks
└── pre-commit # 子仓库只读约束
六、子Skill调用方式
6.0 Skill+Python 混合驱动入口(推荐)
> ⚠️ 正式部署必须走此入口(Skill 作认知/交互脑,Python 作执行手,8 阶段闭环)。
按 8 阶段分工:Skill(脑) 阶段1-5/8,Python(手) 阶段6-7。
Skill 阶段1-5(认知+交互):① 意图分析(vendor/scenarios) → ② 读 knowledges/{vendor}/实施指南-*.md 出须知 → ③ AskUserQuestion 采参(host/zip/UCC凭证等;cookie 不询问,自动 ensure,见 D-14) → ④ 生成 plan JSON(run_id+plan+params) 请用户确认 → ⑤ 环境检查(check_session/SSO 健康)。
Python 阶段6-7(执行):
python3 yonbip-p-oa-asset-setup/scripts/workflow/deploy.py skill-deploy \
--from-skill-plan runs/<run_id>_plan.json
Skill 阶段8(报告):读 runs/<run_id>_result.json,输出多场景 Markdown 报告。报告必须登记阶段1 版本预检结果(本地版本/远端版本/检查状态)与用户对更新提示的选择;UPDATE_AVAILABLE 后用户选了「继续旧版」时,报告显著位置标注「旧版本运行」留痕(专项93)。
产出:runs/<run_id>_plan.json(Skill 决策可审计) + runs/<run_id>_result.json(执行结果) + runs/<run_id>.jsonl(可追溯日志)。
> ⚠️ plan JSON 两大约束:
>
> 1. 单 plan JSON 仅支持单场景(scenarios 长度必须 = 1)。scenarios: ["todo","base_data_forward"] 会让 planner 塌缩为 auto,B 场景静默丢失 + L9 只验单场景。待办+基础数据必须拆两份 plan JSON(各配对应资产包 ZIP),分别 skill-deploy。deploy.py 对 len(scenarios)>1 直接报错引导。
> 2. 基础数据定时任务必须显式确认。scenarios 含 base_data_* 时,阶段3 AskUserQuestion 必须确认定时任务创建,并在 plan JSON 设 params.confirm_schedule=true(可审计记录)。未确认 → scenario=B 时 L8 跳过定时任务创建(_confirm_base_data_schedule 默认 N)。--confirm-schedule 仅限 CI/CD 非交互管道。
>
> 这两条是致远 run_id=seeyon_AB_20260811_162543 实战踩中的根因(详见 docs/vendor/seeyon/专项61-*.md)。
> ⚠️ 预检连接器:阶段5 deploy_precheck section 4 在 L1 之前先确认连接器可用。
>
> 1. 阶段1(意图分析):从 knowledges/{vendor}/实施指南-*.md 顶部 YAML frontmatter 读 linkerCode,写入 plan JSON 的 params.linker_code。
> 2. 阶段3(参数采集):用户传入 --connector-zip(视为已确认)或采用实施指南 connectorZipPattern 默认值——默认值必须交互与用户确认后才能锁定(D-17):须知中列为「需要你确认」决策项,请用户对照现场资产盘实际路径核对,不符则提供实际路径;写入 params.connector_zip。
> 3. 阶段5(预检执行):deploy_precheck section 4 接收这两个参数;查到不存在 → 自动 import_connector.py 上传 ZIP + 二次 list 验证;查到存在 → 直接 skip。
> 4. 零硬编码:Python 层不维护 vendor→linkerCode / vendor→ZIP 映射表。新增厂商时只在 knowledges 加 YAML frontmatter,不改 Python 代码。
> 5. fail-fast:缺 linker_code 或缺 ZIP 但查到不存在 → 直接报错退出(不静默放过),符合 [[oa-verify-no-passing-cliche]] / [[oa-p-deploy-fail-fast]]。详见 docs/architecture/专项62-连接器预检自动导入专项方案.md。
6.0.1 8 阶段 Gate-Pipeline 执行纪律
> ⚠️ 核心原则:每个 Gate 必须满足「完成条件」才能进入下一步。
Gate 完成条件一览(5 Gate)
| 前置 | 输入校验 | — | vendor/scenarios 合法(该厂商枚举集内且 B/C 不同选;枚举表见「阶段1」节,事实源 scenario_map.VENDOR_SUPPORTED_SCENARIOS,Python validate_scenario_selection 兜底) | Skill |
| Step | 阶段动作 | Gate | 完成条件 | 主导方 |
|------|---------|------|---------|--------|
| 1 | 阶段1 意图分析 | Gate 1 | 用户确认 vendor + 场景清单(多选确认) | Skill |
| 2 | 阶段2 部署须知(生成前强制学习) | Gate 2 | 通用16 + 厂商专属≥N 项 | Skill |
| 3 | 阶段3 参数采集(4 Phase 强执行) | Gate 3 | Layer1→Layer2→Layer3→Layer4 全部确认 | Skill |
| 4 | 阶段4 生成 plan JSON | Gate 4 | 字段齐 + 原文全貌已呈现 + 用户确认(D-19) | Skill |
| 5 | 阶段5 环境检查 + 连接器预检 | Gate 5 | 5 项检查全 true(cookie/SSO/网络/API授权/连接器)| Skill |
| 6 | 阶段6 L1-L8 执行 | — | PlanExecutor 全部步骤成功 | Python |
| 7 | 阶段7 L9 验证 | — | deploy_verify 场景驱动 + API 授权 1:1 | Python |
| 8 | 阶段8 报告输出 | — | 报告生成 + 8 阶段登记完整 | Skill |
> 设计说明:input validation 不计入业务 Gate(编号 Gate 1~5 共 5 个 Gate);Skill 阶段1-5/8 含 5 个 Gate,Python 阶段6-7 无 Gate(由既有 FAIL_FAST_STEPS + deploy_verify 兜底)。
阶段3「4 Phase 强执行」展开
Phase 1(基础参数 Layer1)─→ Phase 2(场景选择 Layer2)
↓ D-04 禁止跳层 ↓ D-04 禁止跳层
Phase 3(厂商专属 Layer3)─→ Phase 4(网络/权限 Layer4)
↓ ✅ 4 Phase 全完成 = Gate 3 通过 → 进入阶段4 plan JSON 生成
❌ Gate 3 未通过时禁止:
- ❌ 禁止生成 plan JSON
- ❌ 禁止调用 deploy.py deploy / deploy_orchestrator.py
- ❌ 禁止调用 deploy_verify.py
- ✅ 只能进行 AI 对话和阶段1-3 的确认
阶段1「场景清单多选确认」步骤(v6.7.1 专项89 重写;v6.4.12+74 初建)
> ⚠️ 阶段1 前置铁律(专项93 检测 + 专项98 更新):版本预检
> 阶段1 开始前必须先完成 Skill 版本预检并回显结果(tools/skill_self_check.py 已含 [0] Skill版本 检查项,或直调 version_check.py --json):
> - UPDATE_AVAILABLE(有新版本)→ AskUserQuestion:先更新(推荐)/ 继续旧版;用户选「继续」→ 阶段8 报告必须登记「旧版本运行」留痕
> - 用户选「先更新」→ 当场执行自动更新(yonbip-p-oa-asset-setup/scripts/utils/auto_update.py,用户确认一次后自动完成下载→校验→备份→替换→回读;本地被改过的文件先交用户裁决:采用新版/保留本地)→ 更新成功(UPDATED,装后回读通过)即即时生效,直接继续本次部署——脚本每次调用从磁盘加载,无需重启会话(2026-10-15 实测勘误,专项98 §5.3 旧表述「停止部署+重启生效」作废)。更新失败自动回滚,旧版保留在备份(技能发现根目录之外)
> - 远端未提供可用下载直链(NO_DOWNLOAD_CHANNEL)→ 提示按《使用说明》§一 手工重装,不臆造 URL
> - CHECK_FAILED / LOCAL_AHEAD → 一行 WARN/INFO 带过,不阻断不打扰(检查失败永不成为部署单点)
> - SKIPPED_NO_URL(直链未配置)→ 静默
> 红线:版本检查永不阻断部署;更新永不静默——破坏性替换必须经用户确认(--yes 仅承载已确认的执行,交互确认走 AskUserQuestion)。
前置必须:用户原话出现"飞书集成资产包"/"全量"/"重新部署 {vendor}"等模糊表述时,必须 AskUserQuestion 列出该 vendor 枚举集内全部场景供逐项勾选(multiSelect: true)。禁止提供任何预设组合选项("全部 A+B+C 推荐"等)——组合由用户逐项勾选自然形成,非法组合由 Python validate_scenario_selection 拦截(B/C 互斥、厂商不支持)。
默认仅勾 A(待办);B/C 方向必须用户显式勾选(B/C 方向互斥不可同选,2026-08-26 决策;专项74 实战飞书 D 考勤漏的教训以"显式勾选"承接,而非"默认全勾"代推断)。
模板示例(飞书):
AskUserQuestion:
q: 「飞书集成资产包」支持以下 4 个场景,本次部署哪些?(可多选;B/C 两方向互斥,只能勾其一)
options:
- label: A 待办集成
description: 事件订阅推送待办/工作通知(默认勾选)
- label: B 基础数据反向(OA→BIP)
description: 定时同步,方向 OA→BIP;与 C 互斥
- label: C 基础数据正向(BIP→OA)
description: 定时同步,方向 BIP→OA;与 B 互斥
- label: D 考勤集成
description: 出差/考勤事件订阅(须独立勾选,不随其他场景自动带出)
multiSelect: true
9 厂商场景枚举表(事实源 workflow/scenario_map.py VENDOR_SUPPORTED_SCENARIOS;本表为内嵌副本,纳入专项69 文档-代码一致性校验——pre-commit grep 断言两处 9 厂商清单一致,防双源漂移):
| vendor | 可勾场景 | 说明 |
|---|---|---|
| feishu(飞书) | A, B, C, D | D=考勤/出差事件 |
| dingtalk(钉钉) | A, B, C, D | D=考勤事件 |
| tencent(企业微信) | A, C, D | 无 B 资产;D=打卡回流 wecom_bip_attendance_save(企微→BIP),须独立勾选(选 C 时该 forward 方案被方向过滤,"随包带出"不成立) |
| seeyon(致远) | A, B, C | |
| ecology9(泛微E9) | A, B, C | |
| ecology10(泛微E10) | A, B, C | |
| eoffice(泛微 eoffice) | A | 知识库仅待办指南,B/C=❌ |
| landray-mk(蓝凌MK) | A, C | B=❌:官方 PDF §6.3 全部方案 bip_landray_* 为 BIP→蓝凌(=C 方向),专项89 §3.6 |
| landray-ekp(蓝凌EKP) | A | 无基础数据资产包 |
禁止:
- 凭历史经验推断场景清单("上次是 A+B+C...")
- 凭 SKILL 文档默认推断或"默认全勾"
- 凭"看起来完整"推断
- 在场景选择问题中混入单点链接/质检等其他能力选项(D-16:单点→ssolink-builder 子Skill 路由,质检→独立入口,资产内容调整→asset-adjust 子Skill 路由)
- 出现 B+C 同选的预设组合(含"全部 A+B+C/D 推荐"类全量项,2026-08-26 B/C 互斥决策)
Why:场景漏部署后业务必受影响(专项74 实战:飞书 D 考勤漏 → 出差申请单事件无法同步飞书审批);而预设组合/默认全勾会诱导非法组合(专项89 YonCode 实测截图:"全部 A+B+C 推荐"含 B+C 互斥、"仅 B+C 基础数据"无待办基础、"单点"混入部署场景)。
更多细节:docs/deploy-fix/专项89-场景选择组合合法性专项修复方案.md §3.5/FIX-2(范式);docs/refactor/专项74-场景模糊+planner class body双陷阱修复方案.md §3.1(初建背景)
阶段2「生成前强制学习」步骤
> ⚠️ 实战教训:未读实施指南 → 仅输出通用16项 → P0 级缺陷(ecology10_E10_A_20260809_104006)。
步骤 2.1:读 yonbip-p-oa-asset-setup/knowledges/{vendor}/实施指南-*.md
步骤 2.2:核对厂商专属参数项数(§9.1.2 最小项数对照表)
步骤 2.3:识别厂商禁忌(eoffice 无 appKey、tencent 必填 3 项等)
步骤 2.4:场景适配(基础数据场景必填 confirm_schedule=true)
❌ D-05 禁止不读实施指南直接输出部署须知。
6.0.2 FATAL 级执行纪律
> 违反任意一条构成执行失败。详细错误案例见源码仓库 skill-traps.md。
| 编号 | 规则 | 违反后果 |
|---|---|---|
| D-01 | 禁止跳过部署须知直接进入参数采集 | 阶段3 输入不完整 |
| D-02 | 禁止仅输出通用16项(必须含厂商专属≥N 项) | P0 级缺陷(实战:ecology10_E10_A_20260809_104006) |
| D-03 | 禁止跳层采集(必须 Layer1→Layer2→Layer3→Layer4 顺序) | P2 级缺陷:必填项漏填 |
| D-04 | 禁止跨 Phase 执行(4 Phase 缺一不得进入 plan JSON 生成) | 字段缺失 → plan JSON 校验失败 |
| D-05 | 禁止生成部署须知前不读 knowledges/{vendor}/实施指南-*.md |
厂商专属参数遗漏 |
| D-06 | 禁止基础数据场景 confirm_schedule=false 静默部署 |
定时任务缺失(专项61 踩坑) |
| D-07 | 禁止双场景(scenarios.length>1)单 plan JSON 部署 |
B 场景静默丢失(专项61 踩坑) |
| D-08 | 禁止 params.cookie / plan.host 为空时强行部署 |
部署必失败 |
| D-09 | 禁止 L9 验证失败仍出"成功"报告 | 橡皮图章 |
| D-14 | 禁止让用户 F12 手工复制 Cookie——params.cookie 统一写 "FROM_BIP_COOKIE" 占位符,部署链自动 ensure;ensure 失败按脚本报错决策树走(set-credentials / --manual-login),手工复制仅用户主动要求时兜底 |
引导手工复制 = 退回弹窗风暴老路(专项79 实战:其他终端 AI 按旧采参指令要求 F12 复制) |
| D-15 | 禁止向用户询问单点跳转地址(sso_service_url / singleJumpService / authInterface 等)——由 _resolve_sso_jump_url() 按 SSO_URL_STRATEGY 自动派生(域名取自 bip_host/tdms_domain)。实施指南连接配置属性表中的该字段描述属手工实施语境(OA UI 页面填写说明),不是采集参数;须知中只能作为「自动配置」说明项出现。历史例外(已过时):landray-ekp R6 之前旧版需 /authNew——现役项目均为 BIP5/BIP6、恒 ssoBip 形态(2026-10-22 用户裁决,专项111);指南 R6/R6前 分支表述属过时信息,三份蓝凌指南 frontmatter 已加自动化注记。--sso-jump-url 仅作异常个案显式覆写逃生通道,禁进入任何交互/须知询问。单点登录服务「版本形态」(R6 及以上 / R6 之前)禁止作为交互决策项询问——W1 预检 #1 探针(GET {bip_host}/iuap-ipaas-sso/health)即 ssoBip 在线验证:PASS=派生前提成立;FAIL=环境问题(单点服务未安装/网络不可达)走排障,不是切换 /authNew 的信号 |
向用户询问 = 把自动化字段退回手工时代(实战:其他终端 AI 读指南后交互索要单点跳转地址;2026-10-22 蓝凌EKP 现场终端 AI 自拟「单点登录服务形态?R6 及以上/R6 之前的旧版」决策项,现场顾问答不上被卡——根因③:该分支为过时形态,现场已无旧版环境) |
| D-16 | 禁止在部署场景选择(AskUserQuestion)中混入单点链接/质检/巡检等其他能力选项——场景枚举仅限「9 厂商场景枚举表」所列 A/B/C/D;单点链接属 ssolink-builder 子 Skill(router 2 路由),资产内容调整属 asset-adjust 子 Skill(router 3 路由,禁当 A/B/C/D 场景混入),质检属独立入口。Python validate_scenario_selection 对未知场景 fail-loud 兜底 |
单点混入场景选择 = 能力边界错乱(专项89 YonCode 实测截图:"单点"与 A/B/C 并列出现在泛微 E9 部署对话框) |
| D-17 | 连接器包 ZIP 路径(connector_zip)禁止把默认值当既定事实——必须交互与用户确认后才锁定——指南 frontmatter connectorZipPattern 只是默认候选(相对资产根目录,现场安装盘实际目录名/版本号常与之不符);阶段2/3 须知须列为「需要你确认」决策项(展示默认值 + 请用户对照现场资产盘核对,不符则提供实际路径)。--connector-zip 显式传入 = 视为已确认;预检 section4 核验是最后防线、不能替代事前确认 |
默认值静默采用 = 路径不符时错误迟至 L2 连接器导入才爆(实战:2026-10-22 蓝凌EKP 现场 AI 直接展示默认包路径未请用户核对,与安装盘实际不符) |
| D-18 | 未经用户给出或实测验证的地址(oa_host/bip_host 等)只能以 __FILL_* 占位符进入 plan/须知,禁止猜测地址以真实形态落文档——代码兜底:deploy.py _assert_no_fill_placeholders 对 plan 深度扫描 __FILL_ 前缀,命中即 exit 2(专项113 F2,--from-skill-plan 与 --resume 两路共用) |
假地址污染 plan、误导预检(实战:shemar 2026-10-22 臆断 oa.shemar.com.cn:8443 实为邮件系统,预检连通性 3 项假红全由此来) |
| D-19 | 凡需用户确认的产物(plan/方案/账目核对)必须"结构摘要 + 原文全貌"并存呈现,二者不互相替代 | 压缩呈现致确认失真、往返返工(实战:shemar 2026-10-22 Gate 4 首次只呈现 1 份 plan 摘要被退回) |
| D-20 | 用户给出的 URL 原样透传,domain/host 类参数一律完整 origin 形态(协议+host+端口);plan 地址字段须与用户原话逐字符对拍——工具侧对裸域名只补默认 443 不猜端口;非标端口环境端口一丢即静默打错环境;数据源=CookieStore.save 键回显(专项113 F3,stderr [F3] key=… 行)+ 预检 #25 私有云裸域名 WARN |
端口丢失 → 静默打错端口(实战:shemar srm-test.shemar.com.cn:9955 裸域名三处连环丢失+keyring 键分裂) |
| D-21 | 交互等待步骤(弹窗等人)必须后台运行并明确告知等待动作;中断恢复先查 keyring/进程残留再决定重试,禁止盲目重弹——代码兜底:manual_login 等待环 landed 即 checkpoint 写 keyring(专项113 F4,核心三件套齐才写、写失败不中断) | 登录成果随进程丢失(实战:shemar 2026-10-22 控制进程死=已完成登录作废+孤儿 Chrome 残留) |
HIGH 级(高风险)
| 编号 | 规则 | Python 兜底 |
|---|---|---|
| D-10 | 禁止 Cookie 跨环境复用(dbox/c3/srm-test),必须按 domain 路由 | 专项63:CookieStore 按 domain 多 keyring |
| D-11 | 禁止 --confirm-schedule 仅在非交互管道使用(人机交互必走 AskUserQuestion) |
— |
| D-12 | 禁止场景模糊推断("飞书集成资产包"等表述必须 AskUserQuestion 逐场景 multiSelect 列出该 vendor 枚举集;默认仅勾 A,B/C 方向必须用户显式勾选且不可同选;禁止预设组合选项) | 场景漏部署(专项74 实战:飞书 D 考勤漏);非法组合诱导(专项89:预设"全部 A+B+C 推荐"含 B/C 互斥) |
| D-13 | 禁止在 class PlanExecutor 内部插入 0 缩进 def(立即关闭 class body 并丢弃后续方法) |
dbox 部署崩溃(专项74 实战:ddf35c2 8 方法被丢弃) |
> 详细架构、阶段3 4 Phase 强执行、阶段5 五项检查、实战案例、验证清单、风险回滚详见 专项64-Gate-Pipeline-8阶段防跳步架构专项方案。
6.1 兼容入口(仅调试,正式部署禁用)
> ⚠️ deploy.py deploy / deploy_orchestrator.py 跳过 Skill 阶段1-5、不产 plan JSON、决策不可审计。仅用于调试单个 L 层或快速验证,正式部署禁用。
# 调试:验证(只读,不创建资源)
python3 yonbip-p-oa-asset-setup/scripts/workflow/deploy.py verify \
--vendor landray-mk --scenario A
# 调试:直接部署(跳过 plan JSON,不推荐)
python3 yonbip-p-oa-asset-setup/scripts/workflow/deploy.py deploy \
--vendor landray-mk --host <OA地址> --zip <资产包>
# 子Skill 2:SSO 链接生成(独立工具,不涉及部署阶段)
python3 yonbip-p-oa-ssolink-builder/scripts/encrypt.py \
--oa weaver --version ecology9 --auth default \
--token "$TOKEN" --third-ucid "uc4ibymo" --tenant-id "abh1k53"
# 子Skill 3:资产内容调整(专项119 六阶段管线:W0-W5,缺环 Gate 4)
# W0 环境检查(四探针,产 session;run_id 贯穿全程)
python3 yonbip-p-oa-asset-adjust/scripts/adjust_envcheck.py \
--vendor ecology9 --app-code <appCode> --env-nature rehearsal --session runs/<run_id>_session.json
# W1 盘点快照 + W1 评估 A1-A6(assess 三态:AUTO_OK/GUIDE_REQUIRED/BLOCKED)
python3 yonbip-p-oa-asset-adjust/scripts/adjust_inventory.py \
--vendor ecology9 --app-code <appCode> --scheme-code <目标方案code> \
--out runs/<run_id>_inventory.json --session runs/<run_id>_session.json
# W2 diff 预览 → 用户逐条确认 → plan 双字段回写(confirmed_by_user=true + mode=apply)→ session 登记
python3 yonbip-p-oa-asset-adjust/scripts/adjust_diff.py gen \
--plan runs/<run_id>_adjust_plan.json
python3 yonbip-p-oa-asset-adjust/scripts/adjust_common.py register-confirm \
--plan runs/<run_id>_adjust_plan.json --session runs/<run_id>_session.json
# W3 备份(manifest+sha256+可回放验证)
python3 yonbip-p-oa-asset-adjust/scripts/adjust_backup.py \
--inventory runs/<run_id>_inventory.json --session runs/<run_id>_session.json --env-nature rehearsal
# W4 执行(--session 必传;stage 链校验缺环即 Gate 4)→ W5 报告(六要素+恢复方案)
python3 yonbip-p-oa-asset-adjust/scripts/adjust_apply.py \
--plan runs/<run_id>_adjust_plan.json --apply --session runs/<run_id>_session.json
python3 yonbip-p-oa-asset-adjust/scripts/adjust_report.py \
--session runs/<run_id>_session.json --reviewer <复核人>
> ⚠️ 子Skill 3 退出码禁当成功信号:0=CONFIRMED|2=FALSE_SUCCESS(脚本已自动
> 反向写回,必须向用户告警)|3=FAILED(未生效,无需回滚)|4=Gate 阻断。
> 成功唯一判据 = 写后回读 1:1(adjust_verify.py),与子Skill 1 的 verify 同纪律。
6.2 通过路由调用(可选,仅意图识别)
> router.py 仅做意图识别与子Skill 路由;识别为「部署」后,执行仍走 6.0 skill-deploy,不要直接 deploy。
# 路由脚本
python3 scripts/router.py "部署泛微E9"
# → 自动路由到子Skill 1
python3 scripts/router.py "生成泛微单点链接"
# → 自动路由到子Skill 2
python3 scripts/router.py "把泛微绑定方案的员工编号改成工号"
# → 自动路由到子Skill 3
python3 scripts/router.py "调整绑定方案的部署参数(凭证/定时任务)"
# → 仍路由到子Skill 1(子Skill 3 只管内容层,边界用例)
七、意图路由机制
详见 references/interfaces/intent-classification.md
7.1 路由决策
| 用户输入包含关键词 | 路由目标 |
|---|---|
| 部署 / 实施 / 上线 / 资产包 / 排查 / 验证 / 清理 | 子Skill 1 |
| SSO / 单点 / encrypt / 链接 / OAuth | 子Skill 2 |
| 调整映射 / 绑定字段 / 映射键 / 员工编号绑定 / 消息来源 / 改绑定键 / 资产调整 / 调整绑定方案 / 登录账号 / 绑定口径 / 接收方式 / receiveType / 专修包 | 子Skill 3 |
| 连接器日志 / ipaas日志 / yms日志 / traceId / linker_code / 调用全貌 / 连接器报文 / 还原调用 / 日志排查 | 子Skill 4(否决词:执行日志 / run日志 / 部署日志 / 部署历史 / ui_logs → 子Skill 1;仅「日志」→ ambiguous 需确认) |
> ⚠️ 子Skill 3 边界(专项97):仅「已部署方案的内容层」(映射项 dataExchangeItems /
> 方案字段 integrateScheme / 常量 / 公式);「部署参数」(凭证/cron/重试/授权/订阅/
> 连接/路由规则/AppKey)→ 仍走子Skill 1 既有脚本,本 Skill 拒绝。
> 关键词歧义以 scripts/router.py 为准(route_intent 四路打分:子Skill 3 命中数需严格大于
> 其余路才判 subskill_3,否则回落子Skill 1;与子Skill 2 的比较用强信号计数
> ——「登录」为弱词,「登录账号/登录名」归子Skill 3 口径;子Skill 4 正词命中即判 subskill_4,否决词一票否决,
> 仅「日志」泛词返回 ambiguous=True 须 AskUserQuestion)。
7.2 路由脚本
scripts/router.py - 意图识别与路由
八、子Skill接口契约
详见 references/interfaces/subskill-interfaces.md
8.1 子Skill 1输出 → 子Skill 2输入
| 子Skill 1输出 | 子Skill 2输入 |
|---|---|
vendor |
oa_type(映射) |
version |
version |
thirdUcId |
thirdUcId |
tenantId |
tenantId |
singleJumpService |
singleJumpService |
8.2 子Skill 1输出 → 子Skill 3输入(内容调整)
| 子Skill 1输出 | 子Skill 3输入 | 说明 |
|---|---|---|
vendor |
params.vendor |
直接传递(决定厂商方向:清公式 vs 加 +86 公式) |
params.host / 部署环境 |
params.scheme_id |
经 inventory 读侧盘点定位目标方案;禁凭记忆填 schemeId |
| 部署后方案快照 | runs/<run_id>_inventory.json |
底账(回滚物料,非可选) |
| — | params.adjustments[] |
用户确认后的目标态;每条须有 before/after 逐字段对照 |
约束:子Skill 3 不接受凭证/cron/授权等部署参数(见 §七 路由表否决词)——
那类变更走子Skill 1 原脚本。
九、部署须知
> 阶段2部署须知由 PRE_DEPLOY_NOTICE_TEMPLATES 驱动,按 通用模板 + 厂商专属模板 双层结构输出。
> 阶段3参数采集按 Layer1→Layer2→Layer3→Layer4 分层执行(9.2节)。
> 违反此章的实战(如 ecology10 阶段2 仅输出通用模板)即为 P0 级缺陷。
9.1 部署须知模板(PRE_DEPLOY_NOTICE_TEMPLATES)
部署须知 = 通用16项 + 厂商专属N项。Skill 阶段2 必须先读 knowledges/{vendor}/实施指南-*.md 再按本模板输出。
9.1.1 通用16项(所有厂商必读)
| # | 参数 | 说明 | 必填 | 采集规则 |
|---|---|---|---|---|
| 1 | cookie | BIP 会话 Cookie(不询问用户——plan JSON 写 "FROM_BIP_COOKIE" 占位符,部署链自动 ensure 获取/续期;详见 §9.2 与 D-14) |
✅ | 🔑 自动获取(禁止 F12 手工复制,详见 §9.2) |
| 2 | bip_host | BIP 系统地址(如 https://c1.yonyoucloud.com;内网 HTTP 环境带协议前缀,如 http://129.0.3.124——专项102) |
✅ | 👤 用户输入 |
| 3 | oa_host | OA 系统地址(如 https://oa.example.com) |
✅ | 👤 用户输入 |
| 4 | asset_zip_path | 资产包 ZIP 本地路径 | ✅ | 👤 用户输入 |
| 5 | vendor | 厂商标识:ecology9/ecology10/eoffice/dingtalk/feishu/tencent/seeyon/landray-mk/landray-ekp | ✅ | 👤 用户输入 |
| 6 | scenarios | 部署场景:A待办/B工作通知/C预警通知/D基础数据 | ✅ | 👤 用户输入 |
| 7 | domain | BIP 域名(如 c1.yonyoucloud.com) |
✅ | 👤 用户输入(可与 bip_host 同源) |
| 8 | tenant_id | BIP 租户 ID | ✅ | 🔑 自动获取(Cookie 解码即得;用户不询问) |
| 9 | ucc_code | 集成认证中心编码 | ✅ | 🔑 L1 自动创建(thirdAuth/save 后 thirdUcId 写入 ctx,用户不询问;仅重部署场景可在 plan JSON 显式提供旁路复用) |
| 10 | asset_package_name | 资产包名称(用于 plan JSON full_name 前缀) |
✅ | 🔑 自动派生({vendor_label}-认证中心 等标准命名) |
| 11 | auth_type | 认证方式(appkey/secret/sso/cookie/basic) | ✅ | 🔑 按 vendor 模板自动选定(如 tencent→corpid+agentid+secret,feishu→app_id+app_secret) |
| 12 | hr_cloud | 是否使用人力云模块 | ⚠️ | 👤 用户选择(所有 9 厂商均适用:ecology9/ecology10/eoffice/seeyon/landray-ekp/landray-mk/dingtalk/feishu/tencent) |
| 13 | base_data_direction | 基础数据同步方向(正向/反向/双向) | ⚠️ | 👤 用户选择(适用 ecology9/ecology10/seeyon/feishu/dingtalk/tencent/landray-mk;landray-ekp/eoffice 无独立基础数据指南故不询问) |
| 14 | sso_service_url | 单点跳转服务地址 | ✅ | 🔑 自动派生(不询问用户,见 D-15)——create_connection 的 _resolve_sso_jump_url() 按 SSO_URL_STRATEGY 四态决策表派生(query_only / full_url_no_query / full_url_with_query / e10_split),9 厂商策略见 connection-params-matrix §十二;--sso-jump-url 仅显式覆写用 |
| 15 | use_gateway | 是否启用混合云网关 | ⚠️ | 👤 用户选择 |
| 16 | gateway_info | 网关信息(启用网关时必填) | ⚠️ | 👤 用户输入(启用网关时) |
采集规则图例:
- 👤 用户输入:阶段3 AskUserQuestion 必问
- 🔑 自动获取/派生:脚本/Cookie 自动产出,不询问用户(cookie / tenant_id / ucc_code / sso_service_url 等字段;cookie 尤其禁止让用户 F12 复制,见 D-14;单点跳转地址禁止询问,见 D-15)
- ⚠️ 条件必填:仅特定场景询问
> 📌 指南语境声明(D-05 与自动化的边界):实施指南中的「连接配置属性表」(单点跳转服务 /
> singleJumpService / authInterface / 消息单点跳转服务 等)描述的是 resData 字段语义——
> 自动化部署时由 create_connection 按 SSO_URL_STRATEGY 自动派生写入,属 🔑 自动获取;
> 指南原文是给手工实施人员在 OA UI 页面照抄用的。AI 读指南出部署须知时,此类字段只能作为
> 「以下由系统自动配置」说明项出现,不得列入用户准备清单或阶段3 采参(见 D-15)。
> 📌 关键设计:cookie / tenant_id / ucc_code / sso_service_url 等字段历史上被错误标注为"用户输入"或"必填",导致部署须知模板与实际采集流程不一致(实战:其他终端 AI 按旧指令引导用户 F12 手工复制 Cookie、交互索要单点跳转地址)。按"自动化优先"原则修订——脚本能自动获取的字段一律不询问用户。
9.1.2 厂商专属参数表(按 vendor 路由加载)
> 📌 单一事实源原则:9 厂商专属参数完整定义在子 Skill 1 yonbip-p-oa-asset-setup/SKILL.md:386 §7.5.2 vendor_extra 字段 → 脚本参数映射表。
>
> 本节不重复定义,避免双源维护漂移。Skill 阶段2 按 vendor 路由加载时直接引用子 Skill §7.5.2:
>
> - ecology9 / ecology10 / eoffice / dingtalk / feishu / tencent / seeyon / landray-mk / landray-ekp 共 9 厂商
> - 每厂商完整字段(vendor_extra 字段名 → 脚本 CLI 参数 → resData API 字段 + 必填标记)
> - 含 9 厂商 PDF 真相标记(如 ecology10 short_link_url ssoBip 父路径、landray-ekp account 字段名非 username)
>
> 引用路径:
> > yonbip-p-oa-asset-setup/SKILL.md#752 锚点 → §7.5.2 vendor_extra 字段 → 脚本参数映射表
>
>
> 实战教训:曾出现主 SKILL §9.1.2 与子 SKILL §7.5.2 双源维护,已发现 ecology9 tenant_id / ucc_code 等字段在两处描述不一致(如主 SKILL 把 ucc_code 标 ✅ 必填,子 SKILL 标 ⚠️ 仅 UCC 模式必填)。按"单一事实源"原则统一到子 SKILL §7.5.2。
9.1.3 厂商场景矩阵(v6.4.12+74 新增,防漏场景)
阶段2 输出必须包含该 vendor 适用场景清单,供用户交叉校对。这是事后追溯证据——如果阶段1 漏问场景,阶段2 输出的场景矩阵会暴露问题。
模板示例(飞书):
## 飞书场景矩阵(必查)
| 场景 | 方案名 | 事件订阅 | 定时任务 | hr_service_type | 备注 |
|---|---|---|---|:-:|---|
| A 待办 | 31 方案 | 4 类 | 1 | simple/cloud | 默认勾选 |
| B 基础数据反向(OA→BIP) | N 方案 | 0 | N | simple/cloud | 与 C 互斥,二选一 |
| C 基础数据正向(BIP→OA) | M 方案 | 0 | M | simple/cloud | 与 B 互斥,二选一 |
| D 考勤集成 | 3 方案 | 1 | 1 | simple/cloud | 须独立勾选 |
**用户确认场景清单**:[A, B, D](阶段1 AskUserQuestion 多选结果;B/C 互斥故清单中二者至多其一)
9 厂商场景枚举参考(事实源 workflow/scenario_map.py VENDOR_SUPPORTED_SCENARIOS,专项89 v6.7.1 勘误——本表历史值 tencent/landray-mk/landray-ekp/eoffice 四厂商有误):
| vendor | 适用场景 |
|---|---|
| feishu | A, B, C, D |
| dingtalk | A, B, C, D |
| seeyon | A, B, C |
| ecology9 | A, B, C |
| ecology10 | A, B, C |
| landray-ekp | A |
| landray-mk | A, C(B=❌,PDF §6.3 实锤) |
| tencent | A, C, D |
| eoffice | A |
Why:2026-08-21 飞书实战漏 D 场景,阶段2 缺场景矩阵是直接原因(阶段2 已列出厂商专属参数但未列场景矩阵)。
更多细节:docs/refactor/专项74-场景模糊+planner class body双陷阱修复方案.md §3.1
9.2 分层参数采集流程
> ⚠️ 阶段3「4 Phase 强执行」(参考 专项64 §2.4)——4 个 Phase 必须全部完成才能通过 Gate 3 进入阶段4 plan JSON 生成。❌ D-04 禁止跨 Phase 执行。
阶段3 按 Layer1→Layer2→Layer3→Layer4 分层采集,不得跳层。
Phase 1 — Layer1 基础参数(所有厂商必采,第1步):
- 👤 用户输入:bip_host / oa_host / asset_zip_path / vendor / scenarios / domain
- 🔑 自动获取(不询问用户):cookie(禁止让用户 F12 复制——plan JSON params.cookie 统一写占位符 "FROM_BIP_COOKIE",v6.4.32+ 部署链自动展开并 ensure 获取/续期;见 D-14)/ tenant_id(Cookie 解码即得)/ ucc_code(L1 创建后写入 ctx;仅重部署可在 plan JSON params.vendor_extra.third_ucid 显式旁路复用)
- 对应 API:check_session.py(验证 cookie + 解码 tenantId)
- 失败处理:cookie 无效 → 自动 cookie_manager ensure 续期;续期失败才退出,不进入 Phase 2
> 📌 Cookie 自动管理(免手工复制,D-14 铁律):params.cookie 一律写 "FROM_BIP_COOKIE" 占位符,
> 部署就绪链自动:展开占位符 → 域感知 ensure(钥匙串缓存有效直接用 / 过期自动 Playwright 登录续期,
> manual_login 为 focus 三态自适应等待)→ env 注入子进程全场零弹窗。任何环节都不得引导用户 F12 手工复制 Cookie;
> ensure 失败时按脚本报错的两选一决策树走(set-credentials 录凭据 或 --manual-login 浏览器手工登录一次)。
> 详见 docs/cookie/COOKIE_SKILL_SOLUTION.md。
> 📌 多环境 Cookie 隔离:CookieStore 按 domain 多 keyring 账号并存
> (default/dbox/c3/bip-daily/srm-test 等)。set-credentials --keyring-user <env> 录入账密、
> bip_login_playwright --domain <url> --credentials-user <env> 登录、调用脚本加 --domain <url>
> 即可在多套 BIP 环境间切换,不会因 A 环境 cookie 失效误触发 B 环境 Playwright。
> 详见 docs/cookie/专项63-Cookie多环境隔离修复方案.md。
Phase 2 — Layer2 场景选择(第2步,按厂商路由):
- 认证方式:按 vendor 加载对应认证模板(如 tencent→corp_id+agent_id+secret,feishu→app_id+app_secret)
- 人力云场景(所有 9 厂商均适用):仅询问 hr_cloud(是/否人力云,影响员工查询 API /yonbip/hrcloud/staff/listdetailmdd 选用)
- 基础数据方向(适用 7 厂商:ecology9/ecology10/seeyon/feishu/dingtalk/tencent/landray-mk;landray-ekp/eoffice 无独立基础数据指南故不询问):base_data_direction(正向 YonBIP→OA / 反向 OA→YonBIP / 双向;具体支持的方向以厂商实施指南章节为准)
- 混合云网关(所有厂商适用):use_gateway + gateway_info
- 对应 API:list_thirdAuth.py(查询现有认证中心)
Phase 3 — Layer3 厂商专属参数(第3步,按 vendor 加载 9.1.2 对应表):
- 逐项 AskUserQuestion,不得跳过必填项
- ecology10 的 corp_id / short_link_url / sender_team_id_v2 为 EC9 模板的增强项,须额外采集
- eoffice 模板仅 5 项,不得输出 appKey/appSecret
- tencent 的 auth_host / auth_interface / thrid_token_host 为连接器 3+1 模式的核心参数,缺一不可
Phase 4 — Layer4 网络/权限确认(第4步):
- 单点服务健康:{协议}://{domain}/iuap-ipaas-sso/health 返回 success(协议随环境:HTTPS 默认;内网 HTTP 环境显式带 http:// 前缀——专项102)
- 网络双向可达:BIP↔OA 互访测试
- 权限清单:list_apiAuth.py 核验 VENDOR_AUTH_API_WHITELIST 1:1
4 Phase 全部完成 = Gate 3 通过 → 进入阶段4 plan JSON 生成。❌ 任意 Phase 未完成即禁止进入 plan JSON 生成(D-04 禁止跨 Phase 执行)。
9.3 全链路确认方案总览
| 阶段 | 执行方 | 步骤 | 关键产出 |
|---|---|---|---|
| 阶段1 | Skill(脑) | 意图分析 | vendor + scenarios |
| 阶段2 | Skill(脑) | 读实施指南出部署须知 | PRE_DEPLOY_NOTICE(通用16+厂商专属N) |
| 阶段3 | Skill(脑) | 分层参数采集 | 完整参数集(Layer1-4) |
| 阶段4 | Skill(脑) | 生成 plan JSON | <run_id>_plan.json |
| 阶段5 | Skill(脑) | 环境检查 | check_session / SSO 健康 |
| 阶段6 | Python(手) | L1-L8 执行 | API 调用结果 |
| 阶段7 | Python(手) | L9 验证 | deploy_verify 结果 |
| 阶段8 | Skill(脑) | 报告输出 | Markdown 部署报告 |
> P0 红线:阶段2 输出必须包含厂商专属参数。仅输出通用16项即为 P0 级缺陷(触发实战 ecology10_E10_A_20260809_104006)。
> P2 红线:阶段3 必须分层执行,不得一次性输出所有参数。
阶段7 L9 verify 命令硬性要求(专项92 FIX-M1,敏华 2026-09-22 假红复盘):Skill 端直调 deploy_verify.py 时,命令必须携带以下两个参数(从 plan JSON 取值,禁止省略):
python3 scripts/deploy/deploy_verify.py \
--cookie "$BIP_COOKIE" --vendor <vendor> --scenario <场景> --domain <BIP域名> \
--full-name "<plan.full_name>" \
--sso-mode <plan.params.sso_mode,缺省 default>
--full-name:与 L1 创建认证中心同名(plan JSONfull_name字段)——缺失时「本次 run」计数恒 0(死值显示),本次新建无法与历史遗留区分(2026-08-27 dbox 假绿根因);--sso-mode:泛微系 UCC 场景必须传ucc——缺失时snsPlatform='feishu'(平台 UCC 模板映射)被期望'open'判假红(2026-09-22 敏华假红根因)。
十、质检(部署后环境健康度检查)
> 质检 ≠ 验证(L9)。验证是单次部署产物正确性(FAIL 阻断);质检是环境整体健康度(FAIL 出报告不阻断,含历史产物 + 跨厂商 + 被动变更)。
10.1 质检铁律
| 序号 | 规则 | 说明 |
|---|---|---|
| R1 | 先查部署记录,再跑质检 | 从 runs/ 目录确认厂商实际部署了哪些场景,只对已部署场景质检 |
| R2 | 未部署场景不质检 | 不要盲跑全场景(A/B/C/D),未部署的场景跑质检无意义且产生误导性 FAIL |
| R3 | 一个场景只跑一次 | 避免路径错误重试产生重复报告,浪费时间且污染 reports/ 目录 |
| R4 | 场景必须与 plan 对应 | 从 plan.json 的 scenarios 字段确认场景字母(A/B/C/D),不要臆断 |
10.2 质检标准流程(4 步)
# 步骤1:确认实际部署了哪些场景
ls -lt runs/ | grep <vendor>
# 步骤2:从 plan.json 确认场景映射
cat runs/<vendor>_<run>_<date>_plan.json | python3 -c \
"import sys,json; d=json.load(sys.stdin); print(d['plan'].get('scenarios',[]))"
# 步骤3:只对已部署场景执行质检(每个场景一次,不重复)
cd yonbip-p-oa-asset-setup/scripts/workflow
python3 quality_check.py --vendor <vendor> --scenario <A/B/C/D> \
--domain <domain> --output reports/
# 步骤4:查看报告(不要重复执行同场景质检)
cat reports/quality_report_<vendor>_<scenario>_<timestamp>.md
10.3 场景映射(plan scenarios → 质检字母)
| plan scenarios 字段 | 质检场景 | 说明 |
|---|---|---|
todo |
A | 待办集成 |
base_data_reverse_sync |
C | 基础数据反向(vendor→BIP) |
base_data_forward_sync |
B/D | 需看 plan 具体方案:含 timer 则为 D(考勤)或 B(基础数据正向) |
attendance |
D | 考勤集成 |
> 易错点:base_data_forward_sync 不一定等于 B 场景。飞书考勤 plan 用的也是 base_data_forward_sync,但实际是 D 场景。必须结合 plan 中的 asset_zip_path(资产包名称含"考勤"→ D)或 hr_service_type 字段判断。
10.4 质检脚本路径
yonbip-p-oa-asset-setup/scripts/workflow/quality_check.py # 质检主脚本
yonbip-p-oa-asset-setup/scripts/workflow/quality_expectations.py # 期望数据单一事实源
10.5 质检输出
- 报告落盘:
reports/quality_report_<vendor>_<scenario>_<timestamp>.md - 基线快照:
~/.oa-deploy-cache/quality_baseline_<vendor>_<scenario>.json - 退出码:FAIL 不阻断(与 L9 验证不同),但提醒人工复核
十一、维护规则
11.1 子Skill代码维护(v6.0 更新)
子Skill 位于主仓库根目录同级(yonbip-p-oa-asset-setup/、yonbip-p-oa-ssolink-builder/、
yonbip-p-oa-asset-adjust/),可直接在主仓库修改并走主仓库常规 PR 流程。
v6.0 起采用 Skill+Python 混合驱动模式:子 Skill 的 SKILL.md 作为元数据/契约入口,
实际执行由 Python 脚本(scripts/workflow/)完成。子 Skill 的代码随主仓库版本一起迭代,当前 6.7.23。
> 完整版本历史见源码仓库 CHANGELOG.md,本节不再逐一罗列,避免与 CHANGELOG 双处重复维护。
> 子Skill 亦可独立分发(各自有 SKILL.md frontmatter)。如需在子仓库独立开发再同步主仓库,
> 走子仓库 PR + git subtree pull(可选,非必须)。
11.2 主仓库可维护区域
✅ 子 Skill(同级目录,直接在主仓库修改):
- yonbip-p-oa-asset-setup/ - 资产包实施部署子 Skill(SKILL.md + scripts/ + references/ + knowledges/)
- yonbip-p-oa-ssolink-builder/ - SSO 链接生成子 Skill
- yonbip-p-oa-asset-adjust/ - 资产内容调整子 Skill(专项97;scripts/adjust_* + tests/)
✅ Python 脚本(Skill+Python 混合驱动的执行引擎):
- scripts/workflow/planner.py - workflow 执行引擎(run_step / PlanExecutor / build_executable_plan)
- scripts/workflow/deploy.py - skill-deploy 主入口(verify / deploy / deploy-planner / skill-deploy 子命令)
- scripts/deploy/check_session.py - L0 会话检查
- scripts/deploy/deploy_verify.py - 部署后验证(L9)
- scripts/deploy/deploy_precheck.py - 部署前预检
- scripts/deploy/cleanup.py - 资源清理
- scripts/thirdAuth/、connection/、application/、appkey/、eventSubscribe/、routeRule/、apiAuth/、schedule/、scheme/ - L1-L8 各步骤脚本
- scripts/utils/api_common.py、api_endpoints.py、cookie_manager.py - 公共调用层
✅ 文档与元数据:
- SKILL.md / AGENT.md / CHANGELOG.md / package.json - 主入口与版本
- docs/ - 设计文档(源码仓库,不进发布包)
- output/ - 部署报告(如 seeyon-全量部署报告)
- references/ - API 速查、Trap 档案、技能参考
❌ 主仓库禁止修改:
- .githooks/ 约定的不可绕过项(如 Co-Authored-By)
十二、版本
当前 6.7.23(专项118 质检引用有效性断言体系 G1~G11+redeploy 清除链真清空修复+专项119 资产调整六阶段管线 W0-W5——专项118 四期断言:quality_refs.py B 层纯函数唯一实现源+deploy_verify 五期挂载,G1/G2/G10 应用·方案引用+连接字段级(悬空引用拦截=京投210同型,R5-2 从「非空」升级为「回读存在」)/G4 认证中心/G8 连接器/G11 订阅类覆盖同源化(期望源同源 D1,橡皮图章退役)/G3 事件链配对(T02 死链形态)/G6 投递健康(按时点分判级)/G9 质检期连接探针(双语义 ok=code200 部署期原语义/biz_ok 文案成功态,--allow-conn-fail 与专项94 两期分离)/G5 二次部署衔接(--expected-connect-id 编排自动透传,「建新不切旧」拦截)/G7 连接代际对账(提示层不判罚);P5 deploy_redeploy 清除链修复 R1~R6(契约表对齐/fail-fast 中止/删连接前方案清空复验+自愈重删/结果真实聚合/顺序对齐 cleanup=方案→订阅→AppKey→定时任务→连接→认证中心/出口码分阶段;删除作用域过滤与 cleanup 同源防误删他厂资产;⚠️行为变更:清除从「假清空(契约7/11必炸+失败全吞没,实际只删掉认证中心)」变「真清空」,存量环境跑 redeploy 会真删旧资产,发版说明须声明);专项119:Agent 前置 P-1/2/3+Python 强制管线 W0-W5(W0 envcheck 四探针/W1 assess A1-A6 三态 AUTO_OK·GUIDE_REQUIRED·BLOCKED/W2 diff+register-confirm plan_digest 锁定/W3 backup manifest 两层 sha256+可回放验证/W4 apply --session 必传 stage 链校验缺环 exit 4 报缺哪环/W5 六要素报告+prod 复核人 Gate;--legacy 逃生门仅调试醒目 WARN 正式禁用;session 仅索引产物实算为准);dbox 演练环境全链实测闭环(S1 真写 CONFIRMED+回滚演练回读 1:1 基线;W-A 写端点脚本腿专项97 以来首次实发打通);实证修复七处(写腿双重编码 str 被 _do_api_request 再 dumps→bytes 直通/adjust 自有端点裸相对路径→_bip_origin 绝对化 fail-loud/写侧形态 HAR 逐键 diff 规整=reg 瘦形态三键+advanceCondition+宽类型/T1 会话探针补 needrelogin 业务语义(exit 4 与 API 异常 exit 3 分层)/apply cookie Gate 项延后至 _resolve_cookie/W1 --session 缺文件静默跳过→fail-loud/register-confirm 子命令参数定义);.gitignore 行内注释致 backups/ 排除失效修复(注释必须独占一行);新增测试约 130 例、全仓回归 1615P+4S+1X 零失败);上一版 v6.7.22(专项113 错误复盘20261022+部署报告工具债八项修复——F2 __FILL_ 占位符硬拦截(_assert_no_fill_placeholders 深度扫描 exit 2,--from-skill-plan 与 --resume 两路共用;评估③证实 resume 原绕过 _validate_skill_plan)+D-18;F1 依赖三层收敛(ssolink-builder/requirements.txt 新增 requests/pycryptodome 声明 + skill_self_check [1.5] 依赖项缺失 WARN + deploy.py main() 入口 check_runtime(playwright=False) 硬检前置)+使用说明两份 requirements 分工;F4 manual_login 等待环 checkpoint(landed 即写 keyring、核心三件套 fail-closed 缺件不写、写失败 WARN 一次不中断、10s 节流重试——根除"控制进程被杀登录全丢"窗口)+D-21;F3 CookieStore.save 键回显(stderr [F3] key=…,D-20 对拍数据源)+ 预检 #25 私有云裸域名 WARN(键分裂风险提示不 FAIL);F7 SecretStore write-then-verify(判据从"调用是否抛错"换成"数据是否真落":写后回读整条等值/分片 part0 头部+全片存在校验,失败诊断带 keyring 后端类名——P7"落盘仍抛误报"评估⑦注入复现定向根除,_delete_shards 无责勘误);F5 D-18~21 四纪律+Gate 4 增"原文全貌已呈现"(SKILL/AGENT 双处+feedback README D-01~21);F6 traps #78-80(macOS 无 timeout/BSD grep BRE +/stdout 块缓冲——原拟 #75-77 已被 v6.0.1 档案占用,评估②修正编号)+AGENT §9.2 三行;F8 门禁检查4 双向实跑(HEAD 绿/6.7.19 市场包副本红精确复现 P9 缺断言行,零代码随版关闭);E1 勘误("规范化剥端口"指控不成立——真根因=入口丢端口+裸域名补默认443无防呆+keyring 键分裂);新增测试 12 例、全量回归 1564P+4S+1X 零失败);上一版 v6.7.21(专项117 apireport 接口请求报告能力沉淀——log-search 子Skill 新增 apireport 子命令(§3⑦):请求地址/请求参数/响应报文三要素两层渲染(三方接口+上游连接器),host 由同连接器全 URL 三方调用条目实证拼接(多候选不自动拼接宁实勿断),结论固定六序判定,格式规范唯一源 references/apireport-format.md,测试 7 例回归 73P;实战样例 trace b71f7d31 完整地址 ×389 条实证);上一版 v6.7.20(DSP支持单 YWLJQ-18074 沉淀——asset-adjust 预警通知消息类专修包 warning_notify_ecology9:泛微响应原文 url or redirectUrl is null + ALARM_NOTIFY 报文 + 转换规则页截图三证落定根因=预警事件体无 url/redirectUrl/mUrl 字段(webUrl 相对路径、srcDomain 单独字段)+ 平台语义「来源字段 null 则公式整行不生效」——linkMobileUrl 行来源 value.url 不存在恒产 null(原「①接口注册/③code/④口径三选一」预判修正);R3 新增 message.linkUrl/message.linkMobileUrl 同款域名兼容三态模板(startsWith http 原样/相对路径拼 srcDomain/isEmpty 出空串防 null;linkMobileUrl 来源字段换绑 value.webUrl,mUrl 变体弃用)+ domain 参数(默认 value.srcDomain),fallback 放宽为非必填;SCHEME_KIND_SUFFIXES 增 message 代际;展开器 source_field 专项守卫推广为全部模板占位符通用 fail-loud;五项语义声明(concat 未实证须编辑器核写法/来源字段 null-gate 应用后回读/行名 fail-loud 禁凑/证据级=报错+报文构造非包转写须推送数据试发/code1169→S2、receiveType+userIds→S9 分流);新增测试 21 例、子 Skill 回归 239P 全绿、全仓 1468P+4S+1X;首现场实改+试发待做);上一版 v6.7.19(专项110 定时任务安全铁律落地 + 专项111 蓝凌EKP 交互缺陷修复——专项110:定时任务必须建成停用、严禁 skill 开启定时调度,严禁 skill 触发或以指引/文案指示触发数据同步任务执行(执行时机一律客户/顾问人工决策);create_schedule.py 硬编码 flag:1 → CREATE_DISABLED_FLAG=0(flag:0 创建即 PAUSED,现网实证);RL3 终态断言管线 = GET schedule/page 回读断言 item.status==PAUSED(fail-closed,附人工停用路径),非 PAUSED 才补 schedule/pause(RL1 安全方向,内联不暴露 toggle CLI);GET= data.items 与 POST= data.data 双口径陷阱写入注释;RL5 api_common 唯一 HTTP 出口黑名单 FORBIDDEN_SCHEDULE_MARKERS(/schedule/resume/ 与 /schedule/start/ 命中即 raise);asset-adjust 五处指引文案去「立即执行/重跑绑定任务」→ 客户自行执行、时机自定;planner 基础数据闸门改写为「创建停用态任务」语义;防回归 T-a/T-b/T-c + RL3 管线 mock 5P;专项111:蓝凌EKP 两交互缺陷修复——D-15 扩充(现役 BIP5/6 恒 ssoBip 形态,版本形态禁问,/authNew 降为 --sso-jump-url 逃生通道;W1 预检 #1 SSO 探针 PASS=派生前提成立/FAIL=环境问题,非切换信号)+ D-17 新增(connector_zip 默认值须交互与用户确认后锁定,connectorZipPattern 仅默认候选);创建失败 WARN 现役口径;防误伤断言齐全);上一版 v6.7.18(口径归一与仓库治理版——无新功能,闭环 v6.7.17 的分发欠账:① 远端版本指针载体口径归一:实测载体是文库 markdown 文档 yonbip-p-oa-deploy-version.md(分享码 dd8aC67ae153),「version.txt」系专项93 设计早期的文件名叫法、落地形态已变;代码 docstring / DIST 手册统一改称「文库版本指针文档」,parse_version_txt→parse_version_doc(旧名保留为别名,单一实现禁第二份逻辑);CHANGELOG 历史条目与已封版方案档留痕不动;② 仓库治理:.gitignore 补 data/*(1.6G 现场原始数据含 HAR 抓包与真实凭证)+ 根级 /feedback/(客户与顾问个人信息)整目录排除,4 个已入库非敏感样本以 ! 例外保持追踪,docs/operations/feedback/(反馈机制设计文档+空台账)不误伤照常入库;③ 文档入库:专项108 报错对照矩阵立项 / OA 部署工具能力盘点 / 顾问反馈收集方案 + 反馈表设计;④ 分发闭环(发版侧):文库指针文档正文 6.7.15 → 6.7.18,6.7.16/6.7.17 在文库渠道一并跳过(内容被 6.7.18 完整包含);相关用例 88P + 全量基线);上一版 v6.7.17(专项106 事件体适配专修能力沉淀 P0——调整子 Skill S8 配方/专修包落地:配方库 R1 时间兜底(fallback/always_now 两模式)/R2 办理人回退/R3 链接分支(tns 前缀/mUrl 空回退 httpUrl)/R4 业务默认值(REQUIRED_NO_DEFAULT,'预算' 缺参即阻断)/R6 源声明行(P0 仅存在性检查+guide,实测前禁自动新增)+ RECIPE_BUNDLES.perf_todo_ecology9 专修包(core 10 行公式+2 衍生声明行,模板逐字节转写京投包黄金公式;receivedatetime 换源属 R7 语义决策、agentMessageId 属 R5 弃用均移出包外);adjust_diff.py bundle 一键总表(语义声明置顶+R6 存在性+逐行 diff 公式可读化+P6 三态第三方改动默认不覆盖+非目标漂移业务字段级比对+逐方案 plan 落盘——apply 单方案语义拆分);plan schema 增 items 真实七键(classname/default_value_type/error_type/type_value/stype/ttype/source_translator_param;translatorclass 实为 collist 列级键不入映射=勘误)+op=add_row 恰 0 存在性断言;999 读链路探针(getSchemeInfo 业务码 999=yht_access_token 失效,后端 token 校验与会话分离,CHECK_SESSION PASS≠读改链路可用;inventory/apply 双接线 fail-loud 禁带病继续);直映射→公式改造必须同步带 classname=FormulaTranslator(漏带=平台不识别公式);fixtures 脱敏入库(TENANT_X/UUID_X/ID_N)+黄金对拍 63 例(10 行逐字节,含 receivedatetime 保源 msgTsLong/appurl 回退 httpUrl 两条例外 replace 表达;实证京投包 update_call agentMessageId=iif 空判版=R5 弃用语义现场实证,包外科目 gate 如实拦截不搭车);跨包对拍纪律:pkid 禁作首选(烘焙 id/脱敏 id/运行时 pkid 属不同 id 空间)业务键优先、元数据字段(含 ccreationtime)豁免比对;子 Skill 全量回归 217P;T2/T8 dbox 实测待现场执行);上一版 v6.7.16(专项107 登录账号业务映射专修能力沉淀 S9——调整子 Skill 新增场景 S9 + 专修包/配方两层结构:泛微待办绑定链第三种口径「登录账号口径」(绑定值=BIP 员工 code/登录名,由 user_id 经 base.user.BipUser 人员实体反查),用户 2026-10-20 决策采用(知悉容错更窄:依赖 BIP 人员已同步且能按 userId 查到 code,原手机号口径只要手机号一致即可);京投-企业绩效现场实证:bindingCode 已是登录账号公式、但工作通知/预警通知 receiveType 仍是 3 → 两侧口径错配;原厂对照 ec9_todo_asset.zip:原厂 bindingCode=mobile + +86 清洗公式、receiveType 同为 3;S9 三方案联动(绑定 + 工作通知 + 预警通知),RECIPE_BUNDLES.login_account_ecology9 专修包 + RECIPE_LIBRARY 配方 L1/L2(Bundle=用户唯一使用单位,声明目标态天然幂等);新脚本 adjust_recipe.py 展开器(list/expand/plan,纯本地不触网),保形展开——公式函数名与空白形态随目标方案当前既有形态走(平台实证态 getValue( "base.user.BipUser" , ... ) vs 社区文章 12454 截图态 bipGetValue(...),函数名不一致,写后回读 1:1 逐字节比对故禁统一改写);conversionRuleValue 契约=「JSON 字符串的数组」;required 参数缺失即报错(防 required 形同虚设);S1 清公式 vs S9 加反查公式方向相反勿混用;回归 1224P+3S+1X);上一版 v6.7.15);上一版 v6.7.15(专项105 连接器日志搜索子 Skill(部署后排障能力收编 subskill_4——新建 yonbip-p-oa-log-search:纯 stdlib 单脚本 5 子命令 scan 格式先验 / search 多维检索(traceId/linker_code/request_id/关键字/时间窗/车道)/ replay 调用全貌还原(含 refreshToken 前置)/ analyze 完整性分类(no_end 中断嫌疑置顶)+异常聚类+耗时 topN / export json+csv;退出码 0/1/2/3/4 契约,0 命中如实报 0;真实日志验证驱动 4 项设计修正(traceId 唯一来源=头部 query 区→L2 主路径不可关、归并截断防误吸心跳 842 行实证、脱敏锚定 refreshToken 不误伤、配对反转 traceId=调用簇键 request_id=操作键);router 四路打分(正词强意图+否决词一票否决+「日志」泛词 ambiguous 强制确认);log-format.md 单一规格源;fixtures 全手写构造、真实日志永不入库、输出默认脱敏、导出落 output/ 双排除;回归 1327P+4S+1X);上一版 v6.7.14(专项104 私有云默认规则写侧 canonical 化——北京公交 EC9 事件推送 210 条全失败 return is empty 实锤:写侧无条件输出 dbox 形态 tt=1+「默认规则」,而私有云派发器仅执行 tt=0 canonical 条(shemar/国合/北京公交 UI save 三处一致;同一 tt=1 形态公有云执行——飞书 7 周生产——私有云忽略,D-A 环境分叉是必要性设计,「统一改 tt=0」=错误方向),专项95 只修读侧写侧漏改、verify 全绿正是读侧宽容的代价;M1 写侧 build_default_rule_body(rule_form) public 22 字段逐字节不变/private 覆写 4 字段对齐 UI save 实测 + --rule-form/OA_DEFAULT_RULE_FORM 逃生通道(D-F)+ D-C 私有云禁 create 语义(PRIVATE_CREATE_FORBIDDEN exit 2 不发请求,F1-c 壳推定 id=routeId+2 保 update)+ D-D 写后回读形态断言(私有云回读 tt≠0 FAIL loud);M2 读侧 R5 私有云形态门控(domain 未传降 warning 防误杀公有云 tt=1)+ D2 私有云 tt=0 单判 + legacy 形态/no_dispatch 两道新门 + 壳条留痕(国合 19 天实证壳=派发死重/计数污染非截胡,专项95 附A 叙事勘误);M3 存量迁移无独立脚本(L6 重跑原地改写,quality_check 标记 drift);dbox 全链路/create_route_rule/reset_default_rule 零变化;回归 1051P+3S+1X(基线 1033P 净增 18);A6 现场复验待北京公交重跑 L6);上一版 v6.7.13(专项102 BIP环境HTTP协议支持——私有化内网 HTTP 环境全链路打通(YonWork 现场 http://129.0.3.124 HTTPS 拒连,技能强制 HTTPS 致 L1-L9 必然失败);根因两查:R1 单点=env_config 四 origin 硬编码 https 且 _normalize_domain 剥显式 http 前缀(10 文件 36 处消费方改一处全跟随)+ R2 散拼=5 文件 11 处手拼 https://{domain}(update_schedule 双重协议实锤,HTTPS 环境同坏);修法=M1 _split_scheme 显式声明式协议(显式尊重/裸 host 默认 https,公有云零变化,bip_domain 恒裸 host)+ M2 ensure_origin 收敛 11 处散拼(顺带根治双重协议 bug)+ M3 trap #74 + grep 防回潮断言;D1 不做 https→http 自动降级探测(协议只来自显式输入);回归 1033P+3S+1X;HTTP 环境端到端待现场复检;上一版 v6.7.12(勘误「更新后即时生效」——用户实测推翻专项98 §5.3「更新完成≠会话生效(必须重启)」:Skill 脚本每次调用都是 python3 全新进程从磁盘加载,原位替换后 0 秒的下一次调用即新代码(可控实验实证);auto_update.py UPDATED 输出/本 SKILL §阶段1/使用说明全改「即时生效、直接继续本次部署」;首次安装(新目录需客户端重扫,专项84 场景)重启口径不变;唯一残留边界=会话内 SKILL.md 指令快照不自动刷新(建议重读,轻提示);回归 1019P+3S+1X);上一版 v6.7.11(专项100 登录链路修复——F1 会话哨兵判定(URL 快路径 ∨ yht_access_token 哨兵,三环境实测登录成功判定全部哨兵命中=CAS 回跳中间态是真实主路径,根治非 dbox 域 manual-login 死等 600s);F1-b 浏览器弹出确认(bring_to_front + 文案诚实化 + _browser_alive 双级存活探测 fail-loud——macOS 关窗口≠退进程盲区修复 + context.pages 属性 bug 修正,trap #73);F2 九处 resolve_cookie domain 透传 + AST 静态审计防第三处漏传 + replay_probe 回流;F3 #25 审计源对齐(runtime_cookie:占位符+运行时真值 PASS 带标注,双占位符仍 FAIL);pbox 环境下线勘误;traps #65-73;bip-daily/dbox/srm-test 三环境真实验证;回归 1019P+3S+1X;上一版 v6.7.10(子Skill 3 登记补全 + router 路由补洞——意图路由表/接口契约/决策树全链补齐子Skill 3,router 关键词表补「绑定方案」并新增 12 词部署参数否决词表做内容层/部署参数分界(此前「把X绑定方案的Y改成Z」实测 ROUTE=unknown,router 零自动化覆盖故该洞存活),新增 test_router.py 30 例含文档-代码同源断言,回归 1121P+3S+1X);上一版 v6.7.9(专项97 资产内容调整子 Skill 落地——新增第三子 Skill yonbip-p-oa-asset-adjust(subskill_3,8 脚本):绑定键/常量/公式等内容层调整走平台 API 直改(读全量→本地 diff→三件套整组回写→写后回读 1:1),S1 绑定键/S2 常量公式可自动、S3-S7 按写入依赖分级(guide 人工指引 fail-loud 降级),FALSE_SUCCESS 自动反向写回,127 新用例全绿(双包回归 1091P+3S+1X);上一版 v6.7.8(专项98 运行时自动更新——新增 auto_update.py A-G 七环节流水线(定位→下载→完整性三道闸→本地改动清点→备份→原子替换→装后回读 1:1)+ 12 态状态机;阶段1 检测到新版经用户确认一次后自动完成更新,完成后停止本次部署+提示重启会话(更新完成≠会话生效);指纹文件恒取新版、失败自动回滚、备份永不自动删除;REMOTE_VERSION_URL 已回填启用 + parse_version_txt 抽码回退;本版同期:陈旧死测试套件清理+活覆盖迁入官方基线(回归基线 929→964P+3S+1X);上一版 v6.7.7(version_check 健壮性加固——P1 _fetch_remote 加 64KB 读取上限 + P2 parse_version_txt 非 str 输入归一 ValueError、check() 兜底放宽到 Exception(兑现「永不 raise」契约));上一版 v6.7.6(专项91 许可预检可诊断性——#5 status 归一 + 透传 BIP 原文 + #4×#5 交叉二分指引 +《许可预检FAIL现场核实SOP》;专项92-M4 #24⑨项厂商感知 WARN + 92-M5 EC9 指南勘误;回归基线归零,全量 886P+3S+1X);上一版 v6.7.5(专项92-95 合并发版);上一版 v6.7.3(复核回流 N1/N2——quality_check --plan 质检 domain 候选链剔除 OA 地址 + verify_skill_effective.py --root 展开后保序去重)))。完整版本历史见源码仓库 CHANGELOG.md。
> 完整版本历史(v5.0.0 起每版变更)见源码仓库 CHANGELOG.md,本节不再逐一罗列,避免与 CHANGELOG 双处重复维护。
本Skill由 Trae 自动维护