Phase 3 Testing: Workflow definition JSON 化 #297

Closed
opened 2026-05-18 02:14:35 +00:00 by xiaoju · 0 comments
Owner

验证目标

将现有 TypeScript workflow templates 转为纯 JSON workflow 定义,存入 CAS。

前置

  • Phase 1: json-cas workflow schemas 已完成 (uncaged/json-cas#7)
  • Phase 2: JSONata moderator 已完成 (#295, merged)

工作内容

1. 添加 @uncaged/json-cas-workflow 依赖

在 workflow monorepo 中添加对 json-cas 和 json-cas-workflow 的依赖。

2. 实现 registerWorkflow(store, workflowJson)

递归存入所有子节点(role-schema → role → workflow),返回 workflow hash。

流程:

  1. 对每个 role 的 extract schema → store.put(roleSchemaTypeHash, schema) → role-schema hash
  2. 对每个 role → store.put(roleTypeHash, { name, description, systemPrompt, extractPrompt, schema: roleSchemaHash }) → role hash
  3. 对 workflow → store.put(workflowTypeHash, { name, description, roles: { roleName: roleHash }, moderator: [...] }) → workflow hash

3. 实现 loadWorkflow(store, workflowHash)

从 CAS 加载完整 workflow 定义(含所有 role 和 schema),还原为可执行结构。

4. 转换现有 templates

将 workflow-template-solve-issue 和 workflow-template-develop 的 roles + moderator 转为 JSON workflow 定义。

solve-issue moderator:

[
  { "from": "__start__", "to": "preparer", "when": null },
  { "from": "preparer", "to": "developer", "when": null },
  { "from": "developer", "to": "submitter", "when": null },
  { "from": "submitter", "to": "__end__", "when": null }
]

develop moderator (JSONata):

[
  { "from": "__start__", "to": "planner", "when": null },
  { "from": "planner", "to": "__end__", "when": "steps[role='planner'].meta.status = 'aborted'" },
  { "from": "planner", "to": "coder", "when": null },
  { "from": "coder", "to": "reviewer", "when": "<allPhasesComplete JSONata>" },
  { "from": "coder", "to": "coder", "when": null },
  { "from": "reviewer", "to": "tester", "when": "steps[-1].meta.status = 'approved'" },
  { "from": "reviewer", "to": "coder", "when": null },
  { "from": "tester", "to": "committer", "when": "steps[-1].meta.status = 'passed'" },
  { "from": "tester", "to": "coder", "when": null },
  { "from": "committer", "to": "__end__", "when": null }
]

5. Extract role schemas from existing Zod definitions

Each role currently defines its meta schema as a Zod type. Convert these to JSON Schema objects for storage in CAS.

测试步骤

  • Step 1: registerWorkflow round-trip
    solve-issue workflow JSON → registerWorkflow → hash → loadWorkflow → verify all roles and schemas present

  • Step 2: develop workflow round-trip
    develop workflow JSON → registerWorkflow → hash → loadWorkflow → verify all 5 roles and their schemas

  • Step 3: 幂等注册
    两次 registerWorkflow 同一 workflow → 相同 hash

  • Step 4: walk(workflowHash) 遍历
    从 workflow hash 出发,walk 遍历所有 role 和 role-schema 节点

  • Step 5: loadWorkflow 结构完整性
    加载后的 workflow 包含完整 role 定义(systemPrompt, extractPrompt, schema 全部还原)

  • Step 6: moderator 可执行
    loadWorkflow 返回的 moderator rules 可直接传给 evaluateModerator 使用

验证完成标准

所有 checkbox 打勾
bun test 全过
biome check 无 error

Ref: #294

## 验证目标 将现有 TypeScript workflow templates 转为纯 JSON workflow 定义,存入 CAS。 ## 前置 - Phase 1: json-cas workflow schemas 已完成 (uncaged/json-cas#7) - Phase 2: JSONata moderator 已完成 (#295, merged) ## 工作内容 ### 1. 添加 @uncaged/json-cas-workflow 依赖 在 workflow monorepo 中添加对 json-cas 和 json-cas-workflow 的依赖。 ### 2. 实现 registerWorkflow(store, workflowJson) 递归存入所有子节点(role-schema → role → workflow),返回 workflow hash。 流程: 1. 对每个 role 的 extract schema → `store.put(roleSchemaTypeHash, schema)` → role-schema hash 2. 对每个 role → `store.put(roleTypeHash, { name, description, systemPrompt, extractPrompt, schema: roleSchemaHash })` → role hash 3. 对 workflow → `store.put(workflowTypeHash, { name, description, roles: { roleName: roleHash }, moderator: [...] })` → workflow hash ### 3. 实现 loadWorkflow(store, workflowHash) 从 CAS 加载完整 workflow 定义(含所有 role 和 schema),还原为可执行结构。 ### 4. 转换现有 templates 将 workflow-template-solve-issue 和 workflow-template-develop 的 roles + moderator 转为 JSON workflow 定义。 solve-issue moderator: ```json [ { "from": "__start__", "to": "preparer", "when": null }, { "from": "preparer", "to": "developer", "when": null }, { "from": "developer", "to": "submitter", "when": null }, { "from": "submitter", "to": "__end__", "when": null } ] ``` develop moderator (JSONata): ```json [ { "from": "__start__", "to": "planner", "when": null }, { "from": "planner", "to": "__end__", "when": "steps[role='planner'].meta.status = 'aborted'" }, { "from": "planner", "to": "coder", "when": null }, { "from": "coder", "to": "reviewer", "when": "<allPhasesComplete JSONata>" }, { "from": "coder", "to": "coder", "when": null }, { "from": "reviewer", "to": "tester", "when": "steps[-1].meta.status = 'approved'" }, { "from": "reviewer", "to": "coder", "when": null }, { "from": "tester", "to": "committer", "when": "steps[-1].meta.status = 'passed'" }, { "from": "tester", "to": "coder", "when": null }, { "from": "committer", "to": "__end__", "when": null } ] ``` ### 5. Extract role schemas from existing Zod definitions Each role currently defines its meta schema as a Zod type. Convert these to JSON Schema objects for storage in CAS. ## 测试步骤 - [ ] **Step 1: registerWorkflow round-trip** solve-issue workflow JSON → registerWorkflow → hash → loadWorkflow → verify all roles and schemas present - [ ] **Step 2: develop workflow round-trip** develop workflow JSON → registerWorkflow → hash → loadWorkflow → verify all 5 roles and their schemas - [ ] **Step 3: 幂等注册** 两次 registerWorkflow 同一 workflow → 相同 hash - [ ] **Step 4: walk(workflowHash) 遍历** 从 workflow hash 出发,walk 遍历所有 role 和 role-schema 节点 - [ ] **Step 5: loadWorkflow 结构完整性** 加载后的 workflow 包含完整 role 定义(systemPrompt, extractPrompt, schema 全部还原) - [ ] **Step 6: moderator 可执行** loadWorkflow 返回的 moderator rules 可直接传给 evaluateModerator 使用 ## 验证完成标准 ✅ 所有 checkbox 打勾 ✅ `bun test` 全过 ✅ biome check 无 error Ref: #294
This repo is archived. You cannot comment on issues.
No Label
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/workflow#297