@antprofuse/saddle-islands-workflow 0.1.2 → 0.1.3

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/SKILL.md CHANGED
@@ -57,3 +57,15 @@ Skill与工具分别冻结仓库、完整commit、版本、制品和文件摘要
57
57
  节点按[简短复盘格式](<references/task-retrospective.md>)反馈输入、耗时、返工及改进依据。Owner核关键路径及自身规划责任,修正有证据的通用缺口,验证新成员能够消费;不能只通知旧成员或追加口号。
58
58
 
59
59
  完成时区分设计、设施、Mock验收、真实联调和生产发布。持久保存必要且唯一的交付证据,清理失效入口;不重复归档缓存、不默认生成下载包,不以编译或数量替代业务正确性。
60
+
61
+ ## 迭代范围与无变更交付
62
+
63
+ 阶段适用于新业务研发、已有业务的小范围变更和无业务变化的复核。按本轮目标与输入差异决定工作量;节点存在不等于必须修改代码、重建设计或重写测试,也不自动要求全量验证。优先复用仍有效成果和证据,对变更及其影响范围研发、验证。判定无需修改时交付依据、对应版本及必要检查结果,不能仅凭文件已存在认定完成;用户明确要求完整复核或全量测试时按该范围执行。无Git变更仍执行阶段交付门禁,基线与候选可以相同。
64
+
65
+ ## 发起者持久管理
66
+
67
+ 迭代元数据由发起者在自己workspace的iterations目录持久管理,依照参数schema由公共工具校验和记录;公共上下文只注入执行者共同需要的字段,不能用作元数据持久化。阶段输入、输出、记录目录和已接受版本由元数据按模板渲染。详细合同见references/task-template-contract.md。
68
+
69
+ 任务执行记录是过程信息:执行节点写入指定记录目录,默认不得读取其他或自身的该记录区来获取研发输入;Owner在检查点读取。正式需求与设计交接通过指定工作分支和冻结输入包,必要决策先落实正式输入,不靠反馈报告形成隐性依赖。每阶段Git成果须提交并推送至指定工作分支,本地报告按指定位置写入。结束临时协同任务前归档HTML、截图和依赖资源到持久迭代reports目录、记录到records目录,核查链接并更新台账后才能放行最终检查点;不默认生成下载包。
70
+
71
+ Skill适用性反馈、工具缺陷归因和效率复盘是每轮普通迭代的常规职责,不以“体系验证专项”为前提。无变化或少变化只是本轮输入事实,不改变阶段职责和交付要求,也不因需要反馈就人为制造改动。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antprofuse/saddle-islands-workflow",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "协调Islands输入、工程设计、独立测试与产品研发,明确职责、公共工具消费及增量交付。",
5
5
  "license": "MIT OR Apache-2.0",
6
6
  "files": [
@@ -1,176 +1,33 @@
1
1
  # 阶段Markdown模板
2
2
 
3
- 下列模板供发起者渲染任务描述。仅格式和已有阶段职责固定,不预设设计数量或测试结果。路径来自全局参数和阶段元数据;节点不能自行扩大写入范围。可选分组信息另列字段。
3
+ 实际渲染由 `iteration render` 消费stage-meta及实例参数生成,下列仅说明呈现结构。不要在节点重复Skill的提交推送、门禁和复盘策略。
4
4
 
5
- ## 公共上下文
6
-
7
- - 仓库:`{git.url}`
8
- - 基线分支:`{git.branch}`
9
- - 基线提交:`{git.commit}`
10
- - 业务目录:`{bizdir}`
11
- - 业务源版本:`{source.commit}`
12
- - 业务源根目录:`{sourceRoot}`
13
- - 共享根目录:`{sharedRoot}`
14
- - Skill版本清单:`{skills.manifest}`
15
- - 工具目录:`{tools.root}`
16
-
17
- 迭代授权、来源边界等说明使用文本段落。
18
-
19
- ## 契约设计
20
-
21
- ### 输入
22
-
23
- - 工作分支:`{workBranch}`
24
- - 业务输入目录:`localPath:{sourceRoot}/{bizdir}`
25
- - 官方测试目录文件:`localPath:{generated.catalog}`
26
- - 上游协议目录:`localPath:{generated.protocolDir}`
27
- - 输入预检结果:`localPath:{preflight.result}`
28
-
29
- ### 执行
30
-
31
- 使用 `saddle-islands-design` 完成契约设计阶段。
32
-
33
- - Skill入口:`{skills.design.path}`
34
-
35
- ### 交付
36
-
37
- - 契约目录:`gitBranchPath:{bizdir}/code/backend-contract`
38
- - 数据库设计目录:`gitBranchPath:{bizdir}/code/db`
39
- - 身份登记文件:`gitBranchPath:{bizdir}/code/identity-registry.json`
40
- - 任务信息目录:`localPath:{sharedOutputDirectory}`
41
- - 交付门禁:`iteration diff-review`
42
-
43
- Git交付路径相对仓库根解析;成果须提交并推送到工作分支。本地任务信息目录直接写入,不提交Git。
44
-
45
- 交付前必须执行交付门禁;门禁未通过,不得作成功交付。
46
-
47
- ## 小程序测试研发
48
-
49
- ### 输入
50
-
51
- - 工作分支:`{workBranch}`
52
- - 业务输入目录:`localPath:{sourceRoot}/{bizdir}`
53
- - 设计交付版本:`{accepted.design.commit}`
54
- - 官方测试目录文件:`localPath:{generated.catalog}`
55
-
56
- ### 执行
57
-
58
- 使用 `saddle-islands-minifish-test` 完成小程序测试研发阶段。
59
-
60
- - Skill入口:`{skills.minifish-test.path}`
61
-
62
- ### 交付
63
-
64
- - 测试目录:`gitBranchPath:{bizdir}/code/minifish-tests`
65
- - 任务信息目录:`localPath:{sharedOutputDirectory}`
66
- - 交付门禁:`iteration diff-review`
67
-
68
- Git交付路径相对仓库根解析;成果须提交并推送到工作分支。本地任务信息目录直接写入,不提交Git。
69
-
70
- 交付前必须执行交付门禁;门禁未通过,不得作成功交付。
71
-
72
- ## 后端测试研发
73
-
74
- ### 输入
75
-
76
- - 工作分支:`{workBranch}`
77
- - 业务输入目录:`localPath:{sourceRoot}/{bizdir}`
78
- - 设计交付版本:`{accepted.design.commit}`
79
- - 上游协议目录:`localPath:{generated.protocolDir}`
80
-
81
- ### 执行
82
-
83
- 使用 `saddle-islands-backend-test` 完成后端测试研发阶段。
84
-
85
- - Skill入口:`{skills.backend-test.path}`
86
-
87
- ### 交付
88
-
89
- - 测试目录:`gitBranchPath:{bizdir}/code/backend-tests`
90
- - 任务信息目录:`localPath:{sharedOutputDirectory}`
91
- - 交付门禁:`iteration diff-review`
92
-
93
- Git交付路径相对仓库根解析;成果须提交并推送到工作分支。本地任务信息目录直接写入,不提交Git。
94
-
95
- 交付前必须执行交付门禁;门禁未通过,不得作成功交付。
96
-
97
- ## 小程序研发
5
+ ## 执行节点
98
6
 
99
7
  ### 输入
100
8
 
101
9
  - 工作分支:`{workBranch}`
102
- - 业务输入目录:`localPath:{sourceRoot}/{bizdir}`
103
- - 测试交付版本:`{accepted.minifishTest.commit}`
104
-
105
- ### 执行
10
+ - 业务输入目录:`localPath:{businessInput}`
106
11
 
107
- 使用 `saddle-islands-minifish` 完成小程序研发阶段。
108
-
109
- - Skill入口:`{skills.minifish.path}`
110
-
111
- ### 交付
112
-
113
- - 产品目录:`gitBranchPath:{bizdir}/code/minifish`
114
- - 任务信息目录:`localPath:{sharedOutputDirectory}`
115
- - 交付门禁:`iteration diff-review`
116
-
117
- Git交付路径相对仓库根解析;成果须提交并推送到工作分支。本地任务信息目录直接写入,不提交Git。
118
-
119
- 交付前必须执行交付门禁;门禁未通过,不得作成功交付。
120
-
121
- ## 后端研发
122
-
123
- ### 输入
124
-
125
- - 工作分支:`{workBranch}`
126
- - 业务输入目录:`localPath:{sourceRoot}/{bizdir}`
127
- - 测试交付版本:`{accepted.backendTest.commit}`
128
- - 上游协议目录:`localPath:{generated.protocolDir}`
12
+ 其他已明确的本地输入按内容列出;无分组不出现分组字段,不枚举仓内已有产物。
129
13
 
130
14
  ### 执行
131
15
 
132
- 使用 `saddle-islands-backend` 完成后端研发阶段。
133
-
134
- - Skill入口:`{skills.backend.path}`
135
-
136
- ### 交付
137
-
138
- - 产品目录:`gitBranchPath:{bizdir}/code/backend`
139
- - 任务信息目录:`localPath:{sharedOutputDirectory}`
140
- - 交付门禁:`iteration diff-review`
141
-
142
- Git交付路径相对仓库根解析;成果须提交并推送到工作分支。本地任务信息目录直接写入,不提交Git。
143
-
144
- 交付前必须执行交付门禁;门禁未通过,不得作成功交付。
145
-
146
- ## 阶段检查点
147
-
148
- ### 输入
149
-
150
- - 阶段工作分支:`{stage.workBranch}`
151
- - 阶段任务信息目录:`localPath:{stage.sharedOutputDirectory}`
152
-
153
- ### 审核
154
-
155
- 按workflow核阶段成果、工具消费、Skill改进需求及交付目录。确认后固定下游输入;发现问题交对应责任方修复复验。
16
+ 使用 Skill `{skill}` 完成{stageLabel}。
156
17
 
157
18
  ### 交付
158
19
 
159
- - 下游输入登记目录:`localPath:{acceptedInputsDirectory}`
160
- - 审核记录目录:`localPath:{checkpointOutputDirectory}`
20
+ - {产物类型}目录:`gitBranchPath:{outputDirectory}`
21
+ - {必要单文件}:`gitBranchPath:{outputFile}`
22
+ - {必要本地内容}目录:`localPath:{localOutput}`
23
+ - 任务执行记录目录:`localPath:{recordDirectory}`
161
24
 
162
- ## 最终交付检查点
25
+ 输出字段按阶段元数据及实例实际内容生成,无相应输出则省略。五类阶段分别绑定design、minifish-test、backend-test、minifish、backend,不把示例占位符原样发给执行者。
163
26
 
164
- ### 输入
165
-
166
- - 小程序工作分支:`{minifish.workBranch}`
167
- - 后端工作分支:`{backend.workBranch}`
168
- - 阶段交付信息目录:`localPath:{deliverablesDirectory}`
27
+ ## 检查点
169
28
 
170
- ### 审核
29
+ 输入是对应工作分支与任务执行记录位置;Owner按workflow审核正式成果与记录,确认版本,必要时返修。审核记录写指定位置,最终持久保存。检查点可读取记录,不把记录再传给下游当作正式设计。
171
30
 
172
- 按workflow完成两端总审,确认阶段结论及体系改进已交接,并持久保存必要证据。合入依用户授权。
173
-
174
- ### 交付
31
+ ## 最终检查点
175
32
 
176
- - 持久交付目录:`localPath:{persistentDeliveryDirectory}`
33
+ 输入为末端工作分支与必要记录位置;完成整体审核、持久归档及资源验证后才能结束临时任务。持久迭代位置来自发起者元数据。Git合入需要对应授权,归档完成不等于合入授权。
@@ -1,60 +1,35 @@
1
- # 全局参数与节点模板合同
1
+ # 迭代元数据与任务模板合同
2
2
 
3
- 参数、五阶段与检查点渲染由独立工具 `iteration render` 提供;目录差异检查由 `iteration diff-review` 提供。阶段字段及路径以随包元数据为准,Markdown模板用于审阅表达方式。
3
+ ## 发起者的持久记录
4
4
 
5
- ## 参数归属
5
+ 发起者在自己的workspace管理 `iterations/index.json` 与 `iterations/<iteration-id>/iteration.meta.json`。具体业务实例不进入体系源码库,也不以CoTask共享区或对话上下文作为唯一来源。元数据使用随Skill的 [强schema](<../resources/iteration.schema.json>);阶段规则由 [stage-meta](<../resources/stage-meta.json>) 定义,执行工具在独立工具集。
6
6
 
7
- 迭代发起者用workflow Skill管理全局参数,[参数schema](<../resources/iteration.schema.json>)定义字段类型、必填性和扩展范围,[阶段元数据](<../resources/stage-meta.json>)定义五阶段输入和输出路径。Git地址、准备分支、冻结提交、仓库内业务目录bizdir、共享输出根为必填全局参数;节点不能重新填写或覆盖。每个阶段的工作分支在迭代实例中统一分配,上游交付由检查点解析为确定提交。
7
+ 元数据保留目标、状态、仓库与业务目录、起始代码和业务源版本、准备物摘要、运行环境索引、共享和持久位置、阶段分支与输入输出、依赖及审核接受结果。`iteration init/update/list` 管理台账;更新用当前文件摘要防覆盖,保留历史。状态记录不是执行授权,工具不启动CoTask。元数据的变更应同步渲染结果及平台实际定义,调用后读取核对。
8
8
 
9
- 阶段元数据定义Skill、阶段说明、输入类型、允许输出目录和文件。模板主体固定,实例只提供全局参数及少量业务分组等扩展。输出位置是必填的派生结果,不得遗漏,也不得让执行者自行选择。
9
+ `persistentRoot` 必须是发起者台账根下的迭代ID目录,与临时共享根独立。最终HTML、截图和所需资源保存在其 `reports/`,执行及审核记录保存在 `records/`。共享区和成员工作目录均可能随任务结束回收。最终检查点放行前,使用 `iteration archive` 归档需要的内容并核资源完整性;动态资源和用户预览链接还需实际访问核验。台账及报告持久化不保证预览服务永久运行。不默认打ZIP,不重复归档已推送源码或可重建缓存。
10
10
 
11
- 设计阶段的默认写入范围为:
11
+ ## 元数据不等于公共上下文
12
12
 
13
- - `{bizdir}/code/backend-contract/`:后端契约。
14
- - `{bizdir}/code/db/`:必要逻辑表契约。
15
- - `{bizdir}/code/identity-registry.json`:身份登记单文件权限,不开放整个code目录。
13
+ 参数在迭代级定义,不代表全部注入每个执行者。`iteration render` 按白名单呈现公共Git地址、业务范围及执行环境索引;Owner基线、来源SHA、共享根、历史结果和管理记录保留在元数据。业务源身份留在冻结输入包中可追溯,不让执行者自行选择分支中另一版Spec。
16
14
 
17
- 该范围依据设计与后端测试Skill的当前交付约定;不限定产物数量,也不为不存在的产物创建空目录。特殊项目布局须在迭代级明确配置并供审,不能用节点自由描述暗中扩大权限。
15
+ 节点采用Markdown列表提供工作分支、额外准备的输入目录、Git输出权限、本地输出及任务执行记录位置;执行段只声明使用哪个Skill做哪个阶段。仓内内容按Skill理解,不枚举“已有契约”“已有测试”等字段。工作分支承载输入和交付;准确输入提交由发起者在交接时绑定,待上游接受时可暂缺,但不得据此放行。
18
16
 
19
- ## Markdown渲染
17
+ Git路径值标记为 `gitBranchPath:`,本地绝对路径标记为 `localPath:`;标记仅用于展示,内部参数保留真实路径。Git成果必须提交并推送,本地成果直接写入指定目录。普通节点不重复这些通用操作规则。
20
18
 
21
- 所有字段按 `- 字段名:值` 渲染为Markdown列表,一行一个字段,不用表格,也不把多个字段拼成一段。说明工作策略、职责或审核判断时使用普通文本段落。该格式适用于全局参数、执行节点和检查点。
19
+ ## 按内容组织输入输出
22
20
 
23
- 全局参数只在公共上下文定义,节点不重复定义Git仓库、全局基线与bizdir。阶段路径由全局参数展开;阶段交接版本是节点输入,不与全局基线混淆。
21
+ Owner启动前形成冻结业务输入包,节点只绑定一个业务输入目录。包内含 `input.json`、`source/`、`generated/`:input.json索引本轮源版本、源读取根、生成文件类型与位置、摘要及预检结论。设计按此读取Spec/视觉/physical、必要上游协议;测试和产品消费其职责相关内容。编译预检结果不是业务通过证明。不能以当前代码分支中更新后的Spec替代冻结包。
24
22
 
25
- 完整模板见[各阶段Markdown模板](<stage-templates.md>)。模板中的列表是真正独立的字段,不用一个“阶段输入”长句代替。无分组省略分组字段,仓内现状不另列“已有”字段;目录权限与文件权限分开。
23
+ 共享目录按业务及内容组织,不按节点编号强制分割。阶段的 `localInputs` / `localOutputs` 可明确多个内容位置;每个写入位置有唯一负责人,下游通过确定依赖只读接受的版本。工具拒绝写入范围重叠、路径逃逸和循环依赖。角色可重复分组,但必须提供互不重叠的具体交付位置;不改变产品单写者规则。
26
24
 
27
- 相同参数、元数据版本及已验收输入须得到相同描述。执行前不能留下未解析依赖或占位符。节点只绑定明确的工作分支及已确认版本,另列Owner准备的冻结源、编译或生成产物。不重复枚举该分支内的契约、数据库设计、测试与产品目录;仓内输入输出语义由阶段Skill拥有。
25
+ `execution-records/` 是开放的日常执行记录区,用于报告、问题、复盘和检查点审核。普通执行者只写节点指定位置,默认不得读取该区;仅Owner在检查点读取。它不是下游研发输入或严格依赖,不能通过报告链接交付隐含需求。Owner将必要决策落实到正式Git成果或明确的冻结输入再交接。该规则是协同合同,不声称实施了文件系统权限隔离。
28
26
 
29
- ## 交付路径检查
27
+ 测试源码与设计等正式成果通过Git交接。若下游确实需读取测试运行收据等非Git材料,单独声明按内容命名的证据目录;只给Owner看的反馈不能混入该目录成为下游依赖。
30
28
 
31
- 阶段交付和合入前,对明确基线与候选提交的完整Git差异检查允许路径,生成按目录统计的Markdown表及文件明细。统计新增、修改、删除、重命名文件和增删行;重命名同时检查旧、新路径,删除同样受权限约束。最终集成检查已接受阶段权限的并集。
29
+ ## 阶段规则与门禁
32
30
 
33
- 业务路径须限定在bizdir内,共享路径限定在共享根内,拒绝路径穿越或符号链接逃逸。目录按路径段匹配,文件只精确匹配;读取权限不等于写入权限。越界变更须处理,不能自动扩白名单。即使目录合法,缓存、依赖、临时日志和过程报告等仍按对应Skill产物规则排除。
31
+ [Markdown模板](<stage-templates.md>)解释固定呈现方式,实际规则唯一来自stage-meta和渲染工具;实例只补业务分组等有限参数,不能靠自由文本扩展写权限。设计默认允许契约、DB目录与身份登记单文件,不限定成果数量;其余阶段按对应代码目录。目录权限不要求创建空目录,不要求每轮产生Git修改。
34
32
 
35
- 目录检查减少人工核范围的负担,不替代用户对diff内容的审阅。通用执行逻辑归独立工具集,不在Skill藏实现。
33
+ 每个阶段必须执行交付门禁;未通过不得作成功交付。发起者在阶段输入提交明确后,通过 `iteration scope` 生成精简范围文件,作为执行环境索引中的阶段配置交接。执行者用 `iteration stage-gate`,不读取Owner私有元数据。门禁从冻结workflow元数据推导允许路径,不接受临时自增白名单。
36
34
 
37
-
38
- ## 可重入的迭代阶段
39
-
40
- 所有阶段都是迭代研发,不假定全新开始。执行者从指定分支的当前内容出发,按Skill读取仓内输入、核对正式来源并建设或修订输出;复用仍有效成果,处理失效内容。阶段重入时先核已完成工作及输入版本,不能因重入默认清空或重复生成,也不能把旧产物存在当作已验证。
41
-
42
- 任务描述不使用“已有契约”“已有测试”等仓库状态字段,不复制Skill中的目录说明。阶段交接只需明确分支、已接受提交与额外准备物;外部输入不能靠执行者猜。输出权限仍由阶段元数据保留,交付路径检查使用这些权限,不因简化任务输入而放宽写入范围。
43
-
44
- 工作分支同时承载仓内输入和阶段研发成果,不再分别建模输入分支与交付分支。节点在输入处列一次工作分支;交付处列产物权限与任务信息目录。检查点固定实际交付提交,分支名不替代版本。
45
-
46
- 每个执行阶段统一执行 `iteration diff-review` 交付门禁;目前唯一判定是交付变更路径是否超出阶段允许范围,越界不得交付。不把其他内容审查要求或文件类型检查擅自加入此门禁,后续扩展另行明确。
47
-
48
-
49
- ## Git与本地交付通道
50
-
51
- Git交付目录/文件字段使用仓库相对路径,并标明Git归属;成果必须提交并推送到工作分支,以确定提交交接。不得将普通本地写入视为Git交付完成。
52
-
53
- 本地任务信息目录字段使用实际绝对路径,直接写入报告、证据与反馈,不提交Git。平台共享目录也是本地写入通道,不是Git目录;是否可共享、何时清理由平台合同决定。最终持久目录亦须明确本地归属。
54
-
55
- 当前统一目录门禁只检查Git提交之间的变更路径。不得把本地报告目录加入Git写入白名单,也不将本地目录检查暗中加入此门禁。
56
-
57
- 阶段模板只要求必须执行交付门禁,未通过不得作成功交付;具体检查项属于工具合同。目前实现仅检查Git目录范围,这是工具版本事实,不是对未来阶段要求的限制。
58
-
59
-
60
- 路径来源标记写在值上,字段名保持简短:`gitBranchPath:` 表示当前工作分支的仓库根,例如数据库设计目录为 `gitBranchPath:{bizdir}/code/db`;`localPath:/` 表示本地绝对路径。标记仅用于Markdown展示,schema和工具内部仍保存真实相对/绝对路径,不能把展示字符串直接当文件系统路径。提交推送与本地写入规则保持不变。
35
+ 当前工具仅检查Git差异路径,重命名同时检查源和目标,删除同样受限,空diff合法。检查点仍须核对内容、真实工具消费和Skill是否缺失规则。工具未执行、输入不完整或证据不足不能报成功;无变化交付须说明范围、版本和复用依据。新研发、局部迭代和无变化复核都适用,不因图中存在阶段而强制全量重建或测试。
@@ -3,10 +3,44 @@
3
3
  "additionalProperties": false,
4
4
  "properties": {
5
5
  "schemaVersion": {
6
- "const": 1
6
+ "const": 2
7
7
  },
8
8
  "metaVersion": {
9
- "const": 1
9
+ "const": 2
10
+ },
11
+ "iteration": {
12
+ "type": "object",
13
+ "additionalProperties": false,
14
+ "properties": {
15
+ "id": {
16
+ "type": "string",
17
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
18
+ },
19
+ "goal": {
20
+ "type": "string",
21
+ "minLength": 1,
22
+ "pattern": "^[^\\x00-\\x1f`{}]+$"
23
+ },
24
+ "state": {
25
+ "enum": [
26
+ "draft",
27
+ "ready",
28
+ "running",
29
+ "completed",
30
+ "cancelled"
31
+ ]
32
+ },
33
+ "taskId": {
34
+ "type": "string",
35
+ "minLength": 1,
36
+ "pattern": "^[^\\x00-\\x1f`{}]+$"
37
+ }
38
+ },
39
+ "required": [
40
+ "id",
41
+ "goal",
42
+ "state"
43
+ ]
10
44
  },
11
45
  "git": {
12
46
  "type": "object",
@@ -62,46 +96,43 @@
62
96
  "minLength": 1,
63
97
  "pattern": "^[^\\x00-\\x1f`{}]+$"
64
98
  },
65
- "skillsRoot": {
99
+ "persistentRoot": {
66
100
  "type": "string",
67
101
  "minLength": 1,
68
102
  "pattern": "^[^\\x00-\\x1f`{}]+$"
69
103
  },
70
- "toolsRoot": {
104
+ "environmentIndex": {
71
105
  "type": "string",
72
106
  "minLength": 1,
73
107
  "pattern": "^[^\\x00-\\x1f`{}]+$"
74
108
  },
75
- "frameworkSkill": {
76
- "type": "string",
77
- "minLength": 1,
78
- "pattern": "^[^\\x00-\\x1f`{}]+$"
79
- },
80
- "generated": {
81
- "type": "object",
82
- "additionalProperties": false,
83
- "properties": {
84
- "catalog": {
85
- "type": "string",
86
- "minLength": 1,
87
- "pattern": "^[^\\x00-\\x1f`{}]+$"
88
- },
89
- "protocol": {
90
- "type": "string",
91
- "minLength": 1,
92
- "pattern": "^[^\\x00-\\x1f`{}]+$"
109
+ "provenance": {
110
+ "type": "array",
111
+ "items": {
112
+ "type": "object",
113
+ "additionalProperties": false,
114
+ "properties": {
115
+ "name": {
116
+ "type": "string",
117
+ "minLength": 1,
118
+ "pattern": "^[^\\x00-\\x1f`{}]+$"
119
+ },
120
+ "path": {
121
+ "type": "string",
122
+ "minLength": 1,
123
+ "pattern": "^[^\\x00-\\x1f`{}]+$"
124
+ },
125
+ "sha256": {
126
+ "type": "string",
127
+ "pattern": "^[0-9a-f]{64}$"
128
+ }
93
129
  },
94
- "preflight": {
95
- "type": "string",
96
- "minLength": 1,
97
- "pattern": "^[^\\x00-\\x1f`{}]+$"
98
- }
99
- },
100
- "required": [
101
- "catalog",
102
- "protocol",
103
- "preflight"
104
- ]
130
+ "required": [
131
+ "name",
132
+ "path",
133
+ "sha256"
134
+ ]
135
+ }
105
136
  },
106
137
  "stages": {
107
138
  "type": "array",
@@ -115,7 +146,6 @@
115
146
  "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
116
147
  },
117
148
  "stage": {
118
- "type": "string",
119
149
  "enum": [
120
150
  "design",
121
151
  "minifish-test",
@@ -124,12 +154,7 @@
124
154
  "backend"
125
155
  ]
126
156
  },
127
- "sharedOutput": {
128
- "type": "string",
129
- "minLength": 1,
130
- "pattern": "^(?!/)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*\\\\)[^\\x00-\\x1f`{}]+$"
131
- },
132
- "acceptedInput": {
157
+ "workBranch": {
133
158
  "type": "string",
134
159
  "minLength": 1,
135
160
  "pattern": "^[^\\x00-\\x1f`{}]+$"
@@ -138,12 +163,65 @@
138
163
  "type": "string",
139
164
  "pattern": "^[0-9a-f]{40}$"
140
165
  },
141
- "group": {
166
+ "dependencies": {
167
+ "type": "array",
168
+ "items": {
169
+ "type": "string",
170
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
171
+ }
172
+ },
173
+ "localInputs": {
174
+ "type": "array",
175
+ "items": {
176
+ "type": "object",
177
+ "additionalProperties": false,
178
+ "properties": {
179
+ "label": {
180
+ "type": "string",
181
+ "minLength": 1,
182
+ "pattern": "^[^\\x00-\\x1f`{}]+$"
183
+ },
184
+ "path": {
185
+ "type": "string",
186
+ "minLength": 1,
187
+ "pattern": "^[^\\x00-\\x1f`{}]+$"
188
+ }
189
+ },
190
+ "required": [
191
+ "label",
192
+ "path"
193
+ ]
194
+ }
195
+ },
196
+ "localOutputs": {
197
+ "type": "array",
198
+ "items": {
199
+ "type": "object",
200
+ "additionalProperties": false,
201
+ "properties": {
202
+ "label": {
203
+ "type": "string",
204
+ "minLength": 1,
205
+ "pattern": "^[^\\x00-\\x1f`{}]+$"
206
+ },
207
+ "path": {
208
+ "type": "string",
209
+ "minLength": 1,
210
+ "pattern": "^[^\\x00-\\x1f`{}]+$"
211
+ }
212
+ },
213
+ "required": [
214
+ "label",
215
+ "path"
216
+ ]
217
+ }
218
+ },
219
+ "recordDirectory": {
142
220
  "type": "string",
143
221
  "minLength": 1,
144
222
  "pattern": "^[^\\x00-\\x1f`{}]+$"
145
223
  },
146
- "workBranch": {
224
+ "group": {
147
225
  "type": "string",
148
226
  "minLength": 1,
149
227
  "pattern": "^[^\\x00-\\x1f`{}]+$"
@@ -152,32 +230,63 @@
152
230
  "required": [
153
231
  "id",
154
232
  "stage",
155
- "sharedOutput",
156
- "acceptedInput",
157
- "workBranch"
233
+ "workBranch",
234
+ "dependencies",
235
+ "localInputs",
236
+ "localOutputs",
237
+ "recordDirectory"
158
238
  ]
159
239
  }
160
240
  },
161
- "persistentDeliveryDirectory": {
162
- "type": "string",
163
- "minLength": 1,
164
- "pattern": "^[^\\x00-\\x1f`{}]+$"
241
+ "reviews": {
242
+ "type": "array",
243
+ "items": {
244
+ "type": "object",
245
+ "additionalProperties": false,
246
+ "properties": {
247
+ "stageId": {
248
+ "type": "string",
249
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
250
+ },
251
+ "commit": {
252
+ "type": "string",
253
+ "pattern": "^[0-9a-f]{40}$"
254
+ },
255
+ "record": {
256
+ "type": "string",
257
+ "minLength": 1,
258
+ "pattern": "^[^\\x00-\\x1f`{}]+$"
259
+ },
260
+ "outcome": {
261
+ "enum": [
262
+ "accepted",
263
+ "changes-requested"
264
+ ]
265
+ }
266
+ },
267
+ "required": [
268
+ "stageId",
269
+ "commit",
270
+ "record",
271
+ "outcome"
272
+ ]
273
+ }
165
274
  }
166
275
  },
167
276
  "required": [
168
277
  "schemaVersion",
169
278
  "metaVersion",
279
+ "iteration",
170
280
  "git",
171
281
  "bizdir",
172
282
  "source",
173
283
  "sharedRoot",
174
- "skillsRoot",
175
- "toolsRoot",
176
- "frameworkSkill",
177
- "generated",
284
+ "persistentRoot",
285
+ "environmentIndex",
286
+ "provenance",
178
287
  "stages",
179
- "persistentDeliveryDirectory"
288
+ "reviews"
180
289
  ],
181
290
  "$schema": "https://json-schema.org/draft/2020-12/schema",
182
- "title": "Saddle–Islands iteration parameters"
291
+ "title": "Initiator-owned persistent iteration metadata"
183
292
  }
@@ -1,27 +1,9 @@
1
1
  {
2
- "version": 1,
2
+ "version": 2,
3
3
  "stages": {
4
4
  "design": {
5
5
  "label": "契约设计",
6
6
  "skill": "saddle-islands-design",
7
- "inputs": [
8
- [
9
- "业务输入目录",
10
- "{source.root}/{bizdir}"
11
- ],
12
- [
13
- "官方测试目录文件",
14
- "{generated.catalog}"
15
- ],
16
- [
17
- "上游协议文件",
18
- "{generated.protocol}"
19
- ],
20
- [
21
- "输入预检结果",
22
- "{generated.preflight}"
23
- ]
24
- ],
25
7
  "outputDirectories": [
26
8
  [
27
9
  "契约目录",
@@ -42,20 +24,6 @@
42
24
  "minifish-test": {
43
25
  "label": "小程序测试研发",
44
26
  "skill": "saddle-islands-minifish-test",
45
- "inputs": [
46
- [
47
- "业务输入目录",
48
- "{source.root}/{bizdir}"
49
- ],
50
- [
51
- "设计交付登记",
52
- "{acceptedInput}"
53
- ],
54
- [
55
- "官方测试目录文件",
56
- "{generated.catalog}"
57
- ]
58
- ],
59
27
  "outputDirectories": [
60
28
  [
61
29
  "测试目录",
@@ -67,20 +35,6 @@
67
35
  "backend-test": {
68
36
  "label": "后端测试研发",
69
37
  "skill": "saddle-islands-backend-test",
70
- "inputs": [
71
- [
72
- "业务输入目录",
73
- "{source.root}/{bizdir}"
74
- ],
75
- [
76
- "设计交付登记",
77
- "{acceptedInput}"
78
- ],
79
- [
80
- "上游协议文件",
81
- "{generated.protocol}"
82
- ]
83
- ],
84
38
  "outputDirectories": [
85
39
  [
86
40
  "测试目录",
@@ -92,16 +46,6 @@
92
46
  "minifish": {
93
47
  "label": "小程序研发",
94
48
  "skill": "saddle-islands-minifish",
95
- "inputs": [
96
- [
97
- "业务输入目录",
98
- "{source.root}/{bizdir}"
99
- ],
100
- [
101
- "测试交付登记",
102
- "{acceptedInput}"
103
- ]
104
- ],
105
49
  "outputDirectories": [
106
50
  [
107
51
  "产品目录",
@@ -113,20 +57,6 @@
113
57
  "backend": {
114
58
  "label": "后端研发",
115
59
  "skill": "saddle-islands-backend",
116
- "inputs": [
117
- [
118
- "业务输入目录",
119
- "{source.root}/{bizdir}"
120
- ],
121
- [
122
- "测试交付登记",
123
- "{acceptedInput}"
124
- ],
125
- [
126
- "上游协议文件",
127
- "{generated.protocol}"
128
- ]
129
- ],
130
60
  "outputDirectories": [
131
61
  [
132
62
  "产品目录",
@@ -137,47 +67,9 @@
137
67
  }
138
68
  },
139
69
  "checkpoint": {
140
- "inputs": [
141
- [
142
- "阶段工作分支",
143
- "{workBranch}"
144
- ],
145
- [
146
- "阶段任务信息目录",
147
- "{stageOutput}"
148
- ]
149
- ],
150
- "review": "按workflow审查阶段成果、工具消费、Skill改进需求及交付目录。通过后确认下游输入版本;未通过交对应责任方修复复验。",
151
- "outputs": [
152
- [
153
- "下游输入登记目录",
154
- "{sharedRoot}/inputs/accepted"
155
- ],
156
- [
157
- "审核记录目录",
158
- "{sharedRoot}/deliverables/{id}-review"
159
- ]
160
- ]
70
+ "review": "按workflow审核Git成果、任务执行记录、实际工具消费和Skill改进需求,记录接受的提交及输入版本后再放行。"
161
71
  },
162
72
  "delivery": {
163
- "inputs": [
164
- [
165
- "阶段交付信息目录",
166
- "{sharedRoot}/deliverables"
167
- ]
168
- ],
169
- "review": "按workflow完成交付总审,确认各阶段检查点结论及体系改进已交接,持久保存必要报告。合入另按用户授权。",
170
- "outputs": [
171
- [
172
- "持久交付目录",
173
- "{persistentDeliveryDirectory}"
174
- ]
175
- ]
176
- },
177
- "deliveryGate": {
178
- "label": "交付门禁",
179
- "command": "iteration diff-review",
180
- "scope": "交付前必须执行交付门禁;门禁未通过,不得作成功交付。"
181
- },
182
- "gitDeliveryInstruction": "Git成果提交并推送到工作分支;任务信息直接写入指定本地目录。"
73
+ "review": "按workflow完成总审;结束任务前归档必要报告、截图和执行记录,核对持久资源及用户访问链接。合入另按用户授权。"
74
+ }
183
75
  }