@tacuchi/agent-workflow-cli 20.26.0 → 21.1.0
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/README.md +2 -1
- package/dist/adapters/node-file-system.js +3 -0
- package/dist/adapters/node-file-system.js.map +1 -1
- package/dist/application/capability/compose.js +161 -0
- package/dist/application/capability/compose.js.map +1 -0
- package/dist/application/capability/descriptor-loader.js +109 -0
- package/dist/application/capability/descriptor-loader.js.map +1 -0
- package/dist/application/capability/design-handler.js +299 -0
- package/dist/application/capability/design-handler.js.map +1 -0
- package/dist/application/capability/dispatcher.js +312 -0
- package/dist/application/capability/dispatcher.js.map +1 -0
- package/dist/application/capability/durable-effect.js +220 -0
- package/dist/application/capability/durable-effect.js.map +1 -0
- package/dist/application/capability/installed-inventory.js +168 -0
- package/dist/application/capability/installed-inventory.js.map +1 -0
- package/dist/application/capability/readiness.js +204 -0
- package/dist/application/capability/readiness.js.map +1 -0
- package/dist/application/capability/resolution.js +264 -0
- package/dist/application/capability/resolution.js.map +1 -0
- package/dist/application/capability/wrapper.js +187 -0
- package/dist/application/capability/wrapper.js.map +1 -0
- package/dist/application/context/manifest.js +11 -5
- package/dist/application/context/manifest.js.map +1 -1
- package/dist/application/context/measure.js +5 -2
- package/dist/application/context/measure.js.map +1 -1
- package/dist/application/context/plan-service.js +6 -6
- package/dist/application/context/plan-service.js.map +1 -1
- package/dist/application/design/design-bundle-service.js +148 -0
- package/dist/application/design/design-bundle-service.js.map +1 -0
- package/dist/application/design/design-gate-service.js +246 -0
- package/dist/application/design/design-gate-service.js.map +1 -0
- package/dist/application/design/design-graph-service.js +85 -0
- package/dist/application/design/design-graph-service.js.map +1 -0
- package/dist/application/design/design-index-service.js +132 -0
- package/dist/application/design/design-index-service.js.map +1 -0
- package/dist/application/design/design-proposal-service.js +69 -0
- package/dist/application/design/design-proposal-service.js.map +1 -0
- package/dist/application/design/design-publish-service.js +756 -0
- package/dist/application/design/design-publish-service.js.map +1 -0
- package/dist/application/design/design-record-service.js +100 -0
- package/dist/application/design/design-record-service.js.map +1 -0
- package/dist/application/design/design-resolver-service.js +165 -0
- package/dist/application/design/design-resolver-service.js.map +1 -0
- package/dist/application/flow/advance.js +533 -0
- package/dist/application/flow/advance.js.map +1 -0
- package/dist/application/flow/flow-service.js +65 -0
- package/dist/application/flow/flow-service.js.map +1 -0
- package/dist/application/flow/run-projection.js +80 -0
- package/dist/application/flow/run-projection.js.map +1 -0
- package/dist/application/flow/run-state-service.js +107 -0
- package/dist/application/flow/run-state-service.js.map +1 -0
- package/dist/application/flow/submit.js +423 -0
- package/dist/application/flow/submit.js.map +1 -0
- package/dist/application/resume-service.js +46 -14
- package/dist/application/resume-service.js.map +1 -1
- package/dist/application/self/install-skill.js +11 -0
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/uninstall.js +21 -0
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/semantic-operation/protocol.js +18 -12
- package/dist/application/semantic-operation/protocol.js.map +1 -1
- package/dist/application/semantic-operation/publish.js +56 -9
- package/dist/application/semantic-operation/publish.js.map +1 -1
- package/dist/application/skills-resolver-service.js +27 -6
- package/dist/application/skills-resolver-service.js.map +1 -1
- package/dist/application/status-service.js +5 -1
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/workline-index-service.js +6 -0
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/application/workspace-init-service.js +22 -2
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/cli/commands/capability.js +182 -0
- package/dist/cli/commands/capability.js.map +1 -0
- package/dist/cli/commands/designs.js +110 -0
- package/dist/cli/commands/designs.js.map +1 -0
- package/dist/cli/commands/flow.js +71 -0
- package/dist/cli/commands/flow.js.map +1 -0
- package/dist/cli/commands/index.js +6 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/resume.js +8 -0
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/commands/skills.js +55 -2
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/status.js +50 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/help-groups.js +9 -0
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/parser.js +7 -0
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +5 -0
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/workflow-tab.js +5 -1
- package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
- package/dist/domain/capability/descriptor.js +553 -0
- package/dist/domain/capability/descriptor.js.map +1 -0
- package/dist/domain/capability/effects.js +90 -0
- package/dist/domain/capability/effects.js.map +1 -0
- package/dist/domain/capability/protocol.js +494 -0
- package/dist/domain/capability/protocol.js.map +1 -0
- package/dist/domain/contract-reader.js +84 -0
- package/dist/domain/contract-reader.js.map +1 -0
- package/dist/domain/design/adapter.js +161 -0
- package/dist/domain/design/adapter.js.map +1 -0
- package/dist/domain/design/artifact-body.js +223 -0
- package/dist/domain/design/artifact-body.js.map +1 -0
- package/dist/domain/design/artifact.js +750 -0
- package/dist/domain/design/artifact.js.map +1 -0
- package/dist/domain/design/baseline.js +359 -0
- package/dist/domain/design/baseline.js.map +1 -0
- package/dist/domain/design/capability.js +310 -0
- package/dist/domain/design/capability.js.map +1 -0
- package/dist/domain/design/closure.js +161 -0
- package/dist/domain/design/closure.js.map +1 -0
- package/dist/domain/design/direct.js +108 -0
- package/dist/domain/design/direct.js.map +1 -0
- package/dist/domain/design/external-send.js +65 -0
- package/dist/domain/design/external-send.js.map +1 -0
- package/dist/domain/design/governance.js +298 -0
- package/dist/domain/design/governance.js.map +1 -0
- package/dist/domain/design/identity.js +145 -0
- package/dist/domain/design/identity.js.map +1 -0
- package/dist/domain/design/manifest.js +552 -0
- package/dist/domain/design/manifest.js.map +1 -0
- package/dist/domain/design/maturity.js +305 -0
- package/dist/domain/design/maturity.js.map +1 -0
- package/dist/domain/design/naming.js +117 -0
- package/dist/domain/design/naming.js.map +1 -0
- package/dist/domain/design/offline.js +92 -0
- package/dist/domain/design/offline.js.map +1 -0
- package/dist/domain/design/profiles.js +212 -0
- package/dist/domain/design/profiles.js.map +1 -0
- package/dist/domain/design/projections.js +165 -0
- package/dist/domain/design/projections.js.map +1 -0
- package/dist/domain/design/proposal.js +234 -0
- package/dist/domain/design/proposal.js.map +1 -0
- package/dist/domain/design/reference.js +234 -0
- package/dist/domain/design/reference.js.map +1 -0
- package/dist/domain/design/render-bundle.js +0 -0
- package/dist/domain/design/render-bundle.js.map +1 -0
- package/dist/domain/design/rendition.js +472 -0
- package/dist/domain/design/rendition.js.map +1 -0
- package/dist/domain/design/retired.js +61 -0
- package/dist/domain/design/retired.js.map +1 -0
- package/dist/domain/design/revision.js +219 -0
- package/dist/domain/design/revision.js.map +1 -0
- package/dist/domain/design/secrets.js +86 -0
- package/dist/domain/design/secrets.js.map +1 -0
- package/dist/domain/design/sources.js +180 -0
- package/dist/domain/design/sources.js.map +1 -0
- package/dist/domain/design/validation.js +19 -0
- package/dist/domain/design/validation.js.map +1 -0
- package/dist/domain/design/visual-evidence.js +155 -0
- package/dist/domain/design/visual-evidence.js.map +1 -0
- package/dist/domain/design/yaml-subset.js +390 -0
- package/dist/domain/design/yaml-subset.js.map +1 -0
- package/dist/domain/flow/answer.js +459 -0
- package/dist/domain/flow/answer.js.map +1 -0
- package/dist/domain/flow/authority.js +2276 -0
- package/dist/domain/flow/authority.js.map +1 -0
- package/dist/domain/flow/authorization.js +62 -0
- package/dist/domain/flow/authorization.js.map +1 -0
- package/dist/domain/flow/directive.js +421 -0
- package/dist/domain/flow/directive.js.map +1 -0
- package/dist/domain/flow/rules.js +140 -0
- package/dist/domain/flow/rules.js.map +1 -0
- package/dist/domain/flow/run-state.js +317 -0
- package/dist/domain/flow/run-state.js.map +1 -0
- package/dist/domain/harnesses.js +21 -0
- package/dist/domain/harnesses.js.map +1 -1
- package/dist/domain/safe-path.js +23 -0
- package/dist/domain/safe-path.js.map +1 -0
- package/dist/domain/skills.js +26 -3
- package/dist/domain/skills.js.map +1 -1
- package/package.json +1 -1
- package/skills/w/SKILL.md +15 -13
- package/skills/w/artifacts/README.md +3 -4
- package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +2 -2
- package/skills/w/commands/plan-exec.md +11 -5
- package/skills/w/commands/plan-new.md +6 -2
- package/skills/w/commands/plan-refine.md +6 -3
- package/skills/w/commands/quick.md +2 -2
- package/skills/w/commands/spec-new.md +2 -2
- package/skills/w/commands/spec-refine.md +1 -0
- package/skills/w/context/MANIFEST.json +57 -9
- package/skills/w/harness/HARNESS.md +20 -0
- package/skills/w/loops/CHASSIS.md +11 -20
- package/skills/w/loops/CODE-POLICIES.md +18 -9
- package/skills/w/loops/README.md +1 -1
- package/skills/w/loops/plan-exec-loop/LOOP.md +126 -62
- package/skills/w/loops/plan-new-loop/LOOP.md +71 -73
- package/skills/w/loops/plan-refine-loop/LOOP.md +20 -10
- package/skills/w/loops/quick-loop/LOOP.md +18 -26
- package/skills/w/loops/spec-refine-loop/LOOP.md +28 -30
- package/skills/w/modules/COMPACTION.md +2 -6
- package/skills/w/modules/DB-SCRIPTS-ONLY.md +2 -0
- package/skills/w/modules/DESIGN-REFERENCES.md +113 -0
- package/skills/w/modules/IDEATION-GATE.md +3 -3
- package/skills/w/modules/PERSIST-ROUTING.md +1 -0
- package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +65 -0
- package/skills/w/modules/PLAN-INPUT.md +5 -3
- package/skills/w/modules/PLAN-REFINE-SPLIT.md +3 -1
- package/skills/w/modules/PLAN-SPLIT-GATE.md +7 -5
- package/skills/w/modules/PROMPT-CONTINUITY.md +3 -1
- package/skills/w/modules/SPEC-CHANGE-SHAPE.md +4 -4
- package/skills/w/roles/README.md +9 -5
- package/skills/w/roles/design/CONTRACT.md +80 -0
- package/skills/w/roles/design/ROLE.md +224 -0
- package/skills/w/schemas/capability-descriptor.schema.json +260 -0
- package/skills/w/schemas/design/design-baseline.v1.schema.json +71 -0
- package/skills/w/schemas/design/design-manifest.v1.schema.json +322 -0
- package/skills/w/schemas/design/design-render-bundle.v1.schema.json +191 -0
- package/skills/w/schemas/design/design-rendition.v1.schema.json +232 -0
- package/skills/w/schemas/design/design-review.v1.schema.json +72 -0
- package/skills/w/schemas/design/design-revocation.v1.schema.json +54 -0
- package/skills/w/schemas/design/ui-flow.v1.schema.json +211 -0
- package/skills/w/schemas/design/ui-screen.v1.schema.json +242 -0
- package/skills/w/artifacts/artifacts-design/SPEC.md +0 -42
- package/skills/w/modules/PLAN-DESIGN-SPECS.md +0 -12
- package/skills/w/modules/PLAN-REFINE-DESIGN-SPECS.md +0 -7
- package/skills/w/roles/ui-spec/ROLE.md +0 -147
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://workline.dev/schemas/design/design-manifest.v1.schema.json",
|
|
4
|
+
"title": "Workline UI Design Package v1 — design manifest",
|
|
5
|
+
"description": "Mutable discovery index of a UI Design Package. Owns nothing normative: it declares identity, where the artifacts live, which baseline is current and who consumes the package. A baseline digest excludes this file, so re-indexing never rewrites a published revision.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schema",
|
|
10
|
+
"id",
|
|
11
|
+
"title",
|
|
12
|
+
"created",
|
|
13
|
+
"derived_from",
|
|
14
|
+
"current_baseline",
|
|
15
|
+
"baselines",
|
|
16
|
+
"catalog",
|
|
17
|
+
"currentness",
|
|
18
|
+
"governance",
|
|
19
|
+
"relations"
|
|
20
|
+
],
|
|
21
|
+
"properties": {
|
|
22
|
+
"schema": {
|
|
23
|
+
"description": "Format version. An unknown value stops validation before any field is read.",
|
|
24
|
+
"const": "workline.design-manifest/v1"
|
|
25
|
+
},
|
|
26
|
+
"id": {
|
|
27
|
+
"description": "Package identity. Derives from nothing — not a spec, plan, session, slug, path or provider — and survives every rename or move.",
|
|
28
|
+
"type": "string",
|
|
29
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
30
|
+
},
|
|
31
|
+
"title": {
|
|
32
|
+
"description": "Human name of the package.",
|
|
33
|
+
"type": "string",
|
|
34
|
+
"minLength": 1
|
|
35
|
+
},
|
|
36
|
+
"created": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
|
|
39
|
+
},
|
|
40
|
+
"derived_from": {
|
|
41
|
+
"description": "Baseline of the package this one forked from. An intentional divergence creates another package instead of a second live baseline line.",
|
|
42
|
+
"type": ["string", "null"],
|
|
43
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}$"
|
|
44
|
+
},
|
|
45
|
+
"current_baseline": {
|
|
46
|
+
"description": "The published baseline in force. Null until the first publication. Must match its entry in `baselines`.",
|
|
47
|
+
"type": ["object", "null"],
|
|
48
|
+
"additionalProperties": false,
|
|
49
|
+
"required": ["revision", "path", "digest"],
|
|
50
|
+
"properties": {
|
|
51
|
+
"revision": {
|
|
52
|
+
"type": "integer",
|
|
53
|
+
"minimum": 1
|
|
54
|
+
},
|
|
55
|
+
"path": {
|
|
56
|
+
"$ref": "#/$defs/packagePath"
|
|
57
|
+
},
|
|
58
|
+
"digest": {
|
|
59
|
+
"$ref": "#/$defs/digest"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"baselines": {
|
|
64
|
+
"description": "The package's baseline line, chained by `parent_baseline`.",
|
|
65
|
+
"type": "array",
|
|
66
|
+
"items": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"additionalProperties": false,
|
|
69
|
+
"required": ["revision", "path", "digest", "parent_baseline", "published"],
|
|
70
|
+
"properties": {
|
|
71
|
+
"revision": {
|
|
72
|
+
"type": "integer",
|
|
73
|
+
"minimum": 1
|
|
74
|
+
},
|
|
75
|
+
"path": {
|
|
76
|
+
"$ref": "#/$defs/packagePath"
|
|
77
|
+
},
|
|
78
|
+
"digest": {
|
|
79
|
+
"$ref": "#/$defs/digest"
|
|
80
|
+
},
|
|
81
|
+
"parent_baseline": {
|
|
82
|
+
"type": ["string", "null"],
|
|
83
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}$"
|
|
84
|
+
},
|
|
85
|
+
"published": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"catalog": {
|
|
93
|
+
"description": "Every revision the package holds. Flows and screens carry maturity; rules, tokens and renditions do not; assets are content-addressed and have no ID.",
|
|
94
|
+
"type": "object",
|
|
95
|
+
"additionalProperties": false,
|
|
96
|
+
"required": ["flows", "screens", "rules", "tokens", "renditions", "assets"],
|
|
97
|
+
"properties": {
|
|
98
|
+
"flows": {
|
|
99
|
+
"type": "array",
|
|
100
|
+
"items": {
|
|
101
|
+
"$ref": "#/$defs/maturedArtifact"
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"screens": {
|
|
105
|
+
"type": "array",
|
|
106
|
+
"items": {
|
|
107
|
+
"$ref": "#/$defs/screenArtifact"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"rules": {
|
|
111
|
+
"type": "array",
|
|
112
|
+
"items": {
|
|
113
|
+
"$ref": "#/$defs/revisionedArtifact"
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"tokens": {
|
|
117
|
+
"type": "array",
|
|
118
|
+
"items": {
|
|
119
|
+
"$ref": "#/$defs/revisionedArtifact"
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"renditions": {
|
|
123
|
+
"type": "array",
|
|
124
|
+
"items": {
|
|
125
|
+
"$ref": "#/$defs/revisionedArtifact"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"assets": {
|
|
129
|
+
"type": "array",
|
|
130
|
+
"items": {
|
|
131
|
+
"type": "object",
|
|
132
|
+
"additionalProperties": false,
|
|
133
|
+
"required": ["digest", "path"],
|
|
134
|
+
"properties": {
|
|
135
|
+
"digest": {
|
|
136
|
+
"$ref": "#/$defs/digest"
|
|
137
|
+
},
|
|
138
|
+
"path": {
|
|
139
|
+
"description": "`assets/<sha256>-<safe-name>.<ext>` — the digest is in the file name, so different bytes can never occupy the same path.",
|
|
140
|
+
"$ref": "#/$defs/packagePath"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"currentness": {
|
|
148
|
+
"description": "Derived from `supersedes`, cached here for discovery. Superseded warns; it never blocks — only an explicit revocation does.",
|
|
149
|
+
"type": "array",
|
|
150
|
+
"items": {
|
|
151
|
+
"type": "object",
|
|
152
|
+
"additionalProperties": false,
|
|
153
|
+
"required": ["ref", "state"],
|
|
154
|
+
"properties": {
|
|
155
|
+
"ref": {
|
|
156
|
+
"$ref": "#/$defs/artifactRef"
|
|
157
|
+
},
|
|
158
|
+
"state": {
|
|
159
|
+
"enum": ["current", "superseded"]
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"governance": {
|
|
165
|
+
"description": "Index of review and revocation records. The records themselves live outside the baseline they decide on, so no digest is self-referential.",
|
|
166
|
+
"type": "object",
|
|
167
|
+
"additionalProperties": false,
|
|
168
|
+
"required": ["reviews", "revocations"],
|
|
169
|
+
"properties": {
|
|
170
|
+
"reviews": {
|
|
171
|
+
"type": "array",
|
|
172
|
+
"items": {
|
|
173
|
+
"$ref": "#/$defs/governanceEntry"
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"revocations": {
|
|
177
|
+
"type": "array",
|
|
178
|
+
"items": {
|
|
179
|
+
"$ref": "#/$defs/governanceEntry"
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
"relations": {
|
|
185
|
+
"description": "Many-to-many links to the documents that consume this package — the backreference direction, so a consumer is found without scanning docs/.",
|
|
186
|
+
"type": "object",
|
|
187
|
+
"additionalProperties": false,
|
|
188
|
+
"required": ["specs", "plans"],
|
|
189
|
+
"properties": {
|
|
190
|
+
"specs": {
|
|
191
|
+
"type": "array",
|
|
192
|
+
"items": {
|
|
193
|
+
"type": "string"
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
"plans": {
|
|
197
|
+
"type": "array",
|
|
198
|
+
"items": {
|
|
199
|
+
"type": "string"
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
"$defs": {
|
|
206
|
+
"digest": {
|
|
207
|
+
"type": "string",
|
|
208
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
209
|
+
},
|
|
210
|
+
"packagePath": {
|
|
211
|
+
"description": "Package-relative path. Never absolute, never Windows-separated, never carrying `.` or `..`.",
|
|
212
|
+
"type": "string",
|
|
213
|
+
"pattern": "^[^/\\\\][^\\\\]*$"
|
|
214
|
+
},
|
|
215
|
+
"artifactRef": {
|
|
216
|
+
"type": "string",
|
|
217
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/(?:FLW|SCR|RUL|TOK|VIS|REV|RVK)-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}(#[A-Za-z0-9][A-Za-z0-9_-]*)?$"
|
|
218
|
+
},
|
|
219
|
+
"revisionedArtifact": {
|
|
220
|
+
"type": "object",
|
|
221
|
+
"additionalProperties": false,
|
|
222
|
+
"required": ["id", "revision", "path", "supersedes"],
|
|
223
|
+
"properties": {
|
|
224
|
+
"id": {
|
|
225
|
+
"type": "string",
|
|
226
|
+
"pattern": "^(?:FLW|SCR|RUL|TOK|VIS)-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
227
|
+
},
|
|
228
|
+
"revision": {
|
|
229
|
+
"type": "integer",
|
|
230
|
+
"minimum": 1
|
|
231
|
+
},
|
|
232
|
+
"path": {
|
|
233
|
+
"$ref": "#/$defs/packagePath"
|
|
234
|
+
},
|
|
235
|
+
"supersedes": {
|
|
236
|
+
"type": ["string", "null"],
|
|
237
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/(?:FLW|SCR|RUL|TOK|VIS)-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}$"
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
"maturedArtifact": {
|
|
242
|
+
"type": "object",
|
|
243
|
+
"additionalProperties": false,
|
|
244
|
+
"required": ["id", "revision", "path", "supersedes", "maturity"],
|
|
245
|
+
"properties": {
|
|
246
|
+
"id": {
|
|
247
|
+
"type": "string",
|
|
248
|
+
"pattern": "^(?:FLW|SCR)-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
249
|
+
},
|
|
250
|
+
"revision": {
|
|
251
|
+
"type": "integer",
|
|
252
|
+
"minimum": 1
|
|
253
|
+
},
|
|
254
|
+
"path": {
|
|
255
|
+
"$ref": "#/$defs/packagePath"
|
|
256
|
+
},
|
|
257
|
+
"supersedes": {
|
|
258
|
+
"type": ["string", "null"],
|
|
259
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/(?:FLW|SCR)-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}$"
|
|
260
|
+
},
|
|
261
|
+
"maturity": {
|
|
262
|
+
"enum": ["outline", "handoff"]
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
"governanceEntry": {
|
|
267
|
+
"type": "object",
|
|
268
|
+
"additionalProperties": false,
|
|
269
|
+
"required": ["id", "path", "digest", "target"],
|
|
270
|
+
"properties": {
|
|
271
|
+
"id": {
|
|
272
|
+
"type": "string",
|
|
273
|
+
"pattern": "^(?:REV|RVK)-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
274
|
+
},
|
|
275
|
+
"path": {
|
|
276
|
+
"$ref": "#/$defs/packagePath"
|
|
277
|
+
},
|
|
278
|
+
"digest": {
|
|
279
|
+
"$ref": "#/$defs/digest"
|
|
280
|
+
},
|
|
281
|
+
"target": {
|
|
282
|
+
"type": "string",
|
|
283
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}$"
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
"screenArtifact": {
|
|
288
|
+
"type": "object",
|
|
289
|
+
"additionalProperties": false,
|
|
290
|
+
"required": ["id", "revision", "path", "supersedes", "maturity", "states"],
|
|
291
|
+
"properties": {
|
|
292
|
+
"id": {
|
|
293
|
+
"type": "string",
|
|
294
|
+
"pattern": "^(?:FLW|SCR)-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
295
|
+
},
|
|
296
|
+
"revision": {
|
|
297
|
+
"type": "integer",
|
|
298
|
+
"minimum": 1
|
|
299
|
+
},
|
|
300
|
+
"path": {
|
|
301
|
+
"$ref": "#/$defs/packagePath"
|
|
302
|
+
},
|
|
303
|
+
"supersedes": {
|
|
304
|
+
"type": ["string", "null"],
|
|
305
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/(?:FLW|SCR)-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}$"
|
|
306
|
+
},
|
|
307
|
+
"maturity": {
|
|
308
|
+
"enum": ["outline", "handoff"]
|
|
309
|
+
},
|
|
310
|
+
"states": {
|
|
311
|
+
"type": "array",
|
|
312
|
+
"minItems": 1,
|
|
313
|
+
"uniqueItems": true,
|
|
314
|
+
"items": {
|
|
315
|
+
"type": "string",
|
|
316
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$"
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://workline.dev/schemas/design/design-render-bundle.v1.schema.json",
|
|
4
|
+
"title": "Workline UI Design Package v1 — Render Context Bundle",
|
|
5
|
+
"description": "The single exchange payload every renderer and adapter receives. Deterministic for a baseline, a selection and an adapter profile: the digest is taken over canonical JSON without `digest` and without `generated`, so two equivalent runs seal the same bytes. It carries context, never authority — an integration transforms it over its own copy and the package stays untouched.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schema",
|
|
10
|
+
"package",
|
|
11
|
+
"baseline",
|
|
12
|
+
"baseline_digest",
|
|
13
|
+
"adapter",
|
|
14
|
+
"roots",
|
|
15
|
+
"closure",
|
|
16
|
+
"assets",
|
|
17
|
+
"data_classification",
|
|
18
|
+
"accessibility",
|
|
19
|
+
"losses",
|
|
20
|
+
"digest",
|
|
21
|
+
"generated"
|
|
22
|
+
],
|
|
23
|
+
"properties": {
|
|
24
|
+
"schema": {
|
|
25
|
+
"const": "workline.design-render-bundle/v1"
|
|
26
|
+
},
|
|
27
|
+
"package": {
|
|
28
|
+
"description": "The package this bundle was cut from.",
|
|
29
|
+
"type": "string",
|
|
30
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
31
|
+
},
|
|
32
|
+
"baseline": {
|
|
33
|
+
"description": "The published revision the selection was read at.",
|
|
34
|
+
"$ref": "#/$defs/revision"
|
|
35
|
+
},
|
|
36
|
+
"baseline_digest": {
|
|
37
|
+
"$ref": "#/$defs/digest"
|
|
38
|
+
},
|
|
39
|
+
"adapter": {
|
|
40
|
+
"description": "Which profile, at which version, this bundle was cut for. Determinism is a promise PER profile version: a profile that changes what it needs produces a different bundle.",
|
|
41
|
+
"type": "object",
|
|
42
|
+
"additionalProperties": false,
|
|
43
|
+
"required": ["profile", "version"],
|
|
44
|
+
"properties": {
|
|
45
|
+
"profile": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
|
|
48
|
+
},
|
|
49
|
+
"version": {
|
|
50
|
+
"type": "integer",
|
|
51
|
+
"minimum": 1
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"roots": {
|
|
56
|
+
"description": "The selection, sorted. A selection is a set, so the order it was typed in is not part of the bundle. An anchor is allowed here: a root may ask for one state.",
|
|
57
|
+
"type": "array",
|
|
58
|
+
"minItems": 1,
|
|
59
|
+
"uniqueItems": true,
|
|
60
|
+
"items": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/(?:FLW|SCR|RUL|TOK|VIS)-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}(?:#[A-Za-z0-9][A-Za-z0-9_-]*)?$"
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"closure": {
|
|
66
|
+
"description": "Every revision the selection reaches, ordered by reference, with the content type and the digest of the bytes found on disk.",
|
|
67
|
+
"type": "array",
|
|
68
|
+
"items": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"additionalProperties": false,
|
|
71
|
+
"required": ["ref", "kind", "path", "content_type", "sha256", "states"],
|
|
72
|
+
"properties": {
|
|
73
|
+
"ref": {
|
|
74
|
+
"description": "The revision, never anchored: the states demanded travel in `states`.",
|
|
75
|
+
"type": "string",
|
|
76
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/(?:FLW|SCR|RUL|TOK|VIS)-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}$"
|
|
77
|
+
},
|
|
78
|
+
"kind": {
|
|
79
|
+
"enum": ["flow", "screen", "rule", "token", "rendition"]
|
|
80
|
+
},
|
|
81
|
+
"path": {
|
|
82
|
+
"description": "Package-relative path. Never absolute and never escaping the package.",
|
|
83
|
+
"type": "string",
|
|
84
|
+
"minLength": 1
|
|
85
|
+
},
|
|
86
|
+
"content_type": {
|
|
87
|
+
"description": "Declared, not sniffed: a renderer decides how to read a member from this field.",
|
|
88
|
+
"type": "string",
|
|
89
|
+
"minLength": 1
|
|
90
|
+
},
|
|
91
|
+
"sha256": {
|
|
92
|
+
"$ref": "#/$defs/digest"
|
|
93
|
+
},
|
|
94
|
+
"states": {
|
|
95
|
+
"description": "State anchors the selection asked for. Empty means the whole revision.",
|
|
96
|
+
"type": "array",
|
|
97
|
+
"uniqueItems": true,
|
|
98
|
+
"items": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"assets": {
|
|
107
|
+
"description": "The assets this bundle is allowed to hand over — only bytes the package custodies.",
|
|
108
|
+
"type": "array",
|
|
109
|
+
"items": {
|
|
110
|
+
"type": "object",
|
|
111
|
+
"additionalProperties": false,
|
|
112
|
+
"required": ["digest", "path", "content_type"],
|
|
113
|
+
"properties": {
|
|
114
|
+
"digest": {
|
|
115
|
+
"$ref": "#/$defs/digest"
|
|
116
|
+
},
|
|
117
|
+
"path": {
|
|
118
|
+
"type": "string",
|
|
119
|
+
"pattern": "^assets/"
|
|
120
|
+
},
|
|
121
|
+
"content_type": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"minLength": 1
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"data_classification": {
|
|
129
|
+
"description": "How the material was prepared. `synthetic` is the default; `real` is an authorization somebody had to give.",
|
|
130
|
+
"enum": ["synthetic", "redacted", "real"]
|
|
131
|
+
},
|
|
132
|
+
"accessibility": {
|
|
133
|
+
"description": "The accessibility obligations the selected revisions state. A design states them; a rendition never discharges them.",
|
|
134
|
+
"type": "array",
|
|
135
|
+
"items": {
|
|
136
|
+
"type": "object",
|
|
137
|
+
"additionalProperties": false,
|
|
138
|
+
"required": ["ref", "statement"],
|
|
139
|
+
"properties": {
|
|
140
|
+
"ref": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/(?:FLW|SCR|RUL|TOK|VIS)-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}(?:#[A-Za-z0-9][A-Za-z0-9_-]*)?$"
|
|
143
|
+
},
|
|
144
|
+
"statement": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"minLength": 1
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"losses": {
|
|
152
|
+
"description": "What this profile cannot represent, enumerated instead of omitted. A loss is part of the result, not a defect.",
|
|
153
|
+
"type": "array",
|
|
154
|
+
"items": {
|
|
155
|
+
"type": "object",
|
|
156
|
+
"additionalProperties": false,
|
|
157
|
+
"required": ["subject", "why"],
|
|
158
|
+
"properties": {
|
|
159
|
+
"subject": {
|
|
160
|
+
"description": "What is lost: `capability:pull`, `section:localization`, `medium:motion`.",
|
|
161
|
+
"type": "string",
|
|
162
|
+
"minLength": 1
|
|
163
|
+
},
|
|
164
|
+
"why": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"minLength": 1
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"digest": {
|
|
172
|
+
"description": "Over canonical JSON of this object WITHOUT `digest` and WITHOUT `generated`. That exclusion is the determinism boundary made checkable.",
|
|
173
|
+
"$ref": "#/$defs/digest"
|
|
174
|
+
},
|
|
175
|
+
"generated": {
|
|
176
|
+
"description": "YYYY-MM-DD. Outside the seal: a date is not part of what was selected.",
|
|
177
|
+
"type": "string",
|
|
178
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
"$defs": {
|
|
182
|
+
"revision": {
|
|
183
|
+
"type": "integer",
|
|
184
|
+
"minimum": 1
|
|
185
|
+
},
|
|
186
|
+
"digest": {
|
|
187
|
+
"type": "string",
|
|
188
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|