depa-codument 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +262 -0
- package/package.json +63 -0
- package/src/cli/commands/archive.ts +519 -0
- package/src/cli/commands/decisions.ts +123 -0
- package/src/cli/commands/engineering.ts +105 -0
- package/src/cli/commands/init.ts +54 -0
- package/src/cli/commands/list.ts +73 -0
- package/src/cli/commands/modeling.ts +105 -0
- package/src/cli/commands/show.ts +238 -0
- package/src/cli/commands/status.ts +140 -0
- package/src/cli/commands/upgrade-track.ts +385 -0
- package/src/cli/commands/upgrade-workspace.ts +138 -0
- package/src/cli/commands/validate.ts +330 -0
- package/src/cli/engineering/config.ts +68 -0
- package/src/cli/engineering/lint.ts +58 -0
- package/src/cli/engineering/merge.ts +172 -0
- package/src/cli/engineering/registry.ts +230 -0
- package/src/cli/engineering/schema.ts +126 -0
- package/src/cli/engineering/validate.ts +286 -0
- package/src/cli/index.ts +136 -0
- package/src/cli/modeling/config.ts +68 -0
- package/src/cli/modeling/lint.ts +58 -0
- package/src/cli/modeling/merge.ts +172 -0
- package/src/cli/modeling/registry.ts +229 -0
- package/src/cli/modeling/schema.ts +160 -0
- package/src/cli/modeling/validate.ts +282 -0
- package/src/cli/utils/index.ts +941 -0
- package/src/cli/utils/install.ts +291 -0
- package/src/cli/utils/spec-xml.ts +673 -0
- package/src/cli/utils/track-time.ts +75 -0
- package/src/cli/utils/vfs.ts +102 -0
- package/src/templates/codument/README.md +59 -0
- package/src/templates/codument/attractors/product.md +17 -0
- package/src/templates/codument/attractors/project.md +10 -0
- package/src/templates/codument/backlog/README.md +33 -0
- package/src/templates/codument/config/attractor-profiles.xml +31 -0
- package/src/templates/codument/config/engineering.xml +22 -0
- package/src/templates/codument/config/modeling.xml +22 -0
- package/src/templates/codument/config/operation-hooks.xml +55 -0
- package/src/templates/codument/memory/README.md +13 -0
- package/src/templates/codument/missions/README.md +125 -0
- package/src/templates/codument/sop/README.md +14 -0
- package/src/templates/codument/std/AGENTS.md +82 -0
- package/src/templates/codument/std/attractors/depa-attractor.md +572 -0
- package/src/templates/codument/std/attractors/knowledge-tiers.md +128 -0
- package/src/templates/codument/std/attractors/model-driven-docs.md +293 -0
- package/src/templates/codument/std/attractors/project-memory.md +48 -0
- package/src/templates/codument/std/docs-impl-fractal/index.md +110 -0
- package/src/templates/codument/std/docs-modeling-fractal/index.md +156 -0
- package/src/templates/codument/std/kernel-pointer.md +19 -0
- package/src/templates/codument/std/operations/README.md +30 -0
- package/src/templates/codument/std/operations/_operation-spec.md +41 -0
- package/src/templates/codument/std/operations/archive-mission.md +66 -0
- package/src/templates/codument/std/operations/archive-track.md +238 -0
- package/src/templates/codument/std/operations/artifact-sync.md +172 -0
- package/src/templates/codument/std/operations/discuss-phase.md +214 -0
- package/src/templates/codument/std/operations/discuss.md +87 -0
- package/src/templates/codument/std/operations/docs-bootstrap.md +148 -0
- package/src/templates/codument/std/operations/gap-loop.md +301 -0
- package/src/templates/codument/std/operations/impl-mission.md +167 -0
- package/src/templates/codument/std/operations/impl-quick.md +79 -0
- package/src/templates/codument/std/operations/impl-track.md +537 -0
- package/src/templates/codument/std/operations/migrate.md +337 -0
- package/src/templates/codument/std/operations/plan-mission.md +230 -0
- package/src/templates/codument/std/operations/plan-track-wave.md +231 -0
- package/src/templates/codument/std/operations/plan-track.md +579 -0
- package/src/templates/codument/std/operations/revise-track.md +136 -0
- package/src/templates/codument/std/operations/validate.md +339 -0
- package/src/templates/codument/std/operations/verify.md +184 -0
- package/src/templates/codument/std/root-agents.md +39 -0
- package/src/templates/codument/std/sop/questioning.md +98 -0
- package/src/templates/codument/std/sop/tdd.md +26 -0
- package/src/templates/codument/std/sop/validation.md +25 -0
- package/src/templates/codument/std/sop/wave-exec.md +42 -0
- package/src/templates/codument/std/sop/workflow.md +35 -0
- package/src/templates/codument/std/spec/behavior-delta.md +36 -0
- package/src/templates/codument/std/spec/behavior-registry.md +42 -0
- package/src/templates/codument/std/spec/engineering-delta.md +68 -0
- package/src/templates/codument/std/spec/engineering-node-schema.md +86 -0
- package/src/templates/codument/std/spec/engineering-registry.md +82 -0
- package/src/templates/codument/std/spec/flow-notation.md +93 -0
- package/src/templates/codument/std/spec/folder-manifest.md +99 -0
- package/src/templates/codument/std/spec/mission-xml-spec.md +249 -0
- package/src/templates/codument/std/spec/modeling-delta.md +85 -0
- package/src/templates/codument/std/spec/modeling-node-schema.md +183 -0
- package/src/templates/codument/std/spec/modeling-registry.md +49 -0
- package/src/templates/codument/std/spec/track-xml-spec.md +272 -0
- package/src/templates/codument/std/spec/xnl-format.md +301 -0
- package/src/templates/codument/workflows/README.md +15 -0
- package/src/templates/manifest.ts +177 -0
- package/src/templates/skills/README.md +38 -0
- package/src/templates/skills/codument-archive/SKILL.md +17 -0
- package/src/templates/skills/codument-archive-mission/SKILL.md +17 -0
- package/src/templates/skills/codument-archive-track/SKILL.md +17 -0
- package/src/templates/skills/codument-artifact-sync/SKILL.md +17 -0
- package/src/templates/skills/codument-code-quality-score/SKILL.md +67 -0
- package/src/templates/skills/codument-decision-tree/SKILL.md +40 -0
- package/src/templates/skills/codument-discuss/SKILL.md +17 -0
- package/src/templates/skills/codument-discuss-phase/SKILL.md +17 -0
- package/src/templates/skills/codument-docs-bootstrap/SKILL.md +17 -0
- package/src/templates/skills/codument-gap-loop/SKILL.md +17 -0
- package/src/templates/skills/codument-impl-mission/SKILL.md +17 -0
- package/src/templates/skills/codument-impl-quick/SKILL.md +17 -0
- package/src/templates/skills/codument-impl-track/SKILL.md +17 -0
- package/src/templates/skills/codument-implement/SKILL.md +14 -0
- package/src/templates/skills/codument-migrate/SKILL.md +17 -0
- package/src/templates/skills/codument-modeling-engineering-e2e/SKILL.md +74 -0
- package/src/templates/skills/codument-plan-mission/SKILL.md +17 -0
- package/src/templates/skills/codument-plan-track/SKILL.md +17 -0
- package/src/templates/skills/codument-plan-track-wave/SKILL.md +17 -0
- package/src/templates/skills/codument-revise-track/SKILL.md +17 -0
- package/src/templates/skills/codument-track/SKILL.md +14 -0
- package/src/templates/skills/codument-validate/SKILL.md +17 -0
- package/src/templates/skills/codument-verify/SKILL.md +17 -0
- package/src/types/text-assets.d.ts +9 -0
- package/src/version.ts +1 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Flow Notation 规范
|
|
2
|
+
|
|
3
|
+
复杂 operation / skill / actor drive 的流程不要只靠散文描述。凡是涉及事件路由、阶段切换、循环、分支、等待回执、失败退出的内容,用 Markdown 说明背景,用 `text` 围栏内的流程标记块表达可执行控制流。
|
|
4
|
+
|
|
5
|
+
## 开头约定
|
|
6
|
+
|
|
7
|
+
每个流程标记块开头建议先写三行自解释声明,让新读者不需要猜符号含义:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
@delimiter: -- # 块深度分隔符;根层 --,每深入一层多一个 --
|
|
11
|
+
@node: # # 流程节点前缀;对应 XML/AST 中的节点名,如 #switch / #case / #step / #loop / #return
|
|
12
|
+
@marker: ? # 块标识 / 跳转锚点前缀;如 ?event / ?confirm / ?done
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
含义:
|
|
16
|
+
|
|
17
|
+
- `@delimiter: --` 定义层级单位。`--` 是根块,`----` 是子块,`------` 是孙块。
|
|
18
|
+
- `#` 后面是流程节点名,说明这一块怎样执行:分支、步骤、循环、返回、退出等。
|
|
19
|
+
- `?` 后面是块标识,用于开闭块配对,也可作为 `#goto target="?xxx"` 的跳转锚点。
|
|
20
|
+
|
|
21
|
+
## 何时使用
|
|
22
|
+
|
|
23
|
+
使用流程标记块表达:
|
|
24
|
+
|
|
25
|
+
- operation 的程序化执行流程。
|
|
26
|
+
- SKILL.md 的全局事件路由。
|
|
27
|
+
- actor 的 `drive.md`:该 actor 收到某类消息后如何分支、何时返回给主流程。
|
|
28
|
+
- 有明确控制语义的规则:硬闸、一次一动作、等待回执、重试、漂移再收敛、收口。
|
|
29
|
+
|
|
30
|
+
不要用流程标记块表达:
|
|
31
|
+
|
|
32
|
+
- 概念解释、术语定义、字段说明。
|
|
33
|
+
- JSON schema、卡片 markup、命令示例。
|
|
34
|
+
- 单纯的注意事项列表。
|
|
35
|
+
|
|
36
|
+
## 基本语法
|
|
37
|
+
|
|
38
|
+
写在 ```` ```text ```` 围栏里:
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
@delimiter: --
|
|
42
|
+
@node: #
|
|
43
|
+
@marker: ?
|
|
44
|
+
-- #switch ?event on="当前输入 / 回执"
|
|
45
|
+
---- #case ?collect when="首次收到用户请求"
|
|
46
|
+
------ #step ?resolve
|
|
47
|
+
发起期望态补全动作;发出后停手等待回执。
|
|
48
|
+
------ /?resolve
|
|
49
|
+
---- /?collect
|
|
50
|
+
---- #case ?done when="实际态已收敛"
|
|
51
|
+
------ #return ?finish value="收口"
|
|
52
|
+
------ /?finish
|
|
53
|
+
---- /?done
|
|
54
|
+
-- /?event
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
规则:
|
|
58
|
+
|
|
59
|
+
- 开块格式:`<delimiter-depth> #node ?marker [key="value"]`。
|
|
60
|
+
- 闭块格式:`<same-depth> /?marker`。
|
|
61
|
+
- 每个块必须闭合,开闭的 `?marker` 必须一致。
|
|
62
|
+
- payload 顶格写自然语言,不需要缩进,不需要转义 `<...>`、`|`、`&`。
|
|
63
|
+
- 条件谓词是给 AI 读的自然语言,不是编译器表达式。
|
|
64
|
+
|
|
65
|
+
## 节点词汇
|
|
66
|
+
|
|
67
|
+
| 构造 | 用途 |
|
|
68
|
+
|---|---|
|
|
69
|
+
| `#switch` / `#case` / `#default` | 事件路由、状态分派、回执判因 |
|
|
70
|
+
| `#sequence` | 固定顺序执行的一组动作 |
|
|
71
|
+
| `#parallel` | 并行执行一组动作;可带 `limit` |
|
|
72
|
+
| `#step` | 单个动作或判断点 |
|
|
73
|
+
| `#if` / `#else-if` / `#else` | 局部分支 |
|
|
74
|
+
| `#loop` | 反馈循环、重试循环、reconcile loop |
|
|
75
|
+
| `#return` | 返回当前流程结果 |
|
|
76
|
+
| `#exit` | 发出动作后终止本回合,等待用户或工具回执 |
|
|
77
|
+
| `#goto` | 在同一流程块内跳到已命名锚点,慎用 |
|
|
78
|
+
| `#fail` / `#on-fail` | 明确失败和失败处理 |
|
|
79
|
+
| `#spawn` | 需要 fresh 子代理 / 独立执行者时使用 |
|
|
80
|
+
| `#call` | 调用另一个流程 / skill / SOP |
|
|
81
|
+
|
|
82
|
+
## SKILL.md 与 actor drive.md 的分工
|
|
83
|
+
|
|
84
|
+
- `SKILL.md` 写全局事件路由:先判硬闸,再按事件读取精确 paths,再发唯一真动作或等待。
|
|
85
|
+
- `actors/*/drive.md` 写 actor 内部局部流程:它收到什么、如何判断、返回什么给主流程。
|
|
86
|
+
- `contract.md` / `messages.md` 不承载复杂控制流;它们只定义契约和消息形状。
|
|
87
|
+
|
|
88
|
+
## 写法纪律
|
|
89
|
+
|
|
90
|
+
- 流程块里的每个 `#case` 只允许读取该 case 明确列出的 paths。
|
|
91
|
+
- 发出真动作后用 `#exit`,不要继续解释或追加第二个动作。
|
|
92
|
+
- 主流程等待外部回执时,明确写“等待什么回执”,避免 AI 自行用页面状态猜测。
|
|
93
|
+
- 复杂流程优先拆成“SKILL 全局路由 + actor 局部 drive”,不要把所有细节塞进一个巨大的流程块。
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# 目录职责自描述与补齐(std/spec/folder-manifest.md)
|
|
2
|
+
|
|
3
|
+
> 解决一个问题:分形 docs **不应强依赖一份中心规范**去说明"每个标准文件夹装什么"。每个文件夹应能在**自己**的 `index.md` 里**独立声明**职责;不同业务领域长出的自定义文件夹也能自带说明。本规范定义这套**自描述格式**,以及一个**补齐(backfill)机制**给缺失的文件夹补上声明。
|
|
4
|
+
>
|
|
5
|
+
> 它与 [docs-*-fractal](@codument/std/docs-modeling-fractal/index.md) 互补:分形 index 给"递归规则 + 默认类目词汇";本规范给"每个具体文件夹**就地**钉死它装什么"。层级与晋升语义见 [std/attractors/knowledge-tiers.md](@codument/std/attractors/knowledge-tiers.md)。
|
|
6
|
+
|
|
7
|
+
## 1. 目录职责块(写在该目录的 `index.md` 里)
|
|
8
|
+
|
|
9
|
+
每个**标准化文件夹**的 `index.md`,在 H1 标题下方紧跟一个**目录职责块**。两种规模:
|
|
10
|
+
|
|
11
|
+
**精简型(一行 blockquote,多数叶子类目用)**:
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
# <Folder> ...
|
|
15
|
+
|
|
16
|
+
> 目录职责 · holds: <一句话:装什么> · excludes: <一句话:不装什么> · tier: stable|dated · ⬆from: <晋升来源> · ⬇to: <晋升去向>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**完整型(plane / context / 根这种结构节点用)**:
|
|
20
|
+
|
|
21
|
+
```markdown
|
|
22
|
+
## 目录职责
|
|
23
|
+
|
|
24
|
+
- **holds**:本目录拥有……
|
|
25
|
+
- **excludes**:不属于这里的(去向)……
|
|
26
|
+
- **tier**:`stable`(就地改)| `dated`(带日期记录)
|
|
27
|
+
- **promotes_from**:上游来源层(哪些信息晋升到这里)
|
|
28
|
+
- **promotes_to**:下游去向层(这里稳定后再晋升到哪)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
字段语义(全部对齐 [knowledge-tiers.md](@codument/std/attractors/knowledge-tiers.md)):
|
|
32
|
+
|
|
33
|
+
| 字段 | 含义 | 缺省 |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `holds` | 该文件夹**装什么**(一句话边界);标准文件夹可引用分形默认类目语义 | 必填 |
|
|
36
|
+
| `excludes` | **不**装什么 + 应去哪(防止相邻目录混淆) | 相邻易混时必填 |
|
|
37
|
+
| `tier` | `stable`=owner 文档就地改;`dated`=带日期、归档不可变 | 必填 |
|
|
38
|
+
| `promotes_from` / `promotes_to` | 晋升阶梯上的上下游边 | 知识层目录必填;纯导航目录可省 |
|
|
39
|
+
|
|
40
|
+
> 这是**受控小块**,不是又一份 frontmatter。不要把真源正文塞进职责块——职责块只声明"边界与晋升边",导航仍走 index 表格。
|
|
41
|
+
|
|
42
|
+
## 2. 标准文件夹 vs 自定义文件夹
|
|
43
|
+
|
|
44
|
+
- **标准文件夹**(分形默认类目:modeling 的 `objects/policies/workflows`、impl 的 `overview/howto/rules/...` 等):职责可**继承分形默认**,职责块写一行即可(甚至只写与默认的差异)。
|
|
45
|
+
- **自定义文件夹**(某业务领域自己长出来的类目,如 `sources/ transforms/ sinks/`、`runbooks/ slas/`):分形规范**无法预知**,所以**必须**自带完整型职责块——这正是"允许在某个文件独立进行说明配置"的落点。
|
|
46
|
+
|
|
47
|
+
> 规则:**任何不在分形默认词汇表内的目录,其 `index.md` 必须有职责块**;否则视为未声明,补齐机制会标记。
|
|
48
|
+
|
|
49
|
+
## 3. 补齐机制(backfill / 补齐)
|
|
50
|
+
|
|
51
|
+
目标:不必预先在中心文件枚举所有目录;缺声明的由机制扫描补上。**幂等**——只补缺失,不覆盖人工已写的块(除非显式确认)。
|
|
52
|
+
|
|
53
|
+
步骤:
|
|
54
|
+
|
|
55
|
+
1. **扫描**:遍历 `docs/`(及按需的知识层目录),对每个含 `index.md` 的目录检查是否有合法职责块。
|
|
56
|
+
2. **判缺**:列出 (a) 缺职责块的目录;(b) 非默认词汇却无完整型块的自定义目录;(c) 职责块与实际内容/位置不符的目录。
|
|
57
|
+
3. **生成**:对每个缺口,从下列来源合成职责块——
|
|
58
|
+
- 目录**名 + 在树中的位置** → 套分形默认类目语义;
|
|
59
|
+
- 目录**实际内容**(已有哪些文件/子目录)→ 收敛 holds/excludes;
|
|
60
|
+
- [knowledge-tiers.md](@codument/std/attractors/knowledge-tiers.md) → 定 `tier` 与 `promotes_from/to`;
|
|
61
|
+
- 推断不确定时**标 TODO/uncertainty,不臆造**;自定义目录语义模糊时提请人工确认。
|
|
62
|
+
4. **写回**:把生成的精简/完整型块插到该目录 `index.md` H1 下;新增/改动登记到 `docs/migration-map.md` 若涉及路径。
|
|
63
|
+
|
|
64
|
+
触发点:
|
|
65
|
+
- **docs-bootstrap**:首次建分形 docs 时,为每个目录补齐职责块。
|
|
66
|
+
- **artifact-sync**:归档同步**新建**目录时,顺手为新目录写职责块。
|
|
67
|
+
- **validate**:作为一致性检查项(缺块 / 块与内容不符 → 报告)。
|
|
68
|
+
|
|
69
|
+
## 4. 与中心声明的关系
|
|
70
|
+
|
|
71
|
+
职责声明现在有两处,**就近优先**:
|
|
72
|
+
|
|
73
|
+
- **就地(权威)**:各目录 `index.md` 的职责块——单一事实、独立可配。
|
|
74
|
+
- **中心(导航)**:[knowledge-tiers.md](@codument/std/attractors/knowledge-tiers.md) 的分层表给"有哪些层、晋升怎么走"的总览;它**不**逐个枚举叶子目录。
|
|
75
|
+
|
|
76
|
+
冲突时以**就地职责块**为准(它离真源最近);中心表只在分层/晋升语义上兜底。
|
|
77
|
+
|
|
78
|
+
## 5. 示例
|
|
79
|
+
|
|
80
|
+
标准叶子(继承默认,一行):
|
|
81
|
+
|
|
82
|
+
```markdown
|
|
83
|
+
# Resource Objects
|
|
84
|
+
|
|
85
|
+
> 目录职责 · holds: resource context 的对象数据/行为真源 · excludes: 跨对象规则(→policies/) · tier: stable · ⬆from: track design 稳定后 · ⬇to: 代码/测试投影
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
自定义类目(必须完整型):
|
|
89
|
+
|
|
90
|
+
```markdown
|
|
91
|
+
# Transforms
|
|
92
|
+
|
|
93
|
+
## 目录职责
|
|
94
|
+
- **holds**:数据管道领域里"转换"算子的建模真源(输入/输出 schema、语义、副作用)。
|
|
95
|
+
- **excludes**:数据源(→`sources/`)、落地(→`sinks/`)、调度(→`schedules/`)。
|
|
96
|
+
- **tier**:`stable`
|
|
97
|
+
- **promotes_from**:track 中该管道的 proposal/design 稳定部分
|
|
98
|
+
- **promotes_to**:源码/测试(瞬时投影)
|
|
99
|
+
```
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# Mission XML 规范
|
|
2
|
+
|
|
3
|
+
`codument/missions/{pending,active,archived}/.../mission.xml` 是 codument mission 的**结构 / 状态 / 调度真源**。mission 是比 track 更长周期的控制面对象,用于编排多个 plan 节点和落地 track,并允许在执行中根据 evidence 或 human decision 受控重规划。
|
|
4
|
+
|
|
5
|
+
mission 不替代 track。真实代码、规范、测试和迁移仍由 `codument/tracks/<id>/track.xml` 管理。
|
|
6
|
+
|
|
7
|
+
## 1. 目录位置
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
codument/missions/
|
|
11
|
+
pending/<mission-id>/mission.xml
|
|
12
|
+
active/<mission-id>/mission.xml
|
|
13
|
+
archived/YYYY-MM-DD-<mission-id>/mission.xml
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
- `pending`:已规划但未启动。
|
|
17
|
+
- `active`:正在执行;允许受控重规划。
|
|
18
|
+
- `archived`:完成、取消、废弃或被替代。
|
|
19
|
+
|
|
20
|
+
## 2. 与 track.xml 的关系
|
|
21
|
+
|
|
22
|
+
`mission.xml` 与 `track.xml` 同构,复用三轴模型:
|
|
23
|
+
|
|
24
|
+
- `TaskSpace`:结构轴,表达 mission plan 分组、叶子任务、TrackLink 绑定和状态。
|
|
25
|
+
- `Schedule`:调度轴,表达 DAG 依赖。
|
|
26
|
+
- `Hooks`:行为轴,表达 mission reconcile、人工确认、方向审查等生命周期行为。
|
|
27
|
+
|
|
28
|
+
区别:
|
|
29
|
+
|
|
30
|
+
- 根节点是 `<Mission>`。
|
|
31
|
+
- 顶层 `TaskSpace` 默认 `cdt:child-mode="dag"`。
|
|
32
|
+
- active mission 允许受控重规划,须递增 `Metadata.Revision` 并写 report。
|
|
33
|
+
- mission 的顶层节点应是 `TaskGroup`;真正执行单元是叶子 `Task`。track creation / track execution 通过叶子 `Task` 上的 `cdt:TrackLink` 绑定真实 track。
|
|
34
|
+
|
|
35
|
+
## 3. 最小示例
|
|
36
|
+
|
|
37
|
+
```xml
|
|
38
|
+
<Mission id="runtime-evolution" version="1" xmlns:cdt="urn:codument:v1">
|
|
39
|
+
<Metadata>
|
|
40
|
+
<Status>pending</Status>
|
|
41
|
+
<Goal>重构 runtime 长周期架构</Goal>
|
|
42
|
+
<Description>先证据盘点,再设计收敛,再切片为 tracks 落地。</Description>
|
|
43
|
+
<QuestionMode>decision-tree</QuestionMode>
|
|
44
|
+
<QuestionSeverity>light</QuestionSeverity>
|
|
45
|
+
<Revision>1</Revision>
|
|
46
|
+
<CreatedAt>2026-06-27T13:56:11Z</CreatedAt>
|
|
47
|
+
<UpdatedAt>2026-06-27T13:56:11Z</UpdatedAt>
|
|
48
|
+
</Metadata>
|
|
49
|
+
|
|
50
|
+
<Ports scope="mission">
|
|
51
|
+
<MaterialBundle role="state" name="analysis" domain="mission" path="vfs://./analysis/"/>
|
|
52
|
+
<MaterialBundle role="state" name="reports" domain="mission" path="vfs://./reports/"/>
|
|
53
|
+
<MaterialBundle role="output" name="tracks" domain="codument" path="vfs://@/codument/tracks/"/>
|
|
54
|
+
</Ports>
|
|
55
|
+
|
|
56
|
+
<TaskSpace id="space_runtime-evolution" name="runtime-evolution" version="1" cdt:child-mode="dag">
|
|
57
|
+
<Description>Runtime evolution mission.</Description>
|
|
58
|
+
<SubNodes>
|
|
59
|
+
<TaskGroup id="G1" name="证据盘点" status="NOT_STARTED" order="0">
|
|
60
|
+
<Description>盘点事实源、读写路径和包边界。</Description>
|
|
61
|
+
<SubNodes>
|
|
62
|
+
<Task id="G1-T1" name="盘点事实源" status="NOT_STARTED" order="0"/>
|
|
63
|
+
<Task id="G1-T2" name="盘点包边界" status="NOT_STARTED" order="1"/>
|
|
64
|
+
</SubNodes>
|
|
65
|
+
</TaskGroup>
|
|
66
|
+
<TaskGroup id="G2" name="设计收敛" status="NOT_STARTED" order="1">
|
|
67
|
+
<Description>形成架构归属和候选 track 边界。</Description>
|
|
68
|
+
<SubNodes>
|
|
69
|
+
<Task id="G2-T1" name="形成架构方案" status="NOT_STARTED" order="0"/>
|
|
70
|
+
<Task id="G2-T2" name="确认首批 track 切片" status="NOT_STARTED" order="1">
|
|
71
|
+
<cdt:TrackLink state="candidate" id="add-runtime-data-subgraph-contracts"/>
|
|
72
|
+
</Task>
|
|
73
|
+
</SubNodes>
|
|
74
|
+
</TaskGroup>
|
|
75
|
+
<TaskGroup id="G3" name="首批 track 落地" status="NOT_STARTED" order="2">
|
|
76
|
+
<Description>创建并执行首批 track。</Description>
|
|
77
|
+
<SubNodes>
|
|
78
|
+
<Task id="G3-T1" name="创建并执行 runtime data subgraph track" status="NOT_STARTED" order="0">
|
|
79
|
+
<cdt:TrackLink state="candidate" id="add-runtime-data-subgraph-contracts"/>
|
|
80
|
+
</Task>
|
|
81
|
+
<Task id="G3-T2" name="验证首批 track 结果" status="NOT_STARTED" order="1"/>
|
|
82
|
+
</SubNodes>
|
|
83
|
+
</TaskGroup>
|
|
84
|
+
</SubNodes>
|
|
85
|
+
</TaskSpace>
|
|
86
|
+
|
|
87
|
+
<Schedule>
|
|
88
|
+
<Dag for="space_runtime-evolution">
|
|
89
|
+
<Node id="G2"><After ref="G1"/></Node>
|
|
90
|
+
<Node id="G3"><After ref="G2"/></Node>
|
|
91
|
+
</Dag>
|
|
92
|
+
</Schedule>
|
|
93
|
+
|
|
94
|
+
<Hooks>
|
|
95
|
+
<Hook on="mission:after-node">
|
|
96
|
+
<cdt:MissionReconcile max-rounds="3" on-drift="replan-or-block"/>
|
|
97
|
+
</Hook>
|
|
98
|
+
</Hooks>
|
|
99
|
+
</Mission>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## 4. Metadata
|
|
103
|
+
|
|
104
|
+
```xml
|
|
105
|
+
<Metadata>
|
|
106
|
+
<Status>active</Status>
|
|
107
|
+
<Goal>...</Goal>
|
|
108
|
+
<Description>...</Description>
|
|
109
|
+
<QuestionMode>decision-tree</QuestionMode>
|
|
110
|
+
<QuestionSeverity>light</QuestionSeverity>
|
|
111
|
+
<Revision>7</Revision>
|
|
112
|
+
<CreatedAt>...</CreatedAt>
|
|
113
|
+
<UpdatedAt>...</UpdatedAt>
|
|
114
|
+
</Metadata>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
mission status:
|
|
118
|
+
|
|
119
|
+
- `pending`
|
|
120
|
+
- `active`
|
|
121
|
+
- `completed`
|
|
122
|
+
- `cancelled`
|
|
123
|
+
- `superseded`
|
|
124
|
+
- `archived`
|
|
125
|
+
|
|
126
|
+
`Revision` 从 `1` 起。每次受控重规划必须递增。
|
|
127
|
+
|
|
128
|
+
`QuestionMode` / `QuestionSeverity` 记录 mission 规划期的问答策略,与 track.xml 保持一致:
|
|
129
|
+
|
|
130
|
+
- `QuestionMode` 当前取 `decision-tree`。
|
|
131
|
+
- `QuestionSeverity` 取 `auto|light|normal|deep`;未指定按 `light` 处理。
|
|
132
|
+
- 这两个字段只控制规划/澄清阶段,不等同于 track 的 `CommitMode`。
|
|
133
|
+
|
|
134
|
+
## 5. TaskSpace
|
|
135
|
+
|
|
136
|
+
mission TaskSpace 必须保持接近 track.xml 的结构:
|
|
137
|
+
|
|
138
|
+
- 顶层直接子节点使用 `TaskGroup`,表达可 DAG 调度的 mission 工作组(如证据盘点、设计收敛、首批落地、验证收口)。
|
|
139
|
+
- `TaskGroup` 内部使用叶子 `Task` 表达顺序执行的实际动作。
|
|
140
|
+
- mission 任务状态只写在 `TaskGroup.status` / `Task.status` 上。
|
|
141
|
+
- `cdt:TrackLink` 只允许挂在叶子 `Task` 上,不挂在 `TaskGroup` 上。
|
|
142
|
+
- 顶层 `TaskGroup` id 建议使用 `G1` / `G2` / `VERIFY` / `CLOSE` 等语义化或稳定短 id;叶子 task id 建议使用 `G1-T1` 形态。
|
|
143
|
+
|
|
144
|
+
节点状态复用 track TaskSpace 状态:
|
|
145
|
+
|
|
146
|
+
- `NOT_STARTED`
|
|
147
|
+
- `ACTIVE`
|
|
148
|
+
- `DONE`
|
|
149
|
+
- `BLOCKED`
|
|
150
|
+
- `ABANDONED`
|
|
151
|
+
- `SUPERSEDED`
|
|
152
|
+
|
|
153
|
+
如果现有 validator 只支持 track 状态枚举,第一版实现可以在 mission spec 中定义语义,后续再扩 validator。
|
|
154
|
+
|
|
155
|
+
### 5.1 TrackLink
|
|
156
|
+
|
|
157
|
+
`cdt:TrackLink` 是 mission 叶子任务与 codument track 的绑定指针,不是任务状态,也不是路径缓存。
|
|
158
|
+
|
|
159
|
+
```xml
|
|
160
|
+
<Task id="G2-T2" name="确认首批 track 切片" status="NOT_STARTED" order="1">
|
|
161
|
+
<cdt:TrackLink state="candidate" id="add-runtime-data-subgraph-contracts"/>
|
|
162
|
+
</Task>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
创建真实 track 后,`codument-impl-mission` 必须原地更新同一个节点:
|
|
166
|
+
|
|
167
|
+
```xml
|
|
168
|
+
<Task id="G2-T2" name="确认首批 track 切片" status="DONE" order="1">
|
|
169
|
+
<cdt:TrackLink state="bound" id="add-runtime-data-subgraph-contracts"/>
|
|
170
|
+
</Task>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
属性:
|
|
174
|
+
|
|
175
|
+
| 属性 | 必填 | 含义 |
|
|
176
|
+
|---|---:|---|
|
|
177
|
+
| `state` | 是 | `candidate` 或 `bound` |
|
|
178
|
+
| `id` | 是 | `candidate` 时是推荐 track id;`bound` 时是真实 track id |
|
|
179
|
+
|
|
180
|
+
禁止在 `cdt:TrackLink` 上写 `path`、`archive-path` 或 track 状态。消费者通过 `id` 解析真实位置:
|
|
181
|
+
|
|
182
|
+
- active track:`codument/tracks/<id>/track.xml`
|
|
183
|
+
- archived track:`codument/archive/**/<timestamp>-<id>/track.xml`
|
|
184
|
+
|
|
185
|
+
如果真实创建的 track id 与 candidate id 不同,直接把 `id` 更新为真实 id,并在 `reports/track-bind-XXX.md` 记录原 candidate id。
|
|
186
|
+
|
|
187
|
+
## 6. Schedule
|
|
188
|
+
|
|
189
|
+
mission 顶层默认 DAG:
|
|
190
|
+
|
|
191
|
+
```xml
|
|
192
|
+
<TaskSpace id="space_x" cdt:child-mode="dag">
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
`Schedule` 规则与 track 一致:
|
|
196
|
+
|
|
197
|
+
- `<Dag for="...">` 只描述该父节点的直接下层依赖。mission 默认只把顶层 `TaskGroup` 放进 `TaskSpace` 的 DAG。
|
|
198
|
+
- `<Node id="..."><After ref="..."/></Node>` 表示前驱。
|
|
199
|
+
- 不跨层、不跨父。
|
|
200
|
+
- 一个 `TaskGroup` 内的叶子 `Task` 默认按 `order` 顺序执行,不在 mission 顶层 `Schedule/Dag` 中描述。
|
|
201
|
+
|
|
202
|
+
## 7. Cybernetic DEPA Actors
|
|
203
|
+
|
|
204
|
+
mission execution is a cybernetic actor loop over a DAG-shaped desired state.
|
|
205
|
+
|
|
206
|
+
| Actor | 控制论角色 | DEPA 归属 | 职责 |
|
|
207
|
+
|---|---|---|---|
|
|
208
|
+
| `MissionPlanner` | 期望态产出者 | Processor + Actor | 产出或修订 desired mission graph |
|
|
209
|
+
| `MissionObserver` | 传感器 | Data + Actor | 读取 actual state projection |
|
|
210
|
+
| `MissionReconciler` | 控制器 | Processor + Actor | 比较 desired vs actual,判定 drift / ready / blocked / done |
|
|
211
|
+
| `MissionApplier` | 执行器 | Effect + Actor | 执行一个 bounded convergence action |
|
|
212
|
+
|
|
213
|
+
执行协议:
|
|
214
|
+
|
|
215
|
+
```text
|
|
216
|
+
MissionObserver 观测实际态
|
|
217
|
+
-> MissionReconciler 比较 mission.xml 期望态 vs 实际态
|
|
218
|
+
-> MissionPlanner 在必要时提出重规划
|
|
219
|
+
-> MissionApplier 执行一个 bounded action
|
|
220
|
+
-> 写 report / 更新 mission.xml
|
|
221
|
+
-> 下一轮
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## 8. 受控重规划
|
|
225
|
+
|
|
226
|
+
active mission 允许修改 `mission.xml`,但必须满足:
|
|
227
|
+
|
|
228
|
+
- 有 evidence 或 human decision。
|
|
229
|
+
- 写入 `reports/replan-XXX.md` 或 `reports/human-intervention-XXX.md`。
|
|
230
|
+
- 更新 `Metadata.Revision` 和 `UpdatedAt`。
|
|
231
|
+
- 说明 trigger、actual state、desired state、diff、decision、applied change。
|
|
232
|
+
|
|
233
|
+
允许的重规划:
|
|
234
|
+
|
|
235
|
+
- 新增节点。
|
|
236
|
+
- 删除 / supersede 节点。
|
|
237
|
+
- 修改节点目标、验收、状态。
|
|
238
|
+
- 修改 DAG 依赖。
|
|
239
|
+
- 暂停等待人工介入。
|
|
240
|
+
|
|
241
|
+
## 9. 标准文件拆分
|
|
242
|
+
|
|
243
|
+
新 mission 不使用 `roadmap.md`。内容拆分:
|
|
244
|
+
|
|
245
|
+
- `proposal.md`:目标、非目标、成功判据、背景。
|
|
246
|
+
- `design.md`:actor 模型、重规划协议、风险、plan vs track 区分。
|
|
247
|
+
- `mission.xml`:TaskGroup/Task 节点、依赖、状态、`cdt:TrackLink` 绑定。
|
|
248
|
+
- `analysis/`:执行期 evidence / findings,默认不进 git。
|
|
249
|
+
- `reports/`:mission run / drift / replan / verify reports,默认不进 git。
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# modeling delta 编写规范(std/spec/modeling-delta.md)
|
|
2
|
+
|
|
3
|
+
> 每个 track 对 modeling 登记表(`codument/modeling/`,见 `modeling-registry.md`)的增删改,用**目标态节点 + 节点级 3-way 合并**表达,而非自建 delta 节点类型。真 VCS 是宿主 git;xnl-vfs 只当**临时合并引擎**(不持久化平行 vcs 仓库)。
|
|
4
|
+
>
|
|
5
|
+
> 仅当 `codument/config/modeling.xml` 的 modeling profile `enabled` 时启用。
|
|
6
|
+
>
|
|
7
|
+
> XNL 语法权威见 [std/spec/xnl-format.md](./xnl-format.md)。
|
|
8
|
+
|
|
9
|
+
## 形态:目标态节点(modeling_deltas)
|
|
10
|
+
|
|
11
|
+
- track 在 `tracks/<id>/modeling_deltas/<plane>/<context>.xnl` 写**改动节点的目标态**(可评审,像 `behavior_deltas/`,宿主 git 跟踪)。每个节点带稳定多级命名空间 id(`#<context>.<name>` 或 `#<plane>.<context>.<name>`)。
|
|
12
|
+
- 它是归档 3-way 合并的 **theirs** 侧;registry 工作树是 **ours** 侧;base 见下。
|
|
13
|
+
|
|
14
|
+
```xnl
|
|
15
|
+
<!-- tracks/<id>/modeling_deltas/domain/resource.xnl -->
|
|
16
|
+
<object #resource.skill_tool kind="entity" fact_grade="authoritative_fact" single_writer="resource.store" [
|
|
17
|
+
<desc ?>聚合型资源:可编辑/打包/恢复的文本文件集合。</?>
|
|
18
|
+
<types ?ts1>
|
|
19
|
+
interface SkillTool { key: string; appId: string; status: SkillToolStatus; isArchived: boolean }
|
|
20
|
+
enum SkillToolStatus { Draft="draft", Online="online" }
|
|
21
|
+
</?ts1>
|
|
22
|
+
<fact-source ?>唯一写入者 resource.store;file_contents 为只读投影,不反写。</?>
|
|
23
|
+
]>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 增删改移(git 语义,不自建 op)
|
|
27
|
+
|
|
28
|
+
| 操作 | 怎么表达 |
|
|
29
|
+
|---|---|
|
|
30
|
+
| 新增 / 修改节点 | 在 `modeling_deltas` 写目标态节点(按 `#id` 命中:无则新增,有则更新) |
|
|
31
|
+
| 删除节点 | `modeling_deltas` 显式标记删除(或目标态省略该节点 + 删除清单);合并时该节点从 registry 移除 |
|
|
32
|
+
| 重命名 / 移动文件 | `vfs.rename`(宿主 git 记录 rename) |
|
|
33
|
+
| 单文件内节点移动 | `XnlMutation` `TREE_MOVE`(`xnl-core`,按 `#id`) |
|
|
34
|
+
|
|
35
|
+
## base 锚定(决策 A,锚在宿主 git)
|
|
36
|
+
|
|
37
|
+
- **track create 时记录当时 `codument/modeling` 所在的宿主 git commit id** 作为 3-way base,写入 track 元信息。
|
|
38
|
+
- 归档时 base 从宿主 git 物化(`git show <commit>:codument/modeling/...`),与当前工作树(ours) + `modeling_deltas`(theirs) 做三方合并,支持并发 track / registry 已前进。
|
|
39
|
+
|
|
40
|
+
## 应用(归档时,机械、临时引擎)
|
|
41
|
+
|
|
42
|
+
1. 物化三方:base(宿主 git 记录的 commit)+ ours(当前 `codument/modeling` 工作树)+ theirs(track 的 `modeling_deltas`),各加载为 xnl-vfs 快照(内存 / `.tmp/`,不持久化)。
|
|
43
|
+
2. 节点级 3-way 合并:`xnl-vfs` `xnlFileHandler.merge(base, ours, theirs)`(底层 `xnl-core` `diffNodes`+`applyMutations`,`metadataIdMode:"identity"`,按 `#id` 命中)。
|
|
44
|
+
3. 按下方**冲突解决策略**处理冲突。
|
|
45
|
+
4. 合并结果写回 `codument/modeling` 工作树,由宿主 git 提交。`.tmp/` 临时产物不入库。
|
|
46
|
+
5. 跑 `codument modeling lint`(分形拆分)。
|
|
47
|
+
6. 模型把设计方案按类目回写 `docs/impl/`。
|
|
48
|
+
|
|
49
|
+
## 冲突解决策略(保守默认 + 可配)
|
|
50
|
+
|
|
51
|
+
默认**保守**:能无歧义自动合并的自动;**真冲突一律 issues-first 报告并暂停**(像 confirm gate),不静默选边。
|
|
52
|
+
|
|
53
|
+
| 情形 | 默认 |
|
|
54
|
+
|---|---|
|
|
55
|
+
| 不相交节点(theirs 改 A、ours 改 B) | ✅ 自动 |
|
|
56
|
+
| 同节点不同子部(theirs 改 A 的 `types`、ours 改 A 的 `mermaid`) | ✅ 自动 |
|
|
57
|
+
| 纯新增新 id / 纯删除未被动过的节点 | ✅ 自动 |
|
|
58
|
+
| 同节点同子部异内容 | ❌ 默认人工 |
|
|
59
|
+
| `DELETE_MODIFY`(theirs 删 A、ours 改 A) | ❌ 默认人工 |
|
|
60
|
+
| `RENAME_RENAME`(两边改名到不同处) | ❌ 默认人工 |
|
|
61
|
+
| ADD/ADD 同 id 异内容 | ❌ 默认人工 |
|
|
62
|
+
|
|
63
|
+
- 报告每条真冲突给 `{ metadataId, base/ours/theirs 片段 }`;归档 agent 低歧义的可判定并记录 `choice`,真语义冲突升级给用户逐条选 `choice: "ours"|"theirs"|"base"` 或手改。
|
|
64
|
+
- **按冲突类型可在 `config/modeling.xml` 配**覆盖默认,例如把 `delete_modify` 设为 `theirs` 自动尊重删除;缺省全部走人工。配置字段(建议):
|
|
65
|
+
```xml
|
|
66
|
+
<modeling-config>
|
|
67
|
+
<merge-policy>
|
|
68
|
+
<conflict type="same-field" resolve="human"/>
|
|
69
|
+
<conflict type="delete-modify" resolve="human"/>
|
|
70
|
+
<conflict type="rename-rename" resolve="human"/>
|
|
71
|
+
<conflict type="add-add" resolve="human"/>
|
|
72
|
+
</merge-policy>
|
|
73
|
+
</modeling-config>
|
|
74
|
+
```
|
|
75
|
+
`resolve` 取 `human` | `ours` | `theirs` | `base`。
|
|
76
|
+
|
|
77
|
+
## 与 track / 归档的关系
|
|
78
|
+
|
|
79
|
+
- track 的 `<Ports>` 把 `modeling_deltas/`(input,`domain="modeling"`)与 `codument/modeling/`(output `name="modeling"`)显式接起来。
|
|
80
|
+
- desc/types/mermaid/伪代码都是 `TextElement`,整块当 `valueAfter` 替换,不被 XML 实体污染。
|
|
81
|
+
- modeling 节点引用 `behavior://…` 不复述可测 case。
|
|
82
|
+
|
|
83
|
+
## 多文件 import(依赖)
|
|
84
|
+
|
|
85
|
+
跨文件命名空间引用(`<Import as="X" src="vfs://...">`)依赖 xnl.ts 侧 `add-vfs-import-resolver`;就绪前以“单 context 单文件 + 目录 glob 回退”起步。
|