行级差异与合并策略
Graft 存储 SQLite snapshot,但应用通常关心 rows、schema entries 和业务对象。 row diff 和 merge policy 把这两层连接起来。
Repository Diff 与 Row Diff
Section titled “Repository Diff 与 Row Diff”repository diff 说明哪个路径变了:
modified data.sqlitemodified attachments/report.pdfrow diff 会把 data.sqlite 展开成支持的逻辑变化:
table docs row 42 updated row 43 insertedgraft diff --json --rows HEAD~1 HEAD data.sqliteSupported Surfaces
Section titled “Supported Surfaces”当前公开概念包括:
- ordinary rowid tables 的 row changes
- 具有声明主键的
WITHOUT ROWIDtables 的 row changes,包括STRICTschema 中带类型的单列或复合主键 sqlite_schema中的 schema entries- opaque-table detection
- semantic keys 产生的 insert conflicts
- virtual table、FTS shadow table、SQLite internal table、index B-tree、 UTF-16 text、generated columns 等 limitations
Unsupported 不表示忽略,而是输出 caveat 或保持 conservative conflict。
Merge Policy
Section titled “Merge Policy”[merge]default_semantic_keys = ["_id"]
[merge.semantic_keys]docs = ["id"]
[merge.internal_resolvers]sqlite_sequence = "sequence_max"index_btree = "reindex"如果 Graft 不能证明 merge 安全,它会留下结构化冲突,由应用 UI 展示和解决。