No-WeCom MVP Demo:无企微端到端闭环¶
定位¶
这个 demo 验证在企业微信接口尚未接入时,当前本地 runtime 是否已经能跑通 MVP 主链路:
text
用户问题
-> docs/vault 搜索
-> knowledge gap
-> Ask Router 选择 owner
-> OntologyToolGateway
-> pending knowledge card
-> Connector Callback Ledger
-> callback Evidence Registry / raw snapshot
-> 本地 reply-text / ask-feedback-events.json
-> 下一轮路由纠错
-> 补充回复
-> review
-> promote
-> reindex queue
-> OntologyToolGateway
-> Knowledge Card Tool Gateway reindex/search
运行命令:
bash
python scripts/no_wecom_mvp_demo.py --write-report
当前结果¶
| 指标 | 结果 |
|---|---|
| 通过 | yes |
| 失败数 | 0 |
| 初始 owner | finance-owner |
| ask ontology action | allow |
| ask registry event count | 2 |
| Context Router baseline library | org_directory |
| Context Router corrected library | project_orgreorg_knowledge |
| Context Router feedback applied count | 2 |
| callback ledger recorded count | 1 |
| callback ledger duplicate count | 1 |
| callback ledger rejected count | 1 |
| callback ledger safe output leak count | 0 |
| callback Evidence source count | 1 |
| callback Evidence registry error count | 0 |
| callback Evidence feedback event count | 1 |
| callback Evidence card ref count | 1 |
| feedback event 数 | 1 |
| 纠错后 owner | crm-owner |
| review 状态 | reviewed |
| review ontology action | allow |
| promote ontology action | allow |
| knowledge card registry event count | 6 |
| reindex queue status | ready_for_reindex |
| reindex queue ontology action | allow |
| reindex queue registry event count | 8 |
| reindex queue indexed count | 1 |
| reindex queue search hit count | 1 |
| reindex queue safe output leak count | 0 |
| indexed count | 1 |
| search hit count | 1 |
| gateway action | allow |
| governance probe count | 5 |
| blocked probe hit count | 0 |
| restricted team hit count | 0 |
| restricted privileged hit count | 1 |
| restricted denied action | deny |
| restricted leak marker count | 0 |
阶段结果¶
| 阶段 | 期望 | 实际 |
|---|---|---|
| 初始主动询问 | finance-owner |
finance-owner |
| ask ontology gate | allow |
allow |
| ask registry | event_count >= 2 | 2 |
| Context Router baseline | org_directory |
org_directory |
| Context Router 反馈纠错 | project_orgreorg_knowledge |
project_orgreorg_knowledge |
| Context Router feedback trace | applied_count >= 2 | 2 |
| Connector Callback Ledger | recorded=1, duplicate=1, rejected=1, leak=0 | recorded=1, duplicate=1, rejected=1, leak=0 |
| callback Evidence Registry | source_count=1, error_count=0 | source_count=1, error_count=0 |
| callback Evidence -> AskFeedbackEvent | event_count >= 1 | 1 |
| callback Evidence -> Knowledge Card | card_ref_count >= 1 | 1 |
| 问错人反馈持久化 | event_count >= 1 | 1 |
| 下一轮路由纠错 | crm-owner |
crm-owner |
| 人工 review | reviewed |
reviewed |
| review ontology gate | allow |
allow |
| promote ontology gate | allow |
allow |
| knowledge card registry | event_count >= 4 | 6 |
| promote | vault/20-wiki 下 Markdown |
pass |
| reindex queue 入队 | ready_for_reindex |
ready_for_reindex |
| ontology gate | allow |
allow |
| ontology registry | event_count >= 3 | 8 |
| reindex queue 处理 | indexed_count >= 1 | 1 |
| reindex queue 搜索 | hit_count >= 1 | 1 |
| reindex queue safe output | 不泄漏路径、owner、内容 marker | leak_count=0 |
| 知识外挂搜索 | hit_count >= 1 | 1 |
| 治理反例 | pending/rejected/needs_changes/expired 不可检索 | hit_count=0 |
| restricted 权限 | team 用户不可见,restricted 用户可见 | team_hit=0, restricted_hit=1 |
| restricted 越权请求 | team 用户请求 restricted scope 被拒绝 | deny |
暴露并修复的问题¶
端到端 smoke 暴露过一个真实边界:第二轮检索会把第一轮 pending card 也搜到,导致 gap wording 变化,原来只按 gap_hash 匹配的反馈事件无法生效。
修正后,同一 task_id 的反馈优先复用;跨任务反馈才依赖 gap_hash 匹配。这更符合真实 loop:同一任务在执行过程中,缺口描述会随着新证据进入而变化,但问错人反馈不应失效。
当前结论¶
- 无企微条件下,当前本地 runtime 已经能跑通一条完整的主动收集和知识外挂链路。
- 本地 reply-text 现在先经过 Connector Callback Ledger:有效回调被记录,重复回调被幂等抑制,无效签名被拒绝,safe output 不泄露源系统对象。
- 被采信的本地 reply callback 已先生成受限 Evidence source 和 raw snapshot,再投影成 AskFeedbackEvent,并把 Evidence source id 写回 pending knowledge card 审计字段。
ask-feedback-events.json可以作为真实企微消息回调前的本地事件流替身。- Context Router 人工纠错事件已经并入主链路:同一问题可从
org_directory纠正到project_orgreorg_knowledge,并在 trace 中记录 feedback applied count。 - Ask Router route、review/promote 和 reindex queue 已先经过 OntologyToolGateway,并把 person/task、pending/reviewed/promoted、ready/indexed lifecycle 写入 ontology registry;safe output 只暴露状态和计数,为真实 worker / adapter 留出可恢复边界。
- route / review / promote / reindex / search 已经进入 Ask Router、Knowledge Card Tool Gateway 和 OntologyToolGateway,避免本地 demo 绕过未来工具边界。
- pending、rejected、needs_changes 和 expired knowledge card 不会进入索引;restricted card 不会向 team 用户泄漏。
- owner registry 已统一为显式组织目录优先、Domain Topology fallback;当前 demo 仍用本地目录模拟真实企微通讯录,但同一 contract 已能在目录缺失时从 topology 派生 owner。
下一步¶
- 继续把真实团队问题样例加入端到端 demo,但保持合成数据和真实私域数据分离。
- 扩展 permission probe 到对象存在性、owner、路径和 source_uri 的泄漏检查。
- 把本地 JSON reindex queue 替换为可恢复 worker / Postgres table,验证 retry、幂等、延迟和 adapter 失败恢复。
- 后续企微 adapter 接入时,只替换 owner registry 来源、delivery / callback 来源,保留同一 Ask Router guarded route、Evidence Registry、Connector Callback Ledger、knowledge card、feedback event、reindex queue 和 gateway contract。
原始输出见 vault/50-outputs/no-wecom-mvp-demo-analysis.md。