ClawHub 发布者搜索缺陷复现与句柄前缀检索修复验证
后端前端AI 技能AI 插件搜索引擎【免费下载链接】clawhubSkill Plugin Registry for OpenClaw项目地址https://gitcode.com/gh_mirrors/mo/clawhub点击查看免费下载listPublicPage是 ClawHubOpenClaw 的 Skill Plugin Registry对外提供发布者publisher公开列表与搜索的 Convex query。本文以仓库中的验证报告 .proof/report.md 为主线完整还原一次生产缺陷先复现、后修复、再回归验证的过程在真实部署数据上确认vyctorbrzezowski、vincentkoc等明明存在却搜不到的发布者剖析其根因搜索仅依赖热门窗口讲解源码中精确匹配 句柄前缀检索的修复逻辑并给出可一键执行的回归测试命令。读完本文你将能复现同类搜索漏检问题并理解 ClawHub 发布者检索的底层索引设计。一、背景ClawHub 的公开发布者列表与搜索入口ClawHub 的公开发布者浏览/搜索能力由convex/publishers.ts中的listPublicPagequery 提供定义于 convex/publishers.tsexport const listPublicPage query({ args: { kind: v.optional(v.union(v.literal(user), v.literal(org))), official: v.optional(v.boolean()), query: v.optional(v.string()), paginationOpts: paginationOptsValidator, }, handler: async (ctx, args) { // ... const numItems clampInt(args.paginationOpts.numItems, 1, 50); const queryText args.query?.trim(); // ... }, });关键行为分两种模式浏览模式无query按下载量/安装量取活跃发布者的 Top 列表搜索模式有query进入检索流程返回page、counts、globalCounts、continueCursor、isDone等分页信息numItems被clampInt限制在 150 之间。二、缺陷现场Profile 存在却搜不到验证报告 .proof/report.md 记录了在 Convex 部署环境wry-manatee-359.convex.cloud上、后端修复部署之前所做的只读复现报告状态标注为pass (production bug reproduction before backend deploy)。用listPublicPage分别查询四个句柄得到如下结果QuerylistPublicPagehandlesvyctor[]vyctorbrzezowski[]vincent[vincentchan]vincentkoc[]也就是说vyctorbrzezowski与vincentkoc是真实存在、却在搜索中消失的发布者而查询vincent命中的是前缀相同的另一位发布者vincentchan。报告同时列出了这两个被漏检 Profile 的实际情况vyctorbrzezowski→ 5 skills、1 package、46 installsvincentkoc→ 有公开 profile但 0 个已发布 skills。前者有实打实的发布内容与安装量后者只是一个空的公开主页。两者在缺陷环境中均无法被搜索到这正是本次验证要复现并钉死的生产缺陷。三、根因热门窗口之外的发布者不可见复现数据背后的根因藏在listPublicPage无查询时的浏览取数逻辑getActivePublisherRowsByDownloads中见 convex/publishers.tsconst MAX_PUBLIC_PUBLISHER_LIST_LIMIT 500; const LEGACY_PUBLISHER_DOWNLOAD_FALLBACK_LIMIT MAX_PUBLIC_PUBLISHER_LIST_LIMIT; // 1) 按总下载量倒序取前 500 // index: by_active_total_downloads // 2) 再按总安装量倒序取前 500兼容未回填下载量的旧数据 // index: by_active_total_installs // 3) mergePublisherRows 按 _id 去重合并修复前的搜索逻辑只在这份热门窗口Top 500内做过滤与匹配。于是任何落在窗口之外的发布者——例如只有 46 次安装的vyctorbrzezowski、0 安装的vincentkoc——都直接不可见即使它们存在、甚至拥有公开内容和发布物。这解释了报告中的全部[]vyctor、vyctorbrzezowski、vincentkoc都在窗口外vincent之所以能命中vincentchan是因为该发布者恰好进入了窗口或前缀命中了窗口内的记录。四、修复精确匹配 句柄前缀检索的合并取集当前仓库源码中搜索模式的取数已改为collectActivePublisherRowsForListPage见 convex/publishers.ts其流程为句柄归一化normalizePublisherHandle(queryText)——去除首尾空白、剥离前导、转小写定义于 convex/lib/publishers.ts。这保证 Vyctor 与vyctor等价精确匹配getPublisherByHandle走publishers表的by_handle唯一索引convex/lib/publishers.ts前缀匹配对user、org两种 kind 分别执行queryActivePublishersByHandlePrefix使用by_active_kind_handle索引做字典序范围扫描convex/publishers.tsfunction publisherHandlePrefixUpperBound(value: string) { return ${value}\uffff; } // .gte(handle, handlePrefix).lt(handle, publisherHandlePrefixUpperBound(handlePrefix)) // .take(MAX_PUBLISHER_HANDLE_PREFIX_CANDIDATES) // 100以\uffffUnicode 最大码位作为上界等价于所有以该前缀开头的句柄并限制候选数为MAX_PUBLISHER_HANDLE_PREFIX_CANDIDATES 100 4.三路合并去重浏览窗口行、精确命中行、前缀命中行按_id合入一个 Map最终返回并集。合并后仍保留两道语义过滤matchesPublisherQueryconvex/publishers.ts对displayName handle bio的小写拼接串做子串包含匹配保证搜索结果与展示字段一致includeEmptyPublishers Boolean(queryText)convex/publishers.ts搜索模式下允许展示0 发布内容的公开 Profile——这正是vincentkoc这类空主页也能被搜到的关键开关。排序由comparePublisherListItems负责下载量 → 星标 → 发布数 → 显示名分页仍按offset/numItems切片完成。五、只读验证如何在 Convex 环境钉死生产缺陷报告展示的是一种可复用的缺陷钉死方法后端修复部署之前直接对线上 Convex 部署wry-manatee-359.convex.cloud发起只读查询。在 Convex Dashboard 或脚本中对listPublicPage传入{ query: vyctorbrzezowski, paginationOpts: { cursor: null, numItems: 25 } }若返回空页而 Profile 实际存在即可在生产环境层面确认缺陷避免本地能过、线上不行的争议。本次四个查询的对照结果vyctor/vyctorbrzezowski/vincentkoc为空vincent命中vincentchan既复现了缺陷也锁定了修复后必须满足的行为基线前缀与精确句柄都必须可检索。六、回归测试与验证命令报告给出的验证命令为VITE_CONVEX_URLhttps://example.invalid bunx vitest run convex/publishers.test.ts通过注入一个无效的VITE_CONVEX_URL确保测试进程不会触达真实 Convex 后端随后用bunx vitest执行发布者模块的完整测试套件。convex/publishers.test.ts中与本次缺陷一一对应的两个用例finds publishers outside the popular install window via handle prefix searchconvex/publishers.test.ts构造 500 条高安装量热门行模拟vincentkoc0 skills、0 installs、只有公开 Profile在窗口之外断言listPublicPage({ query: vincent })能通过前缀检索返回[vincentkoc]且counts为{ all: 1, individuals: 1, organizations: 0 }finds publishers with published skills outside the popular install windowconvex/publishers.test.ts模拟vyctorbrzezowski5 skills、1 package、46 installs分别以前缀vyctor与精确句柄vyctorbrzezowski查询断言两种输入都能命中该发布者——同时验证了报告中的Profile 存在、内容统计可反序列化这一前提。此外测试还覆盖了浏览模式的by_active_total_downloads/by_active_total_installs双索引合并、officialPublishers的by_created官方过滤以及includeEmptyPublishers开关的行为可作为后续修改发布者检索逻辑时的回归防线。七、结论本次验证与修复形成了一个完整的闭环先在生产数据上只读复现.proof/report.md中的四组查询对照再定位到搜索仅依赖 Top 500 热门窗口的根因最终通过精确匹配 句柄前缀范围扫描 浏览窗口合并的取集逻辑与includeEmptyPublishers开关修复漏检并由两个以真实被漏检句柄命名的单元测试vincentkoc、vyctorbrzezowski钉死回归。对任何基于热门 Top N 窗口内过滤实现的搜索而言这一案例都值得作为漏检风险清单中的典型条目搜索必须脱离浏览窗口独立检索且空内容 Profile 是否可搜应由产品语义显式决定。赞分享后端前端AI 技能AI 插件搜索引擎【免费下载链接】clawhubSkill Plugin Registry for OpenClaw项目地址https://gitcode.com/gh_mirrors/mo/clawhub点击查看免费下载相关推荐ClawHub 插件发布校验问题排查与修复指南从 clawhub package validate 发现到发布通过ClawHub 插件发布校验问题排查与修复指南从 clawhub package validate 发现到发布通过 本文是 ClawHubOpenClaw后端前端AI 技能AI 插件搜索引擎local-deep-research 1.9.3 发布解析OrcaRouter 接入、DNS 重绑定加固与索引/检索缺陷修复local deep research 1.9.3 发布解析OrcaRouter 接入、DNS 重绑定加固与索引/检索缺陷修复 本文解读 local deepAI应用人工智能大模型RAGAI Agent深度研究本地部署后端前端OpenProject 6.1.1 发布说明工作包、时间线与搜索模块的关键缺陷修复解析OpenProject 6.1.1 发布说明工作包、时间线与搜索模块的关键缺陷修复解析 本指南基于 OpenProject 仓库中的 6.1.1 官方发布说明后端前端项目管理企业应用协同办公上一篇最完整vscode-drawio使用手册从安装到高级功能全解析下一篇【免费下载】 Diffy 使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Cyrus SASL 2.1.21源码编译与认证服务部署实践

Cyrus SASL 2.1.21源码编译与认证服务部署实践

简介:Cyrus SASL 2.1.21 是一套面向邮件服务场景的开源认证与安全层库,主要服务于 Postfix 等 MTA 的运维人员、邮件系统管理员以及需要对接 SMTP/IMAP/POP3 认证的开发者。它内置 PLAIN、CRAM-MD5、DIGEST-MD5 等多种安全机制,可有效防范中间…

2026/9/25 5:35:28 阅读更多 →
PTA 7-32 交换实数整数部分:C语言浮点数精度与类型转换避坑指南

PTA 7-32 交换实数整数部分:C语言浮点数精度与类型转换避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 5:35:28 阅读更多 →
医疗支架涂层技术解析与成本优化策略

医疗支架涂层技术解析与成本优化策略

1. 医疗支架涂层行业现状与核心需求2026年的医疗支架涂层加工领域正面临技术迭代的关键期。随着介入治疗普及率提升,国内每年冠状动脉支架植入量已突破150万例,对涂层技术提出了更高要求。目前主流涂层类型包括:药物洗脱涂层(DES&…

2026/9/25 5:35:28 阅读更多 →

最新新闻

杜比5.1测试视频:家庭影院音频校准实战指南

杜比5.1测试视频:家庭影院音频校准实战指南

1. 这不是普通测试片,而是一把“耳朵标尺”你有没有遇到过这样的情况:花了几千块买了新电视,接上回音壁,满心期待杜比5.1环绕声的沉浸感,结果一开电影——人声全挤在中间,爆炸声像从左耳塞里蹦出来的&#…

2026/9/25 6:05:48 阅读更多 →
工业AR智能巡检方案落地实战:从PPT到现场,避坑指南与代码复现

工业AR智能巡检方案落地实战:从PPT到现场,避坑指南与代码复现

简介:这份PPT方案面向工业运维工程师、设备管理人员及AR技术方案选型者,系统梳理了以XR技术为核心的智能巡检落地路径,重点解决传统巡检中状态参数无法实时查看、误操作漏检、专业水平参差与应急处理能力不足等痛点。包内共1个pptx文件&#…

2026/9/25 6:05:48 阅读更多 →
校园卡服务管理系统JavaWeb毕业设计完整实现与部署指南

校园卡服务管理系统JavaWeb毕业设计完整实现与部署指南

1. 毕业设计选这个课题,到底值不值每年到了毕设季,咨询我最多的JavaWeb方向题目就是这类"管理系统"题:学生管理系统、图书管理系统、校园卡服务管理系统。很多同学觉得这类题太普通,担心答辩时被导师挑刺。以我带过的多…

2026/9/25 6:05:48 阅读更多 →
电压基准芯片国产替代实战:选型、引脚兼容与实测避坑指南

电压基准芯片国产替代实战:选型、引脚兼容与实测避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:05:48 阅读更多 →
如何5分钟上手 NeoHorse-1-4B:从下载到第一次对话的完整教程

如何5分钟上手 NeoHorse-1-4B:从下载到第一次对话的完整教程

如何5分钟上手 NeoHorse-1-4B:从下载到第一次对话的完整教程 【免费下载链接】NeoHorse-1-4B 项目地址: https://ai.gitcode.com/hf_mirrors/TokenRhythm/NeoHorse-1-4B 想快速跑通一个能"动手干活"的 AI 模型吗?NeoHorse-1-4B 是一个…

2026/9/25 6:05:48 阅读更多 →
VisiData 列系统深度指南:Column 计算引擎、类型系统与聚合器实战

VisiData 列系统深度指南:Column 计算引擎、类型系统与聚合器实战

数据分析CLI数据可视化 【免费下载链接】visidata A terminal spreadsheet multitool for discovering and arranging data 项目地址: https://gitcode.com/gh_mirrors/vi/visidata 点击查看 免费下载 导读:本文围绕 VisiData 的 Column 体系展开&#…

2026/9/25 6:04:47 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →