# Goose v1.49 Phase 2 证据台账 > 本地 loopback only。每项记录 **通过 / 保留 / 回滚**,禁止批量删除定制。 ## 执行入口 ```bash node scripts/run-goosed-v149-phase2.mjs node scripts/check-goosed-v149-cost-smoke.mjs # 需 DEEPSEEK_API_KEY node scripts/compare-goose-v149-memory-manifest.mjs # 对比 baseline drift node scripts/check-goosed-v149-deepseek-tools.mjs # 需 DEEPSEEK_API_KEY node scripts/compare-goose-v149-message-sanitize.mjs # provider sanitize 单测对照 node scripts/check-goosed-v149-thinking-preservation.mjs node scripts/check-goosed-v149-skills-smoke.mjs ``` ## 证据项 | 项 | 脚本/产物 | 状态 | 备注 | |---|---|---|---| | Phase 1 聚合 smoke | `check-goosed-v149-all.mjs` | 通过 | 2026-09-08 | | Finish token_state + cost | `check-goosed-v149-cost-smoke.mjs` | 通过 | in=8339 out=2 cost≈0.00225 USD | | Memory manifest 无 drift | `compare-goose-v149-memory-manifest.mjs` | 通过 | digest=69b48723… | | Memory fail-open (legacy) | `check-goosed-v149-memory-failopen.mjs` | 通过 | 超时 degrade 不抛错 | | Portal canary 联调 | `check-goosed-v149-canary-portal.mjs` | 通过 | 隔离 Portal :8083 → v149 :18049 | | Session reconcile 路由 | `check-goosed-v149-session-reconcile.mjs` | 通过 | GET /sessions/{id}, add/remove/restart | | platform/web 扩展 | `check-goosed-v149-web-smoke.mjs` | 通过 | web_search + fetch_url 工具挂载 | | DeepSeek 工具轮次 | `check-goosed-v149-deepseek-tools.mjs` | 通过/可选 | 需 DEEPSEEK_API_KEY;todo_write Finish | | DeepSeek reasoning 保留 | `check-goosed-v149-thinking-preservation.mjs` | 通过 | agent 集成测试 4 项 | | upstream web-search 路径 | `check-goosed-v149-skills-smoke.mjs` | 通过 | skills/load_skill(与 platform/web 并存) | | message sanitize 对照 | `compare-goose-v149-message-sanitize.mjs` | 通过 | goose-providers sanitize 单测 v1.41≈v1.49 | | DeepSeek no-think 代理 `:18036` | — | 保留 | 生产 parity;Portal session-reply-wait 仍启用 | ## 回滚 ```bash bash scripts/switch-goose-v149-canary.sh rollback pnpm dev ``` ## 判定规则 - **通过**:脚本 OK + 证据 JSON 已写入 `docs/baselines/` - **保留**:行为不等价或缺证据,维持 1.41 / 定制实现 - **回滚**:canary 一切换即异常,执行 rollback 脚本