空间与项目
Notarium 区分两种组织单元:空间(space)——隔离的知识库,也是安全边界;项目(project)——空间内被打上标签的文件夹。它们是职责不同的两种实体:空间负责隔离,项目负责组织。
空间——隔离的单元
空间是一个自成一体的知识库:拥有各自的索引、图谱、搜索、目录树、历史日志,以及各自的成员集合。空间之间互不重叠:一个空间的笔记、搜索和链接在另一个空间中不可见。空间同时承担两种角色——组织(“个人” /“工作” /“归档”)和安全边界:正是在空间这一层决定谁能看到什么。
- 每个空间由恰好一个引擎实例提供服务——隔离由架构本身保证。
- 空间的身份是稳定的内部
space_id;slug(URL 安全:小写拉丁字母、数字、连字符和下划线——[a-z0-9_-])是可重命名的地址和 URL 句柄,而displayName是人类可读的标签。重命名 slug 是安全的:旧名称会进入别名历史并继续解析(/s/<old>会重定向到当前名称)。 - 寻址方式:界面中用
/s/<slug>,REST 中用/api/s/<slug>/…。
有关角色和隐私的更多内容,参见访问模型。
个人空间
每个用户都必定拥有一个个人空间——其默认主页:
- 它在账户开通时创建,且不可删除;
- 它作为默认落地页,并保存代理关于你和你个人资料的私有记忆;
- 它是一个功能完整的工作空间:无需另行设置,你就能立即开始记笔记和标记项目。
个人空间无法邀请第二位成员
这是个人空间与普通空间的唯一区别。拥有读取权限的其他成员会看到你的私有记忆和个人笔记——因此对个人空间的邀请是在服务端被禁止的,而不仅仅是在界面中隐藏。
项目——被打上标签的文件夹
项目是一种轻量、可选的实体:空间内一棵被标记为项目的普通文件夹子树。内容不必存放在项目里——未打标签的文件夹依然只是文件夹。
标签是文件夹根目录下的一个点文件 .notariummeta(JSON,带有一个稳定的 id)。它随文件夹一同迁移,包括外部迁移(git、文件管理器)——项目的身份锚定在文件夹本身之中,而不仅仅在数据库里。
myspace/
├─ research/
│ └─ .notariummeta ← 打上标签的文件夹 = 项目
├─ inbox/ ← 普通文件夹(不是项目)
└─ ...
- 寻址是一个句柄
(space, slug),采用 GitLab 的group/project模型。项目的 slug 在空间内唯一;跨空间的同名项目通过space字段区分。根项目会收缩为仅<space>(例如main,而非main/main)。 - 项目的 slug 是
displayName或路径最后一段(而非整条路径)经音译得到的 kebab-case 形式。 - 给文件夹打标签、移除标签或创建 “New project” 都是人类的操作(
space:write权限)。代理不创建容器:它拥有内容,人类拥有结构。 - 创建空间会自动把它的根标记为项目——这样代理无需手动打标签就能立即写入
<space>。
项目是作用域和地址,但不是安全边界:访问决策始终取决于空间成员资格。代理如何寻址项目,参见意图工具。
要求与边界
项目依赖元数据库和本地标签存储——没有它们,项目将无法打开。