layout 与工件
内核不认识文件名,只认语义 id
Channek 内核里没有任何具体的工件文件名。凡「找某类产物在哪」,系统只写工件 kind(如 channek.entry、acme.script),实际路径按这条链解析:
kind 的默认 pattern(注册该 kind 的插件声明)
→ 被卡 layout.artifacts 逐 kind 覆盖
→ 相对条目目录解析出真实路径
这意味着:换一套目录结构 = 换一段声明,不用改任何代码。你的频道想把母版放 master/final.mp4 而不是默认位置,写一行覆盖就行。
内核只自带两个与创作域无关的 kind:
| kind | 默认 pattern | 承载 |
|---|---|---|
channek.entry | entry.md | 条目清单:一条内容的状态机(状态/所在步/阻塞原因) |
channek.project | project/{slug}.channek | 剪辑工程文件 |
其余工件 kind(口播稿、分镜、旁白轨、母版、封面……)由贡献对应步骤的插件注册——它们是具体创作域的知识,不同频道用的完全不同。
layout 段
"layout": {
"preset": "channek.default", // 布局骨架(内核默认:contentDir 'content')
"contentDir": "content", // 条目容器目录(相对工作区根)
"entryDirName": "{date}-{slug}", // 新条目目录命名模板
"sections": [ // 辅助区(情报/选题库/复盘…)
{ "id": "intel", "path": "intel", "index": "index.md" }
],
"artifacts": { // 逐 kind 覆盖默认 pattern(唯一写位置)
"acme.master": "master/final.mp4"
},
"artifactAlsoRead": { // 读时也认的备用位置(不影响写)
"acme.script": ["脚本*.md"]
},
"detect": { "anyOf": ["content"] } // 「这个目录像不像本卡的频道」的探测线索
}
关键规则:
- 写位置永远只有一个(
artifacts的 pattern);artifactAlsoRead只扩大读的范围——多个写位置意味着产物落哪不确定,那比少认一个位置严重得多; artifacts/artifactAlsoRead的语义都是替换不是追加:卡说了就完全按卡说的算;- 新建频道时按 layout 搭目录骨架(
contentDir+sections+ 卡根资源目录),打开无标记目录时按detect探测。