---
title: 示例
description: 通过公开 Lenso 入口运行 Support Desk 产品级验收。
---

[Lenso examples 仓库](https://github.com/LioRael/lenso-examples)包含产品级
Support Desk 验收。它是完整应用模型的最高验收边界；更低层的 framework、
CLI、client、Console、browser、transport 与 container 测试支持这一场景，
但不会取代它。

## 前置条件

- Node.js 与 pnpm；
- Rust 与 Cargo；`Cargo` 始终是必需的，因为 Console Migration 与 Service
  Startup 会使用它，`LENSO_CLI_BIN` 只会跳过 CLI 构建；
- PostgreSQL 的 `initdb`、`postgres` 与 `pg_isready`；
- 可启动的 headless Chrome 兼容浏览器；
- 与 `lenso-examples` 同级且命名为 `lenso`、`lenso-cli`、`lenso-console` 的
  checkout。

也可通过 `LENSO_FRAMEWORK_ROOT`、`LENSO_CLI_ROOT` 与 `LENSO_CONSOLE_ROOT`
指定这些路径。

## 安装

```sh
git clone https://github.com/LioRael/lenso-examples
cd lenso-examples
pnpm install --frozen-lockfile
```

## 运行产品级验收

```sh
pnpm acceptance:support-desk
```

Runner 会构建 Linked Service Kit、必要时构建 CLI、构建 Console Service 与
Module Artifact，然后只驱动公开的开发、业务、Console 与浏览器入口。默认会
自动启动 disposable PostgreSQL；若显式提供 `LENSO_ACCEPTANCE_DATABASE_URL`，
数据库名必须包含 `acceptance`。仅在需要检查临时运行目录时设置
`LENSO_ACCEPTANCE_KEEP_TEMP=1`。

仓库默认 `pnpm check` 保持为快速静态与组件门禁；跨仓库产品验收需要显式运行
`pnpm acceptance:support-desk`。

## 场景覆盖范围

### Compose（组合）

场景生成精确 `lenso.app.json`，然后校验其修订、摘要、依赖选择，以及 Linked
或 Service-backed Module Binding。

### Run locally（本地运行）

Runner 使用精确 `lenso.service.json` 物化唯一 Support Ticket Provider，然后
针对 `support-desk/lenso.workspace.json` 调用公开的
`lenso service workspace init --force` 与
`lenso service workspace add support-ticket`。随后通过 `lenso system dev`
启动 System、真实 Support Desk 进程与 Local Control Adapter。清理只停止该次
运行持有的资源。

### Connect（连接）

它独立启动 Console Service，提交已签名的本地 Service Enrollment Offer 与 Receipt，
并在不使用环境或部署 API 的情况下连接精确 System 拓扑。真实浏览器无需手工启用，即可加载回执绑定的 Support Ticket 与
Story `console_ui_esm` Surface。

### Status（状态）

浏览器使用 Support Ticket 生成客户端与 Surface Gateway 列出、创建、更新和
关闭真实 Ticket。场景覆盖 Actor、Tenant、Deadline、Idempotency、Surface
Grant、Console Actor 与目标 Module 授权行为。

它在 System Connection Projection 中校验 `connected`、`unavailable`、
`incompatible` 与 `unmanaged`，每种状态都有直接原因。它另外完成一次受支持
的本地 Workload 往返操作，并跟踪异步 Operation Record 到最终状态。Adapter
不可用时，Workload Observation 返回 `unknown`，变更会被拒绝且不排队、不回退。

## 权限边界

- 浏览器代码不会获得 Service 或 Adapter 凭据。
- 业务记录只通过声明的 Business API 访问。
- Console 不选择环境，也不变更发布、部署或生产基础设施。
- 场景不会直接查询数据库。
- 所有 Surface 都绑定到已连接应用中的精确 Module Release、UI 制品、合约与
  Operation ID。

手工运行生命周期请参见 [Host 快速开始](/docs/zh/quickstart)；连接与状态请参见
[Lenso Console](/docs/zh/runtime-console)。
