Files
NianToB/docs/PILOT_QA.md

257 lines
8.5 KiB
Markdown

# YINIAN Desktop Pilot QA
> Updated: 2026-04-26
> Scope: M1/M2 pilot demo package for B-end business desktop flow
## 1. Pilot Scope
This pilot validates the desktop product loop that is already implemented:
- Login-first YINIAN entry.
- Session restore and logout cleanup.
- Single workspace/service context in the sidebar.
- Customer-facing sidebar focused on the service Dashboard card, `快速使用`, `对话`, and `设置`.
- Knowledge Base v0 upload/list/search surface.
- Service-managed model/Agent/channel/schedule configuration notice in Settings.
- Config sync in mock or HTTP mode.
- Today operations cockpit.
- Workspace-scoped local skill registry.
- Skills Manager sync/status flow.
- Gateway start after authenticated workspace context.
- Legacy ClawX/OpenClaw compatibility in E2E mode.
Out of scope for this pilot:
- Real skill bundle download.
- Signature verification and unpacking.
- Real OTA/PMS task execution.
- Real payment, provisioning, or account administration.
- Customer-specific branding beyond current YINIAN visual system pass.
## 2. Environment Modes
### Mock Mode
Default mode. Do not set `YINIAN_API_BASE_URL`.
Use this for product walkthroughs, local QA, and stakeholder demos before the NIANXX server is ready.
### HTTP Mode
Set `YINIAN_API_BASE_URL` to enable server-backed control plane calls:
```bash
YINIAN_API_BASE_URL=https://api.example.com pnpm run dev
```
HTTP mode expects the contract documented in `docs/SERVER_CONTRACT_V0.md`.
### E2E Compatibility Mode
Playwright uses `CLAWX_E2E=1` through test fixtures. In this mode, legacy ClawX setup/main flows stay available so inherited regression tests remain meaningful.
## 3. Demo Script
Use mock mode unless the server is explicitly being validated.
1. Start the app:
```bash
pnpm run dev
```
2. Confirm first screen is YINIAN login.
3. Login with mock SMS credentials:
- Phone: `13800000000`
- Code: `123456`
4. Confirm the app lands on `/today`.
5. Review Today cockpit:
- Service name and login user are visible.
- Clicking the sidebar service card returns to Today/Dashboard.
- Application readiness cards render.
- Status queue explains app sync/update/failed states.
- Application status board merges server entitlements and local registry.
6. Open `/skills`.
7. Confirm Skills Manager:
- Entitlement count is visible.
- Local registry count is visible.
- Empty registry warning appears before sync when relevant.
- Each skill explains its current state.
8. Click `同步 Skills`.
9. Confirm:
- Sync completes without leaving the page.
- Skill cards update to installed/skipped/updated states.
- Today page reflects local registry status after returning.
10. Open `知识库`.
11. Confirm:
- Upload entry is visible.
- Empty state is readable before upload.
- Search and document list area are present.
12. Hover `历史会话`.
13. Confirm:
- History popover opens.
- Clicking `历史会话` opens the latest session when history exists, otherwise opens Chat.
14. Open Settings.
15. Confirm:
- `账号与组织` shows the current service and user.
- `同步组织配置` refreshes config for the current service.
- Model, Agent, channel, and scheduling-policy configuration are shown as server-managed capabilities.
- Today and Skills stay scoped to the same workspace context.
16. Click Settings `退出登录`.
13. Confirm:
- App returns to `/login`.
- Current workspace config and local registry context are cleaned for the logged-out session.
## 4. QA Checklist
### Auth And Session
- [ ] Login succeeds in mock mode.
- [ ] App restores a valid mock session after relaunch.
- [ ] Logout returns to `/login`.
- [ ] Logout clears current workspace config and current business skill registry context.
- [ ] HTTP mode restore calls `/auth/refresh` when a persisted refresh token exists.
- [ ] HTTP mode does not persist access tokens.
### Workspace Context
- [ ] Sidebar service context appears only after authentication.
- [ ] No workspace switcher is visible in the product shell.
- [ ] Settings sync refreshes config for the current service.
- [ ] Today and Skills stay scoped to the current workspace registry.
### Sidebar And Settings IA
- [ ] Production sidebar service card opens Today/Dashboard.
- [ ] Production sidebar quick-use area shows `Skills`, `定时任务`, and `知识库`.
- [ ] Chat area shows `新对话` and `历史会话`.
- [ ] Hovering `历史会话` reveals the history popover.
- [ ] Models, Agents, Channels, and Dev Console are not visible in normal customer navigation.
- [ ] Account logout lives in Settings, not as a primary sidebar action.
- [ ] Settings explains that model/provider strategy, Agent orchestration, channels, and scheduling policy are managed by the service side.
### Knowledge Base
- [ ] Knowledge page opens from the sidebar.
- [ ] Upload button opens the system file picker.
- [ ] Uploaded files appear in the local document list.
- [ ] Search filters the visible document list.
- [ ] Empty state distinguishes "no files yet" from "no search matches".
### Gateway Boundary
- [ ] Gateway does not start before login in production mode.
- [ ] Gateway starts once after authenticated workspace context exists.
- [ ] `CLAWX_LEGACY_AUTOSTART=1` restores the old ClawX startup behavior for debugging.
- [ ] E2E compatibility mode keeps legacy setup and Chat defaults available.
### Today
- [ ] Today renders without config errors after login.
- [ ] Empty states are visible when there are no pending items, skills, or actions.
- [ ] Skill status labels are clear:
- `已开通未同步`
- `已安装`
- `已更新`
- `已是最新`
- `有更新`
- `已禁用`
- `同步失败`
- [ ] Refresh button updates config without triggering duplicate gateway starts.
### Skills Manager
- [ ] Empty entitlement state appears when an organization has no opened skills.
- [ ] Empty local registry state is distinct from no entitlements.
- [ ] Sync first install marks skills as installed/updated.
- [ ] Syncing the same manifest again marks same-version skills as skipped.
- [ ] Failed sync surfaces an error and retry affordance.
- [ ] Disabled entitlements cannot run.
- [ ] Version drift is shown as `有更新`.
### Visual System
- [ ] Login, Today, Skills, and sidebar feel like one product.
- [ ] Primary actions use the YINIAN navy treatment.
- [ ] Status colors are restrained and readable.
- [ ] Panels use 8px radius or less.
- [ ] Text does not overflow buttons, cards, or status badges at common desktop widths.
- [ ] No marketing-style hero page appears after authentication.
- [ ] Visual smoke screenshots are refreshed for Login, Today, Skills, Knowledge, and Settings.
## 5. Verification Commands
Run this full gate before a guided demo:
```bash
pnpm run typecheck
pnpm run test
pnpm run build:vite
pnpm run test:e2e
```
Last known green verification:
- Typecheck: passed.
- Unit tests: 89 files, 572 tests passed.
- Vite build: passed.
- E2E: 26 passed, 1 skipped.
- Visual smoke: Login, Today, Skills, Knowledge, and Settings passed.
Known non-blocking warnings:
- Vitest `MaxListenersExceededWarning`.
- Vite dynamic/static import chunk warnings.
- Vite large chunk warning.
- Playwright/Electron `NO_COLOR` ignored because `FORCE_COLOR` is set.
## 6. Packaging Notes
For local macOS pilot packaging, prefer:
```bash
pnpm run package:mac:local
```
This skips preinstalled skills and is more suitable for a fast local artifact. Full release packaging should use the platform-specific `package:*` scripts after dependency and signing decisions are settled.
Do not treat the current pilot build as production-ready until:
- Real server auth is validated end to end.
- Real bundle download and signature verification are implemented.
- The installer signing/notarization path is finalized.
- Customer-specific privacy and logging requirements are reviewed.
## 7. Known Issues And Product Gaps
- Today uses config and local registry as its data source; real PMS/OTA/task data is not connected yet.
- Skills sync consumes manifest metadata only; it does not download, verify, or execute real bundles.
- Knowledge Base v0 is local UI state only; persistence, indexing, permissions, and service sync are not connected yet.
- HTTP control plane contract is still draft v0.
- Device identity is still a placeholder and should become a stable installation id.
- Legacy ClawX configuration pages remain available for compatibility/E2E routes, but should stay hidden from production customer navigation until an admin/developer mode is explicitly designed.
- Bundle size warnings remain from the inherited app structure.