687 lines
30 KiB
JSON
687 lines
30 KiB
JSON
{
|
||
"version": 2,
|
||
"created": "2026-04-26T23:16:13Z",
|
||
"session_config": {
|
||
"concurrency_mode": "exclusive",
|
||
"max_tasks_per_session": 9,
|
||
"max_sessions": 80
|
||
},
|
||
"tasks": [
|
||
{
|
||
"id": "task-001",
|
||
"title": "Phase K-1:定义 tree shell Rust runtime artifact 边界",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "6d89f5ca",
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web renderer_input && cargo test -p mnote-web runtime_artifact && cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/components/sidebar/tree-shell-iframe-host.test.tsx",
|
||
"timeout_seconds": 1800
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已在 mnote-web rendererInput 中定义 rust_tree_shell_runtime_artifact_v1,覆盖 rendererInput/projection/expanded/selected/active/focused 输入、DOM patch/intent/command 输出和 focus/keyboard/expand/selection/context/drag/pick 事件边界;3000 inline host 同步输出同名 runtimeArtifact。",
|
||
"timestamp": "2026-04-26T23:22:39Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-26T23:22:39Z"
|
||
},
|
||
{
|
||
"id": "task-002",
|
||
"title": "Phase K-2:建立 page tree Rust-side runtime 状态机",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [
|
||
"task-001"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "6d89f5ca",
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web page_renderer && cargo test -p mnote-web page_focus && cargo test -p mnote-web page_runtime && cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/components/sidebar/tree-shell-iframe-host.test.tsx src/components/sidebar/tree-shell-surface.test.tsx && node /mnt/Data1T/mnote/scripts/task112-tree-rust-family-regression-smoke.js",
|
||
"timeout_seconds": 2400
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已新增 page_runtime reducer,组合 focus/expand/open/context-menu/drop feedback/tree.subtree.move dispatch 输出,验证 page_renderer/page_focus/page_runtime、tree-shell iframe/surface vitest 与 task112 smoke 均通过。",
|
||
"timestamp": "2026-04-26T23:27:43Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-26T23:27:43Z"
|
||
},
|
||
{
|
||
"id": "task-003",
|
||
"title": "Phase K-3:建立 file tree Rust-side runtime 状态机",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [
|
||
"task-001"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "6d89f5ca",
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web filetree_renderer && cargo test -p mnote-web filetree_selection && cargo test -p mnote-web filetree_runtime && cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/components/sidebar/tree-shell-iframe-host.test.tsx src/lib/file-tree/shell.test.ts src/lib/tree-stream/tree-delta.test.ts && node /mnt/Data1T/mnote/scripts/task112-tree-rust-family-regression-smoke.js",
|
||
"timeout_seconds": 2400
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已新增 filetree_runtime reducer,覆盖 selection/range/context/normalize、drag row ids、copy/move effect、drop target feedback,以及 doc/index/asset-folder/asset 的 open/context-menu intent;目标测试与 task112 smoke 通过。",
|
||
"timestamp": "2026-04-26T23:32:11Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-26T23:32:11Z"
|
||
},
|
||
{
|
||
"id": "task-004",
|
||
"title": "Phase K-4:建立 picker Rust-side runtime 状态机",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [
|
||
"task-001"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "6d89f5ca",
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web picker_renderer && cargo test -p mnote-web picker_state && cargo test -p mnote-web picker_runtime && cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/components/documents/move-embed-picker-dialog.test.tsx src/components/sidebar/tree-shell-iframe-host.test.tsx && node /mnt/Data1T/mnote/scripts/task113-picker-keyboard-regression-smoke.js",
|
||
"timeout_seconds": 2400
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已新增 picker_runtime reducer,覆盖 normalize/next/previous/home/end/focus/pick、excluded ids、root pick,以及搜索输入不被键盘运行时抢 DOM 焦点的 focus_dom 输出边界;目标测试与 task113 smoke 通过。",
|
||
"timestamp": "2026-04-26T23:34:59Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-26T23:34:59Z"
|
||
},
|
||
{
|
||
"id": "task-005",
|
||
"title": "Phase K-5:3000 host 调用正式 runtime artifact,并将 mnote-web /tree 固定为 debug/internal",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [
|
||
"task-002",
|
||
"task-003",
|
||
"task-004"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "6d89f5ca",
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/components/sidebar/tree-shell-iframe-host.test.tsx src/components/sidebar/tree-shell-surface.test.tsx && node /mnt/Data1T/mnote/scripts/task112-tree-rust-family-regression-smoke.js && node /mnt/Data1T/mnote/scripts/task113-picker-keyboard-regression-smoke.js",
|
||
"timeout_seconds": 2400
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已固定 3000 inline host 与 mnote-web debug shell 均输出 rust_tree_shell_runtime_artifact_v1,并通过 tree-shell 目标测试、task112 与 task113 证明 3000 主路径继续使用 inline iframe host,/api/tree/shell debug 直连默认禁用。",
|
||
"timestamp": "2026-04-26T23:38:55Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-26T23:38:55Z"
|
||
},
|
||
{
|
||
"id": "task-006",
|
||
"title": "Phase L:将 tree.subtree.move 最终写路径继续下沉 Rust kernel",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [
|
||
"task-005"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "6d89f5ca",
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p bridge-runtime tree_subtree_move_command && cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/app/api/tree/commands/route.test.ts src/lib/documents/tree-command-client.test.ts src/lib/tree-stream/tree-delta.test.ts",
|
||
"timeout_seconds": 2400
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已引入 Rust treeWriteOperation,Convex documents.move 优先执行 Rust write operation,normalizedMove 保留旧 fallback;bridge-runtime move 单测与前端 39 个目标测试通过。",
|
||
"timestamp": "2026-04-26T23:52:52Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-26T23:52:52Z"
|
||
},
|
||
{
|
||
"id": "task-007",
|
||
"title": "Phase M:补齐 block/save-snapshot formal artifact 与 domain-event contract",
|
||
"status": "completed",
|
||
"priority": "P1",
|
||
"depends_on": [
|
||
"task-006"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "6d89f5ca",
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p bridge-runtime documents_save_command_plans_include_formal_domain_event_contract && cargo test -p bridge-runtime block_commands_include_formal_domain_event_contract && cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/lib/documents/rust-runtime.test.ts src/lib/documents/page-write-command-adapter.test.ts src/lib/blocks/block-command-adapter.test.ts",
|
||
"timeout_seconds": 2400
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已将 page.body.saved、block.patched、block.moved、block.embedded 切到 formal domainEventPlan payload schema;复合命令 streamDelta 使用 resync_required 保守策略,command log/domain event 通过同一 command_id 关联;目标验证通过。",
|
||
"timestamp": "2026-04-27T00:09:12Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-27T00:09:12Z"
|
||
},
|
||
{
|
||
"id": "task-008",
|
||
"title": "Phase N:继续收薄 3000 Next route 过渡职责",
|
||
"status": "completed",
|
||
"priority": "P1",
|
||
"depends_on": [
|
||
"task-007"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "6d89f5ca",
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/app/api/tree/commands/route.test.ts src/lib/tree-stream/tree-delta.test.ts && node /mnt/Data1T/mnote/scripts/task112-tree-rust-family-regression-smoke.js",
|
||
"timeout_seconds": 2400
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 2,
|
||
"total": 2,
|
||
"description": "Phase N route thinning manifest 与 task112 iframe-ready smoke 同步已完成;刷新本地 Convex functions 后 move treeWriteOperation 运行态验证通过,目标 Vitest 与 task112 smoke 均通过。",
|
||
"timestamp": "2026-04-27T00:34:43Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-27T00:34:43Z"
|
||
},
|
||
{
|
||
"id": "task-009",
|
||
"title": "Phase O:搜索语义 hardening 与资源类型 fixture 补齐",
|
||
"status": "completed",
|
||
"priority": "P1",
|
||
"depends_on": [
|
||
"task-008"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "6d89f5ca",
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/lib/tree-stream/tree-delta.test.ts",
|
||
"timeout_seconds": 1800
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已补 file_tree 搜索 hardening 前端契约:projection-client 固定 maxResults=80、祖先补全/排序/异步可见性元数据,tree-delta fixture 覆盖 index、asset-folder、mindmap child、book、pdf;目标验证与 task112 smoke 通过。",
|
||
"timestamp": "2026-04-27T00:41:58Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-27T00:41:58Z"
|
||
},
|
||
{
|
||
"id": "task-010",
|
||
"title": "Phase P-0:补 final DOM shell 负向门禁,阻止 iframe_srcdoc 被误判为完成",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [
|
||
"task-009"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "81ba21c5",
|
||
"source_doc": "design/04-tree-domain/process/4-18-tree-final-dom-shell-cutover-hard-gate-v1.md",
|
||
"scope": [
|
||
"wolai-frontend/src/components/sidebar/tree-shell-host*.test.tsx",
|
||
"wolai-frontend/src/components/sidebar/tree-shell-iframe-host.test.tsx",
|
||
"scripts/task112-tree-rust-family-regression-smoke.js",
|
||
"scripts/task113-picker-keyboard-regression-smoke.js"
|
||
],
|
||
"acceptance": [
|
||
"默认 page/filetree/picker 主路径测试不得再把 srcDoc inline DOM shell 作为成功条件",
|
||
"默认主路径测试不得出现 data-tree-browser-bridge=\"iframe_srcdoc\" 正向断言",
|
||
"旧 TreeShellIframeHost 的 srcdoc 合同测试必须迁入 legacy/debug 分组或显式标注为 legacy",
|
||
"task112/task113 smoke 需要验证新 Rust/WASM DOM shell 主路径,而不是证明旧 inline iframe host 继续可用"
|
||
],
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/components/sidebar/tree-shell-iframe-host.test.tsx src/components/sidebar/tree-shell-surface.test.tsx && cd /mnt/Data1T/mnote && node scripts/task112-tree-rust-family-regression-smoke.js && node scripts/task113-picker-keyboard-regression-smoke.js",
|
||
"timeout_seconds": 2400
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 4,
|
||
"description": "已新增默认非 iframe rust_wasm_dom_shell_host 与共享 DOM projection model,legacy iframe 改为显式环境开关。",
|
||
"timestamp": "2026-04-28T03:28:16.005752Z"
|
||
},
|
||
{
|
||
"step": 2,
|
||
"total": 4,
|
||
"description": "tree-shell-surface 与 legacy iframe host 目标 Vitest 通过;默认主路径断言已切成 rust_wasm_dom_shell_host 且负向排除 iframe_srcdoc。",
|
||
"timestamp": "2026-04-28T03:34:10.533972Z"
|
||
},
|
||
{
|
||
"step": 3,
|
||
"total": 4,
|
||
"description": "move/embed picker 测试已切到 DOM shell;默认 picker 不再以 iframe postMessage 为成功条件,目标前端 Vitest 29 项通过。",
|
||
"timestamp": "2026-04-28T03:36:24.605315Z"
|
||
},
|
||
{
|
||
"step": 4,
|
||
"total": 4,
|
||
"description": "已补默认 DOM shell 负向门禁:tree-shell-host/surface/picker 测试与 smoke 默认拒绝 iframe_srcdoc 成功路径。",
|
||
"timestamp": "2026-04-28T04:40:14Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-28T04:40:14Z"
|
||
},
|
||
{
|
||
"id": "task-011",
|
||
"title": "Phase P-1:拆分默认 Rust DOM shell host 与 legacy TreeShellIframeHost",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [
|
||
"task-010"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "81ba21c5",
|
||
"source_doc": "design/04-tree-domain/process/4-18-tree-final-dom-shell-cutover-hard-gate-v1.md",
|
||
"scope": [
|
||
"wolai-frontend/src/components/sidebar/tree-shell-host.tsx",
|
||
"wolai-frontend/src/components/sidebar/tree-shell-iframe-host.tsx",
|
||
"wolai-frontend/src/components/sidebar/tree-shell-*.test.tsx"
|
||
],
|
||
"acceptance": [
|
||
"TreeShellHost 默认选择 rust_wasm_dom_shell_host 或等价新 host",
|
||
"TreeShellIframeHost 改为 LegacyTreeShellIframeHost 或显式 legacy/debug host",
|
||
"旧 iframe srcdoc host 只能通过 debug/legacy flag 进入",
|
||
"默认 page tree 首屏不依赖 LOCAL_TREE_SHELL_TEMPLATE"
|
||
],
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/components/sidebar/tree-shell-host.test.tsx src/components/sidebar/tree-shell-surface.test.tsx src/components/sidebar/tree-shell-iframe-host.test.tsx",
|
||
"timeout_seconds": 2400
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "TreeShellHost 默认选择 rust_wasm_dom_shell_host;TreeShellIframeHost 仅由 NEXT_PUBLIC_TREE_SHELL_LEGACY_IFRAME_HOST=1 进入。",
|
||
"timestamp": "2026-04-28T04:40:14Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-28T04:40:14Z"
|
||
},
|
||
{
|
||
"id": "task-012",
|
||
"title": "Phase Q:page / picker / filetree 迁入 Rust/WASM DOM shell 主路径",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [
|
||
"task-011"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "81ba21c5",
|
||
"source_doc": "design/04-tree-domain/process/4-18-tree-final-dom-shell-cutover-hard-gate-v1.md",
|
||
"scope": [
|
||
"rust/crates/tree-shell-runtime-wasm",
|
||
"rust/crates/mnote-web/src/tree_shell",
|
||
"wolai-frontend/src/components/sidebar"
|
||
],
|
||
"acceptance": [
|
||
"page tree 默认主路径由新 Rust/WASM DOM shell 渲染与绑定事件",
|
||
"picker 默认主路径由新 Rust/WASM DOM shell 渲染与绑定事件",
|
||
"filetree 默认主路径由新 Rust/WASM DOM shell 渲染与绑定事件,并保留 doc/index/asset-folder/asset 能力",
|
||
"3000 host 只保留挂载、auth、transport、文件读取、postMessage/command bridge"
|
||
],
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web tree_shell && cargo test -p tree-shell-runtime-wasm -- --nocapture && cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/components/sidebar/tree-shell-iframe-host.test.tsx src/components/sidebar/tree-shell-surface.test.tsx src/components/documents/move-embed-picker-dialog.test.tsx && cd /mnt/Data1T/mnote && node scripts/task112-tree-rust-family-regression-smoke.js && node scripts/task113-picker-keyboard-regression-smoke.js",
|
||
"timeout_seconds": 3600
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "page / filetree / picker 默认 DOM host 已消费 TreeShellRuntimeRequest/Result,并由 WASM artifact 或同源 Rust seam 驱动 hostEvents/commandEvents。",
|
||
"timestamp": "2026-04-28T04:40:14Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-28T04:40:14Z"
|
||
},
|
||
{
|
||
"id": "task-013",
|
||
"title": "Phase R/S:删除默认 JS DOM state machine 并完成文档收口",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [
|
||
"task-012"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "81ba21c5",
|
||
"source_doc": "design/04-tree-domain/process/4-18-tree-final-dom-shell-cutover-hard-gate-v1.md",
|
||
"scope": [
|
||
"wolai-frontend/src/components/sidebar",
|
||
"design/04-tree-domain/process",
|
||
"design/04-tree-domain/done"
|
||
],
|
||
"acceptance": [
|
||
"默认主路径不再调用 LOCAL_TREE_SHELL_TEMPLATE、buildInlinePageTreeHtml、buildInlineFileTreeHtml、buildInlinePickerHtml",
|
||
"默认主路径不再标注 data-tree-browser-bridge=\"iframe_srcdoc\"",
|
||
"旧 JS fallback reducer/state machine 只在 legacy/debug host 中存在",
|
||
"4-11、4-16、4-18 的 final DOM shell gate 按真实代码完成状态更新"
|
||
],
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/components/sidebar/tree-shell-iframe-host.test.tsx src/components/sidebar/tree-shell-surface.test.tsx src/components/documents/move-embed-picker-dialog.test.tsx && cd /mnt/Data1T/mnote && node scripts/task112-tree-rust-family-regression-smoke.js && node scripts/task113-picker-keyboard-regression-smoke.js && git diff --check -- wolai-frontend/src/components/sidebar design/04-tree-domain",
|
||
"timeout_seconds": 3600
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已清理 1.md、4-11、4-16、4-18 的 final DOM shell 口径;旧 JS renderer/state machine 只作为 legacy iframe host 保留。",
|
||
"timestamp": "2026-04-28T04:40:14Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-28T04:40:14Z"
|
||
},
|
||
{
|
||
"id": "task-014",
|
||
"title": "Phase L2:删除 normalizedMove fallback,强制 move 主写路径使用 treeWriteOperation",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [
|
||
"task-013"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "81ba21c5",
|
||
"source_doc": "design/04-tree-domain/done/4-16-tree-rust-family-remaining-final-runtime-checklist-v1.md",
|
||
"scope": [
|
||
"rust/crates/bridge-runtime/src/lib.rs",
|
||
"wolai-frontend/convex/documents.ts",
|
||
"wolai-frontend/convex/_utils/documentMoveOrder.ts",
|
||
"wolai-frontend/src/lib/documents/rust-runtime.ts",
|
||
"wolai-frontend/src/lib/documents/*move*test.ts",
|
||
"wolai-frontend/src/lib/documents/rust-runtime.test.ts"
|
||
],
|
||
"acceptance": [
|
||
"bridge-runtime 不再输出 normalizedMove 作为 documents.move 参数",
|
||
"Convex documents.move 不再接受 normalizedMove fallback;缺少 treeWriteOperation 时显式拒绝",
|
||
"TS Rust mutation transport 不再透传 normalizedMove",
|
||
"相关测试改为验证 treeWriteOperation 是唯一主写入计划"
|
||
],
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p bridge-runtime tree_subtree_move_command && cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/lib/documents/document-move-order.test.ts src/lib/documents/document-move-order-convex.test.ts src/lib/documents/rust-runtime.test.ts src/app/api/tree/commands/route.test.ts",
|
||
"timeout_seconds": 3000
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已删除 normalizedMove fallback:Rust plan 不再输出 normalizedMove,TS transport 强制 treeWriteOperation,Convex documents.move 只接受 treeWriteOperation;目标 Rust/Vitest 通过。",
|
||
"timestamp": "2026-04-28T06:37:40Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-28T06:37:40Z"
|
||
},
|
||
{
|
||
"id": "task-015",
|
||
"title": "Phase M2:定稿 document.snapshot.saved 独立事件并避免与 page.body.saved payload 重叠",
|
||
"status": "completed",
|
||
"priority": "P0",
|
||
"depends_on": [
|
||
"task-014"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "81ba21c5",
|
||
"source_doc": "design/04-tree-domain/done/4-16-tree-rust-family-remaining-final-runtime-checklist-v1.md",
|
||
"scope": [
|
||
"rust/crates/bridge-runtime/src/lib.rs",
|
||
"wolai-frontend/src/lib/documents/rust-runtime.ts",
|
||
"wolai-frontend/src/lib/documents/bridge-log.ts",
|
||
"wolai-frontend/src/lib/documents/*test.ts"
|
||
],
|
||
"acceptance": [
|
||
"page.body.saved 保留正文保存事件语义",
|
||
"snapshot 版本/hash/updatedAt 拆入 document.snapshot.saved 独立 domain event plan 或 artifact plan",
|
||
"SSE 对 snapshot 独立事件有明确 resync 或 noop 策略",
|
||
"测试覆盖两个事件不再 payload 重叠"
|
||
],
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p bridge-runtime documents_save_command_plans_include_formal_domain_event_contract && cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/lib/documents/rust-runtime.test.ts src/lib/documents/bridge-log.test.ts src/lib/documents/page-write-command-adapter.test.ts",
|
||
"timeout_seconds": 3000
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已将 page.body.saved 与 document.snapshot.saved 拆成 domainEventPlans 双事件;artifact writer 支持 domainEvents 批量落库,page.body.saved payload 不再夹带 snapshot。",
|
||
"timestamp": "2026-04-28T07:44:37Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-28T07:44:37Z"
|
||
},
|
||
{
|
||
"id": "task-016",
|
||
"title": "Phase M3:把 snapshot 独立事件接入 Page Aggregate 深层收口文档与客户端边界",
|
||
"status": "completed",
|
||
"priority": "P1",
|
||
"depends_on": [
|
||
"task-015"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "81ba21c5",
|
||
"source_doc": "design/04-tree-domain/done/4-16-tree-rust-family-remaining-final-runtime-checklist-v1.md",
|
||
"scope": [
|
||
"wolai-frontend/src/components/editor/page-aggregate*",
|
||
"wolai-frontend/src/lib/documents/page-aggregate*",
|
||
"design/05-editor-mainline/process",
|
||
"design/04-tree-domain/done/4-16-tree-rust-family-remaining-final-runtime-checklist-v1.md"
|
||
],
|
||
"acceptance": [
|
||
"Page Aggregate 文档明确 page.body.saved 与 document.snapshot.saved 的职责边界",
|
||
"客户端 Page Aggregate 状态不再把 snapshot 保存当作正文保存的附带语义",
|
||
"4-16 对应 snapshot/Page Aggregate 项可勾选或明确剩余迁移边界"
|
||
],
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/components/editor/page-aggregate-client-state.test.ts src/lib/documents/page-aggregate-builder.test.ts src/lib/documents/page-write-command-adapter.test.ts && git diff --check -- design/04-tree-domain design/05-editor-mainline wolai-frontend/src/components/editor wolai-frontend/src/lib/documents",
|
||
"timeout_seconds": 2400
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已更新 Page Aggregate contract 与 5-6 清单,固定 page.body.saved 与 document.snapshot.saved 的职责边界,并同步 4-16 勾选状态。",
|
||
"timestamp": "2026-04-28T07:44:37Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-28T07:44:37Z"
|
||
},
|
||
{
|
||
"id": "task-017",
|
||
"title": "Phase N2:将 tree.node.embed 的 pageReference 组装迁到 Page Aggregate / Rust artifact 边界",
|
||
"status": "completed",
|
||
"priority": "P1",
|
||
"depends_on": [
|
||
"task-015"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "81ba21c5",
|
||
"source_doc": "design/04-tree-domain/done/4-16-tree-rust-family-remaining-final-runtime-checklist-v1.md",
|
||
"scope": [
|
||
"rust/crates/bridge-runtime/src/lib.rs",
|
||
"wolai-frontend/src/app/api/tree/commands/route.ts",
|
||
"wolai-frontend/src/lib/documents/page-command-adapter.ts",
|
||
"wolai-frontend/src/lib/tree-route-boundary.ts",
|
||
"wolai-frontend/src/app/api/tree/commands/route.test.ts"
|
||
],
|
||
"acceptance": [
|
||
"3000 route 不再本地决定 pageReference block 的结构与插入位置语义",
|
||
"Rust plan 或 Page Aggregate artifact 接收 source/target/anchor/content snapshot 并产出 next content 或 block patch plan",
|
||
"tree-route-boundary manifest 移除该 compatPending 项",
|
||
"测试覆盖 tree.node.embed 的 pageReference 组装来源已迁移"
|
||
],
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p bridge-runtime documents_embed_command_plan_maps_to_documents_update_content tree_embed_and_copy_aliases_keep_tree_command_names && cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/app/api/tree/commands/route.test.ts src/lib/tree-route-boundary.test.ts src/lib/documents/rust-runtime.test.ts",
|
||
"timeout_seconds": 3000
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已新增 Rust pageAggregateEmbedPlan;3000 route 与 documents.embed adapter 只传 source/target/anchor/content snapshot preflight,不再本地决定 pageReference block 结构与插入位置。",
|
||
"timestamp": "2026-04-28T07:44:37Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-28T07:44:37Z"
|
||
},
|
||
{
|
||
"id": "task-018",
|
||
"title": "Phase O2:补 file_tree 搜索索引可见性指标边界并收口 4-16",
|
||
"status": "completed",
|
||
"priority": "P2",
|
||
"depends_on": [
|
||
"task-014"
|
||
],
|
||
"attempts": 1,
|
||
"max_attempts": 3,
|
||
"started_at_commit": "81ba21c5",
|
||
"source_doc": "design/04-tree-domain/done/4-16-tree-rust-family-remaining-final-runtime-checklist-v1.md",
|
||
"scope": [
|
||
"rust/crates/bridge-runtime/src/lib.rs",
|
||
"rust/crates/mnote-web/src/routes/kernel.rs",
|
||
"wolai-frontend/src/lib/server/kernel-file-tree.ts",
|
||
"wolai-frontend/src/app/api/tree/projections/file/route.ts",
|
||
"design/04-tree-domain/done/4-16-tree-rust-family-remaining-final-runtime-checklist-v1.md"
|
||
],
|
||
"acceptance": [
|
||
"file_tree 搜索 projection 输出稳定 indexing/visibility meta,不再只是临时 request meta",
|
||
"3000 同源 projection route 透传该 meta",
|
||
"move-embed picker/file tree 搜索可观察 index visibility 状态",
|
||
"4-16 中 Phase O 未完成项完成或明确转为非树域 runtime 后续"
|
||
],
|
||
"validation": {
|
||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p bridge-runtime file_tree && cargo test -p mnote-web file_tree_projection && cd /mnt/Data1T/mnote/wolai-frontend && pnpm vitest run src/app/api/tree/projections/file/route.test.ts src/lib/tree-stream/tree-delta.test.ts",
|
||
"timeout_seconds": 3000
|
||
},
|
||
"on_failure": {
|
||
"cleanup": null
|
||
},
|
||
"error_log": [],
|
||
"checkpoints": [
|
||
{
|
||
"step": 1,
|
||
"total": 1,
|
||
"description": "已把 file_tree 搜索 indexingVisibility 提升为 projection result meta;mnote-web 与 3000 同源 projection route 均透传该指标,4-16 Phase O 已收口。",
|
||
"timestamp": "2026-04-28T07:44:37Z"
|
||
}
|
||
],
|
||
"completed_at": "2026-04-28T07:44:37Z"
|
||
}
|
||
],
|
||
"session_count": 8,
|
||
"last_session": "2026-04-28T07:44:37Z",
|
||
"final_renderer_gate": {
|
||
"source_doc": "design/04-tree-domain/process/4-18-tree-final-dom-shell-cutover-hard-gate-v1.md",
|
||
"status": "completed",
|
||
"note": "task-001 至 task-009 只代表 Rust/WASM reducer runtime 阶段完成;不得再把 inline iframe srcdoc host 视为 final Rust DOM renderer。"
|
||
},
|
||
"final_runtime_remaining": {
|
||
"source_doc": "design/04-tree-domain/done/4-16-tree-rust-family-remaining-final-runtime-checklist-v1.md",
|
||
"status": "completed",
|
||
"tasks": [
|
||
"task-014",
|
||
"task-015",
|
||
"task-016",
|
||
"task-017",
|
||
"task-018"
|
||
]
|
||
}
|
||
}
|