Persist PageTree expand state via control-plane view-state and align chevron/DOM with restored expansion; keep Sidex-style shallow page-tree scan and drop the unused recursive scanner that only added cargo noise. Add password vault workbench routes/runtime/skill/CLI, split page_ai_pi into a module package, and retire Hermes/ACP/OpenHub recycle + root harness evidence from the index while gitignoring recycle and local diag dumps. Archive superseded design/bugs docs under old/, point architecture at ARCHITECTURE.md, and refresh smokes for Pi S1–S7, vault, and editor regressions so the working tree can stay clean.
8.2 KiB
[recycle] Browser QA needs-more-info
- workflow_run_id: fcaefa85-5cb9-45d6-b238-4d52cca03e97
- status: needs-more-info
- triage: NEEDS_MORE_QA
QA Scope
MINIMAL_BROWSER_QA_RUNBOOK
- Target URL: http://localhost:3000
- Login: click "测试账号快速登录" (mnote.e2e@example.com)
- Target page: 任意已存在或新建的文档页,含至少一个正文段落块(非标题、非列表、非代码块)
- Target block: 该页面中第一个普通段落块
- Operations (max 6):
- 打开页面,等待编辑器加载完成
- 鼠标悬停(hover)在该段落块左侧空白区域,等待手柄出现
- 截图1:手柄出现时的整体布局(包含段落块、手柄图标、周围元素)
- 点击该手柄
- 等待块菜单弹出,不移动鼠标
- 截图2:块菜单弹出后的完整布局(含菜单所有图标、文字、与段落块的位置关系)
- Console/Network: 截图前打开 DevTools Console,记录所有 error/warning;检查 Network 中是否有 4xx/5xx 请求
- Required screenshots: 2(hover 手柄出现 + 点击后菜单弹出)
- Exclusions: 不测试其他块类型(标题、列表、代码块、图片等);不测试拖拽、删除、复制等菜单操作;不测试其他页面;不测试移动端;不测试 theme 切换
- PASS/FAIL/BLOCKED: PASS: 手柄 hover 后正常出现,点击后菜单弹出且菜单图标/文字完整可见、无重叠、无截断,无 console error 且无 4xx/5xx FAIL: 手柄未出现、菜单未弹出、菜单布局错乱(图标缺失、重叠、截断、位置偏移严重)、出现 console error 或 4xx/5xx BLOCKED: 页面无法加载、编辑器未渲染、无法登录、段落块不存在
BROWSER_QA_RESULT: BROWSER_QA_RESULT STATUS: BLOCKED steps_run: phase boundary failed before structured evidence could be collected. actual_vs_expected: Pi taskflow phase "browser-qa" timed out after 600000ms evidence_paths: none parsed console_network_summary: unavailable candidate_bug: unknown needs_triage: true
TRIAGE_RESULT: TRIAGE_RESULT: NEEDS_MORE_QA 证据缺失:browser-qa 返回 BLOCKED,未完成目标路径。 判断理由:阻塞属于 QA 执行问题,不能判定产品 bug。 最小修复边界:N/A 回归路径:先解决登录、选择器或页面状态阻塞,再按 QA_SCOPE 复测。 bug 文档字段:status=needs-more-info;记录 blocked reason。
FIX_RESULT: FIX_RESULT: NO_OP reason: TRIAGE_RESULT is NEEDS_MORE_QA, not CONFIRMED_BUG. files_touched: none commands_run: none regression_path: reuse QA_SCOPE original single browser path if more QA is required.
REGRESSION_QA_RESULT: REGRESSION_QA_RESULT STATUS: PASS steps_run: skipped regression because bug-triage returned NEEDS_MORE_QA, not CONFIRMED_BUG. actual_vs_expected: no product fix was performed; regression is not applicable for this run. evidence_paths: inherited from BROWSER_QA_RESULT console_network_summary: inherited from BROWSER_QA_RESULT
QA_ACCEPTANCE: VERDICT: PASS reason: no product bug confirmed; close this run as needs-more-info instead of looping fix/regression. browserStatus=BLOCKED, regressionStatus=PASS. required fixes: none in this run; create a new browser-qa run only after the QA blocker is fixed. Return a concise handoff with completed work, files touched, commands run, risks, blockers, and artifact refs.
Browser QA Result
BROWSER_QA_RESULT STATUS: BLOCKED steps_run: phase boundary failed before structured evidence could be collected. actual_vs_expected: Pi taskflow phase "browser-qa" timed out after 600000ms evidence_paths: none parsed console_network_summary: unavailable candidate_bug: unknown needs_triage: true
TRIAGE_RESULT: TRIAGE_RESULT: NEEDS_MORE_QA 证据缺失:browser-qa 返回 BLOCKED,未完成目标路径。 判断理由:阻塞属于 QA 执行问题,不能判定产品 bug。 最小修复边界:N/A 回归路径:先解决登录、选择器或页面状态阻塞,再按 QA_SCOPE 复测。 bug 文档字段:status=needs-more-info;记录 blocked reason。
FIX_RESULT: FIX_RESULT: NO_OP reason: TRIAGE_RESULT is NEEDS_MORE_QA, not CONFIRMED_BUG. files_touched: none commands_run: none regression_path: reuse QA_SCOPE original single browser path if more QA is required.
REGRESSION_QA_RESULT: REGRESSION_QA_RESULT STATUS: PASS steps_run: skipped regression because bug-triage returned NEEDS_MORE_QA, not CONFIRMED_BUG. actual_vs_expected: no product fix was performed; regression is not applicable for this run. evidence_paths: inherited from BROWSER_QA_RESULT console_network_summary: inherited from BROWSER_QA_RESULT
QA_ACCEPTANCE: VERDICT: PASS reason: no product bug confirmed; close this run as needs-more-info instead of looping fix/regression. browserStatus=BLOCKED, regressionStatus=PASS. required fixes: none in this run; create a new browser-qa run only after the QA blocker is fixed. Return a concise handoff with completed work, files touched, commands run, risks, blockers, and artifact refs.
Triage Result
NEEDS_MORE_QA 证据缺失:browser-qa 返回 BLOCKED,未完成目标路径。 判断理由:阻塞属于 QA 执行问题,不能判定产品 bug。 最小修复边界:N/A 回归路径:先解决登录、选择器或页面状态阻塞,再按 QA_SCOPE 复测。 bug 文档字段:status=needs-more-info;记录 blocked reason。
FIX_RESULT: FIX_RESULT: NO_OP reason: TRIAGE_RESULT is NEEDS_MORE_QA, not CONFIRMED_BUG. files_touched: none commands_run: none regression_path: reuse QA_SCOPE original single browser path if more QA is required.
REGRESSION_QA_RESULT: REGRESSION_QA_RESULT STATUS: PASS steps_run: skipped regression because bug-triage returned NEEDS_MORE_QA, not CONFIRMED_BUG. actual_vs_expected: no product fix was performed; regression is not applicable for this run. evidence_paths: inherited from BROWSER_QA_RESULT console_network_summary: inherited from BROWSER_QA_RESULT
QA_ACCEPTANCE: VERDICT: PASS reason: no product bug confirmed; close this run as needs-more-info instead of looping fix/regression. browserStatus=BLOCKED, regressionStatus=PASS. required fixes: none in this run; create a new browser-qa run only after the QA blocker is fixed. Return a concise handoff with completed work, files touched, commands run, risks, blockers, and artifact refs.
Fix Result
NO_OP reason: TRIAGE_RESULT is NEEDS_MORE_QA, not CONFIRMED_BUG. files_touched: none commands_run: none regression_path: reuse QA_SCOPE original single browser path if more QA is required.
REGRESSION_QA_RESULT: REGRESSION_QA_RESULT STATUS: PASS steps_run: skipped regression because bug-triage returned NEEDS_MORE_QA, not CONFIRMED_BUG. actual_vs_expected: no product fix was performed; regression is not applicable for this run. evidence_paths: inherited from BROWSER_QA_RESULT console_network_summary: inherited from BROWSER_QA_RESULT
QA_ACCEPTANCE: VERDICT: PASS reason: no product bug confirmed; close this run as needs-more-info instead of looping fix/regression. browserStatus=BLOCKED, regressionStatus=PASS. required fixes: none in this run; create a new browser-qa run only after the QA blocker is fixed. Return a concise handoff with completed work, files touched, commands run, risks, blockers, and artifact refs.
Regression QA Result
REGRESSION_QA_RESULT STATUS: PASS steps_run: skipped regression because bug-triage returned NEEDS_MORE_QA, not CONFIRMED_BUG. actual_vs_expected: no product fix was performed; regression is not applicable for this run. evidence_paths: inherited from BROWSER_QA_RESULT console_network_summary: inherited from BROWSER_QA_RESULT
QA_ACCEPTANCE: VERDICT: PASS reason: no product bug confirmed; close this run as needs-more-info instead of looping fix/regression. browserStatus=BLOCKED, regressionStatus=PASS. required fixes: none in this run; create a new browser-qa run only after the QA blocker is fixed. Return a concise handoff with completed work, files touched, commands run, risks, blockers, and artifact refs.
QA Acceptance
VERDICT: PASS reason: no product bug confirmed; close this run as needs-more-info instead of looping fix/regression. browserStatus=BLOCKED, regressionStatus=PASS. required fixes: none in this run; create a new browser-qa run only after the QA blocker is fixed. Return a concise handoff with completed work, files touched, commands run, risks, blockers, and artifact refs.