{
  "_comment": "auto-generated by accept-base-login.ps1 - DO NOT EDIT. Windows real-machine acceptance record for the capability center (feature-acceptance format, same structure as base-login-macos-run.json). Only media[].visual_review / media[].visible_result / media[].reviewed_at may be filled in, and only after actually viewing that file.",
  "kind": "feature-acceptance",
  "feature": "base-login",
  "platform": "windows",
  "status": "passed",
  "app_git_sha": "84a4b75445cd529a96529c938f8e88b288ab6228",
  "app_version": "1.0.0.5",
  "verified_at": "2026-09-24",
  "reviewed_at": "2026-09-24",
  "passed": 9,
  "failed": 0,
  "round": "20260924-173522",
  "generated_at": "2026-09-24 17:39:14",
  "verdict": "PASS",
  "verdict_reason": "",
  "first_real_breakpoint": null,
  "six_elements": {
    "screenshot": true,
    "video": true,
    "log": true,
    "product_version": true,
    "app_sha": true,
    "verify_time": true
  },
  "six_missing": [],
  "app_identity": {
    "_comment": "auto-generated by accept-base-login.ps1 - DO NOT EDIT (install/reconnaissance snapshot; only the record's media review fields may be filled by hand)",
    "captured_at": "2026-09-24 17:35:23",
    "host": "佳诺",
    "user": "97088",
    "os": "Microsoft Windows 11 家庭版 中文版 10.0.26200",
    "app_dir": "C:\\XCAGI-r2",
    "app_exe": "C:\\XCAGI-r2\\XCAGI.exe",
    "app_exe_sha256": "27ada80cc0e2f8ec923bc0a3858c9a076f489a41fcc02f168beb531cf9617095",
    "build_info": {
      "version": "1.0.0.5",
      "releaseId": "xcagi-1.0.0.5-84a4b75445cd529a96529c938f8e88b288ab6228",
      "gitSha": "84a4b75445cd529a96529c938f8e88b288ab6228",
      "schema_version": 1
    },
    "git_sha": "84a4b75445cd529a96529c938f8e88b288ab6228",
    "product_version": "1.0.0.5",
    "installer_path": "C:\\xcagi-test\\dl\\site-84a4b754-r2\\XCAGI-Enterprise-Setup-1.0.0.5-x64-unsigned.exe",
    "installer_sha256": "8ab1fad28df4779c43d5041542e0649df7368fe5c29da4f72b937d590090dbdf",
    "health": {
      "status": 200,
      "set_cookie": [
        "csrf_token=<redacted>; Path=/; SameSite=Lax"
      ],
      "body": {
        "status": "healthy",
        "version": "1.0.0.5",
        "service": "xcagi-fastapi",
        "runtime": {
          "status": "healthy",
          "components": {
            "desktop_runtime_routes": {
              "ok": true,
              "required": true,
              "detail": ""
            },
            "desktop_automation_routes": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "gdpr_routes": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "platform_shell_routes": {
              "ok": true,
              "required": true,
              "detail": ""
            },
            "business_route:xcmax_admin": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:order_bridge_webhook": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:xcmax_private_delivery_admin": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:founder_autonomy": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:ops_autonomy": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:ops_wechat_ingest": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:admin_audit": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:genai_traces": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:aibiz_terminal": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:agent": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:tutorial_v2": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:knowledge_v1": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:etl": {
              "ok": true,
              "required": true,
              "detail": ""
            },
            "business_route:etl_targets": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:taiyangniao_attendance_compat": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:purchase": {
              "ok": true,
              "required": true,
              "detail": ""
            },
            "business_route:inventory": {
              "ok": true,
              "required": true,
              "detail": ""
            },
            "business_route:finance_unified_ledger": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:finance_invoices": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:finance": {
              "ok": true,
              "required": true,
              "detail": ""
            },
            "business_route:reports": {
              "ok": true,
              "required": true,
              "detail": ""
            },
            "business_route:rbac": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:mods": {
              "ok": true,
              "required": true,
              "detail": ""
            },
            "business_route:workspace_prefs": {
              "ok": true,
              "required": true,
              "detail": ""
            },
            "business_route:business_bridge": {
              "ok": true,
              "required": true,
              "detail": ""
            },
            "business_route:mod_store": {
              "ok": true,
              "required": true,
              "detail": ""
            },
            "business_route:control": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:voice": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:mobile_api": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:im_v0": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:internal_im": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:production_line_event": {
              "ok": true,
              "required": false,
              "detail": ""
            },
            "business_route:production_line_event_xcmax": {
              "ok": true,
              "required": false,
              "detail": ""
            }
          },
          "failures": [],
          "blockers": [],
          "degraded_reasons": []
        },
        "degradedReasons": [],
        "build": {
          "admin_console_sha256": "",
          "admin_console_git_sha": "",
          "artifact_sha256": "",
          "built_at": "",
          "git_sha": "84a4b75445cd529a96529c938f8e88b288ab6228",
          "image_digest": "",
          "product_version": "1.0.0.5",
          "release_id": "xcagi-1.0.0.5-84a4b75445cd529a96529c938f8e88b288ab6228"
        },
        "git_sha": "84a4b75445cd529a96529c938f8e88b288ab6228",
        "release_id": "xcagi-1.0.0.5-84a4b75445cd529a96529c938f8e88b288ab6228",
        "neuro": {
          "status": "healthy",
          "running": true,
          "published": 2011,
          "processed": 2011,
          "errors": 0,
          "dropped": 0,
          "queue_size": 0,
          "handlers": 39,
          "global_handlers": 0,
          "reliability": {
            "fhd_env": "",
            "dedup": false,
            "rate_limit": false,
            "circuit_breaker": false,
            "lifeline": false,
            "tracer": false,
            "sla_log": false,
            "sla_controller": false,
            "retry": false,
            "dlq_auto": false,
            "redis_pubsub": false,
            "trace_sample_rate": null
          },
          "components": {
            "bus_running": true,
            "queue_size": 0,
            "domains": [
              "intent",
              "order",
              "inventory",
              "product",
              "customer",
              "ai_service",
              "print",
              "ocr",
              "payment",
              "safety",
              "shipment"
            ]
          },
          "processors": {
            "coordinator": {
              "reflex": 0,
              "subconscious": 0,
              "conscious": 0,
              "total": 0,
              "fallbacks": 0,
              "errors": 0,
              "reflex_rate": 0.0,
              "fallback_rate": 0.0
            },
            "reflex": {
              "cache_size": 0,
              "max_cache_size": 1000,
              "hits": 0,
              "misses": 0,
              "hit_rate": 0.0,
              "timeouts": 0,
              "patterns": 5
            },
            "subconscious": {
              "processed": 0,
              "batched": 0,
              "errors": 0,
              "timeouts": 0,
              "avg_latency_ms": 0.0,
              "handlers": 1,
              "batch_handlers": 0,
              "running": false
            },
            "conscious": {
              "processed": 0,
              "success": 0,
              "errors": 0,
              "deduplicated": 0,
              "circuit_open": 0,
              "sandbox_rejected": 0,
              "sla_violations": 0,
              "success_rate": 0.0,
              "handlers": 7,
              "reliability_enabled": true
            }
          },
          "cognition": {
            "enabled": true,
            "conscious_processor": {
              "processed": 0,
              "success": 0,
              "errors": 0,
              "deduplicated": 0,
              "circuit_open": 0,
              "sandbox_rejected": 0,
              "sla_violations": 0,
              "success_rate": 0.0,
              "handlers": 7,
              "reliability_enabled": true
            },
            "subconscious_processor": {
              "processed": 0,
              "batched": 0,
              "errors": 0,
              "timeouts": 0,
              "avg_latency_ms": 0.0,
              "handlers": 1,
              "batch_handlers": 0,
              "running": false
            },
            "cognition": {
              "llm_port_available": true
            },
            "subconscious_ml": {
              "anomaly_detector": {
                "total_samples": 0,
                "total_predictions": 0,
                "anomalies_detected": 0,
                "anomaly_rate": 0.0,
                "model_ready": false,
                "samples_since_fit": 0
              },
              "pattern_predictor": {
                "total_observations": 0,
                "ngram_order": 3,
                "ngram_patterns": 0,
                "markov_states": 0,
                "history_size": 0
              },
              "local_embedder": {
                "cache_size": 0
              }
            },
            "evolution": {
              "handler": {
                "total_handled": 0,
                "total_success": 0,
                "success_rate": 0.0,
                "supported_events": [
                  "evolution.mine",
                  "evolution.index",
                  "evolution.search",
                  "error.occurred",
                  "evolution.export",
                  "evolution.reflect"
                ],
                "kb_stats": {
                  "total_entries": 0,
                  "by_kind": {},
                  "indexed": true,
                  "kb_root": "C:\\XCAGI-r2\\resources\\backend\\_internal\\XCAGI\\kb"
                },
                "miner_stats": {
                  "log_path": "routing_decisions.jsonl",
                  "log_exists": false,
                  "records_scanned": 0,
                  "min_occurrences": 3,
                  "min_confidence": 0.8
                },
                "fixer_stats": {
                  "total_proposals": 0,
                  "actionable_proposals": 0,
                  "actionable_rate": 0.0,
                  "min_score": 0.3,
                  "kb_stats": {
                    "total_entries": 0,
                    "by_kind": {},
                    "indexed": true,
                    "kb_root": "C:\\XCAGI-r2\\resources\\backend\\_internal\\XCAGI\\kb"
                  }
                }
              },
              "kb_retriever": {
                "total_entries": 0,
                "by_kind": {},
                "indexed": true,
                "kb_root": "C:\\XCAGI-r2\\resources\\backend\\_internal\\XCAGI\\kb"
              },
              "reflex_pattern_miner": {
                "log_path": "routing_decisions.jsonl",
                "log_exists": false,
                "records_scanned": 0,
                "min_occurrences": 3,
                "min_confidence": 0.8
              },
              "runtime_self_fix": {
                "total_proposals": 0,
                "actionable_proposals": 0,
                "actionable_rate": 0.0,
                "min_score": 0.3,
                "kb_stats": {
                  "total_entries": 0,
                  "by_kind": {},
                  "indexed": true,
                  "kb_root": "C:\\XCAGI-r2\\resources\\backend\\_internal\\XCAGI\\kb"
                }
              }
            }
          }
        }
      },
      "raw_len": 6226
    },
    "auth_route_ready": true,
    "backend_cmdline": "C:\\XCAGI-r2\\resources\\backend\\xcagi-backend.exe --desktop --headless --host 0.0.0.0 --port 17500 --data-dir C:\\XCAGI-bl-20260924-data\\userData-r4",
    "isolated_data_dir_configured": true
  },
  "log": {
    "path": "FHD/docs/evidence/e2e/feature-acceptance-20260922/base-login/windows/log/base-login-20260924-173522.log",
    "bytes": 1300,
    "sha256": "78a374315547b08a7a2e02394ef5e4b9c037efc88942d4ee0d3a2b86cbb47624"
  },
  "media": [
    {
      "feature": "base-login",
      "path": "FHD/docs/evidence/e2e/feature-acceptance-20260922/base-login/windows/shot/W0-first-launch.png",
      "sha256": "b48128482abbb73d9d4ac47badfeeff5d82a06f625171d5311532c4bc8e0f235",
      "visual_review": "accepted",
      "visible_result": "安装后首次启动的登录页：主标题「企业账号登录」，账号/密码输入框为空，主按钮「登 录 →」为浅蓝禁用态，无左侧导航与账号名；同一时刻 /api/auth/me 返回 valid=false，后端 /api/health 200。",
      "reviewed_at": "2026-09-24"
    },
    {
      "feature": "base-login",
      "path": "FHD/docs/evidence/e2e/feature-acceptance-20260922/base-login/windows/shot/W2-login-workspace.png",
      "sha256": "75d381b02dc49d2317e54f572858242804cf34631c61694429c8bbe414ea2a8d",
      "visual_review": "accepted",
      "visible_result": "真实 GUI 输入 SUNBIRD 与密码并点击「登 录」后进入工作台：窗口标题「智能对话 - XCAGI」，主区「智能对话」，左上账号「SUNBIRD」，左侧完整导航（智能对话、考勤工作区、信息、智能生态、知识库、数据对接中心、员工工作台、饰品包装管理、原材料仓库、库存管理、客户管理、订单管理、出货记录、数据来源、包装标签打印、XCAGI modstore、系统设置），左下状态条「系统正常」与版本 1.0.0.5。",
      "reviewed_at": "2026-09-24"
    },
    {
      "feature": "base-login",
      "path": "FHD/docs/evidence/e2e/feature-acceptance-20260922/base-login/windows/shot/W3-after-restart.png",
      "sha256": "1820fa7a955eace7274150dadc3370598fd8a96194121443d44c65102195de53",
      "visual_review": "accepted",
      "visible_result": "应用进程被结束并重新启动后：画面仍为已登录工作台（账号 SUNBIRD、左侧导航、主区「智能对话」），会话未丢失；同一 cookie 的 /api/auth/me 与 /api/auth/session/validate 均有效，左下状态条为「系统正常」。",
      "reviewed_at": "2026-09-24"
    },
    {
      "feature": "base-login",
      "path": "FHD/docs/evidence/e2e/feature-acceptance-20260922/base-login/windows/shot/W4-login-page-again.png",
      "sha256": "9d6d50c5d476063b3a14f62f96d91da7031b36202c661182f67a6ba386f8227f",
      "visual_review": "accepted",
      "visible_result": "在工作台执行「退出登录」并确认「确定退出本机账号？」后：界面回到登录页，账号/密码框为空、主按钮禁用，工作台导航与账号名消失；旧 cookie 立即失效（valid=false）。",
      "reviewed_at": "2026-09-24"
    },
    {
      "feature": "base-login",
      "path": "FHD/docs/evidence/e2e/feature-acceptance-20260922/base-login/windows/shot/W4b-relaunch-login-page.png",
      "sha256": "c4bb00985fdd632ce8aef462e54edc721b567ee09f483983a4c2e3d39f0c8ad4",
      "visual_review": "accepted",
      "visible_result": "退出登录后关闭应用并重新启动：窗口停在登录页（账号/密码框为空、主按钮禁用），无工作台；退出前捕获的 session cookie 在重启后调用 /api/auth/me 与 /api/auth/session/validate 均返回 valid=false，旧会话未被错误恢复。",
      "reviewed_at": "2026-09-24"
    },
    {
      "feature": "base-login",
      "path": "FHD/docs/evidence/e2e/feature-acceptance-20260922/base-login/windows/shot/W4c-gui-logout-login-page.png",
      "sha256": "3cf04c97fd9df16de1afea37e02bf29f242281cbb607f9a56626fbb0a313a9aa",
      "visual_review": "accepted",
      "visible_result": "Phase C 再次经真实 GUI「系统设置 → 退出登录 → 确认」退出：回到登录页，输入框为空、无工作台；会话 cookie 已从浏览器 jar 移除。",
      "reviewed_at": "2026-09-24"
    },
    {
      "feature": "base-login",
      "path": "FHD/docs/evidence/e2e/feature-acceptance-20260922/base-login/windows/shot/W7-status-bar.png",
      "sha256": "6ce33163278ab49cb94f005e5043594f61cfff1cd46222ee61d4fd84170f5917",
      "visual_review": "accepted",
      "visible_result": "稳态工作台（Phase C 采样，登录态）：左下状态条「系统正常」（绿色 online 圆点）与版本 1.0.0.5，账号 SUNBIRD，左侧导航完整；同一时刻 /api/health 返回 status=healthy、runtime.status=healthy、blockers=[]、degradedReasons=[]，前端文字与健康载荷一致。",
      "reviewed_at": "2026-09-24"
    },
    {
      "feature": "base-login",
      "path": "FHD/docs/evidence/e2e/feature-acceptance-20260922/base-login/windows/video/base-login-20260924-173522.mp4",
      "sha256": "2d1837ce2d977abaa3b45caf1f127baab38c29b89c7ea7285a933106a4ba4d1d",
      "visual_review": "accepted",
      "visible_result": "整屏录屏 17:35:22–17:39:11（约 3 分 49 秒，5fps）：起始为已登录工作台 → 应用进程被结束、窗口消失只余桌面 → 应用重新启动并显示启动页 → 回到仍为已登录的工作台（会话保持，抽帧可见左下「系统正常」）→ 期间执行 API 级退出登录、边界负例与 Web 同账户登录 → 结尾由 Phase C 操作员驱动真实 GUI「系统设置 → 退出登录 → 确定」并在关闭应用后重新启动，画面停在登录页。",
      "reviewed_at": "2026-09-24"
    },
    {
      "feature": "base-login",
      "path": "FHD/docs/evidence/e2e/feature-acceptance-20260922/base-login/windows/video/install-first-launch-20260924-170259.mp4",
      "sha256": "363991dc4a9e9074d5daeefe477ab8fb6b04011bbf706c3b5eabd1c728f6dc05",
      "visual_review": "accepted",
      "visible_result": "整屏录屏 17:02:59–17:05:44（约 2 分 45 秒，5fps）：安装后首次启动停在「企业账号登录」登录页 → 真实输入账号与密码 → 点击「登 录」→ 进入「智能对话」工作台（账号 SUNBIRD、左侧导航完整）→ 打开系统设置点击「退出登录」并确认 → 回到登录页 → 再次登录回到工作台（为脚本重启步骤留下已登录状态）。",
      "reviewed_at": "2026-09-24"
    }
  ],
  "cases": [
    {
      "id": "W0",
      "title": "install + first launch",
      "input": "The installer currently published on the site, installed on this machine; the app then started for the first time with a brand-new (empty) data directory.",
      "actions": "Fetch the site download pointer, compare it with the installer actually installed and with resources/build-info.json, check the embedded backend is present, then launch the app and read the rendered login page (operator phase A).",
      "expected": "Installer sha256 and build gitSha equal the site pointer, the install carries resources\\backend\\_internal, and the first start reaches the login page with health 200 and no session (me valid=false).",
      "observed": "{\"site_pointer\":{\"url\":\"https://xiu-ci.com/download-windows-hotfix.json\",\"version\":\"1.0.0.5\",\"git_sha\":\"84a4b75445cd529a96529c938f8e88b288ab6228\",\"artifact_sha256\":\"8ab1fad28df4779c43d5041542e0649df7368fe5c29da4f72b937d590090dbdf\",\"generated_at\":\"2026-09-23T07:40:55.420253+00:00\"},\"installer_path\":\"C:\\\\xcagi-test\\\\dl\\\\site-84a4b754-r2\\\\XCAGI-Enterprise-Setup-1.0.0.5-x64-unsigned.exe\",\"installer_sha256\":\"8ab1fad28df4779c43d5041542e0649df7368fe5c29da4f72b937d590090dbdf\",\"installer_matches_site_pointer\":true,\"installed_build_info\":{\"version\":\"1.0.0.5\",\"releaseId\":\"xcagi-1.0.0.5-84a4b75445cd529a96529c938f8e88b288ab6228\",\"gitSha\":\"84a4b75445cd529a96529c938f8e88b288ab6228\",\"schema_version\":1},\"build_matches_site_pointer\":true,\"embedded_backend_path\":\"C:\\\\XCAGI-r2\\\\resources\\\\backend\\\\_internal\",\"embedded_backend_present\":true,\"install\":{\"install_kind\":\"silent overwrite install of the currently published build, from a local byte-identical copy of the site download\",\"install_root\":\"C:\\\\XCAGI-r2\",\"installed_at\":\"2026-09-24 16:27:50\",\"installer_source\":\"https://xiu-ci.com/xcagi-v1.0.0.5/enterprise/XCAGI-Enterprise-Setup-1.0.0.5-x64-unsigned.exe\",\"installer_verified_download\":\"Z:\\\\windows-acceptance-r2\\\\download\\\\site-84a4b754-r2\\\\XCAGI-Enterprise-Setup-1.0.0.5-x64-unsigned.exe\",\"installer_local_copy_used\":\"C:\\\\xcagi-test\\\\dl\\\\site-84a4b754-r2\\\\XCAGI-Enterprise-Setup-1.0.0.5-x64-unsigned.exe\",\"installer_sha256\":\"8ab1fad28df4779c43d5041542e0649df7368fe5c29da4f72b937d590090dbdf\",\"installer_size\":248700406,\"installer_exit_code\":0,\"installer_duration_seconds\":72,\"network_path_note\":\"the first silent attempts were blocked by the Windows Open File Security Warning prompt because the installer sat on a network share (Z:); the install was then run from a local byte-identical copy (sha256 re-verified)\",\"app_exe\":\"C:\\\\XCAGI-r2\\\\XCAGI.exe\",\"app_exe_sha256\":\"27ada80cc0e2f8ec923bc0a3858c9a076f489a41fcc02f168beb531cf9617095\",\"build_info\":{\"version\":\"1.0.0.5\",\"releaseId\":\"xcagi-1.0.0.5-84a4b75445cd529a96529c938f8e88b288ab6228\",\"gitSha\":\"84a4b75445cd529a96529c938f8e88b288ab6228\",\"schema_version\":1},\"embedded_backend_path\":\"C:\\\\XCAGI-r2\\\\resources\\\\backend\\\\_internal\",\"embedded_backend_present\":true,\"uninstall_entry\":\"HKCU per-user: C:\\\\XCAGI-r2\\\\Uninstall XCAGI.exe /currentuser\",\"user_data_dir\":\"C:\\\\XCAGI-bl-20260924-data\\\\userData-r4\",\"user_data_files_before_launch\":0,\"user_data_note\":\"brand-new empty directory created for this round; earlier isolated directories and the machine default profile were left untouched\"},\"first_launch\":{\"started_at\":\"2026-09-24T09:03:59.989Z\",\"window_title\":\"XCAGI 企业版 · V1 · 登录\",\"url\":\"http://127.0.0.1:17500/login?redirect=/\",\"health_status\":200,\"health_payload_status\":\"degraded\",\"me_valid\":false,\"login_form_present\":true,\"sidebar_items\":0,\"screenshot\":\"shot/W0-first-launch.png\",\"verify_time\":\"17:04:00\"},\"first_window_title\":\"XCAGI 企业版 · V1 · 登录\"}",
      "result": "passed",
      "verdict": "PASS",
      "verify_time": "2026-09-24 17:35:25",
      "facts": {
        "site_pointer": {
          "url": "https://xiu-ci.com/download-windows-hotfix.json",
          "version": "1.0.0.5",
          "git_sha": "84a4b75445cd529a96529c938f8e88b288ab6228",
          "artifact_sha256": "8ab1fad28df4779c43d5041542e0649df7368fe5c29da4f72b937d590090dbdf",
          "generated_at": "2026-09-23T07:40:55.420253+00:00"
        },
        "installer_path": "C:\\xcagi-test\\dl\\site-84a4b754-r2\\XCAGI-Enterprise-Setup-1.0.0.5-x64-unsigned.exe",
        "installer_sha256": "8ab1fad28df4779c43d5041542e0649df7368fe5c29da4f72b937d590090dbdf",
        "installer_matches_site_pointer": true,
        "installed_build_info": {
          "version": "1.0.0.5",
          "releaseId": "xcagi-1.0.0.5-84a4b75445cd529a96529c938f8e88b288ab6228",
          "gitSha": "84a4b75445cd529a96529c938f8e88b288ab6228",
          "schema_version": 1
        },
        "build_matches_site_pointer": true,
        "embedded_backend_path": "C:\\XCAGI-r2\\resources\\backend\\_internal",
        "embedded_backend_present": true,
        "install": {
          "install_kind": "silent overwrite install of the currently published build, from a local byte-identical copy of the site download",
          "install_root": "C:\\XCAGI-r2",
          "installed_at": "2026-09-24 16:27:50",
          "installer_source": "https://xiu-ci.com/xcagi-v1.0.0.5/enterprise/XCAGI-Enterprise-Setup-1.0.0.5-x64-unsigned.exe",
          "installer_verified_download": "Z:\\windows-acceptance-r2\\download\\site-84a4b754-r2\\XCAGI-Enterprise-Setup-1.0.0.5-x64-unsigned.exe",
          "installer_local_copy_used": "C:\\xcagi-test\\dl\\site-84a4b754-r2\\XCAGI-Enterprise-Setup-1.0.0.5-x64-unsigned.exe",
          "installer_sha256": "8ab1fad28df4779c43d5041542e0649df7368fe5c29da4f72b937d590090dbdf",
          "installer_size": 248700406,
          "installer_exit_code": 0,
          "installer_duration_seconds": 72,
          "network_path_note": "the first silent attempts were blocked by the Windows Open File Security Warning prompt because the installer sat on a network share (Z:); the install was then run from a local byte-identical copy (sha256 re-verified)",
          "app_exe": "C:\\XCAGI-r2\\XCAGI.exe",
          "app_exe_sha256": "27ada80cc0e2f8ec923bc0a3858c9a076f489a41fcc02f168beb531cf9617095",
          "build_info": {
            "version": "1.0.0.5",
            "releaseId": "xcagi-1.0.0.5-84a4b75445cd529a96529c938f8e88b288ab6228",
            "gitSha": "84a4b75445cd529a96529c938f8e88b288ab6228",
            "schema_version": 1
          },
          "embedded_backend_path": "C:\\XCAGI-r2\\resources\\backend\\_internal",
          "embedded_backend_present": true,
          "uninstall_entry": "HKCU per-user: C:\\XCAGI-r2\\Uninstall XCAGI.exe /currentuser",
          "user_data_dir": "C:\\XCAGI-bl-20260924-data\\userData-r4",
          "user_data_files_before_launch": 0,
          "user_data_note": "brand-new empty directory created for this round; earlier isolated directories and the machine default profile were left untouched"
        },
        "first_launch": {
          "started_at": "2026-09-24T09:03:59.989Z",
          "window_title": "XCAGI 企业版 · V1 · 登录",
          "url": "http://127.0.0.1:17500/login?redirect=/",
          "health_status": 200,
          "health_payload_status": "degraded",
          "me_valid": false,
          "login_form_present": true,
          "sidebar_items": 0,
          "screenshot": "shot/W0-first-launch.png",
          "verify_time": "17:04:00"
        },
        "first_window_title": "XCAGI 企业版 · V1 · 登录"
      },
      "note": "the site-published installer is what got installed and its first start reaches the login page with no session"
    },
    {
      "id": "W1",
      "title": "no-session rejection",
      "input": "No session cookie: GET /api/auth/me and GET /api/auth/session/validate.",
      "actions": "Call both protected endpoints without a Cookie header; the rendered login page (no workspace) is captured by the operator in W0-first-launch.png / W4-login-page-again.png.",
      "expected": "Both endpoints report valid=false while the app shows the login page instead of the workspace.",
      "observed": "{\"me\":{\"success\":false,\"error\":{\"code\":\"UNAUTHORIZED\",\"message\":\"请先登录\"},\"valid\":false},\"validate\":{\"success\":false,\"error\":{\"code\":\"NO_SESSION\",\"message\":\"无会话信息\"},\"valid\":false},\"me_status\":200,\"validate_status\":200}",
      "result": "passed",
      "verdict": "PASS",
      "verify_time": "2026-09-24 17:35:25",
      "facts": {
        "me": {
          "success": false,
          "error": {
            "code": "UNAUTHORIZED",
            "message": "请先登录"
          },
          "valid": false
        },
        "validate": {
          "success": false,
          "error": {
            "code": "NO_SESSION",
            "message": "无会话信息"
          },
          "valid": false
        },
        "me_status": 200,
        "validate_status": 200
      },
      "note": "no session cookie -> protected endpoints report valid=false"
    },
    {
      "id": "W2",
      "title": "enterprise login (API side)",
      "input": "Enterprise credentials via POST /api/auth/login (account_kind=enterprise).",
      "actions": "Login, keep the returned session_id cookie, then GET /api/auth/me with that cookie.",
      "expected": "login returns 200 with success=true, a session_id cookie is issued, and me reports success=true with account_kind=enterprise.",
      "observed": "{\"login_status\":200,\"login_success\":true,\"session_cookie_present\":true,\"account_kind\":\"enterprise\",\"username\":\"SUNBIRD\",\"tier\":\"enterprise\",\"tenant_id\":1,\"validate_valid\":true,\"gui_login\":{\"at\":\"17:04:12\",\"window_title\":\"智能对话 - XCAGI\",\"url\":\"http://127.0.0.1:17500/mod/xcagi-planner-bridge/chat\",\"username\":\"SUNBIRD\",\"me_success\":true,\"me_account_kind\":\"enterprise\",\"tenant_id\":1,\"sidebar_items\":17,\"session_cookie_present\":true,\"session_cookie_fingerprint\":\"aeacff10b5182627\",\"screenshot\":\"shot/W2-login-workspace.png\",\"verify_time\":\"17:04:12\"}}",
      "result": "passed",
      "verdict": "PASS",
      "verify_time": "2026-09-24 17:35:29",
      "facts": {
        "login_status": 200,
        "login_success": true,
        "session_cookie_present": true,
        "account_kind": "enterprise",
        "username": "SUNBIRD",
        "tier": "enterprise",
        "tenant_id": 1,
        "validate_valid": true,
        "gui_login": {
          "at": "17:04:12",
          "window_title": "智能对话 - XCAGI",
          "url": "http://127.0.0.1:17500/mod/xcagi-planner-bridge/chat",
          "username": "SUNBIRD",
          "me_success": true,
          "me_account_kind": "enterprise",
          "tenant_id": 1,
          "sidebar_items": 17,
          "session_cookie_present": true,
          "session_cookie_fingerprint": "aeacff10b5182627",
          "screenshot": "shot/W2-login-workspace.png",
          "verify_time": "17:04:12"
        }
      },
      "note": "API side asserted here; the same login through the real GUI is captured in phase A (W2-login-workspace.png)"
    },
    {
      "id": "W3",
      "title": "session persistence (process restart)",
      "input": "The session cookie obtained in W2, reused after killing and restarting the XCAGI processes.",
      "actions": "Close the app, wait for the backend to stop, start XCAGI.exe again, wait for health, then call me + session/validate with the same cookie.",
      "expected": "Backend health is 200 and the same session is still valid (me.success=true, validate.valid=true).",
      "observed": "{\"health_after_restart\":200,\"window_title_after_restart\":\"智能对话 - XCAGI\",\"me_after_restart\":{\"success\":true,\"data\":{\"user\":{\"id\":2,\"username\":\"SUNBIRD\",\"display_name\":\"SUNBIRD\",\"email\":\"sunbird@xcagi.local\",\"email_display\":\"sunbird@xcagi.local\",\"no_email\":false,\"role\":\"user\",\"is_active\":true,\"avatar_url\":\"\"},\"permissions\":[\"etl.execute\",\"dataset.read\",\"shipment.edit\",\"print.label\",\"customer.view\",\"dataset.write\",\"shipment.create\",\"product.view\",\"material.view\",\"etl.template.manage\",\"product.edit\",\"customer.edit\",\"etl.read\",\"material.edit\",\"shipment.view\"],\"account_kind\":\"enterprise\",\"company_brand\":\"SUNBIRD\",\"market_is_admin\":false,\"market_is_enterprise\":true,\"market_user_id\":29,\"local_user_id\":2,\"tenant_id\":1,\"tenant_name\":\"SUNBIRD\",\"impersonating_market_user_id\":null,\"impersonating_username\":\"\",\"tier\":\"enterprise\",\"account_tier\":\"pro\",\"budget_range\":null,\"entitled_industries\":[],\"market_membership_tier\":\"free\",\"email_verified\":false,\"mfa_enabled\":false}},\"validate_after_restart\":{\"success\":true,\"valid\":true,\"data\":{\"session_id\":\"3f15f0fb-3014-42f4-b9ea-061eba1fbb67\",\"user_id\":2,\"username\":\"SUNBIRD\",\"created_at\":\"2026-09-24T09:35:27.095802\",\"expires_at\":\"2036-09-21T09:35:27.095802\"},\"account_kind\":\"enterprise\",\"company_brand\":\"SUNBIRD\",\"market_is_admin\":false,\"market_is_enterprise\":true,\"market_user_id\":29,\"local_user_id\":2,\"tenant_id\":1,\"tenant_name\":\"SUNBIRD\",\"impersonating_market_user_id\":null,\"impersonating_username\":\"\",\"tier\":\"enterprise\",\"account_tier\":\"pro\",\"budget_range\":null,\"entitled_industries\":[],\"market_membership_tier\":\"free\",\"email_verified\":false,\"mfa_enabled\":false},\"session_cookie_reused\":true,\"session_cookie_fingerprint\":\"8afa871a18953610\"}",
      "result": "passed",
      "verdict": "PASS",
      "verify_time": "2026-09-24 17:36:03",
      "facts": {
        "health_after_restart": 200,
        "window_title_after_restart": "智能对话 - XCAGI",
        "me_after_restart": {
          "success": true,
          "data": {
            "user": {
              "id": 2,
              "username": "SUNBIRD",
              "display_name": "SUNBIRD",
              "email": "sunbird@xcagi.local",
              "email_display": "sunbird@xcagi.local",
              "no_email": false,
              "role": "user",
              "is_active": true,
              "avatar_url": ""
            },
            "permissions": [
              "etl.execute",
              "dataset.read",
              "shipment.edit",
              "print.label",
              "customer.view",
              "dataset.write",
              "shipment.create",
              "product.view",
              "material.view",
              "etl.template.manage",
              "product.edit",
              "customer.edit",
              "etl.read",
              "material.edit",
              "shipment.view"
            ],
            "account_kind": "enterprise",
            "company_brand": "SUNBIRD",
            "market_is_admin": false,
            "market_is_enterprise": true,
            "market_user_id": 29,
            "local_user_id": 2,
            "tenant_id": 1,
            "tenant_name": "SUNBIRD",
            "impersonating_market_user_id": null,
            "impersonating_username": "",
            "tier": "enterprise",
            "account_tier": "pro",
            "budget_range": null,
            "entitled_industries": [],
            "market_membership_tier": "free",
            "email_verified": false,
            "mfa_enabled": false
          }
        },
        "validate_after_restart": {
          "success": true,
          "valid": true,
          "data": {
            "session_id": "3f15f0fb-3014-42f4-b9ea-061eba1fbb67",
            "user_id": 2,
            "username": "SUNBIRD",
            "created_at": "2026-09-24T09:35:27.095802",
            "expires_at": "2036-09-21T09:35:27.095802"
          },
          "account_kind": "enterprise",
          "company_brand": "SUNBIRD",
          "market_is_admin": false,
          "market_is_enterprise": true,
          "market_user_id": 29,
          "local_user_id": 2,
          "tenant_id": 1,
          "tenant_name": "SUNBIRD",
          "impersonating_market_user_id": null,
          "impersonating_username": "",
          "tier": "enterprise",
          "account_tier": "pro",
          "budget_range": null,
          "entitled_industries": [],
          "market_membership_tier": "free",
          "email_verified": false,
          "mfa_enabled": false
        },
        "session_cookie_reused": true,
        "session_cookie_fingerprint": "8afa871a18953610"
      },
      "note": "same session cookie still accepted after a real process restart"
    },
    {
      "id": "W4",
      "title": "secure logout",
      "input": "An authenticated session cookie; POST /api/auth/logout followed by reuse of that cookie.",
      "actions": "Confirm me succeeds before logout, POST /api/auth/logout, then call me + session/validate with the old cookie.",
      "expected": "Logout returns 200 and the old cookie is rejected right after (both responses report valid=false).",
      "observed": "{\"me_before\":{\"success\":true,\"data\":{\"user\":{\"id\":2,\"username\":\"SUNBIRD\",\"display_name\":\"SUNBIRD\",\"email\":\"sunbird@xcagi.local\",\"email_display\":\"sunbird@xcagi.local\",\"no_email\":false,\"role\":\"user\",\"is_active\":true,\"avatar_url\":\"\"},\"permissions\":[\"etl.execute\",\"dataset.read\",\"shipment.edit\",\"print.label\",\"customer.view\",\"dataset.write\",\"shipment.create\",\"product.view\",\"material.view\",\"etl.template.manage\",\"product.edit\",\"customer.edit\",\"etl.read\",\"material.edit\",\"shipment.view\"],\"account_kind\":\"enterprise\",\"company_brand\":\"SUNBIRD\",\"market_is_admin\":false,\"market_is_enterprise\":true,\"market_user_id\":29,\"local_user_id\":2,\"tenant_id\":1,\"tenant_name\":\"SUNBIRD\",\"impersonating_market_user_id\":null,\"impersonating_username\":\"\",\"tier\":\"enterprise\",\"account_tier\":\"pro\",\"budget_range\":null,\"entitled_industries\":[],\"market_membership_tier\":\"free\",\"email_verified\":false,\"mfa_enabled\":false}},\"logout_status\":200,\"logout_body\":true,\"me_after\":{\"success\":false,\"error\":{\"code\":\"UNAUTHORIZED\",\"message\":\"请先登录\"},\"valid\":false},\"validate_after\":{\"success\":false,\"error\":{\"code\":\"INVALID_SESSION\",\"message\":\"会话无效或已过期\"},\"valid\":false},\"gui_logout\":{\"at\":\"17:04:23\",\"confirm_text\":\"确认 确定退出本机账号？ 取消 确定\",\"me_valid_after\":false,\"session_cookie_gone\":true,\"login_form_present\":true,\"sidebar_items\":0,\"window_title\":\"XCAGI 企业版 · V1 · 登录\",\"screenshot\":\"shot/W4-login-page-again.png\",\"verify_time\":\"17:04:23\"}}",
      "result": "passed",
      "verdict": "PASS",
      "verify_time": "2026-09-24 17:36:46",
      "facts": {
        "me_before": {
          "success": true,
          "data": {
            "user": {
              "id": 2,
              "username": "SUNBIRD",
              "display_name": "SUNBIRD",
              "email": "sunbird@xcagi.local",
              "email_display": "sunbird@xcagi.local",
              "no_email": false,
              "role": "user",
              "is_active": true,
              "avatar_url": ""
            },
            "permissions": [
              "etl.execute",
              "dataset.read",
              "shipment.edit",
              "print.label",
              "customer.view",
              "dataset.write",
              "shipment.create",
              "product.view",
              "material.view",
              "etl.template.manage",
              "product.edit",
              "customer.edit",
              "etl.read",
              "material.edit",
              "shipment.view"
            ],
            "account_kind": "enterprise",
            "company_brand": "SUNBIRD",
            "market_is_admin": false,
            "market_is_enterprise": true,
            "market_user_id": 29,
            "local_user_id": 2,
            "tenant_id": 1,
            "tenant_name": "SUNBIRD",
            "impersonating_market_user_id": null,
            "impersonating_username": "",
            "tier": "enterprise",
            "account_tier": "pro",
            "budget_range": null,
            "entitled_industries": [],
            "market_membership_tier": "free",
            "email_verified": false,
            "mfa_enabled": false
          }
        },
        "logout_status": 200,
        "logout_body": true,
        "me_after": {
          "success": false,
          "error": {
            "code": "UNAUTHORIZED",
            "message": "请先登录"
          },
          "valid": false
        },
        "validate_after": {
          "success": false,
          "error": {
            "code": "INVALID_SESSION",
            "message": "会话无效或已过期"
          },
          "valid": false
        },
        "gui_logout": {
          "at": "17:04:23",
          "confirm_text": "确认 确定退出本机账号？ 取消 确定",
          "me_valid_after": false,
          "session_cookie_gone": true,
          "login_form_present": true,
          "sidebar_items": 0,
          "window_title": "XCAGI 企业版 · V1 · 登录",
          "screenshot": "shot/W4-login-page-again.png",
          "verify_time": "17:04:23"
        }
      },
      "note": "old session cookie is rejected right after logout; the same logout through the real GUI (settings -> dian ji tui chu deng lu) is captured in phase A (W4-login-page-again.png)"
    },
    {
      "id": "W4b",
      "title": "post-logout relaunch keeps the session logged out",
      "input": "The GUI session that was logged out in phase C, then the app process restarted (operator phase C).",
      "actions": "GUI logout, stop the app, start it again, read the rendered page and call /api/auth/me + /api/auth/session/validate with the logged-out cookie.",
      "expected": "After the relaunch the app shows the login page (no workspace) and the old cookie stays invalid (valid=false).",
      "observed": "{\"gui_logout\":{\"at\":\"17:37:14\",\"confirm_text\":\"确认 确定退出本机账号？ 取消 确定\",\"me_valid_after\":false,\"session_cookie_gone\":true,\"login_form_present\":true,\"sidebar_items\":0,\"window_title\":\"XCAGI 企业版 · V1 · 登录\",\"screenshot\":\"shot/W4c-gui-logout-login-page.png\",\"verify_time\":\"17:37:14\"},\"postlogout_relaunch\":{\"stopped_at\":\"17:37:14\",\"started_at\":\"17:37:22\",\"window_title\":\"XCAGI · V1 · 登录\",\"url\":\"http://127.0.0.1:17500/login?redirect=/\",\"login_form_present\":true,\"sidebar_items\":0,\"health_status\":200,\"health_payload_status\":\"degraded\",\"old_cookie_valid\":false,\"old_cookie_validate_valid\":false,\"old_cookie_fingerprint\":\"3cfd00f5feefe4d3\",\"screenshot\":\"shot/W4b-relaunch-login-page.png\",\"verify_time\":\"17:37:38\"},\"window_title_after_relaunch\":\"XCAGI · V1 · 登录\",\"old_cookie_valid_after_relaunch\":false}",
      "result": "passed",
      "verdict": "PASS",
      "verify_time": "2026-09-24 17:39:11",
      "facts": {
        "gui_logout": {
          "at": "17:37:14",
          "confirm_text": "确认 确定退出本机账号？ 取消 确定",
          "me_valid_after": false,
          "session_cookie_gone": true,
          "login_form_present": true,
          "sidebar_items": 0,
          "window_title": "XCAGI 企业版 · V1 · 登录",
          "screenshot": "shot/W4c-gui-logout-login-page.png",
          "verify_time": "17:37:14"
        },
        "postlogout_relaunch": {
          "stopped_at": "17:37:14",
          "started_at": "17:37:22",
          "window_title": "XCAGI · V1 · 登录",
          "url": "http://127.0.0.1:17500/login?redirect=/",
          "login_form_present": true,
          "sidebar_items": 0,
          "health_status": 200,
          "health_payload_status": "degraded",
          "old_cookie_valid": false,
          "old_cookie_validate_valid": false,
          "old_cookie_fingerprint": "3cfd00f5feefe4d3",
          "screenshot": "shot/W4b-relaunch-login-page.png",
          "verify_time": "17:37:38"
        },
        "window_title_after_relaunch": "XCAGI · V1 · 登录",
        "old_cookie_valid_after_relaunch": false
      },
      "note": "after a GUI logout a fresh app start shows the login page again and the logged-out cookie stays invalid"
    },
    {
      "id": "W7",
      "title": "API / backend / frontend state agree",
      "input": "Steady state inside the logged-in workspace: /api/health plus the sidebar status text the user actually sees, plus the cold-start samples taken right after a restart.",
      "actions": "Read the health payload and the sidebar status text in the workspace, compare the two, and keep the warm-up samples taken right after the W3 restart and after the phase C relaunch.",
      "expected": "In the workspace every layer is healthy (http 200, status healthy, no blockers, no degradedReasons) and the sidebar text matches the payload; any warm-up window and the logged-out payload are recorded truthfully instead of hidden.",
      "observed": "{\"workspace_steady_health\":{\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"blockers\":[],\"degraded_reasons\":[],\"version\":\"1.0.0.5\",\"captured_by_operator\":true},\"frontend_status\":{\"ui_status_text\":\"系统正常\",\"ui_tone\":\"status-dot online\",\"ui_matches_health\":true,\"captured_by_operator\":true},\"payload_at_record_time\":{\"http\":200,\"status\":\"degraded\",\"runtime_status\":\"healthy\",\"blockers\":[],\"degraded_reasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"where\":\"measured after the W4b relaunch, i.e. on the login page: the optional local-AI runtime is not started before a login, so this payload is recorded as context and is not the steady state judged above\"},\"restart_health_timeline\":[{\"t\":\"17:36:04\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:07\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:09\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:11\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:13\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:15\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:18\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:20\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:22\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:24\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:26\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:28\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:30\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:32\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:34\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:36\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:38\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:40\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]},{\"t\":\"17:36:42\",\"http\":200,\"status\":\"healthy\",\"runtime_status\":\"healthy\",\"degraded\":[]}],\"restart_warmup_note\":\"Samples taken right after the W3 restart: the backend reports degraded (neuro bus / local LLM runtime not up yet) for a short warm-up window, then healthy; the UI poll follows the payload.\",\"warmup_degraded_samples\":0,\"warmup_healthy_samples\":19,\"frontend_steady_sample_where\":\"logged-in workspace, before the phase C logout\",\"post_relaunch_convergence\":{\"sampled_at\":\"17:39:09\",\"converged_within_samples\":45,\"converged\":false,\"samples\":[{\"t\":\"17:37:38\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:37:40\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:37:42\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:37:44\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:37:46\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:37:48\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:37:50\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:37:52\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:37:54\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:37:56\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:37:58\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:00\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:02\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:04\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:06\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:08\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:10\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:13\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:15\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:17\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:19\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:21\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:23\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:25\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:27\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:29\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:31\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:33\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:35\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:37\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:39\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:41\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:43\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:45\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:47\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:49\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:51\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:53\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:55\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:57\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:38:59\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:39:01\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:39:03\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:39:05\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"},{\"t\":\"17:39:07\",\"http\":200,\"status\":\"degraded\",\"degradedReasons\":[\"LLM_RUNTIME_UNAVAILABLE\"],\"runtime_status\":\"healthy\"}],\"note\":\"right after a cold start the backend honestly reports optional subsystems that are not up yet; the login page has no sidebar status bar, so the UI text check for W7 is done in the workspace sample\"}}",
      "result": "passed",
      "verdict": "PASS",
      "verify_time": "2026-09-24 17:39:11",
      "facts": {
        "workspace_steady_health": {
          "http": 200,
          "status": "healthy",
          "runtime_status": "healthy",
          "blockers": [],
          "degraded_reasons": [],
          "version": "1.0.0.5",
          "captured_by_operator": true
        },
        "frontend_status": {
          "ui_status_text": "系统正常",
          "ui_tone": "status-dot online",
          "ui_matches_health": true,
          "captured_by_operator": true
        },
        "payload_at_record_time": {
          "http": 200,
          "status": "degraded",
          "runtime_status": "healthy",
          "blockers": [],
          "degraded_reasons": [
            "LLM_RUNTIME_UNAVAILABLE"
          ],
          "where": "measured after the W4b relaunch, i.e. on the login page: the optional local-AI runtime is not started before a login, so this payload is recorded as context and is not the steady state judged above"
        },
        "restart_health_timeline": [
          {
            "t": "17:36:04",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:07",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:09",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:11",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:13",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:15",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:18",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:20",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:22",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:24",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:26",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:28",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:30",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:32",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:34",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:36",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:38",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:40",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          },
          {
            "t": "17:36:42",
            "http": 200,
            "status": "healthy",
            "runtime_status": "healthy",
            "degraded": []
          }
        ],
        "restart_warmup_note": "Samples taken right after the W3 restart: the backend reports degraded (neuro bus / local LLM runtime not up yet) for a short warm-up window, then healthy; the UI poll follows the payload.",
        "warmup_degraded_samples": 0,
        "warmup_healthy_samples": 19,
        "frontend_steady_sample_where": "logged-in workspace, before the phase C logout",
        "post_relaunch_convergence": {
          "sampled_at": "17:39:09",
          "converged_within_samples": 45,
          "converged": false,
          "samples": [
            {
              "t": "17:37:38",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:37:40",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:37:42",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:37:44",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:37:46",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:37:48",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:37:50",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:37:52",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:37:54",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:37:56",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:37:58",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:00",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:02",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:04",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:06",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:08",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:10",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:13",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:15",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:17",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:19",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:21",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:23",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:25",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:27",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:29",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:31",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:33",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:35",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:37",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:39",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:41",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:43",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:45",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:47",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:49",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:51",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:53",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:55",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:57",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:38:59",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:39:01",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:39:03",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:39:05",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            },
            {
              "t": "17:39:07",
              "http": 200,
              "status": "degraded",
              "degradedReasons": [
                "LLM_RUNTIME_UNAVAILABLE"
              ],
              "runtime_status": "healthy"
            }
          ],
          "note": "right after a cold start the backend honestly reports optional subsystems that are not up yet; the login page has no sidebar status bar, so the UI text check for W7 is done in the workspace sample"
        }
      },
      "note": "in the logged-in workspace every layer is healthy and the sidebar text matches the payload; the post-restart warm-up window and the logged-out payload are recorded truthfully"
    },
    {
      "id": "W5",
      "title": "boundary negatives",
      "input": "Three rejected logins: wrong password, account_kind=admin on the desktop endpoint, and empty credentials.",
      "actions": "POST each variant to /api/auth/login and read the success flag of every response.",
      "expected": "All three attempts return success=false.",
      "observed": "{\"wrong_password\":{\"success\":false,\"message\":\"用户名或密码错误\",\"error\":{\"code\":\"MARKET_AUTH_FAILED\",\"message\":\"用户名或密码错误\"},\"market_account\":{\"success\":false,\"market_base_url\":\"https://xiu-ci.com\",\"message\":\"用户名或密码错误\"}},\"admin_kind_on_desktop\":{\"success\":false,\"message\":\"桌面端不支持管理员账号登录，请使用网页版管理端\",\"error\":{\"code\":\"ADMIN_DESKTOP_FORBIDDEN\",\"message\":\"桌面端不支持管理员账号登录，请使用网页版管理端\"}},\"empty_credentials\":{\"success\":false,\"error\":{\"code\":\"INVALID_INPUT\",\"message\":\"用户名和密码不能为空\"}}}",
      "result": "passed",
      "verdict": "PASS",
      "verify_time": "2026-09-24 17:39:12",
      "facts": {
        "wrong_password": {
          "success": false,
          "message": "用户名或密码错误",
          "error": {
            "code": "MARKET_AUTH_FAILED",
            "message": "用户名或密码错误"
          },
          "market_account": {
            "success": false,
            "market_base_url": "https://xiu-ci.com",
            "message": "用户名或密码错误"
          }
        },
        "admin_kind_on_desktop": {
          "success": false,
          "message": "桌面端不支持管理员账号登录，请使用网页版管理端",
          "error": {
            "code": "ADMIN_DESKTOP_FORBIDDEN",
            "message": "桌面端不支持管理员账号登录，请使用网页版管理端"
          }
        },
        "empty_credentials": {
          "success": false,
          "error": {
            "code": "INVALID_INPUT",
            "message": "用户名和密码不能为空"
          }
        }
      },
      "note": "desktop rejects wrong credentials, admin account_kind and empty input"
    },
    {
      "id": "W6",
      "title": "web shares the account system",
      "input": "The same enterprise account against the market (Web) endpoint https://xiu-ci.com/api/auth/login.",
      "actions": "POST username/password to the market login endpoint and read ok / access_token.",
      "expected": "ok=true or an access_token is issued, proving the desktop and Web share one account system.",
      "observed": "{\"market_base\":\"https://xiu-ci.com\",\"status\":200,\"ok\":true,\"has_access_token\":true,\"user\":\"SUNBIRD\",\"desktop_access\":true}",
      "result": "passed",
      "verdict": "PASS",
      "verify_time": "2026-09-24 17:39:12",
      "facts": {
        "market_base": "https://xiu-ci.com",
        "status": 200,
        "ok": true,
        "has_access_token": true,
        "user": "SUNBIRD",
        "desktop_access": true
      },
      "note": "the same enterprise account also logs in on the market (Web) endpoint"
    }
  ],
  "warnings": []
}