@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,232 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://workline.dev/schemas/design/design-rendition.v1.schema.json",
|
|
4
|
+
"title": "Workline UI Design Package v1 — Design Rendition",
|
|
5
|
+
"description": "What a picture of a design knows about itself. Three separations never collapse here: fidelity is a property of the picture and never moves the screen's maturity; staleness against the source is DERIVED (`source_digest` is recomputable from the sources' bytes) while sync with the provider is a claim and lives inside `provider`; and a locator locates without ever identifying — it never replaces the Workline id, revision or digest, and never carries a credential.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schema",
|
|
10
|
+
"id",
|
|
11
|
+
"revision",
|
|
12
|
+
"supersedes",
|
|
13
|
+
"purpose",
|
|
14
|
+
"medium",
|
|
15
|
+
"fidelity",
|
|
16
|
+
"tool",
|
|
17
|
+
"format",
|
|
18
|
+
"context",
|
|
19
|
+
"sources",
|
|
20
|
+
"source_digest",
|
|
21
|
+
"coverage",
|
|
22
|
+
"files",
|
|
23
|
+
"provider",
|
|
24
|
+
"access",
|
|
25
|
+
"interaction_evidence",
|
|
26
|
+
"data_classification"
|
|
27
|
+
],
|
|
28
|
+
"properties": {
|
|
29
|
+
"schema": {
|
|
30
|
+
"const": "workline.design-rendition/v1"
|
|
31
|
+
},
|
|
32
|
+
"id": {
|
|
33
|
+
"description": "Qualified identity WITHOUT the revision — the revision is its own field.",
|
|
34
|
+
"type": "string",
|
|
35
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/VIS-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
36
|
+
},
|
|
37
|
+
"revision": {
|
|
38
|
+
"type": "integer",
|
|
39
|
+
"minimum": 1
|
|
40
|
+
},
|
|
41
|
+
"supersedes": {
|
|
42
|
+
"description": "An EARLIER revision of this same rendition, or null.",
|
|
43
|
+
"type": ["string", "null"],
|
|
44
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/VIS-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}$"
|
|
45
|
+
},
|
|
46
|
+
"purpose": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"minLength": 1
|
|
49
|
+
},
|
|
50
|
+
"medium": {
|
|
51
|
+
"description": "What kind of artifact it is. Only `prototype` and `storyboard` can sustain interaction evidence — a still frame cannot show a transition.",
|
|
52
|
+
"enum": ["static_image", "document", "interactive_html", "prototype", "storyboard"]
|
|
53
|
+
},
|
|
54
|
+
"fidelity": {
|
|
55
|
+
"description": "How polished the PICTURE is. Deliberately not sharing vocabulary with maturity: raising fidelity never promotes a screen.",
|
|
56
|
+
"enum": ["low", "medium", "high"]
|
|
57
|
+
},
|
|
58
|
+
"tool": {
|
|
59
|
+
"description": "The tool that produced it, as a human would name it.",
|
|
60
|
+
"type": "string",
|
|
61
|
+
"minLength": 1
|
|
62
|
+
},
|
|
63
|
+
"format": {
|
|
64
|
+
"description": "Closed so it can be cross-checked against the file actually on disk.",
|
|
65
|
+
"enum": ["svg", "png", "jpeg", "webp", "pdf", "html"]
|
|
66
|
+
},
|
|
67
|
+
"context": {
|
|
68
|
+
"description": "The same design looks different depending on where it was rendered.",
|
|
69
|
+
"type": "object",
|
|
70
|
+
"additionalProperties": false,
|
|
71
|
+
"required": ["platform", "viewport", "theme", "locale", "variants"],
|
|
72
|
+
"properties": {
|
|
73
|
+
"platform": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"minLength": 1
|
|
76
|
+
},
|
|
77
|
+
"viewport": {
|
|
78
|
+
"description": "`1280x800`, `390x844`, or a named breakpoint.",
|
|
79
|
+
"type": "string",
|
|
80
|
+
"minLength": 1
|
|
81
|
+
},
|
|
82
|
+
"theme": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"minLength": 1
|
|
85
|
+
},
|
|
86
|
+
"locale": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"minLength": 1
|
|
89
|
+
},
|
|
90
|
+
"variants": {
|
|
91
|
+
"type": "array",
|
|
92
|
+
"uniqueItems": true,
|
|
93
|
+
"items": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"minLength": 1
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"sources": {
|
|
101
|
+
"description": "The exact revisions this rendition was produced from, with the bytes it saw. An anchor is meaningful here: a preview of one state is a preview of one state.",
|
|
102
|
+
"type": "array",
|
|
103
|
+
"minItems": 1,
|
|
104
|
+
"items": {
|
|
105
|
+
"type": "object",
|
|
106
|
+
"additionalProperties": false,
|
|
107
|
+
"required": ["ref", "sha256"],
|
|
108
|
+
"properties": {
|
|
109
|
+
"ref": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/(?:FLW|SCR|RUL|TOK)-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}(?:#[A-Za-z0-9][A-Za-z0-9_-]*)?$"
|
|
112
|
+
},
|
|
113
|
+
"sha256": {
|
|
114
|
+
"$ref": "#/$defs/digest"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"source_digest": {
|
|
120
|
+
"description": "One digest over the canonical list of `sources`. Recomputable from the package as it stands right now — that is what makes obsolescence detectable instead of asserted.",
|
|
121
|
+
"$ref": "#/$defs/digest"
|
|
122
|
+
},
|
|
123
|
+
"coverage": {
|
|
124
|
+
"description": "What this rendition demonstrates, in the screen's own vocabulary. The reverse direction of the screen's classification matrix; the handoff gate crosses the two.",
|
|
125
|
+
"type": "object",
|
|
126
|
+
"additionalProperties": false,
|
|
127
|
+
"required": ["criteria", "states"],
|
|
128
|
+
"properties": {
|
|
129
|
+
"criteria": {
|
|
130
|
+
"type": "array",
|
|
131
|
+
"uniqueItems": true,
|
|
132
|
+
"items": {
|
|
133
|
+
"type": "string",
|
|
134
|
+
"pattern": "^S\\d{3}/AC-(?:[A-Z]+-)?\\d+$"
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"states": {
|
|
138
|
+
"type": "array",
|
|
139
|
+
"uniqueItems": true,
|
|
140
|
+
"items": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$"
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"files": {
|
|
148
|
+
"description": "The local evidence, relative to the rendition's OWN directory. Never empty: a rendition with no local file is exactly the evidence that disappears when the provider does.",
|
|
149
|
+
"type": "array",
|
|
150
|
+
"minItems": 1,
|
|
151
|
+
"items": {
|
|
152
|
+
"type": "object",
|
|
153
|
+
"additionalProperties": false,
|
|
154
|
+
"required": ["path", "sha256"],
|
|
155
|
+
"properties": {
|
|
156
|
+
"path": {
|
|
157
|
+
"description": "`preview.svg` — relative to this rendition's folder, never escaping it.",
|
|
158
|
+
"type": "string",
|
|
159
|
+
"minLength": 1
|
|
160
|
+
},
|
|
161
|
+
"sha256": {
|
|
162
|
+
"$ref": "#/$defs/digest"
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"provider": {
|
|
168
|
+
"description": "The external object, when there is one. `sync` lives in here because it only means something once a provider copy exists.",
|
|
169
|
+
"type": ["object", "null"],
|
|
170
|
+
"additionalProperties": false,
|
|
171
|
+
"required": ["name", "locator", "version", "sync"],
|
|
172
|
+
"properties": {
|
|
173
|
+
"name": {
|
|
174
|
+
"type": "string",
|
|
175
|
+
"minLength": 1
|
|
176
|
+
},
|
|
177
|
+
"locator": {
|
|
178
|
+
"description": "Provider-shaped keys (`file_key`, `node_id`, `project_id`, `artifact`, …). The key set is the adapter profile's business, not this schema's. Never a credential.",
|
|
179
|
+
"type": "object",
|
|
180
|
+
"minProperties": 1,
|
|
181
|
+
"additionalProperties": {
|
|
182
|
+
"type": "string",
|
|
183
|
+
"minLength": 1
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
"version": {
|
|
187
|
+
"description": "The provider's own version identity, or null when it has no stable one.",
|
|
188
|
+
"type": ["string", "null"],
|
|
189
|
+
"minLength": 1
|
|
190
|
+
},
|
|
191
|
+
"sync": {
|
|
192
|
+
"description": "A CLAIM about the provider's copy, not a derivation. `unknown` is the honest answer without consulting it.",
|
|
193
|
+
"enum": ["in_sync", "diverged", "unknown"]
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
"access": {
|
|
198
|
+
"description": "Who can reach the editable original, as a class. `local_only` is what keeps working when the provider does not.",
|
|
199
|
+
"enum": ["local_only", "public", "link_shared", "team", "private"]
|
|
200
|
+
},
|
|
201
|
+
"interaction_evidence": {
|
|
202
|
+
"description": "A trigger, a transition and an outcome — what a still frame cannot show. Null for a static rendition.",
|
|
203
|
+
"type": ["object", "null"],
|
|
204
|
+
"additionalProperties": false,
|
|
205
|
+
"required": ["trigger", "transition", "outcome"],
|
|
206
|
+
"properties": {
|
|
207
|
+
"trigger": {
|
|
208
|
+
"type": "string",
|
|
209
|
+
"minLength": 1
|
|
210
|
+
},
|
|
211
|
+
"transition": {
|
|
212
|
+
"type": "string",
|
|
213
|
+
"minLength": 1
|
|
214
|
+
},
|
|
215
|
+
"outcome": {
|
|
216
|
+
"type": "string",
|
|
217
|
+
"minLength": 1
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
"data_classification": {
|
|
222
|
+
"description": "How the material shown was prepared. `synthetic` is the default; `real` is an authorization somebody had to give.",
|
|
223
|
+
"enum": ["synthetic", "redacted", "real"]
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
"$defs": {
|
|
227
|
+
"digest": {
|
|
228
|
+
"type": "string",
|
|
229
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://workline.dev/schemas/design-review.v1.schema.json",
|
|
4
|
+
"title": "Workline design review record v1",
|
|
5
|
+
"description": "An external review of one exact baseline revision. It lives OUTSIDE the baseline it reviews, so no digest is self-referential, and it never grants anything to a later revision.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schema",
|
|
10
|
+
"id",
|
|
11
|
+
"target",
|
|
12
|
+
"target_digest",
|
|
13
|
+
"author",
|
|
14
|
+
"date",
|
|
15
|
+
"decision",
|
|
16
|
+
"evidence",
|
|
17
|
+
"digest"
|
|
18
|
+
],
|
|
19
|
+
"properties": {
|
|
20
|
+
"schema": {
|
|
21
|
+
"const": "workline.design-review/v1"
|
|
22
|
+
},
|
|
23
|
+
"id": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"pattern": "^REV-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
26
|
+
},
|
|
27
|
+
"target": {
|
|
28
|
+
"description": "The exact baseline this record decides on.",
|
|
29
|
+
"$ref": "#/$defs/baselineRef"
|
|
30
|
+
},
|
|
31
|
+
"target_digest": {
|
|
32
|
+
"description": "The digest that baseline had. A record decides on BYTES, not on a name.",
|
|
33
|
+
"$ref": "#/$defs/digest"
|
|
34
|
+
},
|
|
35
|
+
"author": {
|
|
36
|
+
"description": "Who decided, or the role that did.",
|
|
37
|
+
"type": "string",
|
|
38
|
+
"minLength": 1
|
|
39
|
+
},
|
|
40
|
+
"date": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
|
|
43
|
+
},
|
|
44
|
+
"decision": {
|
|
45
|
+
"description": "`proposed` is the state a baseline is born in; only `approved` grants anything.",
|
|
46
|
+
"enum": ["proposed", "approved", "rejected"]
|
|
47
|
+
},
|
|
48
|
+
"evidence": {
|
|
49
|
+
"description": "Optional: where the decision was taken. Never a substitute for the decision.",
|
|
50
|
+
"type": "array",
|
|
51
|
+
"uniqueItems": true,
|
|
52
|
+
"items": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"minLength": 1
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"digest": {
|
|
58
|
+
"description": "SHA-256 of this record's canonical JSON WITHOUT this field.",
|
|
59
|
+
"$ref": "#/$defs/digest"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"$defs": {
|
|
63
|
+
"baselineRef": {
|
|
64
|
+
"type": "string",
|
|
65
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}$"
|
|
66
|
+
},
|
|
67
|
+
"digest": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://workline.dev/schemas/design-revocation.v1.schema.json",
|
|
4
|
+
"title": "Workline design revocation record v1",
|
|
5
|
+
"description": "An explicit, audited block on one exact baseline revision. The ONLY thing that forbids executing against a published revision.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schema", "id", "target", "target_digest", "author", "date", "reason", "digest"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schema": {
|
|
11
|
+
"const": "workline.design-revocation/v1"
|
|
12
|
+
},
|
|
13
|
+
"id": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"pattern": "^RVK-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
16
|
+
},
|
|
17
|
+
"target": {
|
|
18
|
+
"description": "The exact baseline this record decides on.",
|
|
19
|
+
"$ref": "#/$defs/baselineRef"
|
|
20
|
+
},
|
|
21
|
+
"target_digest": {
|
|
22
|
+
"description": "The digest that baseline had. A record decides on BYTES, not on a name.",
|
|
23
|
+
"$ref": "#/$defs/digest"
|
|
24
|
+
},
|
|
25
|
+
"author": {
|
|
26
|
+
"description": "Who decided, or the role that did.",
|
|
27
|
+
"type": "string",
|
|
28
|
+
"minLength": 1
|
|
29
|
+
},
|
|
30
|
+
"date": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
|
|
33
|
+
},
|
|
34
|
+
"reason": {
|
|
35
|
+
"description": "Why this revision must not be executed. Not optional: a block without a reason is not auditable.",
|
|
36
|
+
"type": "string",
|
|
37
|
+
"minLength": 1
|
|
38
|
+
},
|
|
39
|
+
"digest": {
|
|
40
|
+
"description": "SHA-256 of this record's canonical JSON WITHOUT this field.",
|
|
41
|
+
"$ref": "#/$defs/digest"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"$defs": {
|
|
45
|
+
"baselineRef": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}$"
|
|
48
|
+
},
|
|
49
|
+
"digest": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://workline.dev/schemas/design/ui-flow.v1.schema.json",
|
|
4
|
+
"title": "Workline UI Design Package v1 — Flow Specification frontmatter",
|
|
5
|
+
"description": "Machine-readable half of a User Flow / Task Flow. Identity, graph, dependencies and traceability resolve from here alone: nothing normative may require reading the Markdown body.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schema",
|
|
10
|
+
"id",
|
|
11
|
+
"revision",
|
|
12
|
+
"maturity",
|
|
13
|
+
"supersedes",
|
|
14
|
+
"purpose",
|
|
15
|
+
"platform",
|
|
16
|
+
"actors",
|
|
17
|
+
"entry",
|
|
18
|
+
"nodes",
|
|
19
|
+
"edges",
|
|
20
|
+
"dependencies",
|
|
21
|
+
"trace",
|
|
22
|
+
"unknowns",
|
|
23
|
+
"not_applicable",
|
|
24
|
+
"external"
|
|
25
|
+
],
|
|
26
|
+
"properties": {
|
|
27
|
+
"schema": {
|
|
28
|
+
"const": "workline.ui-flow/v1"
|
|
29
|
+
},
|
|
30
|
+
"id": {
|
|
31
|
+
"description": "Qualified identity WITHOUT the revision — the revision is its own field.",
|
|
32
|
+
"type": "string",
|
|
33
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/FLW-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
34
|
+
},
|
|
35
|
+
"revision": {
|
|
36
|
+
"$ref": "#/$defs/revision"
|
|
37
|
+
},
|
|
38
|
+
"maturity": {
|
|
39
|
+
"$ref": "#/$defs/maturity"
|
|
40
|
+
},
|
|
41
|
+
"supersedes": {
|
|
42
|
+
"description": "An EARLIER revision of this same flow, or null. Currentness is derived from it.",
|
|
43
|
+
"type": ["string", "null"],
|
|
44
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/FLW-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}$"
|
|
45
|
+
},
|
|
46
|
+
"purpose": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"minLength": 1
|
|
49
|
+
},
|
|
50
|
+
"platform": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"minLength": 1
|
|
53
|
+
},
|
|
54
|
+
"actors": {
|
|
55
|
+
"type": "array",
|
|
56
|
+
"items": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"minLength": 1
|
|
59
|
+
},
|
|
60
|
+
"uniqueItems": true
|
|
61
|
+
},
|
|
62
|
+
"entry": {
|
|
63
|
+
"description": "The screen STATE the flow starts at. Must also appear in `nodes`.",
|
|
64
|
+
"$ref": "#/$defs/stateRef"
|
|
65
|
+
},
|
|
66
|
+
"nodes": {
|
|
67
|
+
"description": "Every screen state the flow visits, by exact reference.",
|
|
68
|
+
"type": "array",
|
|
69
|
+
"items": {
|
|
70
|
+
"$ref": "#/$defs/stateRef"
|
|
71
|
+
},
|
|
72
|
+
"uniqueItems": true
|
|
73
|
+
},
|
|
74
|
+
"edges": {
|
|
75
|
+
"description": "Transitions. Both endpoints must be declared nodes, so the graph closes on itself.",
|
|
76
|
+
"type": "array",
|
|
77
|
+
"items": {
|
|
78
|
+
"type": "object",
|
|
79
|
+
"additionalProperties": false,
|
|
80
|
+
"required": ["from", "trigger", "action", "condition", "to"],
|
|
81
|
+
"properties": {
|
|
82
|
+
"from": {
|
|
83
|
+
"$ref": "#/$defs/stateRef"
|
|
84
|
+
},
|
|
85
|
+
"trigger": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"minLength": 1
|
|
88
|
+
},
|
|
89
|
+
"action": {
|
|
90
|
+
"type": ["string", "null"],
|
|
91
|
+
"minLength": 1
|
|
92
|
+
},
|
|
93
|
+
"condition": {
|
|
94
|
+
"type": ["string", "null"],
|
|
95
|
+
"minLength": 1
|
|
96
|
+
},
|
|
97
|
+
"to": {
|
|
98
|
+
"$ref": "#/$defs/stateRef"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"dependencies": {
|
|
104
|
+
"description": "Rules and tokens the flow itself depends on, by exact reference.",
|
|
105
|
+
"type": "array",
|
|
106
|
+
"items": {
|
|
107
|
+
"$ref": "#/$defs/artifactRef"
|
|
108
|
+
},
|
|
109
|
+
"uniqueItems": true
|
|
110
|
+
},
|
|
111
|
+
"trace": {
|
|
112
|
+
"$ref": "#/$defs/trace"
|
|
113
|
+
},
|
|
114
|
+
"unknowns": {
|
|
115
|
+
"$ref": "#/$defs/unknowns"
|
|
116
|
+
},
|
|
117
|
+
"not_applicable": {
|
|
118
|
+
"$ref": "#/$defs/notApplicable"
|
|
119
|
+
},
|
|
120
|
+
"external": {
|
|
121
|
+
"type": "array",
|
|
122
|
+
"uniqueItems": true,
|
|
123
|
+
"items": {
|
|
124
|
+
"$ref": "#/$defs/externalDesignSystem"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"$defs": {
|
|
129
|
+
"revision": {
|
|
130
|
+
"type": "integer",
|
|
131
|
+
"minimum": 1
|
|
132
|
+
},
|
|
133
|
+
"maturity": {
|
|
134
|
+
"enum": ["outline", "handoff"]
|
|
135
|
+
},
|
|
136
|
+
"artifactRef": {
|
|
137
|
+
"type": "string",
|
|
138
|
+
"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_-]*)?$"
|
|
139
|
+
},
|
|
140
|
+
"stateRef": {
|
|
141
|
+
"description": "A screen state: `DES-001/SCR-002@r2#empty`. The anchor is required.",
|
|
142
|
+
"type": "string",
|
|
143
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})/SCR-(?:[0-9]{3}|[1-9][0-9]{3,})@r[1-9][0-9]{0,5}#[A-Za-z0-9][A-Za-z0-9_-]*$"
|
|
144
|
+
},
|
|
145
|
+
"trace": {
|
|
146
|
+
"description": "Acceptance criteria this artifact answers to. Emptiness is the maturity profile's business, not this schema's.",
|
|
147
|
+
"type": "array",
|
|
148
|
+
"items": {
|
|
149
|
+
"type": "object",
|
|
150
|
+
"additionalProperties": false,
|
|
151
|
+
"required": ["criterion", "source"],
|
|
152
|
+
"properties": {
|
|
153
|
+
"criterion": {
|
|
154
|
+
"type": "string",
|
|
155
|
+
"minLength": 1
|
|
156
|
+
},
|
|
157
|
+
"source": {
|
|
158
|
+
"type": ["string", "null"],
|
|
159
|
+
"minLength": 1
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"unknowns": {
|
|
165
|
+
"description": "Open questions, explicit. `blocking: true` is what a handoff gate refuses.",
|
|
166
|
+
"type": "array",
|
|
167
|
+
"items": {
|
|
168
|
+
"type": "object",
|
|
169
|
+
"additionalProperties": false,
|
|
170
|
+
"required": ["question", "blocking"],
|
|
171
|
+
"properties": {
|
|
172
|
+
"question": {
|
|
173
|
+
"type": "string",
|
|
174
|
+
"minLength": 1
|
|
175
|
+
},
|
|
176
|
+
"blocking": {
|
|
177
|
+
"type": "boolean"
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"notApplicable": {
|
|
183
|
+
"description": "Conditional section → reason. Only conditional sections may appear, and a reason is never empty. Essential sections cannot be waived at all.",
|
|
184
|
+
"type": "object",
|
|
185
|
+
"additionalProperties": {
|
|
186
|
+
"type": "string",
|
|
187
|
+
"minLength": 1
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
"externalDesignSystem": {
|
|
191
|
+
"description": "Where foreign rules, tokens or assets came from. A `handoff` that depends on someone else's design system pins it and keeps the subset locally (AC-PKG-09).",
|
|
192
|
+
"type": "object",
|
|
193
|
+
"additionalProperties": false,
|
|
194
|
+
"required": ["provider", "revision", "digest"],
|
|
195
|
+
"properties": {
|
|
196
|
+
"provider": {
|
|
197
|
+
"type": "string",
|
|
198
|
+
"pattern": "^DES-(?:[0-9]{3}|[1-9][0-9]{3,})$"
|
|
199
|
+
},
|
|
200
|
+
"revision": {
|
|
201
|
+
"type": "integer",
|
|
202
|
+
"minimum": 1
|
|
203
|
+
},
|
|
204
|
+
"digest": {
|
|
205
|
+
"type": "string",
|
|
206
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|