---
description: Talent Signal 灵动岛试验能够迁回 Ailoha 的六类判断、证据升级门、代码锚点与真机验收账本
status: proposed
updated: 2026-08-28
sources:
  - repo://ailoha-agent-iOS/revision/6922f359ad08da70242e4ec0c5c4a1486bc2908d
  - repo://talent-signal/revision/058717320e1c4bf7e0e36095dd4eeb78a8f044fd
  - repo://ailoha-brain/reports/talent-signal-dynamic-island-pilot-2026-08-27/agent-implementation-handoff-2026-08-28.md
  - repo://ailoha-brain/reports/talent-signal-dynamic-island-pilot-2026-08-27/visual-acceptance-evidence-board-2026-08-28.md
  - https://app.notion.com/p/3c9a444a6c008136a7cde108fc54aea6
  - https://app.notion.com/p/3c9a444a6c008132a3b9e86536e30bb2
confidence: high
sensitivity: internal
---

<!-- brain-capture:talent-signal-to-ailoha-live-activity-transfer -->

# Talent Signal 哪些证据能迁回 Ailoha，哪些不能

## 先说人话

Talent Signal 可以先替 Ailoha 回答三个便宜但重要的问题：

1. 灵动岛第一眼是否看得懂；
2. 状态、身份、结束和隐私合同是否能写清、测清；
3. 在真实 ActivityKit 表面上，minimal、compact、expanded、Lock Screen 和进 App 的连续体验是否成立。

它不能替 Ailoha 证明聊天、ARPC、Widget Intent、App Group、多账号和后端 APNs 链路已经可靠。任何结论都要沿下面这条证据梯子逐级升级，不能跳级：

```text
设计候选
→ Gate 1：8 名招聘者看懂
→ Atom A：真实 ActivityKit 系统形态
→ Atom B：真实后台任务与 APNs 生命周期
→ Ailoha：同一机制真机重放
→ 才能写成 Ailoha 已验证结论
```

> **当前诚实状态（2026-08-28）：** Gate 0 的三套设计刺激已经通过平台复审；Gate 1 真实样本是 `0/8`，`selectedDirection = UNSET`；Talent Signal 还没有 ActivityKit 实现，`TS-LA-01…10` 真实截图为 `0/10`。下列六张迁移卡全部是 `PROPOSED / WAITING`，没有一张可以写成 `VALIDATED`。

这里的 **P0 是迁移设计时必须先解决的合同，不是已经证明的线上 P0 事故**。

## 一张图看懂“什么证据能说什么话”

| 证据层 | 最多可以声称 | 不能声称 | 升级条件 |
| --- | --- | --- | --- |
| Gate 0 网页刺激 | 三套方向在同一条件下可比较 | iOS 已实现、真实系统构图成立 | 8 人 Gate 1 原始记录 |
| Gate 1 冷读 | 某一方向的文案和层级更不易误读 | ActivityKit 不裁切、后台更新可靠 | 唯一方向 + Atom A 实现 |
| Atom A Showcase | 真实系统表面、同实例转场、deep link 和截图成立 | 真实 research backend / APNs 成立 | `TS-LA-01…10` + 状态 atlas + 连续视频 |
| Atom B Product Pilot | 小型完整生命周期可在 Talent Signal 成立 | Ailoha 历史链路也成立 | exact readback、outbox、乱序/杀进程/账号测试 |
| Ailoha replay | 某个 Ailoha 场景在指定 revision、设备和账号合同下成立 | 所有任务、设备和未来 revision 永久成立 | 回归 suite、责任 owner、发布后观测 |

## P0-01｜用户进 App 回复后，再退出时不能失去“谁在汇报”

### 用户场景

灵动岛提示“需要补充信息”。用户点进去，在 Ailoha 回复，然后离开 App。后台还在处理，但岛已经消失，App 页面也不再可见。用户不知道任务是否还活着。

### Ailoha 当前代码事实

- `OpenTaskDetailsIntent` 在 `goToTask / openAiloha` 时，先按 `taskId + widgetId + activityId` 结束旧卡，再让 App 打开，并通知后端出队。来源：`repo://ailoha-agent-iOS/AilohaWidget/LiveActivityIntents.swift#L79-L120@6922f359`。
- `TaskCreationService.continueTask()` 会把任务乐观置为 processing、追加消息并发出 ARPC，但这条方法没有创建或更新 Live Activity。来源：`repo://ailoha-agent-iOS/Ailoha/GlobalService/Task/TaskCreationService.swift#L245-L427@6922f359`。
- **inference：** 当前接管规则按入口分流，而不是按“用户是否还在看”分流；这解释了连续性断点。它尚未由真机 E2E 证明为稳定复现。

### Talent Signal 先验证什么

- 同一个 `taskID + activityInstanceID` 从 `running + observe` 进入 `completed + review`；
- 用户留在 App 时不制造闪现岛，离开后才由系统表面接管；
- 返回 App 再退出仍更新同一实例；
- `Open review` 进入同一任务，再按合同结束。

对应证据：`TS-LA-02…07`、`TS-LA-09` 和未剪辑主视频。

### 通过后可以迁回的判断

可以迁回“**注意力交接**”这个设计合同和测试写法：App 可见时由 App 汇报，App 不可见且任务值得持续跟踪时由 Live Activity 接管。

不能迁回 Talent Signal 的文案、延迟阈值，也不能声称 Ailoha 已修好。

### Ailoha 必须再跑的验收

```text
需要补充信息的岛
→ 点进同一任务
→ 回复并看到 App 内 processing
→ 退出 App
→ 同一 task 的新/续 Activity 接管
→ 收到终态
→ 打开终态页并正确结束
```

- 截图：进入前、回复后、退出后 compact、expanded、Lock Screen、终态、落地页各一张；
- 日志：同一 `taskId`，并明确旧 `activityId` 为什么结束、新实例为什么创建或续接；
- 反证：若短任务频繁闪现岛，或旧卡结束后 2 秒内任务已经完成，则当前接管阈值设计失败；
- 状态：`WAITING_FOR_TS_GATE1_AND_AILOHA_REPLAY`。

## P0-02｜不要再让一条 status 同时决定业务、注意力、结果和陈旧

### 用户场景

同样是“任务还在运行”，用户可能只需观察，也可能必须回来处理；同样是“完成”，也可能仍需审阅。把它们都塞进一个 status，新增一种情况就会牵动标题、图标、按钮、深链和结束逻辑。

### Ailoha 当前代码事实

- `ActivityStatus` 是一条扁平枚举：`idle / analyzing / needsMoreInfo / pendingConfirm / processing / success / failed`。来源：`repo://ailoha-agent-iOS/AilohaShared/ScreenshotTaskAttributes.swift#L28-L37@6922f359`。
- 同一 `ContentState` 还并列携带 `needsMoreInfo`、`progress`、`analyzePhase`、`startedAt`、按钮开关和任务标识。来源：`repo://ailoha-agent-iOS/AilohaShared/ScreenshotTaskAttributes.swift#L534-L613@6922f359`。
- **inference：** 执行事实、用户注意力和投影策略缺少正交 owner，View 和 lifecycle service 被迫再次解释状态。

### Talent Signal 先验证什么

只实现并测试这份小状态合同：

```text
execution = preparing | running | completed | partial | failed | unknown | cancelled
attention = none | observe | review | resolve
freshness = fresh | stale
```

- 自动测试每个允许组合只有一个标题、图标、动作和路由；
- 非法组合直接失败，不由 View 猜；
- `unknown + resolve` 不显示成功、不允许危险重试；
- `stale` 只说明更新延迟，不篡改业务终态。

对应证据：四张 `ATLAS-*` 状态边界图、projector 单测、`TS-LA-02…07`。

### 通过后可以迁回的判断

可以迁回“**canonical 状态与 UI projection 分离**”及其 fixture 驱动测试。

不能直接把 Talent Signal 的枚举复制进 Ailoha；Ailoha 的聊天 processing、Widget review、外部写入 unknown 和 idle 聚合仍需逐项映射。

### Ailoha 必须再跑的验收

- 建一张旧事件 → 新 canonical state → Live Activity projection 映射表；
- 同一 fixture 同时喂给 App 和 Widget Extension，标题、动作、deep link 一致；
- 终态不可被晚到 running 覆盖；stale 不可把 completed 改成 failed；
- 反证：只要任一 View 仍能绕过 projector 直接决定业务动作，合同没有收口；
- 状态：`WAITING_FOR_TS_PROJECTOR_AND_AILOHA_MAPPING`。

## P0-03｜没有可信 ETA，就显示阶段，不显示不断变大的数字

### 用户场景

compact 岛上出现 `00:23、00:24、00:25…`。用户不知道它是倒计时、已等待时间、剩余时间，还是卡住了。

### Ailoha 当前代码事实

- analyzing / processing 有 `startedAt` 时，compact trailing 使用 `Text(startedAt, style: .timer)`，固定 44pt 宽；stale 后又换成灰色进度环。来源：`repo://ailoha-agent-iOS/AilohaWidget/ScreenshotTaskLiveActivity.swift#L1655-L1682@6922f359`。
- expanded 与 Lock Screen 已优先使用 `analyzePhase` 或 processing description。来源：同文件 `#L985-L1020`、`#L1275-L1304`。
- **inference：** 当前不同 surface 回答了不同问题；compact 强调“等了多久”，expanded 强调“现在做什么”。用户是否焦虑或误认倒计时仍是待测 hypothesis。

### Talent Signal 先验证什么

- Gate 1 Block C：五秒内能说出当前阶段，不说“还剩多久”；
- `TS-LA-02 / 05`：running 和 review 不能只靠颜色区分；
- stale atlas：能说出“任务可能还在，但状态更新延迟”；
- 无真实比例时禁止闭合进度环、百分比和 ETA。

### 通过后可以迁回的判断

可以迁回“**无 ETA 时，阶段优先于正计时**”这一投影规则和五秒误读门。

不能迁回“所有任务都永远不显示时间”；有真实截止时间、明确倒计时或可校准 ETA 的 Ailoha 场景应单独设计。

### Ailoha 必须再跑的验收

- 同条件比较“正计时”与“阶段”两版 compact，各 5 名未参与设计的用户；
- 至少 80% 能说清阶段，0 人误认倒计时或确定 ETA；
- 最大 Dynamic Type、Always-On、Reduce Motion、颜色关闭后仍可区分 running/review/stale；
- 反证：阶段文案频繁超过 compact 宽度，或真实用户更需要等待时长而非阶段，则应调整信息优先级；
- 状态：`WAITING_FOR_TS_GATE1_AND_AILOHA_AB_TEST`。

## P0-04｜先决定是一台设备一张注意力卡，还是多任务多卡

### 用户场景

两个任务几乎同时进入待处理。系统允许出现两张卡，但服务端只知道一个 update token。到底谁能被更新、谁该被结束，不能靠“第一张”或“最后到的”猜。

### Ailoha 当前代码事实

- 前台 reconcile 允许多张非 success 真卡并存，只结束被新卡取代的旧 success 卡。来源：`repo://ailoha-agent-iOS/Ailoha/GlobalService/DeviceRegistrationService.swift#L348-L356@6922f359`、`repo://ailoha-agent-iOS/AilohaShared/LiveActivityEnder.swift#L217-L223@6922f359`。
- 服务只维护一个 `updateToken`、一个 `updateTokenTask`；启动新 observer 会取消旧 observer。来源：`DeviceRegistrationService.swift#L87-L112`、`#L690-L733`。
- 前台只挑第一张真卡核对 token；新卡到达时把 observer 切到新卡。来源：同文件 `#L360-L400`、`#L1030-L1064`。
- 注册请求只有一个 `updateToken` 和一个 `activityId`。来源：`repo://ailoha-agent-iOS/Packages/AilohaAPIClient/Sources/AilohaAPIClient/GeneratedAPI/http_api_v1/Models/RegisterDeviceRequest.swift#L42-L74@6922f359`。
- **hypothesis：** 多张非终态卡真实并存时，旧卡可能失去持续 token 更新。当前没有真机双任务证据，不能写成已发生的生产故障。

### Talent Signal 先验证什么

第一版固定最小合同：

```text
同一 account × device × environment × research task
= 最多一个 activity instance
```

- 同一 task 重复启动 10 次仍只有一张；
- 旧 instance URL 不能结束新 instance；
- `TS-LA-02…07` 可证明同一 task + instance 连续演进；
- `TS-LA-08` 明确说明 minimal 是第二个 Activity 或 StandBy 的系统选择，不冒充主实例自然缩小。

### 通过后可以迁回的判断

可以迁回 identity key、幂等 start/update/end 和验收写法。

不能替 Ailoha 决定单卡还是多卡。这个产品选择现在就可以独立做，不必等待 Gate 1。

### Ailoha 必须再跑的验收

- **若选单卡：** 写清优先级、抢占、排队、旧卡结束和 App 内历史入口；两任务压力用例只能留下规则指定的一张；
- **若选多卡：** token registry 必须按 `account × device × environment × task × activity_instance` 存储，两张卡分别更新和结束；
- 登出、切账号、切环境后，旧实例全部 fail closed；
- 反证：只要代码仍通过 `first(where:)`、全局 scalar token 或“最后一个 observer”决定 owner，身份合同仍未完成；
- 状态：`PRODUCT_DECISION_REQUIRED`。

## P0-05｜让 create、update、end、stale、恢复走一条单调生命周期

### 用户场景

App 被杀、推送丢失或乱序后，岛可能继续显示旧状态；用户在岛上操作后，App 和服务端也可能在不同时间知道结果。局部补偿很多，但没有一条能从头讲到尾的恢复故事。

### Ailoha 当前代码事实

- 自动过期是 App 运行时每 5 秒轮询；App 挂起/被杀时不推进，`staleDate` 只改变样式、不结束卡片。来源：`repo://ailoha-agent-iOS/Ailoha/GlobalService/Task/LiveActivityAutoExpiryService.swift#L5-L20@6922f359`。
- 过期计时基于进程内 `firstSeen`，重启后重算；analyzing/processing 为 300 秒，pendingConfirm/needsMoreInfo 为 180 秒。来源：同文件 `#L34-L56`、`#L80-L116`。
- Widget action 会写 App Group 队列；主 App 冷启动消费，后台先暂存，回前台再 load history；文档明确后端 dismiss 已下线，部分结束依赖主 App。来源：`repo://ailoha-agent-iOS/Ailoha/GlobalService/Task/LiveActivitySyncObserver.swift#L22-L26`、`#L62-L66`、`#L108-L137@6922f359`。
- **inference：** 系统已有多个恢复补丁，但 create/update/end/timeout/readback 没有一个可独立陈述的单调 owner。

### Talent Signal 先验证什么

- Atom A：只验证 fixture 驱动的真实 ActivityKit UI、同实例转场、deep link 和正确结束；
- Atom B：只有业务价值通过后才验证真实 APNs、exact task readback、durable outbox、重复/乱序/晚到终态、杀进程与账号边界；
- `TS-LA-09` 必须从 `Open review` 命中同一个 opaque task + instance，并在 App 重验后结束。

### 通过后可以迁回的判断

Atom A 只能迁回 UI 与 producer 解耦的结构；Atom B 通过后，才能迁回生命周期 owner、event revision、readback 和恢复测试模式。

### Ailoha 必须再跑的验收

- App kill 后仍能更新到终态；
- 重复、乱序、晚到 running 不得覆盖终态；
- stale 打开 App 后按 authenticated exact task readback 修正；
- update/end 失败有可重放 receipt/outbox；
- 本地把卡收起不等于取消服务器任务；
- 证据含连续视频、系统截图、构建 SHA、设备/OS、task/activity ID 去敏关联和状态日志；
- 反证：任何成功仍依赖 `Task.sleep`、App 必须存活或人工重启才能成立，则生产合同失败；
- 状态：`WAITING_FOR_ATOM_B_AND_AILOHA_FAILURE_MATRIX`。

## P0-06｜锁屏上能出现什么，应该是产品隐私策略，不是 View 顺手取字段

### 用户场景

手机放在桌上，未解锁也可能显示日历标题、地点、联系人姓名、公司、电话或邮箱。技术上能显示，不等于用户同意这样显示。

### Ailoha 当前代码事实

- Activity wire shape 可携带日历标题、描述、地点、时间、参与人，以及联系人姓名、电话、邮箱、地址、公司、职位、关系和 notes。来源：`repo://ailoha-agent-iOS/AilohaShared/ScreenshotTaskAttributes.swift#L83-L225@6922f359`。
- `LiveActivityExtractedData` 仍能携带标题、地点、参与人、姓名、电话、邮箱、公司、职位和 notes。来源：同文件 `#L329-L359`。
- Live Activity 视图实际读取并显示其中一部分，例如联系人姓名/公司和任务标题。来源：`repo://ailoha-agent-iOS/AilohaWidget/ScreenshotTaskLiveActivity.swift#L384-L417@6922f359`。
- **hypothesis：** 当前暴露细度是否被用户接受、是否符合任务类型和锁屏设置，尚无产品隐私矩阵与真机证据。

### Talent Signal 先验证什么

- `TS-LA-04 / 07` 和 Always-On 全屏图没有候选人姓名、公司、URL、原话或研究正文；
- Activity payload、VoiceOver、log、telemetry、receipt 和错误正文都只允许去敏白名单；
- deep link 只带 opaque ID，App 打开后重新校验账号、环境和归属；
- 8 人中无人误认系统已经联系候选人或修改外部系统。

### 通过后可以迁回的判断

可以迁回“**系统表面使用单独的最小 disclosure projection**”、payload allowlist 和截图/VoiceOver/log 审计方式。

不能把 Talent Signal 的零 PII 默认直接当成 Ailoha 产品决定；Ailoha 必须按日历、联系人、提醒、待见面和通用任务分别选择。

### Ailoha 必须再跑的验收

- 建 `task type × locked/unlocked × notification preview × Always-On` 隐私矩阵；
- 每个格子明确允许字段、替代文案和 owner；默认拒绝未列字段；
- 对 payload、渲染、VoiceOver、日志与 deep link 做同一 allowlist 审计；
- 换账号/环境打开旧 deep link 必须 fail closed；
- 反证：若任一敏感字段能绕过 projection 直接进入 ContentState 或 accessibility label，策略未生效；
- 状态：`PRODUCT_PRIVACY_DECISION_REQUIRED`。

## 最终案例必须长什么样

Notion 最终案例不是一页漂亮说明，而是下面七块证据都能点开：

[打开 Notion 原生证据账本](https://app.notion.com/p/3c9a444a6c008132a3b9e86536e30bb2)。

1. **为什么做：** 用户离开 App 后仍需要可信状态，但系统不能制造噪音或泄露隐私；
2. **怎么选：** 三套同条件方向、Gate 1 的 8 人原始回答、唯一 `selectedDirection`、落选原因；
3. **怎么建：** canonical state、projection、identity key、lifecycle owner、deep-link 安全和隐私 allowlist；
4. **真实效果：** `TS-LA-01…10` 完整设备截图，不用网页 mock 或 Preview 冒充；
5. **边界状态：** partial / failed / unknown / stale atlas，以及 393/430 pt、无岛、最大 Dynamic Type、VoiceOver、Reduce Motion、Always-On；
6. **连续性：** 一条未剪辑主视频证明 `start → running → leave → compact/expanded/Lock Screen → review → Open review → end`；
7. **迁回 Ailoha：** 六张问题卡各自的可迁移结论、不可外推项、Ailoha replay 和当前状态。

### 十张系统截图的一票否决门

| ID | 必须证明 | 一票否决 |
| --- | --- | --- |
| `TS-LA-01` | Debug Showcase 清楚披露 synthetic fixture，正式 Release 不可到达 | 把合成研究写成真实数据 |
| `TS-LA-02` | running compact 一眼可复述阶段，无假 ETA/进度 | 裁切、倒计时误读、闭合假进度 |
| `TS-LA-03` | 同一实例 expanded：阶段、来源边界、可离开 | 和 compact 像两个任务，内容撞岛 |
| `TS-LA-04` | running Lock Screen：无需操作、无 PII | 姓名/公司/URL/正文泄露或溢出 |
| `TS-LA-05` | review compact 与 running 语义不同，不只换颜色 | 仍像 running，或冒充已审批 |
| `TS-LA-06` | review expanded：单一 `Open review`，命中同一任务 | 多 CTA、成功庆祝盖过审阅责任 |
| `TS-LA-07` | review Lock Screen 与 expanded 同义、无 PII | 绿色成功块让人误认工作已经结束 |
| `TS-LA-08` | 系统真实 minimal 触发条件，36.67–45 pt 可识别 | 缩小 compact、裁网页 mock 冒充 minimal |
| `TS-LA-09` | deep link 重验 task + instance，落到正确 review 后结束 | 旧实例结束新卡、跨账号命中、只落首页 |
| `TS-LA-10` | 无岛设备主流程和 Lock Screen fallback 仍成立 | 崩溃、空白、把无岛误写成不支持 LA |

每张图都必须附：`source SHA / build configuration / device / OS / locale / appearance / Reduce Motion / state tuple / taskID 与 activityInstanceID 的去敏关联 / capture source / PASS|FAIL / reviewer`。`TS-LA-02…07` 必须来自同一个 task + instance，并由连续视频串起来。

## 现在最值得做的三件事

1. **先跑 Gate 1，不要让 Agent 自选视觉方向。** 8 名独立招聘者、原始导出、唯一方向；没人通过就保持 `UNSET`。
2. **Ailoha 产品并行决定两件不依赖 Gate 1 的事：** 单卡还是多卡；各 task type 的锁屏隐私矩阵。
3. **Gate 1 通过后，只实现 Atom A。** 用真实系统截图与视频证明视觉和状态合同；真实 APNs / backend 放进独立 Atom B，不借 Showcase 偷渡生产复杂度。

## 当前验收结论

**内部阅读合同通过；团队冷读、真实招聘者 Gate 1、ActivityKit 实现、十张系统截图、连续视频、Atom B 和 Ailoha 真机 replay 均待验证。**
