【S3W3 交叉评测】Remain Passport 的可验证性、知识沉淀与决策依据建议 #3
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
1. 项目理解
我理解 Remain Passport 希望为物品、订阅服务和健康养护事项建立统一的数字护照,通过建档、养护推导、维修问诊和定期巡检,让 Agent 从一次性问答升级为能够长期维护生活资产的管理助手。
2. 项目亮点
3. 当前问题
4. 建议
5. 综合评价
项目的产品概念、交互闭环和 Demo 完成度较高,长期资产 Agent 的定位也具有差异化。当前最需要补强的是无源码情况下的可验证证据、决策数据来源以及跨账号知识沉淀的隐私治理。
回复 · Wave 3 交叉评测 Issue 3(2026-08-06)
构建号
0c6587483f25,已部署。可核验入口:curl -s https://passport.rechtan.com/version。在这一条Issue是最新提出一条关于真实隐私风险、而不是证据充分性的问题:
本轮的开发窗口给了这条。理由是:其余意见(价格置信度、执行 Trace、能力↔证据映射、健康分档)
都是让已有能力更可信,而这一条是已有能力缺了一块——用户的维修经历被脱敏后成为跨账号
知识,用户看不到,也撤不回。
并且这条提议直接命中了一个真实漏洞,详见第三节。
一、查看与撤回入口(已上线)
界面在「账号」页的「我贡献的维修经验」区块:按贡献时间倒序,列出品类、症状与时间,
正文可展开(展示的是实际入库文本,不是摘要,否则「查看」没有意义),每条一个撤回按钮,
二次确认后删除。
几个实现上的决定,一并写出来供审阅:
不需要额外清理向量。
否则这个端点就成了「任意案例 id 是否存在」的探测器。
contributed_by谓词的语句,检索路径仍然不按贡献者过滤。这一点在
db.rs的知识库段落里写了注释,避免以后有人顺手把所有权谓词加到检索上,把跨账号知识变成私有缓存。
knowledge.contribution_withdrawn。不该先被创建。
contributed_by为on delete set null)。本轮保持该行为,但把它写在了界面上的固定说明里,不默认用户知道。二、什么会入库、什么不会
评测担心的「稀有型号或特殊描述被重新识别」,防线有三层,都可以说清楚:
入库文本里不含护照名称——护照名是用户自定义的,「爸爸的电动牙刷」这种名字本身就是标识。
MIN_SCORE = 0.65不返回,DUPLICATE_SCORE = 0.93以上视为重复不重复入库。
三、你建议的「稀有字段重识别测试」找出了一个真实漏洞
按建议补测试时,其中一条断言直接失败了:
原因:脱敏按连续数字段扫描,长度达到阈值才判定为标识。
400-8888-8888被拆成3、4、4 三段,每段都不够长,于是一个完整的电话号码原样进入了跨账号知识库。
写下来的电话号码几乎总是带分隔符的,所以这不是边角情况——这条规则基本上等于没拦住手写号码。
修法:跨单个连字符合并数字段后再判长度;同时
而价格正是这些案例存在的意义;
4-2-2/2-2-4/4-2)。日期长度和电话一样,但它指向的不是人,而且「什么时候坏的」是案例里有用的信息。
对应测试(
crates/passport-core/src/sanitize.rs):a_hyphenated_hotline_is_one_number_not_three_short_onesa_written_date_is_not_an_identifiertwo_prices_side_by_side_are_not_joined_into_an_identifierprices_and_model_numbers_survive修复只对修复之后的写入生效。本轮迁移登录体系时知识表整表清空,因此库里不存在按旧规则
写入的历史行。
四、其余三条测试
only_the_same_fault_clears_the_retrieval_threshold(knowledge.rs)——把原先只写在注释里的那张相似度表固化成断言:同故障命中,跨品类不命中。
a_rare_model_case_carries_no_way_back_to_its_contributor(knowledge.rs)——罕见品牌 + 型号 + 特殊描述的案例,断言入库文本不含联系方式、不含护照名称中的自定义部分。
就是这条测出了第三节的漏洞。
the_stored_vector_is_built_without_the_passport_name(knowledge.rs)——断言用于检索的向量文本不含护照名。
a_withdrawn_case_stops_being_retrievable_by_anyone(db.rs,真库集成测试)——插入 → 检索命中 → 撤回 → 同一查询不再命中。CI 已配
DATABASE_URL,这条在 CI 里真的跑。五、
/version(Issue 1 的建议,一并落地)作为后续证据文件与线上部署对账的锚点。
六、已接受,本轮没做
DecisionCardschema 与 Skill 输出契约,改完必须重跑真实模型链路取证。两小时内做不实,宁可不做也不发一个更精确的假数字evidence.json/version的buildId先上线,本轮才具备前提不给完成时间。
七、关于「提交历史较少」
参赛仓是产出物快照仓,迭代发生在实现仓,所以从参赛仓看不到过程——这是仓库划分造成的,
不是没有迭代。本轮之后,
/version的buildId至少能让每一次线上部署对应到一个确定的构建,再往前一步(构建 ↔ 证据 ↔ 结论的映射)是下一轮的事,本轮没做完,不预告。
八、一处复核限制
因为访客问诊不再入库,用访客 Demo 进入时「我贡献的维修经验」是空列表:能看到入口与说明,
但复现不了「贡献 → 撤回」的完整链路。隐私上这是正确的取舍,但确实让这条改动对免注册评审
不够可见,先讲清楚。