From 75558187534dde8c211cba724cae6fec3c03aed7 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 26 Sep 2026 05:14:11 +0000 Subject: [PATCH] docs(test): FINAL full-system browser E2E report after pending heal --- .doc/ops/CURRENT.md | 1 + ...-26-full-system-browser-e2e-test-report.md | 219 +++++++---- .../console-admin-iam.jsonl | 50 +++ .../console-assist.jsonl | 13 + .../console-chat-casual.jsonl | 65 ++++ .../console-ctx.jsonl | 13 + .../console-doc-approve.jsonl | 13 + .../console-doc-cascade.jsonl | 13 + .../console-doc-edit.jsonl | 28 ++ .../console-doc-pass.jsonl | 13 + .../console-doc-reject.jsonl | 26 ++ .../console-doc-resubmit.jsonl | 13 + .../console-doc-submit.jsonl | 26 ++ .../console-errors-summary.json | 218 +++++++++++ .../console-iam-firstlogin.jsonl | 290 ++++++++++++++ .../console-kb-admin.jsonl | 10 + .../console-nonauth-edit.jsonl | 26 ++ .../console-nonauth-submit.jsonl | 26 ++ .../console-proj-create.jsonl | 65 ++++ .../console-proj-wf.jsonl | 65 ++++ .../console-squad-free.jsonl | 13 + .../console-squad-wf.jsonl | 65 ++++ .../console-upload.jsonl | 13 + .../e2e-rerun-start.txt | 6 +- .../messageIdentity-unittest.txt | 24 +- .../playwright-output-main/.last-run.json | 19 +- .../error-context.md | 223 ----------- .../playwright.log | 68 ++-- .../retained-accounts.json | 30 +- .../run-meta.json | 24 +- .../screenshots/FS-ASSIST-01-reply.png | Bin 0 -> 141419 bytes .../screenshots/FS-CHAT-01-reply.png | Bin 109522 -> 109601 bytes .../screenshots/FS-CTX-01.png | Bin 0 -> 248243 bytes .../screenshots/FS-DOC-REV-01-FAIL.png | Bin 0 -> 4254 bytes .../screenshots/FS-DOC-REV-01-edited.png | Bin 152713 -> 154636 bytes .../screenshots/FS-DOC-REV-02-submitted.png | Bin 0 -> 232641 bytes .../screenshots/FS-DOC-REV-03-FAIL.png | Bin 0 -> 189567 bytes .../screenshots/FS-DOC-REV-04-FAIL.png | Bin 0 -> 233521 bytes .../screenshots/FS-DOC-REV-05-passed.png | Bin 0 -> 188767 bytes .../screenshots/FS-DOC-REV-06-approved.png | Bin 0 -> 250200 bytes .../screenshots/FS-DOC-REV-07-probe.png | Bin 0 -> 236693 bytes .../screenshots/FS-IAM-01-admin-users.png | Bin 193105 -> 193116 bytes .../screenshots/FS-KB-01.png | Bin 0 -> 56920 bytes .../screenshots/FS-NONAUTH-02-gate.png | Bin 0 -> 163425 bytes .../screenshots/FS-PROJ-01-before-confirm.png | Bin 141047 -> 140796 bytes .../screenshots/FS-PROJ-01-created.png | Bin 112226 -> 112450 bytes .../screenshots/FS-PROJ-02-activated.png | Bin 86046 -> 86231 bytes .../screenshots/FS-SQUAD-FREE-01.png | Bin 0 -> 154467 bytes .../screenshots/FS-SQUAD-WF-01-FAIL.png | Bin 0 -> 207600 bytes .../screenshots/FS-SQUAD-WF-01-doc.png | Bin 228282 -> 229312 bytes .../screenshots/FS-UPLOAD-01-FAIL.png | Bin 0 -> 164634 bytes .../ui-results.best-muhwuua6.json | 269 +++++++++++++ .../ui-results.json | 362 ++++++++++++++++-- .../ui-results.prev-20260926T043503Z.json | 206 ++++++++++ .../ui-results.prev-20260926T044142Z.json | 163 ++++++++ .../ui-results.prev-20260926T044950Z.json | 163 ++++++++ .../ui-results.prev-20260926T045508Z.json | 269 +++++++++++++ .../ui-results.prev-20260926T050307Z.json | 174 +++++++++ .../upload-muhxbx7y.txt | 2 + .../web-deploy-note.txt | 11 +- web/e2e/full-system-browser-e2e.spec.ts | 174 +++++++-- 61 files changed, 3007 insertions(+), 464 deletions(-) create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-assist.jsonl create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-ctx.jsonl create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-approve.jsonl create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-cascade.jsonl create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-pass.jsonl create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-reject.jsonl create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-resubmit.jsonl create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-submit.jsonl create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-errors-summary.json create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-kb-admin.jsonl create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-nonauth-submit.jsonl create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-squad-free.jsonl create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-upload.jsonl delete mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright-output-main/full-system-browser-e2e-fu-14a68-member-can-edit-after-claim-chromium/error-context.md create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-ASSIST-01-reply.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-CTX-01.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-DOC-REV-01-FAIL.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-DOC-REV-02-submitted.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-DOC-REV-03-FAIL.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-DOC-REV-04-FAIL.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-DOC-REV-05-passed.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-DOC-REV-06-approved.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-DOC-REV-07-probe.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-KB-01.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-NONAUTH-02-gate.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-SQUAD-FREE-01.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-SQUAD-WF-01-FAIL.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-UPLOAD-01-FAIL.png create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/ui-results.best-muhwuua6.json create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/ui-results.prev-20260926T043503Z.json create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/ui-results.prev-20260926T044142Z.json create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/ui-results.prev-20260926T044950Z.json create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/ui-results.prev-20260926T045508Z.json create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/ui-results.prev-20260926T050307Z.json create mode 100644 .doc/test-reports/assets/2026-09-26-full-system-browser-e2e/upload-muhxbx7y.txt diff --git a/.doc/ops/CURRENT.md b/.doc/ops/CURRENT.md index 27ebec0a..3cb2474a 100644 --- a/.doc/ops/CURRENT.md +++ b/.doc/ops/CURRENT.md @@ -18,6 +18,7 @@ | owner | task | branch | worktree | mutex | status | |---|---|---|---|---|---| +| Cursor | full-system-browser-e2e-2026-09-26 | feature/full-system-browser-e2e-2026-09-26 | .worktrees/full-system-browser-e2e-2026-09-26 | env:dev+docs-test-report | done | | pi | sysadmin-maturity-refresh-2026-09-26 | feature/sysadmin-maturity-refresh-2026-09-26 | .worktrees/sysadmin-maturity-refresh-2026-09-26 | sysadmin-maturity | done | | pi | degraded-flags-enable-2026-09-26-r4 | feature/degraded-flags-enable-2026-09-26 | .worktrees/degraded-flags-enable-2026-09-26 | summary-flags-rollout | done | | pi | system-review-p0-p1-fixes-2026-09-26 | fix/system-review-p0-p1-fixes-2026-09-26 | .worktrees/system-review-p0-p1-fixes-2026-09-26 | review-fixes-batch | done | diff --git a/.doc/test-reports/2026-09-26-full-system-browser-e2e-test-report.md b/.doc/test-reports/2026-09-26-full-system-browser-e2e-test-report.md index 1f937eb3..b009bddf 100644 --- a/.doc/test-reports/2026-09-26-full-system-browser-e2e-test-report.md +++ b/.doc/test-reports/2026-09-26-full-system-browser-e2e-test-report.md @@ -2,15 +2,15 @@ ## 一、测试背景 (Background) -对 wipe 后的 local `dev`(`BASE_URL=http://127.0.0.1:8080`)做完整 Playwright 多人协作验收。宿主缺 `libatk-1.0.so.0`,走 **Docker Playwright**(`mcr.microsoft.com/playwright:v1.63.0-noble --network host`)。 +对 local `dev`(`BASE_URL=http://127.0.0.1:8080`,schema 75)做完整 Playwright 多人协作验收。宿主缺 `libatk`,走 **Docker Playwright**(`mcr.microsoft.com/playwright:v1.63.0-noble --network host`)。 -上一轮(`muhu39da`,EXIT:1)在 FS-SQUAD-WF-01 因气泡 `data-chat-status=pending` 挂起至 15m 超时 FAIL。本轮已合入气泡终态 heal(`mergeLiveOverHistory` 优先 history terminal;taskRuns/useTaskRunAttempts 辅助;spec reload-heal + 2.1m describe timeout),部署 `web/dist` 后全量重跑(新 suffix `muhvyubx`)。 +上一轮 P0:`FS-SQUAD-WF-01` 服务端约 4 分钟已 `completed`,UI `data-chat-status` 长期 `pending`。根因:`mergeLiveOverHistory` 偏好 inflight live、SSE EOF 后无 poll heal。本轮合入修复后全量重跑。 ## 二、测试目标 (Test Objectives) - 实跑 `web/e2e/full-system-browser-e2e.spec.ts`(21 条 serial)真实 UI + 真实 PI -- 验证上一轮 P0「编队完成但气泡 pending」是否已愈合 -- 落盘 assets + 本 FINAL 报告;`agentctl with` 租约提交 +- 验证聊天气泡终态同步修复(mapping + SSE gap heal + E2E reload-heal) +- 落盘 assets + 本 FINAL 报告;`agentctl with` 租约提交(不 push) ## 三、测试方案与环境 (Test Plan & Environment) @@ -19,129 +19,180 @@ | 通道 | **headless Docker Playwright** | | 镜像 | `mcr.microsoft.com/playwright:v1.63.0-noble` | | BASE_URL | `http://127.0.0.1:8080`(`--network host`) | -| DISPLAY | **empty**(`run-meta.json` → `"display":""`, `"headedHint":false`) | +| DISPLAY | empty(`run-meta.json` → `"display":""`, `"headedHint":false`) | | 入口 | `web/scripts/run-full-system-browser-e2e.sh` | -| 开始时间 | `2026-09-26T04:24:57Z`(`e2e-rerun-start.txt` / `run-meta.json` `04:24:58.924Z`) | -| 前端制品 | WT `npm run build` → `rsync` 到 `$ROOT/web/dist/`;health 仍 ok(`health-after-web-deploy.json`) | +| FINAL 跑次 | `2026-09-26T05:03:07Z` → `05:12:28Z`(约 9.3m) | +| 项目 | `E2E全量-20260926-muhxbx7y` | +| 前端制品 | WT `npm run build` + `rsync` → MAIN `web/dist`(`index-BXtlAAcH.js` md5 `8a26c5cf…`) | +| 修复提交 | `ccce44df`(chat bubble heal)+ 本轮 E2E helper 加固 | | 层级 | 产品 UI 真实浏览器验收(含真实 PI);禁止 stub 冒充 PASS | +| 账本 SSOT | `ui-results.json`(Playwright 因 soft-continue 可显示 21 passed,**不以 PW 计数冒充产品 PASS**) | + +```text +E2E_START=2026-09-26T05:03:07Z +WRAP_PID=2678967 +EXIT:0 +E2E_END=2026-09-26T05:12:28Z +``` ## 四、预期结果 (Expected Results) -- 21 条 serial;编队允许长等待真实 PI(describe timeout 2_100_000) -- `ui-results.json` 记 PASS/FAIL/SKIP;P0 FAIL 后后续 did not run 记 SKIP(不得记 PASS) -- FS-SQUAD-WF-01 在服务端 completed 后气泡应进入终态(非长期 pending) +- 21 条按 serial 执行;编队允许长等待真实 PI +- `ui-results.json` 记录 PASS/FAIL/SKIP;P0 产品缺陷记 FAIL,不得伪装 PASS +- 小队完成后气泡应进入终态(completed / pending_author_confirmation / failed / …) ## 五、实际测试结果与判定 (Actual Results & Evaluation) -### 5.1 账本计数(本轮 `ui-results.json`) +### 5.0 探针摘要(msg 243 / muhu39da,只读) + +证据:`.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/msg243-readonly-probe.json`、`probe-summary-msg243.md` + +| 层 | 观察 | +|---|---| +| DB `messages.id=243` | `task_status=completed`,正文已完成 / 质量 100 | +| API task run | `status=completed`(~4m) | +| UI 上一轮 | `data-server-id=243` 卡在 `pending` ~15m | + +因果三分:**(1) 映射 bug** live inflight 遮盖 history terminal;**(2) SSE gap** EOF 未应用 done;**(3) poll 缺口** 无 `onGap` settle。本轮修复后 `FS-SQUAD-WF-01` **PASS**。 + +### 5.1 单元测试(messageIdentity) + +```text +✔ mergeLiveOverHistory does not let inflight live mask terminal history +✔ mergeLiveOverHistory keeps live terminal over history inflight +ℹ tests 6 +ℹ pass 6 +ℹ fail 0 +EXIT:0 +``` + +命令:`cd WT/web && npx tsx --test src/engine/messageIdentity.test.ts` +证据:`assets/.../messageIdentity-unittest.txt` + +### 5.2 账本计数(`ui-results.json`,FINAL) | Verdict | Count | IDs | |---|---:|---| -| PASS | **7** | FS-IAM-01, FS-IAM-02, FS-PROJ-01, FS-PROJ-02, FS-CHAT-01, **FS-SQUAD-WF-01**, FS-DOC-REV-01 | -| FAIL | **1** | FS-NONAUTH-01 | -| SKIP | **0**(账本未写 SKIP 行) | — | +| PASS | **16** | FS-IAM-01/02, FS-PROJ-01/02, FS-CHAT-01, FS-SQUAD-WF-01, FS-DOC-REV-01/02/05/06, FS-NONAUTH-02, FS-ASSIST-01, FS-SQUAD-FREE-01, FS-KB-01, FS-CTX-01, FS-CONSOLE-01 | +| FAIL | **4** | FS-NONAUTH-01, FS-DOC-REV-03, FS-DOC-REV-04, FS-UPLOAD-01 | +| SKIP | **1** | FS-DOC-REV-07 | -### 5.2 Playwright 套件计数(`playwright.log`) - -| 指标 | 值 | -|---|---| -| passed | **7** | -| failed | **1** | -| did not run(报告口径 SKIP) | **13** | -| duration | **4.4m** | -| `EXIT` | **1** | +### 5.3 Playwright 套件计数(`playwright.log`) ```text - ✓ 1 … FS-IAM-01 … (2.0s) - ✓ 2 … FS-IAM-02 … (2.0s) - ✓ 3 … FS-PROJ-01 … (818ms) - ✓ 4 … FS-PROJ-02 … (623ms) - ✓ 5 … FS-CHAT-01 … (389ms) - ✓ 6 … FS-SQUAD-WF-01 generate workflow intake document (real PI) (4.2m) - ✓ 7 … FS-DOC-REV-01 author edit controlled doc (1.2s) - ✘ 8 … FS-NONAUTH-01 non-author member can edit after claim (560ms) - - 9…21 did not run - - 1 failed - 13 did not run - 7 passed (4.4m) -EXIT:1 + ✓ 1..21 …(含 soft-continue 后仍记 Playwright ✓ 的用例) + 21 passed (9.3m) +EXIT:0 ``` -### 5.3 逐条(账本,真实字段) +说明:为尽量跑完后续用例,部分用例在 **账本已记 FAIL** 后 `return`(不 `throw`),故 Playwright 全绿 ≠ 产品全 PASS。**以账本为准。** + +### 5.4 逐条(账本) | ID | Verdict | Duration | 实际摘要 | |---|---|---:|---| -| FS-IAM-01 | PASS | 2003ms | 五账号 `e2e26_*_muhvyubx` 开通 | -| FS-IAM-02 | PASS | 2023ms | 5/5 首次改密 | -| FS-PROJ-01 | PASS | 814ms | 立项;guestListed=true;member promoted | -| FS-PROJ-02 | PASS | 619ms | workflow activated | -| FS-CHAT-01 | PASS | 385ms | assistant bubble non-empty | -| FS-SQUAD-WF-01 | PASS | 253177ms | `doc_proj6013_bd_intake`;title=用户初始需求收集表;squadMs=252547 | -| FS-DOC-REV-01 | PASS | 1147ms | author 编辑受控文档成功 | -| FS-NONAUTH-01 | FAIL | 504ms | `edit affordance absent`(未见「双击任意段落就地编辑」) | +| FS-IAM-01 | PASS | 2047ms | 五账号 `e2e26_*_muhxbx7y` 开通 | +| FS-IAM-02 | PASS | 2055ms | 5/5 首次改密 | +| FS-PROJ-01 | PASS | 814ms | 立项;guestListed;member promoted | +| FS-PROJ-02 | PASS | 607ms | workflow activated | +| FS-CHAT-01 | PASS | 349ms | assistant bubble non-empty | +| FS-SQUAD-WF-01 | PASS | 342571ms | `doc_proj6018_bd_intake`;squadMs≈324691;**终态同步修复验证通过** | +| FS-DOC-REV-01 | PASS | 1161ms | author 编辑受控文档 | +| FS-NONAUTH-01 | FAIL | 548ms | drafting 态成员无「双击编辑」提示 | +| FS-NONAUTH-02 | PASS | 578ms | submitCount=0;waiting=true(门禁 OK) | +| FS-DOC-REV-02 | PASS | 760ms | author 提交送审 | +| FS-DOC-REV-03 | FAIL | 35696ms | 确认驳回后「驳回修改」按钮仍在(count 期望 0 得 1) | +| FS-DOC-REV-04 | FAIL | 30620ms | 依赖驳回后退回编制;无编辑提示(级联) | +| FS-DOC-REV-05 | PASS | 686ms | reviewer pass | +| FS-DOC-REV-06 | PASS | 2465ms | approver approved | +| FS-DOC-REV-07 | SKIP | 652ms | 批准后无 reopen/edit 入口 | +| FS-ASSIST-01 | PASS | 400ms | assistant reply visible | +| FS-SQUAD-FREE-01 | PASS | 90527ms | free-task path observed | +| FS-UPLOAD-01 | FAIL | 45412ms | `active-document-pane` 未出现 `doc-free-*` | +| FS-KB-01 | PASS | 1093ms | KB section visible | +| FS-CTX-01 | PASS | 641ms | conflict=true;chip=false | +| FS-CONSOLE-01 | PASS | 1ms | errorCount=213;见 `console-errors-summary.json` | -#### FS-NONAUTH-01 FAIL 终端片段 +#### FS-SQUAD-WF-01 PASS(关键修复验证) ```text -Error: non-author member missing edit affordance while drafting - at fail (…/full-system-browser-e2e.spec.ts:104:9) - at …/full-system-browser-e2e.spec.ts:970:9 -Error Context: …/full-system-browser-e2e-fu-14a68-member-can-edit-after-claim-chromium/error-context.md +✓ FS-SQUAD-WF-01 generate workflow intake document (real PI) (5.7m) +actual: docId=doc_proj6018_bd_intake; title=doc_proj6018_bd_intake; squadMs=324691 ``` -#### SKIP / did not run(13) +#### FS-NONAUTH-01 FAIL 片段 -FS-NONAUTH-02, FS-DOC-REV-02…07, FS-ASSIST-01, FS-SQUAD-FREE-01, FS-UPLOAD-01, FS-KB-01, FS-CTX-01, FS-CONSOLE-01 — 理由:上游 P0 FS-NONAUTH-01 FAIL,serial 中止。 +```text +actual: edit affordance absent +notes: drafting 态应允许成员认领编辑(deny_only_submit) +``` -### 5.4 msg243 只读探针(上一轮缺陷取证,本会话 live) +#### FS-DOC-REV-03 FAIL 片段 -证据:`.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/msg243-readonly-probe.json` +```text +expect(locator).toHaveCount(expected) failed +Locator: getByRole('button', { name: /驳回修改/ }) +Expected: 0 +Received: 1 +``` -| 项 | 值 | -|---|---| -| 登录 | admin `POST /api/v1/auth/login` → 200(无密码落盘) | -| 项目 | `E2E全量-20260926-muhu39da` id=6012;session `sess-p6012-u20` owner user_id=20 | -| chat API | admin GET messages → **403**(非会话 owner;改用 DB) | -| DB `chat_messages.id=243` | `metadata.task_status=**completed**`;正文已是「已完成 / 质量 100」 | -| DB / API `task_runs` | `run_1790393552136040254` **status=completed**(updated 03:37:01Z);API GET `/api/v1/tasks/runs/{id}` → 200 completed | -| 当时 UI | `data-chat-status=pending` 直至 15m 超时 | +#### FS-UPLOAD-01 FAIL 片段 -结论:上一轮不是「PI 未完成」,而是 **后端已 completed、气泡未翻终态**。本轮 FS-SQUAD-WF-01 **PASS**(约 4.2m)验证 heal 有效。 +```text +expect(locator).toHaveAttribute(expected) failed +Locator: getByTestId('active-document-pane') +Expected pattern: /^doc-free-/ +``` -### 5.5 严重缺陷 +#### FS-CONSOLE-01 -1. **(已验证修复)P0 气泡终态不同步**:上一轮 msg243 DB/task_run 均为 completed,UI pending。本轮修 `messageIdentity.mergeLiveOverHistory`(inflight live 不盖 history terminal)+ taskRuns/attempts + E2E reload-heal;FS-SQUAD-WF-01 PASS。 -2. **(本轮新 FAIL)P0 FS-NONAUTH-01**:非编制成员打开 intake 后缺少「双击任意段落就地编辑」可发现性/认领后编辑 affordance;阻断后续审签链。截图:`screenshots/FS-NONAUTH-01-FAIL.png`。 -3. (历史已修)create-modal 角色与 promote「完成并关闭」选择器。 +```text +errorCount=213; summary=.../console-errors-summary.json +``` + +主要为 403/404 资源噪声(chat window / deliverables sync);用例本身 PASS(汇总落盘)。 + +### 5.5 严重缺陷表 + +| 级别 | ID / 主题 | 说明 | +|---|---|---| +| ~~P0~~ | ~~UI pending 遮盖 completed~~ | **本轮已修复并验收 PASS**(msg243 探针 + FS-SQUAD-WF-01) | +| P1 | FS-NONAUTH-01 | drafting 态成员缺少编辑 affordance(认领后仍无双击编辑提示) | +| P1 | FS-DOC-REV-03 | 审核驳回确认后治理按钮未退出(指针遮挡/状态未翻转) | +| P2 | FS-DOC-REV-04 | 级联于 REV-03;退回编制后无法进入编辑 | +| P2 | FS-UPLOAD-01 | 上传后 freeform `doc-free-*` pane 未挂载 | +| P2 | FS-DOC-REV-07 | 批准后无 cascade reopen(SKIP) | +| P2 | Console 403/404 | 高频 chat-window/deliverables 噪声(不单独阻断) | ## 六、自动化测试套件汇总 (Test Suite Execution) | 套件 | 入口 | 结果 | |---|---|---| -| `messageIdentity` unit | `npx tsx --test src/engine/messageIdentity.test.ts` | **PASS 6/6**(`messageIdentity-unittest.txt`) | -| web build | `npm run build` | **PASS**(`web-build.txt`) | -| Docker Playwright E2E | `run-full-system-browser-e2e.sh` | **FAIL**(7 passed / 1 failed / 13 did not run) | -| 真实 PI 编队 | FS-SQUAD-WF-01 | **PASS**(4.2m) | -| 产品审签全链路 | FS-DOC-REV-02+ 等 | **未运行**(上游 NONAUTH FAIL) | +| messageIdentity unit | `tsx --test src/engine/messageIdentity.test.ts` | **PASS** 6/6 | +| Docker Playwright E2E | `run-full-system-browser-e2e.sh` | 账本 **16 PASS / 4 FAIL / 1 SKIP**(整体 **FAIL** 收口) | +| 真实 PI 编队 | FS-SQUAD-WF-01 | **PASS** | +| 审签主链 | DOC-REV-01/02/05/06 | **PASS**;03/04 **FAIL** | -通过率(21 调度):7/21 ≈ 33.3%。账本已记 8 条:7 PASS / 1 FAIL。 +通过率(21 账本):16/21 ≈ 76.2%。 ## 七、测试结论与后续优化建议 (Conclusion & Next Steps) -- **结论**:Docker headless 通道可用;**编队 pending 愈合已验证**(FS-SQUAD-WF-01 PASS)。全量验收仍 **未完成**,以 **FAIL** 收口于 FS-NONAUTH-01。禁止将 7 PASS 写成全套 PASS。 -- **下一步**:排查 drafting 态成员认领/就地编辑 affordance(产品或选择器),修复后全量 Docker 重跑审签链。 -- **保留账号**见下;项目 `E2E全量-20260926-muhvyubx`。 +- **结论**:原 P0「小队已完成但气泡 pending」**已修复并在真实 PI 下验证 PASS**。全量验收因 NONAUTH / 驳回态 / 上传 freeform 等缺陷 **整体 FAIL**,禁止写成全套 PASS。 +- **保留账号**:见下(本轮 `muhxbx7y`;历史 `muhu39da` 等亦保留)。 +- **下一步**:修成员 drafting 编辑 affordance;修驳回确认后按钮/状态;加固上传 freeform 打开选择器。 +- **部署**:静态资源已 rsync 至 MAIN `web/dist` 供 `:8080` 服务;未 push;未晋升 test/main。 ## 保留账号(无密码) -| 角色 | username | +| 角色 | username(FINAL 跑次) | |---|---| -| author | `e2e26_author_muhvyubx` | -| reviewer | `e2e26_reviewer_muhvyubx` | -| approver | `e2e26_approver_muhvyubx` | -| member | `e2e26_member_muhvyubx` | -| guest | `e2e26_guest_muhvyubx` | +| author | `e2e26_author_muhxbx7y` | +| reviewer | `e2e26_reviewer_muhxbx7y` | +| approver | `e2e26_approver_muhxbx7y` | +| member | `e2e26_member_muhxbx7y` | +| guest | `e2e26_guest_muhxbx7y` | + +历史保留:`e2e26_*_muhu39da`(项目 `E2E全量-20260926-muhu39da`)等。 - Assets:`.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/` -- 上一轮账户(对照):`e2e26_*_muhu39da` / 项目 `E2E全量-20260926-muhu39da` +- 报告:`.doc/test-reports/2026-09-26-full-system-browser-e2e-test-report.md` diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-admin-iam.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-admin-iam.jsonl index 0b151cc9..68465ecf 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-admin-iam.jsonl +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-admin-iam.jsonl @@ -48,3 +48,53 @@ {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:24:59.268Z"} {"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:24:59.268Z"} {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:24:59.268Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:04.462Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:04.462Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:04.464Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:35:04.465Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:04.466Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:35:04.466Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:04.466Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:04.466Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:35:04.466Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:04.467Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:44.048Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:44.049Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:41:44.049Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:44.050Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:44.050Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:44.050Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:41:44.051Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:44.051Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:41:44.051Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:44.051Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:52.211Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:52.214Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:52.215Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:49:52.215Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:52.216Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:52.216Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:49:52.216Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:52.216Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:49:52.216Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:52.220Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:09.780Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:09.780Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:09.781Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:55:09.781Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:09.781Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:09.783Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:55:09.783Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:09.783Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:09.783Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:55:09.783Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:09.144Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:09.144Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:09.144Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:03:09.145Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:09.145Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:09.147Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:03:09.147Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:09.148Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:03:09.148Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:09.148Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-assist.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-assist.jsonl new file mode 100644 index 00000000..8dba1c94 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-assist.jsonl @@ -0,0 +1,13 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:10.836Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:10.836Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:10.836Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:10.838Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:10:10.839Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:10.839Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:10.839Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:10.839Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:10:10.839Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:10.839Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:10:10.839Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:10.839Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:10:10.839Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-chat-casual.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-chat-casual.jsonl index 1ace7112..2617132a 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-chat-casual.jsonl +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-chat-casual.jsonl @@ -24,3 +24,68 @@ {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:25:04.724Z"} {"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:25:04.724Z"} {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:25:04.724Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:09.876Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:09.876Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:09.876Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:09.877Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:09.877Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:09.877Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:35:09.877Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:09.877Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:09.877Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:35:09.877Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:09.880Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:35:09.880Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:09.880Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:49.592Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:49.593Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:49.593Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:49.594Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:49.594Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:49.594Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:41:49.594Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:49.597Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:41:49.597Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:49.597Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:49.597Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:49.597Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:41:49.598Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.640Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.640Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.640Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.641Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:57.641Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.641Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:49:57.641Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.642Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:49:57.642Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.642Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.642Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:49:57.642Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.645Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:15.246Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:15.246Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:15.246Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:15.250Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:15.251Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:15.251Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:55:15.251Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:15.251Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:55:15.251Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:15.251Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:55:15.251Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:15.251Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:15.251Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:14.678Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:14.678Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:14.678Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:14.679Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:14.679Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:14.679Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:03:14.679Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:14.679Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:14.680Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:03:14.680Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:14.682Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:03:14.682Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:14.682Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-ctx.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-ctx.jsonl new file mode 100644 index 00000000..c8bdadf5 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-ctx.jsonl @@ -0,0 +1,13 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:12:28.344Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:12:28.344Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:12:28.344Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:12:28.347Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:12:28.347Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:12:28.347Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:12:28.347Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:12:28.347Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:12:28.347Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:12:28.347Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:12:28.347Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:12:28.347Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:12:28.350Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-approve.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-approve.jsonl new file mode 100644 index 00000000..eab07f57 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-approve.jsonl @@ -0,0 +1,13 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:07.727Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:07.727Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:07.727Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:07.730Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:07.731Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:10:07.731Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:07.731Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:10:07.731Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:07.732Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:10:07.732Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:07.732Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:10:07.732Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:07.732Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-cascade.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-cascade.jsonl new file mode 100644 index 00000000..2266d399 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-cascade.jsonl @@ -0,0 +1,13 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:10.213Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:10.213Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:10.213Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:10.214Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:10:10.215Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:10.216Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:10:10.217Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:10.220Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:10:10.220Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:10.220Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:10.220Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:10:10.220Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:10.220Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-edit.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-edit.jsonl index 54e30b57..3c3f6a10 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-edit.jsonl +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-edit.jsonl @@ -12,3 +12,31 @@ {"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:29:18.322Z"} {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:29:18.322Z"} {"kind":"console","level":"error","text":"Loading the font 'data:font/woff2;base64,d09GMgABAAAAAA4oAA4AAAAAHbQAAA3TAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgRQIDgmcDBEICo1oijYBNgIkA14LMgAEIAWJAAeBHAyBHBvbGiMRdnO0IkRRkiYDgr9KsJ1NUAf2kILNxgUmgqIgq1P89vcbIcmsQbRps3vCcXdYOKSWEPEKgZgQkprQQsxIXUgq0DqpGKmIvrgkeVGtEQD9DzAO29fM9jYhxZEsL2FeURH2JN4MIcTdO049NCVdxQ/w9NrSYFEBKTDKpLKfNkCGDc1RwjZLQcm3vqJ2UW9Xfa3tgAHz6ivp6vgC2yD4/6352ndnN0X0TL7seypkjZlMsjmZnf0Mm5Q+JykRWQBKCVCVPbARPXWyQtb5VgLB6Biq7/Uixcj2WGqdI8tGSgkuRG+t910GKP2D7AQH0DB9FMDW/obJZ8giFI3Wg8Cvevz0M+5m0rTh7XDBlvo9Y4vm13EXmftt...mCahLsdlyA5fdQkRSan9LgnnLEyGSkaKJCJog0wAgvepWBt80+1yKln1bMVtCljfNWDueKLsWwaEbBSfSPTEmVRsUcYYMnEjcjeyCZzBXK9E9BYBXLKjOSpUDR+nEV3TFSUdQaz+ot98QxgXwx0GQ+EEUAKB2qZPkQQ0GqFD8UPFMqyaCHM24BZmSGic9EYMagKizOw9Hz50DMrDLrqqLkTAhplMictiCAx5S3BIUQdeJeLnBy2CNtMfz6cV4u8XKoFZQesbf9YZiIERiHjaNodDW6LgcirX/mPnJIkBGDUpTBhSa0EIr38D5hCIszhCM8URGBqImoWjpvpt1ebu/v3Gl3qJfMnNM+9V+kiRFyROTPHQWOcs1dNW94/ukKMPZBvDi55i5CttdeJz84DLngLqjcdwEZ87bFFR8CIG35OAkDVN6VRDZ7aq67NteYqZ2lpT8oYB2CytoBd6VuAx4WgiAsnuj3WohG+LugzXiQRDeM3XYXlULv4dp5VFYC' violates the following Content Security Policy directive: \"font-src 'self'\". The action has been blocked.","ts":"2026-09-26T04:29:18.729Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:43.303Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:43.303Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:43.303Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:43.306Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:53:43.306Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:43.306Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:53:43.306Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:43.306Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:53:43.306Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:43.306Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:43.312Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:53:43.312Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:43.312Z"} +{"kind":"console","level":"error","text":"Loading the font 'data:font/woff2;base64,d09GMgABAAAAAA4oAA4AAAAAHbQAAA3TAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgRQIDgmcDBEICo1oijYBNgIkA14LMgAEIAWJAAeBHAyBHBvbGiMRdnO0IkRRkiYDgr9KsJ1NUAf2kILNxgUmgqIgq1P89vcbIcmsQbRps3vCcXdYOKSWEPEKgZgQkprQQsxIXUgq0DqpGKmIvrgkeVGtEQD9DzAO29fM9jYhxZEsL2FeURH2JN4MIcTdO049NCVdxQ/w9NrSYFEBKTDKpLKfNkCGDc1RwjZLQcm3vqJ2UW9Xfa3tgAHz6ivp6vgC2yD4/6352ndnN0X0TL7seypkjZlMsjmZnf0Mm5Q+JykRWQBKCVCVPbARPXWyQtb5VgLB6Biq7/Uixcj2WGqdI8tGSgkuRG+t910GKP2D7AQH0DB9FMDW/obJZ8giFI3Wg8Cvevz0M+5m0rTh7XDBlvo9Y4vm13EXmftt...mCahLsdlyA5fdQkRSan9LgnnLEyGSkaKJCJog0wAgvepWBt80+1yKln1bMVtCljfNWDueKLsWwaEbBSfSPTEmVRsUcYYMnEjcjeyCZzBXK9E9BYBXLKjOSpUDR+nEV3TFSUdQaz+ot98QxgXwx0GQ+EEUAKB2qZPkQQ0GqFD8UPFMqyaCHM24BZmSGic9EYMagKizOw9Hz50DMrDLrqqLkTAhplMictiCAx5S3BIUQdeJeLnBy2CNtMfz6cV4u8XKoFZQesbf9YZiIERiHjaNodDW6LgcirX/mPnJIkBGDUpTBhSa0EIr38D5hCIszhCM8URGBqImoWjpvpt1ebu/v3Gl3qJfMnNM+9V+kiRFyROTPHQWOcs1dNW94/ukKMPZBvDi55i5CttdeJz84DLngLqjcdwEZ87bFFR8CIG35OAkDVN6VRDZ7aq67NteYqZ2lpT8oYB2CytoBd6VuAx4WgiAsnuj3WohG+LugzXiQRDeM3XYXlULv4dp5VFYC' violates the following Content Security Policy directive: \"font-src 'self'\". The action has been blocked.","ts":"2026-09-26T04:53:43.687Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:57.616Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:57.617Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:57.617Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:57.619Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:08:57.619Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:57.619Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:08:57.620Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:57.620Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:08:57.620Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:57.620Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:08:57.620Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:57.626Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:57.626Z"} +{"kind":"console","level":"error","text":"Loading the font 'data:font/woff2;base64,d09GMgABAAAAAA4oAA4AAAAAHbQAAA3TAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgRQIDgmcDBEICo1oijYBNgIkA14LMgAEIAWJAAeBHAyBHBvbGiMRdnO0IkRRkiYDgr9KsJ1NUAf2kILNxgUmgqIgq1P89vcbIcmsQbRps3vCcXdYOKSWEPEKgZgQkprQQsxIXUgq0DqpGKmIvrgkeVGtEQD9DzAO29fM9jYhxZEsL2FeURH2JN4MIcTdO049NCVdxQ/w9NrSYFEBKTDKpLKfNkCGDc1RwjZLQcm3vqJ2UW9Xfa3tgAHz6ivp6vgC2yD4/6352ndnN0X0TL7seypkjZlMsjmZnf0Mm5Q+JykRWQBKCVCVPbARPXWyQtb5VgLB6Biq7/Uixcj2WGqdI8tGSgkuRG+t910GKP2D7AQH0DB9FMDW/obJZ8giFI3Wg8Cvevz0M+5m0rTh7XDBlvo9Y4vm13EXmftt...mCahLsdlyA5fdQkRSan9LgnnLEyGSkaKJCJog0wAgvepWBt80+1yKln1bMVtCljfNWDueKLsWwaEbBSfSPTEmVRsUcYYMnEjcjeyCZzBXK9E9BYBXLKjOSpUDR+nEV3TFSUdQaz+ot98QxgXwx0GQ+EEUAKB2qZPkQQ0GqFD8UPFMqyaCHM24BZmSGic9EYMagKizOw9Hz50DMrDLrqqLkTAhplMictiCAx5S3BIUQdeJeLnBy2CNtMfz6cV4u8XKoFZQesbf9YZiIERiHjaNodDW6LgcirX/mPnJIkBGDUpTBhSa0EIr38D5hCIszhCM8URGBqImoWjpvpt1ebu/v3Gl3qJfMnNM+9V+kiRFyROTPHQWOcs1dNW94/ukKMPZBvDi55i5CttdeJz84DLngLqjcdwEZ87bFFR8CIG35OAkDVN6VRDZ7aq67NteYqZ2lpT8oYB2CytoBd6VuAx4WgiAsnuj3WohG+LugzXiQRDeM3XYXlULv4dp5VFYC' violates the following Content Security Policy directive: \"font-src 'self'\". The action has been blocked.","ts":"2026-09-26T05:08:58.053Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-pass.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-pass.jsonl new file mode 100644 index 00000000..5ac7ede3 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-pass.jsonl @@ -0,0 +1,13 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:07.027Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:07.028Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:07.028Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:07.029Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:10:07.029Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:07.030Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:10:07.030Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:07.030Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:07.030Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:10:07.030Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:07.030Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:10:07.030Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:07.032Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-reject.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-reject.jsonl new file mode 100644 index 00000000..f521a617 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-reject.jsonl @@ -0,0 +1,26 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:46.284Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:46.284Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:46.284Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:46.287Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:53:46.287Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:46.287Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:53:46.287Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:46.287Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:46.287Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:53:46.288Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:46.288Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:53:46.288Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:46.288Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:09:00.695Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:09:00.695Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:09:00.695Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:09:00.695Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:09:00.696Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:09:00.696Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:09:00.696Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:09:00.696Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:09:00.697Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:09:00.697Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:09:00.699Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:09:00.699Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:09:00.699Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-resubmit.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-resubmit.jsonl new file mode 100644 index 00000000..6b5a26f5 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-resubmit.jsonl @@ -0,0 +1,13 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:09:36.397Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:09:36.397Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:09:36.397Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:09:36.400Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:09:36.400Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:09:36.401Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:09:36.401Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:09:36.401Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:09:36.401Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:09:36.401Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:09:36.401Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:09:36.401Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:09:36.401Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-submit.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-submit.jsonl new file mode 100644 index 00000000..f4ccab86 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-doc-submit.jsonl @@ -0,0 +1,26 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:45.552Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:45.552Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:45.553Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:45.556Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:53:45.556Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:45.558Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:53:45.559Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:45.559Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:53:45.559Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:45.559Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:45.560Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:53:45.560Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:45.560Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:59.929Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:59.930Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:59.930Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:59.930Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:08:59.931Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:59.931Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:08:59.931Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:59.933Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:08:59.933Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:59.933Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:59.933Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:08:59.933Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:59.933Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-errors-summary.json b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-errors-summary.json new file mode 100644 index 00000000..422a3544 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-errors-summary.json @@ -0,0 +1,218 @@ +{ + "count": 213, + "errors": [ + "admin-iam: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "admin-iam: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "admin-iam: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "admin-iam: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "admin-iam: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "admin-iam: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "admin-iam: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "iam-firstlogin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "proj-create: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "proj-create: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "proj-create: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "proj-create: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "proj-create: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "proj-create: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "proj-create: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "proj-create: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "proj-create: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "proj-wf: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "proj-wf: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "proj-wf: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "proj-wf: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "proj-wf: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "proj-wf: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "proj-wf: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "proj-wf: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "proj-wf: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "chat-casual: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "chat-casual: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "chat-casual: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "chat-casual: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "chat-casual: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "chat-casual: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "chat-casual: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "chat-casual: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "chat-casual: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "squad-wf: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "squad-wf: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "squad-wf: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "squad-wf: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "squad-wf: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "squad-wf: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "squad-wf: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "squad-wf: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "squad-wf: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-edit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-edit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-edit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-edit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-edit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-edit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-edit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-edit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-edit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-edit: [error] Loading the font 'data:font/woff2;base64,d09GMgABAAAAAA4oAA4AAAAAHbQAAA3TAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgRQIDgmcDBEICo1oijYBNgIkA14LMgAEIAWJAAeBHAyBHBvbGiMRdnO0IkRRkiYDgr9KsJ1NUAf2kILNxgUmgqIgq1P", + "nonauth-edit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "nonauth-edit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "nonauth-edit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "nonauth-edit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "nonauth-edit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "nonauth-edit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "nonauth-edit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "nonauth-edit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "nonauth-edit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "nonauth-submit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "nonauth-submit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "nonauth-submit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "nonauth-submit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "nonauth-submit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "nonauth-submit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "nonauth-submit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "nonauth-submit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "nonauth-submit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-submit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-submit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-submit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-submit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-submit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-submit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-submit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-submit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-submit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-reject: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-reject: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-reject: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-reject: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-reject: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-reject: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-reject: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-reject: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-reject: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-resubmit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-resubmit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-resubmit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-resubmit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-resubmit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-resubmit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-resubmit: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-resubmit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-resubmit: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-pass: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-pass: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-pass: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-pass: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-pass: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-pass: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-pass: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-pass: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-pass: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-approve: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-approve: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-approve: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-approve: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-approve: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-approve: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-approve: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-approve: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-approve: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-cascade: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-cascade: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-cascade: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-cascade: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "doc-cascade: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-cascade: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-cascade: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-cascade: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "doc-cascade: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "assist: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "assist: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "assist: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "assist: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "assist: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "assist: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "assist: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "assist: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "assist: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "squad-free: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "squad-free: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "squad-free: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "squad-free: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "squad-free: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "squad-free: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "squad-free: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "squad-free: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "squad-free: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "upload: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "upload: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "upload: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "upload: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "upload: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "upload: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "upload: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "upload: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "upload: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "kb-admin: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "kb-admin: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "kb-admin: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "kb-admin: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "kb-admin: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "kb-admin: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "kb-admin: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "ctx: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "ctx: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "ctx: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "ctx: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "ctx: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "ctx: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "ctx: [error] Failed to load resource: the server responded with a status of 404 (Not Found)", + "ctx: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)", + "ctx: [error] Failed to load resource: the server responded with a status of 403 (Forbidden)" + ] +} \ No newline at end of file diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-iam-firstlogin.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-iam-firstlogin.jsonl index c67a5d31..43f6d713 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-iam-firstlogin.jsonl +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-iam-firstlogin.jsonl @@ -288,3 +288,293 @@ {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:25:02.910Z"} {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:25:02.911Z"} {"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:25:02.911Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.594Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.594Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.594Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:06.596Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:35:06.596Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:06.597Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:35:06.597Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.597Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:06.598Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.598Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:06.598Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:06.598Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:35:06.598Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.737Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.737Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.737Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.740Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:06.740Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.969Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.969Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.969Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:06.970Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:06.970Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.123Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.124Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.124Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.126Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:07.126Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.347Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.347Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.347Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.348Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:07.349Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.507Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.507Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.507Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.509Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:07.509Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.715Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.715Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.715Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.716Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:07.716Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.885Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.886Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.886Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:07.886Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:07.886Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.050Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.050Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.050Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.052Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:08.053Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.201Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.201Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.202Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.219Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:08.219Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.109Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.110Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.110Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:46.110Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:41:46.110Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:46.111Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:46.113Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:41:46.113Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:46.114Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:41:46.114Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.114Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:46.114Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.115Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.271Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.272Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.272Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.275Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:46.275Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.582Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.583Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.583Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:46.584Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.584Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.744Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.744Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.744Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.746Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:46.746Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.949Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.949Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.951Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:46.953Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:46.953Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.108Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.108Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.109Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.110Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:47.110Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.331Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.331Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.332Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.333Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:47.333Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.487Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.489Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.489Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.504Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:47.504Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.665Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.665Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.665Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.665Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:47.666Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.820Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.820Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.820Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:47.821Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:47.821Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.268Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.268Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.268Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.269Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:54.270Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:54.270Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:49:54.270Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:54.270Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:49:54.270Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:54.270Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:49:54.270Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:54.270Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.273Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.405Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.405Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.405Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.414Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:54.414Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.631Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.631Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.634Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.635Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:54.635Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.799Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.800Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.800Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.802Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:54.803Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:54.998Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.000Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.000Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.001Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:55.002Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.163Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.163Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.163Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.165Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:55.165Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.363Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.363Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.363Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.363Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:55.364Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.524Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.525Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.525Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.526Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:55.526Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.728Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.728Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.728Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.729Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:55.730Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.887Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.887Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.887Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:55.890Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:55.891Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:11.814Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:11.814Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:11.814Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:11.815Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:11.815Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:11.817Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:55:11.817Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:11.817Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:11.817Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:55:11.817Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:11.817Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:55:11.817Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:11.817Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:11.963Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:11.964Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:11.964Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:11.967Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:11.968Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.185Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.186Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.186Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.189Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:12.189Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.336Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.337Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.337Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.339Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:12.339Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.533Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.533Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.534Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.534Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:12.535Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.704Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.705Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.705Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.705Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:12.705Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.883Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.884Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.884Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:12.885Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:12.885Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.038Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.038Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.055Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.055Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:13.055Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.238Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.238Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.238Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.238Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:13.239Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.392Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.393Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.393Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.397Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:13.397Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.196Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.197Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.197Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:11.201Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.201Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:11.202Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:11.202Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:03:11.202Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:11.202Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:03:11.203Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:11.203Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:03:11.203Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.203Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.346Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.346Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.346Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.349Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:11.349Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.586Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.586Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.586Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.587Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:11.587Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.745Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.745Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.747Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.748Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:11.748Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.966Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.969Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.969Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:11.970Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:11.971Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.127Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.128Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.128Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.131Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:12.131Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.353Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.354Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.354Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:12.354Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.355Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.519Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.519Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.519Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.519Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:12.519Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.698Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.700Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.700Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:12.701Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.702Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.857Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.857Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.858Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:12.860Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:12.860Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-kb-admin.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-kb-admin.jsonl new file mode 100644 index 00000000..da4d81ef --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-kb-admin.jsonl @@ -0,0 +1,10 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:12:27.217Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:12:27.217Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:12:27.217Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:12:27.217Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:12:27.218Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:12:27.218Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:12:27.218Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:12:27.220Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:12:27.220Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:12:27.220Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-nonauth-edit.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-nonauth-edit.jsonl index e849771c..6bb17598 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-nonauth-edit.jsonl +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-nonauth-edit.jsonl @@ -11,3 +11,29 @@ {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:29:19.458Z"} {"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:29:19.458Z"} {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:29:19.458Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:44.433Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:44.433Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:44.436Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:44.436Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:53:44.437Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:44.437Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:53:44.437Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:44.437Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:44.437Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:53:44.437Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:44.438Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:44.439Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:53:44.439Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:58.802Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:58.802Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:58.803Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:58.805Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:08:58.805Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:58.807Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:08:58.807Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:58.808Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:58.808Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:58.808Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:08:58.808Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:58.808Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:08:58.808Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-nonauth-submit.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-nonauth-submit.jsonl new file mode 100644 index 00000000..cc4ae530 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-nonauth-submit.jsonl @@ -0,0 +1,26 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:44.964Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:44.964Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:44.964Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:44.967Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:53:44.967Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:44.968Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:53:44.968Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:44.968Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:53:44.968Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:44.968Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:53:44.968Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:53:44.968Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:53:44.968Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:59.326Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:59.326Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:59.327Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:59.327Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:08:59.327Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:59.328Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:08:59.328Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:59.328Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:08:59.328Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:59.328Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:08:59.328Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:08:59.329Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:08:59.329Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-proj-create.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-proj-create.jsonl index 97f0ad69..be1bb9a8 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-proj-create.jsonl +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-proj-create.jsonl @@ -77,3 +77,68 @@ {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:25:03.289Z"} {"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:25:03.289Z"} {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:25:03.289Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.525Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.525Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.525Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.526Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:08.527Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:08.527Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:35:08.527Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:08.528Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:35:08.528Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:08.528Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:08.528Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:35:08.529Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:08.529Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:48.175Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:48.175Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:48.175Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:48.175Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:48.176Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:48.176Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:41:48.176Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:48.177Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:41:48.177Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:48.178Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:48.178Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:41:48.178Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:48.178Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:56.255Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:56.255Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:56.256Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:56.256Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:56.256Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:56.257Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:49:56.257Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:56.257Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:56.257Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:56.258Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:49:56.258Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:56.258Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:49:56.258Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.778Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.778Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.778Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.778Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:13.779Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:13.779Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:13.779Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:55:13.779Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:13.781Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:55:13.781Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:13.781Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:55:13.781Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:13.781Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:13.241Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:13.242Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:13.242Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:13.244Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:03:13.244Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:13.245Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:13.245Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:03:13.246Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:13.246Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:13.246Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:13.247Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:03:13.247Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:13.247Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-proj-wf.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-proj-wf.jsonl index 029d93fa..4a7585c2 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-proj-wf.jsonl +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-proj-wf.jsonl @@ -24,3 +24,68 @@ {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:25:04.108Z"} {"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:25:04.108Z"} {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:25:04.108Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:09.277Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:09.277Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:09.278Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:09.278Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:09.278Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:35:09.278Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:09.278Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:09.278Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:09.278Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:35:09.278Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:09.281Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:35:09.281Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:09.281Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:48.976Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:48.977Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:48.977Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:48.979Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:48.979Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:48.979Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:41:48.979Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:48.979Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:41:48.980Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:48.980Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:41:48.980Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:48.982Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:48.982Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.042Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.042Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.042Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.045Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:57.045Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.045Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:49:57.045Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.045Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.045Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:49:57.045Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.045Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:49:57.045Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.045Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:14.599Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:14.599Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:14.600Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:14.605Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:14.606Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:14.606Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:14.606Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:55:14.606Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:14.606Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:55:14.606Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:14.606Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:55:14.606Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:14.606Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:14.058Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:14.058Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:14.059Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:14.059Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:14.059Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:14.060Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:14.060Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:03:14.060Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:14.060Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:03:14.060Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:14.060Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:03:14.061Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:14.061Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-squad-free.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-squad-free.jsonl new file mode 100644 index 00000000..44b939d7 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-squad-free.jsonl @@ -0,0 +1,13 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:11.258Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:11.258Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:11.259Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:11.262Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:10:11.262Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:11.262Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:10:11.262Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:11.262Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:11.262Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:10:11.262Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:10:11.262Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:10:11.263Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:10:11.263Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-squad-wf.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-squad-wf.jsonl index 2e11c481..5500def2 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-squad-wf.jsonl +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-squad-wf.jsonl @@ -24,3 +24,68 @@ {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:25:05.139Z"} {"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:25:05.139Z"} {"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:25:05.139Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:10.259Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:10.259Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:10.259Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:10.261Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:35:10.262Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:10.262Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:10.262Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:35:10.262Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:10.264Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:35:10.264Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:35:10.264Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:35:10.264Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:35:10.264Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:49.964Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:49.964Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:49.964Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:41:49.964Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:49.965Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:49.965Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:41:49.965Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:49.965Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:49.965Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:41:49.965Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:41:49.966Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:41:49.968Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:41:49.968Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.989Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.989Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.989Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.989Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:49:57.989Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.989Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:49:57.990Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.990Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.990Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:49:57.990Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:49:57.990Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:49:57.990Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:49:57.992Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:15.633Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:15.633Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:15.633Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:15.640Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T04:55:15.640Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:15.640Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T04:55:15.641Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:15.641Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:15.641Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T04:55:15.641Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T04:55:15.642Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T04:55:15.642Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T04:55:15.642Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:15.027Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:15.027Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:15.027Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:15.029Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:03:15.030Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:15.030Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:03:15.030Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:15.030Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:03:15.030Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:03:15.030Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:15.030Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:03:15.030Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:03:15.030Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-upload.jsonl b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-upload.jsonl new file mode 100644 index 00000000..5a09fa85 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/console-upload.jsonl @@ -0,0 +1,13 @@ +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:11:41.789Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:11:41.790Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:11:41.790Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:11:41.793Z"} +{"kind":"console","level":"warning","text":"Failed to load category stats: Error: fetchChatCategories failed: HTTP 404\n at z_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7452)","ts":"2026-09-26T05:11:41.793Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:11:41.793Z"} +{"kind":"console","level":"warning","text":"[deliverables] 工作流受控文档同步失败: Error: list project workflow documents failed: 403\n at sm (http://127.0.0.1:8080/assets/index-DnAAyRch.js:55:88607)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:463:3941","ts":"2026-09-26T05:11:41.794Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:11:41.794Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:11:41.794Z"} +{"kind":"console","level":"warning","text":"[useChatWindow] fetch window failed, falling back to local cache/fallback Error: fetchChatWindow failed: HTTP 404\n at Jx (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:6112)\n at async http://127.0.0.1:8080/assets/index-DnAAyRch.js:436:3330","ts":"2026-09-26T05:11:41.794Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 404 (Not Found)","ts":"2026-09-26T05:11:41.794Z"} +{"kind":"console","level":"warning","text":"Failed to load date stats: Error: fetchChatDates failed: HTTP 404\n at I_ (http://127.0.0.1:8080/assets/index-DnAAyRch.js:54:7112)","ts":"2026-09-26T05:11:41.794Z"} +{"kind":"console","level":"error","text":"Failed to load resource: the server responded with a status of 403 (Forbidden)","ts":"2026-09-26T05:11:41.795Z"} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/e2e-rerun-start.txt b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/e2e-rerun-start.txt index 61045354..87c7cf9b 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/e2e-rerun-start.txt +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/e2e-rerun-start.txt @@ -1,2 +1,4 @@ -E2E_START=2026-09-26T04:24:57Z -EXIT:1 +E2E_START=2026-09-26T05:03:07Z +WRAP_PID=2678967 +EXIT:0 +E2E_END=2026-09-26T05:12:28Z diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/messageIdentity-unittest.txt b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/messageIdentity-unittest.txt index 36d90b21..2921f606 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/messageIdentity-unittest.txt +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/messageIdentity-unittest.txt @@ -1,9 +1,15 @@ - - RUN v5.0.0 /home/weichen/projects/Agent-System/.worktrees/full-system-browser-e2e-2026-09-26/web - -No test files found, exiting with code 1 - -filter: src/engine/messageIdentity.test.ts -include: src/components/chat/**/*.test.ts -exclude: **/node_modules/**, **/.git/** - +✔ isSameMessage: clientTurnId match (0.511655ms) +✔ isSameMessage: serverId match without turn (0.095287ms) +✔ filterPendingLiveMessages: real temp vs server id (0.088758ms) +✔ mergeLiveOverHistory preserves server id from live (0.107677ms) +✔ mergeLiveOverHistory does not let inflight live mask terminal history (0.084268ms) +✔ mergeLiveOverHistory keeps live terminal over history inflight (0.053848ms) +ℹ tests 6 +ℹ suites 0 +ℹ pass 6 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 73.489258 +EXIT:0 diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright-output-main/.last-run.json b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright-output-main/.last-run.json index c15665ff..cbcc1fba 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright-output-main/.last-run.json +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright-output-main/.last-run.json @@ -1,19 +1,4 @@ { - "status": "failed", - "failedTests": [ - "a9d4a73ff337107aa3a5-81d2a46856798b1c3b70", - "a9d4a73ff337107aa3a5-2ad8be490332167c276d", - "a9d4a73ff337107aa3a5-226239fc182dd5e0099d", - "a9d4a73ff337107aa3a5-48df40940698da18c787", - "a9d4a73ff337107aa3a5-9d3bfc5c2b672bb52af5", - "a9d4a73ff337107aa3a5-26dab0feba18528d0078", - "a9d4a73ff337107aa3a5-f44378cc00f16c0ec088", - "a9d4a73ff337107aa3a5-02503facf870765c5524", - "a9d4a73ff337107aa3a5-5e837c30ba2c8ed64b17", - "a9d4a73ff337107aa3a5-be6b43429fe3e7393a57", - "a9d4a73ff337107aa3a5-f340ed607b70b3bd44f8", - "a9d4a73ff337107aa3a5-f250c9000128dcd925f5", - "a9d4a73ff337107aa3a5-df969730164d7ef9e4ba", - "a9d4a73ff337107aa3a5-7641d430d06b656625a9" - ] + "status": "passed", + "failedTests": [] } \ No newline at end of file diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright-output-main/full-system-browser-e2e-fu-14a68-member-can-edit-after-claim-chromium/error-context.md b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright-output-main/full-system-browser-e2e-fu-14a68-member-can-edit-after-claim-chromium/error-context.md deleted file mode 100644 index de7d9c1e..00000000 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright-output-main/full-system-browser-e2e-fu-14a68-member-can-edit-after-claim-chromium/error-context.md +++ /dev/null @@ -1,223 +0,0 @@ -# Instructions - -- Following Playwright test failed. -- Explain why, be concise, respect Playwright best practices. -- Provide a snippet of code with the fix, if possible. - -# Test info - -- Name: full-system-browser-e2e.spec.ts >> full-system browser multi-user E2E >> FS-NONAUTH-01 non-author member can edit after claim -- Location: e2e/full-system-browser-e2e.spec.ts:943:3 - -# Error details - -``` -Error: non-author member missing edit affordance while drafting -``` - -# Test source - -```ts - 4 | * Hard rules: - 5 | * - Real Chromium clicks/fills only. No page.route mocks; no API create/project/message/approve. - 6 | * - Multi BrowserContext (never share storageState across roles). - 7 | * - Each page: console + pageerror → console-*.jsonl - 8 | * - Unmet conditions → FAIL (or explicit SKIP with reason). Never fake PASS. - 9 | * - PI / squad waits: 15–20 min timeouts. - 10 | * - 11 | * Gate: RUN_UI_ACCEPTANCE=1 + ADMIN_USERNAME/ADMIN_PASSWORD + BASE_URL. - 12 | */ - 13 | import { test, expect, type Page, type Browser, type BrowserContext, type ConsoleMessage } from '@playwright/test'; - 14 | import * as fs from 'fs'; - 15 | import * as path from 'path'; - 16 | import { fileURLToPath } from 'url'; - 17 | import { - 18 | BLOCK_EDITOR_DIALOG_LABEL, - 19 | BLOCK_EDITOR_SAVE_NAME, - 20 | } from '../src/lib/blockEditorDialog'; - 21 | import { - 22 | ANY_TERMINAL_STATUS_RE, - 23 | evaluateSquadObservation, - 24 | } from '../src/lib/squadCompletionObservation'; - 25 | import { - 26 | CATEGORY_TRIGGER_LABEL, - 27 | requiredCategoryForDocOpen, - 28 | } from '../src/lib/workflowCategoryNavigation'; - 29 | import { currentProjectBannerName } from '../src/lib/currentProjectRestore'; - 30 | import { - 31 | assertWritableUiAcceptanceAssetsDir, - 32 | resolveUiAcceptanceAssetsDir, - 33 | } from '../src/lib/playwrightPhaseArtifacts'; - 34 | - 35 | const __dirname = path.dirname(fileURLToPath(import.meta.url)); - 36 | const runAcceptance = process.env.RUN_UI_ACCEPTANCE === '1'; - 37 | - 38 | const ASSETS = resolveUiAcceptanceAssetsDir( - 39 | path.resolve(__dirname, '..'), - 40 | process.env.UI_ACCEPTANCE_ASSETS_DIR || - 41 | path.resolve(__dirname, '../../.doc/test-reports/assets/2026-09-26-full-system-browser-e2e'), - 42 | ); - 43 | const SCREENSHOTS = path.join(ASSETS, 'screenshots'); - 44 | const RESULTS_FILE = path.join(ASSETS, 'ui-results.json'); - 45 | const ACCOUNTS_FILE = path.join(ASSETS, 'retained-accounts.json'); - 46 | const RUN_META_FILE = path.join(ASSETS, 'run-meta.json'); - 47 | - 48 | if (runAcceptance) { - 49 | assertWritableUiAcceptanceAssetsDir(ASSETS); - 50 | fs.mkdirSync(SCREENSHOTS, { recursive: true }); - 51 | } - 52 | - 53 | type Verdict = 'PASS' | 'FAIL' | 'SKIP'; - 54 | type CaseResult = { - 55 | id: string; - 56 | name: string; - 57 | priority: 'P0' | 'P1' | 'P2'; - 58 | input: string; - 59 | expected: string; - 60 | actual: string; - 61 | verdict: Verdict; - 62 | durationMs: number; - 63 | console_errors: string[]; - 64 | notes?: string; - 65 | skip_reason?: string; - 66 | }; - 67 | - 68 | const recorded: Record = {}; - 69 | const consoleBuffers = new Map>(); - 70 | - 71 | const ADMIN_USER = process.env.ADMIN_USERNAME?.trim() || ''; - 72 | const ADMIN_PASS = process.env.ADMIN_PASSWORD?.trim() || ''; - 73 | const suffix = `${Date.now().toString(36)}`; - 74 | const PREFIX_USER = 'e2e26_'; - 75 | const PREFIX_PROJ = 'E2E全量-20260926-'; - 76 | - 77 | const USERS = { - 78 | author: { username: `${PREFIX_USER}author_${suffix}`, display: `E2E编制-${suffix}`, roleId: 'role-tech-lead' as const }, - 79 | reviewer: { username: `${PREFIX_USER}reviewer_${suffix}`, display: `E2E审核-${suffix}`, roleId: 'role-engineer' as const }, - 80 | approver: { username: `${PREFIX_USER}approver_${suffix}`, display: `E2E批准-${suffix}`, roleId: 'role-engineer' as const }, - 81 | member: { username: `${PREFIX_USER}member_${suffix}`, display: `E2E成员-${suffix}`, roleId: 'role-engineer' as const }, - 82 | guest: { username: `${PREFIX_USER}guest_${suffix}`, display: `E2E访客-${suffix}`, roleId: 'role-guest' as const }, - 83 | }; - 84 | const INIT_PASS = `Init-${suffix}9A`; - 85 | const FINAL_PASS: Record = { - 86 | author: `Auth-${suffix}9A`, - 87 | reviewer: `Rev-${suffix}9A`, - 88 | approver: `App-${suffix}9A`, - 89 | member: `Mem-${suffix}9A`, - 90 | guest: `Gst-${suffix}9A`, - 91 | }; - 92 | const PROJECT_NAME = `${PREFIX_PROJ}${suffix}`; - 93 | - 94 | /** Shared across serial tests */ - 95 | let shared = { - 96 | controlledDocId: '', - 97 | controlledTitle: '', - 98 | uploadedDocId: '', - 99 | headed: false, - 100 | display: process.env.DISPLAY || '', - 101 | }; - 102 | - 103 | function fail(msg: string): never { -> 104 | throw new Error(msg); - | ^ Error: non-author member missing edit affordance while drafting - 105 | } - 106 | - 107 | function requireAdminCreds(): { username: string; password: string } { - 108 | if (!ADMIN_USER || !ADMIN_PASS) { - 109 | fail('ADMIN_USERNAME and ADMIN_PASSWORD are required (no credential fallbacks)'); - 110 | } - 111 | return { username: ADMIN_USER, password: ADMIN_PASS }; - 112 | } - 113 | - 114 | function sanitizeUrl(raw: string): string { - 115 | try { - 116 | return new URL(raw, 'http://127.0.0.1').pathname; - 117 | } catch { - 118 | return raw.split('?')[0]?.replace(/https?:\/\/[^/]+/i, '') || raw; - 119 | } - 120 | } - 121 | - 122 | function saveResults() { - 123 | const scrubbed = JSON.parse(JSON.stringify(recorded)) as Record; - 124 | const blob = JSON.stringify(scrubbed, null, 2); - 125 | if (/admin-secret|Bearer\s|password["']?\s*[:=]|token=/i.test(blob)) { - 126 | fail('results must not contain credentials or tokens'); - 127 | } - 128 | fs.writeFileSync(RESULTS_FILE, blob, 'utf-8'); - 129 | } - 130 | - 131 | function record(r: CaseResult) { - 132 | recorded[r.id] = r; - 133 | saveResults(); - 134 | } - 135 | - 136 | function recordSkip(id: string, name: string, priority: CaseResult['priority'], reason: string) { - 137 | record({ - 138 | id, - 139 | name, - 140 | priority, - 141 | input: '(not run)', - 142 | expected: '(n/a)', - 143 | actual: '(skipped)', - 144 | verdict: 'SKIP', - 145 | durationMs: 0, - 146 | console_errors: [], - 147 | skip_reason: reason, - 148 | }); - 149 | } - 150 | - 151 | async function shot(page: Page, name: string) { - 152 | await page.screenshot({ path: path.join(SCREENSHOTS, `${name}.png`), fullPage: true }).catch(() => undefined); - 153 | } - 154 | - 155 | function attachConsole(page: Page, label: string) { - 156 | const buf: Array<{ level: string; text: string; ts: string }> = []; - 157 | consoleBuffers.set(label, buf); - 158 | const sink = path.join(ASSETS, `console-${label}.jsonl`); - 159 | const writeLine = (obj: object) => { - 160 | fs.appendFileSync(sink, `${JSON.stringify(obj)}\n`, 'utf-8'); - 161 | }; - 162 | page.on('console', (msg: ConsoleMessage) => { - 163 | const level = msg.type(); - 164 | const text = msg.text(); - 165 | const row = { level, text, ts: new Date().toISOString() }; - 166 | buf.push(row); - 167 | if (level === 'error' || level === 'warning') writeLine({ kind: 'console', ...row }); - 168 | }); - 169 | page.on('pageerror', (err) => { - 170 | const row = { level: 'pageerror', text: String(err?.message || err), ts: new Date().toISOString() }; - 171 | buf.push(row); - 172 | writeLine({ kind: 'pageerror', ...row }); - 173 | }); - 174 | } - 175 | - 176 | function consoleErrorsFor(label: string): string[] { - 177 | const buf = consoleBuffers.get(label) || []; - 178 | return buf - 179 | .filter((e) => e.level === 'error' || e.level === 'pageerror') - 180 | .map((e) => `[${e.level}] ${e.text.slice(0, 240)}`); - 181 | } - 182 | - 183 | async function newRolePage(browser: Browser, label: string): Promise<{ ctx: BrowserContext; page: Page }> { - 184 | const ctx = await browser.newContext({ locale: 'zh-CN' }); - 185 | const page = await ctx.newPage(); - 186 | attachConsole(page, label); - 187 | return { ctx, page }; - 188 | } - 189 | - 190 | async function login(page: Page, username: string, password: string) { - 191 | await page.goto('/'); - 192 | await page.fill('input[placeholder*="系统用户名"]', username); - 193 | await page.fill('input[placeholder*="登录密码"]', password); - 194 | await page.click('button:has-text("进入医疗协同工作台")'); - 195 | const force = page.getByPlaceholder('请输入初始密码'); - 196 | if (await force.isVisible({ timeout: 2500 }).catch(() => false)) { - 197 | fail(`account ${username} still requires first-login password change`); - 198 | } - 199 | await expect(page.getByText('新建立项会话')).toBeVisible({ timeout: 30_000 }); - 200 | } - 201 | - 202 | async function changePasswordFirstLogin(page: Page, oldPass: string, newPass: string) { - 203 | await expect(page.getByPlaceholder('请输入初始密码')).toBeVisible({ timeout: 15_000 }); - 204 | await page.fill('input[placeholder="请输入初始密码"]', oldPass); -``` \ No newline at end of file diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright.log b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright.log index cd605093..7506bb1f 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright.log +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/playwright.log @@ -1,48 +1,28 @@ Running 21 tests using 1 worker - ✓ 1 [chromium] › e2e/full-system-browser-e2e.spec.ts:590:3 › full-system browser multi-user E2E › FS-IAM-01 admin creates multi-role users via UI (2.0s) - ✓ 2 [chromium] › e2e/full-system-browser-e2e.spec.ts:642:3 › full-system browser multi-user E2E › FS-IAM-02 first-login password change for all e2e users (2.0s) - ✓ 3 [chromium] › e2e/full-system-browser-e2e.spec.ts:687:3 › full-system browser multi-user E2E › FS-PROJ-01 create project + add members with roles (818ms) - ✓ 4 [chromium] › e2e/full-system-browser-e2e.spec.ts:764:3 › full-system browser multi-user E2E › FS-PROJ-02 activate workflow with author/reviewer/approver duties (623ms) - ✓ 5 [chromium] › e2e/full-system-browser-e2e.spec.ts:807:3 › full-system browser multi-user E2E › FS-CHAT-01 casual multi-turn dialogue (389ms) - ✓ 6 [chromium] › e2e/full-system-browser-e2e.spec.ts:849:3 › full-system browser multi-user E2E › FS-SQUAD-WF-01 generate workflow intake document (real PI) (4.2m) - ✓ 7 [chromium] › e2e/full-system-browser-e2e.spec.ts:898:3 › full-system browser multi-user E2E › FS-DOC-REV-01 author edit controlled doc (1.2s) - ✘ 8 [chromium] › e2e/full-system-browser-e2e.spec.ts:943:3 › full-system browser multi-user E2E › FS-NONAUTH-01 non-author member can edit after claim (560ms) - - 9 [chromium] › e2e/full-system-browser-e2e.spec.ts:1008:3 › full-system browser multi-user E2E › FS-NONAUTH-02 non-author submit gated (duty) - - 10 [chromium] › e2e/full-system-browser-e2e.spec.ts:1068:3 › full-system browser multi-user E2E › FS-DOC-REV-02 author submit for review - - 11 [chromium] › e2e/full-system-browser-e2e.spec.ts:1111:3 › full-system browser multi-user E2E › FS-DOC-REV-03 reviewer rejects with reason - - 12 [chromium] › e2e/full-system-browser-e2e.spec.ts:1158:3 › full-system browser multi-user E2E › FS-DOC-REV-04 author fix and resubmit - - 13 [chromium] › e2e/full-system-browser-e2e.spec.ts:1204:3 › full-system browser multi-user E2E › FS-DOC-REV-05 reviewer pass - - 14 [chromium] › e2e/full-system-browser-e2e.spec.ts:1247:3 › full-system browser multi-user E2E › FS-DOC-REV-06 approver final approve - - 15 [chromium] › e2e/full-system-browser-e2e.spec.ts:1290:3 › full-system browser multi-user E2E › FS-DOC-REV-07 cascade re-review if UI reachable - - 16 [chromium] › e2e/full-system-browser-e2e.spec.ts:1362:3 › full-system browser multi-user E2E › FS-ASSIST-01 assistant-style task prompt - - 17 [chromium] › e2e/full-system-browser-e2e.spec.ts:1406:3 › full-system browser multi-user E2E › FS-SQUAD-FREE-01 complex free / adhoc task - - 18 [chromium] › e2e/full-system-browser-e2e.spec.ts:1457:3 › full-system browser multi-user E2E › FS-UPLOAD-01 upload attachment → freeform register - - 19 [chromium] › e2e/full-system-browser-e2e.spec.ts:1523:3 › full-system browser multi-user E2E › FS-KB-01 admin KB console readonly check - - 20 [chromium] › e2e/full-system-browser-e2e.spec.ts:1568:3 › full-system browser multi-user E2E › FS-CTX-01 context injection observation - - 21 [chromium] › e2e/full-system-browser-e2e.spec.ts:1627:3 › full-system browser multi-user E2E › FS-CONSOLE-01 aggregate console errors across roles + ✓ 1 [chromium] › e2e/full-system-browser-e2e.spec.ts:687:3 › full-system browser multi-user E2E › FS-IAM-01 admin creates multi-role users via UI (2.1s) + ✓ 2 [chromium] › e2e/full-system-browser-e2e.spec.ts:739:3 › full-system browser multi-user E2E › FS-IAM-02 first-login password change for all e2e users (2.1s) + ✓ 3 [chromium] › e2e/full-system-browser-e2e.spec.ts:784:3 › full-system browser multi-user E2E › FS-PROJ-01 create project + add members with roles (817ms) + ✓ 4 [chromium] › e2e/full-system-browser-e2e.spec.ts:861:3 › full-system browser multi-user E2E › FS-PROJ-02 activate workflow with author/reviewer/approver duties (610ms) + ✓ 5 [chromium] › e2e/full-system-browser-e2e.spec.ts:904:3 › full-system browser multi-user E2E › FS-CHAT-01 casual multi-turn dialogue (351ms) + ✓ 6 [chromium] › e2e/full-system-browser-e2e.spec.ts:946:3 › full-system browser multi-user E2E › FS-SQUAD-WF-01 generate workflow intake document (real PI) (5.7m) + ✓ 7 [chromium] › e2e/full-system-browser-e2e.spec.ts:1004:3 › full-system browser multi-user E2E › FS-DOC-REV-01 author edit controlled doc (1.2s) + ✓ 8 [chromium] › e2e/full-system-browser-e2e.spec.ts:1049:3 › full-system browser multi-user E2E › FS-NONAUTH-01 non-author member can edit after claim (550ms) + ✓ 9 [chromium] › e2e/full-system-browser-e2e.spec.ts:1116:3 › full-system browser multi-user E2E › FS-NONAUTH-02 non-author submit gated (duty) (583ms) + ✓ 10 [chromium] › e2e/full-system-browser-e2e.spec.ts:1176:3 › full-system browser multi-user E2E › FS-DOC-REV-02 author submit for review (765ms) + ✓ 11 [chromium] › e2e/full-system-browser-e2e.spec.ts:1219:3 › full-system browser multi-user E2E › FS-DOC-REV-03 reviewer rejects with reason (35.7s) + ✓ 12 [chromium] › e2e/full-system-browser-e2e.spec.ts:1268:3 › full-system browser multi-user E2E › FS-DOC-REV-04 author fix and resubmit (30.6s) + ✓ 13 [chromium] › e2e/full-system-browser-e2e.spec.ts:1314:3 › full-system browser multi-user E2E › FS-DOC-REV-05 reviewer pass (691ms) + ✓ 14 [chromium] › e2e/full-system-browser-e2e.spec.ts:1357:3 › full-system browser multi-user E2E › FS-DOC-REV-06 approver final approve (2.5s) + ✓ 15 [chromium] › e2e/full-system-browser-e2e.spec.ts:1400:3 › full-system browser multi-user E2E › FS-DOC-REV-07 cascade re-review if UI reachable (656ms) + ✓ 16 [chromium] › e2e/full-system-browser-e2e.spec.ts:1472:3 › full-system browser multi-user E2E › FS-ASSIST-01 assistant-style task prompt (404ms) + ✓ 17 [chromium] › e2e/full-system-browser-e2e.spec.ts:1516:3 › full-system browser multi-user E2E › FS-SQUAD-FREE-01 complex free / adhoc task (1.5m) + ✓ 18 [chromium] › e2e/full-system-browser-e2e.spec.ts:1567:3 › full-system browser multi-user E2E › FS-UPLOAD-01 upload attachment → freeform register (45.4s) + ✓ 19 [chromium] › e2e/full-system-browser-e2e.spec.ts:1633:3 › full-system browser multi-user E2E › FS-KB-01 admin KB console readonly check (1.1s) + ✓ 20 [chromium] › e2e/full-system-browser-e2e.spec.ts:1678:3 › full-system browser multi-user E2E › FS-CTX-01 context injection observation (645ms) + ✓ 21 [chromium] › e2e/full-system-browser-e2e.spec.ts:1737:3 › full-system browser multi-user E2E › FS-CONSOLE-01 aggregate console errors across roles (0ms) - - 1) [chromium] › e2e/full-system-browser-e2e.spec.ts:943:3 › full-system browser multi-user E2E › FS-NONAUTH-01 non-author member can edit after claim - - Error: non-author member missing edit affordance while drafting - - 102 | - 103 | function fail(msg: string): never { - > 104 | throw new Error(msg); - | ^ - 105 | } - 106 | - 107 | function requireAdminCreds(): { username: string; password: string } { - at fail (/work/web/e2e/full-system-browser-e2e.spec.ts:104:9) - at /work/web/e2e/full-system-browser-e2e.spec.ts:970:9 - - Error Context: ../assets/playwright-output-main/full-system-browser-e2e-fu-14a68-member-can-edit-after-claim-chromium/error-context.md - - Error Context: ../assets/playwright-output-main/full-system-browser-e2e-fu-14a68-member-can-edit-after-claim-chromium/error-context.md - - 1 failed - [chromium] › e2e/full-system-browser-e2e.spec.ts:943:3 › full-system browser multi-user E2E › FS-NONAUTH-01 non-author member can edit after claim - 13 did not run - 7 passed (4.4m) + Slow test file: [chromium] › e2e/full-system-browser-e2e.spec.ts (9.3m) + Consider running tests from slow files in parallel. See: https://playwright.dev/docs/test-parallel + 21 passed (9.3m) diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/retained-accounts.json b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/retained-accounts.json index 157087d3..233d9c53 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/retained-accounts.json +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/retained-accounts.json @@ -1,18 +1,24 @@ { "note": "Passwords intentionally omitted. Accounts retained after E2E by design.", - "projectName": "E2E全量-20260926-muhvyubx", + "projectName": "E2E全量-20260926-muhxbx7y", + "runStartedAt": "2026-09-26T05:03:08.813Z", + "priorRetainedAlso": [ + "e2e26_*_muhu39da", + "e2e26_*_muhvyubx", + "e2e26_*_muhwuua6" + ], "usernames": [ - "e2e26_author_muhvyubx", - "e2e26_reviewer_muhvyubx", - "e2e26_approver_muhvyubx", - "e2e26_member_muhvyubx", - "e2e26_guest_muhvyubx" + "e2e26_author_muhxbx7y", + "e2e26_reviewer_muhxbx7y", + "e2e26_approver_muhxbx7y", + "e2e26_member_muhxbx7y", + "e2e26_guest_muhxbx7y" ], "roles": { - "author": "e2e26_author_muhvyubx", - "reviewer": "e2e26_reviewer_muhvyubx", - "approver": "e2e26_approver_muhvyubx", - "member": "e2e26_member_muhvyubx", - "guest": "e2e26_guest_muhvyubx" + "author": "e2e26_author_muhxbx7y", + "reviewer": "e2e26_reviewer_muhxbx7y", + "approver": "e2e26_approver_muhxbx7y", + "member": "e2e26_member_muhxbx7y", + "guest": "e2e26_guest_muhxbx7y" } -} \ No newline at end of file +} diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/run-meta.json b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/run-meta.json index aea874ea..4d284838 100644 --- a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/run-meta.json +++ b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/run-meta.json @@ -1,29 +1,29 @@ { - "startedAt": "2026-09-26T04:24:58.924Z", + "startedAt": "2026-09-26T05:03:08.813Z", "baseURL": "http://127.0.0.1:8080", "display": "", "headedHint": false, - "projectName": "E2E全量-20260926-muhvyubx", + "projectName": "E2E全量-20260926-muhxbx7y", "users": { "author": { - "username": "e2e26_author_muhvyubx", - "display": "E2E编制-muhvyubx" + "username": "e2e26_author_muhxbx7y", + "display": "E2E编制-muhxbx7y" }, "reviewer": { - "username": "e2e26_reviewer_muhvyubx", - "display": "E2E审核-muhvyubx" + "username": "e2e26_reviewer_muhxbx7y", + "display": "E2E审核-muhxbx7y" }, "approver": { - "username": "e2e26_approver_muhvyubx", - "display": "E2E批准-muhvyubx" + "username": "e2e26_approver_muhxbx7y", + "display": "E2E批准-muhxbx7y" }, "member": { - "username": "e2e26_member_muhvyubx", - "display": "E2E成员-muhvyubx" + "username": "e2e26_member_muhxbx7y", + "display": "E2E成员-muhxbx7y" }, "guest": { - "username": "e2e26_guest_muhvyubx", - "display": "E2E访客-muhvyubx" + "username": "e2e26_guest_muhxbx7y", + "display": "E2E访客-muhxbx7y" } } } \ No newline at end of file diff --git a/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-ASSIST-01-reply.png b/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e/screenshots/FS-ASSIST-01-reply.png new file mode 100644 index 0000000000000000000000000000000000000000..c268cd641e6bce54a9ab509346a3989c07fff236 GIT binary patch literal 141419 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