Phase 1 Testing: 核心数据结构 + Bundle 管理 #3

Closed
opened 2026-05-06 04:37:36 +00:00 by xiaoju · 1 comment
Owner

验证目标

能注册一个 ESM bundle,验证单文件约束,计算 XXH64 hash,写入注册表,通过 CLI 完成 CRUD。

前置条件

cd ~/repos/uncaged-workflow
bun install
bun run build

测试步骤

基础工具函数

  • Step 1: Crockford Base32 编解码

    bun test packages/workflow/src/__tests__/base32.test.ts
    

    预期: 编解码往返一致,覆盖 XXH64 (64-bit) 和 ULID (128-bit) 长度

  • Step 2: XXH64 hash 计算

    bun test packages/workflow/src/__tests__/hash.test.ts
    

    预期: 对相同文件内容产出稳定 hash,不同内容产出不同 hash,输出为 13-char Crockford Base32

  • Step 3: ULID 生成

    bun test packages/workflow/src/__tests__/ulid.test.ts
    

    预期: 26-char Crockford Base32,前 10 位编码时间戳(高 2 位补 0),单调递增

  • Step 4: createLogger API

    bun test packages/workflow/src/__tests__/logger.test.ts
    

    预期: log(tag, content) 写入 JSONL,格式为 { tag, content, timestamp }

Bundle 验证

  • Step 5: ESM 单文件约束检查
    bun test packages/workflow/src/__tests__/bundle-validator.test.ts
    
    预期:
    • 通过:仅 import node built-in(如 node:fs)的单文件
    • 拒绝:含 import() 动态导入的文件
    • 拒绝:含非 node built-in 静态 import 的文件

Registry CRUD

  • Step 6: workflow.yaml 注册表读写
    bun test packages/workflow/src/__tests__/registry.test.ts
    
    预期:
    • 新增 workflow:写入 name + hash + timestamp
    • 重复注册同名 workflow:hash 更新,旧 hash 进入 history
    • 删除 workflow:从注册表移除
    • 读取不存在的 workflow:返回 Result.error

CLI 命令

  • Step 7: uncaged-workflow add

    echo 'export default async (prompt, options) => ({ returnCode: 0, summary: "ok" });' > /tmp/test-workflow.mjs
    bunx uncaged-workflow add solve-issue /tmp/test-workflow.mjs
    

    预期: 输出 hash,文件复制到 ~/.uncaged/workflow/bundles/{hash}.esm.jsworkflow.yaml 更新

  • Step 8: uncaged-workflow list

    bunx uncaged-workflow list
    

    预期: 表格显示 solve-issue 的 name、hash、timestamp

  • Step 9: uncaged-workflow show

    bunx uncaged-workflow show solve-issue
    

    预期: 显示 workflow 详情(hash、timestamp、history)

  • Step 10: uncaged-workflow remove

    bunx uncaged-workflow remove solve-issue
    bunx uncaged-workflow list
    

    预期: workflow 从注册表移除,list 为空

验证完成标准

所有 checkbox 打勾
bun test 全部通过
bun run check (biome) 无错误
代码无 console.* 直接调用

Ref: #1

## 验证目标 能注册一个 ESM bundle,验证单文件约束,计算 XXH64 hash,写入注册表,通过 CLI 完成 CRUD。 ## 前置条件 ```bash cd ~/repos/uncaged-workflow bun install bun run build ``` ## 测试步骤 ### 基础工具函数 - [ ] **Step 1: Crockford Base32 编解码** ```bash bun test packages/workflow/src/__tests__/base32.test.ts ``` **预期:** 编解码往返一致,覆盖 XXH64 (64-bit) 和 ULID (128-bit) 长度 - [ ] **Step 2: XXH64 hash 计算** ```bash bun test packages/workflow/src/__tests__/hash.test.ts ``` **预期:** 对相同文件内容产出稳定 hash,不同内容产出不同 hash,输出为 13-char Crockford Base32 - [ ] **Step 3: ULID 生成** ```bash bun test packages/workflow/src/__tests__/ulid.test.ts ``` **预期:** 26-char Crockford Base32,前 10 位编码时间戳(高 2 位补 0),单调递增 - [ ] **Step 4: createLogger API** ```bash bun test packages/workflow/src/__tests__/logger.test.ts ``` **预期:** `log(tag, content)` 写入 JSONL,格式为 `{ tag, content, timestamp }` ### Bundle 验证 - [ ] **Step 5: ESM 单文件约束检查** ```bash bun test packages/workflow/src/__tests__/bundle-validator.test.ts ``` **预期:** - ✅ 通过:仅 `import` node built-in(如 `node:fs`)的单文件 - ❌ 拒绝:含 `import()` 动态导入的文件 - ❌ 拒绝:含非 node built-in 静态 import 的文件 ### Registry CRUD - [ ] **Step 6: workflow.yaml 注册表读写** ```bash bun test packages/workflow/src/__tests__/registry.test.ts ``` **预期:** - 新增 workflow:写入 name + hash + timestamp - 重复注册同名 workflow:hash 更新,旧 hash 进入 history - 删除 workflow:从注册表移除 - 读取不存在的 workflow:返回 `Result.error` ### CLI 命令 - [ ] **Step 7: `uncaged-workflow add`** ```bash echo 'export default async (prompt, options) => ({ returnCode: 0, summary: "ok" });' > /tmp/test-workflow.mjs bunx uncaged-workflow add solve-issue /tmp/test-workflow.mjs ``` **预期:** 输出 hash,文件复制到 `~/.uncaged/workflow/bundles/{hash}.esm.js`,`workflow.yaml` 更新 - [ ] **Step 8: `uncaged-workflow list`** ```bash bunx uncaged-workflow list ``` **预期:** 表格显示 solve-issue 的 name、hash、timestamp - [ ] **Step 9: `uncaged-workflow show`** ```bash bunx uncaged-workflow show solve-issue ``` **预期:** 显示 workflow 详情(hash、timestamp、history) - [ ] **Step 10: `uncaged-workflow remove`** ```bash bunx uncaged-workflow remove solve-issue bunx uncaged-workflow list ``` **预期:** workflow 从注册表移除,list 为空 ## 验证完成标准 ✅ 所有 checkbox 打勾 ✅ `bun test` 全部通过 ✅ `bun run check` (biome) 无错误 ✅ 代码无 `console.*` 直接调用 Ref: #1
Author
Owner

Phase 1 验证结果

所有 10 个 Step 全部通过:

  • Step 1: Crockford Base32 编解码 — 3 tests pass
  • Step 2: XXH64 hash 计算 — 2 tests pass
  • Step 3: ULID 生成 — 3 tests pass
  • Step 4: createLogger API — 2 tests pass
  • Step 5: ESM 单文件约束检查 — 6 tests pass
  • Step 6: workflow.yaml 注册表读写 — 3 tests pass
  • Step 7: uncaged-workflow add — 注册成功,hash 正确
  • Step 8: uncaged-workflow list — 表格输出正确
  • Step 9: uncaged-workflow show — 详情展示正确
  • Step 10: uncaged-workflow remove — 移除成功,list 为空

补充验证

  • bun test — 23 tests, 0 fail
  • bun run check (biome) — 37 files, no errors
  • 代码无 console.* 直接调用

小备注

  • CLI add 命令要求文件后缀为 .esm.js(符合 RFC 设计)
  • 环境变量 UNCAGED_WORKFLOW_STORAGE_ROOT 可覆盖默认存储路径(测试友好)

小橘 🍊(NEKO Team)

## Phase 1 验证结果 ✅ 所有 10 个 Step 全部通过: - ✅ Step 1: Crockford Base32 编解码 — 3 tests pass - ✅ Step 2: XXH64 hash 计算 — 2 tests pass - ✅ Step 3: ULID 生成 — 3 tests pass - ✅ Step 4: createLogger API — 2 tests pass - ✅ Step 5: ESM 单文件约束检查 — 6 tests pass - ✅ Step 6: workflow.yaml 注册表读写 — 3 tests pass - ✅ Step 7: `uncaged-workflow add` — 注册成功,hash 正确 - ✅ Step 8: `uncaged-workflow list` — 表格输出正确 - ✅ Step 9: `uncaged-workflow show` — 详情展示正确 - ✅ Step 10: `uncaged-workflow remove` — 移除成功,list 为空 ### 补充验证 - ✅ `bun test` — 23 tests, 0 fail - ✅ `bun run check` (biome) — 37 files, no errors - ✅ 代码无 `console.*` 直接调用 ### 小备注 - CLI `add` 命令要求文件后缀为 `.esm.js`(符合 RFC 设计) - 环境变量 `UNCAGED_WORKFLOW_STORAGE_ROOT` 可覆盖默认存储路径(测试友好) 小橘 🍊(NEKO Team)
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/workflow#3