Technical Architecture

单入口分级 Lane 开发控制架构

所有需求从同一个入口创建 TaskID,再按风险和复杂度选择 Mini Lane A、Standard Lane A 或 Lane C。治理强度与模型路由分离;Agent 只提交结构化事件与证据,Dispatcher 作为唯一状态写入者生成 state.json。复核从确定性检查开始,最终以独立审查、人工授权和部署后事实闭环。

Design v1.2 2026-08-06
适用:JayFitness 及其他个人项目

1. 设计结论

不复制 Loop Engineering 的完整多 Lane 控制面。只保留一个任务入口和一套事实模型,再用三档执行强度控制成本与风险。

1

一个任务入口

所有需求由项目 Codex 收口并创建 TaskID,不允许 Agent 自行编造编号。

3

三档执行强度

Mini A 控制成本,Standard A 保证质量,Lane C 保护高风险边界。

1

一个 TaskID

对话、分支、handoff、review、状态和部署都引用同一编号。

0

零自动发布

Agent 可以实现和验证,但合并、密钥、迁移、生产部署必须经过 Gate。

2. AI 原生原则

AI 原生不是增加更多模型,而是让任务可由不同 Agent 无损接棒、让机器先验证机器能验证的事实,并让人只处理真正需要判断和授权的部分。

可替换执行者

任务契约、状态和证据不依附某个聊天。当前由 agy / Gemini 3.1 Pro 实现;未来备用执行者可用同一 TaskID 在独立分支接手。

事件驱动状态

Agent 不直接竞争写 state.json,只提交带 eventId 的结果事件,由 Dispatcher 校验并生成当前状态。

确定性优先

schema、diff scope、类型、测试、DOM 和 console 先由工具检查;模型判断只覆盖语义与视觉盲区。

证据绑定版本

handoff、测试、截图和 review 都绑定 headCommit;代码变化后旧证据自动失效,禁止沿用。

正向评价:现有设计已经具备 AI 原生的骨架:最小上下文、结构化交接、模型按能力分工、任务可恢复、合并与部署分离。v1.2 的优化不是增加流程,而是把隐含信任改成可验证事实。

3. 任务分级

分级只决定需要多少任务契约、证据和审查,不改变 TaskID、状态文件和事实诚实原则。项目 Codex 在创建任务时选档;实现 Agent 不得自行降级。

mini-a

Mini Lane A:小改动

适用:文案、间距、单文件样式、小范围确定性 Bug、已有测试覆盖下的机械修改。

  1. 任务目标 + allowed paths + 验收命令。
  2. agy / Gemini 3.1 Pro 在任务分支实现。
  3. 自动检查范围并运行指定测试。
  4. 通过后由原 Terra 任务负责人快速看 diff;不额外启动第二个审查者。

交接:生成 compact handoff.json,只包含 commit、改动路径、测试结果、范围检查和下一责任人。

standard-a

Standard Lane A:普通功能

适用:UI 功能、CRUD、业务规则、有限跨模块改动、需要新增测试的 Bug 修复。

  1. 精确任务单、允许/禁止范围和逐项验收标准。
  2. agy / Gemini 3.1 Pro 独立实现和验证。
  3. 生成完整 handoff.json Agent 交接包。
  4. Terra/Codex 根据 diff 和证据独立验收。

证据:state.jsonhandoff.jsonreview.md、验证原始输出全部必需。

lane-c

Lane C:高风险改动

适用:OAuth、授权、密钥、数据库 schema/迁移、支付、不可逆操作、CI/CD 和生产部署。

  1. Codex 主导方案、风险分析和任务拆解。
  2. Jay 明确授权敏感操作和外部写入。
  3. 执行 Agent 只承担被明确委派的有限实现。
  4. 独立验收后,合并和部署仍分别授权。

证据:Standard A 全套证据,加风险清单、回滚方案、授权记录和生产事实。

自动升级:Mini A 一旦触及多个业务模块、共享契约或需要新增行为测试,升级为 Standard A;任意任务一旦触及认证、密钥、迁移、删除或部署,升级为 Lane C。任务只能升级,不能由执行 Agent 自行降级。

4. 模型路由

模型路由不新增流程车道。任务记录 planner、executor、fallback、specialist verifier、reviewer 与升级阈值;换模型仍沿用同一 TaskID、独立分支、state.json 和 handoff.json,不重建任务上下文。

default lead

Terra Medium:规划与审查

  • 理解需求、检查仓库并选择任务档位。
  • 创建精确任务契约和验收标准。
  • 实现完成后在新的审查上下文中只读 diff、handoff 和验证证据。
  • 规划上下文不作为验收证据,默认不在 agy 的实现分支中直接编码。
default executor

agy / Gemini 3.1 Pro:当前主执行模型

  • 读取任务允许的最小上下文。
  • 直接修改代码、运行检查并生成 handoff.json。
  • 处理 Mini A 与 Standard A 的绝大多数实现。
  • 遇到边界不清或连续失败时停止并升级。
fallback executor

Luna Extra High:复杂实现与升级接手

  • Standard A 的高复杂度实现可直接指定 Luna。
  • 普通任务仅在 agy 对同一验收连续失败两次后由调度者重新派发。
  • 接手时使用独立分支/worktree,并读取原 TaskID 的结构化证据。
  • 不得和 agy 同时编辑同一个工作区。
  • 结果仍交回 Terra 按原验收标准审查。
specialist verifier

agy:浏览器与多模态验收

  • 只在任务包含 UI、响应式、交互、截图或其他多模态标准时启动。
  • 先执行 Playwright/DOM/console 等确定性检查,再使用多模态能力判断视觉质量。
  • 记录 viewport、步骤、实际结果、console error 和截图路径。
  • 输出验证事实,不替 Terra 作最终 approve 决定。

Gemini 3.1 Pro:成本优先的默认实现

Mini A 和普通 Standard A 默认由 agy / Gemini 实现;Luna 只处理高复杂度或失败升级。当前不接入 Grok,不做无信号的双模型重复实现。

升级触发条件

  • 同一验收失败连续出现两次。
  • agy 报告无法在允许范围内完成。
  • 问题需要明显不同的实现策略。
  • Terra 对实现方向缺乏足够信心。

禁止并行写入

同一 TaskID 同一时刻只能有一个 executor owner。agy 升级到 Luna 时先停止并交接,再由调度者重新派发到独立分支/worktree;禁止两者同时编辑或拼接两边未审查的改动。

当前最短路径:Mini A 由 Codex CLI 分类、agy 实现、Codex 快速验收;普通 Standard A 由 Terra 规划、agy 实现、Terra 新上下文验收;高复杂度 Standard A 直接由 Luna 实现。UI/多模态任务额外由 agy 生成 browser-evidence.json。连续失败两次才升级到 Luna。

5. 共享端到端流程

三档共用这条主干,但 Mini A 使用 compact handoff 并可跳过独立审查;Lane C 会在范围、敏感操作、合并和部署位置增加人工 Gate。审查不通过时返回同一 TaskID 和分支。

1

需求收口

项目 Codex 澄清目标、范围、禁区和可验证结果。

2

创建 TaskID

调度台生成任务目录、task.md 与初始 state.json

3

独立实现

agy 默认在独立分支/worktree 实现;未来升级到备用执行者时使用另一独立工作区。

4

验证

运行约定检查;UI/多模态任务再由 agy 执行浏览器验收并保存证据。

5

Handoff

执行者写入结构化 Agent 交接包:改动、证据、风险、阻塞和下一动作。

6

独立审查

Terra/Codex 只读任务契约、diff、handoff 和测试证据。

7

人工合并 Gate

审查通过不等于合并。只有 Jay 授权后 Codex 才可合并。

8

合并事实

记录 merge commit;状态只能由 Git 事实更新,不能靠 Agent 口述。

9

部署 Gate

独立决定是否部署,并记录环境、URL、生产 SHA 和时间。

6. 角色与状态提议权

每一步只有一个当前责任人。Agent 只能提交状态迁移事件,不能直接写 state.json;Dispatcher 是唯一状态写入者。状态表示流程阶段,owner 表示下一位必须行动的人。

Terra Medium / Project Lead

  • 澄清需求并创建 TaskID。
  • 定义 allowed scope、禁区和验收标准。
  • 负责架构、安全、迁移和部署决策。
  • 可提议:draftreadydispatched

agy / Gemini 3.1 Pro

  • 在独立分支或 worktree 实现。
  • 不得扩大任务范围。
  • 运行指定检查并生成 handoff。
  • 可提议:implementinghandoff_readyblocked

Terra / Codex Reviewer

  • 不参与同一实现分支的编码。
  • 按验收标准检查 diff 与证据。
  • 发现问题返回同一 TaskID。
  • 可提议:reviewingchanges_requestedapproved

agy / Specialist Verifier

  • 消费 task.md 中的 specialist checks,不重新规划需求。
  • 可以操作浏览器、比较截图并检查多模态输出。
  • 可提交验证 evidence,不能提议 approved
  • 若发现代码问题,返回事实给实现任务或 Terra,不直接扩大范围修复。

Jay / Human Authority

  • 批准范围变化、危险命令和外部写入。
  • 批准合并和生产部署。
  • 决定是否接受残余风险。
  • 可授权:merge_authorizeddeploy_authorized

Agent Dispatcher

  • 生成 TaskID 和目录。
  • 作为唯一写入者追加 events.jsonl 并生成 state.json。
  • 校验 event schema、幂等键、角色权限与状态迁移。
  • 展示 owner、阻塞原因和证据链接。
  • 不替任何角色作技术或发布决定。

Git / CI / Hosting

  • 提供 commit、PR、CI 和生产 SHA 事实。
  • 事实优先于对话记忆。
  • 查询失败时状态为 unknown
  • 禁止根据“Agent 说完成了”推断部署完成。

7. 事实源与文件结构

CSV 继续作为全局任务索引;每个 TaskID 使用独立目录保存可审计事实。Agent 追加事件与证据,Dispatcher 单独生成状态快照,避免多个 Agent 竞争写同一个 JSON。

.agent-lane/
  tasks/
    fit20260806-001/
       task.md
       events.jsonl
       state.json
      handoff.json
      review.md
      verify-output.txt
      browser-evidence.json
      screenshots/

agent-dispatch.csv     # 全局索引,不保存完整证据
AGENTS.md              # 跨任务协作规则

分支:
luna/fit20260806-001-short-name
grok/fit20260806-001-short-name

task.md

任务契约。范围变更必须递增 revision,并由项目 Codex确认。

events.jsonl

追加式事件账本。每条事件带 eventId、actor、taskRevision 和 commit;它是状态变化的耐久事实。

state.json

由 Dispatcher 从事件账本生成的当前投影,便于 Agent 快速读取;不允许 Agent 直接修改。

handoff.json

执行 Agent 给审查 Agent 的结构化上下文包。字段稳定、内容紧凑,不为人类阅读优化。

review.md

审查结论、发现与逐项验收结果。approved 仍不代表 merged。

browser-evidence.json

agy 输出的机器可读浏览器/多模态验收事实,并引用截图,不包含最终 approve 结论。

8. state.json:机器状态投影

events.jsonl 保存状态变化事实,state.json 只回答“任务现在在哪一步、谁行动、证据在哪里”。摘要和讨论留在 Markdown,命令原始输出留在文本文件。

draft ready implementing handoff_ready reviewing approved merge_authorized merged deploy_authorized deployed post_deploy_verifying verified
reviewing → changes_requested → implementing 是开发期正常回路。任意活动状态可以进入 blocked;生产验证失败可进入 rollback_requested。只有项目 Codex 或 Jay 可以解除阻塞、取消任务或授权回滚。
{
  "schemaVersion": 1,
  "stateVersion": 7,
  "lastEventId": "evt_fit20260806_001_007",
  "taskId": "fit20260806-001",
  "project": "jays-fitness",
  "lane": "A",
  "profile": "standard-a",
  "riskLevel": "normal",
  "taskRevision": 1,
  "status": "handoff_ready",
  "owner": "reviewer",
  "title": "Add editable custom exercise groups",
  "branch": "luna/fit20260806-001-custom-groups",
  "worktree": null,
  "scope": {
    "allowedPaths": [
      "app/components/training/",
      "tests/unit/ui/"
    ],
    "forbiddenPaths": [
      "worker/",
      "drizzle/",
      ".github/"
    ]
  },
  "acceptanceCriteria": [
    "Custom actions are grouped deterministically",
    "Existing planned actions are unchanged"
  ],
  "verification": {
    "required": [
      "npm.cmd run typecheck",
      "npm.cmd run test:unit"
    ],
    "result": "passed",
    "outputPath": "verify-output.txt"
  },
  "specialistVerification": {
    "required": true,
    "type": "browser",
    "status": "pending",
    "evidencePath": "browser-evidence.json"
  },
  "handoff": {
    "attempt": 1,
    "path": "handoff.json",
    "createdAt": "2026-08-06T10:30:00+08:00"
  },
  "review": {
    "verdict": "pending",
    "path": "review.md",
    "reviewedAt": null
  },
  "git": {
    "headCommit": "abc1234",
    "prUrl": null,
    "mergeCommit": null
  },
  "deployment": {
    "decision": "not_requested",
    "environment": null,
    "url": null,
    "productionCommit": null,
    "deployedAt": null,
    "verificationStatus": "not_started",
    "verifiedAt": null
  },
  "blocked": null,
  "createdAt": "2026-08-06T09:00:00+08:00",
  "updatedAt": "2026-08-06T10:30:00+08:00"
}
规则要求
单一写入者Agent 只提交事件;只有 Dispatcher 能追加事件账本并替换 state.json。
追加与幂等事件不可覆写;相同 eventId 重放不得产生第二次状态变化。
原子投影先生成临时 state、校验 JSON,再替换正式文件,避免中断留下半截 JSON。
合法迁移Dispatcher 根据状态表校验,不允许从 implementing 直接跳到 deployed
角色限制执行者不能写 approved,审查者不能写 merge_authorized
版本绑定handoff、测试、浏览器证据和审查结论必须绑定 taskRevision 与 headCommit;代码变化后旧证据自动失效。
证据指针JSON 保存文件路径和 verdict,不复制完整 handoff、review 或日志。
失败诚实无法查询 Git、CI 或生产环境时填写 unknown,不得猜测。
时间标准使用 ISO 8601,并保留时区,例如 +08:00

9. handoff.json:Agent 交接包

handoff.json 不面向人类写作,而是执行 Agent 给下一个 Agent 的确定性输入。它不复述完整任务,不保存聊天过程;只传递完成审查或继续实现所需的最小上下文。Mini A 使用 compact 版本,Standard A 与 Lane C 使用完整版本。

{
  "schemaVersion": 1,
  "kind": "implementation_handoff",
  "taskId": "fit20260806-001",
  "taskRevision": 1,
  "profile": "standard-a",
  "attempt": 1,
  "producer": {
    "agent": "luna-max",
    "role": "executor"
  },
  "consumer": {
    "role": "reviewer",
    "preferredAgent": "terra"
  },
  "repository": {
    "branch": "luna/fit20260806-001-custom-groups",
    "headCommit": "abc1234",
    "baseCommit": "def5678"
  },
  "result": "ready_for_review",
  "changes": [
    {
      "path": "app/components/training/CustomExerciseGroups.tsx",
      "changeType": "modified",
      "reasonCode": "acceptance_criterion_ac1"
    },
    {
      "path": "tests/unit/ui/custom-exercise-groups.test.ts",
      "changeType": "added",
      "reasonCode": "verification_for_ac1"
    }
  ],
  "acceptanceEvidence": [
    {
      "criterionId": "AC1",
      "status": "satisfied",
      "evidenceRefs": ["TEST:custom-groups:grouping-thresholds"]
    },
    {
      "criterionId": "AC2",
      "status": "satisfied",
      "evidenceRefs": ["TEST:training-plan:existing-order"]
    }
  ],
  "verification": [
    {
      "command": "npm.cmd run typecheck",
      "status": "passed",
      "exitCode": 0,
      "outputRef": "verify-output.txt#typecheck"
    },
    {
      "command": "npm.cmd run test:unit",
      "status": "passed",
      "exitCode": 0,
      "outputRef": "verify-output.txt#unit"
    }
  ],
  "scopeCheck": {
    "allowedPathsOnly": true,
    "forbiddenPathsTouched": [],
    "unexpectedPaths": []
  },
  "risks": [],
  "skippedChecks": [
    {
      "check": "browser_smoke",
      "reasonCode": "not_required_by_task_contract"
    }
  ],
  "reviewFocus": [
    "grouping_thresholds_2_4_5_6",
    "existing_action_order_stability"
  ],
  "requestedSpecialistChecks": [
    {
      "type": "browser",
      "scenarioId": "UI1",
      "viewports": ["412x915", "1440x900"],
      "evidenceOutput": "browser-evidence.json"
    }
  ],
  "nextAction": "independent_review",
  "createdAt": "2026-08-06T10:30:00+08:00"
}

必须包含

  • schema、TaskID、revision、profile 和 attempt。
  • producer、consumer、commit 与精确 changed paths。
  • 按 criterionId 组织的 evidenceRefs。
  • 检查命令、exitCode、结果和 outputRef。
  • 范围检查、风险、阻塞和 nextAction。

禁止包含

  • 密钥、Token、完整 .env 内容。
  • 聊天转录、礼貌性文字和实现过程叙事。
  • “应该没问题”一类无 evidenceRef 结论。
  • 未实际执行却标记 passed 的检查。
  • 重复 task.md 或 state.json 的完整内容。

agy 浏览器与多模态证据契约

agy 不返回泛化评价,而是为每个验收场景输出可定位、可复查的结构化结果。截图只是 evidenceRef,不能单独代表通过。

{
  "schemaVersion": 1,
  "kind": "browser_evidence",
  "taskId": "fit20260806-001",
  "taskRevision": 1,
  "producer": {
    "agent": "agy",
    "role": "specialist_verifier"
  },
  "target": {
    "url": "http://localhost:3000",
    "buildCommit": "abc1234"
  },
  "environment": {
    "browser": "chromium",
    "locale": "zh-CN",
    "timezone": "Asia/Singapore"
  },
  "scenarios": [
    {
      "scenarioId": "UI1",
      "viewport": "412x915",
      "status": "passed",
      "stepsCompleted": 5,
      "assertions": [
        {
          "assertionId": "UI1-A1",
          "status": "passed",
          "evidenceRefs": ["screenshots/UI1-mobile-result.png"]
        }
      ],
      "consoleErrors": [],
      "networkFailures": [],
      "notes": []
    }
  ],
  "visualChecks": {
    "overlapDetected": false,
    "overflowDetected": false,
    "unreadableTextDetected": false,
    "blankPrimarySurface": false
  },
  "result": "passed",
  "blockers": [],
  "nextAction": "terra_review",
  "createdAt": "2026-08-06T11:00:00+08:00"
}

10. 分层复核:从事实到判断

合理复核不是再让一个模型从头做一遍,而是先用便宜、确定性的检查排除机械错误,再把剩余判断交给独立上下文中的审查者。每份证据都绑定 taskRevision 与 headCommit;代码一变,相关结论就过期。

L0 契约与范围

校验 TaskID、revision、允许路径、禁止路径、依赖和 head commit。越界立即停止,不消耗模型审查。

L1 确定性验证

依次运行 typecheck、lint、单元测试、构建和范围检查。记录命令、退出码、输出引用与 commit。

L2 专项验证

仅在任务契约要求时调用 agy。先做 Playwright、DOM、控制台与网络断言,再做截图和多模态视觉判断。

L3 独立语义审查

Terra 在新的审查上下文中只读取任务契约、diff 和证据,不读取规划推理;逐条判定验收标准与回归风险。

L4 人工授权

Jay 决定是否合并、部署或接受残余风险。技术 approved 不自动触发外部写入。

L5 生产闭环

部署后核对 production commit、健康检查和关键 smoke。只有生产事实通过,发布任务才进入 verified。

任务档位必须复核按需复核不默认做
Mini Lane A L0 + 最小 L1 + 快速 diff 审查 有明确视觉标准时才调用 agy 第二实现模型、全仓扫描、完整架构复盘
Standard Lane A L0 + L1 + 新上下文 Terra 审查 UI 流程用 agy;高回归面抽查重跑关键命令 无失败信号时额外启动第二执行模型
Lane C L0-L5、回滚方案、人工 Gate 安全或迁移风险高时增加异质模型/人工专家复核 执行者自批、凭聊天推断部署成功
独立性的关键:同一个 Terra 可以承担规划和审查角色,但审查必须是新的上下文,并以任务契约、最终 diff 和 commit 绑定证据为输入。模型身份不同不是独立性的充分条件;证据与上下文隔离才是。

11. Lane C 与人工 Gate

Lane C 使用和 Lane A 相同的 TaskID、状态机与证据目录,但由 Codex 主导,并在敏感操作、合并和部署位置强制人工授权。执行者不得用“默认同意”跨越。

范围 Gate

需要修改 forbidden path、增加依赖、改变共享契约或扩大用户行为时,回到项目 Codex 更新 task revision。

安全与数据 Gate

OAuth、密钥、权限、数据库 schema、数据迁移、删除和不可逆操作需要 Jay 明确授权。

Git Gate

创建任务分支可自动;commit、push、PR、merge、rebase、reset 和 clean 按现有权限策略处理。

审查 Gate

执行者和 agy 验收者都不能自我批准。要求的浏览器/多模态证据缺失时,Terra 不得写 approved

合并 Gate

approved 仅表示技术验收通过;Jay 授权后才进入 merge_authorized

部署 Gate

merged 不等于 deployed。生产 URL 和 production commit 必须由实际托管状态确认。

生产验证 Gate

deployed 也不等于完成。健康检查、关键 smoke 与 production commit 一致后才进入 verified;失败时阻塞或请求回滚。

12. Token 控制规则

目标不是让 Agent 少思考,而是让每个 Agent 只消费完成自身职责所需的上下文。

角色默认读取默认不读取升级条件
Terra Medium 用户需求、相关代码、AGENTS.md、最近事实 无关历史 handoff.json、全部测试源码 跨模块契约、架构或安全边界不明确
agy / Gemini 3.1 Pro task.md、允许路径、相关测试、必要接口 整个仓库、所有历史对话、全局审查记录 任务契约指向的接口无法理解或测试失败
Terra Reviewer task.md、state.json、git diff、handoff.json、commit 绑定验证输出 规划推理、实现过程聊天、无关业务模块 diff 触及共享行为、证据矛盾或风险扩散
agy Verifier TaskID、目标 URL、场景、viewport、预期结果 完整仓库、架构历史、无关业务规则 页面失败且必须定位源码原因时,由 Terra 决定是否补充上下文
全局任务中心 TaskID、project、status、owner、updatedAt 源码、完整 handoff.json 和日志正文 用户按 TaskID 打开任务详情
最重要的节省:Mini A 只生成 compact handoff.json;Standard A 的 Terra reviewer 只读 TaskID、diff 和结构化交接包;Lane C 才加载完整风险上下文。当前不增加第二执行模型,避免重复实现同一方案。

13. 建议落地顺序

先建立最小闭环,再自动化。不要先写复杂 Hook 或状态服务。

阶段 1:文件约定

  1. 确定任务目录和 TaskID 格式。
  2. 加入 Mini A、Standard A、Lane C 的任务模板。
  3. 加入 task.mdevents.jsonlstate.jsonhandoff.json 模板。
  4. 定义事件 schema、eventId 幂等规则和 Dispatcher 单写入者规则。
  5. 更新 AGENTS.md 的角色和 Gate。
  6. 用一个真实小任务跑通全流程。

阶段 2:调度台集成

  1. 创建任务时生成目录和初始事件。
  2. 从 events.jsonl 投影 state.json,再汇总 status 与 owner。
  3. 增加合法状态迁移校验。
  4. 展示 handoff、review 和验证证据入口。

阶段 3:自动校验

  1. 检查改动是否超出 allowedPaths。
  2. 检查 required commands 是否有结果。
  3. 检查所有证据的 taskRevision 与 headCommit 是否仍有效。
  4. 从 Git/CI 获取 commit 和 merge 事实。
  5. 失败时写 unknown,不自动补结论。

阶段 4:发布事实

  1. 合并授权与部署授权分开。
  2. 记录 environment、URL 和 production SHA。
  3. 部署后运行健康检查与关键 smoke,并记录 verifiedAt。
  4. 保留 OpenAI/Cloudflare/服务器的实际状态来源。
  5. 部署失败不回滚审查结论,只更新部署状态。

14. Agent Dispatch 落地任务说明

本节是给本地 Agent Dispatch 项目的实现 Agent 与审查 Agent 使用的正式任务依据。目标是在现有静态调度台内增加 Lane 可见性和自动分类入口,不创建第二套调度台,不更换 CSV 事实源,也不要求浏览器直接执行本机命令。

实施结论:Lane 是任务属性和路由策略,不是新项目。现有 Agent Dispatch 继续作为唯一控制面;Codex CLI 负责只读分类,调度台负责展示、复制命令、读取结果和阻止危险派发。

当前基础

  • 调度台保持纯静态:index.htmlapp.jsstyles.css
  • agent-dispatch.csv 是唯一任务数据库。
  • tools/classify-task.ps1 已通过 Codex CLI 生成 schema 约束的 Lane 决策。
  • tools/lane-decision.schema.json 已定义 planner、executor、fallback、specialist verifier、reviewer 与升级阈值。
  • tools/create-task.js 已能保存 Lane、分类来源和完整模型路由。

当前模型路由

  • Mini A:Codex CLI 规划,agy / Gemini 3.1 Pro 实现,Codex 快速验收。
  • Standard A 普通复杂度:Terra Medium 规划,agy 实现,Terra 新上下文验收。
  • Standard A 高复杂度:Terra Medium 规划,Luna Extra High 实现,Terra 新上下文验收。
  • 失败升级:同一验收连续失败两次后停止,由调度者将 agy 任务重新派给 Luna。
  • UI/多模态:agy-browser 只生成浏览器证据,不代替 Terra/Codex 最终验收。
  • Lane C:Codex 主导并等待 Jay 授权;批准后才可由 Luna 实现,调度台不得自动派发。

本次实现范围

任务列表

任务卡显示 Lane 徽标和 riskLevel。未分类的历史任务显示“未分类”,不得伪装成 Standard A。

任务详情

显示 lane、classifier、classificationPath、风险级别、建议模型和是否处于人工 Gate;路径允许复制。

需求入口

增加项目与需求输入,生成并复制安全转义的 classify-task.ps1 命令。界面必须明确说明“已复制”,不能假装命令已执行。

Lane C 防线

任何导入或历史数据只要 lane 为 lane-c,派发按钮必须禁用并显示“等待 Codex / 人工授权”。

允许修改

  • index.html
  • app.js
  • styles.css
  • README.md

禁止事项

  • 不得增加服务端、构建步骤、包管理器或第三方依赖。
  • 不得让网页直接执行 PowerShell、Node 或 Codex CLI。
  • 不得修改 OAuth、密钥、GitHub 写操作或生产部署。
  • 不得破坏旧 CSV;缺失新字段时必须安全降级。
  • 不得自动启动 agy、提交 Git 或覆盖用户现有数据。

验收标准

ID必须满足证据
AD-LANE-01旧 CSV 可正常读取;无 lane 的任务显示“未分类”。旧数据加载截图或浏览器记录。
AD-LANE-02Mini、Standard、Lane C 使用不同且可读的徽标;任务卡布局不跳动。桌面与窄视口截图。
AD-LANE-03任务详情准确显示分类来源、结果路径、风险和模型。至少一个已分类任务的详情记录。
AD-LANE-04需求入口生成可在 PowerShell 使用的命令,正确处理空格、引号和中文。三组输入的复制结果。
AD-LANE-05Lane C 无法从网页进入 agy 派发路径;Mini/Standard 的既有派发不回归。按钮状态与行为验证。
AD-LANE-06页面仍可双击 index.html 使用,无控制台错误、横向溢出或文本遮挡。浏览器 smoke 和 console 检查。

验证与交接

node --check app.js

浏览器验证:
1. 使用旧 CSV 加载并确认“未分类”兼容行为。
2. 使用包含 mini-a、standard-a、lane-c 的数据检查卡片与详情。
3. 在 412x915 与 1440x900 视口检查布局和文本。
4. 检查复制命令中的中文、空格、双引号与单引号。
5. 确认 Lane C 派发被阻止,Mini/Standard 原流程仍可用。
6. 记录控制台错误检查结果。

交接必须包含:修改文件、逐项验收结果、验证输出、截图路径、残余风险和跳过项。
后续阶段,不在本任务:只有当 Jay 明确接受运行本地 helper 服务后,才考虑从网页一键调用 Codex CLI。当前版本坚持“网页生成命令 → 用户/Codex 执行 → 重新读取 CSV”,保持静态和安全边界。