修复 facets 默认分组失败及真实历史归档重建时的来源唯一键冲突。本包以已封版迁移 r3 为基线,只改两个服务模块及研究运行组件中的相同副本;主 Skill r9、教学细则、操作手册均不在包内。不要重新执行数据库迁移。
读取本固定提交目录的 release.json,核对 ZIP 字节数和 SHA-256,解压到新目录 /opt/ksf-unified-runtime-hotfix-20261109-r1,逐项核对 FILES.sha256。查看 patches/runtime.diff、validation.json。保留封版 r3 及原服务备份;新目录公共代码可由服务用户读取,私有配置继续原位置和权限。
先对新目录做 Python 3.9 语法和模块加载检查。沿用实际有效的 /etc/ksf/unified-db.json、PGSERVICEFILE、PYTHONPATH=/opt/ksf-unified-deps 和 KSF_LIBRARY_PYTHON,不改成文档中的示例路径。目标仍为 FKieRbIoGt_master / FKieRbIoGt_admin / FKieRbIoGt_main。
服务预热后统一切到本目录中的对应入口:PM2 资料 HTTP、systemd 行业 HTTP、inbox、登记脚本。逐进程核对真实入口和环境,并维持旧 SQLite 停写封存。不要用旧 SQLite 恢复写入。
SSH 保留已有 authorized_keys 两条受限键和 restrict 不动,只将现有短包装脚本 receiver-r3.sh 内的 receiver 代码入口改到本包 server/voc-library/library_receiver.py,保留原 receiver.json、依赖与 PG 环境。包装脚本名称可以保留,不再写长 forced-command。
使用本包 scripts/install-unified-skills.py,仅选择 --component research-runtime,对服务器已部署研究运行目录执行 plan → apply → verify。参数形式:
python3.9 scripts/install-unified-skills.py plan --component research-runtime --target <现有研究运行目录> --out <新的私有plan目录>
python3.9 scripts/install-unified-skills.py apply --component research-runtime --target <同一目录> --plan <plan目录>/plan.json --out <新的私有apply目录>
python3.9 scripts/install-unified-skills.py verify --component research-runtime --target <同一目录> --out <新的私有verify目录>
实际已知服务器目录为 /opt/ksf-library-publish-20261106-r1/skills/ksf-voc-library,执行前确认,禁止覆盖错误目录。Agent 若有独立运行组件副本也按相同流程更新并回读核验;不要上传依赖目录或凭据。保持原 Agent /opt/data/.env 中 KSF_LIBRARY_CHANNEL 持久绑定,不能回落本地快照。不得安装本包未提供的主 Skill,或恢复旧 SKILL.md 活动入口。
从原 Agent 的新非登录子进程执行默认 python3 query_voc.py contract,不手动指定通道;应返回 mode=ssh-channel、backend=parse-postgresql、正式研究代际。参数发现位置为 contract.retrieval.aggregation。
测试脚本和输入只写 /opt/data 内的私有子目录,不放宽写目录限制。以下为 facets 三个独立 JSON 输入,通过 query_voc.py facets --input <私有JSON路径> 执行;也可按契约从标准输入传入。
{}
应成功,分组为 platform/category。
{"entities":["products"],"groupBy":["brand"],"limit":20}
应成功,返回 brand 记录数。再以 {"entities":["products"]} 验证三个默认维度。显式 {"entities":["social"],"groupBy":["brand"]} 应被 SOCIAL_BRAND_IS_MENTION_NOT_GROUPABLE_OWNERSHIP 正确拒绝。
复验此前真实商品 get → source:jd:100000348106,source ID faa74ac0044a2b51e06915524468b1820fee8bd1c7af14b7176608d93b56761e,应保持原归档指纹及来源。原资料/行业网关、鉴权和现有代际同样回读,不拿测试环境代际替换生产。
重用此前失败的真实 30ff3c44…/transport.zip 原字节和 batchId=ksf-handoff-20261106-reviewed-r1,通过原受限 receiver intake、apply=false、expectedGeneration=执行时 contract 正式代际进行预检。不得改 requestId/window/batchId 或伪造材料。
应通过解包、build、mergePlan,不能再出现 source_records.asset_path/line_number 唯一冲突。此预检可以返回有效合并计划;相同导入器代际已导入时也可以返回 already-imported。核对前后研究指针与业务表未变、无新研究代际。worker 心跳导致的监测 revision 前进不算业务写入。
新代际写入只有取得真实未导入材料后才按原授权任务发布,并做同代际回读;本次修复验收不以旧归档 apply 代替。
这项已在当前迁移验收授权范围内,继续执行,不再以缺触发授权暂停。使用原 Agent、原真实项目/会话、已有真实工作坊成果,经已装 r9 的正常 workshop-save 链路保存。沿用真实 taskKey/version/归属和稳定 requestId,不虚构身份、内容、场景或批次;不得直写 Parse 表代替平台接口。
按 r9 的 workshop-tasks.md 组织保存输入,保存后用返回 artifactId 经 workshop-read 回读,并在真实看板核对原小组/项目/会话归属、阶段、内容和版本。回执列 artifactId、sessionId、归属核验、看板定位链接及回读一致性,勿回显凭据。无法访问原 Agent 时明确报运行条件,不再误报未授权。
回传:核包与组件 verify、实际服务/SSH/Agent 入口、facets 正向与反向校验、真实归档 dry-run、研究指针与原件指纹、成果保存回读归属、旧库仍封存。明确分开“本次已执行通过”“故障”“仅缺真实新材料待验收”。Skill/手册联合优化留第二步;前端展示与并发性能另按原任务顺序处理。