Agent 主干登录联调流程
本流程用于 Project2 最新主干的 Unity Editor 真实前后端登录联调,沿用已完成的首次验收。适用范围仅为启动、实际点击登录和进入大厅;不代表玩法回归、APK、性能或发布验收。用户明确授权的功能覆盖、缺陷交接与复测见功能测试闭环;既有每日登录计划不因该流程自动扩大范围。
入口与职责
- 日常入口:北京时间每日 02:00 的既有 GitLab
autoai/autodev-trialschedule20,按此前明确授权创建 Linear Project2 测试 Issue,再由既有project2-linearSymphony 调度 agent。这项长期创建和执行授权继续有效,计划保持启用。 - 临时测试及普通聊天请求默认由当前聊天 agent 直接处理,不自动创建 Linear Issue、子 Issue 或后续任务,不隐式交给 Symphony。只有用户明确授权相应项目/范围/批次的任务创建时才创建;设置可执行、分配执行者或移交调度还须分别包含在授权中。
- 当前
project2_session_*工具要求真实、已授权的 Issue 绑定;没有绑定时,当前聊天 agent 处理必要工具能力或报告具体工具限制,不能自动创建任务、移交 Symphony、伪造 Issue ID,或宣称已存在未实现的无 Issue 会话模式。 - 对已有获准执行的活跃 Issue,先读取现有会话和清理状态;仍活跃时继续该会话,不重复启动。每次实际启动新会话,包括同一 Issue 重试或修复后复测,都读取当前 repo registry 指定主干的最新源码,不沿用旧轮次版本。实际运行 SHA 由 Runner 自动记录,不作为版本冻结或后续启动条件。In Review 停止执行,复测须先按已授权任务流程恢复到可执行状态;任务标识和工作区使用正式工具传入的值,不伪造运行身份。
- Linear 保存任务、结果与人类验收;Symphony runtime API 判断调度是否仍在运行;GitLab 原生 job/pipeline 与 artifacts 保存执行和清理结果。
- 外部 CI Runner 独占测试工作区,准备依赖、构建和运行后端、启动 Unity、执行实际界面输入并清理。agent 读取截图与日志、决定操作、判断玩家可见结果。
- agent 通过正式
project2_session_*工具操作 Runner 会话,不在本地运行验证、不直接启动测试进程、不改游戏代码绕过登录。 - 可执行 agent 指令由
autoai/autodev-trial的symphony/profiles/project2-linear/WORKFLOW.md维护;本文是 Project2 的可读流程入口,不另存一套可编辑调度状态。
开始前确认
| 项目 | 必须满足的条件 |
|---|---|
| Mac | 开机、已登录、屏幕唤醒且解锁,有可交互的图形桌面;测试期间没有另一任务争用该 Unity 工作区或 GUI |
| 执行器 | 当前发布组件具备 Accessibility 与屏幕录制权限;已有授权按实际运行的组件身份核对,不能只看旧组件已勾选 |
| 上轮清理 | 原生 Runner 结果明确确认所属 Unity、UI 进程、后端与租约已清理;未知或失败时先阻塞,不覆盖现场启动新一轮 |
| QA 基线 | 复用专属 QA 数据和已完成首次关卡的既有账号;执行服务/Runner 读取受保护凭据和依赖绑定,agent 只通过正式工具取得获准账号,不读取私有 binding 或 secrets,也不复制到 Issue 或本文 |
| 工作区 | /Users/wjai/AutoDev/runtime/project2-agent-workspace 固定目录与现有缓存可复用,Runner 完成容量与独占条件检查 |
正常每轮不需要人类重新安装组件、重新授权、准备账号或点击 Unity。更换组件导致权限失效、替换账号或重置 QA 数据时,应记录具体缺失前提并停止本轮。不要临时关闭系统保护、跳过权限判断、例行使用 GM 或改数据“制造通过”。
一轮执行步骤
- 读取已授权任务与最新主干。 每次实际启动新会话,从当前 repo registry 解析后端
master、前端develop、策划master的最新源码,Runner 自动记录实际运行的三个完整 SHA。配置来源以 registry 为准;同一 Issue 重试也重新读取最新主干,不冻结版本。临时测试先按上述入口处理真实工具绑定及明确授权,不能因为要测试最新主干而自动创建或移交任务。 - 交给 Runner 准备环境。 在固定目录同步最新主干源码,复用 Unity
Library、UPM/Bee、Go 等缓存;使用执行器管理的短临时路径,避免 Bee Unix socket 路径过长。不要删除缓存、另建临时 Unity 工程或强制清理其他人的 checkout。源码同步、环境 overlay 与恢复均由既有执行器负责。 - 启动专属联调后端。 Gate、Role、Server 原生运行于 macOS,QA Gate 为
127.0.0.1:9000;数据库等依赖位于隔离的 OrbStack Linux 环境,因此不能把整个环境描述为完全原生。保留人工dev_ai的192.168.8.91:23107环境与数据。 - 观察 Unity 再操作。 确认正确工作区、Launch 场景与 Editor Simulate 模式,进入 Play;按当前截图处理正常欢迎提示或登录界面,不复用上轮坐标。观察不依赖窗口已获得输入焦点;输入仍需通过当前窗口归属、命中位置和焦点检查。被遮挡或身份不符时重新观察,不强行投递。
- 实际点击登录。 对登录界面的“开始游戏”执行实际点击;操作工具返回成功仅说明动作已提交,下一次截图和前后端响应才说明游戏发生变化。
- 确认真实链路与大厅。 结合实际
Login、JoinServer请求与响应确认接入本轮后端,并观察玩家可见大厅。大厅正常引导或攻略弹窗可按当前画面关闭,再观察大厅。仅 TCP 已连接、仅收到回包、日志宣称进大厅或点击命令成功均不足以通过。 - 结束会话并等待清理。 提交本轮判断与简短说明,读取 Runner 终态和清理结果。确认进程/租约释放、临时配置恢复、工作区与缓存保留后,再完成报告。断开 agent 连接或看到终态字样,不能替代清理确认。
会话期间的纪律
- 当前会话 contact lease 为 180 秒。主动等待期间至少每 30 秒调用一次正式
status,重新判断运行状态;不要连续长时间思考或等待其他工作而放任租约过期。 - 需要修改执行器、重建权限组件或长时间分析时,先正式结束会话并确认清理,再维护环境;不要用无人值守续租掩盖遗弃会话。
- 鼠标动作必须使用现有受保护 UI 路径;不要恢复曾无效的 PID 鼠标投递,也不要移除窗口归属检查。输入超时或没有画面变化时重新观察,不连续盲点。
- 同一任务不堆积重复运行。失败后先读现有会话、原生 job 与清理结果,确定原因及重试条件;不能从 Issue 状态、分支存在或本地文件推断进程活着。
- 登录后强制进入首次战斗时,先核对账号和数据基线,不能仅凭画面断言前置缺失。确认账号未准备或数据被重置才记环境阻塞,由独立环境维护恢复基线;若已确认准备好的账号异常重入新手流程,保留现场,按可能的产品回归反馈。不在正式测试中调用 GM。
结果与后续处理
| 结果 | 判定与行动 |
|---|---|
| 通过 | 实际点击、真实响应、可见大厅均成立,且清理已确认;交人类验收,不扩展为全功能通过 |
| 产品失败 | 环境前提成立,实际游戏报错、请求失败或玩家流程不符合要求;保留复现步骤与最少证据,指明 owning repo,按任务流程反馈,不自行修改游戏 |
| 环境阻塞 | GUI/权限/工作区/磁盘/依赖/账号前置缺失,未能完整执行;写清缺什么、由谁处理,不能当产品失败或通过 |
| 执行或清理失败 | UI 启动、contact lease 或清理生命周期异常;保留原始失败及所属调用身份,交执行器维护,不改写历史结果。清理不明确时禁止再开一轮 |
最小报告
已有授权 Linear Issue 时在该 Issue 留下报告;当前聊天直接处理的请求在当前对话交付,不为存放报告自动创建任务。报告包括:三仓实际运行 SHA、外部 pipeline/job 链接、实际步骤与结论、登录/大厅少量截图或日志链接、清理结果、未覆盖范围和下一步。账号仅写脱敏标识;不写密码、token 或私有连接串。不新增证据数据库、重复状态台账或每功能专属 CI。
测试源码、构建、运行及 GUI 均由外部 CI Runner 执行。本流程不授权添加测试文件、断言、fixtures、Mock 或游戏内测试钩子。单次首次成功不证明后续夜间长期稳定;后续关注缓存复用耗时、点击可靠性与异常清理。