diff --git a/CHANGELOG.md b/CHANGELOG.md index 83512a3..72e80f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +- **feat(e2e): 浏览器工具角色路由 + 会话状态语义 + doctor storageState 诊断(`e2e-mcp-tool-routing`)**. 起因:会话同时挂着 `playwright-test`(test-runner MCP)与用户自装的 `chrome-devtools-mcp` 两套浏览器工具时,e2e 模板原句 "Browser exploration is tool-agnostic" 对选择只字未提——模型按表面相似度随机选;且两套工具会话语义相反(chrome-devtools attach 真实 Chrome persistent profile、登录态跨会话记住;test-runner 的 browser_* 中继进 paused test 的 fixture context、每次 launch 全新),用户把后者的"失忆"误判为配置缺陷。模板侧:路由句改为角色路由——test_*/planner_*/generator_* 只在 playwright-test(生成/执行/修复不换轨)、交互探索优先可回退(编辑器未装或需 CDP 独有能力如 Performance trace 时用 chrome-devtools)、真并行走 `openspec-pw explore --parallel N`,就近声明「persistent profile 登录态不可当 E2E 前提」;Step 4 增补 Session state 小节:fresh context = E2E 隔离设计而非缺陷、登录态唯一恢复路径 = auth.setup → playwright.config storageState 依赖链、明确警示 `browser_storage_state` 类工具在工具清单里但 paused-test 会话不收(storage capability 未启用)防按清单误选。doctor 侧:新增可选检查 `storage-state`——config 声明 storageState 而 auth state 文件缺失 → 黄 ⚠ + `npx playwright test --project=setup` 修复命令(不阻断、不影响 ok 与退出码);路径提取判则防误报:字面量(`.auth`/`user.json` 特征,含 `join(...)` 拼接片段)优先,未命中时仅当 auth.setup.ts 存在(模板布局)才按默认路径判断,config 未声明或判则都不达 → 不输出。工具事实经实测落地(playwright 1.63.0):89 工具、storage 类 capability 为 "storage" 被内层 `capabilities: ["testing"]` 硬编码过滤器排除、双进程跨 launch localStorage 不留存——断言只写实测证实的行为。 + - `templates/e2e-command.md`、`src/commands/doctor.ts`、`tests/commands/doctor.test.ts`(+4 用例)、`README.md`、`README.zh-CN.md`、`CHANGELOG.md` + ## [0.3.99] - 2026-10-10 - **feat(gitignore): 受管块新增探索截图目录(`managed-screenshots-local`)**. `tests/playwright/screenshots/` 入受管 .gitignore 清单(21→22 项)。依据:探索截图本性时效(随开发过时,与 §6「截图证明像素,不证明行为」同判),且其同层证据——消费文档 `app-exploration.md` 与 `openspec/reports/`——早已是本地文件(受管忽略),截图是探索证据层里唯一还在入 git 的错位项(活路由截图靠同 slug 覆盖自愈,死路由截图永久沉积)。转本地后三层一致:本地证据本地存、耐久资产(specs 等)才进库。存量已提交截图走既有「已追踪检测」advisory(`git rm --cached`)。双 README 段落同步,测试 +1 用例。 diff --git a/README.md b/README.md index b9a96d3..ea291d3 100644 --- a/README.md +++ b/README.md @@ -393,7 +393,7 @@ Run through these steps in order when using the E2E workflow for the first time: | **Playwright MCP** | test-runner server configured for each **authorized** editor (command artifacts exist; unauthorized editors get an info line pointing at `init --tools ` — never a warning) | `playwright-cli` (@playwright/cli on PATH) — optional ⚠, never block | | **Vendored Agents** | — | official agent snapshots' presence + ownership (owned/modified); non-blocking ⚠ when their `playwright-test` MCP dependency is missing | | **Sync** | standards in sync when initialized (drift → `openspec-pw update`; AGENTS.md without markers counts as not-initialized, always ok) | not initialized (gated, non-blocking) | -| **Tests** | `tests/playwright/` directory exists | `auth.setup.ts` presence | +| **Tests** | `tests/playwright/` directory exists | `auth.setup.ts` presence · `storage-state` integrity — config declares `storageState` but the state file is missing → ⚠ + `npx playwright test --project=setup` (never blocks) | | **Seed Test** | — | `seed.spec.ts` presence | | **App Server** | — | dev script, base URL, reachability | | **CodeGraph** | — | CLI availability, index presence, MCP installation (warnings, non-blocking) | diff --git a/README.zh-CN.md b/README.zh-CN.md index c306b91..03776a8 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -272,7 +272,7 @@ audit **只报告、绝不删除**——测试退役永远是人工决策。存 | **Playwright MCP** | 每个已授权(有命令工件)编辑器的 test-runner server 配置;未授权编辑器降为信息行(提示 `init --tools` 添加,不阻断) | `playwright-cli`(PATH 上的 @playwright/cli)——可选 ⚠,不阻断 | | **Vendored Agents** | — | 官方 agents 快照的存在与归属(owned/modified);依赖的 `playwright-test` MCP 缺失时 ⚠(不阻断) | | **Sync** | 已初始化时标准同步(漂移 → `openspec-pw update`;AGENTS.md 无标记视为未初始化,恒 ok:true) | 未初始化(闸门,不阻断) | -| **测试目录** | `tests/playwright/` 目录存在 | `auth.setup.ts` 是否存在 | +| **测试目录** | `tests/playwright/` 目录存在 | `auth.setup.ts` 是否存在 · `storage-state` 完整性——config 声明 `storageState` 而 state 文件缺失 → ⚠ + `npx playwright test --project=setup`(不阻断) | | **种子测试** | — | `seed.spec.ts` 是否存在 | | **应用服务器** | — | 开发脚本、基础 URL、可达性 | | **CodeGraph** | — | CLI 可用性、索引存在、MCP 安装(警告,不阻断) | diff --git a/dist/commands/doctor.js b/dist/commands/doctor.js index a9327d5..bd847a0 100644 --- a/dist/commands/doctor.js +++ b/dist/commands/doctor.js @@ -14,6 +14,7 @@ const OPTIONAL_NAMES = new Set([ "engines", "specs", "auth-setup", + "storage-state", "seed", "dev-script", "base-url", @@ -571,6 +572,40 @@ export async function doctor(options = {}) { ok: hasAuthSetup, message: hasAuthSetup ? "found" : "not found (optional)", }); + // storageState declared but state file missing → every non-setup context + // launches anonymous; the login flows under test then 401 silently. + if (configPath) { + let text = ""; + try { + text = readFileSync(join(projectRoot, configPath), "utf-8"); + } + catch { + // config exists but unreadable — the config check above already reports + // its presence; skip instead of crashing doctor + } + if (/\bstorageState\b/.test(text)) { + const literals = [...text.matchAll(/['"]([^'"]+)['"]/g)].map((m) => m[1]); + const explicit = literals.find((s) => /(^|\/)user\.json$/.test(s) && s.includes("/")) ?? + literals.find((s) => s.includes(".auth") && s.includes("/")) ?? + (/\bjoin\([^)]*['"]\.auth['"]/.test(text) ? "playwright/.auth/user.json" : undefined); + // No literal and no template layout (auth.setup.ts) → the path is + // user-owned; guessing the default would report their custom layout + // as broken, so leave it out entirely. + const stateFile = explicit ?? (hasAuthSetup ? "playwright/.auth/user.json" : undefined); + if (stateFile) { + const file = stateFile.startsWith("/") ? stateFile : join(projectRoot, stateFile); + const hasState = existsSync(file); + checks.push({ + category: "Tests", + name: "storage-state", + ok: hasState, + message: hasState + ? `found ${stateFile}` + : `storage state file missing (${stateFile}) — test contexts launch anonymous (run: npx playwright test --project=setup)`, + }); + } + } + } // Seed test const hasSeed = existsSync(join(testsDir, "seed.spec.ts")); checks.push({ diff --git a/dist/commands/doctor.js.map b/dist/commands/doctor.js.map index 5dcfd89..7dd9ef1 100644 --- a/dist/commands/doctor.js.map +++ b/dist/commands/doctor.js.map @@ -1 +1 @@ -{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/commands/doctor.ts b/src/commands/doctor.ts index 01ce79e..7156fb6 100644 --- a/src/commands/doctor.ts +++ b/src/commands/doctor.ts @@ -29,6 +29,7 @@ const OPTIONAL_NAMES = new Set([ "engines", "specs", "auth-setup", + "storage-state", "seed", "dev-script", "base-url", @@ -622,6 +623,41 @@ export async function doctor(options: DoctorOptions = {}) { message: hasAuthSetup ? "found" : "not found (optional)", }); + // storageState declared but state file missing → every non-setup context + // launches anonymous; the login flows under test then 401 silently. + if (configPath) { + let text = ""; + try { + text = readFileSync(join(projectRoot, configPath), "utf-8"); + } catch { + // config exists but unreadable — the config check above already reports + // its presence; skip instead of crashing doctor + } + if (/\bstorageState\b/.test(text)) { + const literals = [...text.matchAll(/['"]([^'"]+)['"]/g)].map((m) => m[1]); + const explicit = + literals.find((s) => /(^|\/)user\.json$/.test(s) && s.includes("/")) ?? + literals.find((s) => s.includes(".auth") && s.includes("/")) ?? + (/\bjoin\([^)]*['"]\.auth['"]/.test(text) ? "playwright/.auth/user.json" : undefined); + // No literal and no template layout (auth.setup.ts) → the path is + // user-owned; guessing the default would report their custom layout + // as broken, so leave it out entirely. + const stateFile = explicit ?? (hasAuthSetup ? "playwright/.auth/user.json" : undefined); + if (stateFile) { + const file = stateFile.startsWith("/") ? stateFile : join(projectRoot, stateFile); + const hasState = existsSync(file); + checks.push({ + category: "Tests", + name: "storage-state", + ok: hasState, + message: hasState + ? `found ${stateFile}` + : `storage state file missing (${stateFile}) — test contexts launch anonymous (run: npx playwright test --project=setup)`, + }); + } + } + } + // Seed test const hasSeed = existsSync( join(testsDir, "seed.spec.ts"), diff --git a/templates/e2e-command.md b/templates/e2e-command.md index 202c9c1..0a8b987 100644 --- a/templates/e2e-command.md +++ b/templates/e2e-command.md @@ -39,7 +39,16 @@ | 9 execute | generated spec | seed smoke only (`npx playwright test tests/playwright/seed.spec.ts`) | | 10 report | full report | routes + Page Objects + seed result; omit Healer sections | -Browser exploration is tool-agnostic: the `playwright-test` MCP server's browser tools or `openspec-pw explore --parallel N`. +**Browser tool routing**: + +| Situation | Action | +| --------- | ------ | +| Generation / execution / repair | `playwright-test` MCP — sole home of its `test_*` / `planner_*` / `generator_*` tools | +| Interactive exploration (Step 4) | prefer the `playwright-test` browser tools | +| Exploration fallback | chrome-devtools or similar — only when the `playwright-test` browser tools are absent, failing or hanging (switch rather than retrying into the same failure), or for abilities `playwright-test` lacks (Performance trace, full network panel) | +| ≥5 routes | `openspec-pw explore --parallel N` | + +Never switch tools to gain or reuse state — a persistent-profile login is not a valid E2E precondition. State semantics: Step 4 → Session state. ## Testing Principles @@ -172,6 +181,8 @@ Record findings in `app-exploration.md`. Output path: **Idempotency**: If `app-exploration.md` exists → read, verify routes, update only changed/new routes. **Route Snapshot Hash**: Navigate to sitemap.xml → hash content → if unchanged since last exploration, skip re-exploration entirely. Store hash in `app-knowledge.md` → `Exploration State`. +**Session state**: the `playwright-test` browser tools drive the **paused test's fixture context** — every `planner_setup_page` / test run launches a fresh context with empty storage. That is correct E2E isolation, not a configuration problem. To explore logged-in flows, wire the login once via the storageState chain: `auth.setup.ts` (Step 7) writes `playwright/.auth/user.json`, and `playwright.config.ts` feeds it into every test context (`use.storageState` + `dependencies: ['setup']`). Do not try to save/restore state through storage tools mid-session — `browser_storage_state`-class tools are listed by the test-runner MCP but rejected by its paused-test session (the storage capability is not enabled there) — and never treat another tool's persistent-profile login as a test precondition (see Browser tool routing). + **4.3. Update shared knowledge**: Extract project-level findings to `tests/playwright/app-knowledge.md`. Auto-de-duplicate by key. ### 5. Generate test plan (change mode only) @@ -288,7 +299,7 @@ When tests fail → **Healer** (3 phases): 2-5. **Selector repair**: Pick per the selector priority (Testing Principles — single source of truth): verified selector from app-exploration.md > `[data-testid]` (getByTestId) > getByRole > getByLabel > getByText > CSS id/class > positional. If the `playwright-test` MCP exposes `browser_generate_locator`, use it to generate and validate the candidate against the live page before rewriting. -2-6. **Fix + verify**: Apply fix → verify via the test-runner MCP tools when available (`test_list` → `test_debug` (pass the test id from `test_list`) → repair → `test_run` with `locations` scoped to the single test file for structured results; fall back to `npx playwright test --grep ""` if the playwright-test MCP server is not configured) → if passes, log to app-knowledge.md (Selector Fixes / Assertion Fixes). Max 3 heal attempts per test. **One error per round**: fix a single error, re-run, then address the next. +2-6. **Fix + verify**: Apply fix → verify via the test-runner MCP tools when available (`test_list` → `test_debug` (pass the test id from `test_list`) → repair → `test_run` with `locations` scoped to the single test file for structured results; fall back to `npx playwright test --grep ""` if the playwright-test MCP server is not configured or its test tools fail) → if passes, log to app-knowledge.md (Selector Fixes / Assertion Fixes). Max 3 heal attempts per test. **One error per round**: fix a single error, re-run, then address the next. 2-7. **Log**: Append healed selector/assertion to `app-knowledge.md`. Auto-de-duplicate by Route + Old Selector (selectors) or Test + Old Assertion (assertions). diff --git a/tests/commands/doctor.test.ts b/tests/commands/doctor.test.ts index a7f936d..dc82815 100644 --- a/tests/commands/doctor.test.ts +++ b/tests/commands/doctor.test.ts @@ -527,6 +527,170 @@ describe("doctor integration: test-runner + playwright-cli checks", () => { }); }); +// ─── Tests: doctor storage-state integrity check (e2e-mcp-tool-routing) ───── + +describe("doctor storage-state check", () => { + const execMock = vi.mocked(execFileSync); + const existsMock = vi.mocked(existsSync); + const readdirMock = vi.mocked(readdirSync); + const readFileMock = vi.mocked(readFileSync); + const lstatMock = vi.mocked(lstatSync); + const detectCodeGraphMock = vi.mocked(detectCodeGraphStatus); + const detectAdaptersMock = vi.mocked(detectAdapters); + const TEMPLATE_CONFIG = [ + "import { defineConfig } from '@playwright/test';", + "const authStatePath = join(projectRoot, 'playwright', '.auth', 'user.json');", + "const storageState = existsSync(authStatePath) ? authStatePath : undefined;", + "export default defineConfig({ use: { storageState } });", + ].join("\n"); + const BARE_CONFIG = "export default defineConfig({ use: { storageState: someVar } });"; + const NO_STORAGE_CONFIG = "export default defineConfig({ use: { baseURL: '/' } });"; + + beforeEach(() => { + vi.clearAllMocks(); + // Healthy hard prerequisites so only storage-state state drives the result. + detectCodeGraphMock.mockReturnValue({ + cliInstalled: false, + indexed: false, + mcpInstalledAdapters: [], + }); + execMock.mockImplementation((cmd: string) => { + if (cmd === "node" || cmd === "npm" || cmd === "npx") return "v22.0.0"; + return ""; + }); + existsMock.mockImplementation((p: Parameters[0]) => { + const s = String(p).replace(/\\/g, "/"); + return ( + s.endsWith("playwright.config.ts") || + s.endsWith("openspec") || + s.endsWith("tests/playwright") || + s.endsWith("AGENTS.md") || + s.endsWith("CLAUDE.md") + ); + }); + readFileMock.mockImplementation((p: Parameters[0]) => { + const s = String(p); + if (s.endsWith(".mcp.json")) { + return JSON.stringify({ + mcpServers: { + "playwright-test": { + command: "npx", + args: ["playwright", "run-test-mcp-server"], + }, + }, + }); + } + return "\ncontent\n"; + }); + readdirMock.mockReturnValue([] as never); + lstatMock.mockReturnValue({ isSymbolicLink: () => false } as never); + detectAdaptersMock.mockReturnValue([claudeAdapter]); + }); + + async function runDoctorJson() { + const logs: string[] = []; + const spy = vi.spyOn(console, "log").mockImplementation((...args) => { + logs.push(args.join(" ")); + }); + try { + await doctor({ json: true }); + } finally { + spy.mockRestore(); + } + return JSON.parse(logs.join("\n")); + } + + function storageStateCheck(parsed: { checks: Array<{ name: string; ok: boolean; message: string }> }) { + return parsed.checks.find((c) => c.name === "storage-state"); + } + + it("template layout with missing state file → optional warning with fix, ok stays true", async () => { + existsMock.mockImplementation((p: Parameters[0]) => { + const s = String(p).replace(/\\/g, "/"); + return ( + s.endsWith("playwright.config.ts") || + s.endsWith("openspec") || + s.endsWith("tests/playwright") || + s.endsWith("AGENTS.md") || + s.endsWith("CLAUDE.md") + ); + }); + readFileMock.mockImplementation((p: Parameters[0]) => { + const s = String(p); + if (s.endsWith(".mcp.json")) return "{}"; + if (s.endsWith("playwright.config.ts")) return TEMPLATE_CONFIG; + return "\ncontent\n"; + }); + const parsed = await runDoctorJson(); + const check = storageStateCheck(parsed); + expect(check).toBeDefined(); + expect(check.ok).toBe(false); + expect(check.message).toContain("missing"); + expect(check.message).toContain("project=setup"); + expect(parsed.ok).toBe(true); + }); + + it("state file present → ok check reported as found", async () => { + existsMock.mockImplementation((p: Parameters[0]) => { + const s = String(p).replace(/\\/g, "/"); + return ( + s.endsWith("playwright.config.ts") || + s.endsWith("openspec") || + s.endsWith("tests/playwright") || + s.endsWith("AGENTS.md") || + s.endsWith("CLAUDE.md") || + s.endsWith("playwright/.auth/user.json") + ); + }); + readFileMock.mockImplementation((p: Parameters[0]) => { + const s = String(p); + if (s.endsWith(".mcp.json")) return "{}"; + if (s.endsWith("playwright.config.ts")) return TEMPLATE_CONFIG; + return "\ncontent\n"; + }); + const parsed = await runDoctorJson(); + const check = storageStateCheck(parsed); + expect(check).toBeDefined(); + expect(check.ok).toBe(true); + expect(check.message).toContain("found"); + }); + + it("config without storageState → check not emitted", async () => { + readFileMock.mockImplementation((p: Parameters[0]) => { + const s = String(p); + if (s.endsWith(".mcp.json")) return "{}"; + if (s.endsWith("playwright.config.ts")) return NO_STORAGE_CONFIG; + return "\ncontent\n"; + }); + const parsed = await runDoctorJson(); + expect(storageStateCheck(parsed)).toBeUndefined(); + }); + + it("no path literal and no auth.setup.ts → check not emitted (no guessing)", async () => { + readFileMock.mockImplementation((p: Parameters[0]) => { + const s = String(p); + if (s.endsWith(".mcp.json")) return "{}"; + if (s.endsWith("playwright.config.ts")) return BARE_CONFIG; + return "\ncontent\n"; + }); + const parsed = await runDoctorJson(); + expect(storageStateCheck(parsed)).toBeUndefined(); + }); + + it("custom .auth filename → checks the declared literal path, not the default", async () => { + readFileMock.mockImplementation((p: Parameters[0]) => { + const s = String(p); + if (s.endsWith(".mcp.json")) return "{}"; + if (s.endsWith("playwright.config.ts")) return "export default defineConfig({ use: { storageState: '.auth/admin.json' } });"; + return "\ncontent\n"; + }); + const parsed = await runDoctorJson(); + const check = storageStateCheck(parsed); + expect(check).toBeDefined(); + expect(check.message).toContain(".auth/admin.json"); + }); +}); + // ─── doctor authorization tiers (scope-editor-writes) ─────────────────────── describe("doctor authorization tiers", () => {