
## 2026-06-24 correction: strict V21 UI implementation
- Category: correction
- User correction: Real SaaS UI must strictly follow confirmed V21 prototype, not agent-designed approximations.
- Specific issue: Chinese mojibake appeared; generated video library lacked built-in playable preview required by design.
- Required behavior: Re-read confirmed prototype before UI implementation, map layout/function one-to-one, preserve approved layout and only adapt real data/API.


## 2026-06-24 correction: do not ask for next step during auto-run
- Category: correction
- User correction: When there is an obvious next step in full-auto mode, do not ask; continue until done, validate, and deploy.
- Required behavior: For V21 SaaS UI rollout, autonomously finish all remaining pages, then report concise results only.


## [LRN-20260624-CI-SEPARATION] correction

**Logged**: 2026-06-24T22:50:00+08:00
**Priority**: critical
**Status**: pending
**Area**: infra

### Summary
Do not run CI/Web build on the business/production server; preserve the two-server responsibility split.

### Details
User corrected that the project already had two servers and had already addressed mixed responsibilities. The failure happened because I ignored the established boundary and triggered `npm ci && npm run build` through the current runner/deploy path, which pressured the business server and caused SSH banner and public service timeouts. This is an execution drift, not a product-size problem.

### Suggested Action
Before any deploy/build change, verify server roles and runner placement. CI/build must run on the CI/build server or isolated builder; business server may only receive built artifacts/images and restart services. Never reintroduce build workloads onto production/business host.

### Metadata
- Source: user_feedback
- Related Files: .gitea/workflows/deploy.yml, infra/docker/deploy-staging.sh
- Tags: ci-cd, staging, production-safety, server-roles, no-drift
- Pattern-Key: infra.separate_ci_from_business_server
- Recurrence-Count: 1
---
