图例配置持久化
图视图的图例配置(每种节点类型的颜色、标题模板、配色规则,以及每种关系的线型与箭头)保存在项目内的 backlog/databases/graph-legends.yaml,随 git 版本化。此前它只存在浏览器的本地存储里,换浏览器、换设备或清缓存就会丢失,团队各人看到的同一张图也不一样;文档里的 Cypher 查询块(view: graph)的配色甚至取决于阅读者的浏览器而不是项目本身。
配置文件长什么样
单个 YAML 文件,按数据库名分组:
default:
captionsVisible: true
types:
Person:
caption: "{{name}}"
color: "#204af3"
rules: []
relations:
WORKS_AT:
dash: solid
arrow: end
color: "#0ef19a"
hidden: []
块状 YAML、LF 行尾,便于 review、diff 与手工编辑。字段缺失或规则写坏不会让界面崩溃——读取时按容错规则降级。
四个入口,同一份文件
| 入口 | 用法 |
|---|---|
| 图例设置面板 | 齿轮按钮打开,修改即时预览,保存即写入文件 |
| CLI | backlog graph legend get <database>(默认人类可读摘要,--json 输出原始 JSON)/set <database> <file>(--stdin 从标准输入读)/remove <database>(幂等) |
| MCP | graph_legend_get / graph_legend_set / graph_legend_remove 三个工具,代理无需手改文件 |
| 手工编辑 | 直接用编辑器改 YAML |
四条路径读写的是同一份文件,任一处的改动在其他处都可见。
启动恢复与本地缓存
浏览器打开时先用本地缓存渲染首帧(零延迟、离线可用),随后向服务端取项目文件:
- 项目里有配置且与本地不同 → 采用项目版本,并回写本地缓存。
- 项目里没有而本地有 → 把本地配置上传一次完成迁移,老配置不会丢。
- 两边都没有 → 维持默认配色。
保存时先写本地(即时生效)再写入文件;写入失败不会中断操作,本地副本保留,下次打开时自动重试迁移。服务端不可达时行为与纯本地缓存时代一致。
跨标签页与带外修改的热更新
图例保存后会广播更新,同一项目其他已打开的标签页会立即应用。用 CLI、MCP 或编辑器在外部改动该文件时,服务端的文件监听会把变化转成同样的广播——不需要刷新页面。
一次真正的变化只刷新一次:内容完全相同的重写(包括只调整字段顺序)不会触发任何刷新;删除本就不存在的条目也是静默无操作。
自动配色会被记进文件
保存时会为没有显式指定颜色的类型写入它当前实际被绘制的颜色,因此文件记录的是读者看到的完整画面,而不是留待每次打开时按类型名重新推导。在面板里把某个类型的颜色点回「×」即可恢复自动配色。
冲突策略
同一配置的并发写入采用后写者胜,不做合并——图例是低频的单人配置。文件写入是原子的(临时文件 + 重命名),不会留下半截文件。