7.6 KiB
Context
ISS-011 的运行时和测试迁移已经完成:复杂 Chat 通过真实 Diagnosis StateGraph,Graph Nodes 使用显式 RunnableConfig/verified state,Run 保存 orchestration trace,三层权威 tests 已建立。剩余工作跨越代码清理、current docs、demo script、eval、live process、日志、数据库和 Issue 生命周期,必须按“静态/自动化先完成,live E2E 最后执行”的顺序收口。
全仓引用证明旧闭包为 VerifierInputHook -> VerifierContextHolder + ToolTraceSummaryService,外加 ToolTraceSummaryServiceTest。新 Graph 不依赖该闭包。current architecture docs 仍描述 Sequential/Hook/full trace;历史 issues/design-notes/fixtures 则应保留当时语义或历史兼容数据。
Goals / Non-Goals
Goals:
- 删除旧闭包且保持 Graph parser/Gatekeeper/projection/evaluation 行为。
- 把 architecture index 声明的 current docs、active eval/demo docs 与真实 StateGraph/Run trace 对齐。
- 让 interview demo check 将 exact
run.orchestrationTrace作为强制验收字段和 summary 输出。 - 运行确定性 Graph/test/eval gates,再启动 Maven 完成唯一最终 live E2E。
- 对本次 E2E 的日志和数据库做 exact session/run 证据核验并清理进程。
- 全部通过后关闭/归档 ISS-011 和阶段 5 OpenSpec。
Non-Goals:
- 不修改 Graph 路由、Prompt、公开 API、DTO 或 DB schema。
- 不重写历史 archived/design-note 文档和 legacy eval fixtures。
- 不删除 UI/eval 对历史
tool_trace_summary的兼容读取。 - 不治理仓库凭据、外部基础设施或其他 active issues。
Decisions
1. 删除完整旧闭包,不留下空壳 Hook
删除 VerifierInputHook.java、VerifierContextHolder.java、ToolTraceSummaryService.java 和 ToolTraceSummaryServiceTest.java。保留空类或 deprecated wrapper 会继续让维护者误认为存在第二条 Verifier 输入路径,也会让 Spring component 扫描注册无消费者 service。
删除前后以全仓 definition/import/instantiation/type-use 搜索、test compilation、Graph suite、Gatekeeper/protocol tests 证明闭包;负向契约 test 可保留名称字符串,任何可执行类型依赖都视为 cleanup blocker。
2. current docs 改为显式 StateGraph,历史 docs 保留
必须更新:
mvp/architecture/README.mdagent-orchestration.mdsession-trace-lifecycle.mdcurrent-mvp-architecture.mdexecutor-evidence-pipeline-refactor.mdharness-quality-gates.mdfeedback-architecture.mdretrieval-observability.mdmvp/eval/README.mdmvp/demo/README.md/ trace checklist
历史 archived issues/design-notes 和 legacy fixtures不批量替换:它们记录演进阶段或兼容旧 Trace。current docs 若提到 tool_trace_summary,只能标注为历史读取兼容,不能描述为新 Verifier 输入/持久化源。
3. Demo script 是 final E2E executable contract
扩展 run-interview-demo-check.ps1:
- 从 Chat response 获取 runId。
- 查询 exact Trace。
- 要求
trace.data.run.orchestrationTrace非空。 - 要求 version/final_node/termination_reason 非空,transitions 为数组。
- 把 finalNode、terminationReason、degraded、transitionCount、evidenceRetryCount 写入 summary。
- 保留 feedback 和 Prompt/Gatekeeper summary。
脚本必须 fail fast,不能用 session self-evaluation 或日志合成缺失的 Graph trace。
4. 自动化门禁先于 live E2E
顺序固定:cleanup source check → docs/script tests → Graph/Chat/Trace/Gatekeeper/Composer/Controller/Repository tests → diagnosis eval baseline/diff → test compilation → OpenSpec/static gates → live startup/E2E → logs → DB → process cleanup。
在 live 前发现的失败按 OpenSpec/code/test/documentation分类;live 后失败使用 diagnose loop,以 exact run evidence 定位,不通过放宽断言绕过。
5. Live E2E 使用唯一 identity 和可回收后台 Maven
- sessionId:
iss-011-stage5-<timestamp>。 - Maven:
spring-boot:run+mvp-demoprofile,后台 hidden process,stdout/stderr 写入target/临时文件。 - readiness:轮询 9900,最长明确超时,不阻塞超过 60 秒且持续汇报。
- 执行:复用 interview demo script,输出写入
target/iss-011-stage5-output/,避免覆盖已提交 demo sample。 - 最终:停止应用进程树,确认 9900 无监听,删除临时启动/output文件。
如果 9900 启动前已被其他进程占用,先识别而不是杀掉未知进程;只有本轮启动的 PID 可被清理。
6. 日志与数据库证据只认本次 Run
启动前记录 logs/application.log、application-error.log、chat.log 长度和时间;E2E 后只读新增片段,并搜索 sessionId/runId、Graph执行、Flyway/JPA 和 ERROR。测试阶段写入的旧日志不计入 live 证据。
数据库通过 scripts/query_mysql.py 执行 read-only queries:
SHOW COLUMNS ... orchestration_trace。- exact
diagnosis_runstatus/flow/answer/metrics/self_evaluation/orchestration trace/feedback。 - JSON_EXTRACT version/final_node/termination_reason/degraded/evidence_retry_count。
- exact run AgentStep/ToolInvocation count 和 distinct ownership。
- wrong session ownership count=0。
所有查询必须带 E2E sessionId/runId 或 schema column 条件;不接受全局 latest 代替。
7. Issue 归档是最后一个实现动作
E2E/log/DB 任一失败时 ISS-011 保持 active。全部通过后更新验收 checkbox和状态,将文件 move 到 mvp/issues/archived/,并把 issues index 从 active 移到 archived。OpenSpec archive 在 Issue move 后执行,Git commit 是阶段 5最后门禁。
Interface Impact
- 等级:L2 内部类型删除 + demo/docs 增强。
- 外部
/api/chat、Trace、feedback、DB schema 和 JSON 字段:不变。 - 内部消费者:旧 Hook/ThreadLocal/service 无消费者,删除无需迁移调用点。
- Demo script 行为:新增 fail-fast orchestration trace contract和 summary 字段;旧 Chat/Trace/feedback outputs保留。
- 回滚:revert 阶段 5代码/文档;DB/生产数据无变更。E2E产生的 demo Run 是正常审计数据,不执行破坏性回滚。
Risks / Trade-offs
- [隐藏反射/配置消费者未被 rg发现] → test compilation + Spring startup 是最终验证;发现即恢复并修正规格。
- [文档仍有历史术语] → current docs 白名单扫描;history/design-notes允许但索引明确非当前真理源。
- [live LLM 输出波动] → mock logs/metrics提供稳定工具证据;Graph允许安全 Fallback,但验收仍要求非空真实 orchestration trace和一致 Run生命周期。
- [外部 DB/Redis/Milvus/LLM不可用] → readiness/log/DB diagnose;不伪造通过,不修改验收口径。
- [停止进程误伤] → 只记录和终止本轮 Maven/Java PID,结束后用端口复核。
- [E2E output覆盖仓库样例] → 输出放 target临时目录,证据摘要提炼进 devflow 后删除临时文件。
Migration Plan
- 删除旧闭包,运行 source/test compilation/Graph安全回归。
- 更新 current docs 和 demo script/checklist,增加静态脚本契约 test。
- 运行完整 focused tests、diagnosis eval baseline/diff、OpenSpec/static gates。
- Maven
mvp-demostartup,运行 unique session E2E。 - 检查新增日志片段和 exact DB数据,停止进程、清理临时文件。
- 更新/移动 ISS-011,回填 devflow,archive OpenSpec,独立提交。
运行时回滚为 Git revert;数据库 V012列和 E2E Run可安全保留。
Open Questions
无。清理闭包、current/history docs边界、E2E身份/证据和 Issue关闭门禁均已确定。