PMFlow/docs/superpowers/specs/2026-04-19-analysis-packet-...

6.0 KiB
Raw Blame History

Analysis Packet Family 黄金 12 条案例(V2)

目的

这份文档是给 analysis_packet family 单独准备的高标准黄金案例,不再复用旧那批偏空、偏合同向的样例。

这 12 条案例只做一件事:

  • 验证 analysis_project_snapshot_loader -> analysis_packet_builder -> Web/Feishu presenter 这条链,是否真的围绕项目对象在分析,而不是“字段合法 + 模板句子通了”。

对应自动化真源:

高标准判定

每条案例都必须同时满足:

  1. 输入里有明确项目对象或上下文锚点,不接受只有 这个适合吗 这种空问句。
  2. analysis_packet 必须命中正确 packet_type,并且 focus_objects 只围绕最相关的 1-2 个对象。
  3. 若 snapshot 已给显式 object ref,builder 必须优先吃 ref,不能再靠模糊 task 名称或 partial match 乱选。
  4. 最终客户可见文本要像“围绕本项目对象做判断”,不能退回:
    • 当前项目:/外部判断:/下一步:
    • 先说我的判断
    • status_summary
    • 外部推荐
    • 证据质量
  5. 若文本里出现了当前 packet 没选中的对象,判失败。

黄金 12 条

01. 项目适配判断:库存上报项目里的 Responses API

  • 输入:OpenAI Responses API 放到采购经理每日实时库存上报服务里,适合放在哪一层?
  • 预期 packet:project_fit_analysis
  • 预期对象:
    • better fit:每日固定时段生成并推送结构化摘要卡片
    • not fit:WMS库存快照自动拉取与清洗
  • 预期结论:明确区分“解释层”与“确定性主链”

02. 项目适配判断:generic task title 也要按 ref 选对

  • 输入:这类能力放到库存异常播报助手里,应该落在哪步?
  • 预期 packet:project_fit_analysis
  • 预期对象:
    • better fit:任务B
    • not fit:任务A
  • 预期重点:不能因为 task title 太泛就乱选,必须尊重显式 fit_candidate_task_ref / fit_rejected_task_ref

03. 项目适配判断:已 direct match 的 fit 结论

  • 输入:这条外部变化已经打到我们库存项目上了吗?
  • 预期 packet:project_fit_analysis
  • 预期对象顺序:
    • dependent:WMS库存快照自动拉取与清洗
    • anchor:外部信号源 - WMS实时库存接口
  • 预期结论:先落业务 task,再补 formal anchor

04. 外部 blocked:卡在哪条线索上

  • 输入:这个外部变化现在能直接挂到项目结论吗?
  • 预期 packet:external_impact_analysis
  • 预期对象:
    • blocked:外部信号源 - WMS实时库存接口
    • dependent:每日固定时段生成并推送结构化摘要卡片
  • 预期结论:明确说卡在 signal 线索上,下一步是“补齐到可校验”,不能说“修正证据质量 / 继续外部推荐”

05. 外部 direct match:先看受影响业务 task

  • 输入:这个变化是不是已经直接打到当前项目对象上了?
  • 预期 packet:external_impact_analysis
  • 预期对象顺序:
    • dependent:WMS库存快照自动拉取与清洗
    • anchor:外部信号源 - WMS实时库存接口
  • 预期结论:不是 anchor-first

06. 外部 indirect only:先试解释层,不动主链

  • 输入:这个外部能力现在和我们项目是什么关系?
  • 预期 packet:external_impact_analysis
  • 预期对象:
    • better fit:每日固定时段生成并推送结构化摘要卡片
    • not fit:WMS库存快照自动拉取与清洗
  • 预期结论:仍是背景相关,不能直接挂主链

07. 内部 explain:模型路由现状

  • 输入:现在活动引擎是什么?
  • 预期 packet:internal_explain_analysis
  • 预期对象:模型路由配置
  • 预期结论:说“这轮问的是当前状态,所以直接答现状”,不能把 status_summary 这类 contract 字样直接暴露给用户

08. 内部 explain:现状 + 仍有一层未确认

  • 输入:当前活动引擎是什么,已经切到最新灰度了吗?
  • 预期 packet:internal_explain_analysis
  • 预期对象:模型路由配置
  • 预期结论:先说现状,再单独指出“还有一层没完全确认”

09. follow-up explain:路由澄清

  • 输入:你是想问外部公开事实,还是系统内部配置/项目对象?
  • 预期 packet:followup_explain_analysis
  • 预期重点:
    • anchor_kind=reply_thread
    • clarification_state=query_route_clarify
    • 最终文本要保留“需要先确认查询来源”这个结论

10. Feishu 文本呈现:fit indirect only

  • 输入:与 Case 01 同构,但验的是最终 qa_direct 文本
  • 预期输出:
    • 命中 每日固定时段生成并推送结构化摘要卡片
    • 命中 WMS库存快照自动拉取与清洗
    • 不出现 当前项目:/外部判断:/下一步:

11. Feishu 文本呈现:verifier blocked

  • 输入:与 Case 04 同构,但验的是最终 qa_direct 文本
  • 预期输出:
    • 命中 补齐到可校验
    • 命中被影响 task
    • 不出现 外部推荐 / 证据质量

12. Feishu 文本呈现:internal status

  • 输入:与 Case 07 同构,但验的是最终 qa_direct 文本
  • 预期输出:
    • 命中 模型路由配置
    • 不出现 status_summary / contract / 泛化建议

验证方式

最小自动化入口:

cd /Users/yuuuu/Documents/AIProjectManger/.worktrees/codex/unified-project-ai-handoff
PYTHONPATH=backend /Users/yuuuu/Documents/AIProjectManger/backend/venv/bin/python -m pytest \
  backend/tests/test_analysis_project_snapshot_loader.py \
  backend/tests/test_analysis_packet_contract.py \
  backend/tests/test_feishu_card_action_contract.py \
  backend/tests/test_analysis_packet_golden_v2.py -q

通过标准:

  • 12 条新黄金案例全部通过
  • 不能只证明 packet/schema 合法
  • 必须同时证明最终客户可见文本也通过禁词/禁模板/对象命中校验