Task V2 → Task V2+ → Task V3 工程审计与设计建议(Historical)

状态:Historical point-in-time audit。 本文保留从 2026-07-23 开始的审计、讨论结论和阶段性实施建议;正文中的“当前”“路线”“候选”等措辞只描述当时快照,不再是今天的实施授权。

当前 selected Target 见 Task V3 Product / Domain Contract,实施和环境状态见 Task V3 Rollout 状态快照。代码、schema、config、migration 与 runtime evidence 仍分别决定实际状态;Target 或 historical audit 都不能证明 TEST acceptance 或 PROD release。

完整证据、逐表审计和讨论 comments 保留在 Lark 完整审计;两张可视化流程图在 FigJam。本文把阶段性判断和设计建议整理进 Git,供后续复核、PR review 和回溯使用;只有经过再次验证并实际合并的代码、测试和明确产品决定,才构成对应阶段的已实施事实。

1. 先统一术语

名称准确定义当前状态
Task V1早期产品、字段和 Prompt 设计Historical,仅用于理解演进
Task V2当前线上产品与实现基线,包括现有 Task 行为、actions、Guard、Orchestrator、数据库和 API/UI 读取Live baseline
Task V2+保留 Task V2 产品语义,补齐统一 snapshot、Decision Journal、authority/Guard、Next Action 和稳定读模型后的工程增强版当前实施方向
Task V3Reasoner 与 V2+ 在同一 snapshot、同一 contract 上完成 Shadow 比较,证明更好,得到明确批准并成为线上判断器后的阶段Conditional;未 finalized

“Legacy”不再是当前系统的产品名称。legacy 只在以下情况保留:

  • 代码或数据库中的真实字面量,例如 legacy/legacy authority mode;
  • compatibility 字段、历史 row、import provenance;
  • 已明确准备退役的 writer/read lane;
  • 描述第三方或旧系统数据时的技术含义。

同理,target 可以作为已有代码、config 或 migration 的字面量保留。晋级前的产品和工程讨论使用 Task V2+Task V3 candidate;只有 Reasoner 通过同 snapshot Shadow、得到明确批准并成为线上判断器后,才称为 Task V3

2. 事实、产品决定与设计建议的使用顺序

问题应使用的证据或决定
线上现在怎样运行live code、schema、migration state、config、tests 和目标环境证据
用户现在怎样使用、哪里真正有问题测试用户反馈、产品观察、可复现样本和线上数据
当前产品行为必须保留什么已明确批准的产品决定 + live behavior;本文的 parity list 只是审计清单,需逐项验证
某个 PR 应该实现什么开工前最新审计结果、明确批准的最小范围,以及该 PR 合并后的代码和测试
本文能证明什么当时的审计记录、工作假设和 design proposal;不能自行证明设计已 finalized 或仍然合理
讨论、comments、完整审计证据Lark 文档
流程图和协作标注FigJam
Task V3 可选设计空间V3 target proposal、design evaluation 和 historical implementation audit

Lark 不直接镜像成第二份逐字副本。原因是 comments、内嵌画板和实时讨论会持续变化,机械复制会产生两份都像“最终文档”的内容。建议维护方式是:

  1. 在 Lark 讨论和批注;
  2. 把阶段性结论、反例和未决问题通过 docs PR 更新到本文;
  3. 明确区分“proposal”“已批准范围”和“已合并事实”;
  4. 每个实施 PR 前重新读取最新代码和数据,而不是机械执行本文路线;
  5. 由 Git review 记录建议的版本和修改原因,实际行为仍以 live code/schema 为最终证据。

3. Principal Engineer 结论

当前正确方向不是继续完成 Full Task V3,也不是回滚所有已经合并的 V3 基础组件,而是:

固定 Task V2 产品契约

补齐无争议的工程地基

建立可复现的 Task V2+ baseline

让 Reasoner 在同一 snapshot 上 no-write Shadow

只保留被证据证明有价值的 V3 component

核心判断:

  1. Task V2 是可用的当前产品,不是待淘汰的错误实现。
    • 测试用户实际使用后认为整体可用;
    • create_closed、多 objective、人工关闭和不同 category 并存都有真实数据;
    • 当前主要问题来自 behind-the-scenes 工程质量,而不是已证明的 domain failure。
  2. 先做工程正确性,再评估模型准确率。
    • snapshot、scope、authority、幂等、transaction、decision fate、schema drift 属于确定性工程问题;
    • Prompt/model 是否漏建、误建、误关属于 accuracy 问题;
    • 两类问题不能再用同一个 rollout gate 混在一起。
  3. Reasoner 是候选判断器,不是新 writer。
    • 它只能读取受限 snapshot、生成 proposal;
    • mutation 仍由同一个 Orchestrator 和 Guard 执行;
    • Shadow 阶段到比较即停止,不写真实 Task。
  4. 复杂度必须由已观察到的问题证明。
    • 新表、字段、adapter、authority 或 runtime 必须说明它解决哪个现有机制无法表达的问题;
    • “已经写了很多代码”不是继续完成设计的理由。

4. Task V2 parity contract

Task V2+ 和任何未来 Task V3 判断器都不得静默破坏以下行为:

  • create_open
  • create_closed
  • close
  • update
  • reopen
  • keep_open / no_new_objective 等可审计 no-op
  • 同一次 interaction 产生 0、1 或多个 objective decisions
  • 同一 Store + contact + category 最多一个 open Task
  • 不同 category 可以同时拥有 open Task
  • staff/API 的 manual mutation
  • DNC、scope、authority、dedupe、idempotency
  • evidence、assessment、suggestion 和 timeline

其中 create_closed 是一等产品语义:同一 interaction 中出现并完成的 material objective,即使没有 matching open Task,也必须留下完整的 closed outcome ledger。未来 command model 只有在证明原子性、幂等、无中间 open side effect、Outcome/evidence parity 和 read projection parity 后,才能用其他内部实现替代它。

5. 先分开两类问题

5.1 工程地基

这些问题不需要先做模型 A/B,但必须有 deterministic contract、integration 和 security tests:

  • versioned、typed、store-scoped TaskDecisionSnapshot
  • server-injected storeId / contact identity / DNC / authority;
  • 明确 asOf、source coverage、partial/unavailable、stable ordering 和 payload budget;
  • mutation idempotency、transaction、concurrency 和 row-state fence;
  • evidence binding 和 exact source reload;
  • assessment → authority → Guard → writer → final fate 的可查询链路;
  • migration/schema drift、rollback 和 cutover safety;
  • read failure 安全退化为 no-mutation;
  • Prompt/Reasoner 不接 arbitrary SQL,也不能直接写数据库。

5.2 判断准确率

只有工程地基稳定后,才在同一 corpus 上评估:

  • 是否选错 action;
  • 是否漏建、误建、重复或误关;
  • 是否正确理解 fresh evidence;
  • 是否正确处理 create_closed、multi-objective、DNC 和 correction;
  • V2+ Analyzer 与 Reasoner 的 precision、recall、latency、cost 和可解释性。

6. 当前 Task V2 线上流程

这条链路已经有正确的产品骨架。Task V2+ 不重写它的产品含义,只修复读取、审计、authority、时间模型和 projection 的工程缺口。

7. Task V2+ 最终流程

Task V2+ 的变化:

维度Task V2Task V2+
产品语义现有 actions 与 0 / 1 / N decisions保持不变
AI 读取typed reader,但多组查询不共享完整 snapshot contract一个带 asOf、coverage、typed evidence refs 和稳定顺序的 snapshot
Decision fateassessment 与最终 mutation 结果未完整闭环每个 decision 都有 authority、Guard、writer、Task id/no-op/reject/zero-row fate
Authorityglobal 与 per-objective 可能冲突单一 invariant,变更可审计、可 CAS、可回滚
时间模型Next Action / Deadline 尚未完整贯通Prompt、writer、timeline、API/UI 使用同一语义
数据tasks 仍是 current snapshot继续复用,不新增平行 Task truth table
Reasonersource-ready 组件存在,但尚未证明替代价值同 snapshot、no-write Shadow

8. Reasoner、Shadow 与 Task V3

Reasoner

Reasoner 是专门做 Task 判断的 AI decision loop:

  1. 读取 TaskDecisionSnapshot
  2. 只在缺少 material evidence 时调用受限 read tool;
  3. 输出 evidence-backed 0 / 1 / N proposals;
  4. 不直接修改数据库。

Reasoner 好不好,必须通过同一输入、同一 action contract、同一 expected truth 来比较,不能因为它的架构更新就预设它更准。

Shadow

Shadow 是上线前的验收模式:

same snapshot
    ├─ Task V2+ live decider → normal Guard/write path
    └─ Reasoner → proposal/eval/compare → stop

Shadow 不进入 live mutation Orchestrator,不调用真实 writer,也不改变 Task。只读 schema/Guard compatibility check 可以存在,但不能伪装成一次真实执行。

Task V3

只有同时满足以下条件,系统才进入 Task V3:

  1. Reasoner 与 V2+ 使用同一个 snapshot 和 parity contract;
  2. create_closed、0 / 1 / N、no-op、update/close 等行为全部兼容;
  3. human-ratified corpus 上持续优于 Task V2+;
  4. safety、latency、cost、correction 和 operations gates 通过;
  5. Peter 明确批准;
  6. 按单个 Store / objective 可回滚地切换线上判断器。

即使进入 Task V3,也只替换 live decider。snapshot、Decision Journal、Orchestrator、Guard、canonical Task records 和 read projection 都继续复用。

9. 数据库审计结论

保留

  • tasks:current Task snapshot;
  • type_category NOT NULL
  • open uniqueness;
  • contact_timeline:append-only Activity/Outcome/audit ledger;
  • task_suggestions:产品可见建议;
  • ai_task_decision_assessments:AI 判断记录;
  • Task Orchestrator:统一 mutation boundary;
  • existing Guard、scope、DNC、dedupe 和 idempotency。

优先增强

  • snapshot 的 asOf、coverage、evidence refs 和稳定顺序;
  • assessment 与最终 fate 的关联;
  • Next Action / Deadline / Activity / Outcome 的端到端读写;
  • global/per-objective authority invariant;
  • migration/schema drift gate;
  • behavior-preserving parity tests。

暂不作为默认方案

  • 新的 Task base table;
  • type_category nullable;
  • all-seven authority cutover;
  • unanimous seven-row epoch;
  • 在 parity 前用 V3 command union 替代 Task V2 actions;
  • 为未启用 runtime 提前扩散所有 UI/reporting dual mode;
  • 仅为了“更完整”而新增 table 或 abstraction。

新增最小 Decision Journal storage 前,先验证现有 assessments、receipts、timeline 和 structured logs 是否足够表达。只有现有结构不能可靠查询完整 fate 时,才设计最小 additive migration。

10. KEEP / IMPROVE / DEFER / DROP

结论内容
KEEPTask V2 产品心智和 actions、tasks snapshot、open uniqueness、0 / 1 / N、Orchestrator、Guard、store isolation、evidence、timeline、suggestions、assessments
IMPROVE NOWunified snapshot、authority invariant、decision fate、Next Action end-to-end、schema drift、parity suite
DEFERfull V3 writer、seven-kind authority、Judge Console/Human Control、large UI/reporting dual mode、production cutover
DROP / REDO#1634 as-is、type_category nullable、all-seven cutover、新 Store 默认 target/target、把 Full V3 当作预设终点

11. 分阶段 PR 建议

11.1 2026-07-24:PR 5 开工前复核

原始 PR 5 把 Next Action、Deadline、Activity、Outcome 的 Prompt、writer、timeline、API 和 UI 全部列为待建设范围。这个假设在开工前复核后不成立:

  • #1430#1480 已经交付大部分 Task V2 work model、commands、timeline、read projection 和 workbench;
  • 2026-07-24 对 production 的只读聚合显示:293 条 Task V2 中,123 条 open Task 全部有 deadline_at,170 条 closed Task 全部有 close_result;293 条都有 canonical task.created 事件,170 条 closed Task 都有 canonical status event;
  • production 已存在 7 条 task.next_action_changed 和 19 条 canonical task.activity_recorded 事件,证明 schedule、Activity 和 Outcome 不是从零建设;
  • production 与 test 的 next_action_text / next_action_source 都仍为 0。当前 “What to do” 主要来自 task_suggestions,但 AI suggestion 只是建议,不等于员工已采纳的 Next Action。

因此,不继续执行原始“大而全 PR 5”。当前最小、可观察的产品缺口是:Task V2+ 还不能可靠记录员工明确采纳的 Next Action 文本及其来源。

本轮建议拆分为:

PR经复核后的范围明确不做
PR 5A复用已有 tasks.next_action_* 字段,为 Task V2+ change_next_action 和 “record activity + plan” 增加显式 adopted Next Action;记录旧值/新值、可信 actor/source,并保持事务、幂等和 Guard 语义不新增表或 migration;不改 AI Prompt;不把 suggestion 自动升级成 adopted plan;不从 due_at 或历史 suggestion 回填
PR 5BWeb 提供明确的 adopt/edit 交互,并收紧现有 API/UI contract;是否实施及具体 UI 仍须在 PR 5A 合并后复核不重建已经存在的 Read API/projection;不重做 Deadline、Activity 或 Outcome

关键语义:

  • next_action_at = NULL 对 Task V2 表示 ready now,不等于缺失或错误;
  • AI suggestion 与 adopted Next Action 必须分开,只有显式员工动作才能把建议变成当前计划;
  • 仅调整时间时必须保留已有 Next Action 文本和 provenance;
  • 没有历史 adopted plan 的旧 Task 保持 unknown,不能用推断数据制造虚假确定性;
  • close_resultcreate_closed 继续保留,不强行替换成尚未验证的 V3 Outcome model;
  • model-emitted Activity 不重新进入本阶段范围。

以下是 2026-07-23 提出的阶段路线,不是预先批准的固定 backlog。每个阶段开工前都必须像 PR 5 一样重新审计;如果功能已经存在、问题没有证据或更小改动足够,应缩小、替换或取消对应 PR。

PR主题范围完成门槛
PR 1Snapshot contract and Task V2 parity baseline锁定 actions、no-op、0 / 1 / N、open uniqueness;定义 TaskDecisionSnapshot v1只加 contract/tests;无 migration、model change 或 cutover
PR 2Make Task V2+ consume one snapshotContacts Analyzer 改为读取统一 snapshot;保留现有 Prompt schema、actions、Guard、Orchestrator 和 writerfixtures/replay 与 PR 1 baseline parity;partial/unavailable 安全 no-mutation
PR 3Close the decision-fate loop串联 assessment → authority → Guard → writer → Task id/no-op/reject/zero-row每个 decision 都有可查询终态 fate
PR 4Harden authority and Guard safety安全 provision、统一 authority invariant、Guard 看见现有 V2 open rows、可审计 rollbackPostgreSQL tests 覆盖 provision/conflict/rollback/duplicate blocker;不做 all-seven cutover
PR 5A(复核后建议)Record adopted Next Action in Task V2+复用现有字段,补齐显式员工采用/编辑的 writer、timeline 和 API contractdomain/API tests 证明 suggestion ≠ adopted plan、原子性、幂等、DNC、deadline conflict 和兼容行为
PR 5B(待再次复核)Add explicit adopt/edit UX在已有 read projection 上增加明确采用/编辑交互真实浏览器验证;不重建 read model;V2 行为不回归
PR 6Run Reasoner as no-write Shadow同一 snapshot 上生成兼容 V2 contract 的 proposals 和 mismatch reasonReasoner 无 Task write authority;对比结果可复现、有人审
PR 7Conditional gradual cutover只有 PR 6 证明更好且 Peter 批准后,按一个 Store / objective 切换 decider当前不批准实施;accuracy/safety/rollback/fate gates 全部通过

PR 1–4 的实际状态应以 merged PR 和 main branch 为准;表中的文字只保留设计演进与审计背景,不替代代码事实。

12. 每个实施 PR 的共同 Gate

每个 PR 都必须回答:

  1. 它解决哪个已经观察到的问题?
  2. 为什么现有机制不能解决?
  3. 最小改动是什么?
  4. 哪些 Task V2 行为必须保持?
  5. 失败时如何 no-mutation、回滚和留 fate?
  6. 用什么 deterministic test 证明工程边界?
  7. 如果涉及模型,用什么同 corpus/human-ratified evidence 证明质量?

禁止用以下内容替代证据:

  • source-ready;
  • tests 很多;
  • mergeable;
  • schema 已经 expand;
  • “比旧系统高”但没有绝对质量门槛;
  • 新架构在概念上更完整。

13. 仍未 finalized 的内容

以下都是待评估的 proposal,不是默认实施授权:

  • Task V3 完整 lifecycle 和 seven-kind rollout;
  • full Reasoner writer;
  • all-seven authority;
  • Human Control / Judge Console;
  • provider custody/outbox 的进一步扩展;
  • SMS/Call/VoiceMail 的 V3 semantic execution;
  • complete dual-mode UI/reporting;
  • Task V3 production cutover。

任何未来文档如果使用 Acceptedcanonicalfinalsupersedes Task V2,必须同时给出:

  • 同 corpus 的 Task V2+ vs V3 evidence;
  • behavior parity;
  • rollout/rollback plan;
  • Peter 的明确批准记录。

在 2026-07 的这份审计里,满足这些条件前,当时的 Task V3 proposal 只作为设计输入和可复用组件清单。今天取代该 proposal 的内容见 Task V3 Product / Domain ContractTask V3 Rollout 状态快照

14. 相关材料