feat(tree): complete rust family runtime checklist
- add tree shell runtime artifact contracts and page/filetree/picker runtime reducers - sink tree.subtree.move write operation through Rust and formalize command event plans - harden file tree search projection contract and route thin-proxy boundaries - record completed harness tasks and move design docs into process/done
This commit is contained in:
+250
-232
@@ -1,256 +1,274 @@
|
||||
{
|
||||
"version": 2,
|
||||
"created": "2026-04-19T15:01:07Z",
|
||||
"created": "2026-04-26T23:16:13Z",
|
||||
"session_config": {
|
||||
"concurrency_mode": "exclusive",
|
||||
"max_tasks_per_session": 8,
|
||||
"max_tasks_per_session": 9,
|
||||
"max_sessions": 80
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "task-001",
|
||||
"title": "执行 P0.5-1:冻结主编辑器接入点与 runtime shell 退场策略,明确真实文档页切流入口、flag、debug/prototype 边界",
|
||||
"title": "Phase K-1:定义 tree shell Rust runtime artifact 边界",
|
||||
"status": "completed",
|
||||
"priority": "P0",
|
||||
"depends_on": [],
|
||||
"attempts": 1,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": "a0edc9d1",
|
||||
"started_at_commit": "6d89f5ca",
|
||||
"validation": {
|
||||
"command": "python3 - <<'PY'\nfrom pathlib import Path\npath = Path('/mnt/Data1T/mnote/design/05-editor-mainline/process/5-1-main-editor-cutover-entry-v1.md')\ntext = path.read_text(encoding='utf-8')\nassert '主编辑器接入点' in text\nassert 'runtime shell' in text\nassert 'debug/prototype' in text\nprint('task-001-cutover-entry-doc-ok')\nPY",
|
||||
"timeout_seconds": 120
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [
|
||||
{
|
||||
"step": 1,
|
||||
"total": 1,
|
||||
"description": "已冻结真实文档页主链、DocumentContent 接入点、切流 flag 归属,以及 runtime shell 仅保留 debug/prototype 的边界。",
|
||||
"timestamp": "2026-04-19T15:29:25Z"
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-04-19T15:29:25Z"
|
||||
},
|
||||
{
|
||||
"id": "task-002",
|
||||
"title": "执行 P0.5-2:把 leptos-tiptap host 接入真实文档页壳与真实路由,退出 localhost:8123 作为唯一验证入口的状态",
|
||||
"status": "completed",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-001"
|
||||
],
|
||||
"attempts": 1,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": "a0edc9d1",
|
||||
"validation": {
|
||||
"command": "cd /mnt/Data1T/mnote/wolai-frontend && pnpm test src/components/editor/main-editor-host.test.tsx && cd /mnt/Data1T/mnote && node test/scripts/block-editor-main-editor-smoke.js",
|
||||
"timeout_seconds": 900
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [
|
||||
{
|
||||
"step": 1,
|
||||
"total": 1,
|
||||
"description": "已改为真实 /documents/[id] 承载 8123 runtime,去掉 bridge 假壳,补齐 embed/postMessage 协议,并通过自动拉起 8123 的 smoke 验收截图。",
|
||||
"timestamp": "2026-04-19T18:24:24Z"
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-04-19T18:24:24Z"
|
||||
},
|
||||
{
|
||||
"id": "task-003",
|
||||
"title": "执行 P0.5-3:引入稳定 block_id 策略,明确 Rust EditorBlock.block_id 为真相,Tiptap UniqueID 仅作 runtime 辅助",
|
||||
"status": "pending",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-001"
|
||||
],
|
||||
"attempts": 0,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": null,
|
||||
"validation": {
|
||||
"command": "cargo test -p core-protocol editor_block_id && cargo test -p mnote-web editor_block_id_bridge",
|
||||
"timeout_seconds": 600
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [],
|
||||
"completed_at": null
|
||||
},
|
||||
{
|
||||
"id": "task-004",
|
||||
"title": "执行 P0.5-4:打通 EditorBlockDocument -> Tiptap doc 最小 load adapter,先覆盖 Paragraph/Heading/BulletListItem/NumberedListItem/Todo/Quote/CodeBlock",
|
||||
"status": "pending",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-002",
|
||||
"task-003"
|
||||
],
|
||||
"attempts": 0,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": null,
|
||||
"validation": {
|
||||
"command": "cargo test -p mnote-web tiptap_load_adapter && cargo test -p mnote-editor-core editor_block_roundtrip_load",
|
||||
"timeout_seconds": 900
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [],
|
||||
"completed_at": null
|
||||
},
|
||||
{
|
||||
"id": "task-005",
|
||||
"title": "执行 P0.5-5:打通 Tiptap doc -> EditorBlockDocument 最小 save adapter,并把真实页面保存链接到 Rust truth",
|
||||
"status": "pending",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-002",
|
||||
"task-003",
|
||||
"task-004"
|
||||
],
|
||||
"attempts": 0,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": null,
|
||||
"validation": {
|
||||
"command": "cargo test -p mnote-web tiptap_save_adapter && cargo test -p mnote-editor-core editor_block_roundtrip_save",
|
||||
"timeout_seconds": 900
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [],
|
||||
"completed_at": null
|
||||
},
|
||||
{
|
||||
"id": "task-006",
|
||||
"title": "执行 P0.5-6:对齐最小块类型映射与 reload/re-enter 稳定性,确保常用块在真实页面中可稳定往返",
|
||||
"status": "pending",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-004",
|
||||
"task-005"
|
||||
],
|
||||
"attempts": 0,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": null,
|
||||
"validation": {
|
||||
"command": "cargo test -p core-protocol editor_block_schema && cargo test -p mnote-web editor_reload_roundtrip",
|
||||
"timeout_seconds": 900
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [],
|
||||
"completed_at": null
|
||||
},
|
||||
{
|
||||
"id": "task-007",
|
||||
"title": "执行 P0.5-7:对齐最小 EditorCommand 合同,先覆盖 ReplaceBlock/InsertBlockAfter/DeleteBlock/SplitBlock/MergeWithPrevious/MoveBlock",
|
||||
"status": "pending",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-005",
|
||||
"task-006"
|
||||
],
|
||||
"attempts": 0,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": null,
|
||||
"validation": {
|
||||
"command": "cargo test -p core-protocol editor_command_catalog && cargo test -p mnote-web editor_command_mapping",
|
||||
"timeout_seconds": 900
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [],
|
||||
"completed_at": null
|
||||
},
|
||||
{
|
||||
"id": "task-008",
|
||||
"title": "执行 P0.5-8:把当前已有的 slash、floating toolbar、左侧手柄、块菜单、turn into 迁入主编辑器,并按官方行为模型微调",
|
||||
"status": "pending",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-002",
|
||||
"task-006"
|
||||
],
|
||||
"attempts": 0,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": null,
|
||||
"validation": {
|
||||
"command": "cargo test -p mnote-web tiptap_surface_ui && cd /mnt/Data1T/mnote && node test/scripts/block-editor-interaction-smoke.js",
|
||||
"timeout_seconds": 1200
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [],
|
||||
"completed_at": null
|
||||
},
|
||||
{
|
||||
"id": "task-009",
|
||||
"title": "执行 P0.5-9:为图片上传、表格、页面引用、块引用、heading collapse、普通块缩进增强建立显式降级和 feature guard,避免污染正式合同",
|
||||
"status": "pending",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-004",
|
||||
"task-005"
|
||||
],
|
||||
"attempts": 0,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": null,
|
||||
"validation": {
|
||||
"command": "cargo test -p mnote-web editor_feature_guards && python3 - <<'PY'\nfrom pathlib import Path\npath = Path('/mnt/Data1T/mnote/design/05-editor-mainline/process/5-1-main-editor-cutover-entry-v1.md')\ntext = path.read_text(encoding='utf-8')\nassert '未支持能力降级' in text or '降级策略' in text\nprint('task-009-feature-guard-doc-ok')\nPY",
|
||||
"timeout_seconds": 600
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [],
|
||||
"completed_at": null
|
||||
},
|
||||
{
|
||||
"id": "task-010",
|
||||
"title": "执行 P0.5-10:建立主编辑器验收链路,覆盖打开文档、编辑常用块、slash 插入、turn into、刷新保留、再次进入保留",
|
||||
"status": "pending",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-005",
|
||||
"task-006",
|
||||
"task-007",
|
||||
"task-008",
|
||||
"task-009"
|
||||
],
|
||||
"attempts": 0,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": null,
|
||||
"validation": {
|
||||
"command": "cd /mnt/Data1T/mnote && node test/scripts/block-editor-main-editor-acceptance.js && cargo test -p mnote-web main_editor_acceptance",
|
||||
"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": [],
|
||||
"completed_at": null
|
||||
"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"
|
||||
}
|
||||
],
|
||||
"session_count": 2,
|
||||
"last_session": "2026-04-19T18:24:24Z"
|
||||
"session_count": 3,
|
||||
"last_session": "2026-04-27T00:41:58Z"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user