Skip to content

Commit 1987161

Browse files
committed
feat(view): evaluate tree filters
Signed-off-by: Eli Ma <eli@patch.sh>
1 parent 4a29604 commit 1987161

6 files changed

Lines changed: 1891 additions & 5 deletions

File tree

‎Cargo.lock‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mega2"
3-
version = "0.41.76"
3+
version = "0.41.77"
44
edition = "2024"
55
license = "MIT OR Apache-2.0"
66
description = "Monorepo engine and Git hosting server for AI agents: trunk-based storage, Git Smart HTTP, Git LFS, OCI registry, and Agent Session Capture"

‎docs/plan/plan-20261002.md‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151
| 2026-10-06 | HP-35 发布完成 | `v0.41.75` 承载提交 `5635d7b`、注释 tag 与 GitHub Release 已创建;Docker D 组 run `37348697475` 成功。 | 无拆卡 | HP-35、计划状态、ER-04 C/D |
152152
| 2026-10-06 | HP-04 本地验收与 ER-05 复审 | Claude HP04-R3 PASS、Codex HP04-R4 PASS;六条定向验证、静态守卫、格式、Clippy、全量测试与构建门通过。`v0.41.76` 等待推送、tag、Release 与 Docker D 组。 | 无拆卡 | HP-04、设计 §4.1、Review log、ER-04 C/D |
153153
| 2026-10-06 | HP-04 发布完成 | `v0.41.76` 承载提交 `e0168b8`、注释 tag 与 GitHub Release 已创建;Docker D 组 run `37361254668` 成功。 | 无拆卡 | HP-04、计划状态、ER-04 C/D |
154+
| 2026-10-06 | HP-27 实施与 ER-05 复审 | 新增 `filter_tree`、有界 memo 与空树规范;六个定向/性质用例覆盖 AC 1–8。Claude HP27-R6 PASS;格式、Clippy、全量测试与两个构建门通过;设计 §4.1 与 §7.3 R8 的空树差异已在发布窗口同步。 | 无拆卡 | HP-27、设计 §4.1/§7.3、Review log、ER-04 C/D |
154155

155156
## 已决议设计决策
156157

@@ -1288,7 +1289,7 @@ EMPTY_TREE 的依据:
12881289

12891290
**Task type:** `implementation`
12901291

1291-
**Lifecycle / Acceptance:** `pending` / 空
1292+
**Lifecycle / Acceptance:** `in-progress` / `locally-accepted`
12921293

12931294
**Description:** 自 HP-04 拆出。在 `src/ceres/view/tree.rs` 中实现设计 §4.1 的 `filter_tree`,唯一的行为轴是「过滤器 AST × tree → 过滤后 tree 与新建 tree 集合」。范围:
12941295
- 签名为 `filter_tree(kind, source, memo, filter, tree) -> Result<FilterOutput, FilterTreeError>`,类型名与参数名以实现为准。kind 由调用方显式传入,`source` 是 HP-04 的 `TreeSource`。输入 `tree` 与结果 id 都是 hex 文本形式的 tree id,与 HP-04 `read_tree` 的 id 同一表示;输入 id 本身不携带 kind,按传入的 kind 解释。
@@ -5974,6 +5975,11 @@ Result 只允许 `PASS` 或 `FAIL`。`FAIL` 必须列出 P0/P1 条目,并在
59745975
| HP04-R2 | HP-04 P1 修订,Claude Code 只读复审 | PASS | P0 0;P1 0 | P2:零段读取语义、建树错误变体与「未预取」措辞均在 HP04-R3 前补齐 | `target/tmp/hp04/review-r2.txt` |
59755976
| HP04-R3 | HP-04 最终实现,Claude Code 只读复审 | PASS | P0 0;P1 0 | P2 0:零段行为有注释和用例;建树错误类型有断言;设计文字补全;EMPTY_TREE 大写 hex 用例已通过 | `target/tmp/hp04/review-r3.txt` |
59765977
| HP04-R4 | HP-04 当前差异,Codex 独立复审 | PASS | P0 0;P1 0;P2 0 | 共享解析、显式 kind、读取边界、重名与 EMPTY_TREE 契约同卡片一致 | 六条 HP-04 Verification、模块测试、静态守卫与当前差异 |
5978+
| HP27-R1 | HP-27 初始实现与验收测试,Claude Code 只读审查 | FAIL | P0 0;P1:AC 3–8 的错误恢复、随机规范化与源路径读性质覆盖不足。后续轮次关闭 | P2:memo 计量替换修复与空选择器短路已采纳 | `target/tmp/hp27-review-r1.txt` |
5979+
| HP27-R2 | HP-27 扩展验收测试,Claude Code 只读复审 | FAIL | P0 0;P1:全空 Compose、每个 Missing 重试与随机样本筛选仍未逐项证明。后续轮次关闭 | P2:算子表与 EMPTY_TREE 缺失变体已补齐 | `target/tmp/hp27-review-r2.txt` |
5980+
| HP27-R3–R4 | HP-27 语义与测试加固,Claude Code 只读复审 | PASS | P0 0;P1 0 | 深层随机路径、共享路径重叠辅助函数与外部子树可读性已加固 | `target/tmp/hp27-review-r3.txt`、`target/tmp/hp27-review-r4.txt` |
5981+
| HP27-R5 | HP-27 最终审查,Claude Code 只读审查 | FAIL | P0 0;P1:缺少 §2.3 规则 2 相邻 Subdir/Prefix 合并的定向用例。HP27-R6 关闭 | P2:文档锚点及测试直接构造写法不影响当前语义 | `target/tmp/hp27-review-r5.txt` |
5982+
| HP27-R6 | HP-27 最终实现与验收,Claude Code 独立复审 | PASS | P0 0;P1 0 | 发布者接受三项 P2 residual:测试比例常量为共享 helper 常量;部分手写 AST 经 parser canonical;解析器不可构造的空结构 AST memo key 碰撞无生产可达性 | `target/tmp/hp27-review-r6.txt`;6 条 HP-27 focused tests、ER-04 C 组 |
59775983

59785984
## 非目标与延后项
59795985

‎docs/refactoring/history-projection.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -715,7 +715,7 @@ fn filter_tree(F, T) -> Result<TreeId, MissingObject>:
715715
Chain(fs) => try_fold(fs, T, filter_tree)?
716716
return Ok(r)
717717
```
718-
**空树规范(冻结进 v1)【决策】**,与 Josh 一致【代码】:Josh `tree.rs::replace_child_inner` 中有 `remove = oid == null || oid == empty_id()`,`subtract_inner` 在结果为空时删除整个条目。规则如下:
718+
**空树规范(冻结进 v1)【决策】**,与 Josh 一致(被重写层的兄弟空树条目除外,见 §7.3 R8)【代码】:Josh `tree.rs::replace_child_inner` 中有 `remove = oid == null || oid == empty_id()`,`subtract_inner` 在结果为空时删除整个条目。规则如下:
719719
- 任何新建的 tree 都不写入指向 EMPTY_TREE 的条目。某一层在删除或替换之后没有条目了,该层的结果就是 EMPTY_TREE,同时在父层删掉对应条目,逐级向上传递。
720720
- `Prefix(p)` 作用于 EMPTY_TREE 时,结果是 EMPTY_TREE。
721721
- `Exclude(S)` 删掉命中的条目后,按上一条剪掉被删空的祖先目录;根被删空时返回 EMPTY_TREE。
@@ -1377,7 +1377,7 @@ P1 的清扫周期,以及闲置阈值 `idle_recycle_secs`(下界为 2T = 720
13771377
| R5 投影滞后 | 只读视图是最终一致的 | 未就绪返回 503;有界同步追赶;补偿任务;指标 `view_projection_lag_commits` |
13781378
| R6 表膨胀与 GC | 见 7.2 | 游程映射;注册上限;按 `last_access_at` 加引用不变式回收,带宽限期;可选不持久化提交字节 |
13791379
| R7 根提交作者可读性差 | 产品写 API、review 合并、attach 的作者仍是 mega 身份 | 为 L0 写入者另立 ADR,不阻塞本设计 |
1380-
| R8 与 Josh 的语义差异 | Compose 不相交判定偏保守;规范化不完备;签名默认删除,且同时删除 gpgsig-sha256;不移植 nop 恒等;L0 含空子树条目时,中间级空根规则无法复现 | 在文档中写明;对应的 Josh 用例改成负向测试,或者不移植 |
1380+
| R8 与 Josh 的语义差异 | Compose 不相交判定偏保守;规范化不完备;签名默认删除,且同时删除 gpgsig-sha256;不移植 nop 恒等;L0 含空子树条目时,中间级空根规则无法复现;被重写的祖先 tree 不保留指向 EMPTY_TREE 的兄弟条目,Josh(`tree.rs::seed_entries`)原样保留 | 在文档中写明;对应的 Josh 用例改成负向测试,或者不移植 |
13811381
| R9 越权写入(P2) | Exclude 逆运算、同名覆盖、值域外内容、import 命名空间、根级文件、root_dirs 白名单、源路径删除 | 2.5 的更正;可推送视图的约束;2.7 的三项校验;按每个源路径授权;默认不允许匿名推送 |
13821382
| R10 推送后客户端分叉(P2) | 视图推送不能往返恒等 | sideband 对齐提示(ADR-TP-18);可推送视图的 advertise 读到自己的写入;Libra 侧提示 reset |
13831383
| R11 根链非线性或不连续 | 遗留数据、review 形态的根路径 CL 合并、根 ref 被人工回滚 | 只支持 trunk;建链和扩展时都校验,一旦发现就停下、返回 503 并告警;附录 E 留到 P2。合法的长滞后不算不连续:回走预算用尽只返回"未追上",由暂存表续扫(3.3) |

‎src/ceres/view/mod.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
pub mod filter;
2+
pub mod tree;
23
pub mod tree_source;
34

45
pub const VIEW_URL_RESERVED_NAMES: [&str; 2] = [".view", ".filter"];

0 commit comments

Comments
 (0)